From 4c5fe45c508dc0a9f8dcf7bdc5c2ec1391726334 Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Bjarl@users.noreply.github.com> Date: Tue, 15 Oct 2024 15:36:06 -0400 Subject: [PATCH 001/274] You can now throw things from behind tables (#3537) ## About The Pull Request You can now throw things from behind flipped tables. ## Why It's Good For The Game You would think that being adjacent to a supposedly defensive thing would at least let you throw things over it. Like sandbags. Or barricades. ## Changelog :cl: add: Flipped tables actually let you throw things over them now. /:cl: --- code/game/objects/structures/table_flipped.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/game/objects/structures/table_flipped.dm b/code/game/objects/structures/table_flipped.dm index 28af5d0b63bd..8caa87b984a2 100644 --- a/code/game/objects/structures/table_flipped.dm +++ b/code/game/objects/structures/table_flipped.dm @@ -7,6 +7,7 @@ density = TRUE layer = ABOVE_MOB_LAYER opacity = FALSE + pass_flags_self = LETPASSTHROW var/table_type = /obj/structure/table /obj/structure/flippedtable/Initialize() @@ -54,6 +55,8 @@ return if(istype(exiter, /obj/projectile)) return + if(istype(exiter, /obj/item)) + return if(direction == table_dir) exiter.Bump(src) return COMPONENT_ATOM_BLOCK_EXIT From 29ff69ead0016063c0f5f4aeec425ffcd50a1c7a Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 15 Oct 2024 14:56:06 -0500 Subject: [PATCH 002/274] Automatic changelog generation for PR #3537 [ci skip] --- html/changelogs/AutoChangeLog-pr-3537.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3537.yml diff --git a/html/changelogs/AutoChangeLog-pr-3537.yml b/html/changelogs/AutoChangeLog-pr-3537.yml new file mode 100644 index 000000000000..26966e992526 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3537.yml @@ -0,0 +1,4 @@ +author: Bjarl +changes: + - {rscadd: Flipped tables actually let you throw things over them now.} +delete-after: true From ad41b29af4eb693309a933c8ded2332116a5f90c Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 16 Oct 2024 01:03:21 +0000 Subject: [PATCH 003/274] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-3361.yml | 4 --- html/changelogs/AutoChangeLog-pr-3441.yml | 4 --- html/changelogs/AutoChangeLog-pr-3446.yml | 5 ---- html/changelogs/AutoChangeLog-pr-3478.yml | 4 --- html/changelogs/AutoChangeLog-pr-3491.yml | 5 ---- html/changelogs/AutoChangeLog-pr-3508.yml | 4 --- html/changelogs/AutoChangeLog-pr-3523.yml | 4 --- html/changelogs/AutoChangeLog-pr-3532.yml | 4 --- html/changelogs/AutoChangeLog-pr-3537.yml | 4 --- html/changelogs/AutoChangeLog-pr-3539.yml | 6 ---- html/changelogs/AutoChangeLog-pr-3541.yml | 4 --- html/changelogs/AutoChangeLog-pr-3543.yml | 4 --- html/changelogs/AutoChangeLog-pr-3546.yml | 5 ---- html/changelogs/AutoChangeLog-pr-3548.yml | 4 --- html/changelogs/AutoChangeLog-pr-3551.yml | 4 --- html/changelogs/AutoChangeLog-pr-3555.yml | 4 --- html/changelogs/AutoChangeLog-pr-3556.yml | 7 ----- html/changelogs/AutoChangeLog-pr-3557.yml | 4 --- html/changelogs/archive/2024-10.yml | 35 +++++++++++++++++++++++ 19 files changed, 35 insertions(+), 80 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-3361.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3441.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3446.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3478.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3491.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3508.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3523.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3532.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3537.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3539.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3541.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3543.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3546.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3548.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3551.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3555.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3556.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3557.yml diff --git a/html/changelogs/AutoChangeLog-pr-3361.yml b/html/changelogs/AutoChangeLog-pr-3361.yml deleted file mode 100644 index 94fa273582c6..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3361.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: FalloutFalcon -changes: - - {bugfix: ghosts cannot duplicate themselves across multiple z levels.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3441.yml b/html/changelogs/AutoChangeLog-pr-3441.yml deleted file mode 100644 index 0299fb36df34..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3441.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: zimon9 -changes: - - {balance: rebalanced the probability of a grenade going off in one's hands} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3446.yml b/html/changelogs/AutoChangeLog-pr-3446.yml deleted file mode 100644 index 65e0eb3677b5..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3446.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: firebudgy -changes: - - {bugfix: 'Mudskipper windows are correctly reinforced, like other ships by the - same manufacturer.'} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3478.yml b/html/changelogs/AutoChangeLog-pr-3478.yml deleted file mode 100644 index b909ce469d5f..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3478.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Bjarl -changes: - - {rscdel: Holoparasites} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3491.yml b/html/changelogs/AutoChangeLog-pr-3491.yml deleted file mode 100644 index 6004c4799e6f..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3491.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Bjarl -changes: - - {rscadd: Holofans now have a small window before shutting down if they are deactivated - by lack of power} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3508.yml b/html/changelogs/AutoChangeLog-pr-3508.yml deleted file mode 100644 index 84fc1ea2deca..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3508.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Apogee-dev -changes: - - {balance: Valor and Vaquero have combat hardsuits for their enforcers now} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3523.yml b/html/changelogs/AutoChangeLog-pr-3523.yml deleted file mode 100644 index 15efc1037556..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3523.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Bjarl -changes: - - {rscadd: The Frontiersmen have duct taped some turrets of their own together} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3532.yml b/html/changelogs/AutoChangeLog-pr-3532.yml deleted file mode 100644 index bf3de808dd72..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3532.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Bjarl -changes: - - {balance: Syndicate smokes are now laced with stimulants instead of omnizine.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3537.yml b/html/changelogs/AutoChangeLog-pr-3537.yml deleted file mode 100644 index 26966e992526..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3537.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Bjarl -changes: - - {rscadd: Flipped tables actually let you throw things over them now.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3539.yml b/html/changelogs/AutoChangeLog-pr-3539.yml deleted file mode 100644 index 4f995cda3c61..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3539.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Sadhorizon -changes: - - {rscdel: Removed Karl Marx from the game.} - - {rscdel: Removed all the job statues.} - - {rscdel: 'Cardborg suit, human, gondola and monkey skinsuits are no longer craftable.'} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3541.yml b/html/changelogs/AutoChangeLog-pr-3541.yml deleted file mode 100644 index 4bc25ce2336d..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3541.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Sadhorizon -changes: - - {bugfix: Pubby ruin can no longer randomly have acid in airlocks.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3543.yml b/html/changelogs/AutoChangeLog-pr-3543.yml deleted file mode 100644 index 2a4d5afad200..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3543.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Gristlebee -changes: - - {bugfix: Fixes walls and an enemy spawn in the Wrecked Factory} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3546.yml b/html/changelogs/AutoChangeLog-pr-3546.yml deleted file mode 100644 index e04b2efd4af6..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3546.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Anticept -changes: - - {bugfix: blood smart-fridge selectable on smartfridge boards now when screwdrivering - them.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3548.yml b/html/changelogs/AutoChangeLog-pr-3548.yml deleted file mode 100644 index ba0e3f8a1706..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3548.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: zimon9 -changes: - - {balance: increased amount of plasma in plasma internals cargo crate} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3551.yml b/html/changelogs/AutoChangeLog-pr-3551.yml deleted file mode 100644 index 232c81139fdb..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3551.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: zimon9 -changes: - - {bugfix: fixed fauna spawning after drill malfunctions} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3555.yml b/html/changelogs/AutoChangeLog-pr-3555.yml deleted file mode 100644 index 7fe288c72bed..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3555.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Bjarl -changes: - - {rscadd: NGR turrets} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3556.yml b/html/changelogs/AutoChangeLog-pr-3556.yml deleted file mode 100644 index 80ef9859ead2..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3556.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Sadhorizon -changes: - - {tweak: Syndicate soap is now in-line with NT soap.} - - {rscdel: Syndicate tools are no longer faster. They are just reskinned normal - tools now.} - - {rscdel: Syndicate toolbox lost it's damage buff.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3557.yml b/html/changelogs/AutoChangeLog-pr-3557.yml deleted file mode 100644 index 63c3a04a151c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3557.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: firebudgy -changes: - - {rscadd: Active smoking pipe sprites for Vox.} -delete-after: true diff --git a/html/changelogs/archive/2024-10.yml b/html/changelogs/archive/2024-10.yml index c8e9f015aef7..de14222a175e 100644 --- a/html/changelogs/archive/2024-10.yml +++ b/html/changelogs/archive/2024-10.yml @@ -175,3 +175,38 @@ rye-rice: - rscadd: Various sprite improvemnts - bugfix: Boomslang no longer fits on the belt +2024-10-16: + Anticept: + - bugfix: blood smart-fridge selectable on smartfridge boards now when screwdrivering + them. + Apogee-dev: + - balance: Valor and Vaquero have combat hardsuits for their enforcers now + Bjarl: + - rscadd: NGR turrets + - rscadd: Flipped tables actually let you throw things over them now. + - rscadd: Holofans now have a small window before shutting down if they are deactivated + by lack of power + - balance: Syndicate smokes are now laced with stimulants instead of omnizine. + - rscdel: Holoparasites + - rscadd: The Frontiersmen have duct taped some turrets of their own together + FalloutFalcon: + - bugfix: ghosts cannot duplicate themselves across multiple z levels. + Gristlebee: + - bugfix: Fixes walls and an enemy spawn in the Wrecked Factory + Sadhorizon: + - bugfix: Pubby ruin can no longer randomly have acid in airlocks. + - tweak: Syndicate soap is now in-line with NT soap. + - rscdel: Syndicate tools are no longer faster. They are just reskinned normal tools + now. + - rscdel: Syndicate toolbox lost it's damage buff. + - rscdel: Removed Karl Marx from the game. + - rscdel: Removed all the job statues. + - rscdel: Cardborg suit, human, gondola and monkey skinsuits are no longer craftable. + firebudgy: + - bugfix: Mudskipper windows are correctly reinforced, like other ships by the same + manufacturer. + - rscadd: Active smoking pipe sprites for Vox. + zimon9: + - balance: increased amount of plasma in plasma internals cargo crate + - balance: rebalanced the probability of a grenade going off in one's hands + - bugfix: fixed fauna spawning after drill malfunctions From 8a952d1566f2ef17e4acfff12ab5ae3a3b01c806 Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Bjarl@users.noreply.github.com> Date: Tue, 15 Oct 2024 22:26:28 -0400 Subject: [PATCH 004/274] Removes South Bronx Paradise Bar (#3535) ## About The Pull Request as title ## Why It's Good For The Game As funny as it is I think it's kinda mean to have a trap item just. Right there ## Changelog :cl: del: South Bronx Paradise Bar /:cl: --- code/datums/diseases/parasitic_infection.dm | 50 ------------------- .../food_and_drinks/food/snacks_vend.dm | 30 ----------- code/modules/vending/snack.dm | 2 +- shiptest.dme | 1 - 4 files changed, 1 insertion(+), 82 deletions(-) delete mode 100644 code/datums/diseases/parasitic_infection.dm diff --git a/code/datums/diseases/parasitic_infection.dm b/code/datums/diseases/parasitic_infection.dm deleted file mode 100644 index 055425d9cc6f..000000000000 --- a/code/datums/diseases/parasitic_infection.dm +++ /dev/null @@ -1,50 +0,0 @@ -/datum/disease/parasite - form = "Parasite" - name = "Parasitic Infection" - max_stages = 4 - cure_text = "Surgical removal of the liver." - agent = "Consuming Live Parasites" - spread_text = "Non-Biological" - viable_mobtypes = list(/mob/living/carbon/human) - permeability_mod = 1 - desc = "If left untreated the subject will passively lose nutrients, and eventually lose their liver." - severity = DISEASE_SEVERITY_HARMFUL - disease_flags = CAN_CARRY|CAN_RESIST - spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS - required_organs = list(/obj/item/organ/liver) - bypasses_immunity = TRUE - -/datum/disease/parasite/stage_act() - . = ..() - var/mob/living/carbon/C = affected_mob - var/obj/item/organ/liver/L = C.getorgan(/obj/item/organ/liver) - if(!L) - src.cure() - C.visible_message("[C]'s liver is covered in tiny larva! They quickly shrivel and die after being exposed to the open air.") - switch(stage) - if(1) - if(prob(5)) - affected_mob.emote("cough") - if(2) - if(prob(10)) - if(prob(50)) - to_chat(affected_mob, "You feel the weight loss already!") - affected_mob.adjust_nutrition(-3) - if(3) - if(prob(20)) - if(prob(20)) - to_chat(affected_mob, "You're... REALLY starting to feel the weight loss.") - affected_mob.adjust_nutrition(-6) - if(4) - if(prob(30)) - if(affected_mob.nutrition >= 100) - if(prob(10)) - to_chat(affected_mob, "You feel like your body's shedding weight rapidly!") - affected_mob.adjust_nutrition(-12) - else - var/turf/T = get_turf(C) - to_chat(affected_mob, "You feel much, MUCH lighter!") - affected_mob.vomit(20, TRUE) - L.Remove(C) - L.forceMove(T) - src.cure() diff --git a/code/modules/food_and_drinks/food/snacks_vend.dm b/code/modules/food_and_drinks/food/snacks_vend.dm index b071add1027a..9d6470f5aec4 100644 --- a/code/modules/food_and_drinks/food/snacks_vend.dm +++ b/code/modules/food_and_drinks/food/snacks_vend.dm @@ -15,36 +15,6 @@ /*food_flags = FOOD_FINGER_FOOD*/ w_class = WEIGHT_CLASS_TINY -/obj/item/reagent_containers/food/snacks/candy/bronx - name = "South Bronx Paradise bar" - desc = "Lose weight, guaranteed! Caramel Mocha Flavor. Something about product consumption..." - icon_state = "bronx" - item_state = "candy" - trash = /obj/item/trash/candy - list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/sugar = 2, /datum/reagent/yuck = 1) - junkiness = 10 - bitesize = 10 - filling_color = "#e4d4b7" - tastes = list("candy" = 5, "weight loss" = 4, "insect larva" = 1) - foodtype = JUNKFOOD | RAW | GROSS - custom_premium_price = 800 - var/revelation = FALSE - -/obj/item/reagent_containers/food/snacks/candy/bronx/On_Consume(mob/living/eater) - . = ..() - if(ishuman(eater)) - var/mob/living/carbon/human/carl = eater - var/datum/disease/P = new /datum/disease/parasite() - carl.ForceContractDisease(P, FALSE, TRUE) - -/obj/item/reagent_containers/food/snacks/candy/bronx/examine(mob/user) - . = ..() - if(revelation == FALSE) - to_chat(user, "Geeze, you need to get to get your eyes checked. You should look again...") - desc = "Lose weight, guaranteed! Caramel Mocha Flavor! WARNING: PRODUCT NOT FIT FOR HUMAN CONSUMPTION. CONTAINS LIVE DIAMPHIDIA SPECIMENS." - name = "South Bronx Parasite bar" - revelation = TRUE - /obj/item/reagent_containers/food/snacks/sosjerky name = "\improper Scaredy's Private Reserve Beef Jerky" icon_state = "sosjerky" diff --git a/code/modules/vending/snack.dm b/code/modules/vending/snack.dm index 45d76a4754fa..cb9b6b1b9d95 100644 --- a/code/modules/vending/snack.dm +++ b/code/modules/vending/snack.dm @@ -16,7 +16,7 @@ /obj/item/storage/box/gum = 3, /obj/item/reagent_containers/food/snacks/energybar = 6, /obj/item/reagent_containers/food/snacks/syndicake = 6, - /obj/item/reagent_containers/food/snacks/candy/bronx = 1) + ) refill_canister = /obj/item/vending_refill/snack canload_access_list = list(ACCESS_KITCHEN) default_price = 60 diff --git a/shiptest.dme b/shiptest.dme index 86b9c524989a..7372fdd3f03f 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -614,7 +614,6 @@ #include "code\datums\diseases\heart_failure.dm" #include "code\datums\diseases\legionvirus.dm" #include "code\datums\diseases\magnitis.dm" -#include "code\datums\diseases\parasitic_infection.dm" #include "code\datums\diseases\parrotpossession.dm" #include "code\datums\diseases\pierrot_throat.dm" #include "code\datums\diseases\retrovirus.dm" From d36c249239ae39f8a49976b5832a4ea9d588834e Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 15 Oct 2024 21:37:00 -0500 Subject: [PATCH 005/274] Automatic changelog generation for PR #3535 [ci skip] --- html/changelogs/AutoChangeLog-pr-3535.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3535.yml diff --git a/html/changelogs/AutoChangeLog-pr-3535.yml b/html/changelogs/AutoChangeLog-pr-3535.yml new file mode 100644 index 000000000000..75570ecb113c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3535.yml @@ -0,0 +1,4 @@ +author: Bjarl +changes: + - {rscdel: South Bronx Paradise Bar} +delete-after: true From ef3efbe8d432c562e59beecdd233e572182492a5 Mon Sep 17 00:00:00 2001 From: Mark Suckerberg Date: Tue, 15 Oct 2024 21:47:32 -0500 Subject: [PATCH 006/274] More Harddel Fixes (#3569) ## About The Pull Request Fixes a few harddels that surfaced in PR #3558 ## Why It's Good For The Game Harddels are still just terrible wastes of time ## Changelog :cl: /:cl: --- code/datums/action.dm | 13 ++++------ code/datums/components/remote_materials.dm | 9 ++++--- .../objects/items/implants/implant_misc.dm | 4 +++ code/game/turfs/closed/minerals.dm | 3 +-- .../atmospherics/machinery/airalarm.dm | 3 +-- code/modules/clothing/under/accessories.dm | 4 +++ .../hostile/mining_mobs/gutlunch.dm | 22 +++++++++------- code/modules/power/singularity/emitter.dm | 1 + .../boxes_magazines/_box_magazine.dm | 4 +++ code/modules/projectiles/gun.dm | 26 ++++++++++--------- code/modules/surgery/organs/vocal_cords.dm | 11 ++++---- 11 files changed, 58 insertions(+), 42 deletions(-) diff --git a/code/datums/action.dm b/code/datums/action.dm index 9bc58c399dd4..8151f5a4103c 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -366,16 +366,13 @@ /datum/action/item_action/nano_picket_sign name = "Retext Nano Picket Sign" - var/obj/item/picket_sign/S - -/datum/action/item_action/nano_picket_sign/New(Target) - ..() - if(istype(Target, /obj/item/picket_sign)) - S = Target /datum/action/item_action/nano_picket_sign/Trigger() - if(istype(S)) - S.retext(owner) + if(!istype(target, /obj/item/picket_sign)) + return + + var/obj/item/picket_sign/sign = target + sign.retext(owner) /datum/action/item_action/adjust diff --git a/code/datums/components/remote_materials.dm b/code/datums/components/remote_materials.dm index 2f3aa79749b2..16c695fe9c06 100644 --- a/code/datums/components/remote_materials.dm +++ b/code/datums/components/remote_materials.dm @@ -39,6 +39,7 @@ handles linking back and forth. // specify explicitly in case the other component is deleted first var/atom/P = parent mat_container.retrieve_all(P.drop_location()) + mat_container = null return ..() /datum/component/remote_materials/proc/_MakeLocal() @@ -77,9 +78,11 @@ handles linking back and forth. /datum/component/remote_materials/proc/OnAttackBy(datum/source, obj/item/I, mob/user) SIGNAL_HANDLER - if (silo && istype(I, /obj/item/stack)) - if (silo.remote_attackby(parent, user, I)) - return COMPONENT_NO_AFTERATTACK + if (!silo || !istype(I, /obj/item/stack)) + return + + if (silo.remote_attackby(parent, user, I)) + return COMPONENT_NO_AFTERATTACK /datum/component/remote_materials/proc/OnMultitool(datum/source, mob/user, obj/item/I) SIGNAL_HANDLER diff --git a/code/game/objects/items/implants/implant_misc.dm b/code/game/objects/items/implants/implant_misc.dm index c4c832209bac..d8f871e1ecc4 100644 --- a/code/game/objects/items/implants/implant_misc.dm +++ b/code/game/objects/items/implants/implant_misc.dm @@ -110,6 +110,10 @@ radio.keyslot = new radio_key radio.recalculateChannels() +/obj/item/implant/radio/Destroy() + QDEL_NULL(radio) + return ..() + /obj/item/implant/radio/mining radio_key = /obj/item/encryptionkey diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm index 3970cc403d73..7b007bb98472 100644 --- a/code/game/turfs/closed/minerals.dm +++ b/code/game/turfs/closed/minerals.dm @@ -167,7 +167,6 @@ ScrapeAway() /turf/closed/mineral/ex_act(severity, target) - ..() switch(severity) if(3) if (prob(75)) @@ -177,7 +176,7 @@ gets_drilled(null, FALSE) if(1) gets_drilled(null, FALSE) - return + return ..() /turf/closed/mineral/random var/list/mineralSpawnChanceList = list(/obj/item/stack/ore/uranium = 3, /obj/item/stack/ore/diamond = 1, /obj/item/stack/ore/gold = 4, diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 236c7b040d99..a95e153c0e14 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -239,8 +239,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 27) /obj/machinery/airalarm/Destroy() SSradio.remove_object(src, frequency) - qdel(wires) - wires = null + QDEL_NULL(wires) var/area/ourarea = get_area(src) ourarea.atmosalert(FALSE, src) return ..() diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index 0d05c4e0cf7f..89cce9c24d64 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -444,6 +444,10 @@ chameleon_action.chameleon_name = "Accessory" chameleon_action.initialize_disguises() +/obj/item/clothing/accessory/holster/chameleon/Destroy() + QDEL_NULL(chameleon_action) + return ..() + /obj/item/clothing/accessory/holster/chameleon/emp_act(severity) . = ..() if(. & EMP_PROTECT_SELF) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm index ee48ed624ee4..e7257c7d39c4 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm @@ -43,12 +43,16 @@ animal_species = /mob/living/simple_animal/hostile/asteroid/gutlunch childtype = list(/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch = 100) + var/mutable_appearance/gutlunch_full_overlay + wanted_objects = list(/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/blood/gibs/, /obj/item/organ, /obj/item/reagent_containers/food/snacks/meat/slab) /mob/living/simple_animal/hostile/asteroid/gutlunch/Initialize() . = ..() - if(wanted_objects.len) - AddComponent(/datum/component/udder, /obj/item/udder/gutlunch, CALLBACK(src, PROC_REF(regenerate_icons)), CALLBACK(src, PROC_REF(regenerate_icons))) + if(!length(wanted_objects)) + return + AddComponent(/datum/component/udder, /obj/item/udder/gutlunch, CALLBACK(src, TYPE_PROC_REF(/atom/movable, update_overlays)), CALLBACK(src, TYPE_PROC_REF(/atom/movable, update_overlays))) + gutlunch_full_overlay = mutable_appearance(icon, "gl_full") /mob/living/simple_animal/hostile/asteroid/gutlunch/CanAttack(atom/the_target) // Gutlunch-specific version of CanAttack to handle stupid stat_exclusive = true crap so we don't have to do it for literally every single simple_animal/hostile except the two that spawn in lavaland if(isturf(the_target) || !the_target || the_target.type == /atom/movable/lighting_object) // bail out on invalids @@ -72,14 +76,12 @@ return FALSE -/mob/living/simple_animal/hostile/asteroid/gutlunch/regenerate_icons(new_udder_volume, max_udder_volume) - cut_overlays() - var/static/gutlunch_full_overlay - if(isnull(gutlunch_full_overlay)) - gutlunch_full_overlay = iconstate2appearance(icon, "gl_full") - if(new_udder_volume == max_udder_volume) - add_overlay(gutlunch_full_overlay) - ..() +/mob/living/simple_animal/hostile/asteroid/gutlunch/update_overlays(new_udder_volume, max_udder_volume) + . = ..() + if(new_udder_volume != max_udder_volume) + return + + . += gutlunch_full_overlay //Male gutlunch. They're smaller and more colorful! /mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 73920780bef3..a6cd227550ec 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -119,6 +119,7 @@ log_game("Emitter deleted at [AREACOORD(T)]") investigate_log("deleted at [AREACOORD(T)]", INVESTIGATE_SINGULO) QDEL_NULL(sparks) + QDEL_NULL(wires) return ..() /obj/machinery/power/emitter/update_icon_state() diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 57fb71d17f32..73a626721f4b 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -73,6 +73,10 @@ for(var/i = max(1, stored_ammo.len), i <= max_ammo, i++) stored_ammo += new round_check(src) +/obj/item/ammo_box/Destroy() + stored_ammo.Cut() + return ..() + ///gets a round from the magazine, if keep is TRUE the round will stay in the gun /obj/item/ammo_box/proc/get_round(keep = FALSE) if(!stored_ammo.len) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index f848018a6115..ae6131981fd9 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -262,8 +262,6 @@ */ ///The types of attachments allowed, a list of types. SUBTYPES OF AN ALLOWED TYPE ARE ALSO ALLOWED var/list/valid_attachments = list() - ///Reference to our attachment holder to prevent subtypes having to call GetComponent - var/datum/component/attachment_holder/attachment_holder ///Number of attachments that can fit on a given slot var/list/slot_available = ATTACHMENT_DEFAULT_SLOT_AVAILABLE ///Offsets for the slots on this gun. should be indexed by SLOT and then by X/Y @@ -339,7 +337,7 @@ /obj/item/gun/ComponentInitialize() . = ..() - attachment_holder = AddComponent(/datum/component/attachment_holder, slot_available, valid_attachments, slot_offsets, default_attachments) + AddComponent(/datum/component/attachment_holder, slot_available, valid_attachments, slot_offsets, default_attachments) AddComponent(/datum/component/two_handed) /// triggered on wield of two handed item @@ -384,6 +382,8 @@ QDEL_NULL(azoom) if(muzzle_flash) QDEL_NULL(muzzle_flash) + if(magazine) + QDEL_NULL(magazine) return ..() /obj/item/gun/handle_atom_del(atom/A) @@ -1008,18 +1008,21 @@ check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED|AB_CHECK_IMMOBILE|AB_CHECK_LYING icon_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "sniper_zoom" - var/obj/item/gun/gun = null /datum/action/toggle_scope_zoom/Trigger() + if(!istype(target, /obj/item/gun) || !..()) + return + + var/obj/item/gun/gun = target gun.zoom(owner, owner.dir) -/datum/action/toggle_scope_zoom/IsAvailable() - . = ..() - if(!. && gun) - gun.zoom(owner, owner.dir, FALSE) +/datum/action/toggle_scope_zoom/Remove(mob/user) + if(!istype(target, /obj/item/gun)) + return ..() + + var/obj/item/gun/gun = target + gun.zoom(user, user.dir, FALSE) -/datum/action/toggle_scope_zoom/Remove(mob/living/L) - gun.zoom(L, L.dir, FALSE) ..() /obj/item/gun/proc/rotate(atom/thing, old_dir, new_dir) @@ -1056,8 +1059,7 @@ return if(zoomable) - azoom = new() - azoom.gun = src + azoom = new(src) /obj/item/gun/proc/build_firemodes() if(FIREMODE_FULLAUTO in gun_firemodes) diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index b86c5b8b86ce..3ec636e41b5f 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -35,13 +35,13 @@ /datum/action/item_action/organ_action/colossus name = "Voice of God" - var/obj/item/organ/vocal_cords/colossus/cords = null - -/datum/action/item_action/organ_action/colossus/New() - ..() - cords = target /datum/action/item_action/organ_action/colossus/IsAvailable() + if(!istype(target, /obj/item/organ/vocal_cords/colossus)) + return FALSE + + var/obj/item/organ/vocal_cords/colossus/cords = target + if(world.time < cords.next_command) return FALSE if(!owner) @@ -58,6 +58,7 @@ /datum/action/item_action/organ_action/colossus/Trigger() . = ..() if(!IsAvailable()) + var/obj/item/organ/vocal_cords/colossus/cords = target if(world.time < cords.next_command) to_chat(owner, "You must wait [DisplayTimeText(cords.next_command - world.time)] before Speaking again.") return From ac84b9cb15b0f88cf94106b550a7d3a932c1a139 Mon Sep 17 00:00:00 2001 From: Gristlebee <56049844+Gristlebee@users.noreply.github.com> Date: Wed, 16 Oct 2024 11:19:49 -0700 Subject: [PATCH 007/274] Icemoon Ruin: SRM Ice Lodge (#3291) ## About The Pull Request Adds a new ruin, the Ice Lodge! Formerly an SRM settlement, Frontiersmen have since come in and taken it over for their own use.
Screenshots (Updated as of 05/09)
![image](https://github.com/user-attachments/assets/d950e34e-baa2-4f38-89fa-ff967b52a088) ![image](https://github.com/user-attachments/assets/937f68f9-84b3-4958-9996-78a397a0f70a) ![icelodgenew](https://github.com/user-attachments/assets/dc34a037-ba30-473b-ba31-6bfab0befdce)
Adds two new Frontiersmen mobs based off the new roles, flametroopers and surgeons. Flametroopers will rush enemies and spray fire at their enemies. Surgeons will fire syringes and attempt to sedate their enemies. Modifies fireline code to support igniting tiles as an option. Adds a var to hostile mob AI, shoot_point_blank. If enabled ranged mobs can shoot their guns at melee range instead of melee attacking if possible. Deletes the cat butcher since the Surgeon fills the same niche and being much less questionable. Fences no longer call update fence status on initialize. All this did was make closed fence doors spawn open and open fence doors spawn closed. Adds gunpowder barrels, broken display cases and random chemical jug spawners, SRM corpse spawners for use in the ruin. Adds a var for bullets, grown items, and nutrient bottles (auto_scatter) so you can choose whether they scatter on initialize. Fixes the pathing for some internals pathed frontiersmen simple mobs. ## Why It's Good For The Game New ruins are good and the new frontiersmen simple mobs will hopefully diversify the enemy roster nicely. The cat butcher is cruft, and won't be missed. ## Changelog :cl: add: Ice Lodge Ruin Map and areas add: Simple Mob Frontiersmen Flametrooper and Surgeon add: shoot_point_blank option for simple mobs add: dragon_fire_line supports igniting tiles add: broken display case, gunpowder barrel, SRM corpse spawners, chemical jug spawners del: Cat Butcher fix: Frontiersmen simplemob pathing fix: Fence doors spawning open when they should be closed and vice versa code: scattering can be disabled with auto_scatter var for bullets, grown items and nutrient bottles /:cl: --------- Signed-off-by: Theos Co-authored-by: Theos --- .../IceRuins/icemoon_ice_lodge.dmm | 5838 +++++++++++++++++ code/datums/ruins/icemoon.dm | 8 + code/game/area/areas/ruins/icemoon.dm | 22 + .../game/objects/effects/spawners/lootdrop.dm | 15 + code/game/objects/structures/displaycase.dm | 5 + code/game/objects/structures/fence.dm | 5 - code/game/turfs/open/floor/plating/icemoon.dm | 24 + code/modules/hydroponics/fermenting_barrel.dm | 8 + code/modules/hydroponics/growninedible.dm | 7 +- code/modules/hydroponics/hydroitemdefines.dm | 6 +- .../mob/living/simple_animal/corpse.dm | 30 + .../living/simple_animal/hostile/hostile.dm | 31 +- .../hostile/human/cat_butcher.dm | 86 - .../hostile/human/frontiersman.dm | 67 +- .../simple_animal/hostile/megafauna/drake.dm | 35 +- .../hostile/mining_mobs/ice_whelp.dm | 2 +- code/modules/paperwork/paper_premade.dm | 9 + .../projectiles/ammunition/_ammo_casing.dm | 7 +- icons/mob/simple_frontiersman.dmi | Bin 29244 -> 41395 bytes shiptest.dme | 1 - 20 files changed, 6072 insertions(+), 134 deletions(-) create mode 100644 _maps/RandomRuins/IceRuins/icemoon_ice_lodge.dmm delete mode 100644 code/modules/mob/living/simple_animal/hostile/human/cat_butcher.dm diff --git a/_maps/RandomRuins/IceRuins/icemoon_ice_lodge.dmm b/_maps/RandomRuins/IceRuins/icemoon_ice_lodge.dmm new file mode 100644 index 000000000000..87fc7ea3d267 --- /dev/null +++ b/_maps/RandomRuins/IceRuins/icemoon_ice_lodge.dmm @@ -0,0 +1,5838 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/chair/wood, +/turf/open/floor/wood/ebony{ + icon_state = "wood-broken2" + }, +/area/ruin/powered/icemoon/lodge/residential) +"ag" = ( +/obj/effect/turf_decal/stoneborder{ + dir = 1 + }, +/obj/effect/turf_decal/stoneborder, +/obj/machinery/shower{ + dir = 8 + }, +/obj/item/soap/homemade, +/obj/item/bikehorn/rubberducky, +/obj/structure/curtain/bounty, +/obj/machinery/shower{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ruin/powered/icemoon/lodge/residential) +"al" = ( +/obj/structure/flora/grass/brown, +/obj/item/restraints/legcuffs/beartrap{ + armed = 1 + }, +/turf/open/floor/plating/asteroid/icerock, +/area/overmap_encounter/planetoid/cave/explored) +"am" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 8 + }, +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/rifle/internals/neutered, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/residential) +"ao" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/item/clothing/suit/space/hardsuit/security/independent/frontier, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/gear_room) +"aF" = ( +/turf/open/floor/plasteel/stairs/wood/icemoon{ + dir = 4 + }, +/area/overmap_encounter/planetoid/cave/explored) +"aJ" = ( +/turf/open/floor/carpet/black, +/area/ruin/powered/icemoon/lodge/mainhall) +"aL" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/open/floor/wood/mahogany{ + icon_state = "wood-broken4" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"aV" = ( +/obj/item/rack_parts, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/rust, +/area/ruin/powered/icemoon/lodge/mainhall) +"aZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/punji_sticks, +/obj/effect/mob_spawn/human/corpse/frontier, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken6" + }, +/area/ruin/powered/icemoon/lodge/cellar) +"bb" = ( +/turf/open/floor/plating/asteroid/icerock, +/area/overmap_encounter/planetoid/cave/explored) +"bk" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/gear_room) +"bv" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/structure/destructible/tribal_torch/lit, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/montagne_office) +"bB" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 6 + }, +/obj/structure/destructible/tribal_torch/lit{ + pixel_y = 0; + pixel_x = 10 + }, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/gear_room) +"bC" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"bG" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/contraband/backdoor_xeno_babes_6{ + pixel_y = 0; + pixel_x = 30 + }, +/obj/item/reagent_containers/food/drinks/bottle/absinthe{ + pixel_x = -5; + pixel_y = 12 + }, +/obj/item/reagent_containers/food/drinks/bottle/amaretto{ + pixel_y = 10; + pixel_x = 7 + }, +/obj/item/reagent_containers/food/drinks/bottle/kahlua{ + pixel_x = 10; + pixel_y = 1 + }, +/obj/item/storage/pill_bottle/happy, +/obj/item/reagent_containers/pill/aranesp{ + pixel_y = -5; + pixel_x = -2 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"bK" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"bL" = ( +/obj/effect/turf_decal/corner/opaque/blue/diagonal, +/obj/effect/turf_decal/corner/opaque/blue/diagonal, +/obj/structure/table/optable, +/obj/item/restraints/handcuffs/cable/zipties/used, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plasteel/white, +/area/ruin/powered/icemoon/lodge/residential) +"ca" = ( +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"cd" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/icemoon{ + icon_state = "wood-broken" + }, +/area/overmap_encounter/planetoid/cave/explored) +"cl" = ( +/obj/machinery/hydroponics/soil, +/turf/open/floor/ship/dirt/dark, +/area/ruin/powered/icemoon/lodge/residential) +"cy" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/gear_room) +"cA" = ( +/obj/effect/turf_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/trash/popcorn, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"cS" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 6 + }, +/turf/open/floor/wood/ebony/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"cW" = ( +/obj/effect/turf_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"da" = ( +/obj/structure/railing{ + layer = 3.1 + }, +/turf/open/floor/plating/asteroid/snow/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"dc" = ( +/obj/structure/fence/door{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/icerock/cracked, +/area/overmap_encounter/planetoid/cave/explored) +"dd" = ( +/obj/effect/mob_spawn/human/corpse/srm/hunter, +/turf/open/floor/grass/ship/jungle, +/area/ruin/powered/icemoon/lodge/residential) +"dl" = ( +/obj/effect/turf_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/crayon{ + icon_state = "skull"; + pixel_x = 4; + pixel_y = -1 + }, +/obj/item/paper/crumpled/bloody/fluff/ruin/icemoon/cellar_warning{ + pixel_x = -12 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"dn" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/gear_room) +"ds" = ( +/obj/item/roastingstick, +/turf/open/floor/grass/ship/jungle, +/area/ruin/powered/icemoon/lodge/residential) +"dA" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/montagne_office) +"dO" = ( +/turf/closed/wall/mineral/wood, +/area/overmap_encounter/planetoid/cave/explored) +"dT" = ( +/obj/effect/turf_decal/corner/opaque/blue/diagonal, +/obj/structure/table/wood, +/obj/item/melee/baton/cattleprod/loaded, +/obj/item/storage/backpack/duffelbag/med/surgery, +/turf/open/floor/plasteel/white, +/area/ruin/powered/icemoon/lodge/residential) +"dV" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken6" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"dZ" = ( +/obj/structure/closet/cabinet{ + name = "broken shadow's locker"; + desc = "The closet of equipment and attire for the aspiring shadow. Or whichever guy broke this closet's lock." + }, +/obj/item/clothing/suit/armor/roumain/shadow, +/obj/item/clothing/head/cowboy/sec/roumain/shadow, +/obj/item/clothing/under/suit/roumain, +/obj/item/flashlight/lantern, +/obj/effect/decal/cleanable/shreds{ + pixel_y = -14 + }, +/obj/item/melee/knife/hunting, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/gear_room) +"eg" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken" + }, +/area/ruin/powered/icemoon/lodge/residential) +"ev" = ( +/obj/item/trash/boritos, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"ey" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/flame/neuter, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/gear_room) +"eC" = ( +/obj/item/clothing/head/bearpelt{ + pixel_y = 10 + }, +/obj/structure/table/wood, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"eK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/snow{ + dir = 1 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"eU" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/residential) +"eW" = ( +/obj/effect/turf_decal/siding/blue, +/obj/structure/destructible/tribal_torch/lit, +/turf/open/floor/plasteel/white, +/area/ruin/powered/icemoon/lodge/residential) +"fa" = ( +/obj/effect/turf_decal/weather/snow{ + dir = 4 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"fe" = ( +/obj/item/bedsheet/random, +/obj/effect/turf_decal/siding/wood, +/obj/structure/bed{ + icon_state = "dirty_mattress" + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"fg" = ( +/obj/structure/chair/wood/wings{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/human/frontier/internals, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"fn" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/residential) +"fu" = ( +/mob/living/simple_animal/hostile/human/frontier/internals, +/turf/open/floor/ship/dirt/dark, +/area/ruin/powered/icemoon/lodge/residential) +"fw" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/montagne_office) +"fA" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white, +/area/ruin/powered/icemoon/lodge/residential) +"fF" = ( +/obj/structure/table/wood, +/obj/item/trash/syndi_cakes{ + pixel_y = 4; + pixel_x = -2 + }, +/turf/open/floor/carpet/black, +/area/ruin/powered/icemoon/lodge/mainhall) +"fI" = ( +/obj/structure/chair/wood/wings{ + dir = 4 + }, +/turf/open/floor/carpet/red_gold, +/area/ruin/powered/icemoon/lodge/montagne_office) +"fX" = ( +/obj/effect/decal/cleanable/crayon{ + icon_state = "shotgun"; + pixel_x = 4; + pixel_y = -9; + paint_colour = "#FF0000" + }, +/turf/closed/indestructible/wood, +/area/ruin/powered/icemoon/lodge/gear_room) +"gp" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/item/ammo_box/magazine/c22lr_pounder_pan, +/obj/item/storage/box/ammo/c22lr{ + pixel_y = 12; + pixel_x = -6 + }, +/obj/item/storage/box/ammo/c22lr{ + pixel_y = 12; + pixel_x = 14 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/gear_room) +"gr" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/item/ammo_box/magazine/c45_firestorm_mag/pan{ + start_empty = 1 + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"gs" = ( +/obj/structure/destructible/tribal_torch/lit, +/turf/open/floor/plating/asteroid/snow/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"gz" = ( +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen/fountain/captain, +/turf/open/floor/carpet/red_gold, +/area/ruin/powered/icemoon/lodge/montagne_office) +"gI" = ( +/turf/closed/indestructible/wood, +/area/ruin/powered/icemoon/lodge/gear_room) +"gR" = ( +/obj/structure/chair/pew{ + dir = 1 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"hj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/icemoon{ + icon_state = "wood-broken5" + }, +/area/overmap_encounter/planetoid/cave/explored) +"hs" = ( +/obj/effect/turf_decal/spline/fancy/wood, +/obj/effect/decal/cleanable/food/tomato_smudge, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"hz" = ( +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/skm/internals/neutered{ + check_friendly_fire = 1; + retreat_distance = 3; + minimum_distance = 2 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet, +/area/ruin/powered/icemoon/lodge/residential) +"hI" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 8 + }, +/turf/open/floor/wood/ebony{ + icon_state = "wood-broken4" + }, +/area/ruin/powered/icemoon/lodge/residential) +"ib" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"ii" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/destructible/tribal_torch/lit, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"ik" = ( +/obj/structure/fireplace, +/obj/structure/fluff/paper/stack{ + dir = 5; + layer = 2.79; + pixel_y = 4 + }, +/obj/structure/fluff/paper/stack{ + dir = 4; + pixel_y = 9; + layer = 2.79 + }, +/obj/structure/fluff/paper/stack{ + dir = 1 + }, +/obj/effect/decal/cleanable/ash/large{ + pixel_y = -10 + }, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"iw" = ( +/turf/open/floor/plating/ice/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"iB" = ( +/obj/item/mine/proximity/explosive/live{ + layer = 2.8 + }, +/obj/structure/statue/snow/snowman, +/turf/open/floor/plating/asteroid/icerock, +/area/overmap_encounter/planetoid/cave/explored) +"iE" = ( +/obj/item/toy/plush/moth/punished{ + name = "Flufftunato"; + desc = "For the love of god Mothtresor!"; + pixel_y = 9 + }, +/obj/structure/fermenting_barrel, +/turf/open/floor/plating/asteroid/icerock/temperate, +/area/overmap_encounter/planetoid/cave/explored) +"iG" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/mahogany{ + icon_state = "wood-broken3" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"iH" = ( +/obj/effect/decal/cleanable/crayon{ + icon_state = "+"; + pixel_x = 12; + pixel_y = -1; + paint_colour = "#ADD8E6" + }, +/turf/closed/wall/mineral/wood, +/area/ruin/powered/icemoon/lodge/residential) +"je" = ( +/obj/structure/table/wood, +/obj/item/modular_computer/laptop, +/turf/open/floor/carpet/red_gold, +/area/ruin/powered/icemoon/lodge/montagne_office) +"jk" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 10 + }, +/obj/machinery/iv_drip, +/obj/effect/decal/cleanable/vomit/old, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white, +/area/ruin/powered/icemoon/lodge/residential) +"jx" = ( +/obj/structure/guncloset, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/item/gun/ballistic/shotgun/flamingarrow, +/obj/item/gun/ballistic/revolver/shadow, +/obj/item/gun/ballistic/automatic/smg/pounder, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/gear_room) +"jB" = ( +/obj/structure/flora/rock/pile/icy{ + icon_state = "icemoonrock3" + }, +/turf/open/floor/plating/asteroid/snow/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"jD" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/obj/machinery/door/airlock/wood{ + dir = 4 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"jM" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/glass/filter{ + pixel_y = 14; + pixel_x = -6 + }, +/obj/item/reagent_containers/food/drinks/sillycup{ + pixel_x = 4; + pixel_y = 6; + name = "paper sieve"; + desc = "A paper seive for funneling gunpowder." + }, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"jP" = ( +/obj/structure/railing/wood{ + dir = 10 + }, +/obj/structure/destructible/tribal_torch/lit, +/turf/open/floor/wood/icemoon{ + icon_state = "wood-broken7" + }, +/area/overmap_encounter/planetoid/cave/explored) +"jR" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/breakawayflask/vintage/hearthwine{ + pixel_x = 6; + pixel_y = 12 + }, +/obj/item/reagent_containers/food/drinks/breakawayflask/vintage/icewine{ + pixel_x = -6; + pixel_y = 12 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/cellar) +"jS" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/item/trash/plate{ + pixel_y = 8; + pixel_x = 10 + }, +/obj/item/trash/plate{ + pixel_y = 10; + pixel_x = 10 + }, +/obj/item/trash/plate{ + pixel_y = 12; + pixel_x = 10 + }, +/obj/item/trash/plate{ + pixel_y = 14; + pixel_x = 10 + }, +/obj/effect/decal/cleanable/garbage, +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"ka" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/item/kirbyplants{ + icon_state = "plant-25"; + pixel_y = 12; + pixel_x = -2 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/montagne_office) +"kl" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"ko" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"kq" = ( +/obj/structure/chair/wood/wings, +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/human/frontier/ranged/officer/internals, +/turf/open/floor/carpet/black, +/area/ruin/powered/icemoon/lodge/mainhall) +"kG" = ( +/obj/structure/railing/wood, +/obj/structure/chair/wood/wings{ + dir = 8 + }, +/obj/effect/decal/cleanable/vomit/old, +/turf/open/floor/wood/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"kX" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/gear_room) +"kZ" = ( +/obj/structure/fluff/fokoff_sign{ + desc = "A crudsely-made sign with the words 'fok of' written in some sort of red paint." + }, +/turf/open/floor/plating/asteroid/icerock, +/area/overmap_encounter/planetoid/cave/explored) +"lg" = ( +/obj/structure/flora/ash/puce, +/turf/open/floor/plating/asteroid/icerock, +/area/overmap_encounter/planetoid/cave/explored) +"lh" = ( +/obj/structure/flora/grass/jungle/b, +/turf/open/floor/grass/ship/jungle, +/area/ruin/powered/icemoon/lodge/residential) +"lE" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/crayon, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"lJ" = ( +/obj/structure/flora/grass/green, +/obj/item/mine/pressure/explosive/rusty/live, +/turf/open/floor/plating/asteroid/icerock, +/area/overmap_encounter/planetoid/cave/explored) +"lM" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 5 + }, +/obj/structure/closet/crate/bin, +/obj/item/storage/firstaid/roumain, +/obj/item/reagent_containers/food/snacks/grown/ash_flora/puce, +/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf, +/obj/item/reagent_containers/glass/mortar, +/obj/item/disk/holodisk/roumain, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white, +/area/ruin/powered/icemoon/lodge/residential) +"lU" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/machinery/door/airlock/wood{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/cellar) +"mc" = ( +/obj/machinery/door/airlock/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"mj" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"ms" = ( +/obj/structure/rack, +/obj/item/gun/ballistic/shotgun/brimstone, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"mz" = ( +/obj/structure/destructible/tribal_torch/lit, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"mF" = ( +/obj/structure/rack, +/obj/item/clothing/suit/armor/roumain{ + pixel_x = 6; + pixel_y = 3 + }, +/obj/item/clothing/suit/armor/roumain{ + pixel_x = 6 + }, +/obj/item/clothing/head/cowboy/sec/roumain{ + pixel_x = -6; + pixel_y = -3 + }, +/obj/item/clothing/head/cowboy/sec/roumain{ + pixel_x = -6; + pixel_y = 6 + }, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"mH" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"mI" = ( +/obj/structure/table/wood, +/obj/item/stack/sheet/hairlesshide, +/obj/item/stack/sheet/hairlesshide, +/obj/item/stack/sheet/hairlesshide, +/obj/item/stack/sheet/hairlesshide, +/obj/item/stack/sheet/cotton/durathread, +/obj/item/stack/sheet/cotton/durathread, +/obj/item/stack/sheet/cotton/durathread, +/obj/item/stack/sheet/cotton/durathread, +/obj/item/stack/sheet/cotton/durathread, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"mL" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow{ + dir = 6 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"mP" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/shoes/jackboots, +/obj/item/clothing/head/frontier/peaked, +/obj/item/clothing/suit/armor/frontier, +/obj/item/clothing/under/frontiersmen/officer, +/obj/item/ammo_box/magazine/m9mm_mauler, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/montagne_office) +"nc" = ( +/obj/effect/turf_decal/stoneborder, +/obj/effect/turf_decal/stoneborder{ + dir = 1 + }, +/obj/structure/toilet{ + dir = 4; + pixel_x = -6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/destructible/tribal_torch/lit{ + pixel_y = 20 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ruin/powered/icemoon/lodge/residential) +"nd" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken3" + }, +/area/ruin/powered/icemoon/lodge/cellar) +"ne" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, +/turf/open/floor/wood/ebony{ + icon_state = "wood-broken4" + }, +/area/ruin/powered/icemoon/lodge/residential) +"nm" = ( +/obj/effect/turf_decal/corner/opaque/blue/diagonal, +/obj/structure/closet/crate/freezer, +/obj/item/organ/ears, +/obj/item/organ/eyes, +/obj/item/organ/heart, +/obj/item/organ/lungs, +/obj/item/organ/liver, +/obj/item/organ/stomach, +/obj/item/clothing/suit/toggle/labcoat/roumain_med, +/obj/item/clothing/head/cowboy/sec/roumain/med, +/obj/item/reagent_containers/blood/random, +/obj/item/reagent_containers/blood/random, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/plasteel/white, +/area/ruin/powered/icemoon/lodge/residential) +"no" = ( +/obj/structure/table/wood, +/obj/machinery/fax/ruin, +/turf/open/floor/carpet/red_gold, +/area/ruin/powered/icemoon/lodge/montagne_office) +"nr" = ( +/obj/effect/decal/cleanable/crayon{ + icon_state = "nay"; + pixel_y = -8; + pixel_x = 8; + paint_colour = "#FF0000" + }, +/obj/effect/turf_decal/weather/snow{ + dir = 8 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"nD" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 1 + }, +/obj/machinery/door/airlock/wood{ + name = "Greenhouse" + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"nQ" = ( +/obj/effect/turf_decal/weather/snow{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"nS" = ( +/obj/structure/bookcase, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"oa" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/montagne_office) +"ot" = ( +/obj/effect/turf_decal/weather/snow{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"ou" = ( +/obj/structure/railing/wood, +/obj/structure/chair/wood/wings{ + dir = 4 + }, +/turf/open/floor/wood/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"oC" = ( +/turf/open/floor/carpet, +/area/ruin/powered/icemoon/lodge/residential) +"oT" = ( +/obj/structure/flora/ash/garden/frigid, +/turf/open/floor/plating/asteroid/snow/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"pf" = ( +/obj/item/restraints/legcuffs/beartrap{ + armed = 1 + }, +/obj/item/kirbyplants, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"pi" = ( +/obj/structure/destructible/tribal_torch/lit, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"px" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/destructible/tribal_torch/lit{ + pixel_y = 18 + }, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken7" + }, +/area/ruin/powered/icemoon/lodge/residential) +"pG" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/restraints/legcuffs/beartrap{ + armed = 1 + }, +/obj/effect/gibspawner/human/bodypartless, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"pK" = ( +/obj/effect/turf_decal/siding/brown, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"pS" = ( +/obj/structure/noticeboard{ + name = "trophy board"; + desc = "A board for hanging trophies upon." + }, +/obj/item/clothing/mask/rat/bear{ + pixel_y = -2; + name = "bear head"; + desc = "A taxidermied bear head for mounting on a headboard. You swear it's still staring at you." + }, +/turf/closed/wall/mineral/wood, +/area/ruin/powered/icemoon/lodge/montagne_office) +"qb" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/candle/tribal_torch, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/gun/ballistic/automatic/smg/firestorm{ + spawnwithmagazine = 0 + }, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken4" + }, +/area/ruin/powered/icemoon/lodge/cellar) +"qd" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 8 + }, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/gear_room) +"qg" = ( +/obj/structure/table/greyscale, +/obj/effect/turf_decal/weather/snow, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"qr" = ( +/obj/item/target/alien, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"qD" = ( +/obj/structure/fence/door, +/turf/open/floor/plating/asteroid/icerock, +/area/overmap_encounter/planetoid/cave/explored) +"qH" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/closet/crate/freezer, +/obj/item/reagent_containers/food/snacks/meat/slab/bear, +/obj/item/reagent_containers/food/snacks/meat/slab/bear, +/obj/item/reagent_containers/food/snacks/meat/slab/bear, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"qJ" = ( +/obj/item/mine/pressure/explosive/rusty/live, +/turf/open/floor/plating/asteroid/icerock, +/area/overmap_encounter/planetoid/cave/explored) +"qK" = ( +/obj/effect/turf_decal/stoneborder{ + dir = 1 + }, +/obj/effect/turf_decal/stoneborder, +/obj/effect/decal/cleanable/dirt, +/obj/structure/mirror{ + pixel_y = 33; + pixel_x = 2 + }, +/obj/structure/sink{ + pixel_x = 2; + pixel_y = 20 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ruin/powered/icemoon/lodge/residential) +"qN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/door/airlock/wood, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"qO" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony{ + icon_state = "wood-broken4" + }, +/area/ruin/powered/icemoon/lodge/residential) +"qR" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"qY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"rm" = ( +/turf/open/floor/ship/dirt/dark, +/area/ruin/powered/icemoon/lodge/residential) +"rs" = ( +/obj/structure/falsewall/wood, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"rx" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/item/storage/belt/security/military/frontiersmen{ + pixel_y = -2 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/melee/knife/survival{ + pixel_y = 10; + pixel_x = 3 + }, +/obj/item/melee/knife/survival{ + pixel_y = 10; + pixel_x = -7 + }, +/obj/item/melee/knife/survival{ + pixel_y = 10; + pixel_x = 13 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/gear_room) +"rF" = ( +/obj/structure/flora/junglebush, +/turf/open/floor/ship/dirt/dark, +/area/ruin/powered/icemoon/lodge/residential) +"rO" = ( +/obj/item/broken_bottle{ + pixel_x = 15; + pixel_y = 4 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"rS" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/icerock, +/area/overmap_encounter/planetoid/cave/explored) +"rT" = ( +/obj/effect/turf_decal/weather/snow{ + dir = 1 + }, +/obj/item/trash/popcorn, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"rW" = ( +/obj/structure/chair/wood/wings{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/powered/icemoon/lodge/mainhall) +"rZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/gear_room) +"sc" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 4 + }, +/turf/open/floor/wood/ebony/icemoon{ + icon_state = "wood-broken2" + }, +/area/overmap_encounter/planetoid/cave/explored) +"sd" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 10 + }, +/turf/open/floor/wood/ebony/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"sk" = ( +/obj/effect/decal/cleanable/oil/slippery, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/gear_room) +"st" = ( +/obj/structure/closet/secure_closet/medicalsrm, +/obj/item/sensor_device, +/obj/item/clothing/suit/frontiersmen, +/obj/item/clothing/head/frontier, +/obj/item/clothing/gloves/color/latex, +/obj/item/clothing/mask/surgical, +/obj/effect/spawner/lootdrop/chem_jug, +/obj/effect/spawner/lootdrop/chem_jug, +/obj/effect/spawner/lootdrop/chem_jug, +/obj/effect/spawner/lootdrop/chem_jug, +/obj/effect/turf_decal/corner/opaque/blue, +/obj/effect/turf_decal/corner/opaque/neutral{ + dir = 4 + }, +/obj/item/clothing/neck/stethoscope, +/turf/open/floor/plating/rust, +/area/ruin/powered/icemoon/lodge/residential) +"sx" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/montagne_office) +"sD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/snow, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"sG" = ( +/obj/structure/railing, +/turf/open/floor/plating/asteroid/snow/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"sJ" = ( +/obj/structure/flora/rock/pile/icy{ + icon_state = "icemoonrock3" + }, +/turf/open/floor/plating/asteroid/icerock, +/area/overmap_encounter/planetoid/cave/explored) +"sO" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken7" + }, +/area/ruin/powered/icemoon/lodge/cellar) +"sR" = ( +/obj/structure/table/wood, +/obj/item/paper/crumpled/bloody/fluff/ruin/icemoon/tally_sheet{ + pixel_x = -4 + }, +/obj/item/pen{ + pixel_x = 8 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"sW" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"sX" = ( +/obj/effect/turf_decal/weather/snow, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"sY" = ( +/obj/effect/turf_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/vomit/old{ + icon_state = "vomit_4"; + pixel_x = -1; + pixel_y = -19 + }, +/turf/open/floor/wood/mahogany{ + icon_state = "wood-broken7" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"ti" = ( +/obj/item/cultivator/rake, +/turf/open/floor/grass/ship/jungle, +/area/ruin/powered/icemoon/lodge/residential) +"tl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/neutral{ + dir = 9 + }, +/turf/open/floor/plating/rust, +/area/ruin/powered/icemoon/lodge/residential) +"tn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/trash/can{ + pixel_x = -4; + pixel_y = 5 + }, +/obj/item/trash/can{ + pixel_y = -4; + pixel_x = 6 + }, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"tq" = ( +/obj/effect/turf_decal/spline/fancy/wood, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/mahogany{ + icon_state = "wood-broken2" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"tr" = ( +/obj/effect/turf_decal/spline/fancy/wood, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/montagne_office) +"tx" = ( +/turf/open/floor/plasteel/stairs/wood/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"ty" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"tD" = ( +/obj/structure/table/wood, +/obj/item/stack/sheet/cotton/cloth/ten, +/obj/item/scalpel{ + name = "leather knife"; + desc = "A sharpened leather knife, used for leatherwork." + }, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"tG" = ( +/obj/effect/decal/cleanable/oil/slippery, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/turf/open/floor/plasteel/stairs/wood{ + dir = 8 + }, +/area/ruin/powered/icemoon/lodge/cellar) +"tL" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"tN" = ( +/obj/item/chair/wood{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/powered/icemoon/lodge/mainhall) +"tT" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"tW" = ( +/mob/living/simple_animal/hostile/human/frontier/ranged/internals/neutered{ + minimum_distance = 2; + retreat_distance = 2; + check_friendly_fire = 1 + }, +/obj/effect/turf_decal/weather/snow{ + dir = 1 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"tX" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/item/trash/semki, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"ud" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"um" = ( +/obj/structure/displaycase/broken, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"uy" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken" + }, +/area/ruin/powered/icemoon/lodge/residential) +"uA" = ( +/obj/item/stack/sheet/durathread{ + pixel_x = -10; + pixel_y = 10 + }, +/obj/structure/rack, +/obj/item/stack/sheet/durathread, +/obj/item/stack/sheet/durathread{ + pixel_y = 10 + }, +/obj/item/stack/sheet/durathread{ + pixel_x = -10 + }, +/obj/item/stack/sheet/leather, +/obj/item/stack/sheet/leather, +/obj/item/stack/sheet/leather, +/obj/item/stack/sheet/leather, +/obj/item/stack/sheet/leather, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"uG" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"uL" = ( +/obj/structure/table/wood, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 10 + }, +/obj/item/gun/ballistic/automatic/zip_pistol, +/obj/item/chisel{ + pixel_x = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"uM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/machinery/door/airlock/wood, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken7" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"uR" = ( +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/residential) +"uX" = ( +/obj/effect/decal/cleanable/plastic, +/obj/effect/turf_decal/corner/opaque/neutral{ + dir = 4 + }, +/turf/open/floor/plating/rust, +/area/ruin/powered/icemoon/lodge/residential) +"vd" = ( +/obj/effect/turf_decal/siding/brown, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony{ + icon_state = "wood-broken3" + }, +/area/ruin/powered/icemoon/lodge/residential) +"ve" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"vf" = ( +/obj/structure/table/wood, +/obj/item/seeds/cannabis{ + layer = 2.9 + }, +/obj/item/clothing/mask/cigarette/pipe, +/obj/item/lighter{ + pixel_x = 11; + pixel_y = 7 + }, +/turf/open/floor/carpet/red_gold, +/area/ruin/powered/icemoon/lodge/montagne_office) +"vq" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/mahogany{ + icon_state = "wood-broken2" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"vs" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony{ + icon_state = "wood-broken7" + }, +/area/ruin/powered/icemoon/lodge/residential) +"vG" = ( +/obj/effect/turf_decal/weather/snow{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"vZ" = ( +/obj/structure/displaycase/broken, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"wc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken" + }, +/area/ruin/powered/icemoon/lodge/cellar) +"wi" = ( +/obj/effect/turf_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"wj" = ( +/obj/structure/destructible/tribal_torch/lit, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"wm" = ( +/turf/open/floor/wood/ebony/icemoon{ + icon_state = "wood-broken6" + }, +/area/overmap_encounter/planetoid/cave/explored) +"wt" = ( +/obj/structure/railing{ + layer = 3.1 + }, +/obj/effect/turf_decal/weather/snow{ + dir = 5 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"wx" = ( +/obj/effect/turf_decal/weather/snow{ + dir = 9 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"wy" = ( +/obj/structure/chair/stool{ + dir = 4 + }, +/mob/living/simple_animal/hostile/human/frontier/internals, +/turf/open/floor/carpet/black, +/area/ruin/powered/icemoon/lodge/mainhall) +"wD" = ( +/obj/structure/bed, +/obj/item/bedsheet/random, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken6" + }, +/area/ruin/powered/icemoon/lodge/residential) +"wF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/item/ammo_box/magazine/c45_firestorm_mag/pan{ + start_empty = 1 + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"wT" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"wU" = ( +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/internals/neutered{ + retreat_distance = null; + minimum_distance = 1; + shoot_point_blank = 1 + }, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/residential) +"xb" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/mahogany{ + icon_state = "wood-broken2" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"xd" = ( +/obj/structure/rack, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/item/storage/box/ammo/a44roum{ + pixel_x = 5 + }, +/obj/item/storage/box/ammo/c38{ + pixel_y = 0; + pixel_x = -11 + }, +/obj/item/storage/box/ammo/c38{ + pixel_y = 9; + pixel_x = -12 + }, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/gear_room) +"xk" = ( +/obj/effect/turf_decal/spline/fancy/wood, +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/heavy/internals/neutered{ + aggro_vision_range = 12 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/montagne_office) +"xu" = ( +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/gear_room) +"xL" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"xM" = ( +/obj/effect/turf_decal/spline/fancy/wood, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"xN" = ( +/obj/item/hatchet/wooden{ + pixel_x = -6 + }, +/turf/open/floor/grass/ship/jungle, +/area/ruin/powered/icemoon/lodge/residential) +"yc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/mob/living/simple_animal/hostile/human/frontier/ranged/internals/neutered{ + minimum_distance = 2; + retreat_distance = 2; + check_friendly_fire = 1 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"yi" = ( +/obj/item/bedsheet/random, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/bed{ + icon_state = "dirty_mattress" + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"yj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/residential) +"yo" = ( +/obj/structure/flora/grass/jungle, +/obj/item/clothing/suit/armor/roumain/shadow, +/obj/item/clothing/head/cowboy/sec/roumain/shadow{ + pixel_y = 15; + pixel_x = -5 + }, +/obj/item/storage/wallet{ + pixel_x = 7; + pixel_y = -7 + }, +/obj/effect/decal/cleanable/ash/large{ + pixel_y = 11; + pixel_x = -6 + }, +/turf/open/floor/grass/ship/jungle, +/area/ruin/powered/icemoon/lodge/residential) +"yp" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/structure/destructible/tribal_torch/lit, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/montagne_office) +"yE" = ( +/turf/closed/wall/mineral/wood, +/area/ruin/powered/icemoon/lodge/mainhall) +"yH" = ( +/obj/structure/fence/door, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"yO" = ( +/obj/structure/chair/wood/wings{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet/black, +/area/ruin/powered/icemoon/lodge/mainhall) +"yQ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/gear_room) +"zh" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/punji_sticks, +/obj/effect/mob_spawn/human/corpse/frontier, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"zz" = ( +/turf/open/floor/carpet/red_gold, +/area/ruin/powered/icemoon/lodge/montagne_office) +"zN" = ( +/obj/structure/destructible/tribal_torch/lit, +/obj/effect/turf_decal/siding/brown{ + dir = 9 + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/residential) +"zX" = ( +/obj/structure/table/wood, +/obj/item/trash/can/food/beans{ + pixel_x = 6; + pixel_y = 3 + }, +/turf/open/floor/carpet/black, +/area/ruin/powered/icemoon/lodge/mainhall) +"Ag" = ( +/obj/structure/table/wood, +/obj/item/trash/plate{ + pixel_y = 12 + }, +/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton{ + pixel_y = 12 + }, +/turf/open/floor/carpet/black, +/area/ruin/powered/icemoon/lodge/mainhall) +"Ai" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony/icemoon{ + icon_state = "wood-broken5" + }, +/area/overmap_encounter/planetoid/cave/explored) +"Aj" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"Ak" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"Aq" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/bottle/moonshine{ + pixel_y = 17; + pixel_x = 9 + }, +/obj/item/reagent_containers/food/drinks/bottle/patron{ + pixel_y = 11; + pixel_x = 6 + }, +/obj/item/storage/pill_bottle/zoom{ + pixel_y = 9 + }, +/obj/item/reagent_containers/food/drinks/bottle/rum{ + pixel_x = 2 + }, +/obj/item/reagent_containers/pill/lsd{ + pixel_y = 6; + pixel_x = -6 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"Ay" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"AB" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken2" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"AE" = ( +/obj/structure/destructible/tribal_torch/lit, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"AJ" = ( +/obj/structure/flora/stump{ + name = "Montagnue's Stump" + }, +/turf/open/floor/grass/ship/jungle, +/area/ruin/powered/icemoon/lodge/residential) +"AO" = ( +/obj/structure/table/wood, +/obj/item/weaponcrafting/stock, +/obj/item/weaponcrafting/receiver{ + pixel_y = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"AX" = ( +/obj/structure/punji_sticks, +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/gibspawner/human/bodypartless, +/obj/effect/mob_spawn/human/corpse/frontier, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"Bf" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/turf/open/floor/wood/mahogany{ + icon_state = "wood-broken6" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"Bx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/skm/internals/neutered{ + check_friendly_fire = 1; + retreat_distance = 3; + minimum_distance = 2 + }, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken5" + }, +/area/ruin/powered/icemoon/lodge/gear_room) +"BL" = ( +/obj/structure/table/wood/fancy, +/obj/item/gem/amber{ + pixel_y = 20; + pixel_x = -2 + }, +/obj/item/candle/infinite{ + pixel_y = 2; + pixel_x = 4 + }, +/obj/item/candle/infinite{ + pixel_y = 2; + pixel_x = -8 + }, +/obj/item/candle/infinite{ + pixel_y = 2; + pixel_x = -2 + }, +/obj/item/candle/infinite{ + pixel_y = 12; + pixel_x = 10 + }, +/obj/item/candle/infinite{ + pixel_y = 2; + pixel_x = 10 + }, +/obj/item/candle/infinite{ + pixel_y = 22; + pixel_x = 10 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/montagne_office) +"BQ" = ( +/obj/structure/flora/grass/both, +/turf/open/floor/plating/asteroid/snow/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"BU" = ( +/obj/effect/decal/cleanable/greenglow, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/residential) +"Cm" = ( +/obj/structure/closet/secure_closet{ + icon_state = "sec"; + name = "equipment locker"; + req_access_txt = "1" + }, +/obj/item/clothing/suit/armor/vest/bulletproof/frontier, +/obj/item/clothing/head/helmet/bulletproof/x11/frontier, +/obj/item/clothing/suit/armor/vest/bulletproof/frontier, +/obj/item/clothing/head/helmet/bulletproof/x11/frontier, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/combat, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/gear_room) +"Cq" = ( +/obj/structure/railing/wood, +/obj/structure/table/wood, +/obj/item/binoculars, +/turf/open/floor/wood/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"Cs" = ( +/obj/structure/fireplace, +/obj/item/throwing_star/magspear{ + name = "fire poker"; + desc = "A small metal rod used to stir up fireplaces. This one is adorned with ornate golden filigree" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"Cu" = ( +/turf/closed/wall/mineral/wood, +/area/ruin/powered/icemoon/lodge/cellar) +"Cw" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken5" + }, +/area/ruin/powered/icemoon/lodge/residential) +"CG" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"CN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken5" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"CU" = ( +/obj/structure/railing/wood{ + dir = 9 + }, +/turf/open/floor/wood/icemoon{ + icon_state = "wood-broken2" + }, +/area/overmap_encounter/planetoid/cave/explored) +"CW" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 4 + }, +/turf/open/floor/wood/ebony/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"Dj" = ( +/obj/effect/turf_decal/weather/snow{ + dir = 1 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"Do" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"DA" = ( +/obj/structure/railing/wood{ + dir = 4 + }, +/turf/open/floor/wood/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"DB" = ( +/obj/item/grown/log/tree{ + pixel_x = -6; + pixel_y = 12; + auto_scatter = 0 + }, +/obj/item/grown/log/tree{ + pixel_x = 6; + pixel_y = 12; + auto_scatter = 0 + }, +/obj/item/grown/log/tree{ + pixel_y = 18; + auto_scatter = 0 + }, +/obj/structure/table/wood, +/obj/item/storage/box/matches{ + pixel_y = 2 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"DM" = ( +/obj/structure/destructible/tribal_torch/lit, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/ruin/powered/icemoon/lodge/residential) +"DR" = ( +/obj/effect/turf_decal/spline/fancy/wood/cee, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/residential) +"Eb" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"Ec" = ( +/turf/open/floor/plating/asteroid/icerock/cracked, +/area/overmap_encounter/planetoid/cave/explored) +"Ek" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken5" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"Er" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/machinery/door/airlock/wood{ + dir = 4 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"Ez" = ( +/turf/open/floor/plasteel/stairs/wood, +/area/ruin/powered/icemoon/lodge/cellar) +"Fj" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"Fy" = ( +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/item/trash/candy, +/turf/open/floor/carpet/black, +/area/ruin/powered/icemoon/lodge/mainhall) +"FL" = ( +/obj/effect/turf_decal/siding/blue/corner{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/siding/blue/corner, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/rust, +/area/ruin/powered/icemoon/lodge/residential) +"Gb" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"Gd" = ( +/obj/structure/flora/grass/brown, +/turf/open/floor/plating/asteroid/snow/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"Ge" = ( +/obj/structure/chair/wood/wings, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"Gn" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/breakawayflask/vintage/prismwine{ + pixel_x = 6; + pixel_y = 12 + }, +/obj/item/reagent_containers/food/drinks/breakawayflask/vintage/shockwine{ + pixel_x = -6; + pixel_y = 12 + }, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/cellar) +"Gq" = ( +/obj/effect/turf_decal/siding/blue, +/obj/effect/turf_decal/corner/opaque/neutral{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/rust, +/area/ruin/powered/icemoon/lodge/residential) +"Gs" = ( +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"Gv" = ( +/obj/structure/railing/wood{ + dir = 10 + }, +/turf/open/floor/wood/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"Gy" = ( +/turf/template_noop, +/area/template_noop) +"GA" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"GD" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"GN" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet/black, +/area/ruin/powered/icemoon/lodge/mainhall) +"GR" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/destructible/tribal_torch/lit, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"GS" = ( +/obj/structure/railing/wood{ + dir = 6 + }, +/obj/structure/chair/wood/wings{ + dir = 8 + }, +/turf/open/floor/wood/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"GT" = ( +/obj/structure/railing/wood, +/obj/structure/chair/wood/wings{ + dir = 4 + }, +/turf/open/floor/wood/icemoon{ + icon_state = "wood-broken5" + }, +/area/overmap_encounter/planetoid/cave/explored) +"Hl" = ( +/turf/closed/mineral/random/snow/underground, +/area/overmap_encounter/planetoid/cave/explored) +"HC" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony{ + icon_state = "wood-broken5" + }, +/area/ruin/powered/icemoon/lodge/residential) +"HG" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/table/wood, +/obj/item/shovel/spade, +/obj/item/reagent_containers/glass/bucket/wooden{ + pixel_x = 6 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"HO" = ( +/obj/structure/windoor_assembly{ + dir = 4; + name = "broken windoor" + }, +/obj/item/shard, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/gear_room) +"HQ" = ( +/obj/structure/table/wood/fancy, +/obj/item/candle/infinite{ + pixel_y = 11; + pixel_x = -2 + }, +/obj/item/candle/infinite{ + pixel_y = 11; + pixel_x = -8 + }, +/obj/item/candle/infinite{ + pixel_y = 11; + pixel_x = 4 + }, +/obj/item/candle/infinite{ + pixel_y = 0; + pixel_x = 10 + }, +/obj/item/candle/infinite{ + pixel_y = 11; + pixel_x = 10 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/montagne_office) +"HV" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken4" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"HZ" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/machinery/door/airlock/wood{ + dir = 4 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"Ik" = ( +/obj/structure/fluff/paper/stack{ + dir = 4; + pixel_y = 9; + layer = 2.79 + }, +/obj/item/shovel, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"Ix" = ( +/mob/living/simple_animal/hostile/human/frontier/ranged/mosin/internals/neutered{ + check_friendly_fire = 1; + minimum_distance = 3 + }, +/obj/effect/turf_decal/weather/snow, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"II" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken3" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"Ja" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/obj/item/reagent_containers/syringe/contraband/morphine, +/obj/effect/decal/cleanable/garbage, +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/plasteel/white, +/area/ruin/powered/icemoon/lodge/residential) +"Jj" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"Jq" = ( +/obj/structure/flora/ash/chilly, +/turf/open/floor/plating/asteroid/snow/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"Js" = ( +/obj/structure/rack, +/obj/effect/turf_decal/siding/brown, +/obj/item/storage/toolbox/electrical{ + pixel_y = 5; + pixel_x = -2 + }, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/gear_room) +"JP" = ( +/obj/effect/turf_decal/weather/snow{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"JS" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/rifle/internals/neutered{ + minimum_distance = 2 + }, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/residential) +"Kc" = ( +/obj/effect/turf_decal/weather/snow, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"Kg" = ( +/turf/open/floor/wood/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"Kh" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/sign/poster/contraband/masked_men{ + pixel_y = 27 + }, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken2" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"Kn" = ( +/mob/living/simple_animal/hostile/human/frontier/ranged/internals/neutered{ + minimum_distance = 2; + retreat_distance = 2; + check_friendly_fire = 1 + }, +/turf/open/floor/grass/ship/jungle, +/area/ruin/powered/icemoon/lodge/residential) +"Ks" = ( +/obj/effect/decal/cleanable/crayon{ + icon_state = "camp"; + pixel_x = 4; + pixel_y = -1 + }, +/turf/closed/wall/mineral/wood, +/area/ruin/powered/icemoon/lodge/residential) +"KF" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/wood{ + dir = 4 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"KH" = ( +/obj/structure/fluff/paper/stack{ + dir = 1 + }, +/obj/effect/decal/cleanable/ash, +/obj/structure/fluff/paper/stack{ + pixel_x = 9 + }, +/obj/structure/fluff/paper/stack{ + dir = 5; + layer = 2.79; + pixel_y = 4 + }, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"KO" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/food/flour, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"KR" = ( +/obj/structure/flora/ash/tall_shroom, +/turf/open/floor/plating/asteroid/icerock, +/area/overmap_encounter/planetoid/cave/explored) +"KX" = ( +/obj/structure/fermenting_barrel, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/cellar) +"Lz" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/breakawayflask/vintage/ashwine{ + pixel_y = 12; + pixel_x = -6 + }, +/obj/item/reagent_containers/food/drinks/breakawayflask/vintage/forcewine{ + pixel_x = 6; + pixel_y = 12 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/cellar) +"LC" = ( +/turf/open/floor/wood/icemoon{ + icon_state = "wood-broken" + }, +/area/overmap_encounter/planetoid/cave/explored) +"LD" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/gear_room) +"LF" = ( +/obj/structure/table/wood, +/obj/item/clothing/under/suit/roumain, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"LM" = ( +/obj/structure/flora/rock/pile/icy{ + icon_state = "icemoonrock1" + }, +/turf/open/floor/plating/asteroid/snow/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"LP" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 8 + }, +/turf/open/floor/wood/ebony/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"LT" = ( +/obj/structure/chair/plastic{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/powered/icemoon/lodge/mainhall) +"LZ" = ( +/obj/effect/turf_decal/siding/brown/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/residential) +"Mt" = ( +/turf/open/floor/wood/icemoon{ + icon_state = "wood-broken4" + }, +/area/overmap_encounter/planetoid/cave/explored) +"Mw" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"Mx" = ( +/obj/item/chair/wood, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet/black, +/area/ruin/powered/icemoon/lodge/mainhall) +"MC" = ( +/obj/structure/sign/poster/contraband/punch_shit{ + pixel_x = 32 + }, +/turf/open/floor/plating/rust, +/area/ruin/powered/icemoon/lodge/residential) +"MK" = ( +/obj/structure/fence, +/turf/open/floor/plating/asteroid/icerock/cracked, +/area/overmap_encounter/planetoid/cave/explored) +"MO" = ( +/obj/structure/fluff/fokoff_sign{ + desc = "A crudsely-made sign with the words 'fok of' written in some sort of red paint." + }, +/turf/open/floor/plating/asteroid/icerock/cracked, +/area/overmap_encounter/planetoid/cave/explored) +"MP" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/rust, +/area/ruin/powered/icemoon/lodge/residential) +"MQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"MR" = ( +/obj/effect/decal/cleanable/crayon{ + icon_state = "danger"; + pixel_x = 4; + pixel_y = -1; + paint_colour = "#FF0000" + }, +/obj/effect/turf_decal/weather/snow{ + dir = 8 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"Nc" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"Ni" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/flame/neuter, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/gear_room) +"Nl" = ( +/obj/item/mine/pressure/explosive/rusty/live, +/turf/open/floor/plating/asteroid/icerock/cracked, +/area/overmap_encounter/planetoid/cave/explored) +"No" = ( +/turf/closed/wall/mineral/wood, +/area/ruin/powered/icemoon/lodge/residential) +"Nq" = ( +/obj/item/bedsheet/random, +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed{ + icon_state = "dirty_mattress" + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"Nu" = ( +/obj/item/ammo_casing/a8_50r{ + projectile_type = null + }, +/obj/item/ammo_casing/a8_50r{ + projectile_type = null + }, +/obj/item/ammo_casing/a8_50r{ + projectile_type = null + }, +/obj/item/ammo_casing/a8_50r{ + projectile_type = null + }, +/obj/item/ammo_casing/a8_50r{ + projectile_type = null + }, +/mob/living/simple_animal/hostile/human/frontier/internals, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"NH" = ( +/obj/structure/chair/wood/wings{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/mob/living/simple_animal/hostile/human/frontier/ranged/neutered, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"NL" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"NM" = ( +/obj/machinery/door/airlock/wood{ + dir = 4 + }, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/residential) +"NN" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"NO" = ( +/obj/structure/safe, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/gun/ballistic/automatic/marksman/vickland, +/obj/item/ammo_box/vickland_a308/empty, +/obj/item/ammo_box/vickland_a308/empty, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/montagne_office) +"Oa" = ( +/obj/effect/turf_decal/corner/opaque/blue/diagonal, +/obj/effect/turf_decal/corner/opaque/blue/diagonal, +/obj/structure/table/wood, +/obj/item/trash/tray, +/obj/effect/turf_decal/corner/opaque/neutral{ + dir = 4 + }, +/obj/item/stack/tape/industrial{ + pixel_y = 6; + pixel_x = 7 + }, +/obj/item/reagent_containers/food/drinks/bottle/absinthe{ + pixel_y = 8; + pixel_x = -6 + }, +/obj/item/reagent_containers/glass/bottle/morphine, +/turf/open/floor/plating/rust, +/area/ruin/powered/icemoon/lodge/residential) +"Oc" = ( +/obj/structure/flora/ash/stem_shroom, +/turf/open/floor/plating/asteroid/icerock, +/area/overmap_encounter/planetoid/cave/explored) +"Ok" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white, +/area/ruin/powered/icemoon/lodge/residential) +"Ol" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken4" + }, +/area/ruin/powered/icemoon/lodge/residential) +"Oq" = ( +/obj/effect/decal/cleanable/crayon{ + icon_state = "skull"; + pixel_x = 4; + pixel_y = -1 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"Ox" = ( +/obj/structure/statue/snow/snowman, +/obj/item/mine/proximity/explosive/live{ + layer = 2.8 + }, +/turf/open/floor/plating/asteroid/icerock, +/area/overmap_encounter/planetoid/cave/explored) +"OD" = ( +/obj/effect/turf_decal/weather/snow{ + dir = 8 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"OH" = ( +/turf/closed/wall/mineral/wood, +/area/ruin/powered/icemoon/lodge/montagne_office) +"ON" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/neutral, +/turf/open/floor/plating/rust, +/area/ruin/powered/icemoon/lodge/residential) +"OR" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 5 + }, +/obj/structure/destructible/tribal_torch/lit, +/turf/open/floor/wood/ebony/icemoon{ + icon_state = "wood-broken2" + }, +/area/overmap_encounter/planetoid/cave/explored) +"OS" = ( +/obj/effect/turf_decal/siding/wood/end, +/obj/machinery/door/airlock/wood, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/gear_room) +"OV" = ( +/obj/effect/turf_decal/spline/fancy/wood, +/obj/item/trash/sosjerky, +/obj/effect/decal/cleanable/wrapping, +/turf/open/floor/wood/mahogany{ + icon_state = "wood-broken6" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"OY" = ( +/obj/effect/turf_decal/siding/brown, +/obj/item/rack_parts, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/gear_room) +"Py" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/closet/crate/hydroponics, +/obj/item/seeds/apple, +/obj/item/seeds/sunflower/moonflower, +/obj/item/seeds/potato, +/obj/item/seeds/tomato, +/obj/item/seeds/berry, +/obj/item/seeds/aloe, +/obj/item/seeds/wheat, +/obj/item/seeds/cotton/durathread, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"PA" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/snow/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"PB" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony{ + icon_state = "wood-broken7" + }, +/area/ruin/powered/icemoon/lodge/residential) +"PE" = ( +/obj/structure/chair/wood/wings{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/skm/internals/neutered{ + check_friendly_fire = 1; + retreat_distance = 3; + minimum_distance = 2 + }, +/turf/open/floor/carpet/black, +/area/ruin/powered/icemoon/lodge/mainhall) +"PH" = ( +/obj/structure/flora/rock/pile/icy{ + icon_state = "icemoonrock2" + }, +/turf/open/floor/plating/asteroid/icerock/cracked, +/area/overmap_encounter/planetoid/cave/explored) +"PI" = ( +/obj/item/restraints/legcuffs/beartrap{ + armed = 1 + }, +/turf/open/floor/plasteel/stairs/wood, +/area/ruin/powered/icemoon/lodge/cellar) +"PM" = ( +/obj/structure/bonfire/prelit, +/obj/effect/decal/cleanable/ash/large, +/turf/open/floor/ship/dirt/dark, +/area/ruin/powered/icemoon/lodge/residential) +"PQ" = ( +/obj/structure/fermenting_barrel, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/cellar) +"PV" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"Qz" = ( +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/gear_room) +"QO" = ( +/obj/structure/table/greyscale, +/obj/item/gun/ballistic/rifle/illestren, +/obj/item/clothing/ears/earmuffs{ + pixel_y = 9 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"QT" = ( +/obj/structure/chair/wood/wings, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/internals/neutered{ + retreat_distance = null; + minimum_distance = 1; + shoot_point_blank = 1 + }, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken4" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"QU" = ( +/obj/structure/flora/grass/jungle, +/turf/open/floor/ship/dirt/dark, +/area/ruin/powered/icemoon/lodge/residential) +"Rd" = ( +/obj/structure/bed/pod, +/obj/item/bedsheet/blue, +/obj/structure/curtain/cloth/fancy, +/obj/item/toy/plush/kari, +/turf/open/floor/carpet/red_gold, +/area/ruin/powered/icemoon/lodge/montagne_office) +"Rg" = ( +/obj/structure/flora/ash/leaf_shroom, +/turf/open/floor/plating/asteroid/icerock/cracked, +/area/overmap_encounter/planetoid/cave/explored) +"Rl" = ( +/obj/effect/mob_spawn/human/corpse, +/obj/effect/decal/cleanable/ash/large{ + pixel_y = 8 + }, +/turf/open/floor/ship/dirt/dark, +/area/ruin/powered/icemoon/lodge/residential) +"Rt" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/bottle/whiskey{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_x = 6 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_x = 8; + pixel_y = 12 + }, +/turf/open/floor/carpet/red_gold, +/area/ruin/powered/icemoon/lodge/montagne_office) +"RA" = ( +/obj/structure/flora/grass/green, +/turf/open/floor/plating/asteroid/snow/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"RE" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/mainhall) +"RH" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/machinery/door/airlock/wood{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/cellar) +"RM" = ( +/obj/effect/turf_decal/siding/blue/end{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/medical{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ruin/powered/icemoon/lodge/residential) +"RV" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"RX" = ( +/obj/structure/flora/grass/jungle/b, +/obj/structure/closet/crate/trashcart, +/obj/item/clothing/suit/armor/roumain, +/obj/item/clothing/head/cowboy/sec/roumain, +/obj/effect/decal/cleanable/ash/large{ + pixel_y = 3; + pixel_x = -10 + }, +/turf/open/floor/grass/ship/jungle, +/area/ruin/powered/icemoon/lodge/residential) +"Se" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/montagne_office) +"Sf" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"Su" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken4" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"SE" = ( +/obj/structure/destructible/tribal_torch/lit, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"Td" = ( +/obj/structure/rack, +/obj/item/flashlight/lantern{ + pixel_x = 6 + }, +/obj/item/flashlight/lantern{ + pixel_x = -6 + }, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"Te" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet/red_gold, +/area/ruin/powered/icemoon/lodge/montagne_office) +"Tj" = ( +/obj/machinery/door/airlock/wood, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/montagne_office) +"Tk" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/box/ammo/a308/hunterspride, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"To" = ( +/obj/structure/destructible/tribal_torch/lit, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"TL" = ( +/obj/structure/closet/cabinet{ + name = "broken hunter's locker"; + desc = "Everything a hunter will need, held in one secure closet. Or it would, if the lock wasn't smashed open." + }, +/obj/effect/turf_decal/siding/brown{ + dir = 8 + }, +/obj/item/clothing/mask/gas/frontiersmen, +/obj/item/clothing/under/frontiersmen/fireproof, +/obj/item/clothing/head/helmet/bulletproof/x11/frontier/fireproof, +/obj/item/clothing/suit/armor/frontier/fireproof, +/obj/item/flamethrower, +/obj/item/lighter/greyscale, +/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/effect/decal/cleanable/wrapping, +/obj/item/clothing/glasses/trickblindfold, +/obj/item/melee/knife/switchblade, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/gear_room) +"TM" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/residential) +"TV" = ( +/obj/effect/turf_decal/weather/snow{ + dir = 10 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"Uc" = ( +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/floor/plasteel/stairs/wood{ + dir = 8 + }, +/area/ruin/powered/icemoon/lodge/cellar) +"Ug" = ( +/obj/structure/bookcase/random/religion, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"Um" = ( +/obj/effect/turf_decal/weather/snow{ + dir = 5 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"Uz" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/turf/open/floor/wood/ebony/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"UJ" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 9 + }, +/turf/open/floor/wood/ebony/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"UK" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 4 + }, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/residential) +"UL" = ( +/obj/structure/destructible/tribal_torch/lit, +/obj/effect/turf_decal/siding/brown{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony{ + icon_state = "wood-broken" + }, +/area/ruin/powered/icemoon/lodge/residential) +"UX" = ( +/turf/open/floor/wood/maple{ + icon_state = "wood-broken2" + }, +/area/ruin/powered/icemoon/lodge/gear_room) +"UY" = ( +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"Vc" = ( +/obj/structure/destructible/tribal_torch/lit, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"Vo" = ( +/obj/item/storage/pill_bottle/floorpill/full{ + pixel_y = 7; + pixel_x = 14 + }, +/obj/effect/decal/cleanable/vomit/old{ + pixel_x = -14; + pixel_y = 18 + }, +/obj/effect/decal/cleanable/vomit/old{ + icon_state = "vomit_2"; + pixel_x = -12; + pixel_y = 2 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"Vz" = ( +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/montagne_office) +"VB" = ( +/obj/structure/railing/wood, +/obj/structure/table/wood, +/obj/item/storage/pill_bottle/stimulant, +/obj/item/reagent_containers/pill/happy{ + pixel_y = 10; + pixel_x = -7 + }, +/obj/item/reagent_containers/pill/happy{ + pixel_y = 2; + pixel_x = 9 + }, +/turf/open/floor/wood/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"VK" = ( +/turf/open/floor/wood/maple{ + icon_state = "wood-broken5" + }, +/area/ruin/powered/icemoon/lodge/cellar) +"Wa" = ( +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/destructible/tribal_torch/lit, +/turf/open/floor/wood/mahogany{ + icon_state = "wood-broken6" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"Wc" = ( +/obj/effect/turf_decal/spline/fancy/wood/cee{ + dir = 1 + }, +/obj/machinery/door/airlock/wood{ + name = "Restroom" + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/residential) +"Wd" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/obj/effect/decal/cleanable/glass, +/mob/living/simple_animal/hostile/human/frontier/ranged/surgeon/internals/neuter, +/turf/open/floor/plasteel/white, +/area/ruin/powered/icemoon/lodge/residential) +"Wk" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"Wp" = ( +/obj/structure/closet/cabinet{ + name = "broken shadow's locker"; + desc = "The closet of equipment and attire for the aspiring shadow. Or whichever guy broke this closet's lock." + }, +/obj/effect/turf_decal/siding/brown{ + dir = 4 + }, +/obj/item/clothing/head/soft/frontiersmen, +/obj/item/clothing/under/frontiersmen/deckhand, +/obj/item/clothing/accessory/holster, +/obj/effect/decal/cleanable/plastic, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/gear_room) +"Ws" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/curtain/cloth/fancy, +/turf/open/floor/plating, +/area/ruin/powered/icemoon/lodge/montagne_office) +"Wv" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/gear_room) +"WF" = ( +/obj/structure/flora/rock/pile/icy, +/turf/open/floor/plating/asteroid/snow/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"WI" = ( +/obj/structure/chair/pew/right{ + dir = 1 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"WN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"WS" = ( +/obj/structure/flora/stump{ + icon_state = "anchored_rod"; + pixel_y = -3; + name = "rod"; + desc = "A metal rod struck into the ground." + }, +/obj/item/clothing/head/helmet/bulletproof/x11/clip{ + pixel_y = 24; + name = "\improper Dented Minutemen X11 Helmet" + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"WW" = ( +/obj/structure/chair/pew/left{ + dir = 1 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"WZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/c45{ + projectile_type = null + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"Xd" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/table/wood, +/obj/item/reagent_containers/glass/bottle/nutrient/ez{ + pixel_x = 6; + pixel_y = 12; + auto_scatter = 0 + }, +/obj/item/reagent_containers/glass/bottle/nutrient/l4z{ + pixel_x = 6; + pixel_y = 6; + auto_scatter = 0 + }, +/obj/item/reagent_containers/glass/bottle/nutrient/rh{ + pixel_x = 6; + auto_scatter = 0 + }, +/obj/item/reagent_containers/glass/bottle/nutrient/ez{ + pixel_x = -6; + pixel_y = 12; + auto_scatter = 0 + }, +/obj/item/reagent_containers/glass/bottle/nutrient/l4z{ + pixel_x = -6; + pixel_y = 6; + auto_scatter = 0 + }, +/obj/item/reagent_containers/glass/bottle/nutrient/rh{ + pixel_x = -6; + auto_scatter = 0 + }, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"Xm" = ( +/obj/structure/flora/rock/pile/icy{ + icon_state = "icemoonrock1" + }, +/turf/open/floor/plating/asteroid/icerock, +/area/overmap_encounter/planetoid/cave/explored) +"Xq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/plastic, +/turf/open/floor/plating/rust, +/area/ruin/powered/icemoon/lodge/residential) +"Xt" = ( +/obj/effect/decal/cleanable/crayon{ + icon_state = "shotgun"; + pixel_x = 14; + pixel_y = -3 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"Xx" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/residential) +"XF" = ( +/obj/structure/flora/grass/green, +/turf/open/floor/plating/asteroid/icerock, +/area/overmap_encounter/planetoid/cave/explored) +"XK" = ( +/obj/structure/fermenting_barrel/gunpowder, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"XU" = ( +/obj/structure/flora/grass/both, +/obj/item/restraints/legcuffs/beartrap{ + armed = 1 + }, +/turf/open/floor/plating/asteroid/icerock, +/area/overmap_encounter/planetoid/cave/explored) +"Yd" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/mob/living/simple_animal/hostile/human/frontier/internals, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken3" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"Yj" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt, +/obj/item/mine/proximity/explosive/live{ + range_heavy = 1; + range_light = 5 + }, +/obj/effect/mob_spawn/human/corpse/srm/montagne, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/cellar) +"Yo" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 8 + }, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/residential) +"Yv" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/machinery/jukebox/boombox{ + pixel_y = 4; + pixel_x = 1 + }, +/obj/item/toy/cards/deck{ + pixel_y = 0; + pixel_x = -4 + }, +/obj/item/storage/pill_bottle/dice{ + pixel_x = 8; + pixel_y = -1 + }, +/turf/open/floor/wood/mahogany, +/area/ruin/powered/icemoon/lodge/mainhall) +"Yw" = ( +/obj/structure/loom, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"YB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/smartfridge/drying_rack, +/turf/open/floor/wood/maple, +/area/ruin/powered/icemoon/lodge/residential) +"YG" = ( +/obj/item/toy/crayon/spraycan, +/obj/effect/turf_decal/weather/snow{ + dir = 9 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"YO" = ( +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/a308{ + pixel_y = 11; + projectile_type = null; + auto_rotate = 0; + auto_scatter = 0 + }, +/obj/item/ammo_casing/a308{ + pixel_y = 3; + projectile_type = null; + auto_rotate = 0; + auto_scatter = 0 + }, +/obj/item/ammo_casing/a308{ + pixel_y = 11; + pixel_x = 6; + projectile_type = null; + auto_rotate = 0; + auto_scatter = 0 + }, +/obj/item/ammo_casing/a308{ + pixel_y = 11; + pixel_x = -6; + projectile_type = null; + auto_rotate = 0; + auto_scatter = 0 + }, +/obj/item/ammo_casing/a308{ + pixel_y = 3; + pixel_x = -6; + projectile_type = null; + auto_rotate = 0; + auto_scatter = 0 + }, +/obj/item/ammo_casing/a308{ + pixel_y = 3; + pixel_x = 6; + projectile_type = null; + auto_rotate = 0; + auto_scatter = 0 + }, +/turf/open/floor/wood/ebony, +/area/ruin/powered/icemoon/lodge/mainhall) +"YU" = ( +/obj/effect/turf_decal/weather/snow{ + dir = 6 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"Za" = ( +/turf/open/floor/plating/asteroid/snow/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"Zf" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/mug/coco, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"Zi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/plastic, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/ruin/powered/icemoon/lodge/residential) +"Zm" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/maple{ + icon_state = "wood-broken" + }, +/area/ruin/powered/icemoon/lodge/gear_room) +"Zn" = ( +/obj/structure/destructible/tribal_torch/lit, +/obj/structure/railing/wood{ + dir = 8 + }, +/obj/structure/railing/wood{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"Zo" = ( +/obj/structure/table/wood, +/obj/item/trash/plate{ + pixel_x = -6 + }, +/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/zombie{ + pixel_x = -6 + }, +/turf/open/floor/carpet/black, +/area/ruin/powered/icemoon/lodge/mainhall) +"Zp" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "vomit_2-old" + }, +/obj/item/kirbyplants{ + icon_state = "plant-25"; + pixel_y = 12; + pixel_x = -2 + }, +/turf/open/floor/wood/ebony{ + icon_state = "wood-broken2" + }, +/area/ruin/powered/icemoon/lodge/residential) +"ZG" = ( +/obj/item/target/syndicate, +/obj/effect/turf_decal/weather/snow, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) +"ZX" = ( +/obj/effect/turf_decal/spline/fancy/wood/corner, +/obj/effect/turf_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/trash/energybar, +/turf/open/floor/wood/mahogany{ + icon_state = "wood-broken3" + }, +/area/ruin/powered/icemoon/lodge/mainhall) +"ZZ" = ( +/obj/structure/table/greyscale, +/obj/item/ammo_box/magazine/illestren_a850r/empty{ + pixel_x = 6 + }, +/obj/effect/turf_decal/weather/snow{ + dir = 1 + }, +/turf/open/floor/concrete/slab_3/icemoon, +/area/overmap_encounter/planetoid/cave/explored) + +(1,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Gy +Hl +Hl +Hl +Hl +Gy +Hl +Hl +Hl +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +"} +(2,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Gy +Hl +Hl +Gy +Hl +Hl +Hl +Hl +Hl +Gy +Gy +Hl +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +"} +(3,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Gy +Hl +Hl +Hl +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +"} +(4,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +"} +(5,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +"} +(6,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +gI +gI +gI +gI +No +No +No +No +No +No +No +No +No +No +No +No +No +No +No +No +No +Hl +Hl +Hl +Hl +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +"} +(7,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +gI +gI +jx +HO +xd +No +nc +No +DB +Ol +Wk +wD +No +dT +bL +Oa +No +PM +Rl +dd +rF +No +No +Hl +Hl +Hl +Hl +Hl +Gy +Gy +Gy +Gy +Gy +Gy +"} +(8,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +gI +gp +rZ +sk +LD +Wc +DR +No +Cs +oC +oC +Nq +No +ON +Wd +jk +No +RX +yo +AJ +xN +QU +No +Hl +Hl +Hl +Hl +Hl +Gy +Gy +Gy +Gy +Gy +Gy +"} +(9,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +gI +rx +Bx +Qz +Wv +No +qK +No +SE +oC +hz +fe +No +Ja +tl +eW +No +No +ds +lh +Kn +cl +No +Hl +Hl +Hl +Hl +Hl +Gy +Gy +Gy +Gy +Gy +Gy +"} +(10,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +gI +ao +bk +UX +Ni +No +ag +No +Ug +Sf +eg +yi +No +fA +uX +Gq +nm +No +rm +fu +ti +cl +No +Hl +Hl +Hl +Hl +Hl +Rg +Gy +Gy +Gy +Gy +Gy +"} +(11,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +gI +TL +qd +kX +cy +No +No +No +No +mc +Ks +No +No +lM +FL +Ok +st +No +rF +rm +rm +QU +No +Hl +Hl +Hl +Hl +Ec +Ec +Ec +Ec +Ec +Gy +Gy +"} +(12,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +gI +Cm +yQ +Js +cy +gI +zN +Yo +am +eU +qO +aa +No +No +RM +iH +No +No +No +px +tT +YB +No +Hl +Hl +Hl +Hl +PH +MO +Ec +Ec +Ec +Hl +Gy +"} +(13,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +gI +dZ +xu +OY +dn +OS +Xx +yj +uR +Xq +uR +LZ +Yo +hI +vs +JS +Yo +ne +nD +uy +Cw +Py +No +Hl +Hl +Hl +Hl +Hl +Hl +dc +MK +Hl +Hl +Hl +"} +(14,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +gI +Wp +ey +bB +Zm +fX +Zp +HC +PB +TM +MC +Zi +uR +uR +wU +BU +yj +vd +No +ib +RV +qH +No +Hl +Hl +Hl +Hl +Hl +Ec +Ec +bb +Hl +Hl +Hl +"} +(15,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +gI +gI +gI +gI +gI +gI +No +No +No +No +No +DM +MP +TM +UK +UK +fn +UL +No +Xd +HG +No +No +Hl +Hl +Hl +Hl +Hl +Nl +XF +bb +Hl +Hl +Hl +"} +(16,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +No +No +No +No +No +No +NM +No +No +No +No +No +Hl +Hl +Hl +Hl +Hl +Hl +iw +bb +qJ +Hl +Hl +Hl +"} +(17,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Za +Dj +sX +WF +Za +Za +nQ +ca +sX +LM +Za +oT +nQ +WW +Hl +Hl +Hl +Hl +Hl +KR +bb +bb +Hl +Hl +Hl +"} +(18,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Za +Za +Dj +Kc +Za +RA +wx +NN +NN +ca +TV +Za +Za +Dj +gR +Hl +Hl +Hl +Hl +Hl +bb +qJ +iw +Hl +Hl +Hl +"} +(19,1,1) = {" +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Za +Za +eK +Kc +gs +ot +NN +ca +NN +ca +ca +TV +gs +Dj +WI +Hl +Hl +Hl +Hl +Hl +Ec +bb +bb +Hl +Hl +Hl +"} +(20,1,1) = {" +Gy +Gy +Gy +Hl +Hl +Hl +Hl +yE +yE +yE +yE +yE +yE +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Za +eK +ca +OD +NN +JP +ca +ca +ca +fa +NN +vG +ca +Zf +Hl +Hl +Hl +Hl +Hl +Nl +Ec +bb +Hl +Hl +Hl +"} +(21,1,1) = {" +Gy +Gy +Hl +Hl +Hl +Hl +yE +yE +MQ +mz +XK +jM +yE +yE +yE +yE +yE +yE +yE +yE +dO +dO +dO +dO +dO +ca +ca +ca +YU +Za +Dj +NN +Kc +Jq +Um +ca +ca +Hl +Hl +Hl +Hl +Hl +Ec +Ec +bb +iB +Hl +Hl +Hl +"} +(22,1,1) = {" +Gy +Gy +Hl +Hl +Hl +yE +yE +ms +Su +Eb +QT +YO +yE +yc +CN +ko +KO +II +mH +qN +UJ +LP +LP +sd +dO +ca +ca +YU +Za +Za +Dj +NN +Kc +Za +Za +Um +ca +NN +Hl +Hl +Hl +Hl +Nl +Ec +Hl +Hl +Hl +Hl +Hl +"} +(23,1,1) = {" +Gy +Hl +Hl +Hl +Hl +yE +uL +fg +ty +uG +qY +Tk +yE +Kh +tL +Yd +CG +CG +Ek +uM +Uz +Ai +wm +pK +dO +ca +Kc +Za +Gd +Za +Dj +NN +Kc +Za +Za +Za +Dj +wj +Hl +Hl +Hl +bb +bb +bb +Hl +Hl +Hl +Hl +Hl +"} +(24,1,1) = {" +Hl +Hl +Hl +Hl +Hl +yE +AO +RE +sW +qY +yE +yE +yE +HZ +Er +yE +To +Td +aV +yE +OR +sc +CW +cS +dO +ca +sX +Za +Za +Za +tW +Nu +Ix +Za +BQ +Za +Dj +ca +ca +ca +GA +bb +iw +bb +Hl +Hl +Hl +Hl +Gy +"} +(25,1,1) = {" +Hl +Hl +Hl +Hl +Hl +yE +yE +yE +KF +yE +yE +Yv +Bf +ZX +aL +OH +OH +OH +OH +OH +OH +Gv +aF +CU +jP +NN +sX +Za +gs +sG +ZZ +QO +qg +PA +gs +oT +Dj +ca +NN +ca +yH +bb +bb +lg +Hl +Hl +Hl +Hl +Hl +"} +(26,1,1) = {" +Hl +Hl +Hl +Hl +Hl +yE +yE +Vc +kl +tX +GR +cW +Do +xM +OH +pS +Rd +zz +Te +no +Ws +Kg +Kg +Kg +GT +ca +sX +oT +Za +sG +Dj +NN +sX +PA +Za +Za +Dj +NN +ca +ca +GA +bb +bb +Ec +Nl +Hl +Hl +Hl +Hl +"} +(27,1,1) = {" +Hl +Hl +Hl +yE +yE +yE +vZ +cA +Do +Do +UY +Do +tn +xM +OH +bv +zz +Te +fI +gz +Ws +GD +Kg +Kg +VB +ca +sX +Za +Jq +sG +Dj +ca +Kc +PA +Za +Za +Dj +ii +Hl +Hl +Hl +bb +iw +Ec +Ec +Hl +Hl +Hl +Gy +"} +(28,1,1) = {" +Hl +Hl +Hl +yE +nS +Ik +Mw +aJ +rW +LT +Mx +wy +GN +hs +OH +ka +zz +vf +je +Rt +Ws +Kg +GD +GD +kG +ca +NN +TV +Za +da +nQ +ca +sX +PA +jB +wx +ca +ca +Hl +Hl +Hl +Hl +bb +qJ +bb +Hl +Hl +Hl +Gy +"} +(29,1,1) = {" +Hl +Hl +Hl +yE +yE +ik +Mw +kq +Ag +Zo +zX +fF +aJ +tq +Tj +fw +Se +Vz +Vz +xk +Ws +Mt +cd +GD +ou +ca +NN +ca +TV +da +Dj +ca +sX +PA +YG +NN +ca +Hl +Hl +Hl +Hl +Ox +bb +bb +al +Hl +Hl +Hl +Hl +"} +(30,1,1) = {" +Hl +Hl +Hl +yE +nS +KH +jS +aJ +tN +PE +yO +Fy +aJ +OV +OH +fw +Se +Se +Vz +tr +Ws +LC +hj +GD +Cq +ca +ca +ca +ca +MR +ca +xL +NN +nr +NN +fa +ca +sR +Hl +Hl +Hl +bb +bb +iw +Hl +Hl +Hl +Hl +Hl +"} +(31,1,1) = {" +Hl +Hl +Hl +yE +yE +yE +um +wi +Do +xb +iG +ev +rO +xM +OH +yp +sx +oa +oa +dA +Ws +Kg +Mt +Kg +GS +ca +sD +gs +Um +Oq +xL +NN +ca +Xt +YU +gs +Dj +WW +Hl +Hl +Hl +Oc +bb +qJ +Hl +Hl +Hl +Hl +Hl +"} +(32,1,1) = {" +Hl +Hl +Hl +Hl +Hl +yE +yE +AE +bC +vq +Wa +sY +Vo +xM +OH +OH +NO +HQ +BL +mP +Ws +Kg +GD +Kg +tx +ca +sX +Za +Za +wt +qr +ca +ca +mL +Za +Za +rT +gR +Hl +Hl +Hl +qJ +bb +bb +Hl +Hl +Hl +Hl +Hl +"} +(33,1,1) = {" +Gy +Hl +Hl +Hl +Hl +yE +yE +yE +jD +yE +yE +bG +Aq +dl +lE +OH +OH +OH +OH +OH +OH +Cu +DA +DA +Zn +ca +YU +Za +oT +da +Dj +WS +ZG +PA +LM +Za +Dj +WI +Hl +Hl +Hl +Hl +bb +Ec +Hl +Hl +Hl +Hl +Hl +"} +(34,1,1) = {" +Gy +Hl +Hl +Hl +Hl +yE +LF +bK +Nc +HV +yE +yE +yE +lU +RH +Cu +Aj +Jj +aZ +WZ +Ay +Cu +Cu +Hl +Hl +Hl +Za +Za +Za +Za +dO +dO +dO +Hl +Za +Za +Hl +Hl +Hl +Hl +Hl +Hl +XU +Ec +Ox +Hl +Hl +Hl +Gy +"} +(35,1,1) = {" +Gy +Gy +Hl +Hl +Hl +yE +tD +NH +mj +AB +dV +uA +yE +tG +Uc +Cu +Ak +PQ +KX +PQ +qR +qb +Cu +Hl +Hl +Hl +Hl +Za +Hl +Za +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +iw +bb +bb +Hl +Hl +Gy +Gy +"} +(36,1,1) = {" +Gy +Gy +Hl +Hl +Hl +yE +yE +mF +Gb +ud +Ge +mI +yE +VK +AX +Ez +sO +pG +WZ +nd +gr +Yj +Cu +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +bb +bb +lJ +bb +Hl +Hl +Gy +Gy +"} +(37,1,1) = {" +Gy +Gy +Hl +Hl +Hl +Hl +yE +yE +pi +ve +Yw +eC +yE +pf +Gs +PI +NL +Lz +jR +Gn +Fj +wF +Cu +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Nl +Xm +bb +bb +qD +bb +Gy +Gy +"} +(38,1,1) = {" +Gy +Gy +Hl +Hl +Hl +Hl +Hl +yE +yE +yE +yE +yE +yE +Cu +Cu +Cu +wT +PV +wc +zh +WN +Cu +Cu +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +sJ +bb +rS +bb +Gy +Gy +"} +(39,1,1) = {" +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Cu +Cu +Cu +rs +Cu +Cu +Cu +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +kZ +Gy +Gy +"} +(40,1,1) = {" +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +iE +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +bb +Gy +Gy +Gy +"} +(41,1,1) = {" +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Gy +Gy +Hl +Hl +Hl +Hl +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Gy +Gy +Gy +Gy +Gy +"} +(42,1,1) = {" +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +"} +(43,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Hl +Gy +Gy +Gy +Hl +Hl +Hl +Hl +Hl +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +"} +(44,1,1) = {" +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +Gy +"} diff --git a/code/datums/ruins/icemoon.dm b/code/datums/ruins/icemoon.dm index 81b7aea8582c..30b231c385c2 100644 --- a/code/datums/ruins/icemoon.dm +++ b/code/datums/ruins/icemoon.dm @@ -31,3 +31,11 @@ description = "Safety records for early Nanotrasen Spaceworks vessels were, and always have been, top of their class. Absolutely no multi-billion credit projects have been painstakingly erased from history. (Citation Needed)" suffix = "icemoon_crashed_holemaker.dmm" ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MINOR_LOOT, RUIN_TAG_SHELTER) + +/datum/map_template/ruin/icemoon/ice_lodge + name = "Ice Lodge" + id = "ice_lodge" + description = "Records show this settlement as belonging to the SRM, but no one has heard from them as of late. I wonder what happened?" + suffix = "icemoon_ice_lodge.dmm" + ruin_tags = list(RUIN_TAG_HARD_COMBAT, RUIN_TAG_MAJOR_LOOT, RUIN_TAG_SHELTER, RUIN_TAG_HAZARDOUS) + diff --git a/code/game/area/areas/ruins/icemoon.dm b/code/game/area/areas/ruins/icemoon.dm index 8e614c8a0e79..ec2c6b438f0c 100644 --- a/code/game/area/areas/ruins/icemoon.dm +++ b/code/game/area/areas/ruins/icemoon.dm @@ -24,3 +24,25 @@ /area/ruin/unpowered/crashed_holemaker name = "NTSV Holemaker II" // In honor of the kugelblitz shenanigan of all time icon_state = "green" + +// Ice Lodge + +/area/ruin/powered/icemoon/lodge/mainhall + name = "Main Hall" + icon_state = "bridge_hallway" + +/area/ruin/powered/icemoon/lodge/cellar + name = "Cellar" + icon_state = "yellow" + +/area/ruin/powered/icemoon/lodge/montagne_office + name = "Montagne's Office" + icon_state = "bridge" + +/area/ruin/powered/icemoon/lodge/residential + name = "Residential Quarters" + icon_state = "crew_quarters" + +/area/ruin/powered/icemoon/lodge/gear_room + name = "Gear Room" + icon_state = "security" diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 1163a5520631..161fc819b4a6 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -1294,3 +1294,18 @@ /obj/item/storage/ration/cheese_pizza_slice = 5, /obj/item/storage/ration/crayons = 2 // :) ) + +/obj/effect/spawner/lootdrop/chem_jug + loot = list( + /obj/item/reagent_containers/glass/chem_jug/carbon, + /obj/item/reagent_containers/glass/chem_jug/oxygen, + /obj/item/reagent_containers/glass/chem_jug/nitrogen, + /obj/item/reagent_containers/glass/chem_jug/hydrogen, + /obj/item/reagent_containers/glass/chem_jug/radium, + /obj/item/reagent_containers/glass/chem_jug/aluminium, + /obj/item/reagent_containers/glass/chem_jug/chlorine, + /obj/item/reagent_containers/glass/chem_jug/copper, + /obj/item/reagent_containers/glass/chem_jug/bromine, + /obj/item/reagent_containers/glass/chem_jug/iodine, + /obj/item/reagent_containers/glass/chem_jug/potassium, + /obj/item/reagent_containers/glass/chem_jug/sulfur) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 4e95b5558842..b74c4926ea17 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -185,6 +185,11 @@ user.do_attack_animation(src, ATTACK_EFFECT_KICK) take_damage(2) +/obj/structure/displaycase/broken + name = "broken display case" + desc = "A display case for prized possessions. Or at least it was, until someone smashed it open." + broken = 1 + /obj/structure/displaycase_chassis anchored = TRUE density = FALSE diff --git a/code/game/objects/structures/fence.dm b/code/game/objects/structures/fence.dm index 8697662ed097..819264eb1ced 100644 --- a/code/game/objects/structures/fence.dm +++ b/code/game/objects/structures/fence.dm @@ -111,11 +111,6 @@ cuttable = FALSE var/open = FALSE -/obj/structure/fence/door/Initialize() - . = ..() - - update_door_status() - /obj/structure/fence/door/opened icon_state = "door_opened" open = TRUE diff --git a/code/game/turfs/open/floor/plating/icemoon.dm b/code/game/turfs/open/floor/plating/icemoon.dm index ca1819af2531..0fd0d95faed3 100644 --- a/code/game/turfs/open/floor/plating/icemoon.dm +++ b/code/game/turfs/open/floor/plating/icemoon.dm @@ -223,3 +223,27 @@ /turf/open/floor/plating/asteroid/snow/ice/burn_tile() return FALSE +/turf/open/floor/wood/icemoon + baseturfs = /turf/open/floor/plating/asteroid/snow/ice/icemoon + initial_gas_mix = ICEMOON_DEFAULT_ATMOS + planetary_atmos = TRUE + slowdown = 0 + +/turf/open/floor/wood/ebony/icemoon + baseturfs = /turf/open/floor/plating/asteroid/snow/ice/icemoon + initial_gas_mix = ICEMOON_DEFAULT_ATMOS + planetary_atmos = TRUE + slowdown = 0 + +/turf/open/floor/plasteel/stairs/wood/icemoon + baseturfs = /turf/open/floor/plating/asteroid/snow/ice/icemoon + initial_gas_mix = ICEMOON_DEFAULT_ATMOS + planetary_atmos = TRUE + slowdown = 0 + +/turf/open/floor/concrete/slab_3/icemoon + baseturfs = /turf/open/floor/plating/asteroid/snow/ice/icemoon + initial_gas_mix = ICEMOON_DEFAULT_ATMOS + planetary_atmos = TRUE + slowdown = 0 + diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm index a91ad2b90050..6f1b40b3dc9d 100644 --- a/code/modules/hydroponics/fermenting_barrel.dm +++ b/code/modules/hydroponics/fermenting_barrel.dm @@ -76,6 +76,14 @@ icon_state = closed_state return ..() +/obj/structure/fermenting_barrel/gunpowder + name = "Gunpowder Barrel" + desc = "A wooden barrel packed with gunpowder. You should probably keep this away from sparks or open fires." + +/obj/structure/fermenting_barrel/gunpowder/Initialize() + . = ..() + reagents.add_reagent(/datum/reagent/gunpowder, 200) + /obj/structure/fermenting_barrel/distiller name = "Distiller" icon_state = "distiller" diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index ee76f02e02c8..8ab59cc6f658 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -7,6 +7,7 @@ icon = 'icons/obj/hydroponics/harvest.dmi' resistance_flags = FLAMMABLE var/obj/item/seeds/seed = null // type path, gets converted to item on New(). It's safe to assume it's always a seed item. + var/auto_scatter = TRUE /obj/item/grown/Initialize(newloc, obj/item/seeds/new_seed) . = ..() @@ -18,9 +19,9 @@ // This is for adminspawn or map-placed growns. They get the default stats of their seed type. seed = new seed() seed.adjust_potency(50-seed.potency) - - pixel_x = base_pixel_x + rand(-5, 5) - pixel_y = base_pixel_y + rand(-5, 5) + if(auto_scatter) + pixel_x = base_pixel_x + rand(-5, 5) + pixel_y = base_pixel_y + rand(-5, 5) if(seed) // Go through all traits in their genes and call on_new_plant from them. diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index 56ad2264ce01..6d56533e9953 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -179,11 +179,13 @@ volume = 50 amount_per_transfer_from_this = 10 possible_transfer_amounts = list(1,2,5,10,15,25,50) + var/auto_scatter = TRUE /obj/item/reagent_containers/glass/bottle/nutrient/Initialize() . = ..() - pixel_x = base_pixel_x + rand(-5, 5) - pixel_y = base_pixel_y + rand(-5, 5) + if(auto_scatter) + pixel_x = base_pixel_x + rand(-5, 5) + pixel_y = base_pixel_y + rand(-5, 5) /obj/item/reagent_containers/glass/bottle/nutrient/ez diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm index 1b8004cbd5b5..def184966c93 100644 --- a/code/modules/mob/living/simple_animal/corpse.dm +++ b/code/modules/mob/living/simple_animal/corpse.dm @@ -133,6 +133,13 @@ /obj/effect/mob_spawn/human/corpse/frontier/ranged outfit = /datum/outfit/frontier +/obj/effect/mob_spawn/human/corpse/frontier/surgeon + outfit = /datum/outfit/job/frontiersmen/doctor/corpse + +/datum/outfit/job/frontiersmen/doctor/corpse + name = "Frontiersmen Surgeon Corpse" + r_pocket = null + /obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper outfit = /datum/outfit/frontier/trooper @@ -169,6 +176,17 @@ /obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper/heavy/gunless outfit = /datum/outfit/frontier/trooper/heavy/gunless +/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper/flame + outfit = /datum/outfit/job/frontiersmen/ert/flamer/corpse + +/datum/outfit/job/frontiersmen/ert/flamer/corpse + name = "Frontiersman Flametrooper Corpse" + back = null + belt = /obj/item/storage/belt/security/military/frontiersmen + l_hand = null + + backpack_contents = null + /datum/outfit/frontier/trooper/heavy/gunless name = "Frontiersman Heavy Corpse (Gunless)" back = null @@ -251,3 +269,15 @@ id_job = "SolGov Sonnensoldner" outfit = /datum/outfit/job/solgov/sonnensoldner id_access_list = list(ACCESS_SOLGOV) + +/obj/effect/mob_spawn/human/corpse/srm/hunter + name = "SRM Hunter" + id_job = "Hunter" + outfit = /datum/outfit/job/roumain/security + id_access_list = null + +/obj/effect/mob_spawn/human/corpse/srm/montagne + name = "SRM Montagne" + id_job = "Hunter Montagne" + outfit = /datum/outfit/job/roumain/captain + id_access_list = null diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 70ce3f665bab..5005930855e4 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -33,7 +33,7 @@ var/check_friendly_fire = FALSE // Should the ranged mob check for friendlies when shooting var/retreat_distance = null //If our mob runs from players when they're too close, set in tile distance. By default, mobs do not retreat. var/minimum_distance = 1 //Minimum approach distance, so ranged mobs chase targets down, but still keep their distance set in tiles to the target, set higher to make mobs keep distance - + var/shoot_point_blank = FALSE // If this mob will still shoot even in melee range. //These vars are related to how mobs locate and target var/robust_searching = 0 //By default, mobs have a simple searching method, set this to 1 for the more scrutinous searching (stat_attack, stat_exclusive, etc), should be disabled on most mobs @@ -315,7 +315,10 @@ Goto(target,move_to_delay,minimum_distance) if(target) if(isturf(target_from.loc) && target.Adjacent(target_from)) //If they're next to us, attack - MeleeAction() + if(ranged && shoot_point_blank && ranged_cooldown <= world.time) + OpenFire(target) + else + MeleeAction() else if(rapid_melee > 1 && target_distance <= melee_queue_distance) MeleeAction(FALSE) @@ -698,3 +701,27 @@ if (length(initial(src.faction)) > 0) src.faction += initial(src.faction) src.faction += tag + +/mob/living/simple_animal/hostile/proc/fire_line(source, list/turfs, fire_source = "fire breath", ignite_turfs = FALSE, power = 4, flame_color = "red") + var/list/hit_list = list() + for(var/turf/T in turfs) + if(istype(T, /turf/closed)) + break + new /obj/effect/hotspot(T) + T.hotspot_expose(700,50,1) + if(ignite_turfs) + T.IgniteTurf(power,flame_color) + for(var/mob/living/L in T.contents) + if(L in hit_list || L == source) + continue + hit_list += L + L.adjustFireLoss(20) + to_chat(L, "You're hit by [source]'s [fire_source]!") + + // deals damage to mechs + for(var/obj/mecha/M in T.contents) + if(M in hit_list) + continue + hit_list += M + M.take_damage(45, BRUTE, "melee", 1) + sleep(1.5) diff --git a/code/modules/mob/living/simple_animal/hostile/human/cat_butcher.dm b/code/modules/mob/living/simple_animal/hostile/human/cat_butcher.dm deleted file mode 100644 index 0f14f615e5b6..000000000000 --- a/code/modules/mob/living/simple_animal/hostile/human/cat_butcher.dm +++ /dev/null @@ -1,86 +0,0 @@ -/mob/living/simple_animal/hostile/human/cat_butcherer - name = "Cat Surgeon" - desc = "Feline genemod physiological modification surgery is outlawed in Nanotrasen-controlled sectors. This doctor doesn't seem to care, and thus, is wanted for several warcrimes." - icon_state = "cat_butcher" - icon_living = "cat_butcher" - projectiletype = /obj/projectile/bullet/dart/tranq - projectilesound = 'sound/items/syringeproj.ogg' - ranged = TRUE - ranged_message = "fires the syringe gun at" - ranged_cooldown_time = 30 - speak_chance = 0 - stat_attack = HARD_CRIT - melee_damage_lower = 15 - melee_damage_upper = 15 - attack_verb_continuous = "slashes at" - attack_verb_simple = "slash at" - attack_sound = 'sound/weapons/circsawhit.ogg' - loot = list(/obj/effect/mob_spawn/human/corpse/cat_butcher, /obj/item/circular_saw, /obj/item/gun/syringe) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - faction = list("hostile") - check_friendly_fire = TRUE - var/impatience = 0 - -/mob/living/simple_animal/hostile/human/cat_butcherer/CanAttack(atom/the_target) - if(iscarbon(target)) - var/mob/living/carbon/human/C = target - if(C.getorgan(/obj/item/organ/ears/cat) && C.getorgan(/obj/item/organ/tail/cat) && C.has_trauma_type(/datum/brain_trauma/severe/pacifism))//he wont attack his creations - if(C.stat >= UNCONSCIOUS && (!HAS_TRAIT(C, TRAIT_NOMETABOLISM) || !istype(C.dna.species, /datum/species/ipc)))//unless they need healing - return ..() - else - return FALSE - return ..() - -/mob/living/simple_animal/hostile/human/cat_butcherer/AttackingTarget() - if(iscarbon(target)) - var/mob/living/carbon/human/L = target - if(!L.getorgan(/obj/item/organ/ears/cat) && L.stat >= UNCONSCIOUS) //target doesnt have cat ears - if(L.getorgan(/obj/item/organ/ears)) //slice off the old ears - var/obj/item/organ/ears/ears = L.getorgan(/obj/item/organ/ears) - visible_message("[src] slices off [L]'s ears!", "You slice [L]'s ears off.") - ears.Remove(L) - ears.forceMove(get_turf(L)) - else //implant new ears - visible_message("[src] attaches a pair of cat ears to [L]!", "You attach a pair of cat ears to [L].") - var/obj/item/organ/ears/cat/newears = new - newears.Insert(L, drop_if_replaced = FALSE) - return - else if(!L.getorgan(/obj/item/organ/tail/cat) && L.stat >= UNCONSCIOUS) - if(L.getorgan(/obj/item/organ/tail)) //cut off the tail if they have one already - var/obj/item/organ/tail/tail = L.getorgan(/obj/item/organ/tail) - visible_message("[src] severs [L]'s tail in one swift swipe!", "You sever [L]'s tail in one swift swipe.") - tail.Remove(L) - tail.forceMove(get_turf(L)) - else //put a cat tail on - visible_message("[src] attaches a cat tail to [L]!", "You attach a tail to [L].") - var/obj/item/organ/tail/cat/newtail = new - newtail.Insert(L, drop_if_replaced = FALSE) - return - else if(!L.has_trauma_type(/datum/brain_trauma/severe/pacifism) && L.stat >= UNCONSCIOUS) //still does damage - visible_message("[src] drills a hole in [L]'s skull!", "You pacify [L]. Another successful creation.") - L.gain_trauma(/datum/brain_trauma/severe/pacifism, TRAUMA_RESILIENCE_SURGERY) - say("I'm a genius!!") - L.health += 20 //he heals a bit whenever he finishes - else if(L.stat >= UNCONSCIOUS) //quickly heal them up and move on to our next target! - visible_message("[src] injects [L] with an unknown medicine!", "You inject [L] with medicine.") - L.SetSleeping(0, FALSE) - L.SetUnconscious(0, FALSE) - L.adjustOxyLoss(-50)// do CPR first - if(L.blood_volume <= 500) //bandage them up and give em some blood if they're bleeding - L.blood_volume += 30 - L.heal_bleeding(10) - if(L.getBruteLoss() >= 50)// first, did we beat them into crit? if so, heal that - var/healing = min(L.getBruteLoss(), 120) - L.adjustBruteLoss(-healing) - L.heal_bleeding(10) - return - else if(L.getFireLoss() >= 50) // are they still down from other damage? fix it, but not as fast as the burns - var/healing = min(L.getFireLoss(), 50) - L.adjustFireLoss(-healing) - impatience += 50 - if(prob(impatience)) - FindTarget()//so we don't focus on some unconscious dude when we could get our eyes on the prize - impatience = 0 - say("Bah!!") - return - return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm b/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm index d8b4af5344ea..70bddd7be0e0 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm @@ -53,6 +53,40 @@ /mob/living/simple_animal/hostile/human/frontier/ranged/neutered loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged) +/mob/living/simple_animal/hostile/human/frontier/ranged/surgeon + icon_state = "frontiersmansurgeon" + icon_living = "frontiersmansurgeon" + loot = list(/obj/effect/mob_spawn/human/corpse/frontier/surgeon, + /obj/item/melee/knife/survival, + /obj/item/gun/syringe) + + minimum_distance = 1 + retreat_distance = null + projectiletype = /obj/projectile/bullet/dart/tranq + projectilesound = 'sound/items/syringeproj.ogg' + casingtype = null + ranged_message = "fires the syringe gun at" + ranged_cooldown_time = 30 + +/mob/living/simple_animal/hostile/human/frontier/ranged/surgeon/neuter + loot = list(/obj/effect/mob_spawn/human/corpse/frontier/surgeon) + +/mob/living/simple_animal/hostile/human/frontier/ranged/surgeon/internals + icon_state = "frontiersmansurgeon_mask" + icon_living = "frontiersmansurgeon_mask" + loot = list(/obj/effect/mob_spawn/human/corpse/frontier/surgeon, + /obj/item/melee/knife/survival, + /obj/item/gun/syringe, + /obj/item/clothing/mask/gas/sechailer, + /obj/item/tank/internals/emergency_oxygen/engi) + +/mob/living/simple_animal/hostile/human/frontier/ranged/surgeon/internals/neuter + icon_state = "frontiersmansurgeon_mask" + icon_living = "frontiersmansurgeon_mask" + loot = list(/obj/effect/mob_spawn/human/corpse/frontier/surgeon, + /obj/item/clothing/mask/gas/sechailer, + /obj/item/tank/internals/emergency_oxygen/engi) + /mob/living/simple_animal/hostile/human/frontier/ranged/mosin icon_state = "frontiersmanrangedrifle" icon_living = "frontiersmanrangedrifle" @@ -107,6 +141,33 @@ /mob/living/simple_animal/hostile/human/frontier/ranged/trooper/neutered loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper) +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/flame + icon_state = "frontiersmanflametrooper" + icon_living = "frontiersmanflametrooper" + loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper/flame, + /obj/item/flamethrower) + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + minbodytemp = 0 + maxbodytemp = 1000 + + minimum_distance = 1 + retreat_distance = null + shoot_point_blank = TRUE + projectiletype = null + projectilesound = 'sound/weapons/gun/flamethrower/flamethrower1.ogg' + casingtype = null + +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/flame/OpenFire() + var/turf/T = get_ranged_target_turf_direct(src, target, 4) + var/list/burn_turfs = getline(src, T) - get_turf(src) + visible_message("[src] [ranged_message] at [target.name]!") + playsound(src, projectilesound, 100, TRUE) + fire_line(src, burn_turfs, "flamethrower", TRUE, 10) + ranged_cooldown = world.time + ranged_cooldown_time + +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/flame/neuter + loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper/flame) + /mob/living/simple_animal/hostile/human/frontier/ranged/trooper/skm icon_state = "frontiersmanrangedak47" icon_living = "frontiersmanrangedak47" @@ -117,7 +178,7 @@ loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper, /obj/item/gun/ballistic/automatic/assault/skm) -/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/internals +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/skm/internals icon_state = "frontiersmanrangedak47_mask" icon_living = "frontiersmanrangedak47_mask" loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper, @@ -127,7 +188,7 @@ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 -/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/internals/neutered +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/skm/internals/neutered loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper, /obj/item/clothing/mask/gas, /obj/item/tank/internals/emergency_oxygen/engi) @@ -184,7 +245,7 @@ minbodytemp = 0 -/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/heavy/neutered +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/heavy/internals/neutered loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper/heavy/gunless, /obj/item/clothing/mask/gas, /obj/item/tank/internals/emergency_oxygen/engi) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index b7a2f0912653..6a153adc54e0 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -179,7 +179,7 @@ Difficulty: Medium var/increment = 360 / spiral_count for(var/j = 1 to spiral_count) var/list/turfs = line_target(j * increment + i * increment / 2, range, src) - INVOKE_ASYNC(src, PROC_REF(fire_line), turfs) + INVOKE_ASYNC(src, PROC_REF(dragon_fire_line), turfs) SLEEP_CHECK_DEATH(25) SetRecoveryTime(30) @@ -250,11 +250,11 @@ Difficulty: Medium var/range = 15 var/list/turfs = list() turfs = line_target(-40, range, at) - INVOKE_ASYNC(src, PROC_REF(fire_line), turfs) + INVOKE_ASYNC(src, PROC_REF(dragon_fire_line), turfs) turfs = line_target(0, range, at) - INVOKE_ASYNC(src, PROC_REF(fire_line), turfs) + INVOKE_ASYNC(src, PROC_REF(dragon_fire_line), turfs) turfs = line_target(40, range, at) - INVOKE_ASYNC(src, PROC_REF(fire_line), turfs) + INVOKE_ASYNC(src, PROC_REF(dragon_fire_line), turfs) /mob/living/simple_animal/hostile/megafauna/dragon/proc/line_target(offset, range, atom/at = target) if(!at) @@ -268,32 +268,9 @@ Difficulty: Medium T = check return (getline(src, T) - get_turf(src)) -/mob/living/simple_animal/hostile/megafauna/dragon/proc/fire_line(list/turfs) +/mob/living/simple_animal/hostile/megafauna/dragon/proc/dragon_fire_line(list/turfs) SLEEP_CHECK_DEATH(0) - dragon_fire_line(src, turfs) - -//fire line keeps going even if dragon is deleted -/proc/dragon_fire_line(source, list/turfs) - var/list/hit_list = list() - for(var/turf/T in turfs) - if(istype(T, /turf/closed)) - break - new /obj/effect/hotspot(T) - T.hotspot_expose(700,50,1) - for(var/mob/living/L in T.contents) - if(L in hit_list || L == source) - continue - hit_list += L - L.adjustFireLoss(20) - to_chat(L, "You're hit by [source]'s fire breath!") - - // deals damage to mechs - for(var/obj/mecha/M in T.contents) - if(M in hit_list) - continue - hit_list += M - M.take_damage(45, BRUTE, "melee", 1) - sleep(1.5) + fire_line(src, turfs) /mob/living/simple_animal/hostile/megafauna/dragon/proc/swoop_attack(lava_arena = FALSE, atom/movable/manual_target, swoop_cooldown = 30) if(stat || swooping) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice_whelp.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice_whelp.dm index 7a4d8cb234c2..8973b3ed18b5 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice_whelp.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice_whelp.dm @@ -40,7 +40,7 @@ /mob/living/simple_animal/hostile/asteroid/ice_whelp/OpenFire() var/turf/T = get_ranged_target_turf_direct(src, target, fire_range) var/list/burn_turfs = getline(src, T) - get_turf(src) - dragon_fire_line(src, burn_turfs) + fire_line(src, burn_turfs) /mob/living/simple_animal/hostile/asteroid/ice_whelp/death(gibbed) move_force = MOVE_FORCE_DEFAULT diff --git a/code/modules/paperwork/paper_premade.dm b/code/modules/paperwork/paper_premade.dm index 89cc40517a5f..81c84d0b28f4 100644 --- a/code/modules/paperwork/paper_premade.dm +++ b/code/modules/paperwork/paper_premade.dm @@ -112,3 +112,12 @@ name = "URGENT!" default_raw_text = "A hastily written note has been scribbled here...

Please use the ore redemption machine in the cargo office for smelting. PLEASE!

--The Research Staff" +//////////// Ruins + +/obj/item/paper/crumpled/bloody/fluff/ruin/icemoon/cellar_warning + name = "\improper Scrawled Note" + default_raw_text = "

HEY! YOU.


Yeah. You.
One of the Hunters got away and holed up in the cellar and set up a whole bunch of traps. Crazy asshole has already killed like four of our guys in the murder basement. So boss says keep the door sealed and let the prick starve.

SO DONT OPEN IT.

" + +/obj/item/paper/crumpled/bloody/fluff/ruin/icemoon/tally_sheet + name = "\improper Tally Sheet" + default_raw_text = "

Marksmanship Leaderboard


" diff --git a/code/modules/projectiles/ammunition/_ammo_casing.dm b/code/modules/projectiles/ammunition/_ammo_casing.dm index 57b6e9b27b57..02578e4592f8 100644 --- a/code/modules/projectiles/ammunition/_ammo_casing.dm +++ b/code/modules/projectiles/ammunition/_ammo_casing.dm @@ -29,6 +29,8 @@ /// If true, the casing's sprite will automatically be transformed in Initialize(). /// Disable for things like rockets or other heavy ammunition that should only appear right-side up. var/auto_rotate = TRUE + /// If you dont want to bullets to randomly change position on spawn. For mapping. + var/auto_scatter = TRUE ///Pellets for spreadshot var/pellets = 1 @@ -142,8 +144,9 @@ . = ..() if(projectile_type) BB = new projectile_type(src) - pixel_x = base_pixel_x + rand(-10, 10) - pixel_y = base_pixel_y + rand(-10, 10) + if(auto_scatter) + pixel_x = base_pixel_x + rand(-10, 10) + pixel_y = base_pixel_y + rand(-10, 10) item_flags |= NO_PIXEL_RANDOM_DROP if(auto_rotate) transform = transform.Turn(round(45 * rand(0, 32) / 2)) diff --git a/icons/mob/simple_frontiersman.dmi b/icons/mob/simple_frontiersman.dmi index c5b9962fd2368d9d0bedc76c5fd0b9ba6e6a7127..76532a9b45e9c81a31a838c1487c2caf61f1f9dc 100644 GIT binary patch literal 41395 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 A@Bjb+ literal 29244 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 W3hL1+8Sr(GAWc;rl}aU>u>S?Co9%)C diff --git a/shiptest.dme b/shiptest.dme index 7372fdd3f03f..af6247fb0c11 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -2709,7 +2709,6 @@ #include "code\modules\mob\living\simple_animal\hostile\gorilla\emotes.dm" #include "code\modules\mob\living\simple_animal\hostile\gorilla\gorilla.dm" #include "code\modules\mob\living\simple_animal\hostile\gorilla\visuals_icons.dm" -#include "code\modules\mob\living\simple_animal\hostile\human\cat_butcher.dm" #include "code\modules\mob\living\simple_animal\hostile\human\frontiersman.dm" #include "code\modules\mob\living\simple_animal\hostile\human\human.dm" #include "code\modules\mob\living\simple_animal\hostile\human\nanotrasen.dm" From 18cce57a24145bbef1bf9166ca63c3e5474d345f Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 16 Oct 2024 13:30:36 -0500 Subject: [PATCH 008/274] Automatic changelog generation for PR #3291 [ci skip] --- html/changelogs/AutoChangeLog-pr-3291.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3291.yml diff --git a/html/changelogs/AutoChangeLog-pr-3291.yml b/html/changelogs/AutoChangeLog-pr-3291.yml new file mode 100644 index 000000000000..eeaccaa29916 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3291.yml @@ -0,0 +1,14 @@ +author: Gristlebee +changes: + - {rscadd: Ice Lodge Ruin Map and areas} + - {rscadd: Simple Mob Frontiersmen Flametrooper and Surgeon} + - {rscadd: shoot_point_blank option for simple mobs} + - {rscadd: dragon_fire_line supports igniting tiles} + - {rscadd: 'broken display case, gunpowder barrel, SRM corpse spawners, chemical + jug spawners'} + - {rscdel: Cat Butcher} + - {bugfix: Frontiersmen simplemob pathing} + - {bugfix: Fence doors spawning open when they should be closed and vice versa} + - {code_imp: 'scattering can be disabled with auto_scatter var for bullets, grown + items and nutrient bottles'} +delete-after: true From def8140c954523c1eb9e6885ae639b663687a448 Mon Sep 17 00:00:00 2001 From: generalthrax <139387950+generalthrax@users.noreply.github.com> Date: Wed, 16 Oct 2024 13:30:43 -0500 Subject: [PATCH 009/274] Gezena is no longer barefoot (#3566) ## About The Pull Request Someone commented out something to try and see why something was broken and left it. Digi isn't broken either so I'm not sure how this happened. Also removes partial-insulation from the Gezenan captain's gloves that Apogee happened to forget. ## Why It's Good For The Game It's too early in the day for the marines to get silly like this. ## Changelog :cl: fix: Gezena has shoes again del: Gezenan captain gloves no longer have partial insulation in parity with other captain gloves. /:cl: --- code/modules/clothing/factions/gezena.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/clothing/factions/gezena.dm b/code/modules/clothing/factions/gezena.dm index d4ff3169880d..7c17b4ca2dcc 100644 --- a/code/modules/clothing/factions/gezena.dm +++ b/code/modules/clothing/factions/gezena.dm @@ -221,7 +221,6 @@ name = "\improper PGFN Captain's Ihuz-irra Gloves" desc = "As the name, “ihuz-irra”, or “sure-grip”, suggests, the gloves employed by the PGF military are designed to ensure the highest possible grip is maintained while also providing protection from blisters in work environments. Bears the silver standard of a Gezenan captain." icon_state = "captaingloves" - siemens_coefficient = 0.5 //Boots @@ -229,7 +228,7 @@ name = "\improper PGF Uhro-sez Boots" desc = "The word “uhro-sez” translates to “steel-foot”, in reference to the steel toe protection provided by these boots. Standard issue to all members of all branches of the PGF military." icon = 'icons/obj/clothing/faction/gezena/feet.dmi' - //mob_overlay_icon = 'icons/mob/clothing/faction/gezena/feet.dmi' todo: find out why digi breaks here + mob_overlay_icon = 'icons/mob/clothing/faction/gezena/feet.dmi' icon_state = "pgfboots" item_state = "jackboots" From 9401d463a3ba3f319271eb7bbea64eeca3a738c8 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 16 Oct 2024 13:50:44 -0500 Subject: [PATCH 010/274] Automatic changelog generation for PR #3566 [ci skip] --- html/changelogs/AutoChangeLog-pr-3566.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3566.yml diff --git a/html/changelogs/AutoChangeLog-pr-3566.yml b/html/changelogs/AutoChangeLog-pr-3566.yml new file mode 100644 index 000000000000..1b84c6b5b804 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3566.yml @@ -0,0 +1,6 @@ +author: generalthrax +changes: + - {bugfix: Gezena has shoes again} + - {rscdel: Gezenan captain gloves no longer have partial insulation in parity with + other captain gloves.} +delete-after: true From 718756e1b44c0f48a68e38e18e0a4a7fa4b7ae7e Mon Sep 17 00:00:00 2001 From: Gristlebee <56049844+Gristlebee@users.noreply.github.com> Date: Wed, 16 Oct 2024 11:56:36 -0700 Subject: [PATCH 011/274] Fixes shotgun calibers (#3573) ## About The Pull Request Fixes the caliber strings on the beanbag, rubber, improvised and incendiary shotgun rounds and shotguns being unable to load them as a consequence. Magazines check for an exact caliber match, so having unique strings like "12ga beanbag" means the round gets rejected. ## Why It's Good For The Game Fixes are good ## Changelog :cl: fix: Shotgun calibers and shotguns being unable to load certain rounds /:cl: --- code/modules/projectiles/ammunition/ballistic/shotgun.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index 2bf041a0e661..1a2590a5b36e 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -27,7 +27,6 @@ name = "beanbag slug" desc = "A weak beanbag slug for riot control." icon_state = "beanbag" - caliber = "12ga beanbag" custom_materials = list(/datum/material/iron=250) projectile_type = /obj/projectile/bullet/slug/beanbag @@ -35,7 +34,6 @@ name = "rubber shot" desc = "A shotgun casing filled with densely-packed rubber balls, used to incapacitate crowds from a distance." icon_state = "rubber" - caliber = "12ga rubber" projectile_type = /obj/projectile/bullet/pellet/rubbershot pellets = 8 variance = 25 @@ -45,7 +43,6 @@ name = "incendiary slug" desc = "An incendiary-coated shotgun slug." icon_state = "incendiary" - caliber = "12ga incendiary" projectile_type = /obj/projectile/bullet/incendiary/shotgun /obj/item/ammo_casing/shotgun/blank @@ -59,7 +56,6 @@ name = "improvised shell" desc = "An extremely weak shotgun shell with multiple small pellets made out of metal shards." icon_state = "improvised" - caliber = "improvised 12ga" projectile_type = /obj/projectile/bullet/pellet/improvised custom_materials = list(/datum/material/iron=250) pellets = 10 From 0437333c32f3bf1125ac59a4e55565654ed4e7dc Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 16 Oct 2024 14:07:06 -0500 Subject: [PATCH 012/274] Automatic changelog generation for PR #3573 [ci skip] --- html/changelogs/AutoChangeLog-pr-3573.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3573.yml diff --git a/html/changelogs/AutoChangeLog-pr-3573.yml b/html/changelogs/AutoChangeLog-pr-3573.yml new file mode 100644 index 000000000000..a1f9c3c2d60e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3573.yml @@ -0,0 +1,4 @@ +author: Gristlebee +changes: + - {bugfix: Shotgun calibers and shotguns being unable to load certain rounds} +delete-after: true From 9759ebf588b7fa418c4eaadccc0ef62090b16482 Mon Sep 17 00:00:00 2001 From: Imaginos16 <77556824+Imaginos16@users.noreply.github.com> Date: Wed, 16 Oct 2024 13:44:15 -0700 Subject: [PATCH 013/274] Resprites Colored Jumpsuits! (#3570) ## About The Pull Request Look upon my works ye mighty, and despair. ![image](https://github.com/user-attachments/assets/527eddb7-3359-4d5c-a35a-875d42469a37) This PR notably removes the woefully underused and really badly sprited rainbow jumpsuit I did three years ago, as well as a mediocre reference to Fight Club. ## Why It's Good For The Game Better sprites! ## Changelog :cl: PositiveEntropy imageadd: All colored jumpsuits have been resprited! del: Rainbow and khaki jumpsuits (including the buster subtype) have been removed. /:cl: --- code/game/machinery/washing_machine.dm | 2 -- code/game/objects/items/miscellaneous.dm | 1 - .../modules/client/loadout/loadout_uniform.dm | 4 --- .../clothing/outfits/factions/independent.dm | 2 +- code/modules/clothing/under/color.dm | 27 ++---------------- .../simple_animal/hostile/human/survivors.dm | 1 - icons/mob/clothing/under/color.dmi | Bin 15023 -> 15493 bytes icons/mob/species/misc/digitigrade.dmi | Bin 105945 -> 111207 bytes icons/obj/clothing/under/color.dmi | Bin 12146 -> 8217 bytes 9 files changed, 3 insertions(+), 34 deletions(-) diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 4f32fe1d2d3d..6fe9ec2a653f 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -9,7 +9,6 @@ GLOBAL_LIST_INIT(dye_registry, list( DYE_PURPLE = /obj/item/clothing/under/color/lightpurple, DYE_BLACK = /obj/item/clothing/under/color/black, DYE_WHITE = /obj/item/clothing/under/color/white, - DYE_RAINBOW = /obj/item/clothing/under/color/rainbow, DYE_MIME = /obj/item/clothing/under/rank/civilian/mime, DYE_CLOWN = /obj/item/clothing/under/rank/civilian/clown, DYE_CHAP = /obj/item/clothing/under/rank/civilian/chaplain, @@ -33,7 +32,6 @@ GLOBAL_LIST_INIT(dye_registry, list( DYE_PURPLE = /obj/item/clothing/under/color/jumpskirt/lightpurple, DYE_BLACK = /obj/item/clothing/under/color/jumpskirt/black, DYE_WHITE = /obj/item/clothing/under/color/jumpskirt/white, - DYE_RAINBOW = /obj/item/clothing/under/color/jumpskirt/rainbow, DYE_MIME = /obj/item/clothing/under/rank/civilian/mime/skirt, DYE_CHAP = /obj/item/clothing/under/rank/civilian/chaplain/skirt, DYE_QM = /obj/item/clothing/under/rank/cargo/qm/skirt, diff --git a/code/game/objects/items/miscellaneous.dm b/code/game/objects/items/miscellaneous.dm index 3c8f3ead8709..03f3797c4c49 100644 --- a/code/game/objects/items/miscellaneous.dm +++ b/code/game/objects/items/miscellaneous.dm @@ -119,7 +119,6 @@ new /obj/item/storage/belt/fannypack/bustin(src) new /obj/item/clothing/gloves/color/black(src) new /obj/item/clothing/shoes/jackboots(src) - new /obj/item/clothing/under/color/khaki/buster(src) new /obj/item/grenade/chem_grenade/ghostbuster(src) new /obj/item/grenade/chem_grenade/ghostbuster(src) new /obj/item/grenade/chem_grenade/ghostbuster(src) diff --git a/code/modules/client/loadout/loadout_uniform.dm b/code/modules/client/loadout/loadout_uniform.dm index 96b4088b65bd..162b6718ca6f 100644 --- a/code/modules/client/loadout/loadout_uniform.dm +++ b/code/modules/client/loadout/loadout_uniform.dm @@ -53,10 +53,6 @@ display_name = "jumpsuit, random" path = /obj/item/clothing/under/color/random //literally useless if grey assistants is off -/datum/gear/uniform/color/rainbow - display_name = "jumpsuit, rainbow" - path = /obj/item/clothing/under/color/rainbow - //Shorts /datum/gear/uniform/athshortsred diff --git a/code/modules/clothing/outfits/factions/independent.dm b/code/modules/clothing/outfits/factions/independent.dm index ba883d59f4dd..30017e9eb545 100644 --- a/code/modules/clothing/outfits/factions/independent.dm +++ b/code/modules/clothing/outfits/factions/independent.dm @@ -441,7 +441,7 @@ job_icon = "cargotechnician" ears = /obj/item/radio/headset/headset_cargo - uniform = /obj/item/clothing/under/color/khaki + uniform = /obj/item/clothing/under/color/lightbrown dcoat = /obj/item/clothing/suit/hooded/wintercoat/cargo backpack_contents = list(/obj/item/modular_computer/tablet/preset/cargo=1) diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index a6f3bfa7cf9d..7ac32c9c1295 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -11,7 +11,7 @@ /obj/item/clothing/under/color/random icon_state = "random_jumpsuit" - mob_overlay_state = "rainbow" // if you somehow equip it like that + mob_overlay_state = "white" // if you somehow equip it like that /obj/item/clothing/under/color/random/Initialize() ..() @@ -25,7 +25,7 @@ /obj/item/clothing/under/color/jumpskirt/random icon_state = "random_jumpsuit" //Skirt variant needed - mob_overlay_state = "rainbow" + mob_overlay_state = "white" /obj/item/clothing/under/color/jumpskirt/random/Initialize() ..() @@ -186,15 +186,6 @@ icon_state = "lightbrown_skirt" item_state = "lb_suit" -/obj/item/clothing/under/color/khaki - name = "khaki jumpsuit" - icon_state = "khakij" - item_state = "lb_suit" - -/obj/item/clothing/under/color/khaki/buster - name = "buster jumpsuit" - desc = "There seems to be a large stain in the left pocket. Someone must have squashed a really big twinkie." - /obj/item/clothing/under/color/brown name = "brown jumpsuit" icon_state = "brown" @@ -214,17 +205,3 @@ name = "maroon jumpskirt" icon_state = "maroon_skirt" item_state = "r_suit" - -/obj/item/clothing/under/color/rainbow - name = "rainbow jumpsuit" - desc = "A multi-colored jumpsuit!" - icon_state = "rainbow" - item_state = "rainbow" - can_adjust = FALSE - -/obj/item/clothing/under/color/jumpskirt/rainbow - name = "rainbow jumpskirt" - desc = "A multi-colored jumpskirt!" - icon_state = "rainbow_skirt" - item_state = "rainbow" - can_adjust = FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/human/survivors.dm b/code/modules/mob/living/simple_animal/hostile/human/survivors.dm index ed356764271f..eccb38bee5bd 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/survivors.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/survivors.dm @@ -202,7 +202,6 @@ /obj/item/clothing/under/rank/cargo/miner/lavaland = 10, /obj/item/clothing/under/rank/prisoner = 10, /obj/item/clothing/under/rank/cargo/miner/lavaland/old = 5, - /obj/item/clothing/under/color/khaki/buster = 5, /obj/item/clothing/under/rank/cargo/miner = 5 ) ) diff --git a/icons/mob/clothing/under/color.dmi b/icons/mob/clothing/under/color.dmi index 8bda1f9c7d6c2547f6f718ae9dfdfca92339e66d..d87321f4f018e6df00a96e99f15b0f3d7ae89d7c 100644 GIT binary patch literal 15493 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 literal 15023 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

w9j*HEIv1!O!Vw+-Y$k>cjD` zd9CHB(S*rK{Q=&>L;-^FzU5@^0XLI`;u^o`YAlNU^ImP5{B3`kl_n-2#xFC^y^v`ztfOV#P!K#JVxr-wS6DN z4Tv~Z3F2~YxG}g!^;9%~jooL?L@}(@a{)rCPHVK$iWf4r4MB<1V+iuvF5 z-T<>1hjJ@jHOn;JE~|InmK*|4DE?PBSPJtEs7L#3?&@uQxBPA%DfkBmn}5SWykPVO z%Il^Q{*gd4b@Cd=8uQ12du9edu0VI&-X>$+9CCA{->>Y`Dm#2&`$Ysa4f?*Jl4^>mL3K{-p+F-qXcAWKO^DbcpEC4p2e5(Fs8p#DzeZ>$Hj1H+9yg%;% zk8Snw9KmaHHQK^|@BIvzt*}D{3+n}nJMweZ@MG`ph>a1P@$x<1se9{u@IY(^*}^`( zx2t%(s5fYx8kihPmKwNOSlZn~(1;x-w;!Sie0OD;fLbAo>Q)^cEj~!bHI+X^-FjiX2(6?czM&>nh-sL*SjB4 z61e)tI#0@4HC(*yGUj>E?7ID2o0UT(D~*<07DzGQuRjL%y5d^;rM`qKdvTNdZ5y%f zLCcnt`@>bA4=4}nq_84DmC-0G&?9Tm&>i^1@M}rHkD4HDXv9in2Ap=ooH@(Bl1C$- z!|ufj+rEo*OhsFRLM?iAuWl<7yOX(IgLU;ds+ueynDnzoPR^fO&)ZD96-@D3)LNUM z<)IBmCwBhQ3V9%rALj#m7{|U^<#eRM^XyB>bcc(x>p|;Blk@P;w=h`P2wD!B) zgBaiqq#$LGRB#PC;CTNfq0v)WTJ#nbW|mkf2aaV@z|>*7(j?Knb>N^l_c=I-<1V{k za0-77xHj^>)b*y_^9RtND$iXroVq@lf$!&0Dej|)InWCci{Hbsuz5JTArAKe;s|P9 zi8CNlnyH=@jF6>WnFYnUe-UpfZFcwBpmhGuzHmLG)wm&R{%-*mOrG9!u-qYG+O)tQErD2~|3ELtDKO3~uWsPP< z)uAt-wi)KILY-isGZf>e@_nFoyC%U#>;VJ*#rmHWfx@CzdXNzY9`*Mi!KuGUqFDEo&r?DNp6E$^c4>7X0$bmPZ5^5i{Za_K8jGMb@WC+$ zX1`#gKnXLo7l}o#KPspbk5Dq82jmt5^BbZQp^p4a+`{WrO4w&~;LiT_>Hq;|3yYqI zhhuZ=G-vP=u*Ic`EpS72>2R;CflzvDGiWh?owgDN%hRl+iM-H~jV($+%_|92nNpOk zSGvA!AkLIBtjtH>51?K6kJaJ-=~o}?24iO?o^xKjUi9#;x0m=XGalFLAR5g}Wht7G zg@?+lJ8Bfx{qGy<+3atvhc`d)4wM_PLF}Wa>ibl~FS5EJD`==>Ui_sMN^KG);w{<5xojM5&e0iO1> zJYj6}Rzox$UC7KY4b|I|I1=6eu2q`95zEk1#m;=MBkqDWnU>%6g6+IICY!{| zeBcqhk>}FV0`9PcS|PhMD*YTUfWoS@Vcx6Me_OxVNNBfa99iYb7 zE>;3#O6D}yUj@iqV;JOBN4it1rImaTerGl`fvvHZ5GCf&4g zTSHp-bYkHq1!`;p=HRl|p<`~=``wsgYUS5SoWrX>Conpex$e)aC7wqrtSqf(7RvSz zdG;?YmA>=IS)z)dAl|*0GvKOeREmP0bm`97>>ck8Nk|~8v3TBb?kp@Sbs`|pb&#U0 zjJA8qW}}C@w%p{ouLwcFODb9d(lWMol4d`)?yLn_)5fduGV<5#O{rw;{WYX_FW&i< z5#I=6iteDIA)@L|2n~#i(v4Q33sSz$LB)K9q~`NG#^AlvY>zu?>5!RJj{G8a z4+v~r*DW2qRH_yCaNBc0>q*+DPj^Y)T>tg=#aqVcQorBF*R?s@{mA~@komuQX!X{~ z5xvl=Q*5p~*IdVU@T2d%(JauVU{zuNT4it9cOL$Pv(~IZU-Y8g*v`@U3F|@aR5xYi z8a38^Em9}D*gC7L;Hbj-Nnluq?^jjtQ?m23eW_wu=mnX}z~8_Y_d9j8P#vB4@r!l@ zphI7W*)EHGK9<)ro+dP)xyvkVl1I~vbyV8uiRzlFLgHsryaivqwoCnE6dGsGqF%kB zgBqXgE>Fbi8j^wvympzRcKV;5arVXD;N)Q>NvS`S0ky1+=HGw)@nUX< zshQccqiH8f(A>(QZpM>x?x-gB&xElG9d@?9grK=JuWcEiPPC|C1AGXY*_djSi|8Sd zP^(S#SWA?Q%4OhG#O)oSgs$~4XSX-pp^Ld@F+$v4soBHA*+u1SF;_}YQoa$<15|~l z?ppmxQ!ZTMNji5~!V8Pw0j3yP)s!l}T|)puEhiWm@2&K^+oPWJ2GY|ctVQi-X4EL>wn&H`-+4XT zz+mKalB+iJr)!Ipf*e~yLqnqz5`vS@O>VGbE`c%>2GO7f^OOjo*Xq;?ySw^jH`l6< z2i-u%_-RLdzD?g=lA~3ZmX~iFA`U>M5BfH&vzHGlqmRbbCS4Ydtuuj>@uMH8E{@aUf&@2rpViN=w|03yPCk^A$^we&^=7?;rUH%KN2dXmi065(1HNbj z!@`Eix+S&WQ0G7P9uRjZx=b7sm{-K^xJK_+C>0UUX5VD@DrUDP&HTNP!_MT+?K@dbTsYji+Zs+fnSA*ClHjqEz*Vjp#{qPd*<@HIT78m>nHhM1wt zCx!9ZFs@ruFOg}DK1hyzyaH<%tI!{LDwVc@V@u7(pCqT;@cq>4N5w%lHuqkyKGbRC z-dNmR6L@Fq&7)JQ?|Xgr6bN&GMrUQY@It?Q*uE({0K0@cxbE3y?^E#62lG(qH> zUNcg6BagP}u2|p{wwc!*Ww(VIFgh~sYW^zIm7bK1JZHxw7H4Vf8WjG^PS!>uY8!hI z8Auvi_V~)Xh6ag}diA{A+-D&nA?v691jIvmDoh8GoSei^^!{*OvvJ48VvTHhi;Wvmb1+2Sw9v5Wjsm$ zZkN4kZNIW9_DR1M->VAQ9@ac4udQt}R;EkO`M7!5{7vmisZm*}(MeJ{q9WPekQh|N zLPpP{Zu9a1D~M4p0Z#C0AdLW20#jQ#Lf3;Ar{1tXy_dm^b0M+Q=7)_xEcBV(sGHEM zCN><2$;jeG+g)yK)!aK*>VXZA^!OsOdQ9t=th&bkLd83*W|v)SP+f%mG{S_6FdX0gw>n;(9EGHfxi%Hi#J{JU1>;b%x}7PZ1( z4Rn*#P^*-yLDNR~?agq70KwPZ*;$1A^5u(j+6H-4e7t$3HH<<|PR;^0VC~n0J@?Xw z9*l$h8oiFP4C-AUDJhjZC!v5hC%{AzR z^Z^$S&$xLLp50hNGKBL%oUTrKn4SD2UGpvwafOZs%1P&+I6ctH+))v>P%ow*Q_u5H zIQROKFzZ;fcXdL2iCX88?3#$rvW7-SXRA*a0x990$NL^Owrmi8MFxuFI+s5UosO39Ebb_wlfpPtDTy9!Ht^s_O=n*d=)Qa0M9yqQ{3)v&mQw47fsEn7|*%5eoZ3tpb zo5Zk_OJ3NizL^Qm#nYab*i)&MqSer4^mg;Bl}kHk(1pj`D|fJ`SfgYsgAeDo%v9-t z;kn;owfy$_SYg2C=4W_PjfXMNY{ah&s7YD6*zyG^JSnU;FJIJvCz!{Lc-1FzzD z+)|~J^p9_S!oOy^$L$ufH5&B}Q`Hz_uUD zAn2!+LAMKLQi<5=GA%ZuUTter>H6r4z?t`W_oeIhRl8JT5-wSCYBPvT#2Ss#;84s&C+fA8GY-hNeR zPS(=$_Tkplt1)lta7LlFCg`cRa*e8dBvWWoxw*;tLdW{kbpPcw;XQi3&hO94?|V)^ zwL#-fBB1GaMpe+KN4^ovr;v`bj!sdaHbyh<=El`4CE;J)9 zpO2q`fq&oqaxV?R`z-#Ds` zc1H{wPVOtsehezd+GX<3c#u+EBG2kr-Ffl3JA|M#*Lh&aw|sUEutf`EofToYjhev#4TLTNdg zwr|Ck^O_~(=r9hBrMwCJ2f39T6x+{!f9;9n5j;oNYrYX${<*~BSEJ2(ZoKB!dv|o$ zKa!_bp%~T{;A-q@0MKk^N7YT2rPyek;7b~VAclq2QwaXt-UU}e%gf4kDx?Bmyd(l+bfR$7BD+oa`>1Uy8;xosasU5_*;5kN1 zYuK~wuJD7Tv%Za0VMnYk^3({8`vadjr?kG3_h%7C636a%TJUE^{6I+dQq7+mSN}gd z%rVd5zD`1Gh8V!#h?si57{g3FT&R`8Ip$D(lD;H25nH&p(-RQ@0*&Mh_LQ&8H|K{< zw$a3kfnU%s2#fep7^vlz< zZ@(;r&d&JNI%!tG3DS|1=4(w8_8EuGwTm-PvLJ2CJ?thdmA#Kp%Q;p1v-FOSi<{KoGEu*m)_5Z^3xA zjaV4=5?v58Ga%4ZwHaHTqSN<}X-i39$&NdcIwXLhKqn}udyr2%eQ`0lcyN9_6py}0 zLP$b`PNdcp(sSVh-qNzIyvY_i)Bbt7J>v!S#sU>*rWgEheb^F6w!p``$vU}1g*Qo! z-`^DEQJXycwBCnndV({B2v3{Oih719@w*62NDM?(#Hy8_|8#n31wo&+|1|Txw1S8w zh1bcaHN{d4#pJ<5s)(i~Ke8u`wmu1WpHa3jIdHIp9Zh{j<6yvRwB4X&1>ab$)!xp7 zAOH^_Kz%f<(_sU8=ngCd`kBCeDm9HHu^>PlI=6BJ^b#IQKBea! z)S}XmL-j%GI=*|^xDVzK3AP_u!elMh1+9}sR(78-OG z#wXJ?GvQW5HrJ?gdN9?z(V`f06dJKXSHx%Pv$sd)@U>zrKWw)wBqlfaj?m4NcP?@V z{*Ezr!4bj5d_?*MUr}6+yPrIKmQ{y!d<@O9hg8vS)3c1V!57aAwdq9;2wI)W#PZnY zRN*R#zL}n_+1-GX&*^T{*eoNS2w&XF@qKklhjXW9`tc4Gj5KQ6I--!IX4H*(#i+m# zFur}B>a#qoa;Cy7RrXcGo)fdm(I1^|w0e|P7x=pdQH4wp=Qnx=foeWWd65y=qu61V z$ApESZaa@q1|_3iR~bE6L^-ce*}qwDKUKJVhajoWLCZ+JI26?rIlVu;14Nue>_yFI zTB|v%7ex-XhJ{V~F&0QD|If}flP4wQr%&7cv32z&x)GmoAvr)ZkWw55qCY7Ve z{zIzLrmOaukH2X_j<5K+LVh}2*2;@;J9D#LbK9Eb=}u}|wq0}j@T&hCDwBF_P&G}6 zFYB$yk-Go;V?H1rzXhw>duz_q0YQ2poGb7Sy$=)>OWAZGBNfOKCi?`KYuME1=#u9b zBJb@vR_}}95(KX9QeMOLOl(%}N6;!=xih%87j35sv~@=@==t50X0BBXbCLe>LF?~2 z0l9%~enK?@JHUgn&dv@<>+9n#;@bc`o=#6CTZxy9) z2|#!dEK|V%|0;GSsh(J<+R!R3*D4|&44SB=6HW5=jFep`t~@!E42BXhmprdP^^G>` zyIUE504&iD7?~!mV%Gyl9epGQnYbdo)9>;;vAjNC+F_sp?UiwR481L>la|dA0rdC0 zZop`clI>eQ-fyq!^yEq75h?_rRFtq=QK&6};WuitVKnm4t)vYlGEd{sym&aVPFtw& zu9bXaSV+ORP%&RIVfvCC-07-_Tf>xdW!ROwgHwSg%QoBE^fNBU-Z0_N3E%2wYudNX zr1|eoQ@5TM=;k=itJu7igXoKesb(CXx1v zwuD>3W8xqQfmiS12N-s`@N~+#OQnY+rLsmVza-Y~5J*fN8E#5Ey9939Pv5A(7)SYJ zd+IK>|Frw}`d2My0On~Tcv5zC<7d;+pEY@jjkG0)sj~$$>c!e^TN$cZ=}rOd_wRWv zsIO@abt*(Z_PtTAsDUV*sb}!m_ug?+wiM&(DcEz1qU5g`0Mf+Mss&mQF6%2LkRmpQ zfV9@S(2P7w8xkYQ5Txb@S5UZr-lwU~AhEl?$Z$taj=q94;TBz%0k7>>;bq8qA7KAbrS%VZU~-}86NQ-3Vi2!kgF z_o+FRlpf|4h*HJlVNcuRCdluXfIw~)t6}Ehw)miSeYv(}j%l0jv#R&D@8uDLFIGA! zKfgK!*2$+lU<0O5>+E%cT!s4!kpy>{iK3E`z`54}=wN&KxefZlc&3JAnJYJlT8B^9 zCQ~bY5(Ltd6Ol{bXoStKo+X98@-9}cnL?cz^0S)O^#qQ3fU}&iF`Jl3x8AXx2&FBR zBrppwioe{5|DI8J5qzC}y3$L8_Qph});H>0%=lgpo;)*f|_}hS3P^U6x1_Psh-rtLPNPusEf!77;3jE*?RaG*pBZWKnHc4>W zyvy0Uec6D?Xm7?c;4U*dGR#ByK#IYJf5x6KzZKBS*+B=N*b>$XgzOkOh`95=e^n5@0y9gqkZ(#Ri_D{PF_3dEv4UkbB=4E6y8}mf>6@bO%(xAA1mF!3;5lDZ z5AY!>B;2Cg8+rPg4@iMBjooJ`#SCzwIA_Phm}|A9>?U*;E;J$@o0+Y@N(T~X1`oE@ zC6ulRdV2vFdv;TtJn=I|LBWj9t3LQ9A}xN^Jch{!5>-gCFd)+oc~XY?WUvCJ@urU4 z*|%Ny`Zo#)nig*@KOgn-_IB#(u1JnL85rbiM++5?aZ5E{-r4Dga`@}SD)r*=os??J z)gdj0Pc(hnZ#nH6S5zXls*5XvB5SysC*vPXd`ONM>&I>Z6DK)JyD-w zo7J|%ZFUrId24DTY)7sE(F~nfaRm>ml!iy>tfaG{Vn1klez$G`CUwE7MAY$kYU1~Z zpI6yF(2#-1hkp!UGSif1v(Nkr*&6KLZnFHhQt~=Hibo7w`E3h8rEuabtVv?%)fnD??Lpbc7F-Y(uZwZEmc4finEJlgE z!wrF9Z3vjw2j}OhJL_?JkEVteQqVDEJ-VvVt0+>avUQD%)sR>}H0;nBBefqYsq`z21PSiKBoZ33ZC=UY|^&UvC+9GoVY9ZZLX7CD4tA+tmD=JN^Iml$(5~(w zx=VI?Jt({k$+g3Pyq7?D0X~9Nq(qGKo4t`fc?BzwETiZup&4C6#XHr@w zU3S=n-%7(R{wrQ_EXJ_*YB9&3JEbCGSbf@oD<(5_N4Q_;`QYK66WB`XNj&^+s$bw# z8F?NA)(z-&UL$A$EIoq~QJ}7!x`iNmNVQNN{d!!$D*&MJ;aQcdq}oww;}`Fasmc8< zjFCF~#dO#wvm7jG{Hw=G7d!#i9AZ zS7m8Os)RMmc1@#DohvdgEUo9<2pHRxlfbiTtf-GKK9UrYtz&^Sp`o{b;qA~2c0Y;9 zt|)T*oVYhTJQi`sXBsK?ndGreOQ*_i4>TwhX8RTOrW;<_ab z0P>RHem+pUunnWORF$Px30gm4a%Pqle6Yoscgo5&c#x;)fsJYC=BLG5i5c8PH%wok z@y{E(Ix(c97L8#eCBTzfwCMDv`H{2*Q~eKlNPDNQ^-`P2;4BY zKTzl9NI&}`_%oAaZ)6Sb(Hw$8TQ21JNicw-xc)qn0?8kE#=i5rh*7?WiGbZ2s_%Y1R>Sx znuK%gcl`VF^G!mz-(R6FUt%ND|9^O>xuK9z|4MDU*my8P&MD(~7TFuxKk#h|Hd#Cij&dSmOeLEJqM9wei+ICWLh}@x`~4 z)y_uNqUxtzz}L%L>+Jez%8cm5n1sTKzqA13dFIe-$IF)t4K>cI`GB?R$zqGtGXh4z zZ~jIDARNFbJ8dGt>Yt_^dc9bCs2IO(O-^iurLxP{4ndP7aNb(%dM+tG_5i)j-~K%r zLF&@L=Kl5T*S4Z|92?ngsAt;UBh&EwbQyGcCPz$}(UE^zUkcJBR%O@si9Y~;e%E-d z(WHd)N-_v!I4DNM?`7G`SjVFBASuBCX*x`e6`XO)9n62i^shlLL@1|PhB6$h;$hrc9&02cAsZUOV z-bLD#LXz*zn>N+*LW!<(=-a2hng7OP>)7M{f%GOpci&7{C%`S{t041&BpIF>$*aOG zz;8=?@ZPCoo}$%1{134RuJG~oNo6SClwRQej9Es3+aN{d3qI`Y_LPelinnnDEHgRN z`?m1-H7z<;xPIJ5V6vU@X_fL4B0=FBVJlC~2~-ks6=c_*6t+qoqB5s#c+b0Lx$6AK z_k};aqn&&3H!;cTFA*vF&%DD3`{jb4$bz!`eh9bmoOaWG=1m;$!0s0Y$PDH>iX4d9 zSWOWBCML%Hbw&D|hpiNIHg2A5FR~~e9QY?AD}E|~K$UgET2x4&ci(88@F;QWte%tg z`8h3meXY>W^}GBFgh)KoD{7kRuLaigES8e$E8+#YG$aesNeT?D_G}Zh&xi#o~2C}L4#d^cnd1Ob&c#7X>axVqN0U4F+xs(tC-g=1 z67MBnhBiOh{+SsMzwcuxmo@j2!T#~yoX1?sBiRb@j(Sh-L^PNI_` z;Pc(ilmCvPyYlKfIcDQo!^Q0Bga)nP%z@*eA^sccCp35D9iS{ca+oAeh-3WW*}59KeTX!HICDNwYW(SZsDuYE~(kYc_0{=7FZyr4$7K zZCQWS>{FyFOOEu%7!|z3Zisa?xH!23tVIdQ%v3?}AdajV;@(Sagg-O@B%c@30p`C5 z$%+dTkz_(beeU41BPdlG#6=ym=>n&h18Q{Us491cb6B->@al0+8xIFL`T3Egb}ecn zV7Cr$E^eD1|KmCkNA9_&gk8S$VV_}m&A^%$A$g^c)fBB1Nn7Lz^akX3xxK|d;1j@U ziNoGV@UPqtEtUM?@u0)uH$l-@-}CB&C= z(lN-Il3G0(krJ`X;9OB?cCx%?#H+l1S^$8Qgjw+k{$cDmY5ut2#lh4E6iNZt3H02z zX(k0xEWZ$s&wQo^}tfHfuD zfGIv?Emz+6b$Js{?VZT1blN2B`ISplu4%NXEIbXxX#YN5H}JDlOLns0krx%mcRm=2 z4!wbLYML>j7pw3AWE1uPuSYzH~5mLq1Lcl)A& zRB_r!LcNk;eW5s%m#YjiRIkc$03A~>!6j|nScDs4aN`jtL6zF zM&&vwXg?OXQLeJ#N35jgK=vNR0gh$n+LQh6Jw4V>99~l0AH$jmgYy& zBpW?qiKm|LpQ{HZux+IPiHXg;>E9G6v$Fg4x_3*|jcY?0NopTMM?ZvteTi#ZSHM9C z)%o1FCF5dst~ZxAhOiEE>37dh2Z)WpZnC+8)MY_5(w=_pPs>xLK!jwG-=|?^tXiY80LXM zw+g?&2jx=yM^W6y(s}y9K6`cKpF!4jDFKJ3T9wEo#vEDY$f>&&} zas&auFY6q$(n~W!4N4^v9m{y=25FiB5zJPt`odqtvT)--LPZ|lt?5ZpARj&eTyekI z?(-lha6P9S19g3IQ^0;_rd?jpw25*Pi*F(jIv(m8uoNThg2LtOk4uj_SzoB(;eU!) z;4nqkFlaN~NG-|+kcSG7QYD|<8FiUN8QQ4iTj}sWkO!S}s2nh*3+ul-;Ylemj3Ne( zgxy5t3AZ-zP_{ zEt*HIf7w1|vpE^;-w@W`Qli2F@mYMH&j|vP+y6#At^}9drxpN@beKyJa7T~HlpMAA z5%r^h!Cw^B$IvkLxe~rzjw3zdhMH*7M%en~cZX+f>e_b*gR0Ua|DX?xdk?5~fHA^y zoLf?7mENDY_jKOWvheVl{Ro1}Zj{{on+?C`KRNJmWob zQ-8+t(HLA}VN0lSWd#a&^o!T#_b11`dixwXQ%Ki*vCt}qTy*GtWn-JaHyy~9AzeG1 z6&nj=Sq=Gpzg9t-Ngv3SdbLRv_nUK=^rz*v-Kmec`+%|NSZ>aL*XLgJTUoTkf{o{b zHIT2}(F>KkaLH7H%eJLnt_49AJj>QTQ+*J!MT8ERFz9=NBDJy}M>s1?ui2bd6=?9* zHLUb7$_Mza(u?8%ybOb6dToloS~)xn+0ys? zq&^;umQ4^Ak+iXT=I*iR9XWXC8d2DFo4V1w_#i6QyQnDA5N(K{FaC>*r&=V`_9ehr zi;Le4Ea8lCB_s$qZuRGn1WGGIT-%!>*QV#QOF`bi01Jg3#SXn8o{8>jfx?w{(_II| zm~+=3LbH^Tlhc4`Tu8Tu@7aGdX(JiQ69;^zy^ni#|34N6OgdzN?(o52HNQ>hr9S}T zIS4m1ix2R|bX_swIK~-?IDT(WA3r5Ji@qQEjI`SIVxnDgx>11({xtA;kj0CUDDuq|=j}Qbpts%uvh2#3d~}xLfR5N_9WKo`@Dr$NrROl{6+(%K3*%B@}@Rz!+o-KX;w)z;!oSznO&x^ zRBXXvX4T^8RX;VzHDE-n1bT^bZO@S!b)JtDygJl_VPoaHisdWIWkCnV;Qr5Rg&6z;>m4Mj?(0?S5MZl3Azny|2Bg=n~(8P zIgpa6owXzPoy7O6ek*0OGmWw*?em)oXIY+;Hx_F-J9|JIzTz?x7YX@`G{8Ql8@=0_ z;;$rsz%{}WHe%wbVxRE`N3d4EPC^`{nBZZ5u>Qaj0*lPNzhR8VM|sUC?Q4dd1}Cc{ zSpQQgO(&4@A@*IhmP8r$=@o#P4DcaP=*U}>$`*2LGZOrz1ogwArf4#?j(J=acrmOs zSau=e7E`RRuyF*Z&0(}(^!C>hxkt&+3+dsB)H7Shi1e8ogn<@FdF#;EZW-o&0`sk||j@KTU!tCWjG=L~d@gkf5H#lLq^)61WpO4={}H2cFo_}0nGt{hPD zs&(c_SRQP_t}ux#-4I%Pf-|t!k{DcaL(Qe7licH%euNvb-C18~XW2|V!R+~M1X?mL zy(N_~zKGM0lo6}x=;#Eg-o;f-;DqC#@wIg{TEEy@09a!mQk8Tju4`0PcH3Ql(Hj*r zzk&vq)T21)v5XiOC`r>I#siJKDj{Nk@MkwD2j5>tgHQ+g;$w&n+j;}&M6O*~7c6}n z#YB?GzvSKW5DlAgt^XwzrzM@Zdl|BXzJ?^XZ!RrDSn zvYAqdioh4s#2NSX@05*KGT1%?4;Q^&-rV0*C-Z~t=k-Gt zv~+;Jds0em+Y|yYh%stBYM0AJl+$Nq@L?n|=>(@o&;O?$TI1xzt1mCUSG7?U} z4?qoh38is0+f`FfYE?G_m|Lc{_hnmTnFH4eM4C-rz4|R9;Z5|WOzDLI?=tQ*as%tJ ziT;CCnlO6!zl10Yl%!w&2}RnLA3h=&U~l{_?O1EDXIr7|;2b%F+Qi{M_<_@R2mmBv zz5bWPLt^CPo`b&{L$35?F;;r6|A{I@V#JdJ8}{pwSG$A%gGYFc-Z0v;bfkUm@UjB% zk~-jINV#Yu@ZdReCh$Lk4Xu2$)4x-Y{U#P8-@0%A8?e#fxNY0)m~X+2lZIGuVt{U0 z_%?0)Ur0%6&Pc3UdbA_Fwk?8mMLgVpDzQA4bC`YKv#25^6Ae9;)3g1;k{S*LJ}mHK_VFgA~L<_Qo&JknfGU z1=?D&MPD>AcXq((OgLR5$N*DrO6f6R9wuDn(^J7b;#qHxHq_h--ua?GjVDgPGy zXAPd_L#N_@GxT~oDj3Kh_BcbZ$THS_eZ%c|$gAb)nd7}52kWoOQtEM*fKH{|VHFoA z1KK)^vlOQ2!T(EUQs8;PfH*~G&;5Aer~+wCQ19!ge2}5P8jM%+n^x@4NUPDTeQ*j? z_64x*zUAC=ku*vlv7HH2e#r}r9=}h69L(03=Xf1dk~f@6=xp`6`Iqh2>Pr3(6;M4-z8tB*FXArkU^Yd-_&l>2G(d4p%( zAB%pYR*b*2BsIGdroZ(lvz7l@j{;;*NI(R7=KzCKwy<2?`wU=|E+E|kdX&EK&%z6Z z7ccbf<>C3Mj^LO_&E?O$me2Rs;a{Dz4t~B9W63|d(m3M7k;1kO3=3^M%vPD4ys~%c zXUEJRIrm3DwHmP;xh3*#*6dgr)_b>gx4{yWK|Q;o>N0H8Vkc4mJ?j9zg{;+!!>EYL zO;dXsQSLX*zB1t$O`NG@SCK$zVfIyi1yH)!w4FJItBW0jpSrD*|6Qo! z1^3}$Pb0Il61Z7sULF7OQlFnzV8SIXP9WTGXlXmkB+r4&vj&0jOF9`(?hOt{KL?LJ z=sDh*cn*ijr_U@_Cfk8<>?)^RkRG5NU#2i)>~GZ8m*u4Z6Yg6b$zx)5%A!WWKGVR5 zVH`Lx0TbiJnm>>ap1`AwPg|g)nI|`uc$izT`UapVgf`wZh5HHVx`P!%r=Ec8<;9^L z@UDpa=FWH%&}(Hp{R>T;^b0>zkamqb229WTSbySVHexs3qO&}bh`XY_`=1; zd{?rA=Z&2E;8HqiQdSn(2Yul4aLojOyQbMsuy*eo|!TOd!R|7Ae>p&lc^ zbe1#jHv_!n@qC%2$h_MHnA?N}IxzE=ZT98cVin@6$2;*6tFP0Eq%w72$wT?pb56Zg zbe7PI(M|Qr2IAw{udS&@s$%Wl#WvMny3fA9nh!N%f=WY;zS)7Ygabx02KT&ryrb4Q zs8tbb?*?p=M0?p(@^cS6zt_~@_ja{v(K<`Zi+*uRd4G9hsCH+Qe*+Pk*H>|pcSzhD z&Zp+DQ6FHnj%^=sz>OjSyycIS%+@_Gwu+>F6>ss)%oJp9c?((M}B zwO&|AXB1~*;nMBMgyw8QV5`*GgPO>vp zVE(%%1p`b`?v)t5_l!Q72MEa!binxUnv@*Gn9MI#Na5($%4I1ak!s;MMc^##H>c2g z@c<}Y%0JV3@c`G!_e~yNaTI|DSzCC^Izm zIligR+>nfp57v~Z`Ad@W?A{4WB|%{$3ovP$h{x(nH8tS`F-Kc4%>yY(ydg_JT+^le zzc9UMnWDo!9byG$e)EGSFzZI*w-V!cKqh9vU123dp8^fF3N<^Pe6+;SV$?S04LDxB~S?FiPT zdWHo@O4`z^MCE)`a&AOJ(n+iViZRed*u9qU25?v(r+dz=;c`H}`T`8#>6Nvq15VU` ziCctiyS3zZ)~$Hl7zR|B`X^Syxyu;yy$)#Nan_pa9Rw0zwrs`jmKX zL3Wf!0h*91_!-^ztS$EE64Vr1e*ce;Qv@vTJeZyAXc-aW#~a>d22%5IBhz|qvOSQ8oF5{#P5Q!zIYoi?|hiqtkc zw(HN+h&v@-54QyDul0n5cz_NTH;SEE8Kbn#3A2>+D!@>;Bt1el^I3_=!Z^Oiosrcz z1x7WnP?#XK2Nsx%U-Dm~v}1MajE3syjskgR8y10yjHZ0#BwSV%ZOtd#!9BxwyhdP1 zeKr}YQn{{$Z9X*C%9T@lK{A6;ORwF@L$7Z8`XQ1$_q=^^tDxN z_aI%zGBACJrIYl(@r%E7Ca-7LWBqq6*q2Z8I2zY~*4!BUEi1t-qjs)2*KY^ccIfH0 zUL9I@__y2x$b#X(95Tzt8)~)>tjwk8_Pe6;!M|FhOnt*e27?8LlDNMY<8&Lt8jr^r z11o=65(@ZJ48hv{hMtfR8vnz*PQg)IoTLKxb@C5~C@Jl~HU)2|26=xX5RnwHwy$NELH!YA|!&jovXs| z3rQ&4nv3QdHB6u-yY@JZZps2j9^8=L8$@DLc#NvS!?0D1-jstrxINq&V(62PU7_p%Yd% z92IQQwk!-V|Cv>d=19Zae`x_IY;VRB(R366YoRzQiHSiBOJqp;Le zT2v$kcu7~q#g+cI8WL~kzceJa``BB^WLtQ&rpVc_50L)YhqvGF0+q!Pka$$yl+*}% z1l#n(El@Dr5_-xX#*sBcyBzBI4f?$>gl8TQX}Dph{&CYxy147Fn|zVyM*#T<;^}rH z5UdoqE+VAQttn0oULz{XR^57}-@NZ@dYX>xqz_3wVaxnQHO2-4RqOoM3$&i2o6!eS z@bJN{)RUqj2=37dY=yN?2^&DfYv^w!e@hbl%F(__N>o&1Hyj3*m17(t7>> z!J*JMu@isA#ZMC3L{sq{j8(MSrB8t zMXMB_W6?}J+tdF?G$NIF+31&ON0I3e@X4@WQ3x;gFF}q zO7@z@Za=M4#$vF&SWMR+%rWoQTnK=YI}x1R+{F(#A@?j(4wk5G@IYlvO_YD%_tNRV zx9$`vtg&9s3-yxZr${;a7qyU_l(lSj%|!EK!jDS)6)|`qYpscZzwLVg#Nn{@y?*90 zt#p^Qsg0eJ(lX3nGLduO@-Jd?%M#78krt}~^81w2as8Wud2GVky*zzZ(5^7+ll13@ zRz<%wChT^58qNNGw;v7=OXR@6>S_U-W@^-eE**!melM@-xwWUr5q0T0pPK-qHH*tJ2Y9JKiw3+2ej)blKsUMqh3>@CQ6Q9U^vE6 zM}9BKuGHEQ#HKA}c+!mhAHk1Sg9j^qPJ5^88>b+5_5oAbbnh&llwPB=7ir7#gth12 zdy?OzDJ|Qs1BAKi!f#~;(3}5+5IAK9yz=%2-Y*Np90$Q#C*r{V<7r=g-)+q39|N}Q zlN10<8L7Mi2=P_pHrgRS@EW#M)h;NH$rM2B_mbl(uKpH>0KI8{$9EZfzSxWDI?yHe zy!QvCR4J%|3`dnniEaasdhoez?cUA? z)FFKa^|4f!IE{fF2q2%%gp5Vo4e@b8lwmOjy#;rf%jr3l>vAC*rw0TjhEc!wGl}+EC>>VtA zO*5(3>|(5BdQB7w>};tiWF<-S>c3Bm=Z3azJ0lw>W04zpqqv8< zwYYcFhV_2|J8=7Ec7YiA`=*>PlAdfhhx^aFZ0yrBh*FeifcHAK&gQ+#E&_G-#(W(A z@8ln~M`~LCl7HM%`fs+-@VgWfNfzkP&&ROVu4OMOCFHtu(dK;38&Z^_v0b0av|jp` z90kdmxlYYb81$QTT>IYhZR=Z|=y`o_i?3><`F)weW!#n;*SmwAxGE0M@AmVlwN7{(Z2#~5Jh6xe@G_UbX+7AV zAE7USZC8H`>!HT|cgF=ii%n)Fkh_8;{25(j{8VH}hhGeZ zm9P5(e~Ol5uT!R%wE1thFFL zr?5ZGr~oYqbm_^4Ept%Ff`vclEF{=cP}sp5ven5ILSks|;WCkCkRF-M&je zA)T8PHJs_v5|Eo;6Z9ShzB*Vgck2&fNqi#=d9RHoOHz3cmWqmbwKO~mc<*settd~A z`#ptp2&*XyegOR5-PP63C4!fF0G5da-eoAZX|FYLKnCFa`tyvD$1ue2Y5%dx-?B!lBqRHee)XNMf%AGLjX{- zgi*vPM~(vjlVuZTwgKR+0y}a325ac~lWAO3dsoeu&h5lGe*UuFxo`=J2F&}yBI!+y zQR{9Eh}RISAd@!k*DbX>H}+)ml9feM^Vz{LY?BO~C78ETN?GH}S^z*C;X=_c{)xO4fd37D@*>60QtwQ5j;gAL*6XgSTXM2y{E>ZwS>Ho#s zTZcupc7Nl8Ac&G8or;1WohmI7B8{|kHz<-0LkUVF4GKtyfFKPrAky94N~iR|%>3@* zobx>Ae4pp{Uf+M-_qvGLd-mLW-)q*r;;-=MlU zBke=CAHY{%tL-*DRZsHzXWfoxNfEp+c?TdFYyB&&!QFUCj(iKQsS)AEvINH{R0Vwu zopJs*^UbFp{Yjho19I3`eZ!oWsvR#*7l%HJlnEffFjvylef5rPLl(pSnrExaOh0h) z<(t1mu_)#NR^y4mYBIcjI*5lXo;^C^=U#qpov z0Yb=8|82Pv{Qb(y)L$hFGpjpdRLV6)q9!*=%{(hB&sTsnpPi}yz_^l&vYK2hBEi*u zBu=ZNFP4+Os7ReK(eh7|<)2D=JAPBaubO}f#e{Wzz1v$>4W9I`8qxC_1=!zG#@_~Y zAFtFkv`(Mp{&jW`v3Xd(XBIXw@4i$7=q1=Oh_fucT`%*jEL+eJ>64ip2E4)erT?tx z0S=xB=q5H;xGi8vn{Rktx5JyjD@>T^v5utnSxy;K!xLSUKdn4)G-amYoAXSGG{u_O8Ted-6@qv3JP`sJCIME`7T-K-Q+g|7X3;-Ah+vX*m_1u=UEzbs1)I$ujk1 zf9gNlj~<7XO$VOknk4!k!@3NWr2o9ya}AX|M#Vp`H;&phFb=y{NdVcQDhE6?;=Bu>Ut0EIeGy%LpsC=pZgQJXjqHTX8f@s}S-z}DYm%~`N2CC+1l3uZZ%{1GkrwAAjzL_BBA@}3FCy?s9U>Y}>lele|j z&hgP7)h~}7YGeFD5ntL#WWK*u#{fUJE0U+X59jsF%M-Ys?yaGl3g-qU(d+q7ZCQ@8 z5nLiRriTd_^qC+lQ|q>MH(v% zg5U^D6hJD(+;==M2m*Tu^nJ$ErcP=&NT1Yz67YF}x`v5~Z!TwFxO@=4V>m;P{|7CE=`pzKx2zz1_yD48P08Ly;Iy}|?}0Dd86`Qg2} z)txzi^d!VFCi;CyN^NB`A-xDYrY z#57DG#ukX!$Wb={h{*iNPWo1&xdgP)&fn%%7FQk`uf#{rW`K<9)-;NE%2%UUSgCUZ zIJ7Ps!K?JU9ae5oL&r-Yk{Y&Qj{8bc_&WnE3fc3C)sB3rn)&EC=&7KJ<|+)~Xlm2w zZsemx_+9Y`L&y+da{?hr*E5_%74fedfJCB-ldNv$n&RZIc!J5k{>|#Z2<)IvKPm-Wd`Ej-}*O~L*-<~NmTbq zD0cFP`X0IHxN@Dp;~n8kwWmL^Qv%gpHVZRWJLM8k#M9_FoBc1$^MOz~`Ju$oD(+_M zTayNAsdeu4kq-n*@6-dL#Ww7pR1eWak{t}y10QfS{)6g4=5tKT_|n$&smB`39f7HK zAwQB>tlN_@wQ7+6gTzt6|0%{X{o(p>JgUS8+2_6#`lI)CbpJ|Dke!UJ)g#s!$ydYq zoJb=iBCY#MT3|l^ZyoZ38muL~=xUVYUpUAMM1uKWh=x?P0M~y>>OQ*+`Z}zm#(_^JJIdeCItI2C7&_i3b!-U6=a=_FWXXsJx_DLY8ZSHZebc z_WVi8VAJr@yeLR{@`SdC%f-8^$v*1=)m!)>8vS(UONR}Y4X%ZykT6)n@qOYz)Z zx@TfvTu|A=&Gr85D>6M*q%gcP76{OedxNj?NMO`S_OBSka3Q;U8PB2?nE5-qT&XmQ zi6L*Mj`I3?b{tDCK!;4{DTaT84(HoPlO+au4Y%(&lv^It<3kebUH(zmLRb?#vf_i! z`A3@%`*yKSVGBgR?v3{TD?sFF}L1B-T1C2nuD(@^^*@G(|!?ZR)62_YZzZ zLr>ZnA&w&T3-S4z$jWbyqdr>+%;D?cjl3S+u zm-*95Q00W`I*5l7x52#u?oV(2OXrZC63a_}bPm}!7Y3b2PMC%+C?7uO^?y=6X7R)S z9HDZo=bvax0-5Hl@7ZII$en!*Y;lM@5&y3k#JW4O@}E6HC}2xxa>1Y{$f6Tp-2V>g z=;@VM#dIEd?1qy1uV?uO(viTgIqAE9_jm4tP-N%FjH2`UPT5Z%56tw-aCd)$l%J45h=uyzDQO<3O{m-gEYs4T-sAD7*uQ zD@VGzf}+X*ev+bS-uz%BQF~0gl>x++)!ld;; zMT*X~hKG`cHV39{W&6Y#$IBN`$HXa~=EFdJJC~_Lwy_Dek$@MUyle7ya6tQ#Vq z5P!c*&>!@kj@4#dHDEnHrrylNe0QT5Kh)8YQUs22(O=AqQhDMkb;$FHET5H7Ifg4B z&M3n5U0v6XOd=2bIkS#|tCZ)V-|Q84vm}%RS*FQhuXp5EB~y|dFYjhVUo;0U5Us8bQQ~#f6-N5@g;-ryIIJ{5wK(a!fuLWl+{+aYFNXj z(LflcWKS{WIW8KG9!QdSED6IXeB&Dc$-g`=IK$~JsQC-zsTuc~=}!!HzObv2R{t9k zF=M6*@tKXk&pxm24c71lAX0(rzEr74sPp2tGy$mJhu{rKAKh62Yz>;*ILweP&=? z^Vqvu_CLE!A4MAREr(X97pJaE}MK#HX$AHMaTSA%G)dsMFoaXa}NBxuz@e>@3BL z|Kd}mRd)Wp#mAbcSJ?*TjSlZJzgR9W-4(CLI~F?&N;_SCHH?K0P{}9x6N#XGL2L#LB;c|H zt6Ums`Yprl{dXMX>siFJ3kc@L@wLg{X=WvBIg<&uPzHKA9uSqQvnE+ReFx&hq( zWi0~zh)w@U9@kSIQ1B8()Q1_oo$KVvy&%rxKWHSRatd$$oc1g*t>-@HqK6qXOs9ZH z(*6A0KbYl#S5JBsr#0mIMR$|s4o6!&b#Jkp&vONw=xb1HG0J6D%wP{{)J=3YVV^+qrGdGXAXp@;i@BzOItTLrad6l>AnxM`TYm z?uu}d>A6~wIcqXLq|R`rQY(0(ov(zX`^;d7n*m5F$8#So-l5;K&Lz;m_-b2Q(q2tI zA!j*3x?9<(i1R-&a?=bwSnCZ7ae-{-Kzm*=)-sVs8d#pjS$l0er3B&e2V0xkT(!ux zxW!ewZ@f%GsJ#)*cCDD^f1Jg6F9s0l|9D2g7)8D9JM`p(rM;Pzv+U=-YP8*LnzWpj zb(KlSQ3|R*n&L9{dUf`&__SX8PRaK8Zc?kShNi8*w&Ly{7JX0`J9-;$P`fEGn%}h) zcc$3;yvslxuhGI%Ja6Jmx7&XTkL_VkRSG55*PfBq>``>62Mf+KQ%!rQe#8f7O5y+LWt(=wR|sNd$YM=xJK54&bR6KzZcW zA=O5r8-trj4$G#kfEynzCwjGAU>kJ{j+0{oUhGTopB=|NNy?9*jXX^PBwV z)xWzMlE0<3sK-)cpUHm=6?r)#D>{6W=(tLW|Ea;VR@l~uy=6t#3~}RF)}oL6;y>Zk zzXbyMjXdQuy>?DUp=uuX0lMg-O9h8HQl62-?fse-zAa4voN<9)?It)F8Kj!P^bVO_ zZ*a84j|f>}S@Ps;fgOEU+|qk1@hzVBWVmI)H-!oVXU8Q~- z02+`i`jD&QCM%ekUjQ`B^y)p=>B!rZTKDxrKqqr}fAO1>Av@{-m96d%r`PsxDO#N4 zUt9^d7_zLG9b1uwJF21D=yI%I&Yu_JGZpZ$`(g~-V=zWQl5}}(D}3~xNiE|l@i8`1 zN`o|nKeL^Qe_zUBqizQWStfz{#bpmYrng}!XGwD8<>vyWGnq8g&Wd>Q+4qlh)y(6v zoX-Q=B%Yf=p0%PW`)bQ2&R?4JbDxdiz1$6kae=tN?)@4C{}LZ)H&W0<*yif{EW|90 zTt-XmVVi`CUZ~BShEF`Kxt;i`YNKK})F2~$b+?qF+ox*nE zWNiOrN-OYLxGnTdAdJ0iM(`K7MvmoYEsr?q&fPC$6j zg3GgbFW)1!IdVAKQkFK_U1U-uubOMl=T4?kyGPf?s3@#MYhnBHe8cE`?V2H7VE*Ef z_x(c|4QAUnOD6$qxOSO}4iPY9s06jB3rS9Q_kKk>ce38!K8hY*GP1+&sgU><9z!v21lhqmk!Z0F-CBf$>!&2Kl?U{a)ks_ z)4JOE&|{8WrZgIg!j1#QnkT1?=L>Lf-{J4WBCqo>vIiqhZuA-tMkk&O=Rb{p_ z>#sn0sequyqe&XEw)So?@?$={{=wR1=q9Wj57Lc1A^H2K!NWniU(Xh5+wIqIK)ppO z9mTZP9!bXCq~!LHhijLNUVJ=iVZ-OJ&~449*>xGrhj`1}eoB|AFKqJAUF$Vczp_K9 zxiI%&l)v_wb-^Hc>G9n z$SM@CG!1=u4kJ1FjfQ3Zs?>3T$4r2Rt*`DEso>OJNq19AYsWM(kuiv)WKu*jCoXh7 zFf;eHNEwhsG)372Z7q9S`RVNw<1~} z0$T2R=xlP4g4f(z?&?Na`d{TCL2KD&cLs;ZdXRjjMw<{>_z*o7xr6aKamMM#v%Q-T z*;dfLWE^cBDS1`}D)poHRfb`Xv)Y;s2}dIN+=GHBmOqB@I<$4zPI!kj#p6MI+`f`$ zjjaJAA)FgTl26sKY6;CfJ=V7GOB)C8H&khfbE!HB5t?Yzb3~zgw8d2)X!w1@-YGgMn(&U9fd=q4DW(+3 zOwya>KIxT^>PgDd_@y}m4}5o#V%wJ46`{GVM&!?!uzoG0~zyGZJDtfOqrnzPkvmFddc?#M~kq#@EIQWnW;3(bAR>A<^o1~ zrOh7<9t*(Bjiwt+M_6g%{6Q1Y!4e`?&>EH(x3jUU|C&s|YkNls6{W= ztz@G~ZpXCaChz~_@zq`CGs?zvd*!O(Tn!q+9$b8OJ)JKk5nn5+2ZOY5FG$3Za$#lCqu zk~rzkqq0up*$)T)h9i)^^&@@>&b*&Xi*K%-cqq;joD8rQQSVB^S)Up`4)S4QIL}*j zf}u_-qOmBa4qR>3c8!XePe-QJ@*H7Icj@P;)g;N)6laFDX zLE&2%ba9FN9tYC8q{*kkE+Pp(mu54v?HNi;7jcX4V2h)j_WBvaP%=)tt$JYhJ? zC$OOtMHVXeQ>aOej(`d<2E%X|Cbvh%c! z$HR&%1{&;^XF3gdIH#kHdnDK+qKT!kesykBMMFZ{~Y=lGqj1pbtUYpIH~Vls(##mOG&+m_NuJ9;uK!f z_SewM!p*Pt&<6EXF`lGMH1)-7>)lRF$b!oJVLV@4xLyF)N0Icr-8uEcy80J%XGiou z;$Q@-UemXhZ$$2UZPdN=E4B(71OKu}&|31i=U)TFF)=wv{qU>AtnJUX_mShSw`nnf zB4!^5?-!bkg2qE=%GTtC3?Cc4KCa=t$y)K|1ROYcAhRUB9H1ziEB`t$y{>wM)8tVCh>Za_hEu zUs8%&ySM#uK?1Fp-^^8{{y4{n zc#?Y~z79#J88)@gQk>Rd>{#m~g@SId*X@6vM&;>S!JLH8i(-B`ovzni2H0$aKk4!! zv%BjgUF{b??D$c%zyGAtRWiljcaR(}VBlW`h8tcIlQD(LJ78VR65HR=@7%;6-nX4i>o9nZrB*F{UwwRBtsY>xfv10yS)I zURu%N8&KvqGiDSO^&!IS0%_yDB&X7FJ`ylJ2s1rPuH*USvFb9xx6n$56nLI8=j2-mNjccBKOXZWaLw7 znAz3G%qUkp$sDZW?F{K7da61s+^_}@yKb>@V3_-Q&J@-k@O*xHD>dbq+>O%kyS~|W zzIj87&_lwcx$Sr45`Knw>;qBR#Cbz_VM#ih*XG{d^C#Ler*hRbcjXmWHEo+EA}=&v z{*ccz1p<|6Qk`138`ic#gafqDapz- zQMn54U#LfaH%F}Bv&$BA&83Jeo9_-!2MQmD!MwaoEAGXO#sQ&x*(lf}jy=^>3wpdq zf%m%|fJgCCniovpw^t+lVbB9fU|C$AprWAD>fKY6b zou||f*h!b>3bi+Ewb_gAVWRV6%_YXW`-K?bU0>mrHC@BFvdVLTz3=X-zW=5^Q6TO_SJ_S-8Na1U`S{XW+*@!ZJ>DwCw{L>EX~+ zI9Tlacxb3H>Dq--1{bCY@(gJE>o52bf0$(3;?StVgJwZJ(oXY<8?GN)t;n55N_Vy?oLOaAl^hN)mu8ZB{)a09=XB7{?$uAez}<1g%jz zPh$4UH?YZBbXYFr$y2dPL~v6Cb@04?HT|ePLP9m#A?x9s%U6`#l!3>Sd@Ky2f^mX|`sgIu3^&Q_!qS4;N=z!@3OrymsIKL4}kwR(0 zzNDgBBuv;zyPvY)l|FIToQVj~XhP34C9zR?0m!pKO=>RF=AtFpCy^v7wNMON0<1@82 zx#~F3kx{eiI+=Dz(1sDzZ(oDA7 zg0qtPlg(>ex~mB`Ww}56;x=WA7-!KvT%|+L?-7qtLE`pQXkxNCXPgXN-lt!W%03G} z?ieiL>iYOnHq{3zr*&>;-`Fx3(MN>H;;tsUiV4xkx{S>eK0)HN{{g-1>AvJ#e&$Af zsd2AlXRoT{NdZp<#!z24582R%m_^9i5g0IJjT$JkaRCv#4`lDJTM!rWDWUc4`Qk=~g~O>j&Lp zM(Kgx9O1Kfll4l6Z$H1MfjdYzDw|8Hy>zXu^YubMrBZkvd2t**_P=o&cr}gDeXZqd z!41~7kBgj(6shF@jqp&nvf0`^7l#^MCIp`W^4W zyPJsf(!SNj%2Ttn0aj7o$HYe>${SY5vD;A8xD`ia!2y=>ZlheB&BzT+hsBeZ=MPYH zFc;c3iSs<$p$Pi616)0`P%Z4D(gw3OUJHbcjg1%B_@x#n4mm##b1$hm8LLzRf{Slf zGBM``WGzH(jCk0F=RG2Ch5lZ8Gth_)>3!ft8a(iFZp0is@di!dlG9MFlp}8Zy8n)> zEK`xq?Xteun?*KR6GRh}KQI@Y^~9lFTqDT8?8RrD!~6r(%E{Q=$qtJ5lC-+x=No8? z8j19czRv76*l{H3UH1EGY^c(AoY}w{?MbMsM^y5Xjy*ol=cI#0z`IX``)M}#bNZUR zpUyTmVYl^vGPB!vIr;Lg{R1C^_QC$(Ar{liP7e*EX%-Deo-oHWAE=8}pMd>TYPg7Z zPSRFXk&*xy0bJ2|r5G*km{TJoe;R&1;Rh`AyWP!Id@m7qg6qu8yURyA(a;LsnX{pwyDBONShFHPcz`kQpy=;}}jcMx&PTZgHySdghoD>E=*%)W=N_JrPU(`@ao zmdezT;z)#P>%jvmar;}AifI90Gdbw_D4KB~*T^W0?g0t?!^+n7XzU)J^iT+S)M(|_ zM11AJ+L-W9cnj`1Yvb2U)>XDA9T4C0oM`zlf#S-!X_VO2&Q2+6sqbqsO#O4TWBXdS zWo3<@_vv#^X}o`*4ZVVyF&D#1=jQ9LjEJhY0U=ZAWT{jc$4;bHM@X>urIFr{Je$M( z39a*aIEwHFY?8P=Tw-l}iMvuo^W1=!H~xf}iV03&+~_OEx#!;UBk}A$&{yg`N^YO+ z&7>gAl$H>Lm?;Sr&p|q`kSV9^O2T%&-Em4+fj4+Kb>W#DzPVGgPag9rjcfHd$3)%0IO@nVAlIRdUfExk3 zd?G&)fY-@hg=vUv@bh ze4!CZ1N0&hYv3Cx&I0Fj|BY6;eWpk)RF9xr7T+TwVz`eB&i84vj(t^GayfPnVqBRm zd--08rj!ek31o&GV6-- z;DCPR7Kc5kNrpdjS9scY$=AkT9)4GRWV!@#ZUhefD)CGT+Hjz>6#unzAD*+9;DQRi z4%1vgA2Og#$a2j#gVT~&j08M0NVO~^1J?SFnp3ZbA$R!+Qtlgsh#xjr-;C6>jYNKz z#PvhebN%ABZ!9rk0hWw0HXa93oj)AxU-p}Q&PY|uar6hF!qb9%&AdF7fbP|rE8n>8 z-fL6J7H>P)I``P-2+E=|l9xyo+4z~}7PfABgFSPlp|GgCmzWK8@9RE2ZPa7Lryp}q zpwSmIHPZ8T;zQJJzJ4N7r1F-Z-~d-KfD+sSo%$u$rnKy;x#VWlX%ce5Gj*7xxdv@U2;>mP&USe}@ zu{I`vQr;jt+P80yBE>qBX7O9(K061?irnkKy2#-ks_-da^~(&fJlVJVI~3C*TZ?!8R6c^(?!=pR$V>dbc>c&hh!^mHfW zos`RyCyn~ZMK|3Q*r`Qhu5jSa0kLz-4<@0~JHRN}BYAa$$~)p6jIi=n_s4(4k0Y6j z<8KK(KDF?qG=KbRFF{6Wi8~Yvn_*;42iREa=(3YyDXpQ zdKP&fuT)70FK8+zzl1#ci_LFq1~OS zf!MQP1hOBRYj-tjvV3&Q7(_k=H=_n_nq~P94t~W7*ZQ)>NAha5ra=5{gyZ$y`W^zTe{@-dVf z3ArI-vwo%rU|X!YZzo!^d8=BWu3&E5p>ulDOx;^8W8+h0LSy6Qfp3_jIOkSgPUVpZ zFdvl+MKm#FZ|qFipPuK+tw%D5{hYE0Q8$%?`d zIw&6=Je#6 zZt${-zqkN>d#p3Yd$}u^7-|SXhu&>VlR%fiPsZ+Ji#tL&XoPG7-(Jbwey=E;E`&WR zn0;%Xh|1FAl)-GO_mXFAhT-vJY5vToEtm17Sf1mW?y4-O`U2BfkI-M zt423U&`x}0_4e&=;QIKPA34O}TZlhavJL)BY~;UW1Yc6|5;zIHaE^Q;0UQ`VA0Yul zy*&RI3JWJZNkN8mujDHMg!>orMbyhyo;1I*A?2H+Nuic!eZ<&Lk7*Iq2EH%fAMn>w zwTi5SeX9AIoMDy)rF|&{ z@c*KF&t8-C`{QN!e5ovD?y?xNQqZ zfAyiS`mFB}clcVl@|N|xeN{@@3FCU@s1hgoQ7=%}ePv;!_(9?;_tgAvOso`7m06bd z+d`eWq-UAhUsCH%u0&Frbaa>xy~X}gzP2`;QGk}`BrV}+d01l6MPYXYEz4IhVv!CC z`!elQwz0gt@}v+A8g#DojczguENVIf1-C598FI#~Rs2rG_?gi!N~SjWr3i^O#`!)N z`SZvkQ{gQDftZ7AVfmQk0_9jymM}pCrDIwV(CZcr{H2v(sPK zKgU`M5LZPPcKTpplmw%!4^YZK;H|ir6H{0(6O$(Krw_YtCK1&lr6P~I-*Q0Hf5+uk z8^kxfMKX%hRl%QC`7IeqLBr5f`&M?qwWqjHd_spp@yfEH_%7$oQy0M-FY5f%sOj(q zI*M;Trt&tk8I--XC{l2vi1H`Ee-JvD95jpbcky?$*{(5EDnbo=_MoKnenND1bfvcs zA8xU_HnxDXCg1daOpgy{w;-}`pb}WPlgOrk?3o|}w>r5N2PPV4Qbi+6B{~Ba5LwKd zZ{v4ShIjfg`U%XXO6Zf}wW#V_Y>b-M#W*jPliY^Zxnlj8E#>cf zC5`zfV;&67%aeYW6o-EI?{DZDo##?ie0Mo-at)|Z%Mrq;kp7Nd|H=v8=rZ`U#fHH( z#F*XrgfIUe?1HdIkN%diZv8)@6y(9bfHV^c0`TgLG~uyYr*y&5Du+JVNQR<{0-rH_ zx6S)GAY3BBBc_uMjwtGBdvi^jZ2->~ow`?yYU{R&wZ^2eGy->};m!-9qn}TQhiQ1` z)xN1^wt}ZF*SJClZ5M6*zqVNQ$a$xj^I59~IgV+&Y>qvmy^lH+K|yw3Ebkm@Tb;{X zJJNg8P%`e+5b;t*Dh}0^1RujGnl(1GJE_on7!`;IMPLoASu!$v3P?%U_Y zY}m7scAuS|!?8f1E(_A+)cE)uOah9@q=2XF2k(w$^9qhIirZ&cob8&B#jRoo4QzqT zjK(_r5EJ2>O0y{HI}_DTUd}R+K0H}=S>8CRstgdhNxJ3aVC5L<#K78vBZi!^ zdc{Y>;Dkj4g^mA~mo*>!@=1MZ4sJo$OOYnCz?Sw)O%vCxCt0Q98f7n@eSqS96z-uQ z>ZMiR@SFtv#<6u|<8}>_+cfm?2^`p zW0cnATNL1NebT`P-|!+kV=KNK&#Tcrbd|^Rm7Q{I0tcKZ7&%z3P_^3R^d@JlpuSu> zZc`%iK+Q1B*7yM{UN>+!pc=9K#GWO4rIHtv#*CBg0{m{lw2Q#8E5d{-PeCj0puV2T|=A$ zWDyY+e%+w1o;VX(wB@{d)*PomVtuxIaNAydvE}ofr}UB777PXn3Ija(oL5y&N#;bA z^YO`^^2n!z@m4gispCYzrJ&(x%*v~q8=;1L+24RJCon|2XOI|15+9`2lf8+Ew^Yp$ z-g*2E2azu_K?w@@`50bq%?S{{6*$&E`i;f>6O;l;Wo!&|0Syzcj!yYD{ zJ-@ywF)x)cS~YxnULu4o4xlwJkt&znYm~*8Ak!24ggcy`*cfqRpe7)4jx!Ng`*5(R zAH29z2CSNaKs_dRcUpvnXX|F2i^;fmU%gbEbiU)dTpIBN#@CV6{}Ie_du^+a3fGW3G@xN zvK=Qqc83>!Jy5)#wDZwuhyTof{fot|qo&@Ht-18&+R-Y4UfEz+|lv1q&x0d@H-`j;EcX0TV z%8_4kam*yn37ojjevm>%hKWJjHLZLxW%`$zIO{KyesQ-5%b2yD%G)0yTo%52LYfFk zW@r+yET{@IfON(;4>51vn7hH5P2Vvq2N_RKOlNKaE%9^PlY>Zl1q;RROMH{2h4_MPu)B$JgGh?I_NNYQNQkKXPCxFP zV{aP@o5ABHA+ej;02BgoDvpjuxxEx06e*Wdi*Dm}Aa!!YuRpzW_jf|d)Vdc&P9>`= z6=3;(+IY(rUlt>254;Tq;am8w84;Hr)u40q=+zj`x7lhR?AnOL#k>Z2bp&?e$3sDk zY~K$uIwSf-9=+nddUb|R(l!fSUrJ8DY?%T-V<7%TzEP<$iFAt&mY*L$!W8%*J+GPHNGajA@cfY+XO)y0Ax zz{SjV`wV@?!{4q}u;d4e^z@e;VrFOka~6x<=Cu)O=eSoZipYRoG*^)mkXIYcNAzS1 z<3RQyXT%5C;widExD5-k7f!oG3H6?To>Bqved#c|2sW4+N?nfkQk)`0j!w;TpKj=@ z{^XWB59iV-DPDnv=iJOnUJTz5UiCHcX!(4Pu<^#+#%(ufdd8+d!`4n*6M%0A%D#SG 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 literal 105945 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�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 diff --git a/icons/obj/clothing/under/color.dmi b/icons/obj/clothing/under/color.dmi index 7a616f4c3362b3b78c84e8249a4bd0904dd164dd..173056cbbf43cd8e6f32e4fab540e9bd2946399c 100644 GIT binary patch literal 8217 zcmb`MXIN9gnt)H}N)rU>f;2&TSEUrj$p^|!Hr>wDDR3#d7`V5Yz%rXZNHFPVWAq=hW7Zn~4 zYZM2BaQ7}|2XdC2WO&KZj~H{3nImz?NFL&crrUR@thY+cGIp*Mehl(1?ws#R9fFwP z_ym|L>7HVb?!OZoY$Kg$v*6%bKTk3tpcH?%PjL8$vPho6^MzQi=b^|hn{`VJ5?z;7 ztF@YGyX3xys((8*qY~leh=e?xh(HHnXzlBPu~3C z)sKn|r+6M1pOJz1PNw?Mh%)Q8wDx3q+Fb0S`}X)mZ7I|8w^IKeM~As_|L!8p#Ps%I zD(2Gma+bI@@7Bz)5^Bw;x_%ud;84f%d*;J;z$K@WIHscG|m5|QKBtlHY% z9D78Gw?28zcm>DGrLS|U7e%i<=n`mn^FvZ@Sj5yd0G&F~zzCop^^O^0i43PbGDdzB z%#|r8H$};)^v$}tYMRk2y(`#e&Bix*3xy?5Iv>t-B$OqyoXE?&w*l62$iqnDkr=6l z_nk(r*JlOHF2RC}952jWv)y3tL8mkxG9Gnxheu3FB1&Uu#uF}`O`?c0V2h1;Ov6RJ zv$19$;O!VdU*Fn^g~gkfG76pH@x0Ft$Y6J5!J}Eh4Js|)+_)Cx&|ZrM+vt?C_0w`e z6G$GUt?I7HoA0aXq8grkt%!cqM+lbYAinpi_KA8D6>1;+r3crhL{BGu(W8n?i?L{&TS zWH%6xk0!W30SDBVd!&8%DnW&zonb^hL9%i2FGnEB7?jq|7ewiLz|Met-h}hKy&>d_PBJJ6*}>7ER8mH3Rs8sZX}b3R^V0V0!JMfo$#GuJF~vOJ!vY zWw6@?$0MrFsCTW}6$L4E7{jl8BWqbo<$AVP!)Ivr<1T5h!*0#8QBloV0AEd8)3#9~ zY#;0#!**l__r<{-F65CIHg9*6b&(x4vWE&Aw0#bN3Q%bySH(BC$e~toK;4;a?h;E3 z`V22n+~Slmzdug;<$_}2!A!?JbL_f>f(sJ%Q7sT9>g5h!YjY5vq4(IUki}Z(p@A>% zu;_{k2|%hVejwKsF8KQVD{Gd-n2xQ)ljyTldz;bGd6$AZUwZziM)tikfQt1h?O1T-Zbog4XAAPNGE zLsy^114K&(wDRW2+_n}*Kn_K} z1o=rdK~-FU^L3HoV4LomHn(u;IW-s&YCHItj+vf57?+!qF>A@;SG0}&0x!yNyicpD z34b)DY~#2$)DDhzV-#u6Etv$*>Qlhq)f{=8{rdN1KF3LhsqEH|0_zGr*lr zXw<3QyL2?rZ4hY3^E6Uck_XLM&UY$3bKgVi75ZA-&H9AN*%HT z(;}Ay4wlkb+K~#x7pbu$T}O;%83po&6>?Zvu8d*)*D6%;DC74w4K)i`hBLguO+|%z z4~?(6S|;=1!zk*WW-ShmYCpS! zp9yE;Q+Ga;y!x<1Ph!|XU9VK;eb>4%(e}xUshj4(pGi!EA*YPPSNSM164?9#9Txj* zg2fv9-{^T;pWr`jc!I0}Ct0wKBO%68uYmi|dcu#X`oZ=A={SqCT)UG&;nBBrAl>>T{*naeVNR*GqfIlKB;*}rO$n19CKq|1UkP<5en?j6h!~K4Cw5w!7lMFGAtpZ-qvu()5{#c; z(Jh8P8Jux2f3Vp-)5*n>!(79p&3!_4PnKAl_e!ud;?uA;v9@dUzbRy*PQ8eWYj0Km z^gX~o63x6RCwn<;V%x3)|HbIVjcyKT^XiOvvBUz#=iND{O(~w!7GDZ8^J-@g^;H&% zFY_#;P!xeEM}+^}bXjuQEVq)<83e0G02?P~BzXFL^3tyAa#4vT+~1TzsQrnG?t(ht z+_35f9vP<9ZT(G64Ht@|lDkjd?~%|v)Jy+fU7w<*Q6CG3WuRAQmIB*$g*okRnfMO%i|yX zr`}=mAv@Uoog0TIPJO8a8XWC|#tXo|v2UC%N-E=!a-@%+%&Lk_9np*_D%A9x#)4zzf388>3vkMpJ*ADK6$2U-(ZLT#WX zCXw$Vjq*3Etep+bE;kHHsR@}u-cNO+rK-)K2m%-DlcKS=w3URQE<^)7cvO&?0{q!x|V9(Ir-#+ zC2AqcWOVpFe){p0WvtbUj?zI?;bzJ0t!r`Gfof<-fZG+K70aln4bFkTLEV^#bD^Y1 zpl?eXZcrcP?oiJ4xRi=>Krg~=9s)FEhc)>p6T>1t#w-@mXvKJVFK$}-)nKti(UR_0 z4Va8IpUNPPr#CcIeKt8z?6q?7C1uQHFnD?kQ@WuAWf0QRznwN(wfx@ajd#E$D)5wk zYxl5^NyFg|_j)H%L~#sdaUE93mi+8H{%Akjok5MSH*9_GS<+<=g#1XJzFz7wW1NH9 z5wdJcyt}H(b|XpRB4(1v@#n3sYJr8K3j!1-NBn%GY!#%ppuVIz6oG)iGAm76Vso5i zXd}2X8DP}tsK~6`x0JL|QAQQ_NZ2aC!s;+c$S$Z1U&CrKgjKoYc{H6O!fAC7$PH6k@0=XxXVu^ z2cnqiDs*{qZG|j9|B$^U#;2<&PMg?Ib=2&^@Z2}*+3Mkt@9y2sK4E*eRn(Lt@1s+* zWeiX|Eu9v+BBGFF#r#ww=j-=Yjq*p9PdOfvCAFU}b!d@)__ZhZ&c*+@4A)S@n zfGIRot5xx96ye4y-gSN89My_pQlC4x7nir4!!*uKH2K0UkyToA3P+jcwS6y+dr9#J zY1L!Ib`H1_?WFNYuFG?js;_je{=iH)iSV*up{xyjyxl4PwR- z5h>Jf5%g_>`8gZ03iU-K$8)xjgQi+fPmP*5+{leWxWl$?LKQyZv0e{R1{pg>^Nr&< z_d{AwhwU#JgGWE}ua2Zs&SCMNJP3gMdHCepj@LK#gRLPxNG>iBB3h*F_*X$;UlVrbnxqzX{)8p#Q_V?epQU?h!rPt7k>fA{8~#Az(`YTPCS| z&+L?CVGlX<^P4INNJU`9BAHW82t?pq2yRY;9Qa$;L6WuUFN3hDpTJ1)+$cPjTj98k z&4r)%7;64Q8>Ysqv7F{UjE`3B$uiNfih`lRmb{@o-{N=yK47YYO0^i**{5s5lx?;M z-lgmOkYj=&w_kI-5e?T^+^-8N5*p%xGBDIGkDfFg5~>QD0;V|u-TfAvf8h5fN$5^M!C zHA7%CoYS^vCbNC2RNQ`2F)@Oh7EO(Mq%r_wch=-i3=>?xOd~@{+t8SSnHVhm-1K04 z;!Zb)gw2UCz1Ajg#Cw)%=hh6ne07GdFQrIojJUh)W{c_h>z@Tt6{FUb;x#upAYk$0 z{L=b0;NqI+o=C z*{z|nzX$evqf+)XT=eynpRm=dC%rp{|HLqB5to* z1x7b29n7_l$p)&Oa)!)^e>crR-8{lUv6qRMbnf!<$b8Z;5x1U`%$@QfHpkj~ zfn3DB5{0DdNxjbPP94JzHGgWNlEiJPR1SDAyf8|@c=-zKOxaQe7|7-r+=-vzh)8MV zB)7x*(?2`aCeQ(s^A1s7?pQkg|H!RFQA2f2$*W(IL;WJQdkhTW{+lOmLBEt(D#LUj zweqkFN<#9pGMb0>?u_JxLBp@lTkHh-&hO-Xa*5g#qOCh+xEIs|__}a97%=2~L&o0% z1`$(V_l?89JqebcE)2ZU4s$ISh8~WYZS~f)Xs4YyK>(Y6+LH<=t{C&d`Qo- zqnE65xXyYuK*%4wnAN(~J=?Z|E!!v7#fTAu-6Z|is!t$Mk11u2s(ksoPJOLhdmyCO z`H(z)qDNo_bgCJv+x-Uu1NvOXpg*lNZr}H${%6ywFWU_SmR%`<0JGV)u9G15cCqp$ z%hdl_C;7nor@Hk2j(Ltd#Jit4}m&N=GNU;k@S#JsFil9-e z7G2SX9m$a1MS0KZsADGs?^DK|LgHhb6@P0s`GYQ}Vx`RZx(x$TL*giGneb*JSpJ2s zj>!vVl?uqe_GNVzN&u8yMbOM6rg#`!&ft%i;qdp;{@3yqh!84tl(9&PDK1YVB_YS! z_PWd8CpjNeO$^%B*JnIU#2(`FFxkYcZ)&g%quHOXq8b-Jv8sfENhB3;m4Jvcx9oB5 zUgV&D+^&6Q%gPErAIS}_6YzqYR*X}(vXFfEI3H<~5=wb5t373%7rc<#m7B626RR61 zGpBPa9m5%zy>r;%LC5lWNq5oWj^ca#MVI<)2-xp!_0EUpKa6&_??*jm5nFOz;<%M< z?G7WTr8-^7AY^PHeA{sC9I7Wa{$X zLEpfek9)p6(pBtdvQoiuhevNdEg$M3e5ULp!_@cL8r|3w5rbPd$8UnstzFi5Ivgw# zh8Z?#RYIL3Hq0=2GvjhUNG}w!HmuayZmV;|~FHOUBDWrxzPd|iz!m$WRo*Np-pKd>fqNtwS1pjE0(f7aN9>mY{Tit-6+&nUOu zicrE(X<4AlsOU~~DIr)l#F)@d!^8*GP6CU53Fo*oN68IC@Tpxm7oV^l&pyN9O<^^4 z)iT-)vcpH-?oNbCxWvX(b-)RtyqWNSpc`T9W!Ds2i(o|?0gB|Xe+o=L4{&>aZ)Y*5 ztiCD^s5+cOl0XLUs}=XSS`!3sBxl#iX=f!qpLCp$89+In`{iZtXJ_w%OI3muitoLI zV&h#P2v}aqtG7#qx1;-Z)*`xhC%BAoI%3rtBz5OslH2q$M~lJdUt_2x*V2fV=lXCI zY@n45aKDZ@mM|vyRHKBq8W%ZeLs<&>`JFFk3mZgwTwac3A?^m~pCq@thwA*>i1FV9 zlYcK|x`*brirRiV!7}euKrpYdguo^cP!&PL8>+JM%Qo?HoP;dtmu8JC`9~YU(2}qx zb|28b-5}V~zi#`f{Mc6{7QR`MW?yU>Jz~Lf3^wrCZd1WZ$yC6!#=(}qi5BrsWIVJb zJ;TQj7!t?0Gx70f%##b1+#9XE@(y>S_L1W5r<*xl24n*HXPn5z~en*wUx_aV-s1jB%(eN8<+-^aoe}hW-a&O9i#u{T#2^iG; z2_S=ej}w*;Ee=mG{0TmVPd^^U4FSi&WRz_Ml3->ZRQl2RRr~U?NgMvwB-S{^f5((? z98&+6cbT6RHI~H%82(|`E0|K=G1c&1`!?qHZN~BdX9Qh9LN5MwqU;3+9LbYGxd$8# zzp{LJ6a~ZE6{IH`TqIbd_K=lakcT3g#2T0t4Eg+gLEoKQmzU=Y=*}WSRF7^8`p8c_ z(oC+Jx-H0c5g-o<@-L z5C}9EzjK6orV3>$tI2><76X)FfkE&Mja6`wfc|DRX(lNU1?hdjxtA%Z#F~&+iwrLEwy z-*IBn{sk;>y@JtY2PYwnRIfi@k3B=Tl4g2VwEqvq=r_|gg00jW{MW{jXqi7vk0Vas zjStOj5?|K9RrEW;WK3@aP3@*IDO}-{LwU+kN>Z~xN21&iXm0;&zJ0?HYX?VWpzaS- z-Y1J2VZ94HDSYN@L#ujOR0&<)a?N*8)EEohnko|thvB?Dsrno+wixfAIk5UD zPl>gBukkVXI4C8Gw~|{9A}C0A%(VD;ih_21LhU)shYyx;6FimKO0QyjcMLIsS`LnF znb=JK5<$48;R3l(5R0w8CjFl$FyLp8)k}X@>Q6H4j$>Q$*-*1Za;f8}@u&R)Q?cNG zCDK#OF2jGJ)S>O$e@%2LkNohayV*DPrc?O0Iu#X79D@h^E$fX%xixkKf;p*;q@*gH98Y7r^cd~F}P zadClDmm+9nh=F0;F7NzC2+RMF!s3i##w)3qp!v)zNyn3`-Yq^~0ocLE1&(6Xr6Snw zIAAMc zsAe9PAIG{xZ^wM$QA&;It-Gqc0IbBQR{C7O5LZ_?{?Izw(Qv|>boEv?;ZV!kCTW0i?~$J31SPpeiTeGgvuwV-BXxs?190IcChKtNIiC0Do7#h8p5Qt_Xdx zZpVF3>&A;`pL}G}t^|w-+zE{aek%$0nWhJ9L|7U>B>!BS`ci}Im-I%kL!P?_PI}-f z`mHuHrKc+QpMLzCVshGo3}#?#hVv|FSEjNuUFG8}5|2sn9i}u?K)&Po1kMb`VG@}< zG6u?+KnpNUG?VJtOUQy78*{5zW!)i4IY-bGez>ykx`hFLKmKokB`hybQ_iQ$pTRZmvqIVKqMDJx7(d#f6 z40B%jecwKNpL4E#opW91k9pV3npK~7t##ke{j6wBbtPf~Isy;~MEpWoK^sU{fKTTg zT;RzV;xYpQVNm($zVcA8cDH(G=jvhS;tT@$WF${iJBL0c>xJKw?%|v(t=}HhzN<(y zz@<>=1;??!@Xl6i(Y^T|f|xKzlDKRK2H9#%G8lW-eGrLX6B%5gysgnx z;adJG&gloZWgmAg4i~viwu4 z_jnZ>Dn&gyT`u=KcUBOcsp#31v!aNvR;BGA7UV4cwrr~i2=oB-LP1v7Cu2X;KY((* z4Gn!6Y@+;t*_#Mk`2o3V)bpk@4qaI-`<|Di$%9=tJEG;C_ypyBM#c{7D|UMEuUMQC z^tHfvV@8}Y7V_afjX1>E@^Xz~*ms^ZxvI%wvi~|v7!XKH+jI6xx>r9ZbvWZ-E`B26 zKIg&@xsYf`>&toYQ5mIp$a5$f>9yY;`ZI=!^&={8)pa*m<5W zMD)=Td5-V}^-3@VtH$I_x!#Iz%Wtla9(Xf~nl9nF-Xa=zm>0sxAac#It>cCyGBKLR z=TTQIk4C>;`6gBNvEzAkf(>8}BfN?s^m`%=3ge8;%XhG{a6E})GAmp)34%FfRoH@f z5yxM4ot8$H+Go@Q92h?nz{}g7Z+=#8Ry&W$_S)Z#Sj;?sWEdT-fMGy7DUan!#d4-7 z!`O=KK)*Z)!FuR-PLW%iOY)_~GW=6=GEVTs_T)GP1qH^V$B!*<-s4~_%!>ytOFU#{ z#R~rNg_gUmqJktC2D5x;?$2$pMoLVqr5#ZOIvO&+(SAuYw5~K{XK#PT39e*38cSzQ zR&t5gC2*$S)2_j3AlB~|+6XLPSrG3i%1~GRgIU$HoqsrtpNNTXh%bUC%1k)OW3r;H zyJK6OU<%`U{Fp^RfFk(UFV&cs7*PM8p8;pWQVY#Fk5PDH0J) zGmDP?!zd~T?ZV#^_YdnXQ~1R6vJe{e^p4Phwe{|1{)?n9f_CJFhK7IE*FUDEy)ZMo z5BxC7%KTIDD#sC8KfDh0x~g}IS%PV(sIYKyM#sewrSO`ozkSO-l*-G&$|^rplXP*i z!P#NlG;SToW$v$5ZH(gMNG82LR;TIqX*e4%U{H>GI7;KIa{w<@RYe_lMY!W4V;^n& zJMEKzW2K0}`|tzdpql{s`Lq26&c~0(yKQErglCR(i|0a4`_4bx;GAp@>l`%i^2i(M z=~4Cc^n67k92XnM{!@vZ9Ol8s>NO%ePfyR!Ox!cwMMW0gAv20vsU%y2r$ii@>K@21 zV=b>67^^kw>a6b`U!R9JY~jB4LE?|eDrUubZd zN#RiYs^IQkBO7oTz%^i6Etke;710$EzJL#pZoMb)c2=Lr+0Je(CF#>ATB(3W*#JE~ zJ+F+ETPsc!X>b5W-mPf)tvN{rqaX?BWAp~fQ+t|fF1Zezyfm2(56lS#Ej4AOxy5%y zByjPw{yyQoW(~N}I&eK8vNu-2yony9Sf#w%g$6y8QFBlF%4j#oNgUOjm7Sg4Y1K}3 z2Tsf=ru%Xtc66^(K9ZzPEzH-~H^S2$mCIxM@YZV1E&DUyo>(}o_^8>jKUm!+`49dsnkeCRU3U6?{!Y^-G`sL5LmV;eR|=QBhFn>?CZQ@*Nu_M>)0Ym55LRK~26;ad6O%|m@fZj&o`*n2 zD3(U1SY0UA=EeqHw>?f%W!uJVqnlNvhXH&+3q?di@^-EFgRY)l&ZClwPoF;Z4-7DK za=xIj0p2vdu(N^|rIR?9t-ZY$5>C^U-gvlLGP$f8K z$hsOT(r2NU;ncUovl}GYC5vJ4G;QFHu%k7>_5Jqf@%>E(g2mCZ>N1R8V=Y5Ysa3EX zN>Nc!S6|=$f>h!txZcFj@SCWsvvb8d&sKSH86~9HAACH(5xi3+=LnKUt&$Qi5aKP@ z+EI8z0~-o%%RJeQpgo_%?+Y?7n+YrOu6FbGC_9O+&EVc&BE7Wc>K7s9(7zw*SsWOA z!ECf#ZAI|3YjC2e+f;I-;u1QL#1Z24I@UAT*rjc%bieGMY;$1VB$4tI^*0jR+x9_~ zxsQze4jd{)DHT_{qvL0asTxZ+JqvE|GKm!34Lkx)b^4oXtiE;@?0UM}&NCg%eIvqj z#%Q1Qi34*aWcb@g z(99`6r!J%yVR6}$adJ9p_7MWnP*WoY2GZTr18?ZK{*aNu06r}>*V56+3xvU7Pg=I1 z{^-EeAPx;-kj9l~Md#6*W94vrFNb`ov1RDR&x86{MO)dg~If@4c2b(kSd*Y){9Q17B9EOZ8mz^ch^2DJe~2eEi1)`N@qA@%#if- z(r12K6MKKE`|exy#@!2^=QlDm96(*1)J3Eb(+hRJ$Em-;9b@irTYFwUCJ%YbvAw;m z`Xzh%Bri92w#{EyK7uGG2z>+Eo3A63LN883ABg=S^rEqaO%z?IDB&T-(DQYw7Cd zOLsMW(wcd?{t7-SdJc_4EC)O+ zRNI4QS%4g9QidNLxpHgpN>q704PHXB$wZ^!g3S-f!fl@48Ph|XYmjF}z=mx|Vpffx zq|YolRgNSvU3_HPU%Lr0ac7MKn>OY(z3l2WAXQ-tiSozz8VgybR5Cq<59F39z*5xB zU#yaAuo{_^zqI+RYy!I|wPk#{*|qPr86F;v*V3Iv)g za8_-g0Mkdz&&sGM%4`LgQnRr9!83MIyJ~WXBzZ6g)BWNC^xIQIPzfQaTiMQfFr)X^ zjM`VxzN&#te>9ZLM#s%X1VO>g$q-x*RCR(>3HAsBW+#_gUM-?eo)qNjyX0nX9@M7P z1GQq%tDK;Fpb7Tudai#LH1J433 z*tt>gb(3&$c_^NNnMb z%S5LRSrqAFkIM{H>TFCYnF(cZB|+_0E5VA0h)lk3sDs4u)!4FmWltj(N zSHm$XCKHH$Ba!&aa{blR5DBxY+wzxM+fQhv;hIZt-TNY?(N0^%At-231bi+#gy*FE z)@H{aii##O$O_mcyf_B9#$Yp0?1~^iv4NM>4{xR}%xx|GeU7<_Dj52s2RLu5+)m*t z$b(SJt^{O&RV`66*?!Y3e@7?d+(b^II@`yXW`7dHG+IM-!hssn9QbJGY+C%5q0~Fh z!T6vAVMtpFrdshT!vGM`md39={Cbg)fAN>{>`HF~9mQ3$Z=$ZK2VUfMH?$8kXTr^Q3P42oGsqo)Ys_1gB3{5ER0R3<2`ruP_` z4)o4%L!6BF+ulxIiTKYzQN+D&1K*V=<{M>vQBwrKB42{{QZRWadsCt5H3BSrU)t)< zlP&weu=F>Batb7YH3d#fwkCt_pm=@OqDhG?_lXiPDGxZ7QO4lfjKV^8?x6L-uG z^lzUHxGc}K<%|45i0&UEtbfxDnU4Mk9ZH>H++6JPN}WQZM;Ik4M2~6^BB}#zaJ` zgi57OQPGY-_X|C@D(fN%{f-`MhK*_c6XLEV@RD42hf+7>cWpS~z|c@0BA+g(|5*%l zao)b2dG>D5M7?C(Jz6^W;4h%s#QPP>;EWz#d z^fHaZa3&RvO|s5pE=}ETLiv$*O~w19!qOhw?`dmyKmJtC5{Z`D8;43Wlyr@K<-B2=({S?F`3iD+<+{; zf!!JMoh#JWuU`dMw>x%scIJ&#$`8Zvl;e?wKZ4V1Pmy~cd)qq*{r5O;LaIj&e<;?K zb|DyRTYgMqtZpE!?zc?%OjL`4$2Mu+T`~;gYcaNSk!I9+%J?8pg*kJewh7Wc8)WiO zbKrGKQK185p_|?ZD{i^t5gtghOmz4N){nqgRlJBECzK40Kd#@CWbq-e=o(!=W{28f9!C?cf~_|x<)yQ; z5+^nvi5Fr2p}6U|_auMWV${mCMhN5xnbU0YtcBN~D~X7#X7IW93~ zEIj1LHaTK`h9Fh5z@5*EojJ$?!MP#~QSeBSTxYmplu7`+oq zl4QIR0_ZKc|GS2YxE~+g<(1jM`F#?1c|T&a{I3+?|A8(1Eee~UfU|CdJrdX?!L(Rx zGI!X<(L$4SHtQ9Mpww5SJ_%Z?N4>jNI4z$6gv2_8p63b1qXjp<>@{=5gTaY};?!T$ zg=gm@s`z@)7d41->Xhr~;1B2~<3$hz59t8WZm4jJyF+4T}ViV|fWj05}$+*|JO zb{0t=hSd@a<-s!pZ2LX+aBTXNg%U>b#Q);Hv5Dqk=f+yBXA1)oFs=>6jwaPCOfKNP z4dex404MNW=eSN$-8w=RUqb5OVJH%Dq0fK&<`#a8;o?!#d?hRFZ*f|+U5E);kEE|% z2WJ0Y%JFZ>E*^6D9q+-Nv;^l7_`MjAdTlIA|~?|SWO!7RwE z`mtdTC(@~BWu7;4{@vbiboUd(*JKbWsBr*!_AU0G)TEu1%S5>Zyt?9=Ib{(PKSEYn zEGRtM@xydSZ3J+U!D3Y%U3mZMBOjyNoGAXScmS0W+M(m)2%yf>zz*y5JBp?n7V*%G zLt-=hqa*R*_yS&!fc1vbi@B8cs=nitPWbDtCxNdM3`klL;gY!3MqR7kUm5957EMfg zI=UiKR{Fb_9bb74a^Wpk?R=Ik)34go5TWM2DVA?8MbdEJ^k1fownHt)U1;w|fRV%Zx1hc_b+T82&a~5nDsscf zcP%m?BNJZwu!<}jgX_uz3$jrj$7+&Zq@|wbmUz41 zy)a8AmlD&Z5vI$y{U>&~v}Zdb{> zdEUR8%bpsv3am)U`u669O5@rdrhpe8f)pIYCaBd}d3iG{>yViLbD~4-f|$MBaqc*%I+ZX< z6Zr_MT!4|<#Y*#Lj)&}^p=k&Chw+ROyFc9mOUh^R_q5Qpr$;lG#jRknU4nT!jvv94 zPuh0BHXR^E+I`Hp{mfJ}I5?CtAxGMFoDUy9B+~v=y9hLt6Qb&Ju`q=ja>~Mir zO->Gz)o3E^t3dK_`hp86)ZU?5;KnV~tC;YarWsaE#93j017TMu86MHSu!0J!w;KCz zz(}Qk&t&ZFKCY&NJIed>L9n)G6G_xOu4noKlG7v%$5Z$hDdE&;k_%u3jnPRW?7ZH+ zQ^siEW>6!<2@9vHE?ZUWg;J{yA&2rYAl&Cp&h-_5lP_E*R`8E>@Fx*7V)?ETtE-3` zg?Rv+o~80oZ7rDkM@V2$U9YbMv)CVCg)2KCMvLYK)T%F@_~-27&YT;&u0xeuHjQ12 z=AYJV6`du#r(iq=7P|cs$)%tErYC}kYRYNRL9A0Y8DEAZzPZOqQ!3Tk>Q-%py$td#Tx``8*yL| z2N%romI(aJTA4QrPw2lEp0E%s`^5*KYbsL}x<(sbw+cOt9@FYwo|70tt9{tub zL#%_A{#d^GOmlJ8q}hkux3lw5^6-hGxtJ!!B`f1DbEDmmM(Gd^5gE_!cJkSkFAW~@ z7%&zZ2toGq2sEmyt|Cl zN9ILfD<$SIjdms{d=sagT+8a;;;UiZ{-3an2NUr9&k#=A0U$W-k~-qT&U5@eLe(1%@M@$6 zV>WR8@k=9P|3y~LY2Te+ z6|E3RGt^}o{)Xw*R37Y*kEECedcb8sd{VRD{*EfRI?x}ks;Ma>^}2ut`jJ900-2DZ z2~GMaCc2 zLjCyoifOE_&S3ip4**Gh#U(R=#_fE)Zb$lEsy1PWb|&&n3-Is-yVn@X_V}jK#P81hO(s z|AV=U!pE-{z@e@d-tdL>&hWgA$8*x?i291#nh&lvp;bLNrzDP2?XM1Fu>2o(Zn9`) znc8MB>)uhjqw`0yW%T}C%stz-5^fEm9YxsjIxc+sr2J1>_Jei*^74NJ@|BrGsZ&oU ztnhmN-SaJCHXd{5TM$*r!Y9x^7`hDU3OR-EG9uf{m}aSi z9{wFuf`*_-71=Gi4}k-6HCXm^gXIDgJb;1lN`1I<^%rqZP>%mVF0l*bSd~|<2CFXu zZ-HG-Ylh;>n((G^2pLmz!`QZ>t(OIlX}wxlZUx8FK9}DOn9Ncv^XNXmyI&cZmtIN1?W zf0sNTaTe?F*B5vCX+0cbZfE}wHU}C?%S563qgh7P!1hRVB#r|KYBgu-)=$s zIt)pA@Hp)9EWHYT*-;|ux_YwE>eZ!QVC1iPO-(@>xG+wmYQ0S;tPQMzsBo4e^?LiIYx3V5e`_P?*Bz? zyMBjv3rKAd`wGis!U|C{{5~#>ey@**JU743Cf2lq57@sJUysk_9BdAQmtOlja2c?x z=ReWPgzPK$i4hj5SvmQM6*x_}i)QYi9Q9XuNdA%X@!U}#oZy=Un_5Qm8Xtl*kDf(C zCx|;IfHsEVDqisyU%O+8cTfQ~6NZhh%uT+&pCeMf!IebQswy>#XxbWDCxI~CKW#Pr zD55!0Pm?f=j(1Lna7$)>)0w)s2)hjw3;o->j7Cxo4fXTyFhGk> z{c1m@q-+S?eE-gWmipPG2C0K*<7sQA_2U_L9H%(h00%eC+B%?8Av4sr zRXG#{A|blH3-DA(;>&!*&@cNdTx5{!*{_!sN*?_|KDKr2Qh{GH1FRN=fNhDv;1I%X zK6}lvyG~W4_aZR^YiLnoIo1 z^Sx#zR4wyiA1Xu>^br&UsljtwjKHF<{+`<#o3`&kLO%1$Hx}$TKQa2>z zueU2?Q?I6|8I;T9O6=r38?kjl(X%QOz^);^LN~uyMGQF0i@aoOGo+2UdGs+-(&g$q z@^>dUw+AGej2{q;#1*ypKQQxodo#9n{>RyLJLvNX7NCy*|8$PeIob>2qQ4M!ZlRG$ zDQ3qtco?$=9Wm14O!%`(+HbA(z9M)m&^fXk0lV5}D z15Zmqv=n@)R}@f!evS+TOx$S7F$!&~CjbJv`;yE^Qw1l4JM~LjMFq*<+ylK;jVGB! z(r^%KK99tuSS+Pc;t3kwo7>5+0)lWG{p*$Z2UD?QIbBcG=`61Il;8hpA$-x^lE`=0 z-Pe9l{T7sgq*vkB)bZY*o9>3so6jHfU-&m%CcVhB zT&?;(X+PJed3bn9bc>M>(|&%D^cQ-`ANi4PQEBLes`7q+n>3tzeW4~UN&5a3TRLC} zLHM>|hgZkCqE-#oZo(nw2mzqecZD232Tbh%o3K*S`nA`2x#mAuv$IIp5tPZi-#_+N z=nn+g=r$MW98MR+fF9p>$TLDf4cO<#?oE*Ve3q3OLlf%Rx30iO&N&gjE&oU!KU2!n zZzMi@Nselc1Ku>`N%Jxttl@w{{?{Pe=ZiAXs(Py+{?seki<*l>@%aRsg5;Z zm}-vSe#$p`B6*e9iBkceol9KZcV+n_8?hs{1@71{Om6VC+Db_ON24sg&4jX8tI-~* zfHAsX+_F1Y=D2seN+1&54Q3`-bvs@x(#I-yT)RrGu5_`fJS9VX!9wosRJE~{l4_Kp z!!WEZdfbV_rmmFc;{Q+jMjgudvI4t?7Py|^K!N7E*qc} zFH{5M0&UCwre@%B$Y#6elbw1d3Pv@)ZezQrKV7`w@9zkl!2cnvU+oyUt!w+YgTeJ& zsq>6Jz{viKaG$3)EGVpJdvS?OPk$_kx11Q%`;G=-00e);$(e76FKmj%7QjEp`piA+ zA!pu3Hyba8OpmIqMTFRY!X``Si|Xp8s@nMsmwu*JR9&!VQlOFo=4O4Zat>H z)p4RPU=rm3N!a#ejRR!&58Qt6C5Wvlmh$VLj|u1(XSe{Fe)?9X4-$SRT))*L%(c*r zn4{zI zh{w`(ueUT$^BsxL;d?W}s;bviFYcvss-vQiNFPh>2}2PlX5g~Rr0O;6ZCG7AQad(hc>m?1#j%zqab4Mb60R>0dhTIkT&N8LrCY)iO4I z>Ey)ytj+$B-5tzUNXAr=a}+WrXx$!11YGYPune;CFmLQf2PU zZJ1xxUQATSeYVxN#tTbC$GG%HBwe{V0Q+%*rU5>LMn-ShrPj}YED@XG`yt}9VBa`- z{%?&}(h`{&-*o0$o33#+r%iAtXT8AgsJlw;7p>*Xp4_lX5~d#W#{l8kc>yR5AIuj) z_E%Gu1}IJrGv>$N!$*_uf&?-BXUy`eAI3b*ResCnR(?t(!N-Ucu1wfX0%0gbqAu&M z>YkGVw1P+i5qQwLiEA6uuJiz1ihCLU!A5n+Cn`cs{A_I(<=CEkctiz6|K|p_5{;Y_ zc=2%L;z?M8E)t^eF!s_GV8R|0e-GNk+h)&|2Ls1qozJPA7dg~57|)pre=@OK{jBYr zN0`KsO(=(ntrIV(TI1%SY)>4|@0Azrc%3djnJ+(65J(K<85zCMtmehtS}5I4Vr~ES zCURtIx=-QPGsHEOP}%naBp&T0s=`FOh5Z-Q(j(p!>xYYKjPCQ^^Qq}bj&Rz`8xlS9 z>H;JdQ0i;?<2(3_)2qgDzpEW&YDI5uF+-RUh(rW}^=z&_3RYGBY@p4wGC;Y9-snZ! z>$%j2(sqM#8#_hS-3Wr+Wo=$fUE*E6?Uw`sM6zuaCsP+uye;18-JDrUb8PCIZ=gzN znL#d7zIb}gVGiPwOh0j_KnGXI2;!1e+vGr=S-u;(o4NWLPc}Awy1JuHPH4NfauMvf z>*8O!!SC`pfXPT2@O(2R4ME;=n;0Fp+nixFDqzF@BP2Y72%iBANNgctZ}@ zTQ4@|$9!8xhY^7EPZ@~?Pg8Kyik6)zp)ZM&lGb7%>9#pmK;^cVH)qEDv1pys`(fX-*UgZuW%;%+4$mlW%OtAhbYFA9L0 zfre(uNQz1ZSDbHyn0{`A#EWuR!sH>YEmZlBg~@Z)xwC1!L|3DA_FcNkb0=aoAiN(D z*kVp$hId20TOjYs&$9(vRpnBx_hz%Ist6s_fL^&#TFbW8;nn~%vf`_$35fo4_~Ey) ztP6HwSByj>A07KrKD!2{S43-n{szQ0-5HAIKhpW$PUe0}TmEIH=X$*8N^BBWbs0IaVSoQ!Fj_@q#xH~PN^3fKk`7l zg+I*gCl7Ik+@ek^D-5K82=@H<(tVynBXsD})XAG`jd2S2E9`63=SvJ9x>-WqEG-*Z z@+eW2(veP4;VZ+C_MpS=Z_fe0(EV-Uqj8*vk~j&Ni-`BtcddEJ?h|t}$qfa%ikE== zgYI;>xvu8#UYEga)g;tu^ zyvMtvRV;JGWUWk07<39%U++$rPfku2QwWM>Izp>|Qp20*R{4P!Nsp7)M}zlSpA*gj zxL8Z@QEoD->3XkwB~szK4?ICnLBAh%#WSX$l_i0IW2naCXYlO_woh4MGbCF+M-2o6 z!g8~0=k%uYBz zVniEYGIY97;R$0t#XctiE^31w?X6=<%7;n9lvFUOD;Zr0I`lxf^I<-D>QVj+Vczj= zAjf@X7#46%CJ659_q}f+Y%9jVFYyRl@&NB8W=s(B0;2%*@aDgD5023o1qM8v4k4fC RfV=dd7mDf%6>=8u{|C-jWuE{5 From 7c4bd99ece07d1081fe494820e757207081c43a6 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 16 Oct 2024 15:54:50 -0500 Subject: [PATCH 014/274] Automatic changelog generation for PR #3570 [ci skip] --- html/changelogs/AutoChangeLog-pr-3570.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3570.yml diff --git a/html/changelogs/AutoChangeLog-pr-3570.yml b/html/changelogs/AutoChangeLog-pr-3570.yml new file mode 100644 index 000000000000..b3288d735ec1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3570.yml @@ -0,0 +1,6 @@ +author: PositiveEntropy +changes: + - {imageadd: All colored jumpsuits have been resprited!} + - {rscdel: Rainbow and khaki jumpsuits (including the buster subtype) have been + removed.} +delete-after: true From 192bcec6584101c16d199ce52dc0d45425714242 Mon Sep 17 00:00:00 2001 From: MemeSnorfer <116136632+MemeSnorfer@users.noreply.github.com> Date: Wed, 16 Oct 2024 13:44:32 -0700 Subject: [PATCH 015/274] Fashion on The Frontier: Dresses (#3565) ## About The Pull Request (PR'ing the right branch this time) Resprites many dresses, and adds many more. Specifically: Resprites all the colored skirts, black tango, red evening gown, sailors dress (reflavored to be Solarian), sundress, striped dress, white dress, and some suitskirts. Adds an extra colored skirt, a pinafore with five other variants, a one shoulder dress, and a Kalixcian dress. ![image](https://github.com/user-attachments/assets/a8672878-603c-4c22-89db-b7cca40a0e4b) ## Why It's Good For The Game Your branch: Crusty, crufty, ugly ![image](https://github.com/user-attachments/assets/3ed162bd-2cea-49ee-9b9d-2a0ae7ce0368) My branch: Cute, pretty, full of beauty ![image](https://github.com/user-attachments/assets/82d6922f-97dc-4f81-93b4-64495a4e2014) ## Changelog :cl: imageadd: Resprites colored skirts, black tango, red evening gown, sailors dress, sundress, white dress, and some suitskirts. add: Six pinafore variants, white colored skirt, one shoulder dress, and iko-ikssoal dress. /:cl: --- .../JungleRuins/jungle_interceptor.dmm | 4 +- _maps/map_files/generic/CentCom.dmm | 2 +- .../independent/independent_tranquility.dmm | 2 +- code/game/objects/effects/spawners/bundle.dm | 2 +- .../modules/client/loadout/loadout_uniform.dm | 89 ++++++++++++++---- code/modules/clothing/under/skirt_dress.dm | 81 ++++++++++++++-- .../hostile/mining_mobs/hivelord_outfits.dm | 2 +- code/modules/vending/autodrobe.dm | 2 +- code/modules/vending/clothesmate.dm | 17 +++- icons/mob/clothing/suit.dmi | Bin 38892 -> 32281 bytes icons/mob/clothing/under/command.dmi | Bin 5043 -> 14750 bytes icons/mob/clothing/under/dress.dmi | Bin 17486 -> 25843 bytes icons/mob/clothing/under/suits.dmi | Bin 21430 -> 20135 bytes icons/obj/clothing/suits.dmi | Bin 17578 -> 16944 bytes icons/obj/clothing/under/command.dmi | Bin 2037 -> 4995 bytes icons/obj/clothing/under/dress.dmi | Bin 5341 -> 7130 bytes icons/obj/clothing/under/suits.dmi | Bin 8212 -> 7877 bytes 17 files changed, 162 insertions(+), 39 deletions(-) diff --git a/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm b/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm index f6efbca453e2..4d17f130e1ae 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm @@ -1090,7 +1090,7 @@ /obj/item/radio, /obj/item/radio, /obj/item/clothing/under/color/jumpskirt/darkblue, -/obj/item/clothing/under/dress/skirt/blue, +/obj/item/clothing/under/dress/skirt/color/blue, /obj/effect/turf_decal/corner/opaque/black{ icon_state = "siding_line"; dir = 10 @@ -1516,7 +1516,7 @@ }, /obj/item/radio, /obj/item/radio, -/obj/item/clothing/under/dress/skirt/blue, +/obj/item/clothing/under/dress/skirt/color/blue, /obj/item/clothing/under/color/darkblue, /obj/effect/turf_decal/corner/opaque/black{ icon_state = "siding_line"; diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index d7715e22b561..229134b7eac7 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -4840,7 +4840,7 @@ "aRr" = ( /obj/structure/closet/secure_closet/personal/cabinet, /obj/item/clothing/under/rank/civilian/curator/treasure_hunter, -/obj/item/clothing/under/dress/skirt, +/obj/item/clothing/under/dress/skirt/color, /obj/item/clothing/under/shorts/black, /obj/item/clothing/under/pants/track, /obj/item/clothing/accessory/armband/deputy, diff --git a/_maps/shuttles/independent/independent_tranquility.dmm b/_maps/shuttles/independent/independent_tranquility.dmm index 020de62890e7..35b3044df741 100644 --- a/_maps/shuttles/independent/independent_tranquility.dmm +++ b/_maps/shuttles/independent/independent_tranquility.dmm @@ -1326,7 +1326,7 @@ /obj/item/clothing/head/beret, /obj/item/clothing/under/color/jumpskirt/random, /obj/item/clothing/under/color/random, -/obj/item/clothing/under/dress/skirt/red, +/obj/item/clothing/under/dress/skirt/color/red, /obj/item/clothing/suit/longcoat, /obj/item/clothing/suit/jacket/letterman_red, /obj/item/clothing/head/soft/mime, diff --git a/code/game/objects/effects/spawners/bundle.dm b/code/game/objects/effects/spawners/bundle.dm index e4f36e8b827d..f9f465bf47ab 100644 --- a/code/game/objects/effects/spawners/bundle.dm +++ b/code/game/objects/effects/spawners/bundle.dm @@ -43,7 +43,7 @@ /obj/effect/spawner/bundle/costume/maid name = "maid costume spawner" items = list( - /obj/item/clothing/under/dress/skirt, + /obj/item/clothing/under/dress/skirt/color, /obj/effect/spawner/lootdrop/minor/beret_or_rabbitears, /obj/item/clothing/glasses/blindfold) diff --git a/code/modules/client/loadout/loadout_uniform.dm b/code/modules/client/loadout/loadout_uniform.dm index 162b6718ca6f..666aa8176e03 100644 --- a/code/modules/client/loadout/loadout_uniform.dm +++ b/code/modules/client/loadout/loadout_uniform.dm @@ -181,41 +181,94 @@ subtype_path = /datum/gear/uniform/dress /datum/gear/uniform/dress/sailor - display_name = "sailor dress" + display_name = "dress, sailor" path = /obj/item/clothing/under/dress/sailor /datum/gear/uniform/dress/striped - display_name = "striped dress" + display_name = "dress, striped" path = /obj/item/clothing/under/dress/striped /datum/gear/uniform/dress/redeveninggown - display_name = "red evening gown" + display_name = "dress, red evening gown" path = /obj/item/clothing/under/dress/redeveninggown /datum/gear/uniform/dress/blacktango - display_name = "black tango dress" + display_name = "dress, black tango" path = /obj/item/clothing/under/dress/blacktango +/datum/gear/uniform/dress/one_shoulder_dress + + display_name = "dress, one shoulder" + path = /obj/item/clothing/under/dress/one_shoulder + +/datum/gear/uniform/dress/iko_ikssoal + + display_name = "dress, iko-ikssoal" + path = /obj/item/clothing/under/dress/iko_ikssoal + +/datum/gear/uniform/dress/whitedress + + display_name = "dress, white" + path = /obj/item/clothing/under/dress/white_dress + +/datum/gear/uniform/dress/sundress + display_name = "dress, sundress" + path = /obj/item/clothing/under/dress/sundress + +/datum/gear/uniform/dress/rilena + display_name = "dress, Ri cosplay" + path = /obj/item/clothing/under/dress/rilena + /datum/gear/uniform/dress/purpleskirt - display_name = "purple skirt" - path = /obj/item/clothing/under/dress/skirt/purple + display_name = "skirt, purple" + path = /obj/item/clothing/under/dress/skirt/color/purple /datum/gear/uniform/dress/blueskirt - display_name = "blue skirt" - path = /obj/item/clothing/under/dress/skirt/blue + display_name = "skirt, blue" + path = /obj/item/clothing/under/dress/skirt/color/blue /datum/gear/uniform/dress/redskirt - display_name = "red skirt" - path = /obj/item/clothing/under/dress/skirt/red + display_name = "skirt, red" + path = /obj/item/clothing/under/dress/skirt/color/red + +/datum/gear/uniform/dress/whiteskirt + + display_name = "skirt, white" + path = /obj/item/clothing/under/dress/skirt/color/white /datum/gear/uniform/dress/blackskirt - display_name = "black skirt" - path = /obj/item/clothing/under/dress/skirt - description = "Actually, it's a black blouse with a salmon skirt. But it's not called that." + display_name = "skirt, black" + path = /obj/item/clothing/under/dress/skirt/color -/datum/gear/uniform/dress/sundress - display_name = "sundress" - path = /obj/item/clothing/under/dress/sundress +/datum/gear/uniform/dress/black_pinafore + + display_name = "pinafore, black" + path = /obj/item/clothing/under/dress/skirt/pinafore + +/datum/gear/uniform/dress/maroon_pinafore + + display_name = "pinafore, maroon" + path = /obj/item/clothing/under/dress/skirt/pinafore/maroon + +/datum/gear/uniform/dress/cerulean_pinafore + + display_name = "pinafore, cerulean" + path = /obj/item/clothing/under/dress/skirt/pinafore/cerulean + +/datum/gear/uniform/dress/red_plaid_pinafore + + display_name = "pinafore, red plaid" + path = /obj/item/clothing/under/dress/skirt/pinafore/plaid + +/datum/gear/uniform/dress/green_plaid_pinafore + + display_name = "pinafore, green plaid" + path = /obj/item/clothing/under/dress/skirt/pinafore/plaid/green + +/datum/gear/uniform/dress/brown_plaid_pinafore + + display_name = "pinafore, brown plaid" + path = /obj/item/clothing/under/dress/skirt/pinafore/plaid/brown /datum/gear/uniform/suit/dress_suit display_name = "dress-suit, navy" @@ -224,7 +277,3 @@ /datum/gear/uniform/suit/dress_suit/skirt display_name = "dress-suitskirt, navy" path = /obj/item/clothing/under/suit/dresssuit/skirt - -/datum/gear/uniform/dress/rilena - display_name = "red dress, Ri cosplay" - path = /obj/item/clothing/under/dress/rilena diff --git a/code/modules/clothing/under/skirt_dress.dm b/code/modules/clothing/under/skirt_dress.dm index f74748f71fbb..37f8a998f2c7 100644 --- a/code/modules/clothing/under/skirt_dress.dm +++ b/code/modules/clothing/under/skirt_dress.dm @@ -13,19 +13,19 @@ /obj/item/clothing/under/dress/blacktango name = "black tango dress" - desc = "Filled with Latin fire." + desc = "A silky black satin dress, traditionally made for dancing. It's light and easy to move in." icon_state = "black_tango" item_state = "wcoat" /obj/item/clothing/under/dress/striped name = "striped dress" - desc = "Fashion in space." + desc = "A simple blue striped dress." icon_state = "striped_dress" item_state = "striped_dress" /obj/item/clothing/under/dress/sailor name = "sailor dress" - desc = "Formal wear for a leading lady." + desc = "A traditional dress with roots in Far Eastern Cantonal culture, later popularized by the Solarian Confederacy's Naval Forces. However, due to its roots as a formal uniform, it would later be used by civilians in occasions outside of its naval context. The crisp cloth evokes feelings of order and discipline." icon_state = "sailor_dress" item_state = "sailor_dress" @@ -35,32 +35,91 @@ icon_state = "red_evening_gown" item_state = "red_evening_gown" -/obj/item/clothing/under/dress/skirt +/obj/item/clothing/under/dress/one_shoulder + + name = "one shoulder dress" + desc = "A modern black dress with only one shoulder strap. Comes with a matching pair of arm warmers." + icon_state = "one_shoulder_dress" + can_adjust = TRUE + +/obj/item/clothing/under/dress/iko_ikssoal + + name = "iko_ikssoal" + desc = "The “iko-ikssoal”, translating to “long-dress”, is a traditional Kalixcian garment for formal gatherings." + icon_state = "iko_ikssoal" + +/obj/item/clothing/under/dress/skirt/color name = "black skirt" - desc = "A black skirt, very fancy!" + desc = "A black, casual skirt." icon_state = "blackskirt" + can_adjust = TRUE -/obj/item/clothing/under/dress/skirt/blue +/obj/item/clothing/under/dress/skirt/color/blue name = "blue skirt" desc = "A blue, casual skirt." icon_state = "blueskirt" item_state = "b_suit" custom_price = 60 -/obj/item/clothing/under/dress/skirt/red +/obj/item/clothing/under/dress/skirt/color/red name = "red skirt" desc = "A red, casual skirt." icon_state = "redskirt" item_state = "r_suit" custom_price = 60 -/obj/item/clothing/under/dress/skirt/purple +/obj/item/clothing/under/dress/skirt/color/purple name = "purple skirt" desc = "A purple, casual skirt." icon_state = "purpleskirt" item_state = "p_suit" custom_price = 60 +/obj/item/clothing/under/dress/skirt/color/white + + name = "white skirt" + desc = "A white, casual skirt." + icon_state = "whiteskirt" + custom_price = 60 + +/obj/item/clothing/under/dress/skirt/pinafore + + name = "black pinafore" + desc = "It's really just an apron that one wears over a shirt or dress. This one is black." + icon_state = "black_pinafore" + can_adjust = TRUE + alt_covers_chest = TRUE + +/obj/item/clothing/under/dress/skirt/pinafore/maroon + + name = "maroon pinafore" + desc = "It's really just an apron that one wears over a shirt or dress. This one is maroon." + icon_state = "maroon_pinafore" + +/obj/item/clothing/under/dress/skirt/pinafore/cerulean + + name = "cerulean pinafore" + desc = "It's really just an apron that one wears over a shirt or dress. This one is cerulean." + icon_state = "cerulean_pinafore" + +/obj/item/clothing/under/dress/skirt/pinafore/plaid + + name = "red plaid pinafore" + desc = "It's really just an apron that one wears over a shirt or dress. This one is in red plaid." + icon_state = "red_plaid_pinafore" + +/obj/item/clothing/under/dress/skirt/pinafore/plaid/green + + name = "green plaid pinafore" + desc = "It's really just an apron that one wears over a shirt or dress. This one is in green plaid." + icon_state = "green_plaid_pinafore" + +/obj/item/clothing/under/dress/skirt/pinafore/plaid/brown + + name = "brown plaid pinafore" + desc = "It's really just an apron that one wears over a shirt or dress. This one is in brown plaid." + icon_state = "brown_plaid_pinafore" + /obj/item/clothing/under/dress/skirt/plaid name = "red plaid skirt" desc = "A preppy red skirt with a white blouse." @@ -94,3 +153,9 @@ icon_state = "rilena_dress" item_state = "rilena_dress" //supports_variations = KEPORI_VARIATION + +/obj/item/clothing/under/dress/white_dress + name = "white dress" + desc = "A breezy white dress." + icon_state = "white_dress" + item_state = "white_dress" diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm index 86224e131747..15626099bff9 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm @@ -17,7 +17,7 @@ /obj/item/clothing/under/suit/black = 1, /obj/item/clothing/under/dress/sailor = 1, /obj/item/clothing/under/dress/striped = 1, - /obj/item/clothing/under/dress/skirt/blue = 1, + /obj/item/clothing/under/dress/skirt/color/blue = 1, /obj/item/clothing/under/syndicate/tacticool = 1, ) ) diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm index 413b0238ce5d..c42b87afca72 100644 --- a/code/modules/vending/autodrobe.dm +++ b/code/modules/vending/autodrobe.dm @@ -19,7 +19,7 @@ /obj/item/clothing/under/costume/schoolgirl/green = 1, /obj/item/clothing/under/costume/schoolgirl/orange = 1, /obj/item/clothing/head/kitty = 1, - /obj/item/clothing/under/dress/skirt = 1, + /obj/item/clothing/under/dress/skirt/color = 1, /obj/item/clothing/head/beret = 1, /obj/item/clothing/head/cowboy = 1, //WS - Yee Haw /obj/item/clothing/accessory/waistcoat = 1, diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm index 0c16b36902e2..e1d2efe339e9 100644 --- a/code/modules/vending/clothesmate.dm +++ b/code/modules/vending/clothesmate.dm @@ -55,10 +55,17 @@ /obj/item/clothing/under/dress/skirt/plaid/blue = 2, /obj/item/clothing/under/dress/skirt/plaid/green = 2, /obj/item/clothing/under/dress/skirt/plaid/purple = 2, - /obj/item/clothing/under/dress/skirt = 2, - /obj/item/clothing/under/dress/skirt/blue = 2, - /obj/item/clothing/under/dress/skirt/red = 2, - /obj/item/clothing/under/dress/skirt/purple = 2, + /obj/item/clothing/under/dress/skirt/color = 2, + /obj/item/clothing/under/dress/skirt/color/blue = 2, + /obj/item/clothing/under/dress/skirt/color/red = 2, + /obj/item/clothing/under/dress/skirt/color/purple = 2, + /obj/item/clothing/under/dress/skirt/color/white = 2, + /obj/item/clothing/under/dress/skirt/pinafore = 2, + /obj/item/clothing/under/dress/skirt/pinafore/maroon = 2, + /obj/item/clothing/under/dress/skirt/pinafore/cerulean = 2, + /obj/item/clothing/under/dress/skirt/pinafore/plaid = 2, + /obj/item/clothing/under/dress/skirt/pinafore/plaid/green = 2, + /obj/item/clothing/under/dress/skirt/pinafore/plaid/brown = 2, /obj/item/clothing/under/suit/white/skirt = 2, /obj/item/clothing/under/rank/command/captain/suit/skirt = 2, /obj/item/clothing/under/rank/command/head_of_personnel/suit/skirt = 2, @@ -87,6 +94,8 @@ /obj/item/clothing/under/dress/sailor = 1, /obj/item/clothing/under/dress/redeveninggown = 1, /obj/item/clothing/under/dress/blacktango = 1, + /obj/item/clothing/under/dress/one_shoulder = 1, + /obj/item/clothing/under/dress/white_dress = 1, /obj/item/clothing/suit/ianshirt = 1, /obj/item/clothing/shoes/laceup = 2, /obj/item/clothing/shoes/sandal = 2, diff --git a/icons/mob/clothing/suit.dmi b/icons/mob/clothing/suit.dmi index b595f529b7ee4f2c636cc6b9cbbc53a2addf2a4f..ef694ddd611696fa4ed451aaee0f30dad317b836 100644 GIT binary patch literal 32281 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
Release notes

Sourced from dompurify's releases.

DOMPurify 2.5.4

  • Fixed a bug with latest isNaN checks affecting MSIE, thanks @​tulach
  • Fixed the tests for MSIE and fixed related test-runner

DOMPurify 2.5.3

  • Fixed several mXSS variations found by and thanks to @​kevin-mizu & @​Ry0taK
  • Added better configurability for comment scrubbing default behavior
  • Added better hardening against Prototype Pollution attacks, thanks @​kevin-mizu
  • Fixed some smaller issues in README and other documentation

DOMPurify 2.5.2

  • Addressed and fixed a mXSS variation found by @​kevin-mizu
  • Addressed and fixed a mXSS variation found by Adam Kues of Assetnote
  • Updated tests for older Safari and Chrome versions

DOMPurify 2.5.1

  • Fixed an mXSS sanitizer bypass reported by @​icesfont
  • Added new code to track element nesting depth
  • Added new code to enforce a maximum nesting depth of 255
  • Added coverage tests and necessary clobbering protections

Note that this is a security release and should be upgraded to immediately. Please also note that further releases may follow as the underlying vulnerability is apparently new and further variations may be discovered.

DOMPurify 2.5.0

  • Added new setting SAFE_FOR_XML to enable better control over comment scrubbing
  • Updated the LICENSE file to show the accurate year number
  • Updated several build and test dependencies

DOMPurify 2.4.9

  • Fixed another conditional bypass caused by Processing Instructions, thanks @​Ry0taK
  • Fixed the regex for HTML Custom Element detection, thanks @​AlekseySolovey3T

DOMPurify 2.4.8

  • Fixed two possible bypasses when sanitizing an XML document and later using it in HTML, thanks @​Slonser

DOMPurify 2.4.7

DOMPurify 2.4.6

  • Fixed a bypass in jsdom 22 in case the noframes element is permitted, thanks @​leeN

DOMPurify 2.4.5

  • Fixed a problem with improper reset of custom HTML options, thanks @​ammaraskar

DOMPurify 2.4.4

DOMPurify 2.4.3

  • Final release that is compatible with MSIE10 & MSIE 11

... (truncated)

Commits
  • 10c1261 docs: Updated README ever so slightly
  • 1c92880 test: Fixed two more tests for MSIE11 and Edge 18
  • 1401208 test: Fixed more tests for MSIE and Edge 18
  • 2c6410a test: Fixed several new tests for MSIE11 and Edge 18
  • 2c9bca9 test: Changed github config to include MSIE tests for 2.x
  • b188787 chore: Preparing 2.5.4 release
  • 707b3d6 fix: Added a better for for the MSIE iNaN issue
  • 62fe3be test: Attempting to get MSIE 11 back into the browser test array
  • f3a9710 fix: Fixed an issue with MSIE and no support for Number.isNaN
  • e1ddfc7 Merge branch '2.x' of github.com:cure53/DOMPurify into 2.x
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=dompurify&package-manager=npm_and_yarn&previous-version=2.3.1&new-version=2.5.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/shiptest-ss13/Shiptest/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tgui/packages/tgui-panel/package.json | 2 +- tgui/packages/tgui/package.json | 2 +- tgui/yarn.lock | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tgui/packages/tgui-panel/package.json b/tgui/packages/tgui-panel/package.json index d60ccaaa9b17..f652b74df909 100644 --- a/tgui/packages/tgui-panel/package.json +++ b/tgui/packages/tgui-panel/package.json @@ -4,7 +4,7 @@ "version": "4.3.1", "dependencies": { "common": "workspace:*", - "dompurify": "^2.3.1", + "dompurify": "^2.5.4", "inferno": "^7.4.8", "tgui": "workspace:*", "tgui-dev-server": "workspace:*", diff --git a/tgui/packages/tgui/package.json b/tgui/packages/tgui/package.json index 74ef5f346242..11c36177807e 100644 --- a/tgui/packages/tgui/package.json +++ b/tgui/packages/tgui/package.json @@ -7,7 +7,7 @@ "@types/marked": "^4.0.8", "common": "workspace:*", "dateformat": "^4.5.1", - "dompurify": "^2.3.1", + "dompurify": "^2.5.4", "highlight.js": "^11.5.1", "inferno": "^7.4.8", "inferno-vnode-flags": "^7.4.8", diff --git a/tgui/yarn.lock b/tgui/yarn.lock index 6bb17b2fc675..0bbf5add1c91 100644 --- a/tgui/yarn.lock +++ b/tgui/yarn.lock @@ -3910,10 +3910,10 @@ __metadata: languageName: node linkType: hard -"dompurify@npm:^2.3.1": - version: 2.3.1 - resolution: "dompurify@npm:2.3.1" - checksum: 9c93cfaa9d1d0b31aa2e926ebfa0621287a63ebb16277c94ad4aad2bcf3ad12e609e699fc10f2eaf69e4698e29a31dec87a69f3c6725ce3f4c7a69ee93123d0c +"dompurify@npm:^2.5.4": + version: 2.5.7 + resolution: "dompurify@npm:2.5.7" + checksum: 9652139743130b5ebaf5278fadec06d9b3920019b80c205565b9b8d52cd0cea90ff690c1994c5c0da5bc9d57a94dc19236cdf1ccabdc1c6cff7c255e1e597031 languageName: node linkType: hard @@ -8953,7 +8953,7 @@ resolve@^2.0.0-next.3: resolution: "tgui-panel@workspace:packages/tgui-panel" dependencies: common: "workspace:*" - dompurify: ^2.3.1 + dompurify: ^2.5.4 inferno: ^7.4.8 tgui: "workspace:*" tgui-dev-server: "workspace:*" @@ -9037,7 +9037,7 @@ resolve@^2.0.0-next.3: "@types/marked": ^4.0.8 common: "workspace:*" dateformat: ^4.5.1 - dompurify: ^2.3.1 + dompurify: ^2.5.4 highlight.js: ^11.5.1 inferno: ^7.4.8 inferno-vnode-flags: ^7.4.8 From e20f2d8e3b6592ea1a03f392ce05ab37d1373a2e Mon Sep 17 00:00:00 2001 From: meem <75212565+meemofcourse@users.noreply.github.com> Date: Thu, 17 Oct 2024 14:55:24 -0300 Subject: [PATCH 022/274] Atlas-class Light Armored Crusier (#3246) ## About The Pull Request ![imagen](https://github.com/user-attachments/assets/e76c2cc9-9b25-496b-b8ff-a82b3b4debc1) ![atlas2](https://github.com/user-attachments/assets/3ca2427c-e333-4d87-8202-9f81842378b3) The Atlas-class is the first Colonial League ship following the CLIP Rework. The decaling and general decoration of the ship needs a revision, but otherwise, it is intended as a small, overall generalist patrol vessel to the likes of the Vaquero. The 4-Minutemen team, lead by one Sergeant, is subordinate to the First Officer and Captain, who overlook the operation of the ship by the Corpsman and the Engineer. It is staffed by: * 1 Captain * 1 First Officer * 1 Sergeant * 1 Corpsman * 1 Engineer * 4 Minutemen * 1 Deckhand ## Why It's Good For The Game it's the clip ship it uses the colon league content ## Changelog :cl: add: Atlas-class Light Armored Crusier /:cl: --------- Signed-off-by: rye-rice <58402542+rye-rice@users.noreply.github.com> Signed-off-by: meem <75212565+meemofcourse@users.noreply.github.com> Co-authored-by: rye-rice <58402542+rye-rice@users.noreply.github.com> --- _maps/configs/minutemen_atlas.json | 50 + _maps/shuttles/minutemen/minutemen_atlas.dmm | 5988 +++++++++++++++++ .../syndicate/syndicate_gorlex_komodo.dmm | 25 +- .../machinery/porta_turret/portable_turret.dm | 4 + code/game/machinery/suit_storage_unit.dm | 7 + code/game/objects/items/storage/guncases.dm | 6 + .../clothing/outfits/factions/minutemen.dm | 41 +- .../clip_lanchester/ballistics.dm | 8 +- 8 files changed, 6079 insertions(+), 50 deletions(-) create mode 100644 _maps/configs/minutemen_atlas.json create mode 100644 _maps/shuttles/minutemen/minutemen_atlas.dmm diff --git a/_maps/configs/minutemen_atlas.json b/_maps/configs/minutemen_atlas.json new file mode 100644 index 000000000000..32f30caa5b75 --- /dev/null +++ b/_maps/configs/minutemen_atlas.json @@ -0,0 +1,50 @@ + { + "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", + "map_name": "Atlas-class Light Armored Crusier", + "prefix": "CMSV", + "namelists": ["GENERAL", "CLIP MINUTEMEN", "NATURAL_AGGRESSIVE"], + "description": "The Atlas-Class is the designation for some of the oldest serving vessels in the Confederated League's military fleet. Originally the Atlantas-class, the design of the Atlantas was taken by the Colonial Militia just before the beginning of the war with the Old Frontiersmen, playing a pivotal role in multiple skirmishes. It is small in size and crew, well-rounded, and well-suited as an unexpensive hit-and-run vessel. Despite its age, the Atlas continues to serve the Confederated League for peacekeeping missions and driving off small crews of pirates from colonies.", + "tags": [ + "Combat", + "Generalist" + ], + "map_short_name": "Atlas-class", + "faction": "/datum/faction/clip", + "starting_funds": 1000, + "map_path": "_maps/shuttles/minutemen/minutemen_atlas.dmm", + "limit": 1, + "job_slots": { + "Captain": { + "outfit": "/datum/outfit/job/clip/minutemen/captain", + "officer": true, + "slots": 1 + }, + "First Officer": { + "outfit": "/datum/outfit/job/clip/first_officer", + "officer": true, + "slots": 1 + }, + "Sergeant": { + "outfit": "/datum/outfit/job/clip/minutemen/grunt/lead", + "officer": true, + "slots": 1 + }, + "Corpsman": { + "outfit": "/datum/outfit/job/clip/minutemen/doctor", + "slots": 1 + }, + "Engineer": { + "outfit": "/datum/outfit/job/clip/minutemen/engineer", + "slots": 1 + }, + "Minuteman": { + "outfit": "/datum/outfit/job/clip/minutemen/grunt", + "slots": 4 + }, + "Reservist": { + "outfit": "/datum/outfit/job/clip/minutemen/grunt/reserve", + "slots": 1 + } + }, + "enabled": true +} diff --git a/_maps/shuttles/minutemen/minutemen_atlas.dmm b/_maps/shuttles/minutemen/minutemen_atlas.dmm new file mode 100644 index 000000000000..407a8f00bcfe --- /dev/null +++ b/_maps/shuttles/minutemen/minutemen_atlas.dmm @@ -0,0 +1,5988 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 9 + }, +/obj/structure/table/chem, +/obj/item/paper_bin{ + pixel_y = 5; + pixel_x = 6 + }, +/obj/item/pen{ + pixel_y = 5; + pixel_x = 6 + }, +/obj/item/folder/white{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/folder/white{ + pixel_x = -8; + pixel_y = 2 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"af" = ( +/obj/machinery/power/smes/shuttle/precharged, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"am" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"aw" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewtwo) +"aC" = ( +/obj/effect/turf_decal/corner/transparent/blue/diagonal, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/spline/fancy/opaque/white/corner, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23 + }, +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"aI" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/carpet/blue, +/area/ship/crew) +"aS" = ( +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"aX" = ( +/obj/effect/turf_decal/trimline/transparent/blue/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/transparent/blue/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"bF" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer4, +/turf/open/floor/plating/airless, +/area/ship/engineering) +"bK" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"bQ" = ( +/obj/structure/sign/poster/clip/bard{ + pixel_y = 32 + }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security) +"bS" = ( +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"cc" = ( +/turf/open/floor/wood, +/area/ship/crew/crewthree) +"cm" = ( +/obj/effect/turf_decal/trimline/transparent/blue/warning, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"ct" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/transparent/blue/line{ + dir = 1 + }, +/obj/structure/railing, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"cN" = ( +/obj/machinery/power/smes/shuttle/precharged, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/effect/turf_decal/steeldecal/steel_decals_central3{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"cV" = ( +/obj/structure/sign/poster/clip/random{ + pixel_y = -32 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/carpet/nanoweave/blue, +/area/ship/crew/crewtwo) +"cY" = ( +/obj/effect/turf_decal/corner/transparent/blue/border{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/blue/mono, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/curtain/cloth, +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/white, +/area/ship/medical) +"da" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/crewtwo) +"di" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "atlas_dorms" + }, +/turf/open/floor/plating, +/area/ship/crew) +"dw" = ( +/obj/effect/turf_decal/minutemen/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"dM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"dV" = ( +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"ec" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/hallway/central) +"em" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/crew/canteen) +"ev" = ( +/obj/effect/decal/fakelattice, +/obj/structure/railing, +/turf/open/floor/plasteel/elevatorshaft, +/area/ship/hallway/central) +"eB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/grunge{ + name = "Bathroom" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"eH" = ( +/obj/structure/closet/secure_closet{ + icon_state = "cap"; + name = "captain's locker"; + req_access_txt = "20" + }, +/obj/item/storage/pistolcase/cm23, +/obj/item/clothing/suit/armor/clip_capcoat{ + pixel_x = -14 + }, +/obj/item/clothing/under/clip/officer{ + pixel_x = 13 + }, +/obj/item/clothing/under/clip/officer/alt{ + pixel_x = 13 + }, +/obj/item/radio/headset/clip/captain{ + pixel_x = 7 + }, +/obj/item/clothing/head/clip/slouch/officer{ + pixel_y = 13 + }, +/obj/item/storage/backpack/satchel/sec/clip{ + pixel_y = -15 + }, +/obj/item/storage/backpack/security/clip{ + pixel_y = -15 + }, +/turf/open/floor/carpet/blue, +/area/ship/crew/crewthree) +"eJ" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"eK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/canteen) +"eU" = ( +/obj/effect/landmark/start/security_officer, +/obj/structure/chair, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"eW" = ( +/obj/effect/decal/cleanable/confetti, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/engine/hull/interior, +/area/ship/engineering) +"fd" = ( +/obj/structure/railing{ + layer = 3.31 + }, +/obj/effect/turf_decal/box/corners{ + color = "#75A2BB" + }, +/obj/effect/turf_decal/box/corners{ + dir = 8; + color = "#75A2BB" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ + dir = 8 + }, +/turf/open/floor/engine/hull/interior, +/area/ship/engineering) +"fg" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/light_switch{ + pixel_y = 20; + pixel_x = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"fi" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"fj" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/industrial/warning{ + layer = 2.456; + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"fp" = ( +/obj/structure/table, +/obj/machinery/jukebox/boombox, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"fs" = ( +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security) +"fF" = ( +/obj/effect/turf_decal/corner/transparent/blue/mono, +/obj/machinery/light/small/directional/east, +/obj/structure/sink{ + pixel_y = 19; + pixel_x = 7 + }, +/turf/open/floor/plasteel/mono/white, +/area/ship/medical) +"fL" = ( +/obj/effect/turf_decal/corner_steel_grid{ + dir = 5 + }, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 10 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/canteen) +"fM" = ( +/obj/structure/cable{ + icon_state = "6-8" + }, +/obj/structure/cable{ + icon_state = "1-6" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"fR" = ( +/turf/open/floor/carpet/blue, +/area/ship/crew) +"gk" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 5 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/structure/janitorialcart{ + dir = 8 + }, +/obj/item/mop{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/effect/turf_decal/box/corners{ + color = "#75A2BB" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/canteen) +"gu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"gw" = ( +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/medical{ + name = "Medical Bay" + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"gy" = ( +/obj/structure/closet/crate/freezer/blood, +/obj/effect/turf_decal/corner/transparent/blue/mono, +/obj/machinery/light/small/directional/west, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/mono/white, +/area/ship/medical) +"gA" = ( +/obj/machinery/holopad/emergency/command, +/obj/effect/turf_decal/minutemen/middle, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"gE" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/transparent/blue/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"gF" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/effect/turf_decal/minutemen/edge{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"gH" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/industrial/warning{ + layer = 2.456 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"gR" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "atlas_fo" + }, +/turf/open/floor/plating, +/area/ship/crew/crewtwo) +"gT" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/security) +"gU" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"hg" = ( +/obj/effect/turf_decal/trimline/transparent/blue/line, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -23 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"hq" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewthree) +"hL" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"hQ" = ( +/obj/effect/turf_decal/trimline/transparent/blue/warning, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/structure/chair, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"hR" = ( +/obj/structure/table/wood, +/obj/structure/sign/poster/official/moth/smokey{ + pixel_x = -32 + }, +/obj/item/modular_computer/laptop/preset/civilian{ + pixel_y = 5; + pixel_x = 2 + }, +/turf/open/floor/wood, +/area/ship/crew/crewthree) +"ia" = ( +/obj/effect/turf_decal/trimline/transparent/blue/warning{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"is" = ( +/obj/effect/turf_decal/trimline/transparent/blue/warning{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"iw" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewtwo) +"ix" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4; + layer = 2.456 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"iN" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/railing/corner, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "2-9" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/catwalk/over, +/turf/open/floor/plating, +/area/ship/engineering) +"iO" = ( +/obj/structure/table/reinforced, +/obj/machinery/fax/clip{ + pixel_y = 7 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"iQ" = ( +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"iS" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"iW" = ( +/obj/structure/closet/secure_closet{ + icon_state = "cap"; + name = "first officer's locker"; + req_access_txt = "19" + }, +/obj/item/storage/pistolcase/cm23{ + pixel_y = -4 + }, +/obj/item/clothing/head/clip/slouch/officer{ + pixel_y = 13 + }, +/obj/item/radio/headset/clip/captain{ + pixel_x = 7 + }, +/obj/item/clothing/under/clip/officer/alt{ + pixel_x = 13 + }, +/obj/item/clothing/under/clip/officer{ + pixel_x = 13 + }, +/obj/item/clothing/suit/toggle/lawyer/clip/fo{ + pixel_x = -13 + }, +/obj/item/storage/backpack/satchel/sec/clip{ + pixel_y = -15 + }, +/obj/item/storage/backpack/security/clip{ + pixel_y = -15 + }, +/turf/open/floor/carpet/nanoweave/blue, +/area/ship/crew/crewtwo) +"jc" = ( +/obj/machinery/door/window/brigdoor/southright{ + req_access = list(3); + dir = 4 + }, +/obj/effect/turf_decal/trimline/transparent/blue/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"jp" = ( +/obj/structure/sign/number/random, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/crewtwo) +"js" = ( +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"jG" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/transparent/blue/line{ + dir = 1 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"jI" = ( +/obj/structure/chair, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"jL" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"jQ" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_y = 7; + pixel_x = 12 + }, +/obj/item/melee/chainofcommand{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/wood, +/area/ship/crew/crewthree) +"jR" = ( +/obj/effect/landmark/start/station_engineer, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/catwalk/over, +/turf/open/floor/plating, +/area/ship/engineering) +"jY" = ( +/obj/machinery/power/smes/shuttle/precharged, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/ship/engineering) +"jZ" = ( +/obj/item/chair{ + dir = 8; + pixel_y = -10; + pixel_x = 5 + }, +/obj/item/cigbutt{ + pixel_x = -5; + pixel_y = -4 + }, +/obj/item/cigbutt{ + pixel_x = -10; + pixel_y = -7 + }, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"kd" = ( +/obj/structure/table, +/obj/item/storage/box/evidence{ + pixel_y = 19; + pixel_x = -7 + }, +/obj/item/storage/box/flares{ + pixel_y = 18; + pixel_x = 7 + }, +/obj/item/storage/box/zipties{ + pixel_x = 2; + pixel_y = 30 + }, +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/recharger{ + pixel_y = 1 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security) +"kt" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4; + pixel_y = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"kv" = ( +/obj/effect/turf_decal/trimline/transparent/blue/line, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"kE" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/obj/structure/closet/crate/bin{ + pixel_y = 11 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"kG" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/structure/sign/poster/clip/gold{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"kL" = ( +/obj/effect/turf_decal/trimline/transparent/blue/warning, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"kS" = ( +/obj/machinery/door/poddoor{ + id = "atlas_cargo" + }, +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 8; + id = "atlas_holo" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/plating, +/area/ship/cargo) +"kX" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/closet/crate/bin, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"lc" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"le" = ( +/obj/effect/turf_decal/industrial/loading{ + icon_state = "loadingarea_stripes" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"lw" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/landmark/start/head_of_personnel, +/obj/item/radio/intercom/wideband/directional/south, +/obj/machinery/firealarm/directional/west{ + pixel_x = -33; + pixel_y = 9 + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"lA" = ( +/obj/machinery/porta_turret/ship/ballistic/clip, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/cargo) +"lJ" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/light_switch{ + pixel_y = 22; + pixel_x = 11 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew) +"lY" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"mf" = ( +/obj/effect/turf_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/table, +/obj/structure/closet/wall/directional/east, +/obj/item/radio{ + pixel_y = 15; + pixel_x = 7 + }, +/obj/item/radio{ + pixel_y = 9; + pixel_x = 7 + }, +/obj/item/radio{ + pixel_y = 9; + pixel_x = 4 + }, +/obj/item/radio{ + pixel_y = 9 + }, +/obj/item/radio{ + pixel_y = 9; + pixel_x = -4 + }, +/obj/item/radio{ + pixel_y = 9; + pixel_x = -9 + }, +/obj/item/radio{ + pixel_y = 15; + pixel_x = 4 + }, +/obj/item/radio{ + pixel_y = 15 + }, +/obj/item/radio{ + pixel_y = 15; + pixel_x = -4 + }, +/obj/item/radio{ + pixel_y = 15; + pixel_x = -9 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew) +"mh" = ( +/obj/structure/dresser, +/obj/machinery/button/door{ + pixel_y = 23; + id = "atlas_fo"; + name = "private windows button" + }, +/turf/open/floor/carpet/nanoweave/blue, +/area/ship/crew/crewtwo) +"ms" = ( +/obj/machinery/porta_turret/ship/ballistic/clip, +/obj/docking_port/mobile{ + dir = 2; + launch_status = 0; + port_direction = 8; + preferred_direction = 4; + name = "atlas dock" + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering) +"mw" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/ship/engineering) +"mK" = ( +/obj/structure/cable/yellow{ + icon_state = "4-10" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/catwalk/over, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/turf/open/floor/plating, +/area/ship/engineering) +"mN" = ( +/obj/structure/sign/clip, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering) +"mS" = ( +/obj/effect/turf_decal/corner/transparent/blue/diagonal, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"nl" = ( +/obj/effect/landmark/start/security_officer, +/obj/structure/chair, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"nm" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1; + color = "#75A2BB" + }, +/obj/effect/turf_decal/box/corners{ + dir = 8; + color = "#75A2BB" + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"ny" = ( +/obj/item/gun/ballistic/automatic/smg/cm5/no_mag{ + pixel_y = -4; + pixel_x = 6 + }, +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/obj/structure/guncloset, +/obj/item/gun/ballistic/automatic/assault/cm82{ + spawnwithmagazine = 0; + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/gun/ballistic/automatic/pistol/cm23/no_mag{ + pixel_x = -4; + pixel_y = -8 + }, +/obj/item/gun/ballistic/automatic/pistol/cm23/no_mag{ + pixel_x = -4; + pixel_y = -8 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security) +"nO" = ( +/obj/machinery/cryopod{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/orange{ + dir = 6 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew) +"nP" = ( +/obj/machinery/door/airlock/mining{ + name = "Cargo Bay" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"nQ" = ( +/obj/structure/table, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/trimline/transparent/blue/corner, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10 + }, +/obj/machinery/microwave{ + pixel_y = 7 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"nS" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"nU" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4; + color = "#75A2BB" + }, +/obj/effect/turf_decal/box/corners{ + color = "#75A2BB" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"nW" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/landmark/start/security_officer, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"nX" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"nY" = ( +/obj/effect/turf_decal/trimline/transparent/blue/line, +/obj/structure/table, +/obj/item/storage/bag/tray/cafeteria{ + pixel_y = 2 + }, +/obj/item/storage/bag/tray/cafeteria{ + pixel_y = 4 + }, +/obj/item/storage/bag/tray/cafeteria{ + pixel_y = 6 + }, +/obj/item/storage/bag/tray/cafeteria{ + pixel_y = 8 + }, +/obj/item/storage/bag/tray/cafeteria{ + pixel_y = 10 + }, +/obj/item/storage/bag/tray/cafeteria{ + pixel_y = 12 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"oa" = ( +/obj/structure/table, +/obj/item/trash/plate{ + pixel_x = 4; + pixel_y = 1 + }, +/obj/item/trash/plate{ + pixel_x = -2; + pixel_y = 4 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"of" = ( +/obj/machinery/firealarm/directional/north, +/obj/item/paperplane{ + pixel_y = 5 + }, +/obj/structure/fluff/paper/stack{ + name = "stack of papers"; + desc = "Seems like someone needs to work on their aim."; + pixel_x = 4; + pixel_y = -4; + dir = 4 + }, +/obj/structure/closet/crate/bin{ + pixel_y = 12; + pixel_x = 5 + }, +/obj/item/paperplane{ + pixel_x = 9; + pixel_y = 10 + }, +/obj/item/paperplane{ + pixel_x = 2; + pixel_y = 10 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewtwo) +"ov" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1; + color = "#75A2BB" + }, +/obj/effect/turf_decal/box/corners{ + dir = 8; + color = "#75A2BB" + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"oJ" = ( +/obj/effect/turf_decal/trimline/transparent/blue/warning{ + dir = 5; + pixel_y = -1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"oX" = ( +/obj/machinery/door/airlock/grunge{ + dir = 4; + name = "Captain's Quarters"; + req_one_access = list(20) + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewthree) +"oY" = ( +/obj/structure/toilet{ + dir = 1; + pixel_x = 9; + pixel_y = 1 + }, +/obj/machinery/light/small/directional/south, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/shower{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security) +"pi" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/turf/open/floor/plating, +/area/ship/hallway/central) +"pn" = ( +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/obj/structure/rack, +/obj/item/storage/lockbox/medal{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/storage/lockbox/medal/sec{ + pixel_x = -4; + pixel_y = -1 + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"pp" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "atlas_engi_lockdown" + }, +/turf/open/floor/plating, +/area/ship/engineering) +"pq" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"ps" = ( +/turf/template_noop, +/area/template_noop) +"pE" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8; + layer = 2.456 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"qb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 8 + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"qc" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "atlas_bridge" + }, +/turf/open/floor/plating, +/area/ship/bridge) +"qn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 1 + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"qr" = ( +/obj/effect/turf_decal/minutemen/corner{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"qA" = ( +/obj/effect/turf_decal/corner/transparent/blue/diagonal, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"qG" = ( +/obj/machinery/power/terminal, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/effect/turf_decal/industrial, +/obj/structure/sign/warning/nosmoking{ + pixel_x = 32 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/engine/hull/interior, +/area/ship/engineering) +"qP" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/effect/turf_decal/minutemen/edge{ + dir = 8 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/landmark/start/captain, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"qR" = ( +/obj/structure/chair/office, +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 1 + }, +/obj/effect/landmark/start/warden, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security) +"qS" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ + dir = 8 + }, +/turf/open/floor/engine/hull/interior, +/area/ship/engineering) +"rk" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"rr" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"ry" = ( +/obj/machinery/airalarm/directional/south, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewthree) +"rz" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_y = 5 + }, +/obj/item/pen{ + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/ship/crew/crewthree) +"rO" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/closet/cabinet{ + name = "formal uniform cabinet" + }, +/obj/item/clothing/under/clip/formal/with_shirt{ + pixel_x = 8; + pixel_y = 10 + }, +/obj/item/clothing/under/clip/formal/with_shirt{ + pixel_y = 10 + }, +/obj/item/clothing/under/clip/formal/with_shirt{ + pixel_x = -5; + pixel_y = 10 + }, +/obj/item/clothing/under/clip/formal/with_shirt{ + pixel_x = -10; + pixel_y = 9 + }, +/obj/item/clothing/under/clip/formal/with_shirt/alt{ + pixel_x = 8; + pixel_y = -3 + }, +/obj/item/clothing/under/clip/formal/with_shirt/alt{ + pixel_x = 2; + pixel_y = -4 + }, +/obj/item/clothing/under/clip/formal/with_shirt/alt{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/under/clip/formal/with_shirt/alt{ + pixel_x = -10; + pixel_y = -4 + }, +/obj/item/clothing/shoes/laceup{ + pixel_x = 6; + pixel_y = -14 + }, +/obj/item/clothing/shoes/laceup{ + pixel_x = 6; + pixel_y = -14 + }, +/obj/item/clothing/shoes/laceup{ + pixel_x = 6; + pixel_y = -14 + }, +/obj/item/clothing/shoes/laceup{ + pixel_x = 6; + pixel_y = -14 + }, +/obj/item/clothing/shoes/laceup{ + pixel_x = 6; + pixel_y = -14 + }, +/obj/item/clothing/shoes/laceup{ + pixel_x = 6; + pixel_y = -14 + }, +/obj/item/clothing/shoes/laceup{ + pixel_x = 6; + pixel_y = -14 + }, +/obj/item/clothing/shoes/laceup{ + pixel_x = 6; + pixel_y = -14 + }, +/obj/effect/turf_decal/siding/thinplating/dark/end{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewtwo) +"rR" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/light_switch{ + pixel_y = 23 + }, +/obj/structure/closet/firecloset, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"sh" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 20 + }, +/turf/open/floor/plasteel/stairs{ + icon = 'icons/obj/stairs.dmi'; + dir = 1 + }, +/area/ship/engineering) +"si" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"sl" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/machinery/light_switch{ + pixel_y = -20; + dir = 1 + }, +/obj/structure/closet/secure_closet{ + icon_state = "hop"; + name = "sergeant's locker"; + req_access_txt = "19" + }, +/obj/item/storage/guncase/doublebarrel{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/clothing/shoes/combat{ + pixel_y = -8 + }, +/obj/item/clothing/head/clip/slouch{ + pixel_y = 12 + }, +/obj/item/clothing/under/clip/minutemen{ + pixel_x = -5 + }, +/obj/item/clothing/suit/armor/vest/alt{ + pixel_x = 7 + }, +/obj/effect/turf_decal/box{ + color = "#75A2BB" + }, +/obj/item/storage/backpack/security/clip{ + pixel_x = 13; + pixel_y = -13 + }, +/obj/item/storage/box/ammo/a12g_buckshot{ + pixel_x = -7; + pixel_y = -12 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"sA" = ( +/obj/effect/turf_decal/trimline/transparent/blue/filled/corner, +/obj/structure/window/reinforced, +/obj/machinery/suit_storage_unit/minutemen, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/box{ + color = "#75A2BB" + }, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"sB" = ( +/obj/effect/turf_decal/trimline/transparent/blue/warning, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"sD" = ( +/obj/machinery/door/airlock/external{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/layer_manifold/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/engineering) +"sF" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating/dark/end, +/obj/machinery/blackbox_recorder, +/obj/machinery/door/window/brigdoor/northleft, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewthree) +"sI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/machinery/door/airlock/grunge{ + req_access = list(3); + dir = 4; + name = "Armory" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"sL" = ( +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"sP" = ( +/obj/machinery/computer/cryopod/directional/west, +/turf/open/floor/plasteel/tech, +/area/ship/crew) +"tc" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "atlas_cap" + }, +/turf/open/floor/plating, +/area/ship/crew/crewthree) +"tq" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/railing, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"tA" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"tF" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"tP" = ( +/obj/structure/table, +/obj/item/stamp{ + pixel_x = 9; + pixel_y = 13 + }, +/obj/item/clipboard, +/obj/item/stamp/denied{ + pixel_x = 10; + pixel_y = 4 + }, +/obj/item/binoculars{ + pixel_y = 6; + pixel_x = -4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"tW" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/canteen) +"us" = ( +/obj/machinery/airalarm/directional/west, +/turf/open/floor/carpet/blue, +/area/ship/crew) +"ux" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4; + pixel_y = 1 + }, +/obj/effect/turf_decal/minutemen/edge{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"uC" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + id = "atlas_bridge_lockdown"; + dir = 1; + pixel_y = 4; + name = "bridge lockdown"; + pixel_x = -6 + }, +/obj/machinery/button/door{ + id = "atlas_bridge"; + dir = 1; + pixel_x = 7; + pixel_y = 4; + name = "bridge shutters" + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"uG" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewthree) +"uH" = ( +/obj/structure/table, +/obj/item/clipboard{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/fancy/cigarettes{ + pixel_x = -1; + pixel_y = 3 + }, +/obj/item/storage/fancy/cigarettes{ + pixel_x = -5 + }, +/obj/item/clothing/mask/cigarette{ + pixel_x = 7; + pixel_y = 1 + }, +/obj/item/storage/fancy/cigarettes{ + pixel_x = 2; + pixel_y = -1 + }, +/obj/item/clothing/mask/cigarette{ + pixel_x = 1 + }, +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 5 + }, +/obj/machinery/computer/helm/viewscreen/directional/south, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security) +"uO" = ( +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 6 + }, +/obj/structure/table/chem, +/obj/structure/sink/chem, +/obj/item/roller{ + pixel_y = 15; + pixel_x = -12 + }, +/obj/item/roller{ + pixel_y = 6; + pixel_x = -14 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"uQ" = ( +/obj/effect/turf_decal/trimline/transparent/blue/warning{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"uU" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/soda_cans/cola{ + pixel_y = 9; + pixel_x = -5 + }, +/obj/item/trash/can{ + pixel_x = 7; + pixel_y = 9 + }, +/obj/item/reagent_containers/food/drinks/soda_cans/cola{ + pixel_y = 4; + pixel_x = 1 + }, +/obj/item/storage/fancy/donut_box{ + pixel_x = -13; + pixel_y = -2 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"uX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewthree) +"uY" = ( +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/mono/dark, +/area/ship/hallway/central) +"vd" = ( +/obj/structure/catwalk/over, +/obj/machinery/airalarm/directional/east, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plating, +/area/ship/engineering) +"vo" = ( +/obj/structure/railing, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 9; + pixel_x = 2 + }, +/obj/item/storage/toolbox/electrical{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/machinery/light/directional/west, +/obj/machinery/cell_charger, +/obj/structure/table, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"vw" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/catwalk/over, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-9" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ship/engineering) +"vy" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_y = 5; + pixel_x = -13 + }, +/obj/item/pen{ + pixel_y = 5; + pixel_x = -13 + }, +/obj/item/kitchen/fork/plastic{ + pixel_x = 4; + pixel_y = 1 + }, +/obj/item/kitchen/fork/plastic{ + pixel_x = 6; + pixel_y = 3 + }, +/obj/item/kitchen/fork/plastic{ + pixel_x = 8; + pixel_y = 1 + }, +/obj/item/kitchen/fork/plastic{ + pixel_x = 10; + pixel_y = 2 + }, +/obj/item/melee/knife/plastic, +/obj/item/melee/knife/plastic{ + pixel_x = -3; + pixel_y = 1 + }, +/obj/item/melee/knife/plastic{ + pixel_x = 2; + pixel_y = 1 + }, +/obj/item/melee/knife/plastic{ + pixel_x = -1; + pixel_y = 2 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"vS" = ( +/obj/machinery/porta_turret/ship/ballistic/clip, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering) +"vT" = ( +/obj/structure/dresser{ + dir = 1 + }, +/turf/open/floor/carpet/blue, +/area/ship/crew) +"vW" = ( +/obj/structure/sign/poster/clip/random{ + pixel_y = 32 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/carpet/blue, +/area/ship/crew/crewthree) +"vZ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "atlas_engi_lockdown" + }, +/turf/open/floor/plating, +/area/ship/engineering) +"wc" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-6" + }, +/turf/open/floor/plating, +/area/ship/engineering) +"wd" = ( +/obj/structure/sign/warning/nosmoking/circle{ + pixel_x = -28 + }, +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"we" = ( +/obj/effect/turf_decal/corner/transparent/blue/diagonal, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/spline/fancy/opaque/white, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/closet/secure_closet/wall/directional/north{ + icon_door = "med_wall"; + req_access = list(5) + }, +/obj/item/storage/belt/medical/webbing/clip/prefilled{ + pixel_x = -6; + pixel_y = -7 + }, +/obj/item/clothing/gloves/color/latex/nitrile/clip{ + pixel_x = -11; + pixel_y = 5 + }, +/obj/item/clothing/under/clip/medic{ + pixel_x = 9; + pixel_y = -4 + }, +/obj/item/clothing/head/clip/corpsman{ + pixel_y = 8; + pixel_x = 9 + }, +/obj/item/defibrillator/loaded{ + pixel_y = 26 + }, +/obj/item/storage/belt/medical/surgery{ + pixel_x = -7; + pixel_y = -8 + }, +/obj/item/storage/backpack/satchel/med{ + pixel_x = 11; + pixel_y = -14 + }, +/obj/item/storage/backpack/messenger/med{ + pixel_x = 10; + pixel_y = -10 + }, +/obj/item/storage/backpack/medic{ + pixel_x = 9; + pixel_y = -14 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"wh" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"wi" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/techfloor/orange, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew) +"wk" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/trimline/transparent/blue/filled/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"wu" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"wy" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/transparent/blue/warning{ + dir = 6 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"wJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"wU" = ( +/obj/machinery/power/smes/engineering, +/obj/effect/turf_decal/industrial, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/engine/hull/interior, +/area/ship/engineering) +"wW" = ( +/obj/effect/turf_decal/trimline/transparent/blue/warning, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/structure/chair, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"xi" = ( +/obj/effect/decal/fakelattice{ + icon_state = "lattice-203" + }, +/obj/structure/lattice/catwalk, +/turf/open/floor/plating, +/area/ship/external/dark) +"xz" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4; + color = "#75A2BB" + }, +/obj/effect/turf_decal/box/corners{ + color = "#75A2BB" + }, +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"xU" = ( +/obj/machinery/light/directional/east, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/obj/effect/turf_decal/corner/transparent/blue/diagonal, +/obj/machinery/iv_drip, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"yi" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"yn" = ( +/obj/structure/salvageable/computer{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners{ + color = "#75A2BB" + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"yo" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security) +"yx" = ( +/obj/structure/bed/double, +/obj/item/bedsheet/double/grey, +/turf/open/floor/carpet/nanoweave/blue, +/area/ship/crew/crewtwo) +"yB" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4; + layer = 2.456 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"yC" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/holopad/emergency/counselor, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewthree) +"yI" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1; + color = "#75A2BB" + }, +/obj/effect/turf_decal/box/corners{ + dir = 8; + color = "#75A2BB" + }, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 6 + }, +/obj/structure/punching_bag, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -20 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"yL" = ( +/obj/machinery/power/smes/shuttle/precharged, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"yO" = ( +/obj/machinery/computer/helm/viewscreen/directional/north, +/turf/open/floor/carpet/blue, +/area/ship/crew/crewthree) +"yR" = ( +/obj/effect/turf_decal/siding/white, +/obj/effect/turf_decal/corner/transparent/blue/diagonal, +/obj/structure/bed/roller, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"yT" = ( +/obj/machinery/door/firedoor, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/plasteel/mono/dark, +/area/ship/hallway/central) +"yZ" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/closet/crate, +/obj/item/clothing/under/clip/minutemen{ + pixel_x = -8; + pixel_y = 11 + }, +/obj/item/clothing/under/clip/minutemen{ + pixel_x = -1; + pixel_y = 9 + }, +/obj/item/clothing/under/clip/minutemen{ + pixel_x = 6; + pixel_y = 11 + }, +/obj/item/clothing/under/clip/minutemen{ + pixel_x = 12; + pixel_y = 9 + }, +/obj/item/clothing/shoes/combat{ + pixel_x = -11; + pixel_y = -6 + }, +/obj/item/clothing/shoes/combat{ + pixel_x = -6; + pixel_y = -7 + }, +/obj/item/clothing/shoes/combat{ + pixel_y = -6 + }, +/obj/item/clothing/shoes/combat{ + pixel_x = 7; + pixel_y = -8 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security) +"zc" = ( +/obj/structure/closet/crate/freezer, +/obj/item/tank/internals/anesthetic{ + pixel_x = 12 + }, +/obj/item/tank/internals/anesthetic{ + pixel_x = 12 + }, +/obj/item/clothing/mask/breath/medical{ + pixel_y = -12; + pixel_x = 5 + }, +/obj/item/clothing/mask/breath/medical{ + pixel_y = -12; + pixel_x = 6 + }, +/obj/effect/turf_decal/corner/transparent/blue/mono, +/obj/item/storage/firstaid/regular{ + pixel_y = 8; + pixel_x = -8 + }, +/obj/item/storage/box/gloves{ + pixel_x = -10; + pixel_y = 2 + }, +/obj/item/storage/box/masks{ + pixel_y = -5; + pixel_x = -12 + }, +/turf/open/floor/plasteel/mono/white, +/area/ship/medical) +"zf" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/layer2{ + dir = 8 + }, +/obj/machinery/advanced_airlock_controller{ + pixel_y = 26 + }, +/obj/structure/closet/emcloset/wall/directional/south, +/obj/item/clothing/suit/space/fragile{ + pixel_x = 6; + pixel_y = -14 + }, +/obj/item/clothing/suit/space/fragile{ + pixel_x = 11; + pixel_y = -17 + }, +/obj/item/clothing/head/helmet/space/fragile{ + pixel_x = -8; + pixel_y = -9 + }, +/obj/item/clothing/head/helmet/space/fragile{ + pixel_x = -2; + pixel_y = -14 + }, +/turf/open/floor/plasteel/dark, +/area/ship/engineering) +"zl" = ( +/obj/structure/closet/crate/trashcart/laundry, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 10 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4; + color = "#75A2BB" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/canteen) +"zq" = ( +/obj/machinery/door/poddoor{ + id = "atlas_cargo" + }, +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 4; + id = "atlas_holo" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/plating, +/area/ship/cargo) +"zt" = ( +/obj/effect/turf_decal/trimline/transparent/blue/warning, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"zx" = ( +/obj/effect/turf_decal/corner/transparent/blue/diagonal, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/spline/fancy/opaque/white/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 5 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"zE" = ( +/obj/structure/bed{ + dir = 1 + }, +/obj/item/bedsheet/blue{ + dir = 1 + }, +/obj/structure/curtain/cloth, +/obj/machinery/button/door{ + id = "atlas_dorms"; + name = "private windows button"; + pixel_x = -23; + dir = 4 + }, +/turf/open/floor/carpet/blue, +/area/ship/crew) +"zQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/structure/sign/poster/clip/maxin{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"Aa" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/effect/turf_decal/trimline/transparent/blue/filled/arrow_ccw{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"An" = ( +/obj/structure/bed{ + dir = 1 + }, +/obj/item/bedsheet/blue{ + dir = 1 + }, +/obj/structure/curtain/cloth, +/obj/machinery/light/directional/west, +/turf/open/floor/carpet/blue, +/area/ship/crew) +"Av" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp{ + pixel_y = 6; + pixel_x = 1 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"Ay" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/item/paperplane{ + pixel_x = 11; + pixel_y = 9 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewtwo) +"AH" = ( +/obj/effect/turf_decal/corner/transparent/blue/diagonal, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"AP" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"Bm" = ( +/obj/machinery/power/shuttle/engine/electric, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "atlas_engi_lockdown" + }, +/turf/open/floor/plating, +/area/ship/external/dark) +"Bx" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 9 + }, +/obj/structure/reagent_dispensers/peppertank{ + pixel_y = -28 + }, +/obj/structure/bed/dogbed{ + name = "Mushroom's bed"; + desc = "A comfy-looking dog bed. Despite the name, the owner is a mothroach." + }, +/mob/living/simple_animal/pet/mothroach{ + name = "Mushroom"; + desc = "Master Sergeant Mushroom is assigned to overwatch C-MM armory officers. Don't let her eat the armor."; + gender = "female" + }, +/obj/item/storage/fancy/egg_box{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security) +"BH" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"BI" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"BL" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/railing{ + dir = 1; + layer = 2.89 + }, +/obj/effect/turf_decal/industrial, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/engine/hull/interior, +/area/ship/engineering) +"BW" = ( +/obj/effect/turf_decal/trimline/transparent/blue/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"Cc" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1; + color = "#75A2BB" + }, +/obj/effect/turf_decal/box/corners{ + dir = 4; + color = "#75A2BB" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/tank/air{ + dir = 8; + piping_layer = 2 + }, +/turf/open/floor/engine/hull/interior, +/area/ship/engineering) +"Cm" = ( +/obj/structure/sign/clip, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/crewthree) +"Cn" = ( +/obj/item/cigbutt{ + anchored = 1; + color = "#808080"; + layer = 2; + pixel_x = -4; + pixel_y = 8 + }, +/obj/effect/decal/fakelattice, +/obj/structure/railing, +/turf/open/floor/plasteel/elevatorshaft, +/area/ship/hallway/central) +"Cq" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black/corner, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/transparent/blue/filled/arrow_ccw{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"Cr" = ( +/obj/machinery/power/port_gen/pacman{ + anchored = 1 + }, +/obj/item/stack/sheet/mineral/plasma/twenty, +/obj/structure/cable/yellow{ + icon_state = "0-9" + }, +/turf/open/floor/engine/hull/interior, +/area/ship/engineering) +"CM" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_y = 3 + }, +/obj/item/pen{ + pixel_y = 3 + }, +/obj/item/reagent_containers/food/drinks/coffee{ + pixel_x = 16; + pixel_y = 11 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"CO" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/medical) +"CX" = ( +/obj/machinery/light/directional/west, +/obj/machinery/button/door{ + pixel_y = -23; + id = "atlas_med"; + dir = 1; + name = "medbay shutters" + }, +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/obj/effect/turf_decal/corner/transparent/blue/diagonal, +/obj/machinery/iv_drip, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"CZ" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 8 + }, +/obj/structure/railing, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"Da" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"Do" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"Dq" = ( +/obj/effect/turf_decal/corner/transparent/blue/diagonal, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/spline/fancy/opaque/white, +/obj/structure/mirror{ + pixel_y = 28 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"DL" = ( +/obj/machinery/photocopier, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"Ea" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"Ej" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"Eo" = ( +/obj/structure/railing{ + dir = 1; + layer = 2.89 + }, +/obj/machinery/autolathe, +/obj/machinery/light/directional/west, +/obj/item/stack/sheet/glass/twenty, +/obj/item/stack/sheet/metal/twenty, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Es" = ( +/obj/structure/curtain/cloth/grey, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"Ey" = ( +/obj/effect/decal/fakelattice{ + icon_state = "lattice-23" + }, +/obj/structure/lattice/catwalk, +/turf/open/floor/plating, +/area/ship/external/dark) +"EB" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/carpet/nanoweave/blue, +/area/ship/crew/crewtwo) +"ED" = ( +/obj/item/kirbyplants{ + icon_state = "plant-02"; + pixel_x = -7 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/corner_steel_grid/full, +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23 + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"EH" = ( +/obj/structure/filingcabinet/double/grey{ + dir = 1; + pixel_y = -3 + }, +/obj/item/folder, +/obj/item/folder/blue, +/obj/item/folder/red, +/obj/item/folder/white, +/obj/item/folder/yellow, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"EJ" = ( +/obj/item/kirbyplants{ + icon_state = "plant-02" + }, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"EP" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/trimline/transparent/blue/filled/arrow_ccw{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"ES" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"EZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/turf/open/floor/plasteel/stairs{ + icon = 'icons/obj/stairs.dmi'; + dir = 4 + }, +/area/ship/bridge) +"Fu" = ( +/obj/effect/decal/fakelattice{ + icon_state = "lattice-21" + }, +/obj/structure/lattice/catwalk, +/turf/open/floor/plating, +/area/ship/external/dark) +"Fv" = ( +/obj/effect/turf_decal/trimline/transparent/blue/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"FF" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"FI" = ( +/obj/structure/table, +/obj/item/desk_flag/trans{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/toy/cards/deck{ + pixel_x = 6; + pixel_y = 9 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"FN" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/crewthree) +"FO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/stairs{ + icon = 'icons/obj/stairs.dmi'; + dir = 4 + }, +/area/ship/bridge) +"FQ" = ( +/obj/effect/turf_decal/corner/transparent/blue/diagonal, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 4 + }, +/obj/effect/landmark/start/medical_doctor, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"Gi" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = -12; + pixel_y = 6 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"Gj" = ( +/obj/effect/turf_decal/corner_steel_grid{ + dir = 5 + }, +/obj/effect/turf_decal/box/corners{ + dir = 8; + color = "#75A2BB" + }, +/obj/structure/table, +/obj/structure/bedsheetbin, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/canteen) +"Gt" = ( +/obj/structure/bed/double, +/obj/item/bedsheet/double/blue, +/turf/open/floor/carpet/blue, +/area/ship/crew/crewthree) +"GU" = ( +/obj/machinery/porta_turret/ship/ballistic/clip, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/crewtwo) +"Hf" = ( +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"Hg" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"Hh" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/machinery/button/door{ + id = "atlas_engi_lockdown"; + dir = 4; + pixel_y = 2; + name = "engineering shutters"; + pixel_x = -24 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Hl" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/light/directional/west, +/turf/open/floor/engine/hull/interior, +/area/ship/engineering) +"Hu" = ( +/obj/machinery/door/poddoor{ + id = "atlas_cargo" + }, +/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/plating, +/area/ship/cargo) +"HW" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew) +"HX" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/hallway/central) +"Ic" = ( +/obj/machinery/turretid, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/bridge) +"Ig" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/structure/railing, +/obj/effect/turf_decal/trimline/transparent/blue/corner{ + dir = 1 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"Ir" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/effect/turf_decal/minutemen/edge, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"IK" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4; + color = "#75A2BB" + }, +/obj/effect/turf_decal/box/corners{ + color = "#75A2BB" + }, +/obj/structure/closet/crate, +/obj/item/storage/box/emptysandbags, +/obj/item/storage/box/emptysandbags, +/obj/item/shovel, +/obj/item/shovel, +/obj/item/pickaxe, +/obj/item/pickaxe, +/obj/item/storage/bag/ore, +/obj/item/storage/bag/ore, +/obj/machinery/light/directional/east, +/obj/structure/crate_shelf, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"IP" = ( +/obj/structure/table/wood, +/obj/item/melee/knife/letter_opener{ + pixel_x = 9; + pixel_y = -6 + }, +/obj/item/folder/biscuit/unsealed{ + pixel_x = -4 + }, +/obj/item/papercutter{ + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"IR" = ( +/obj/item/kirbyplants{ + icon_state = "plant-02" + }, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"IY" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"Jb" = ( +/obj/machinery/door/airlock/command{ + dir = 4; + name = "Bridge"; + req_one_access = list(19, 3) + }, +/obj/effect/turf_decal/corner_techfloor_gray{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "atlas_bridge_lockdown" + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"Je" = ( +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"JL" = ( +/obj/effect/turf_decal/corner/transparent/blue/diagonal, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 1 + }, +/obj/machinery/holopad/emergency/medical, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"JR" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-5" + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"JU" = ( +/obj/effect/turf_decal/trimline/transparent/blue/warning{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/structure/chair{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"JV" = ( +/obj/item/kirbyplants{ + icon_state = "plant-02"; + pixel_y = 16; + pixel_x = -6 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/corner_steel_grid/full{ + dir = 8 + }, +/obj/structure/railing, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23 + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"Kc" = ( +/obj/effect/decal/fakelattice{ + icon_state = "lattice-203" + }, +/obj/structure/lattice/catwalk, +/obj/item/toy/plush/moth/royal{ + pixel_x = 9; + pixel_y = 8; + name = "Specialist Aloe"; + desc = "An adorable mothperson plushy. Judging by a tag attached just beneath its left leg, it is part of the Colonial League's armed forces." + }, +/obj/item/clothing/head/clip{ + pixel_x = 9; + pixel_y = 18 + }, +/obj/item/reagent_containers/food/drinks/coffee{ + pixel_x = 5; + list_reagents = list(/datum/reagent/consumable/ice = 30) + }, +/turf/open/floor/plating, +/area/ship/external/dark) +"Kf" = ( +/obj/structure/chair/plastic{ + dir = 8; + pixel_y = 9; + pixel_x = 7 + }, +/obj/effect/decal/cleanable/confetti, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/machinery/atmospherics/components/binary/pump/layer2{ + dir = 8 + }, +/obj/structure/catwalk/over, +/turf/open/floor/plating, +/area/ship/engineering) +"Km" = ( +/obj/machinery/computer/helm/viewscreen/directional/south, +/turf/open/floor/carpet/nanoweave/blue, +/area/ship/crew/crewtwo) +"KB" = ( +/obj/effect/turf_decal/trimline/transparent/blue/line, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"Ld" = ( +/obj/item/caution{ + pixel_x = 6 + }, +/obj/effect/decal/cleanable/oil/slippery{ + icon_state = "floor5"; + pixel_x = -12; + pixel_y = 1 + }, +/obj/item/wirecutters{ + pixel_x = -5; + pixel_y = -15 + }, +/obj/item/crowbar/large{ + pixel_y = 14 + }, +/turf/open/floor/plating, +/area/ship/cargo) +"Ln" = ( +/obj/effect/turf_decal/trimline/transparent/blue/warning{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"Lp" = ( +/obj/structure/table/reinforced, +/obj/item/book/manual/wiki/command{ + pixel_y = 6; + pixel_x = -3 + }, +/obj/item/book/manual/wiki/piloting{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"Lw" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/stand_clear/white, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/button/door{ + id = "atlas_cargo"; + dir = 4; + pixel_x = -23; + pixel_y = 6; + name = "cargo bay control" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/button/shieldwallgen{ + dir = 4; + pixel_y = -4; + pixel_x = -20; + id = "atlas_holo" + }, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"LE" = ( +/obj/structure/grille, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"LH" = ( +/obj/structure/filingcabinet/double/grey{ + pixel_y = 14 + }, +/obj/item/folder, +/obj/item/folder/blue, +/obj/item/folder/red, +/obj/item/folder/white, +/obj/item/folder/yellow, +/obj/item/reagent_containers/food/snacks/grown/tobacco{ + dry = 1 + }, +/obj/item/reagent_containers/food/snacks/grown/tobacco{ + dry = 1 + }, +/obj/item/reagent_containers/food/snacks/grown/tobacco{ + dry = 1 + }, +/obj/item/reagent_containers/food/snacks/grown/tobacco{ + dry = 1 + }, +/turf/open/floor/wood, +/area/ship/crew/crewthree) +"LM" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/bridge) +"Ml" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/stand_clear/white, +/obj/machinery/light/directional/east, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"Mq" = ( +/obj/structure/closet/crate/bin{ + pixel_y = 11; + pixel_x = -10 + }, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"Mu" = ( +/obj/effect/landmark/start/station_engineer, +/obj/structure/cable/yellow{ + icon_state = "2-5" + }, +/obj/structure/cable/yellow{ + icon_state = "5-6" + }, +/obj/structure/catwalk/over, +/turf/open/floor/plating, +/area/ship/engineering) +"My" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"MC" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"MH" = ( +/obj/machinery/power/port_gen/pacman{ + anchored = 1 + }, +/obj/structure/cable/yellow, +/turf/open/floor/engine/hull/interior, +/area/ship/engineering) +"MO" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"MQ" = ( +/obj/structure/chair/comfy/beige, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"Ni" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewtwo) +"No" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/hatch/blue, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"NE" = ( +/obj/structure/closet/emcloset/anchored, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 6 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1; + color = "#75A2BB" + }, +/obj/effect/turf_decal/box/corners{ + dir = 8; + color = "#75A2BB" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"NY" = ( +/obj/structure/chair/comfy/blue{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ship/crew/crewthree) +"Ob" = ( +/obj/structure/sign/clip, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/crewtwo) +"Oj" = ( +/obj/structure/sign/number/random, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/crewthree) +"Ot" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"OA" = ( +/obj/structure/catwalk/over, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering) +"OQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"OV" = ( +/obj/effect/turf_decal/rechargefloor, +/obj/item/stack/ore/salvage/scraptitanium{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/stack/ore/salvage/scrapsilver{ + pixel_x = 4; + pixel_y = -8 + }, +/obj/structure/mecha_wreckage/ripley/clip, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/box/corners{ + dir = 1; + color = "#75A2BB" + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"OW" = ( +/obj/effect/decal/fakelattice, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/plasteel/elevatorshaft, +/area/ship/hallway/central) +"Pd" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4; + pixel_y = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"Pi" = ( +/obj/machinery/suit_storage_unit/minutemen, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/box{ + color = "#75A2BB" + }, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"Pk" = ( +/obj/effect/turf_decal/minutemen/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"Pn" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"Py" = ( +/obj/structure/closet/secure_closet/engineering_personal{ + populate = 0 + }, +/obj/effect/decal/cleanable/confetti, +/obj/item/clothing/glasses/meson{ + pixel_x = -1; + pixel_y = -8 + }, +/obj/item/storage/belt/utility/full, +/obj/item/storage/backpack/satchel/eng{ + pixel_y = 10 + }, +/obj/item/clothing/under/clip{ + pixel_x = 7 + }, +/obj/item/clothing/suit/hazardvest{ + pixel_x = -8; + pixel_y = 3 + }, +/obj/item/clothing/suit/space/syndicate/blue, +/obj/item/clothing/head/helmet/space/syndicate/blue, +/turf/open/floor/engine/hull/interior, +/area/ship/engineering) +"PD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/toilet{ + dir = 8; + pixel_x = 4 + }, +/obj/structure/curtain, +/obj/machinery/shower{ + dir = 1; + pixel_x = -6 + }, +/obj/effect/turf_decal/floordetail/pryhole, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plastic, +/area/ship/crew) +"PG" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/carpet/blue, +/area/ship/crew/crewthree) +"PK" = ( +/obj/effect/turf_decal/trimline/transparent/blue/line, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/structure/closet/secure_closet/freezer/fridge/open{ + populate = 0 + }, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"PT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/suit_storage_unit/minutemen, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/box{ + color = "#75A2BB" + }, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"PU" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering) +"PV" = ( +/obj/machinery/door/airlock/grunge{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"PX" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plating, +/area/ship/engineering) +"Qb" = ( +/obj/machinery/recharge_station, +/turf/open/floor/carpet/blue, +/area/ship/crew) +"Qg" = ( +/obj/item/cigbutt{ + pixel_x = -8; + pixel_y = 11 + }, +/obj/structure/catwalk/over, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering) +"Qj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sink{ + dir = 4; + pixel_x = -12; + pixel_y = 6 + }, +/obj/item/lipstick{ + pixel_x = -11 + }, +/obj/item/lipstick/black{ + pixel_x = -11 + }, +/obj/item/lipstick/jade{ + pixel_x = -11 + }, +/obj/item/lipstick/purple{ + pixel_x = -11 + }, +/obj/structure/closet/wall/white{ + dir = 4; + pixel_x = 28; + pixel_y = 6 + }, +/obj/structure/mirror{ + pixel_x = -28; + pixel_y = 7 + }, +/obj/item/dyespray{ + pixel_x = 10 + }, +/obj/item/clothing/head/wig/random{ + pixel_x = 11 + }, +/turf/open/floor/plastic, +/area/ship/crew) +"Qt" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"Qu" = ( +/obj/machinery/door/airlock/external{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/engineering) +"Qw" = ( +/obj/effect/turf_decal/minutemen/corner, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"Qx" = ( +/obj/structure/bed/pod{ + dir = 1 + }, +/obj/item/bedsheet/red{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"Qz" = ( +/obj/structure/sign/clip, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/cargo) +"QC" = ( +/obj/effect/turf_decal/trimline/transparent/blue/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"QG" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/hallway/central) +"QM" = ( +/obj/structure/table/reinforced, +/obj/item/radio/weather_monitor{ + pixel_x = -6; + pixel_y = 20 + }, +/obj/item/radio/intercom/table{ + dir = 4; + pixel_y = 3 + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"QS" = ( +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"Rf" = ( +/obj/machinery/door/airlock/grunge{ + name = "Dormitories" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"Rt" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewtwo) +"Rv" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "4-10" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Rz" = ( +/obj/structure/rack, +/obj/effect/turf_decal/trimline/transparent/blue/filled, +/obj/item/clothing/suit/armor/vest/bulletproof{ + pixel_y = 13; + pixel_x = 7 + }, +/obj/item/clothing/suit/armor/vest/bulletproof{ + pixel_y = 10; + pixel_x = 6 + }, +/obj/item/clothing/suit/armor/vest/bulletproof{ + pixel_x = 7; + pixel_y = 5 + }, +/obj/item/clothing/suit/armor/vest/bulletproof{ + pixel_x = 8; + pixel_y = 1 + }, +/obj/item/clothing/head/helmet/bulletproof/x11/clip{ + pixel_y = 12; + pixel_x = -9 + }, +/obj/item/clothing/head/helmet/bulletproof/x11/clip{ + pixel_y = 10; + pixel_x = -6 + }, +/obj/item/clothing/head/helmet/bulletproof/x11/clip{ + pixel_y = 5; + pixel_x = -10 + }, +/obj/item/clothing/head/helmet/bulletproof/x11/clip{ + pixel_y = 1; + pixel_x = -7 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"RL" = ( +/obj/structure/table/wood, +/obj/item/storage/fancy/cigarettes/cigars{ + pixel_y = 6; + pixel_x = 2 + }, +/obj/item/storage/fancy/cigarettes/cigars{ + pixel_y = 9; + pixel_x = 1 + }, +/obj/item/clothing/mask/cigarette/pipe{ + pixel_x = 10 + }, +/obj/item/lighter{ + pixel_x = -9 + }, +/turf/open/floor/wood, +/area/ship/crew/crewthree) +"RM" = ( +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"RQ" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"RT" = ( +/obj/machinery/porta_turret/ship/ballistic/clip, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew) +"RU" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/computer/monitor{ + dir = 8; + icon_state = "computer-left" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"Sb" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"Sp" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "atlas_cap" + }, +/turf/open/floor/plating, +/area/ship/crew/crewthree) +"Ss" = ( +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"Sw" = ( +/obj/structure/rack, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/transparent/blue/filled, +/obj/item/storage/box/ammo/c10mm{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/item/storage/box/ammo/c9mm{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/storage/box/ammo/a556_42{ + pixel_x = 1; + pixel_y = -6 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"Sz" = ( +/obj/effect/turf_decal/trimline/transparent/blue/warning{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"SB" = ( +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/security) +"SI" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"SK" = ( +/obj/structure/sign/clip, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/medical) +"ST" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/southright{ + req_access = list(3) + }, +/obj/item/radio/intercom/table{ + pixel_y = -3; + pixel_x = 5 + }, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"SW" = ( +/obj/structure/table/wood, +/obj/item/modular_computer/laptop/preset/civilian{ + pixel_y = 3 + }, +/turf/open/floor/wood, +/area/ship/crew/crewtwo) +"Ti" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/engine/hull/interior, +/area/ship/engineering) +"Tx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewtwo) +"Ty" = ( +/obj/effect/turf_decal/trimline/transparent/blue/warning{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"TA" = ( +/obj/item/emptysandbag{ + pixel_x = -10; + pixel_y = -8 + }, +/obj/item/emptysandbag{ + pixel_x = 4; + pixel_y = -8 + }, +/obj/item/emptysandbag{ + pixel_x = -3; + pixel_y = -6 + }, +/obj/item/emptysandbag{ + pixel_x = -3; + pixel_y = -6 + }, +/obj/item/emptysandbag{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/item/emptysandbag{ + pixel_x = -10; + pixel_y = -5 + }, +/obj/item/emptysandbag{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/emptysandbag{ + pixel_x = -10 + }, +/obj/item/shovel{ + pixel_x = -18; + pixel_y = -3 + }, +/obj/structure/table, +/turf/open/floor/engine/hull/interior, +/area/ship/engineering) +"TE" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/cargo) +"TK" = ( +/obj/structure/dresser{ + dir = 1 + }, +/obj/machinery/button/door{ + pixel_y = -23; + id = "atlas_cap"; + dir = 1; + name = "private windows button" + }, +/turf/open/floor/carpet/blue, +/area/ship/crew/crewthree) +"TT" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"Uh" = ( +/obj/structure/rack, +/obj/effect/turf_decal/trimline/transparent/blue/filled, +/obj/item/clothing/head/clip{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/item/clothing/head/clip{ + pixel_x = -9; + pixel_y = 3 + }, +/obj/item/clothing/head/clip{ + pixel_x = -9; + pixel_y = -3 + }, +/obj/item/clothing/head/clip{ + pixel_x = -7; + pixel_y = -8 + }, +/obj/item/storage/belt/military/clip{ + pixel_y = 14; + pixel_x = 5 + }, +/obj/item/storage/belt/military/clip{ + pixel_y = 11; + pixel_x = 7 + }, +/obj/item/storage/belt/military/clip{ + pixel_y = 2; + pixel_x = 4 + }, +/obj/item/storage/belt/military/clip{ + pixel_y = -2; + pixel_x = 7 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"Um" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/trimline/transparent/blue/filled/corner{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/machinery/suit_storage_unit/minutemen, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/box{ + color = "#75A2BB" + }, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"UC" = ( +/obj/effect/turf_decal/corner/transparent/blue/diagonal, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"UG" = ( +/obj/structure/table/optable, +/obj/effect/turf_decal/corner/transparent/blue/mono, +/obj/item/clothing/suit/apron/surgical{ + pixel_x = -5; + pixel_y = -3 + }, +/obj/item/book/manual/wiki/surgery{ + pixel_x = 6; + pixel_y = 1 + }, +/obj/structure/sign/poster/clip/serene{ + pixel_x = 32 + }, +/obj/machinery/defibrillator_mount{ + pixel_y = -28 + }, +/turf/open/floor/plasteel/mono/white, +/area/ship/medical) +"UK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/carpet/blue, +/area/ship/crew) +"UP" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4; + color = "#75A2BB" + }, +/obj/effect/turf_decal/box/corners{ + color = "#75A2BB" + }, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/obj/structure/weightmachine/weightlifter, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/pod/dark, +/area/ship/cargo) +"US" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/computer/cargo{ + dir = 8; + icon_state = "computer-right" + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"UY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/structure/catwalk/over, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ship/engineering) +"Vk" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_y = 5; + pixel_x = 16 + }, +/obj/item/pen{ + pixel_y = 5; + pixel_x = 16 + }, +/obj/machinery/door/window/brigdoor/southleft{ + req_access = list(3) + }, +/obj/item/flashlight/lamp{ + pixel_x = -8; + pixel_y = 13 + }, +/obj/item/stamp{ + pixel_x = -9 + }, +/obj/item/stamp/denied, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"Vl" = ( +/obj/effect/turf_decal/corner/transparent/blue/border{ + dir = 8 + }, +/obj/structure/curtain, +/obj/effect/turf_decal/corner/transparent/blue/mono, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/white, +/area/ship/medical) +"Vo" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "atlas_med" + }, +/turf/open/floor/plating, +/area/ship/medical) +"Vq" = ( +/obj/structure/rack, +/obj/item/reagent_containers/spray/pepper{ + pixel_y = 12; + pixel_x = 10 + }, +/obj/item/reagent_containers/spray/pepper{ + pixel_y = 13; + pixel_x = 4 + }, +/obj/item/reagent_containers/spray/pepper{ + pixel_y = 10; + pixel_x = 6 + }, +/obj/item/reagent_containers/spray/pepper{ + pixel_y = 8; + pixel_x = 9 + }, +/obj/effect/turf_decal/trimline/transparent/blue/filled, +/obj/item/ammo_box/magazine/cm5_9mm{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/ammo_box/magazine/cm5_9mm{ + pixel_x = -1; + pixel_y = -5 + }, +/obj/item/ammo_box/magazine/p16{ + pixel_x = -9 + }, +/obj/item/ammo_box/magazine/p16{ + pixel_x = -9 + }, +/obj/machinery/light/directional/north, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/item/melee/knife/survival{ + pixel_x = 12; + pixel_y = -3 + }, +/obj/item/melee/knife/survival{ + pixel_x = 10; + pixel_y = -4 + }, +/obj/item/melee/knife/survival{ + pixel_x = 11; + pixel_y = -4 + }, +/obj/item/melee/knife/survival{ + pixel_x = 11; + pixel_y = -6 + }, +/obj/item/melee/knife/survival{ + pixel_x = 11; + pixel_y = -8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"Vw" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewthree) +"VG" = ( +/obj/machinery/modular_computer/console/preset/command{ + dir = 8 + }, +/obj/machinery/light/directional/south, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"VK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/closet/secure_closet/engineering_welding, +/turf/open/floor/engine/hull/interior, +/area/ship/engineering) +"VQ" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/stairs{ + icon = 'icons/obj/stairs.dmi' + }, +/area/ship/engineering) +"VR" = ( +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/transparent/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/security) +"VT" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black/corner, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"VW" = ( +/obj/effect/decal/fakelattice{ + icon_state = "lattice-6" + }, +/obj/structure/lattice/catwalk, +/turf/open/floor/plating, +/area/ship/external/dark) +"We" = ( +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"Wg" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 1; + layer = 2.456 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"Wi" = ( +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"Wk" = ( +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/medical{ + name = "Medical Bay" + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"Wr" = ( +/obj/machinery/door/airlock/grunge{ + dir = 4; + name = "First Officer's Quarters"; + req_one_access = list(19) + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewtwo) +"Wx" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "atlas_bridge_lockdown" + }, +/turf/open/floor/plating, +/area/ship/bridge) +"WO" = ( +/obj/machinery/cryopod{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor/orange{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew) +"WQ" = ( +/obj/machinery/door/airlock/grunge{ + dir = 4; + name = "Engineering" + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/engineering) +"WR" = ( +/obj/structure/bed{ + dir = 1 + }, +/obj/item/bedsheet/blue{ + dir = 1 + }, +/obj/structure/curtain/cloth, +/turf/open/floor/carpet/blue, +/area/ship/crew) +"WZ" = ( +/obj/structure/catwalk/over, +/obj/machinery/firealarm/directional/east, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-10" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plating, +/area/ship/engineering) +"Xc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewthree) +"Xg" = ( +/obj/effect/turf_decal/trimline/transparent/blue/warning{ + dir = 6 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"Xl" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/structure/railing, +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch{ + pixel_y = 23; + pixel_x = 10 + }, +/turf/open/floor/pod/dark, +/area/ship/crew/canteen) +"Xp" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/catwalk/over, +/turf/open/floor/plating, +/area/ship/engineering) +"XT" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/transparent/blue/corner{ + dir = 4 + }, +/obj/structure/chair/plastic{ + dir = 8; + pixel_x = -4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"XZ" = ( +/obj/machinery/porta_turret/ship/ballistic/clip, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/crewthree) +"Ya" = ( +/turf/open/floor/plasteel/tech, +/area/ship/crew/canteen) +"Yt" = ( +/obj/docking_port/stationary{ + width = 30; + height = 15; + dwidth = 15 + }, +/turf/template_noop, +/area/template_noop) +"Yu" = ( +/obj/item/food/cakeslice/birthday{ + pixel_x = 6; + pixel_y = 3 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/structure/catwalk/over, +/turf/open/floor/plating, +/area/ship/engineering) +"Yw" = ( +/obj/machinery/door/airlock/mining{ + name = "Cargo Bay" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"YG" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4; + pixel_y = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"YK" = ( +/obj/structure/closet/crate/bin, +/obj/machinery/firealarm/directional/south, +/obj/item/broken_bottle, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 6 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewthree) +"YM" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "atlas_fo" + }, +/turf/open/floor/plating, +/area/ship/crew/crewtwo) +"YO" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"Zd" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"Ze" = ( +/obj/machinery/washing_machine, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 10 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1; + color = "#75A2BB" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/canteen) +"Zo" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_y = 5; + pixel_x = 11 + }, +/obj/item/pen{ + pixel_y = 5; + pixel_x = 11 + }, +/obj/item/papercutter{ + pixel_x = -2; + pixel_y = 5 + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"Zs" = ( +/obj/machinery/door/airlock/command{ + dir = 4; + name = "Bridge"; + req_one_access = list(19, 3) + }, +/obj/effect/turf_decal/corner_techfloor_gray{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "atlas_bridge_lockdown" + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"ZE" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/crewtwo) +"ZG" = ( +/obj/structure/sign/poster/clip/enlist{ + pixel_y = 32 + }, +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/turf/open/floor/carpet/blue, +/area/ship/crew) +"ZM" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-5" + }, +/turf/open/floor/plating, +/area/ship/engineering) +"ZU" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"ZZ" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/computer/helm{ + dir = 8; + icon_state = "computer-middle" + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) + +(1,1,1) = {" +ps +ps +ps +ps +ms +ps +ps +ps +ps +ps +ps +ps +ps +ps +ps +ps +ps +ps +ps +ps +vS +ps +ps +"} +(2,1,1) = {" +ps +ps +ps +ps +PU +PU +Bm +Bm +PU +ps +ps +PU +sD +PU +ps +ps +PU +Bm +Bm +PU +PU +ps +ps +"} +(3,1,1) = {" +ps +ps +ps +ps +PU +Ti +yL +af +PU +Bm +Bm +PU +zf +PU +Bm +Bm +PU +cN +cN +Hl +PU +ps +ps +"} +(4,1,1) = {" +ps +ps +ps +ps +pp +eW +My +bK +PU +jY +jY +PU +Qu +PU +jY +jY +PU +bK +JR +TA +pp +ps +ps +"} +(5,1,1) = {" +ps +ps +ps +ps +pp +Py +Yu +fM +vo +wc +mw +Hh +Qg +wd +mw +ZM +Eo +Rv +Mu +MH +pp +ps +ps +"} +(6,1,1) = {" +ps +ps +ps +bF +vZ +VK +Kf +jR +iN +sh +vw +UY +OA +vd +WZ +VQ +PX +mK +Xp +Cr +pp +ps +ps +"} +(7,1,1) = {" +ps +ps +ps +ps +mN +PU +Cc +qS +fd +PU +WQ +PU +PU +PU +PU +PU +BL +qG +wU +PU +mN +ps +ps +"} +(8,1,1) = {" +ps +ps +ps +ps +ps +PU +PU +PU +PU +tW +eK +tW +Ze +fL +Gj +tW +PU +PU +PU +PU +ps +ps +ps +"} +(9,1,1) = {" +ps +ps +ps +ps +ps +gT +Qx +Gi +oY +tW +em +tW +zl +Ya +gk +tW +LE +LE +LE +ps +ps +ps +ps +"} +(10,1,1) = {" +ps +ps +ps +ps +gT +gT +jc +XT +gT +tW +VT +Pd +kt +YG +gU +tW +HW +HW +HW +HW +HW +ps +ps +"} +(11,1,1) = {" +ps +ps +ps +gT +gT +kd +gE +Bx +gT +kE +nS +jI +fp +Do +Sb +nQ +HW +WR +us +An +HW +HW +ps +"} +(12,1,1) = {" +ps +ps +ps +gT +Vq +Sw +QS +SB +Vk +jG +IY +jI +vy +nW +FF +PK +HW +ZG +fR +fR +zE +di +ps +"} +(13,1,1) = {" +ps +ps +ps +gT +ny +VR +aX +qR +ST +ct +Aa +nl +oa +nW +FF +nY +HW +fg +wJ +UK +vT +di +ps +"} +(14,1,1) = {" +ps +ps +ps +gT +Rz +Uh +dV +uH +gT +Ig +Aa +Wi +am +dM +BI +cm +Rf +Ej +yi +aI +Qb +di +ps +"} +(15,1,1) = {" +ps +ps +ps +gT +yo +fs +QC +sl +gT +Xl +Aa +wh +Qt +OQ +iS +hg +HW +HW +Es +HW +HW +HW +ps +"} +(16,1,1) = {" +ps +ps +ps +gT +bQ +gT +sI +gT +gT +CZ +EP +eU +FI +Do +FF +kv +NE +HW +lJ +sP +wi +HW +ps +"} +(17,1,1) = {" +ps +ps +ps +gT +yZ +gT +zQ +PT +Um +Cq +wk +jI +Pn +rr +FF +kv +nU +HW +WO +mf +nO +HW +ps +"} +(18,1,1) = {" +ps +ps +ps +gT +gT +gT +Zd +sL +We +sL +IY +jI +uU +rr +FF +KB +HW +HW +HW +HW +HW +RT +ps +"} +(19,1,1) = {" +ps +ps +ps +ps +ps +gT +MC +Pi +sA +eJ +RM +gu +ES +bS +Ss +wy +eB +Qj +PD +HW +ps +ps +ps +"} +(20,1,1) = {" +ps +ps +ps +ps +ps +lA +TE +TE +TE +TE +HX +PV +HX +PV +HX +CO +CO +CO +CO +HW +ps +ps +ps +"} +(21,1,1) = {" +ps +ps +ps +ps +ps +ps +TE +OV +No +TE +ev +sB +Ot +ia +OW +CO +gy +zc +CO +ps +ps +ps +ps +"} +(22,1,1) = {" +ps +ps +ps +ps +ps +Qz +TE +Ld +yn +TE +TE +zt +tF +Ty +CO +CO +cY +cY +CO +SK +ps +ps +ps +"} +(23,1,1) = {" +ps +ps +ps +ps +ps +zq +Lw +le +YO +Hg +Yw +TT +hL +TT +gw +aC +FQ +mS +CX +CO +ps +ps +ps +"} +(24,1,1) = {" +ps +ps +ps +ps +Yt +Hu +nX +tA +jZ +yI +TE +hQ +rk +Ln +CO +Dq +aa +JL +yR +Vo +ps +ps +ps +"} +(25,1,1) = {" +ps +ps +ps +ps +ps +Hu +nX +tA +tA +UP +TE +wW +rk +JU +CO +we +uO +UC +yR +Vo +ps +ps +ps +"} +(26,1,1) = {" +ps +ps +ps +ps +ps +kS +Ml +le +Da +SI +nP +yB +ix +yB +Wk +zx +AH +qA +xU +CO +ps +ps +ps +"} +(27,1,1) = {" +ps +ps +ps +ps +ps +Qz +TE +nm +ov +TE +TE +yT +ec +uY +CO +CO +Vl +Vl +CO +SK +ps +ps +ps +"} +(28,1,1) = {" +ps +ps +ps +ps +ps +ps +TE +IK +xz +TE +MO +Fv +pE +uQ +si +CO +fF +UG +CO +ps +ps +ps +ps +"} +(29,1,1) = {" +ps +ps +jp +VW +Ey +Fu +TE +TE +TE +TE +kG +kL +pi +BW +si +CO +CO +CO +CO +VW +Ey +Fu +da +"} +(30,1,1) = {" +ps +ps +Oj +FN +xi +HX +HX +EJ +aS +uY +is +Xg +lY +oJ +Sz +uY +iQ +IR +HX +HX +Kc +da +da +"} +(31,1,1) = {" +ps +ps +Oj +FN +FN +FN +Cn +lc +gH +QG +Wg +fi +jL +AP +gH +QG +fj +RQ +OW +da +da +da +da +"} +(32,1,1) = {" +ps +ps +Sp +jQ +hR +FN +FN +oX +FN +FN +rR +BH +kX +pq +ZU +da +da +Wr +da +da +SW +Av +gR +"} +(33,1,1) = {" +ps +ps +Sp +rz +NY +hq +Xc +uX +sF +LM +LM +Jb +Wx +Zs +LM +LM +rO +Ni +Tx +iw +MQ +CM +gR +"} +(34,1,1) = {" +ps +ps +Sp +RL +cc +yC +Vw +YK +LM +LM +JV +FO +tq +EZ +ED +LM +LM +of +Ay +aw +Hf +IP +gR +"} +(35,1,1) = {" +ps +ps +XZ +FN +LH +uG +ry +LM +Ic +Mq +qn +Qw +ux +Pk +qb +pn +LM +LM +ZE +Rt +EH +da +GU +"} +(36,1,1) = {" +ps +ps +ps +FN +FN +vW +TK +LM +wu +js +js +Ir +gA +gF +Ea +Ea +lw +LM +mh +cV +da +da +ps +"} +(37,1,1) = {" +ps +ps +ps +Je +FN +yO +PG +LM +tP +DL +Zo +qr +qP +dw +uC +QM +VG +LM +EB +Km +da +Je +ps +"} +(38,1,1) = {" +ps +ps +ps +Je +FN +Gt +eH +LM +qc +LM +iO +RU +ZZ +US +Lp +LM +qc +LM +iW +yx +da +Je +ps +"} +(39,1,1) = {" +ps +ps +ps +ps +Cm +tc +tc +LM +ps +LM +qc +qc +qc +qc +qc +LM +ps +LM +YM +YM +Ob +ps +ps +"} diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm index 4b42a90bbb26..fedc993738bd 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm @@ -1672,9 +1672,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "pJ" = ( -/obj/machinery/power/smes/shuttle/precharged{ - dir = 4 - }, +/obj/machinery/power/smes/shuttle/precharged, /obj/structure/cable{ icon_state = "0-8" }, @@ -1775,9 +1773,7 @@ /turf/open/floor/mineral/plastitanium, /area/ship/crew/canteen) "qF" = ( -/obj/machinery/power/smes/shuttle/precharged{ - dir = 4 - }, +/obj/machinery/power/smes/shuttle/precharged, /obj/structure/cable{ icon_state = "0-8" }, @@ -3305,7 +3301,6 @@ icon_state = "0-8" }, /obj/docking_port/mobile{ - can_move_docking_ports = 1; dir = 8; launch_status = 0; preferred_direction = 4 @@ -4042,9 +4037,7 @@ /obj/machinery/door/window/eastleft{ name = "Engine Access" }, -/obj/machinery/atmospherics/components/unary/shuttle/fire_heater{ - dir = 4 - }, +/obj/machinery/atmospherics/components/unary/shuttle/fire_heater, /turf/open/floor/plating, /area/ship/engineering) "MV" = ( @@ -4285,9 +4278,7 @@ id = "warship_engines"; name = "Thruster Blast Door" }, -/obj/machinery/atmospherics/components/unary/shuttle/fire_heater{ - dir = 4 - }, +/obj/machinery/atmospherics/components/unary/shuttle/fire_heater, /turf/open/floor/plating, /area/ship/engineering) "PA" = ( @@ -5252,9 +5243,7 @@ /turf/open/floor/holofloor/wood, /area/ship/bridge) "Yb" = ( -/obj/machinery/power/shuttle/engine/electric{ - dir = 4 - }, +/obj/machinery/power/shuttle/engine/electric, /obj/structure/cable{ icon_state = "0-4" }, @@ -5267,9 +5256,7 @@ /turf/open/floor/engine/hull, /area/ship/external/dark) "Yn" = ( -/obj/machinery/power/shuttle/engine/fire{ - dir = 4 - }, +/obj/machinery/power/shuttle/engine/fire, /turf/open/floor/plating, /area/ship/engineering) "Yp" = ( diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 1e4fde83ae56..5df6e5fce6b3 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -844,6 +844,10 @@ DEFINE_BITFIELD(turret_flags, list( stun_projectile_sound = 'sound/weapons/gun/smg/shot.ogg' desc = "A ballistic machine gun auto-turret." +/* Colonial League turrets */ +/obj/machinery/porta_turret/ship/ballistic/clip + faction = list(FACTION_PLAYER_MINUTEMAN, "turret") + //high rof, range, faster projectile speed /* 'Nanotrasen' turrets */ diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index ea6633370147..cc742c409f0e 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -182,6 +182,13 @@ helmet_type = /obj/item/clothing/head/helmet/space/pilot/random mask_type = /obj/item/clothing/mask/breath +/obj/machinery/suit_storage_unit/minutemen + suit_type = /obj/item/clothing/suit/space/hardsuit/clip_patroller + mask_type = /obj/item/clothing/mask/breath + +/obj/machinery/suit_storage_unit/minutemen/spotter + suit_type = /obj/item/clothing/suit/space/hardsuit/clip_spotter + //End shiptest suits /obj/machinery/suit_storage_unit/open diff --git a/code/game/objects/items/storage/guncases.dm b/code/game/objects/items/storage/guncases.dm index 2feb49af03f7..947ed3d8b914 100644 --- a/code/game/objects/items/storage/guncases.dm +++ b/code/game/objects/items/storage/guncases.dm @@ -213,3 +213,9 @@ /obj/item/storage/pistolcase/iongun/PopulateContents() new /obj/item/gun/energy/ionrifle/empty_cell(src) new /obj/item/stock_parts/cell/gun(src) + +/obj/item/storage/pistolcase/cm23/PopulateContents() + . = ..() + new /obj/item/gun/ballistic/automatic/pistol/cm23/no_mag(src) + new /obj/item/ammo_box/magazine/cm23/empty(src) + new /obj/item/ammo_box/magazine/cm23/empty(src) diff --git a/code/modules/clothing/outfits/factions/minutemen.dm b/code/modules/clothing/outfits/factions/minutemen.dm index 2301855c6809..36530b20754b 100644 --- a/code/modules/clothing/outfits/factions/minutemen.dm +++ b/code/modules/clothing/outfits/factions/minutemen.dm @@ -120,7 +120,7 @@ suit = /obj/item/clothing/suit/toggle/lawyer/clip/fo alt_suit = null - shoes = /obj/item/clothing/shoes/combat + shoes = /obj/item/clothing/shoes/laceup head = /obj/item/clothing/head/clip/slouch/officer backpack = /obj/item/storage/backpack/captain @@ -273,7 +273,7 @@ backpack = /obj/item/storage/backpack/security/clip satchel = /obj/item/storage/backpack/satchel/sec/clip duffelbag = /obj/item/storage/backpack/duffelbag - courierbag = /obj/item/storage/backpack/messenger + courierbag = /obj/item/storage/backpack/satchel/sec/clip box = /obj/item/storage/box/survival/clip/balaclava @@ -298,17 +298,12 @@ ears = /obj/item/radio/headset/clip/alt/captain uniform = /obj/item/clothing/under/clip/officer alt_uniform = null - suit = /obj/item/clothing/suit/armor/clip_capcoat alt_suit = null + suit = /obj/item/clothing/suit/armor/clip_capcoat dcoat = /obj/item/clothing/suit/hooded/wintercoat/captain - shoes = /obj/item/clothing/shoes/combat + shoes = /obj/item/clothing/shoes/jackboots head = /obj/item/clothing/head/clip/slouch/officer - backpack = /obj/item/storage/backpack/captain - satchel = /obj/item/storage/backpack/satchel/cap - duffelbag = /obj/item/storage/backpack/duffelbag/captain - courierbag = /obj/item/storage/backpack/messenger/com - backpack_contents = list(/obj/item/storage/box/ids=1, /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1) @@ -365,14 +360,9 @@ ears = /obj/item/radio/headset/clip/alt uniform = /obj/item/clothing/under/clip/formal alt_uniform = null - suit = /obj/item/clothing/suit/toggle/lawyer/clip alt_suit = null - shoes = /obj/item/clothing/shoes/combat - - backpack = /obj/item/storage/backpack/captain - satchel = /obj/item/storage/backpack/satchel/cap - duffelbag = /obj/item/storage/backpack/duffelbag/captain - courierbag = /obj/item/storage/backpack/messenger/com + suit = /obj/item/clothing/suit/toggle/lawyer/clip + shoes = /obj/item/clothing/shoes/jackboots backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced = 1) @@ -382,17 +372,9 @@ job_icon = "clip_navy2" jobtype = /datum/job/doctor - l_hand = /obj/item/storage/firstaid/medical - - backpack = /obj/item/storage/backpack/security/clip - satchel = /obj/item/storage/backpack/satchel/sec/clip - duffelbag = /obj/item/storage/backpack/duffelbag - courierbag = /obj/item/storage/backpack/messenger - uniform = /obj/item/clothing/under/clip/medic shoes = /obj/item/clothing/shoes/sneakers/white head = /obj/item/clothing/head/clip/corpsman - gloves = /obj/item/clothing/gloves/color/latex/nitrile/clip suit = null suit_store = null @@ -513,7 +495,7 @@ job_icon = "clip_cmm2" ears = /obj/item/radio/headset/alt box = /obj/item/storage/box/survival/clip/balaclava - shoes = null + shoes = /obj/item/clothing/shoes/combat // shoos backpack = /obj/item/storage/backpack/security/clip satchel = /obj/item/storage/backpack/satchel/sec/clip @@ -635,7 +617,7 @@ head = /obj/item/clothing/head/clip/slouch suit = /obj/item/clothing/suit/armor/vest/bulletproof belt = /obj/item/storage/belt/military/clip - shoes = /obj/item/clothing/shoes/combat + shoes = /obj/item/clothing/shoes/jackboots l_pocket = /obj/item/flashlight/seclite r_pocket = /obj/item/tank/internals/emergency_oxygen/double @@ -647,8 +629,7 @@ suit_store = /obj/item/gun/ballistic/automatic/assault/cm82 belt = /obj/item/storage/belt/military/clip/cm82 - //replace commander with the cm23 when its impemented, see the cm-f4 above - backpack_contents = list(/obj/item/clothing/mask/gas/clip=1, /obj/item/reagent_containers/food/snacks/rationpack=1, /obj/item/gun/ballistic/automatic/pistol/commander=1) + backpack_contents = list(/obj/item/clothing/mask/gas/clip=1, /obj/item/reagent_containers/food/snacks/rationpack=1, /obj/item/gun/ballistic/automatic/pistol/cm23=1) /datum/outfit/job/clip/minutemen/grunt/commander name = "CLIP Minutemen - Field Commander" @@ -662,7 +643,7 @@ head = /obj/item/clothing/head/clip/slouch/officer suit = /obj/item/clothing/suit/toggle/lawyer/clip - shoes = /obj/item/clothing/shoes/combat + shoes = /obj/item/clothing/shoes/jackboots glasses = /obj/item/clothing/glasses/sunglasses /datum/outfit/job/clip/minutemen/grunt/major @@ -677,6 +658,6 @@ head = /obj/item/clothing/head/clip/slouch/officer suit = /obj/item/clothing/suit/armor/clip_trenchcoat - shoes = /obj/item/clothing/shoes/combat + shoes = /obj/item/clothing/shoes/jackboots glasses = /obj/item/clothing/glasses/sunglasses diff --git a/code/modules/projectiles/guns/manufacturer/clip_lanchester/ballistics.dm b/code/modules/projectiles/guns/manufacturer/clip_lanchester/ballistics.dm index a244b188863a..b84171d437da 100644 --- a/code/modules/projectiles/guns/manufacturer/clip_lanchester/ballistics.dm +++ b/code/modules/projectiles/guns/manufacturer/clip_lanchester/ballistics.dm @@ -23,9 +23,12 @@ eject_empty_sound = 'sound/weapons/gun/pistol/candor_unload.ogg' recoil_unwielded = 3 +/obj/item/gun/ballistic/automatic/pistol/cm23/no_mag + spawnwithmagazine = FALSE + /obj/item/ammo_box/magazine/cm23 name = "CM-23 pistol magazine (10mm)" - desc = "An 10-round magazine magazine designed for the CM-70 pistol. These rounds do moderate damage, but struggle against armor." + desc = "An 10-round magazine magazine designed for the CM-23 pistol. These rounds do moderate damage, but struggle against armor." icon_state = "cm23_mag-1" base_icon_state = "cm23_mag" ammo_type = /obj/item/ammo_casing/c10mm @@ -36,6 +39,9 @@ . = ..() icon_state = "[base_icon_state]-[!!ammo_count()]" +/obj/item/ammo_box/magazine/cm23/empty + start_empty = TRUE + /obj/item/gun/ballistic/automatic/pistol/cm70 name = "CM-70 machine pistol" desc = "A compact machine pistol designed to rapidly fire 3-round bursts. Popular with officers and certain special units, the CM-70 is incredibly dangerous at close range. Chambered in 9mm." From bb943360572e68c92691235611f58acb6124e82f Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 17 Oct 2024 13:06:08 -0500 Subject: [PATCH 023/274] Automatic changelog generation for PR #3246 [ci skip] --- html/changelogs/AutoChangeLog-pr-3246.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3246.yml diff --git a/html/changelogs/AutoChangeLog-pr-3246.yml b/html/changelogs/AutoChangeLog-pr-3246.yml new file mode 100644 index 000000000000..a877fb96e567 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3246.yml @@ -0,0 +1,4 @@ +author: meemofcourse +changes: + - {rscadd: Atlas-class Light Armored Crusier} +delete-after: true From 9cae6b4dc039ebce77998706210a7d310ffb2c66 Mon Sep 17 00:00:00 2001 From: DIB-DOG Date: Thu, 17 Oct 2024 13:51:13 -0500 Subject: [PATCH 024/274] Removes the extra turret from the crying sun and slightly re-organizes the armory (#3477) ## About The Pull Request Removes an extra turret that found it's way onto the hull of the PGF Crying Sun, likely in the recent PGF turret overhaul. Additionally, a locker in the armory has been renamed and the flashbangs have been moved from the Marine equipment locker to the Lieutenant's ordnance locker. I've attached an image below to show how it's now organized. ![Screenshot 2024-10-03 172121](https://github.com/user-attachments/assets/c8c123e3-0c39-4fc6-b7e1-d2c545ac0631) ![Screenshot 2024-10-04 015626](https://github.com/user-attachments/assets/9440b65f-ff3e-48f2-8a35-05ae0f442ad6) ![Screenshot 2024-10-17 131256](https://github.com/user-attachments/assets/d2fe5685-ffb8-487a-9d2f-c7228a8ea099) ## Why It's Good For The Game Ships having automated turrets that they weren't meant to have is generally a bad thing for balance and being able to enjoy the ship's lovingly labored over design. As for the flashbangs, the ship's fragmentation and smoke grenades were already being controlled by the lieutenant so it seems logical to do the same with grenades that can blind and deafen someone. ## Changelog :cl: del: Removed extra turret that wasn't supposed to be on the ship fix: Moved armory flashbangs to a more secure location /:cl: --- _maps/shuttles/pgf/pgf_crying_sun.dmm | 57 +++++++++++---------------- 1 file changed, 23 insertions(+), 34 deletions(-) diff --git a/_maps/shuttles/pgf/pgf_crying_sun.dmm b/_maps/shuttles/pgf/pgf_crying_sun.dmm index 0c740842e5d9..933d8f7fbfe0 100644 --- a/_maps/shuttles/pgf/pgf_crying_sun.dmm +++ b/_maps/shuttles/pgf/pgf_crying_sun.dmm @@ -225,16 +225,13 @@ /turf/open/floor/plating, /area/ship/engineering) "bT" = ( -/obj/item/storage/box/flashbangs{ - pixel_x = -7; - pixel_y = 7 - }, /obj/item/storage/box/zipties{ pixel_y = 7; - pixel_x = 8 + pixel_x = 4 }, /obj/item/storage/box/flashes{ - pixel_y = -1 + pixel_y = -1; + pixel_x = -7 }, /obj/item/screwdriver{ pixel_x = -5; @@ -2373,36 +2370,39 @@ /turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "uo" = ( +/obj/structure/closet/secure_closet/wall/directional/west{ + icon_state = "sec_wall"; + name = "ordnance locker" + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/purple{ + dir = 10 + }, +/obj/item/storage/box/flashbangs{ + pixel_y = 6 + }, /obj/item/grenade/frag{ - pixel_x = -8; + pixel_x = -10; pixel_y = -1 }, /obj/item/grenade/frag{ - pixel_x = -3; - pixel_y = -8 + pixel_x = -5; + pixel_y = -6 }, /obj/item/grenade/smokebomb{ - pixel_y = 3; + pixel_y = 2; pixel_x = 13 }, /obj/item/grenade/smokebomb{ - pixel_y = 1; - pixel_x = 7 + pixel_x = 7; + pixel_y = -2 }, /obj/item/grenade/smokebomb{ pixel_x = 11; pixel_y = -5 }, -/obj/structure/closet/secure_closet/wall/directional/west{ - icon_state = "sec_wall"; - name = "equipment locker" - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 10 - }, /turf/open/floor/vault, /area/ship/security/armory) "uq" = ( @@ -3612,17 +3612,6 @@ /obj/item/clothing/head/helmet/space/gezena, /turf/open/floor/plating, /area/ship/engineering) -"DG" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/porta_turret/ship/pgf/light{ - dir = 5; - mode = 1; - id = "crying_sun_grid" - }, -/turf/open/floor/engine/hull, -/area/ship/external/dark) "DJ" = ( /obj/effect/turf_decal/industrial/traffic, /obj/structure/sign/flag/gezena{ @@ -7431,7 +7420,7 @@ xz xz xz Si -DG +KB KM Te EM From 4221dff16cd0c0b8573cc6bc5c886b145e1716ea Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 17 Oct 2024 14:01:54 -0500 Subject: [PATCH 025/274] Automatic changelog generation for PR #3477 [ci skip] --- html/changelogs/AutoChangeLog-pr-3477.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3477.yml diff --git a/html/changelogs/AutoChangeLog-pr-3477.yml b/html/changelogs/AutoChangeLog-pr-3477.yml new file mode 100644 index 000000000000..b0f28a0aebcd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3477.yml @@ -0,0 +1,5 @@ +author: DIB-DOG +changes: + - {rscdel: Removed extra turret that wasn't supposed to be on the ship} + - {bugfix: Moved armory flashbangs to a more secure location} +delete-after: true From fa04ceba0851d8ba1954bd849a5f068e751ab48b Mon Sep 17 00:00:00 2001 From: generalthrax <139387950+generalthrax@users.noreply.github.com> Date: Thu, 17 Oct 2024 15:58:14 -0500 Subject: [PATCH 026/274] Fixes the Frontiersman Soft Cap (#3581) ## About The Pull Request Fixes a typo that broke the sprite whenever you took the hat off or flipped it ## Why It's Good For The Game Fixes good ## Changelog :cl: fix: Fixed a typo in the Frontiersman softcap that made the sprite go invisible /:cl: --- code/modules/clothing/factions/frontiersmen.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/factions/frontiersmen.dm b/code/modules/clothing/factions/frontiersmen.dm index 77af8138fb40..380456f4f8d7 100644 --- a/code/modules/clothing/factions/frontiersmen.dm +++ b/code/modules/clothing/factions/frontiersmen.dm @@ -129,7 +129,7 @@ name = "frontiersman cap" desc = "An olive-green and grey baseball hat, worn by cargo technicians working under the Frontiersmen. Even they have the rights for a cool cap!" icon_state = "frontiersoft" - soft_type = "frontiersmen" + soft_type = "frontier" icon = 'icons/obj/clothing/faction/frontiersmen/head.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/frontiersmen/head.dmi' From 00d536f266ac23762fcf0ebe9d459ee15c5498cf Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 17 Oct 2024 16:09:06 -0500 Subject: [PATCH 027/274] Automatic changelog generation for PR #3581 [ci skip] --- html/changelogs/AutoChangeLog-pr-3581.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3581.yml diff --git a/html/changelogs/AutoChangeLog-pr-3581.yml b/html/changelogs/AutoChangeLog-pr-3581.yml new file mode 100644 index 000000000000..935fbd451c5b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3581.yml @@ -0,0 +1,4 @@ +author: generalthrax +changes: + - {bugfix: Fixed a typo in the Frontiersman softcap that made the sprite go invisible} +delete-after: true From 445e601983444563f9c0a7f8d9d6322a536f0993 Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Erikafox@users.noreply.github.com> Date: Thu, 17 Oct 2024 18:17:42 -0400 Subject: [PATCH 028/274] Wasteplanets Less Explosive (#3575) ## About The Pull Request removes welding fuel tanks from the wasteplanet spawn pool ## Why It's Good For The Game you will explode... less.. ## Changelog :cl: del: Wasteplanets no longer spawn welding fuel tanks. /:cl: Co-authored-by: Erika Fox <94164348+Bjarl@users.noreply.github.com> --- code/datums/mapgen/planetary/WasteGenerator.dm | 8 -------- 1 file changed, 8 deletions(-) diff --git a/code/datums/mapgen/planetary/WasteGenerator.dm b/code/datums/mapgen/planetary/WasteGenerator.dm index 67a9e5649a8c..621d5e3b9c4d 100644 --- a/code/datums/mapgen/planetary/WasteGenerator.dm +++ b/code/datums/mapgen/planetary/WasteGenerator.dm @@ -106,7 +106,6 @@ //stuff you can actually use /obj/effect/spawner/lootdrop/waste/girder = 600, - /obj/structure/reagent_dispensers/fueltank = 100, /obj/structure/reagent_dispensers/watertank = 200, /obj/item/stack/cable_coil/cut = 500, /obj/structure/closet/crate/secure/loot = 30, @@ -190,7 +189,6 @@ /obj/effect/spawner/lootdrop/waste/radiation = 300, /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 120, /obj/effect/spawner/lootdrop/waste/girder = 600, - /obj/structure/reagent_dispensers/fueltank = 100, /obj/structure/reagent_dispensers/watertank = 200, /obj/item/stack/cable_coil/cut = 500, /obj/structure/closet/crate/secure/loot = 30, @@ -235,7 +233,6 @@ /obj/effect/spawner/lootdrop/waste/radiation = 80, /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 20, /obj/effect/spawner/lootdrop/waste/girder = 600, - /obj/structure/reagent_dispensers/fueltank = 100, /obj/structure/reagent_dispensers/watertank = 200, /obj/item/stack/cable_coil/cut = 500, /obj/structure/closet/crate/secure/loot = 30, @@ -297,7 +294,6 @@ /obj/effect/spawner/lootdrop/waste/radiation = 80, /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 10, /obj/effect/spawner/lootdrop/waste/girder = 600, - /obj/structure/reagent_dispensers/fueltank = 100, /obj/structure/reagent_dispensers/watertank = 200, /obj/item/stack/cable_coil/cut = 500, /obj/structure/closet/crate/secure/loot = 30, @@ -359,7 +355,6 @@ /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 5, /obj/effect/spawner/lootdrop/waste/salvageable = 150, /obj/effect/spawner/lootdrop/waste/girder = 200, - /obj/structure/reagent_dispensers/fueltank = 10, /obj/structure/reagent_dispensers/watertank = 10, /obj/item/stack/cable_coil/cut = 500, /obj/structure/closet/crate/secure/loot = 30, @@ -393,7 +388,6 @@ /obj/effect/spawner/lootdrop/waste/radiation = 32, /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 4, /obj/effect/spawner/lootdrop/waste/girder = 120, - /obj/structure/reagent_dispensers/fueltank = 20, /obj/structure/reagent_dispensers/watertank = 40, /obj/item/stack/cable_coil/cut = 100, /obj/structure/closet/crate/secure/loot = 6, @@ -427,7 +421,6 @@ /obj/effect/spawner/lootdrop/waste/radiation = 16, /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 2, /obj/effect/spawner/lootdrop/waste/girder = 60, - /obj/structure/reagent_dispensers/fueltank = 10, /obj/structure/reagent_dispensers/watertank = 20, /obj/item/stack/cable_coil/cut = 50, /obj/structure/closet/crate/secure/loot = 3, @@ -466,7 +459,6 @@ /obj/effect/spawner/lootdrop/waste/mechwreck = 20, /obj/effect/spawner/lootdrop/waste/trash = 90, /obj/effect/spawner/lootdrop/waste/radiation = 16, - /obj/structure/reagent_dispensers/fueltank = 10, /obj/structure/reagent_dispensers/watertank = 20, /obj/item/stack/cable_coil/cut = 50, /obj/structure/closet/crate/secure/loot = 3, From 10f2c0bc7f85c96bbfa2845b058c91a37321774d Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 17 Oct 2024 17:28:10 -0500 Subject: [PATCH 029/274] Automatic changelog generation for PR #3575 [ci skip] --- html/changelogs/AutoChangeLog-pr-3575.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3575.yml diff --git a/html/changelogs/AutoChangeLog-pr-3575.yml b/html/changelogs/AutoChangeLog-pr-3575.yml new file mode 100644 index 000000000000..da31593b7759 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3575.yml @@ -0,0 +1,4 @@ +author: Erikafox +changes: + - {rscdel: Wasteplanets no longer spawn welding fuel tanks.} +delete-after: true From ebe41368f300d268972dd2e7b80c999bc57cd3a1 Mon Sep 17 00:00:00 2001 From: rye-rice <58402542+rye-rice@users.noreply.github.com> Date: Thu, 17 Oct 2024 16:05:54 -0700 Subject: [PATCH 030/274] resprites the commander (#3580) ## About The Pull Request title Was meant to be apart of another big manufacturer PR, however I do those when i'm taking a break from big projects, so its a bit of a cycle. It appears im in the latter half of the cycle (overmap 5 coming december...), so might as well just PR what i have done ## Why It's Good For The Game ![image](https://github.com/user-attachments/assets/9d518d71-b8f1-487c-9070-06af2d7a6c63) ## Changelog :cl: add: Resprites the commander and Commissioner /:cl: --------- Signed-off-by: rye-rice <58402542+rye-rice@users.noreply.github.com> Co-authored-by: retlaw34 <58402542+retlaw34@users.noreply.github.com> Co-authored-by: thgvr <81882910+thgvr@users.noreply.github.com> --- code/__DEFINES/guns.dm | 1 + .../boxes_magazines/external/pistol.dm | 13 ----- .../projectiles/guns/ballistic/pistol.dm | 37 ------------- .../nanotrasen_sharplite/ballistics.dm | 52 ++++++++++++++++++ icons/obj/guns/manufacturer/inteq/48x32.dmi | Bin 2090 -> 2032 bytes .../obj/guns/manufacturer/inteq/lefthand.dmi | Bin 5223 -> 1659 bytes .../obj/guns/manufacturer/inteq/righthand.dmi | Bin 5182 -> 1643 bytes .../nanotrasen_sharplite/48x32.dmi | Bin 27978 -> 28117 bytes .../nanotrasen_sharplite/lefthand.dmi | Bin 35557 -> 35330 bytes .../nanotrasen_sharplite/righthand.dmi | Bin 37047 -> 36809 bytes shiptest.dme | 1 + 11 files changed, 54 insertions(+), 50 deletions(-) create mode 100644 code/modules/projectiles/guns/manufacturer/nanotrasen_sharplite/ballistics.dm diff --git a/code/__DEFINES/guns.dm b/code/__DEFINES/guns.dm index d1cea0d28de4..26f7cfbfb6a9 100644 --- a/code/__DEFINES/guns.dm +++ b/code/__DEFINES/guns.dm @@ -61,6 +61,7 @@ #define MANUFACTURER_EOEHOMA "the Eoehoma Firearms emblem" #define MANUFACTURER_NANOTRASEN_OLD "an outdated Nanotrasen logo" #define MANUFACTURER_NANOTRASEN "the Nanotrasen logo" +#define MANUFACTURER_VIGILITAS "the Vigilitas Interstellar logo" #define MANUFACTURER_BRAZIL "a green flag with a blue circle and a yellow diamond around it" #define MANUFACTURER_INTEQ "an orange crest with the letters 'IRMG'" #define MANUFACTURER_MINUTEMAN "the Lanchester City Firearms Plant logo" diff --git a/code/modules/projectiles/boxes_magazines/external/pistol.dm b/code/modules/projectiles/boxes_magazines/external/pistol.dm index 90d2c7e4546e..0cf2a39beef2 100644 --- a/code/modules/projectiles/boxes_magazines/external/pistol.dm +++ b/code/modules/projectiles/boxes_magazines/external/pistol.dm @@ -34,19 +34,6 @@ . = ..() icon_state = "[base_icon_state]-[min(ammo_count(), 8)]" -/obj/item/ammo_box/magazine/co9mm - name = "commander pistol magazine (9mm)" - desc = "A 10-round double-stack magazine for Commander pistols. These rounds do okay damage, but struggle against armor." - icon_state = "commander_mag-10" - base_icon_state = "commander_mag" - ammo_type = /obj/item/ammo_casing/c9mm - caliber = "9mm" - max_ammo = 10 - multiple_sprites = AMMO_BOX_PER_BULLET - -/obj/item/ammo_box/magazine/co9mm/empty - start_empty = TRUE - /obj/item/ammo_box/magazine/pistol556mm name = "Pistole C magazine (5.56mm HITP caseless)" desc = "A 12-round, double-stack magazine for the Pistole C pistol. These rounds do okay damage with average performance against armor." diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index 4fcc4cf56b14..cdae6b83df4c 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -98,43 +98,6 @@ EMPTY_GUN_HELPER(automatic/pistol/candor/factory) icon_state = "deaglecamo" item_state = "deagleg" -/obj/item/gun/ballistic/automatic/pistol/commander - name = "\improper Commander" - desc = "A classic handgun in a tasteful black and stainless steel color scheme. An enamel Nanotrasen logo is set into the grips. Chambered in 9mm." - icon_state = "commander" - icon = 'icons/obj/guns/manufacturer/nanotrasen_sharplite/48x32.dmi' - lefthand_file = 'icons/obj/guns/manufacturer/nanotrasen_sharplite/lefthand.dmi' - righthand_file = 'icons/obj/guns/manufacturer/nanotrasen_sharplite/righthand.dmi' - mob_overlay_icon = 'icons/obj/guns/manufacturer/nanotrasen_sharplite/onmob.dmi' - - w_class = WEIGHT_CLASS_NORMAL - mag_type = /obj/item/ammo_box/magazine/co9mm - manufacturer = MANUFACTURER_NANOTRASEN - fire_sound = 'sound/weapons/gun/pistol/rattlesnake.ogg' - load_sound = 'sound/weapons/gun/pistol/mag_insert.ogg' - load_empty_sound = 'sound/weapons/gun/pistol/mag_insert.ogg' - eject_sound = 'sound/weapons/gun/pistol/mag_release.ogg' - eject_empty_sound = 'sound/weapons/gun/pistol/mag_release.ogg' - - rack_sound = 'sound/weapons/gun/pistol/rack_small.ogg' - lock_back_sound = 'sound/weapons/gun/pistol/lock_small.ogg' - bolt_drop_sound = 'sound/weapons/gun/pistol/drop_small.ogg' - -EMPTY_GUN_HELPER(automatic/pistol/commander) - -/obj/item/gun/ballistic/automatic/pistol/commander/inteq - name = "\improper Commissioner" - desc = "A handgun seized from Nanotrasen armories by deserting troopers and modified to IRMG's standards. A yellow IRMG shield is set into the grips. Chambered in 9mm." - icon = 'icons/obj/guns/manufacturer/inteq/48x32.dmi' - lefthand_file = 'icons/obj/guns/manufacturer/inteq/lefthand.dmi' - righthand_file = 'icons/obj/guns/manufacturer/inteq/righthand.dmi' - mob_overlay_icon = 'icons/obj/guns/manufacturer/inteq/onmob.dmi' - icon_state = "commander-inteq" - item_state = "commander-inteq" - manufacturer = MANUFACTURER_INTEQ - -EMPTY_GUN_HELPER(automatic/pistol/commander/inteq) - /obj/item/gun/ballistic/automatic/pistol/commissar name = "\improper Commissar" desc = "A Nanotrasen-issue handgun, modified with a voice box to further enhance its effectiveness in troop discipline." diff --git a/code/modules/projectiles/guns/manufacturer/nanotrasen_sharplite/ballistics.dm b/code/modules/projectiles/guns/manufacturer/nanotrasen_sharplite/ballistics.dm new file mode 100644 index 000000000000..9ba4929cf0a4 --- /dev/null +++ b/code/modules/projectiles/guns/manufacturer/nanotrasen_sharplite/ballistics.dm @@ -0,0 +1,52 @@ +/obj/item/gun/ballistic/automatic/pistol/commander + name = "VI Commander" + desc = "A service pistol produced as Vigilitas Interstellar's standard sidearm. Has a reputation for being easy to use, due to its light recoil and high magazine capacity. Chambered in 9mm." + icon_state = "commander" + item_state = "nt_generic" + icon = 'icons/obj/guns/manufacturer/nanotrasen_sharplite/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/nanotrasen_sharplite/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/nanotrasen_sharplite/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/nanotrasen_sharplite/onmob.dmi' + + w_class = WEIGHT_CLASS_NORMAL + mag_type = /obj/item/ammo_box/magazine/co9mm + manufacturer = MANUFACTURER_VIGILITAS + fire_sound = 'sound/weapons/gun/pistol/rattlesnake.ogg' + load_sound = 'sound/weapons/gun/pistol/mag_insert.ogg' + load_empty_sound = 'sound/weapons/gun/pistol/mag_insert.ogg' + eject_sound = 'sound/weapons/gun/pistol/mag_release.ogg' + eject_empty_sound = 'sound/weapons/gun/pistol/mag_release.ogg' + + rack_sound = 'sound/weapons/gun/pistol/rack_small.ogg' + lock_back_sound = 'sound/weapons/gun/pistol/lock_small.ogg' + bolt_drop_sound = 'sound/weapons/gun/pistol/drop_small.ogg' + +EMPTY_GUN_HELPER(automatic/pistol/commander) + +/obj/item/ammo_box/magazine/co9mm + name = "commander pistol magazine (9mm)" + desc = "A 10-round double-stack magazine for Commander pistols. These rounds do okay damage, but struggle against armor." + icon_state = "commander_mag-10" + base_icon_state = "commander_mag" + ammo_type = /obj/item/ammo_casing/c9mm + caliber = "9mm" + max_ammo = 10 + multiple_sprites = AMMO_BOX_PER_BULLET + +/obj/item/ammo_box/magazine/co9mm/empty + start_empty = TRUE + + +/obj/item/gun/ballistic/automatic/pistol/commander/inteq + name = "PS-03 Commissioner" + desc = "A modified version of the VI Commander, issued as standard to Inteq Risk Management Group personnel. Features the same excellent handling and high magazine capacity as the original. Chambered in 9mm." + + icon = 'icons/obj/guns/manufacturer/inteq/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/inteq/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/inteq/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/inteq/onmob.dmi' + icon_state = "commander_inteq" + item_state = "inteq_generic" + manufacturer = MANUFACTURER_INTEQ + +EMPTY_GUN_HELPER(automatic/pistol/commander/inteq) diff --git a/icons/obj/guns/manufacturer/inteq/48x32.dmi b/icons/obj/guns/manufacturer/inteq/48x32.dmi index 021ff448ecb58acb2f8ad2cdb9d38e6fdffa33ef..74adceab3ba16d0a2b7c60e9e96305a9718d8910 100644 GIT binary patch delta 2018 zcmV<82OapT5bzI>B!5UyOjJd{z`(~lE^2grK0i+>C^j%1Buz3r8Vn9@Qe;k8VgJ8o z%x53}05c&aD-aeM&)nvzvCJ41AC^5J3kMAr6&H04F+~m`z`(%XkX||f0004WQchC< zK<3zH0003cdQ@0+L}hbha%pgMX>V=-0C=38lRIyNFcgJn_rkliz z>vYK5&RFsMSs{H4e~G$=XqB(488422vTgP_4mqTtm+#0@XmF9XZ2E zdO&UsUW^UY_J0-$HG-fFy`AeYK4=^8=sKr?3jCYzv4Ni?aZ$!$0YOgucaqN{jS|8Z z#G&HS;MZDzRjb}?f~sCMXJoUiK8uCb?#@ckwwjbZH&A#pXv?yVI2%SWi=7S&AN6ls zS4N9<=0&%YjO5Yh;?0Wuk7D^Arg0H2Hv47ihi@s#%758_J&^49`-gu3p6w+df8Ny@ z000IhNkl42HG*iOzNx+jH*!Qcr?bQBjCu^*qbhot;jL@Jb>=8d?+q zm7xOPRt5?w1BH}lLWPhcqO7>DIO-8ho0uB%Y34p7*zjo1hfOh#Z_6+op=p^kU6;KaF1d>3bM1e*U zaxcm{P!Hws1n2}h4R(r#=f`*=ZXMzNQnhS4ivid{o&ZpsN2$6-pra@;Ks{6dNHle4 zvF`x&P#YZthDz2!DW)IYHFhf?xW;x5gmb01XMZY%ca8)Vq5gj}#&0VFg_MCp%0O9J zSznUY=ak(o{&@UMU-{8%OI=FYbxB-S`{&u3{o< zl1K>eiTu)>J>a1kd;S4EHHv|J^kdoQGf>v2S&YH4zSHZP$LVe5_k38!DMB7;ZwJT|+2N`e< zqeazAqB}vG>lN`dJWAGe-y|%DKK%<|_O}+WKoZ?Q!5O@mqRk+X=(<2u@&!bkaqy#F z0^?U*OiiHqzX1db`>sh?zrHwnf_-ocWPf97-A}TmWEiOG2SA}-a~Y-5Eo$R{MANtf zGA#7LEU)5x+pGe$t-}NEBw)mO75hT4Nr+VI{DmU`Sn4vGxkOc^3S6a;ycv&JopD?w zaWfwDaCI}HtgNi8tgNi8tgNi8tXNUA5vb*bY+6#RN)gw+N{Wh9zN%|U0+N!}0Dk}x zGGK(Ns+yFmhd`7R8w9Ev0+6ighH}PWu{yqfdw{43M<}YzM1$c|0+5nz15HHNk6lEv zSxa=HqHWry3xmf2K^Ku4u+eM^5E9wQeB4n8)KF};BevAqk60p)vo<4L_&cO*PG?+M z0GFo&*`Qr)8%kjU=&3X`35@bz4S(SZfv#rA%F4urpAUkx$p&EK5!w|U=%$$r9* zpYxvrw6Y!O$M+&iqrt4nmOQHmQFvylI>YO$2Ov?W#d`@pX7{A(*dznRR**O|{nj{c zvx3Z!S;H7hkO${Y)u~}xJAlEjjFn7?VI<-FrTb*Byc&9-OZ=4zpZN>0P>~kEEg!_CL*}F_&>Tk4V&iH zf|929^r<@CSXbBxjGCip}TOlqS zHnFq#t_uk_iUv&POVtq@ff98n_X&elfkmG$WVsp7z+H0tf$Am%M1N1!IWph?&aJ`* z#UwQ_D=X{o(Oovjm9yVhsw^Cy>wwD1lYUow9M36VSTgdI;|tp@ecl~6<)zwdx ze2K*H-ttKzB$sQ>c>&N^EJa-s{ZpAY)oZ<{*O-JaD zqh5wHb>QJzy9lP3@_&@07sZ;6@QF;P! z3Xsba@}6?kZlLY&1e@RO11^-JN6hAK>?uzXa_JQI;agkSXEUr>f1M*^LP50A4By}> zIMW+}w2AKww^%~;JLt^@(A0P4v$aShDiGh;Mm@~SCN*#Hlz)DafYj!fVEJyQp&9H! zCb^ZkMdV2$a)j~*leCHM#*>wmm35U8&()7=-+g;W{jm+43{-lb#sHnhGd2*@#_;W{ zg=g|n(kGD~9^Z2x$M7sd2Y{ToLAkxiil#XXG+K;0KVE_)0_uOlKz_J{e*R&I=%IBu z=cNwrI8YhkLtD$U@Bkgw05of84aoL_do`W}p7UJ1K)4BV6qO)@-gQe-e4Bvf5x{{S;SKTjkfFA@wDDJV8hSYa3yA8~hm&)nu3 z3=T(2SC%~>%x52|vCRL!W(x-m78Mt2bbWOVF+~m`z`(%FLw~_6#r`&|XB7?X(yOpckob>Esrufx-Ztq`IZw z+ygaGhln8*M|6JB>9WjYS|D^R$MI_nisC3bMWELxUPhwiGoVCqTpK46A7?-f z6!vV7!8GytcVVo>DAPanqP_(ujy~ zN>esj&&SkpzhG#BfRn0fn&gDAycU4T-+vh;oYVRrWht!0)xJOih}I^c3Aq6gOBuvb zBT5o!K4C%F#P$FxD^fSf3B5s3Lkx)zlR#h?;Y=Ato3nI4Nz(yRej6+2pnXVMAX=7c zhs+5Fx7>p5eKQGE6bcW76NMh<78p+QEs1!c{3Ut-@YK_2#-d3wdqLe@h`hYKyu7@;yu7@;yu571DQ;2=Tb`1#K+RQgdCrFcGQ&Ih&0E5`RQ;X5MZu0aRjqwqS0lkdIg__me(Do%jnRIxpKc z0Gw5*4%j&xTMXfS%3Z<>lpN);-Vj`?Dc>-PxTncF*reVUkby z#dH2mfJUi0ttQitGT|`kvPYgpIZI=nQL0Y2esTvvRO?}zgU9TeR2`XQz<<*TB$n2t z#SYSOU1m+1rkQpZl(eZj6%4D>VG0VZlhat1eRmQ^@Rh^xnB|rHN2c?7tffuWf!k?H zGqrY-h?{aS$hRVCrYw<1P>K8>nY@+;V5;Rn`cxel=hH#f5KjotWgtJOw-2Ey*e^@J zvlTfc`c$2w9NpURq#o9a{(q-MZz2yu4n)O$1Q+&}p|t`?m#Xu4gTlKh4mi2kzgc}4 zf-NsVPSbmuRGqr73*-!rwoto7?=1f>gTDF>Zq}XqE7hjz01zB*y+&uD7KoC&B5Z5i zd_&Wv>g2a3V+YnuS0wnsqM7J9(UAhR7-zToRGqGR?Sv2SHp2M^Wq&jIg9Reg2&75X znVaGg-KH=WTXZ4;j_IaYm#RZ&CQA6K+$S+vWw`0nO?RGqyydb3K3HufEEwx+wFXg)= z>+2lw%)9`g+xEEN2!BcC8go7YsIRiGeKv?5J+;m2W^8$M*4rk!6`mvXLWkn%88!(9 zw1z!&8>mmi83u57u007R81jUD6xq5C_o5)X3RNDo&s+nIUp!TX;%sCkAb)C&c~`CQ(X z?qX^h!LDQ?bBS9>9w$Q2P#$2AHqg;{yu7@;o+Za)^|e}d-Cj_?Z37zvh1x|Mpv`#t z25j2s-o6@W27ezReh{hQ(JkvZx+M#(08-`+!ugvlYns(Sy~nWQ<3|ujK+TUCNDt>Q z&RYfx3r)i*t7^FQK%qqpJsyPyXtg?^QA1Ne(hBO?xDk-%4;@fDsW_e(ThB3Ou(Oc9 zFLVuL+c9=n+XCS)9XcYHKnpIe;|g3~WtINT%gf8_*A~_PRK$D8lwQPn00000NkvXX Hu0mjfYa-31 diff --git a/icons/obj/guns/manufacturer/inteq/lefthand.dmi b/icons/obj/guns/manufacturer/inteq/lefthand.dmi index 84707c2e5cdc429dbae46840a43cb4eeb228bf53..7ed89aacf95e8cec8e47e3fd7494a93fffddb15a 100644 GIT binary patch delta 1655 zcmV--28j9RDEkbM7k_{V0{{R3ySl zcQ73!PFP`TbbTTsB26+pZc=0#3=Td&Pr$&yEiElcNl9Q}VE?~nsjLCTY>%v;Y7A0d!JMQvg8b*negK004@5R9JLGWpiV4 zX>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33t zGfE(w;*!LYR3K9+y);jWi!&v&s2HS$i!-e#F*g;&Hbkh&%qvMPj89L^OD)PwCa5~i zBp$4Rpu*zpTz^tk7U!npQmm}t>gNIu0s!7iO)%izcJ}}P1vW`UK~#90?VF2M+$t1? z5gbY6V%unFt>gPY=Gj~W1adj`Qdjq{;{>w#*+7QXe3KG_LZMJ76bgkxeL>y4Q|qI? zl-+Kgzg+Ihio15)!Pbk-<#Nb@(_!2UxVzk!75B%CgMaGQnaz=r3MrKyH#59>DEl~< zA9?6xcz<~~vc`fdLLtMgRlXsYZ%gUh1u9NlmSyYG=7WqaWXo=eBO0 zbkc^>^Sz=_C=?2XLZMJ7)Ylf(`ft7$(wf=d&rYK+%Ba2J{p>W>N{E0uwL;j?Yx5Br zv>vQ9EPpU8a$^cvz4E$F_`T$^(SlC!BiZBA6B`{CVipl`IN(wWn7<)|MH9S)j*YEu z*|}bO^zN3emXD5l95t70f}g=Ia7d7Gt|S~t#W}NCFA3UgxNSB@yYb|F_UPR>tP*54 zC#Dpi=UFIM7;FOeh`R*2s{|G8ly4Y(_c&6m4u8D^AJuPUjByDLKW)j5B+Ot)_gAms zE%=_@JX`ecfRCN2>{F}+{1I+UT=rp>248mWB5cyT13p|Rn-09BFNYVDrRY!o{{nH1 zM*BX~BwRk+e}EUQDn3bSnr8RTtNBuv`u-I%#=WUJomgQ$HXRfSg+ifFC=}`+(=NTE zEq}1`adPx-BLmO(x~Cmx`BRCl8$5eoy~Zo~c^k2+4!7_F=irwDhAI}f`eB1I%XM}Pb^ zro=qYFaQte)_jlnrHFhl^a%~wip!+e2x08N>#g_@C+^a z8z^0s@tt?K$P^J06m?_?=+xF$#(!gsT=?FiInXs;ba0JLyL)(w2yX#_Rb9vZ8&3BV zgbd2)%4435?_+&-e-954W}aK-3D8Z`2B=dZ`xW2wJ%ld!3a+^}y8sYA86nZuSPlX@ zv)S8z5(o4qCMXmNg+ifFC=}}J=}qw7d*}$>JNvNQe*A5>uu_fp>KpPb#(xJK;D2ol zt9ucw6GWPL&;H-Vg!e*wEhbs;zjcCDWjiMDKRF4#L{#==n+D#qxF+Jg5Hu(=m;8?; zRuQg?ivQ)$!KEu_;eWGHOGITKYJ+_P?^)0j@m_FXe1ak7{0|NSq2Q8gJ#NLGk+X+vB|?Q}I7otS~WLz#yM#m;a@Rg8x+n!xa6~ z=f%FrGJAmP`r`0jc2>EsA?O0HQi5TcHWFNpsr#NotviqQN$Uhf`H0-rsEpf5?g=Q( zKI1C;OJqO6+?Dzzs)v)=H=9{Sytm|@b46(@Um0OF{|n;TCg0voeQ-|T@MD&sB6N?81c#)5qtKoejo4oFL3txUz?x>{^uU)t|NBsH+(bEb5D}C z)&H*T&+Xsj9~1TE_lEWxlYc^Ly~n(zJqq=&=|9D^M7B@U6hr_3002ovPDHLkV1n!8 B5!e6# literal 5223 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 R+@{^9c31OGsgl{N{|9D}614yT literal 27978 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 Bw`2eS diff --git a/icons/obj/guns/manufacturer/nanotrasen_sharplite/lefthand.dmi b/icons/obj/guns/manufacturer/nanotrasen_sharplite/lefthand.dmi index 24ac86c3e0b57784ad56ce29232c14d472ff1248..f91c263424efe7cf547c4eeae585c06d7574330a 100644 GIT binary patch literal 35330 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 D_;=!T literal 38892 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 DcaGD} diff --git a/icons/mob/clothing/under/command.dmi b/icons/mob/clothing/under/command.dmi index 6ed86df85dab628d52330c1b174fab9ca139d689..4935f41abc822aa87ffb6f4be4602082b4baa899 100644 GIT binary patch literal 14750 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 diff --git a/icons/mob/clothing/under/dress.dmi b/icons/mob/clothing/under/dress.dmi index a67fcb85331fdf26ee44ee9dd8594b846749cf3a..f80030f1625df4cf5a62e8a26e41e0b9cfdb07b1 100644 GIT binary patch literal 25843 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 n+7&_fK7l2YB)V&rKw>;a?~ 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 P6Jm0~+^|d^{qVm4nQ4Bw diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index e3ceffdb332989e3bf9c9e05c299fcd2c5383b4a..63ec75a06a0b2b4559c8989ba18dedd77e729ee1 100644 GIT binary patch literal 16944 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 diff --git a/icons/obj/clothing/under/command.dmi b/icons/obj/clothing/under/command.dmi index 17b8285232fc8a1d5036e1b3fc58008cf076e4f7..ca0c7735979e18493c07bd8fd5decfa85384dbfc 100644 GIT binary patch delta 4818 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 literal 5341 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 diff --git a/icons/obj/clothing/under/suits.dmi b/icons/obj/clothing/under/suits.dmi index 453cb656de8972c1e1b151698d86438e956ffb06..bda067487f9e7dbe607708d802dcb52da4149a60 100644 GIT binary patch literal 7877 zcma)>cTiJLqxTa!C?E=g0Ro6hXi}s}N$6GSO?nHUR0~KafD~x~rAQ6Zdl!&ir8fcT zy-Q8#fxyl0ndd(9-g)mk^Zs$p?#}Glo!v9%``PdJeAZM~qND&(0000=6=ivCeA$Y> zGRR2qcO!_kDZaSz(lz`b4}Wj{?zQWO*DlTgfJbV4Tw8cM|DBNGK^-D*QyVw$lS)Vg zsc$fUZWj4V#&6jP%}sA3^fh-q$XRmtBaA`=~nb%K^4Lpf5>9xA%tsF`i z%^n=qwjtT;?X^+?@IBmY3Bm)w2OPrw#XEX(RhE|Hlz!pfQ= z7Ea|JG&Gf}$jms*pdhIpp>}4!Bj$9*#LQT4OsrUK>_nqr91L}id?uAaRtHdQyF>U$ zTA4K_nAK86cJOj>jr*XXAkpAN`;1Oye(`yHLo>Dz(|piS>)eFpvfz*U)zazd3jjqW z+7phPgPZ^$^REaPva3Qrk$@Tn2Tq*C`OjzKy4&3GwVOKQN&P(?^>nKI(!9pW%>%n* zvJAAa57E@yKlNIr8tN}Ci}#6UXQgu7HWRQ|3(#wrpn~PhI<}M-qt?-*gnNDKV);~K z*U@p_GF-toG2<#@)3&R3-ssGw0LI>1J3~F8B;IV8)`I#hMj*ZYx+-YwI<_@YJth1) z7VH`D)7BlKoSJq%cE%OlO$m)*%Xo>rd9r&yR6g*au54h`C?{{F&zh0tFp3YFsxCoA`YrU8g`Wif zjxIQ}ImHOT14ez%X;-hk{pcQ&!pF1bx1mmq2xf&^hufnTn-Mid_(ExP4#kTGo)vCRFCw__SPPe>3Ia!dZKRTp^j~5ZBQnK$z zSb@}b-GHL4mi}H*%(!JrNreX|_DTz%Y2<~8RkyyhiauxIUJ1gi7~6zjeCySCv6hmG zOuAw~wQS*Hn}6C08w>b>c2K{2bmF?)^|D&qOd0FGP$%Q=Fs4qT2Af`sXlN-)&7`$c zA{sINxp@rLpVRy%ImXJhkMl^5DYof*8SGmy5NWgRJqrmZt4s4BOiAnEGakA@5{3J7Fk`(xDa_59ho%%L6b3TfnowwEK1^&_e z$)3GGJ5MUtXRid~FpLIZMjoITuo_Vj5e^G0s{=m9Vrhz9YPi+*9_p#MgAX7Y6zvR* zm6L7_Q?kxb{v&wob=>5pOV@HAyDiwvPi+$5y{U}ITf?pUISaV#FOuq)nK&f8rezSx zF5AYDAIteSTvA;O->;by*yWmkekC%1I4$XrhzzE|($`jVsNzmTV$D}H{oa1MZUCha zKNd=ZCx)XOs-cLLCwA<(QvOSUvrY6xsI^P)5J2BECN$9Q>~C-UwTlcA=C#G3c(SC~ z1$5s!l$ksbmAq(BBIpm*5GbTRuuYnltNX2i`bgiORv%N_;?b=vg3H?QQ$O9=0xcyG z#wSSlzgc8clI@t6j_91XTw7e%^s8f3j;*Wc#73mmULvw^!3_cT$@zvCRSQa<`shLY z#ax%wS{X9gIsqBqrmlBf-Fj3yRnh1!iw31HEJb|a@XvdwKH2pyRdf^dMmeUvW7fK; ztW5aGs)0*+S%AW#BNc@y=&%c6_+*-C1Qqi>Ervsx@-)(;6(b!mj3x;#LTNt+LbK3o z4-D45-L5q~Vv_#^fQ?4Jm(o z!#FI2naJ?wDm3<_DJGe3Y7s<0-CK`EZFMIdIYM*F`tkN1D`9(|x32)cyNFG~&P`w=)W5+74lge(1Xb~HNn-5n zLaB{>$LZ=P_u-2bwsLij7UGwKzw@T$Zk1W1h@ucPX?G{cSh>V8F9rMxrLQt$VT=wJ zftlrT5q}KCL^W0y1b`hi~LDQNx48clt7^Z zHU=p6>*mui-Mx06|67&GR20zn_v0>Rq=_TarwHrX0bQegHQwK{N{SiJQ8r?JQv{u> zCVl5#IkE}ds7Yn|g0!;i~CZENdA= z6Q))^D8?Azhy=KApq+qk3h1PJL1FTU{slv$q2NWBL^zgnF6f5m?PDiLUS`wGO zh>makGC{^JH(dIJWZir+#0MQwgZ;f&6XUXO3E!HYKOeUd*>-(tc#)ZD%qi8f%3X3{ z9K|n)*IQMFo^|z*@@fA^FX&6R(Sau&)=C!& z_*Vv_5hUmt-k*8JTp753F0SWuVbnhKH;nE>_t-W)AG9Ijd41Xh8~0XpnNHUk_6n!m z=>X8SYWTIJyUi|Ro@okqy;S3PT;p(CJsx`34CQafkzpP5<|;D!RyJCA1|Za|$cXqg z>ER3jB1Oy4mlxhqnd9-l=3QDvhfc&h!U&ws#}MJc`NPz{t1(DT?g>}%2Z!jUL^ z`ql;zRv*FFaMR*KeG!@!>6Q1rAPuAHdUIZRse;i`#BqnOZyqyS*uYO$mg`iuV>2VY zs*BBw^e(=fPc5&zT}t^ z0Z?dBdYx+6nmh9HzbP!D%!UyDGt;4`W;BFFRU-w$g468@eP@?zhraTS*tekln$B%q zetV>}kBo#G{8|l)Er@A39FmCIDQihLb(_%JO)z%0v>{SHIy&-{ni`5+IT zKj)oP9t7L5K5mk3&|!CFx=(y_nD^&?xsOP4i3O>lpUmCa3mEZk^E52%Y8et>r^Mi> zb)DbB=u{Jd8KuU#e7M6pL2lac7)=}SY8kglqElf;e7LKkqEfQfaY_AkEsF(fz%+M& zz1ZB?NcM!_D1Oyp`ke~%3&jWO-PD#3*u@MhqfQ1HJ9Of-knVX?AfWsK@;G>Uema)$ z#AG@qlc%QPIYrE7UisuBbNM)=pEHsu^GwMLyH*f$ehi7&bB-ohyU<7zhvOIhQ|fMO z5ua&&9Pg{jPl*~R=%8pMQ5-3r9JNXTy&} zwLw`lfP~YfjzJk^?ua`S))w!@Grf!4Ycm)Qm1(far_>!CH{=(r+;lsYXSOj!aBqt{)w|24m^}Q6K*I!SIQc(Gw+F8IoeCkTbdf z$z5|1k7MqSudiR4FcqXiM*68+(M^Ma#b%PM&1q#Nexri^dmnc*^Uf+JfBV~W@|irq zp`ZIK@D>`;#z;!$f)87Th`(bC-|T2^i~?NDOpW2s+dqA!9$`VTeBWK>_KgV{je&y~Bp@&f9aObKHGV<+1_1cg{u%<~QvW8Y@HD7@EH4>2$1 zyR22S!jylNB>l)Zz0=SAveM^`K?Q-l#R7F#XuCC$bofQfg#D68^=}@%M}%Bi z^PJJnpJbNh74Ff2PgW#NiL3p^NiG5ne)v2XJ+}_n9fe;wd-)`7kL5nVYqLndrWZq? z2Rg$2SjX-5w*~3xu`!*W-J$L5_(PZa#`ULF8fjg@=Le@`7Qw}975tI};QL2!ATud9 zXPgb^ncP9!p}8vsjr6Ps{^P;)wbP}6o9W)sB_=<=yi65~J^4Ek@e&11D=}|L*VEUp z983`d3z%v$UOXO+;I24=OdZ;5rR;*GKa{I-p52VQOG>%PS zxTnVoIp-^(rmnh75>V+ATdWEdfr#7OtCk1dD&L@nla{qyi|@?n4W?|Dv=Z|b+2+!O zkpxJ(d<98F7{KEsnPD{<%$F@-BTA(!m`()@Ra!>dXlK{0{lBUdlr?%I`7Gy_eA z_j0MJDn09AmMG@R5FOjEezxi9sF_EC&=n!j_RE+7%>60=vc^Xt;#l&95JSqLf&gh4 z;eEckZSl2Qt+}8r`%NTDiv36ZB{yHnOxw=USu&L!z&UGpadC^I{ol0spCphpC&qx9 zC{|tmWrF^nxUlz$`VUj0!QnTF{@-kvB>W;zn1n?i0q%n%BrD$wtL?=8x<1@^0v9!K zVG;WU!R|lmH?I*}L#s*V{#+UIo<7{4pQ^g7;rxo?>!C+UdMm`V$bR=J+n%V(^IXL? z9t}O)L4u{;Y;Yr)wEV6=Fd5f6!}av^c30Fgk%Vw>A_V4an6dRppDzqxuhe2soy(hX zHTGKrBiYWT-n3#KRpjE=E3LXrGaBv3wFZN(wcokW^qP^s*vgZIw$dY=3@k0fZpRh8 z%-LOAvq?x!?u*Amhp{hTsiDt025G%9ki^5y9npJ3%^{Xf(AK|tONoIN%mVwC8HqIn z@I^pI92V*(eq?!tOlz))mUp-FNQx%GZ z95s3~(j28vWFT@)jqrj#vMv9Zn3&deHZJ1U3nd4ln%mOH*UBtSdo%x5eIx;%0!C+l zKq8kR9IxIDk){7PDPXP-+2otU@Q9oPlW#@bECo?}Twwb7L|a_(7_Dw_BFetXK7WWt zqwzAPkwX)MnVg)gs;?Ipf%nliD=@~-j*^wH7M02Mz2oQlIq#%T79iUqQP2C2C9!gm zduZ?`d*vE!MI!L{!pdLtP7~NnM!ruy3y_nqB!T_;&*&>Aixh8a1@DU@iPKp~V!nOr z8K#>}ef~ZZMC`~YU81liP$aFZkDEhC@*_f-4ZJ_;`TYpbTk~D_+fztATU{}TYgrC3 z#}rU&Ye7%mzo%s_BPEs#r=;+=xbfS^6-3XBE>iYf5^6gqyN|r3(bd4|MiWFu4UUc0 z)rsjmjfVdnFNi*a@4$lN(@n;*Eyf-_KREKAc%h#${c?2#pl@C zF*_F3J|jgDb4FTu7MzJ>mJqQK4#9q=&)zeQXX|M9D~D-ANBiZ-3)0W52V#)@ysSk9 z1)nzsh^xfG98+MRP0sz*u?YHByrNg6bL&I&>6`U&nZye|a!#T;R5_aNju0I)N2T!L z&smDqtyPw#YT-Oy7Bq!Qu;Y&owB^aCJ$<%0KC!uKqXfZuAHM(@2>-U@%pWdqwLB_2 z*7Wg$5@hE=%*o&Amy_r$XIKQ?y(c?sni|lS;u3R8S_XwwEPG!(Ah(rT-e>|qs>qrh z9kZ7*&zyGNk6H-_NIWMj-DU`G{2-fNHdEB$7Jc?D6I>Q)lz5+C)YmYfy&d%ygkF9J5N=U6m=tOW$?n zK~jG9REr04`0fx+!bSSa`9WD(ff z0o)Rj2gw5OaczsTCYrj<-Y(tEK8#b6n$Z*V>5+bVuTmMju7x}uQnghKp&=tW7kV@o z;(olNjA33RS0C=NqBr?qsm$EBEfDsS8cWI4$gyf33Xj+>rN!uPZf>m z=bLFl@*1BwFNLG&iTW8mB>K446ZiO>bb3ciK}Pp~$WBxfnbC=+ZLNqh;ZJYJWu*mg z_Zl=g&AW-;jeL}eK#xMCHH1J0Sz)1Yy_}y?LxUydQv>q%ZhVB$GEgnoxi} zypmrRCY;@|kmIi;WoeEG%~J{&{1N-b{^B&O50G({{pmQPGCaTYQ{r+Pd}+O8K?C8X zSA5s3orauFbt-9H2@VMBQhz&*cH~M|aC^p8(ev{T*aR=ZWnlf`j?7gYk+RnPS-mI% z!DCx++170gGb2Fqsa1uJiMwPDHDMTSWu}w|9oWQnqVK>wvck8Yo~>Z6lps>*VN4Wc zetG7{Rgc&oS`$ZY2o*%is+v&#vFj{gDEM$mUS*o*+2Zcrt*JcoJu3qZ!50U7XYX(M zjM9eEnTu^S0>CktY%=9h|MUcxhCop}`$WAkRk?LlL45z)l(S2eTW2}+t z-J%a}IX96ANg(=g>ujDAJlD7^$-S>%`^UmDzhiua#Og^71r-}7(c3^tSgxd|yS7JP zR=OgIUQ8wRFtoqcpD7N$fzJYCD($Fx)@Q?dzYa7`l~QP*F8F#K?R}}Zhi~o^b+aSV z81`s$CY>7NURn@C4sxIGevKl|Z66cN4}YvlGB_SziBsoMA*p ztnsVdVf9JQzuNd{jIAm?((>{T?=lp0f7Vh9q9_qYo5d_mGar6`H^=coegCa8BpnM6 z^7pvXI`uMO<18~VbR{ALK&T~f!@=J|-y}(EE=0r-7JdN>xM`WZml>7d!o&^t|b*DEo%53cCNbEBH#0R6v{a;gnjZw~*p=~>Et0y~?-dyJY z-(UUemipl>z7_{4wA^iV(-t??yE<@nm14))@KfwK(4p?i4VK*Hg#@=#(d~+iCHea% zo^dXq{qo`uggrg8BC%Mbnze$>sVG^dYXkijJD&PWk%ZLLAyrj(_xz(;CxGVl^QtG9 zE78UMTi49pQGh;}qdk>`|CDqUih>=1S&w3BJJPIibJP#RXw7Q=x=p9L^~0weyQ1}r z9X_$UuqfGwIXZgv`ZZ_&;2@k^zt|#z#VZb1X#OPSG6zJ=8<^`4nrd!gz2b9IJf^&)vVzHuFB&d(;e;S+#j+TiXrsyl()>K*S3&*a00-M zEbdur24^`Sgb$plIQ@-H7Hk`gHRqD7InWcj@R&EJGVdp}W1n!m z9lqJzO?fry!1(W>w+<25B`mT;%S({f;mq$?#{TYGzkzo$QuRd zun_bi-QQ-rGIplX1U&;nn1eU)@tB(3(3UPnCF%Q`g>u;oTiy7olx}snS^|${#C=|? z$Ht;)uluQBEtrqfY45$ZmL$i845rg62N&BG|4n#$ zrsT&;b8f*Z(NGq^N%c2liLcD-4-<`j_$R-%Pv*}) ze9~$?6$Zo^nd}qk!)xPFP+APs zp%};_xbP_ndOe=?c=q(7NOfh5eVsnFo$FRf<4ACR;rX%rql?1x+;VZ4B`8*g4&|WTSMjRBa2++O;vR_uP8f5YHHT_WX?88X$V^CydJ!9`N5#>*%CzT>A!Ro(?Le|FXdd; z^TDngEZFcALz`lz+NkNGnW z`3WEr4-kf>5`HEHz{Ay;NW5jYC)`?Vy<;1l(&|sHx}@}W2fCQ~05O^Z#$bZt@N3_c^ZdQhdg literal 8212 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 Date: Wed, 16 Oct 2024 16:07:30 -0500 Subject: [PATCH 016/274] Automatic changelog generation for PR #3565 [ci skip] --- html/changelogs/AutoChangeLog-pr-3565.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3565.yml diff --git a/html/changelogs/AutoChangeLog-pr-3565.yml b/html/changelogs/AutoChangeLog-pr-3565.yml new file mode 100644 index 000000000000..35bd0ca43978 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3565.yml @@ -0,0 +1,7 @@ +author: MemeSnorfer +changes: + - {imageadd: 'Resprites colored skirts, black tango, red evening gown, sailors dress, + sundress, white dress, and some suitskirts.'} + - {rscadd: 'Six pinafore variants, white colored skirt, one shoulder dress, and + iko-ikssoal dress.'} +delete-after: true From d922c74db6a85fe135150d0b0de22dcf12f281b2 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 17 Oct 2024 01:02:24 +0000 Subject: [PATCH 017/274] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-3291.yml | 14 ------------ html/changelogs/AutoChangeLog-pr-3535.yml | 4 ---- html/changelogs/AutoChangeLog-pr-3565.yml | 7 ------ html/changelogs/AutoChangeLog-pr-3566.yml | 6 ----- html/changelogs/AutoChangeLog-pr-3570.yml | 6 ----- html/changelogs/AutoChangeLog-pr-3573.yml | 4 ---- html/changelogs/archive/2024-10.yml | 28 +++++++++++++++++++++++ 7 files changed, 28 insertions(+), 41 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-3291.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3535.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3565.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3566.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3570.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3573.yml diff --git a/html/changelogs/AutoChangeLog-pr-3291.yml b/html/changelogs/AutoChangeLog-pr-3291.yml deleted file mode 100644 index eeaccaa29916..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3291.yml +++ /dev/null @@ -1,14 +0,0 @@ -author: Gristlebee -changes: - - {rscadd: Ice Lodge Ruin Map and areas} - - {rscadd: Simple Mob Frontiersmen Flametrooper and Surgeon} - - {rscadd: shoot_point_blank option for simple mobs} - - {rscadd: dragon_fire_line supports igniting tiles} - - {rscadd: 'broken display case, gunpowder barrel, SRM corpse spawners, chemical - jug spawners'} - - {rscdel: Cat Butcher} - - {bugfix: Frontiersmen simplemob pathing} - - {bugfix: Fence doors spawning open when they should be closed and vice versa} - - {code_imp: 'scattering can be disabled with auto_scatter var for bullets, grown - items and nutrient bottles'} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3535.yml b/html/changelogs/AutoChangeLog-pr-3535.yml deleted file mode 100644 index 75570ecb113c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3535.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Bjarl -changes: - - {rscdel: South Bronx Paradise Bar} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3565.yml b/html/changelogs/AutoChangeLog-pr-3565.yml deleted file mode 100644 index 35bd0ca43978..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3565.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: MemeSnorfer -changes: - - {imageadd: 'Resprites colored skirts, black tango, red evening gown, sailors dress, - sundress, white dress, and some suitskirts.'} - - {rscadd: 'Six pinafore variants, white colored skirt, one shoulder dress, and - iko-ikssoal dress.'} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3566.yml b/html/changelogs/AutoChangeLog-pr-3566.yml deleted file mode 100644 index 1b84c6b5b804..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3566.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: generalthrax -changes: - - {bugfix: Gezena has shoes again} - - {rscdel: Gezenan captain gloves no longer have partial insulation in parity with - other captain gloves.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3570.yml b/html/changelogs/AutoChangeLog-pr-3570.yml deleted file mode 100644 index b3288d735ec1..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3570.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: PositiveEntropy -changes: - - {imageadd: All colored jumpsuits have been resprited!} - - {rscdel: Rainbow and khaki jumpsuits (including the buster subtype) have been - removed.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3573.yml b/html/changelogs/AutoChangeLog-pr-3573.yml deleted file mode 100644 index a1f9c3c2d60e..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3573.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Gristlebee -changes: - - {bugfix: Shotgun calibers and shotguns being unable to load certain rounds} -delete-after: true diff --git a/html/changelogs/archive/2024-10.yml b/html/changelogs/archive/2024-10.yml index de14222a175e..f53f84907a32 100644 --- a/html/changelogs/archive/2024-10.yml +++ b/html/changelogs/archive/2024-10.yml @@ -210,3 +210,31 @@ - balance: increased amount of plasma in plasma internals cargo crate - balance: rebalanced the probability of a grenade going off in one's hands - bugfix: fixed fauna spawning after drill malfunctions +2024-10-17: + Bjarl: + - rscdel: South Bronx Paradise Bar + Gristlebee: + - rscadd: Ice Lodge Ruin Map and areas + - rscadd: Simple Mob Frontiersmen Flametrooper and Surgeon + - rscadd: shoot_point_blank option for simple mobs + - rscadd: dragon_fire_line supports igniting tiles + - rscadd: broken display case, gunpowder barrel, SRM corpse spawners, chemical jug + spawners + - rscdel: Cat Butcher + - bugfix: Frontiersmen simplemob pathing + - bugfix: Fence doors spawning open when they should be closed and vice versa + - code_imp: scattering can be disabled with auto_scatter var for bullets, grown + items and nutrient bottles + - bugfix: Shotgun calibers and shotguns being unable to load certain rounds + MemeSnorfer: + - imageadd: Resprites colored skirts, black tango, red evening gown, sailors dress, + sundress, white dress, and some suitskirts. + - rscadd: Six pinafore variants, white colored skirt, one shoulder dress, and iko-ikssoal + dress. + PositiveEntropy: + - imageadd: All colored jumpsuits have been resprited! + - rscdel: Rainbow and khaki jumpsuits (including the buster subtype) have been removed. + generalthrax: + - bugfix: Gezena has shoes again + - rscdel: Gezenan captain gloves no longer have partial insulation in parity with + other captain gloves. From e9e1305b9c6115b8fccbee4c2a6c5c1ec92b391a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 00:46:45 -0500 Subject: [PATCH 018/274] Automatic TGS DMAPI Update (#3245) This pull request updates the TGS DMAPI to the latest version. Please note any breaking or unimplemented changes before merging. Co-authored-by: github-actions --- code/__DEFINES/tgs.dm | 100 ++++++++++++++------ code/modules/tgs/README.md | 2 +- code/modules/tgs/core/README.md | 2 +- code/modules/tgs/core/byond_world_export.dm | 22 +++++ code/modules/tgs/core/core.dm | 7 +- code/modules/tgs/core/datum.dm | 2 +- code/modules/tgs/includes.dm | 1 + code/modules/tgs/v5/__interop_version.dm | 2 +- code/modules/tgs/v5/_defines.dm | 1 + code/modules/tgs/v5/api.dm | 7 +- code/modules/tgs/v5/bridge.dm | 21 ++-- code/modules/tgs/v5/topic.dm | 4 +- code/modules/tgs/v5/undefs.dm | 2 +- 13 files changed, 125 insertions(+), 48 deletions(-) create mode 100644 code/modules/tgs/core/byond_world_export.dm diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index e2c89df90e9b..42f2d5fc31fe 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,18 +1,19 @@ // tgstation-server DMAPI +// The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in IETF RFC 2119. -#define TGS_DMAPI_VERSION "7.1.2" +#define TGS_DMAPI_VERSION "7.3.0" // All functions and datums outside this document are subject to change with any version and should not be relied on. // CONFIGURATION -/// Create this define if you want to do TGS configuration outside of this file. +/// Consumers SHOULD create this define if you want to do TGS configuration outside of this file. #ifndef TGS_EXTERNAL_CONFIGURATION -// Comment this out once you've filled in the below. +// Consumers MUST comment this out once you've filled in the below and are not using [TGS_EXTERNAL_CONFIGURATION]. #error TGS API unconfigured -// Uncomment this if you wish to allow the game to interact with TGS 3.. +// Consumers MUST uncomment this if you wish to allow the game to interact with TGS version 3. // This will raise the minimum required security level of your game to TGS_SECURITY_TRUSTED due to it utilizing call()(). //#define TGS_V3_API @@ -52,7 +53,7 @@ #ifndef TGS_FILE2TEXT_NATIVE #ifdef file2text -#error Your codebase is re-defining the BYOND proc file2text. The DMAPI requires the native version to read the result of world.Export(). You can fix this by adding "#define TGS_FILE2TEXT_NATIVE file2text" before your override of file2text to allow the DMAPI to use the native version. This will only be used for world.Export(), not regular file accesses +#error Your codebase is re-defining the BYOND proc file2text. The DMAPI requires the native version to read the result of world.Export(). You SHOULD fix this by adding "#define TGS_FILE2TEXT_NATIVE file2text" before your override of file2text to allow the DMAPI to use the native version. This will only be used for world.Export(), not regular file accesses #endif #define TGS_FILE2TEXT_NATIVE file2text #endif @@ -152,16 +153,17 @@ //REQUIRED HOOKS /** - * Call this somewhere in [/world/proc/New] that is always run. This function may sleep! + * Consumers MUST call this somewhere in [/world/proc/New] that is always run. This function may sleep! * * * event_handler - Optional user defined [/datum/tgs_event_handler]. * * minimum_required_security_level: The minimum required security level to run the game in which the DMAPI is integrated. Can be one of [TGS_SECURITY_ULTRASAFE], [TGS_SECURITY_SAFE], or [TGS_SECURITY_TRUSTED]. + * * http_handler - Optional user defined [/datum/tgs_http_handler]. */ -/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE) +/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE, datum/tgs_http_handler/http_handler) return /** - * Call this when your initializations are complete and your game is ready to play before any player interactions happen. + * Consumers MUST call this when world initializations are complete and the game is ready to play before any player interactions happen. * * This may use [/world/var/sleep_offline] to make this happen so ensure no changes are made to it while this call is running. * Afterwards, consider explicitly setting it to what you want to avoid this BYOND bug: http://www.byond.com/forum/post/2575184 @@ -170,12 +172,10 @@ /world/proc/TgsInitializationComplete() return -/// Put this at the start of [/world/proc/Topic]. +/// Consumers MUST run this macro at the start of [/world/proc/Topic]. #define TGS_TOPIC var/tgs_topic_return = TgsTopic(args[1]); if(tgs_topic_return) return tgs_topic_return -/** - * Call this as late as possible in [world/proc/Reboot] (BEFORE ..()). - */ +/// Consumers MUST call this as late as possible in [world/proc/Reboot] (BEFORE ..()). /world/proc/TgsReboot() return @@ -269,7 +269,7 @@ /// The [/datum/tgs_chat_channel] the user was from. var/datum/tgs_chat_channel/channel -/// User definable handler for TGS events. +/// User definable handler for TGS events This abstract version SHOULD be overridden to be used. /datum/tgs_event_handler /// If the handler receieves [TGS_EVENT_HEALTH_CHECK] events. var/receive_health_checks = FALSE @@ -283,7 +283,41 @@ set waitfor = FALSE return -/// User definable chat command. +/// User definable handler for HTTP calls. This abstract version MUST be overridden to be used. +/datum/tgs_http_handler + +/** + * User definable callback for executing HTTP GET requests. + * MUST perform BYOND sleeps while the request is in flight. + * MUST return a [/datum/tgs_http_result]. + * SHOULD log its own errors + * + * url - The full URL to execute the GET request for including query parameters. + */ +/datum/tgs_http_handler/proc/PerformGet(url) + CRASH("[type]/PerformGet not implemented!") + +/// Result of a [/datum/tgs_http_handler] call. MUST NOT be overridden. +/datum/tgs_http_result + /// HTTP response as text + var/response_text + /// Boolean request success flag. Set for any 2XX response code. + var/success + +/** + * Create a [/datum/tgs_http_result]. + * + * * response_text - HTTP response as text. Must be provided in New(). + * * success - Boolean request success flag. Set for any 2XX response code. Must be provided in New(). + */ +/datum/tgs_http_result/New(response_text, success) + if(response_text && !istext(response_text)) + CRASH("response_text was not text!") + + src.response_text = response_text + src.success = success + +/// User definable chat command. This abstract version MUST be overridden to be used. /datum/tgs_chat_command /// The string to trigger this command on a chat bot. e.g `@bot name ...` or `!tgs name ...`. var/name = "" @@ -296,21 +330,27 @@ /** * Process command activation. Should return a [/datum/tgs_message_content] to respond to the issuer with. + * MUST be implemented * - * sender - The [/datum/tgs_chat_user] who issued the command. - * params - The trimmed string following the command `/datum/tgs_chat_command/var/name]. + * * sender - The [/datum/tgs_chat_user] who issued the command. + * * params - The trimmed string following the command `/datum/tgs_chat_command/var/name]. */ /datum/tgs_chat_command/proc/Run(datum/tgs_chat_user/sender, params) CRASH("[type] has no implementation for Run()") -/// User definable chat message. +/// User definable chat message. MUST NOT be overridden. /datum/tgs_message_content - /// The tring content of the message. Must be provided in New(). + /// The string content of the message. Must be provided in New(). var/text /// The [/datum/tgs_chat_embed] to embed in the message. Not supported on all chat providers. var/datum/tgs_chat_embed/structure/embed +/** + * Create a [/datum/tgs_message_content]. + * + * * text - The string content of the message. + */ /datum/tgs_message_content/New(text) ..() if(!istext(text)) @@ -319,7 +359,7 @@ src.text = text -/// User definable chat embed. Currently mirrors Discord chat embeds. See https://discord.com/developers/docs/resources/channel#embed-object-embed-structure for details. +/// User definable chat embed. Currently mirrors Discord chat embeds. See https://discord.com/developers/docs/resources/message#embed-object for details. /datum/tgs_chat_embed/structure var/title var/description @@ -331,13 +371,13 @@ /// Colour must be #AARRGGBB or #RRGGBB hex string. var/colour - /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure for details. + /// See https://discord.com/developers/docs/resources/message#embed-object-embed-image-structure for details. var/datum/tgs_chat_embed/media/image - /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-thumbnail-structure for details. + /// See https://discord.com/developers/docs/resources/message#embed-object-embed-thumbnail-structure for details. var/datum/tgs_chat_embed/media/thumbnail - /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure for details. + /// See https://discord.com/developers/docs/resources/message#embed-object-embed-video-structure for details. var/datum/tgs_chat_embed/media/video var/datum/tgs_chat_embed/footer/footer @@ -346,7 +386,7 @@ var/list/datum/tgs_chat_embed/field/fields -/// Common datum for similar discord embed medias. +/// Common datum for similar Discord embed medias. /datum/tgs_chat_embed/media /// Must be set in New(). var/url @@ -354,6 +394,7 @@ var/height var/proxy_url +/// Create a [/datum/tgs_chat_embed]. /datum/tgs_chat_embed/media/New(url) ..() if(!istext(url)) @@ -361,13 +402,14 @@ src.url = url -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-footer-structure for details. +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-footer-structure for details. /datum/tgs_chat_embed/footer /// Must be set in New(). var/text var/icon_url var/proxy_icon_url +/// Create a [/datum/tgs_chat_embed/footer]. /datum/tgs_chat_embed/footer/New(text) ..() if(!istext(text)) @@ -375,16 +417,17 @@ src.text = text -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-provider-structure for details. +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-provider-structure for details. /datum/tgs_chat_embed/provider var/name var/url -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-author-structure for details. Must have name set in New(). +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-author-structure for details. Must have name set in New(). /datum/tgs_chat_embed/provider/author var/icon_url var/proxy_icon_url +/// Create a [/datum/tgs_chat_embed/footer]. /datum/tgs_chat_embed/provider/author/New(name) ..() if(!istext(name)) @@ -392,12 +435,15 @@ src.name = name -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-field-structure for details. Must have name and value set in New(). +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-field-structure for details. /datum/tgs_chat_embed/field + /// Must be set in New(). var/name + /// Must be set in New(). var/value var/is_inline +/// Create a [/datum/tgs_chat_embed/field]. /datum/tgs_chat_embed/field/New(name, value) ..() if(!istext(name)) diff --git a/code/modules/tgs/README.md b/code/modules/tgs/README.md index 6319028d8106..35ca73d7e9a8 100644 --- a/code/modules/tgs/README.md +++ b/code/modules/tgs/README.md @@ -1,6 +1,6 @@ # DMAPI Internals -This folder should be placed on it's own inside a codebase that wishes to use the TGS DMAPI. Warranty void if modified. +This folder should be placed on its own inside a codebase that wishes to use the TGS DMAPI. Warranty void if modified. - [includes.dm](./includes.dm) is the file that should be included by DM code, it handles including the rest. - The [core](./core) folder includes all code not directly part of any API version. diff --git a/code/modules/tgs/core/README.md b/code/modules/tgs/core/README.md index b82d8f49e297..965e21b549a3 100644 --- a/code/modules/tgs/core/README.md +++ b/code/modules/tgs/core/README.md @@ -3,7 +3,7 @@ This folder contains all DMAPI code not directly involved in an API. - [_definitions.dm](./definitions.dm) contains defines needed across DMAPI internals. +- [byond_world_export.dm](./byond_world_export.dm) contains the default `/datum/tgs_http_handler` implementation which uses `world.Export()`. - [core.dm](./core.dm) contains the implementations of the `/world/proc/TgsXXX()` procs. Many map directly to the `/datum/tgs_api` functions. It also contains the /datum selection and setup code. - [datum.dm](./datum.dm) contains the `/datum/tgs_api` declarations that all APIs must implement. - [tgs_version.dm](./tgs_version.dm) contains the `/datum/tgs_version` definition -- diff --git a/code/modules/tgs/core/byond_world_export.dm b/code/modules/tgs/core/byond_world_export.dm new file mode 100644 index 000000000000..6ef8d841b8f7 --- /dev/null +++ b/code/modules/tgs/core/byond_world_export.dm @@ -0,0 +1,22 @@ +/datum/tgs_http_handler/byond_world_export + +/datum/tgs_http_handler/byond_world_export/PerformGet(url) + // This is an infinite sleep until we get a response + var/export_response = world.Export(url) + TGS_DEBUG_LOG("byond_world_export: Export complete") + + if(!export_response) + TGS_ERROR_LOG("byond_world_export: Failed request: [url]") + return new /datum/tgs_http_result(null, FALSE) + + var/content = export_response["CONTENT"] + if(!content) + TGS_ERROR_LOG("byond_world_export: Failed request, missing content!") + return new /datum/tgs_http_result(null, FALSE) + + var/response_json = TGS_FILE2TEXT_NATIVE(content) + if(!response_json) + TGS_ERROR_LOG("byond_world_export: Failed request, failed to load content!") + return new /datum/tgs_http_result(null, FALSE) + + return new /datum/tgs_http_result(response_json, TRUE) diff --git a/code/modules/tgs/core/core.dm b/code/modules/tgs/core/core.dm index 15622228e91f..63cb5a2c3514 100644 --- a/code/modules/tgs/core/core.dm +++ b/code/modules/tgs/core/core.dm @@ -1,4 +1,4 @@ -/world/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE) +/world/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE, datum/tgs_http_handler/http_handler = null) var/current_api = TGS_READ_GLOBAL(tgs) if(current_api) TGS_ERROR_LOG("API datum already set (\ref[current_api] ([current_api]))! Was TgsNew() called more than once?") @@ -55,7 +55,10 @@ TGS_ERROR_LOG("Invalid parameter for event_handler: [event_handler]") event_handler = null - var/datum/tgs_api/new_api = new api_datum(event_handler, version) + if(!http_handler) + http_handler = new /datum/tgs_http_handler/byond_world_export + + var/datum/tgs_api/new_api = new api_datum(event_handler, version, http_handler) TGS_WRITE_GLOBAL(tgs, new_api) diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm index f734fd0527f0..3ca53e9bf7c6 100644 --- a/code/modules/tgs/core/datum.dm +++ b/code/modules/tgs/core/datum.dm @@ -6,7 +6,7 @@ TGS_DEFINE_AND_SET_GLOBAL(tgs, null) var/list/warned_deprecated_command_runs -/datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version) +/datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version, datum/tgs_http_handler/http_handler) ..() src.event_handler = event_handler src.version = version diff --git a/code/modules/tgs/includes.dm b/code/modules/tgs/includes.dm index 23b714f9d064..f5118ed55a3c 100644 --- a/code/modules/tgs/includes.dm +++ b/code/modules/tgs/includes.dm @@ -1,4 +1,5 @@ #include "core\_definitions.dm" +#include "core\byond_world_export.dm" #include "core\core.dm" #include "core\datum.dm" #include "core\tgs_version.dm" diff --git a/code/modules/tgs/v5/__interop_version.dm b/code/modules/tgs/v5/__interop_version.dm index f4806f7adb97..29ea239ad84d 100644 --- a/code/modules/tgs/v5/__interop_version.dm +++ b/code/modules/tgs/v5/__interop_version.dm @@ -1 +1 @@ -"5.9.0" +"5.10.0" diff --git a/code/modules/tgs/v5/_defines.dm b/code/modules/tgs/v5/_defines.dm index 92c7a8388a71..a47bfd78000b 100644 --- a/code/modules/tgs/v5/_defines.dm +++ b/code/modules/tgs/v5/_defines.dm @@ -95,6 +95,7 @@ #define DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION "newServerVersion" #define DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE "broadcastMessage" +#define DMAPI5_TOPIC_RESPONSE_CLIENT_COUNT "clientCount" #define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE "commandResponse" #define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE "commandResponseMessage" #define DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES "chatResponses" diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index 95b8edd3ee5c..3e328fc7c27d 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -31,9 +31,12 @@ var/detached = FALSE -/datum/tgs_api/v5/New() + var/datum/tgs_http_handler/http_handler + +/datum/tgs_api/v5/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version, datum/tgs_http_handler/http_handler) . = ..() interop_version = version + src.http_handler = http_handler TGS_DEBUG_LOG("V5 API created: [json_encode(args)]") /datum/tgs_api/v5/ApiVersion() @@ -50,7 +53,9 @@ version = null // we want this to be the TGS version, not the interop version // sleep once to prevent an issue where world.Export on the first tick can hang indefinitely + TGS_DEBUG_LOG("Starting Export bug prevention sleep tick. time:[world.time] sleep_offline:[world.sleep_offline]") sleep(world.tick_lag) + TGS_DEBUG_LOG("Export bug prevention sleep complete") var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands(), DMAPI5_PARAMETER_TOPIC_PORT = GetTopicPort())) if(!istype(bridge_response)) diff --git a/code/modules/tgs/v5/bridge.dm b/code/modules/tgs/v5/bridge.dm index 0c5e701a32b6..62201fcc9e58 100644 --- a/code/modules/tgs/v5/bridge.dm +++ b/code/modules/tgs/v5/bridge.dm @@ -78,27 +78,24 @@ WaitForReattach(FALSE) TGS_DEBUG_LOG("Bridge request start") - // This is an infinite sleep until we get a response - var/export_response = world.Export(bridge_request) + var/datum/tgs_http_result/result = http_handler.PerformGet(bridge_request) TGS_DEBUG_LOG("Bridge request complete") - if(!export_response) - TGS_ERROR_LOG("Failed bridge request: [bridge_request]") + if(isnull(result)) + TGS_ERROR_LOG("Failed bridge request, handler returned null!") return - var/content = export_response["CONTENT"] - if(!content) - TGS_ERROR_LOG("Failed bridge request, missing content!") + if(!istype(result) || result.type != /datum/tgs_http_result) + TGS_ERROR_LOG("Failed bridge request, handler returned non-[/datum/tgs_http_result]!") return - var/response_json = TGS_FILE2TEXT_NATIVE(content) - if(!response_json) - TGS_ERROR_LOG("Failed bridge request, failed to load content!") + if(!result.success) + TGS_DEBUG_LOG("Failed bridge request, HTTP request failed!") return - var/list/bridge_response = json_decode(response_json) + var/list/bridge_response = json_decode(result.response_text) if(!bridge_response) - TGS_ERROR_LOG("Failed bridge request, bad json: [response_json]") + TGS_ERROR_LOG("Failed bridge request, bad json: [result.response_text]") return var/error = bridge_response[DMAPI5_RESPONSE_ERROR_MESSAGE] diff --git a/code/modules/tgs/v5/topic.dm b/code/modules/tgs/v5/topic.dm index e1f2cb638578..59e5e63e5cd4 100644 --- a/code/modules/tgs/v5/topic.dm +++ b/code/modules/tgs/v5/topic.dm @@ -149,7 +149,9 @@ if(DMAPI5_TOPIC_COMMAND_HEALTHCHECK) if(event_handler && event_handler.receive_health_checks) event_handler.HandleEvent(TGS_EVENT_HEALTH_CHECK) - return TopicResponse() + var/list/health_check_response = TopicResponse() + health_check_response[DMAPI5_TOPIC_RESPONSE_CLIENT_COUNT] = TGS_CLIENT_COUNT + return health_check_response; if(DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH) detached = FALSE diff --git a/code/modules/tgs/v5/undefs.dm b/code/modules/tgs/v5/undefs.dm index 237207fdfd05..acd19dfa6411 100644 --- a/code/modules/tgs/v5/undefs.dm +++ b/code/modules/tgs/v5/undefs.dm @@ -18,7 +18,6 @@ #undef DMAPI5_PARAMETER_ACCESS_IDENTIFIER #undef DMAPI5_PARAMETER_CUSTOM_COMMANDS -#undef DMAPI5_PARAMETER_TOPIC_PORT #undef DMAPI5_CHUNK #undef DMAPI5_CHUNK_PAYLOAD @@ -95,6 +94,7 @@ #undef DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION #undef DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE +#undef DMAPI5_TOPIC_RESPONSE_CLIENT_COUNT #undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE #undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE #undef DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES From a65efb61ac1d47c88756ff97ecdf269646be9944 Mon Sep 17 00:00:00 2001 From: Theos Date: Thu, 17 Oct 2024 01:51:33 -0400 Subject: [PATCH 019/274] Being thrown over lava now doesn't cause you to fall into it (#3577) ## About The Pull Request Buff to jump boots and kepori trying to make the beef jump ## Why It's Good For The Game im. over the lava.i m oiver it. it cant touch me. because im. not in it. ## Changelog :cl: balance: being thrown over lava by tackling, jump boots, or with assistance now fully clears the lava instead of burning you horribly and setting you on fire /:cl: --- code/game/turfs/open/lava.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm index 90fd6610721c..159a32a2ccce 100644 --- a/code/game/turfs/open/lava.dm +++ b/code/game/turfs/open/lava.dm @@ -169,7 +169,7 @@ else if (isliving(thing)) . = 1 var/mob/living/L = thing - if(L.movement_type & FLYING) + if(L.movement_type & FLYING || L.throwing) continue //YOU'RE FLYING OVER IT var/buckle_check = L.buckling if(!buckle_check) From ae151ed656f56162f6b820291cee96f04b382c9f Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 17 Oct 2024 01:01:53 -0500 Subject: [PATCH 020/274] Automatic changelog generation for PR #3577 [ci skip] --- html/changelogs/AutoChangeLog-pr-3577.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3577.yml diff --git a/html/changelogs/AutoChangeLog-pr-3577.yml b/html/changelogs/AutoChangeLog-pr-3577.yml new file mode 100644 index 000000000000..6d6ee83313d1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3577.yml @@ -0,0 +1,6 @@ +author: SomeguyManperson +changes: + - {balance: 'being thrown over lava by tackling, jump boots, or with assistance + now fully clears the lava instead of burning you horribly and setting you on + fire'} +delete-after: true From b00b2336d84fd2da3ac908a07cf03a03a71bda9b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 05:58:13 +0000 Subject: [PATCH 021/274] Bump dompurify from 2.3.1 to 2.5.4 in /tgui (#3379) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.3.1 to 2.5.4.

Name
Points
Notes
Lance Phillips
10
Hit 2 out of 3 targets.
Hetchel Catuwe-Plakat
0
Missed every shot. Relegated to knife duty.
Weer-Topith
30
Hit all three targets.
Kahyarawkkahskre
50
Hit all three targets one handed with a revolver.
Salhree-Yik
100
Hit all three targets while blindfolded.
Kiahkkati
-1000
Tried to one up Salhree and spun three times blindfolded before firing. Hit me in the knee.
FTW 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 diff --git a/icons/obj/guns/manufacturer/nanotrasen_sharplite/righthand.dmi b/icons/obj/guns/manufacturer/nanotrasen_sharplite/righthand.dmi index b6831ec9696a0c76241e0b598fbfcc9bc37a3953..ef01a242944d810122ef3d25a70679ef6f323cd5 100644 GIT binary patch literal 36809 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 literal 37047 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 Date: Thu, 17 Oct 2024 18:16:26 -0500 Subject: [PATCH 031/274] Automatic changelog generation for PR #3580 [ci skip] --- html/changelogs/AutoChangeLog-pr-3580.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3580.yml diff --git a/html/changelogs/AutoChangeLog-pr-3580.yml b/html/changelogs/AutoChangeLog-pr-3580.yml new file mode 100644 index 000000000000..dbb1e7210b3b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3580.yml @@ -0,0 +1,4 @@ +author: rye-rice +changes: + - {rscadd: Resprites the commander and Commissioner} +delete-after: true From 751f28668e983e6eec4a81b08165146fc7c1c6d6 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 18 Oct 2024 01:02:27 +0000 Subject: [PATCH 032/274] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-3246.yml | 4 ---- html/changelogs/AutoChangeLog-pr-3477.yml | 5 ----- html/changelogs/AutoChangeLog-pr-3575.yml | 4 ---- html/changelogs/AutoChangeLog-pr-3577.yml | 6 ------ html/changelogs/AutoChangeLog-pr-3580.yml | 4 ---- html/changelogs/AutoChangeLog-pr-3581.yml | 4 ---- html/changelogs/archive/2024-10.yml | 15 +++++++++++++++ 7 files changed, 15 insertions(+), 27 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-3246.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3477.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3575.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3577.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3580.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3581.yml diff --git a/html/changelogs/AutoChangeLog-pr-3246.yml b/html/changelogs/AutoChangeLog-pr-3246.yml deleted file mode 100644 index a877fb96e567..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3246.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: meemofcourse -changes: - - {rscadd: Atlas-class Light Armored Crusier} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3477.yml b/html/changelogs/AutoChangeLog-pr-3477.yml deleted file mode 100644 index b0f28a0aebcd..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3477.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: DIB-DOG -changes: - - {rscdel: Removed extra turret that wasn't supposed to be on the ship} - - {bugfix: Moved armory flashbangs to a more secure location} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3575.yml b/html/changelogs/AutoChangeLog-pr-3575.yml deleted file mode 100644 index da31593b7759..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3575.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Erikafox -changes: - - {rscdel: Wasteplanets no longer spawn welding fuel tanks.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3577.yml b/html/changelogs/AutoChangeLog-pr-3577.yml deleted file mode 100644 index 6d6ee83313d1..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3577.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: SomeguyManperson -changes: - - {balance: 'being thrown over lava by tackling, jump boots, or with assistance - now fully clears the lava instead of burning you horribly and setting you on - fire'} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3580.yml b/html/changelogs/AutoChangeLog-pr-3580.yml deleted file mode 100644 index dbb1e7210b3b..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3580.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: rye-rice -changes: - - {rscadd: Resprites the commander and Commissioner} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3581.yml b/html/changelogs/AutoChangeLog-pr-3581.yml deleted file mode 100644 index 935fbd451c5b..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3581.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: generalthrax -changes: - - {bugfix: Fixed a typo in the Frontiersman softcap that made the sprite go invisible} -delete-after: true diff --git a/html/changelogs/archive/2024-10.yml b/html/changelogs/archive/2024-10.yml index f53f84907a32..f01ea10489ed 100644 --- a/html/changelogs/archive/2024-10.yml +++ b/html/changelogs/archive/2024-10.yml @@ -238,3 +238,18 @@ - bugfix: Gezena has shoes again - rscdel: Gezenan captain gloves no longer have partial insulation in parity with other captain gloves. +2024-10-18: + DIB-DOG: + - rscdel: Removed extra turret that wasn't supposed to be on the ship + - bugfix: Moved armory flashbangs to a more secure location + Erikafox: + - rscdel: Wasteplanets no longer spawn welding fuel tanks. + SomeguyManperson: + - balance: being thrown over lava by tackling, jump boots, or with assistance now + fully clears the lava instead of burning you horribly and setting you on fire + generalthrax: + - bugfix: Fixed a typo in the Frontiersman softcap that made the sprite go invisible + meemofcourse: + - rscadd: Atlas-class Light Armored Crusier + rye-rice: + - rscadd: Resprites the commander and Commissioner From 9d27e3b35086f75e6f4321ee7a5e006a3f920c60 Mon Sep 17 00:00:00 2001 From: Orchid <71460403+Orchidthederg@users.noreply.github.com> Date: Thu, 17 Oct 2024 19:54:52 -0500 Subject: [PATCH 033/274] Adds Sprites for Overmap Storm Severities (#3578) ## About The Pull Request Gives storms some visual differentiation from the minor/moderate/major versions, adding some visual flavor and readability. ![image](https://github.com/user-attachments/assets/9d4ec565-d207-4a2b-9644-b4861788452f) ### Meteors: ![image](https://github.com/user-attachments/assets/9a10bb88-9908-4535-b9cb-b927ea4d0ab4) ### Electrical Storms: ![image](https://github.com/user-attachments/assets/0dabba78-eab6-4d86-bf01-7e59f055eda5) ### Carp Storms: ![image](https://github.com/user-attachments/assets/4f7cd59d-a934-4637-902f-f68a4ffc6a9c) ## Why It's Good For The Game A ton of people have complained about not being able to pick apart various storm severities, and this makes it pretty obvious which ones will MURDER YOU AND YOUR CREW and which ones will pleasantly tickle your hull ## Changelog :cl: fix: fallback sprite for dust storms was set to the carp sprite for some reason. imageadd: fancy new carp, meteor, and electrical storm imagedel: old carp, meteor, and electrical storm sprites /:cl: (soul: taken out back and shot) --- code/modules/overmap/objects/event_datum.dm | 44 ++++++++++++++++---- icons/misc/overmap.dmi | Bin 5704 -> 12563 bytes 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/code/modules/overmap/objects/event_datum.dm b/code/modules/overmap/objects/event_datum.dm index d798fd74778a..9381e8cae6d5 100644 --- a/code/modules/overmap/objects/event_datum.dm +++ b/code/modules/overmap/objects/event_datum.dm @@ -41,7 +41,7 @@ /datum/overmap/event/meteor name = "asteroid field (moderate)" desc = "An area of space rich with asteroids, going fast through here could prove dangerous" - token_icon_state = "meteor1" + token_icon_state = "meteor_moderate1" chance_to_affect = 15 spread_chance = 50 chain_rate = 4 @@ -55,7 +55,15 @@ /datum/overmap/event/meteor/Initialize(position, ...) . = ..() - token.icon_state = "meteor[rand(1, 4)]" + switch(type) //woop! this picks one of two icon states for the severity of the storm in overmap.dmi + if(/datum/overmap/event/meteor/minor) + token.icon_state = "meteor_minor[rand(1, 2)]" + if(/datum/overmap/event/meteor) + token.icon_state = "meteor_moderate[rand(1, 2)]" + if(/datum/overmap/event/meteor/major) + token.icon_state = "meteor_major[rand(1, 2)]" + else + token.icon_state = "meteor_moderate1" token.color = "#a08444" token.light_color = "#a08444" token.update_appearance() @@ -133,7 +141,7 @@ /datum/overmap/event/electric name = "electrical storm (moderate)" desc = "A spatial anomaly, an unfortunately common sight on the frontier. Disturbing it tends to lead to intense electrical discharges" - token_icon_state = "electrical1" + token_icon_state = "electrical_moderate1" chance_to_affect = 15 spread_chance = 30 chain_rate = 3 @@ -143,7 +151,16 @@ /datum/overmap/event/electric/Initialize(position, ...) . = ..() - token.icon_state = "electrical[rand(1, 4)]" + switch(type) //woop! this picks one of two icon states for the severity of the storm in overmap.dmi + if(/datum/overmap/event/electric/minor) + token.icon_state = "electrical_minor[rand(1, 2)]" + if(/datum/overmap/event/electric) + token.icon_state = "electrical_moderate[rand(1, 2)]" + if(/datum/overmap/event/electric/major) + token.icon_state = "electrical_major[rand(1, 2)]" + else + token.icon_state = "electrical_moderate1" + token.color = "#e8e85c" token.light_color = "#e8e85c" token.update_appearance() @@ -218,7 +235,7 @@ /datum/overmap/event/meteor/carp name = "carp migration (moderate)" desc = "A migratory school of space carp. They travel at high speeds, and flying through them may cause them to impact your ship" - token_icon_state = "carp1" + token_icon_state = "carp_moderate1" chance_to_affect = 15 spread_chance = 50 chain_rate = 4 @@ -230,7 +247,16 @@ /datum/overmap/event/meteor/carp/Initialize(position, ...) . = ..() - token.icon_state = "carp[rand(1, 4)]" + switch(type) //woop! this picks one of two icon states for the severity of the storm in overmap.dmi + if(/datum/overmap/event/meteor/carp/minor) + token.icon_state = "carp_minor[rand(1, 2)]" + if(/datum/overmap/event/meteor/carp) + token.icon_state = "carp_moderate[rand(1, 2)]" + if(/datum/overmap/event/meteor/carp/major) + token.icon_state = "carp_major[rand(1, 2)]" + else + token.icon_state = "carp_moderate1" + token.color = "#7b1ca8" token.light_color = "#7b1ca8" token.update_icon() @@ -238,7 +264,7 @@ /datum/overmap/event/meteor/carp/minor name = "carp migration (minor)" - token_icon_state = "carp1" + token_icon_state = "carp_moderate1" chance_to_affect = 5 spread_chance = 25 chain_rate = 4 @@ -249,7 +275,7 @@ /datum/overmap/event/meteor/carp/major name = "carp migration (major)" - token_icon_state = "carp1" + token_icon_state = "carp_moderate1" chance_to_affect = 25 spread_chance = 25 chain_rate = 4 @@ -263,7 +289,7 @@ /datum/overmap/event/meteor/dust name = "dust cloud" desc = "A cloud of spaceborne dust. Relatively harmless, unless you're travelling at relative speeds" - token_icon_state = "carp1" + token_icon_state = "dust1" chance_to_affect = 30 spread_chance = 50 chain_rate = 4 diff --git a/icons/misc/overmap.dmi b/icons/misc/overmap.dmi index f0c9f6e446779c6989ef3c08927b08a15debdd9a..94ac33e29584879c09ff44eb428b176d61a6a39e 100644 GIT binary patch literal 12563 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 LQ=wAMBJ_U&hRX5T literal 5704 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 uv&bEUgGjHKNpu+39}~G&+v|5NP`V0000 Date: Thu, 17 Oct 2024 20:12:58 -0500 Subject: [PATCH 034/274] Automatic changelog generation for PR #3578 [ci skip] --- html/changelogs/AutoChangeLog-pr-3578.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3578.yml diff --git a/html/changelogs/AutoChangeLog-pr-3578.yml b/html/changelogs/AutoChangeLog-pr-3578.yml new file mode 100644 index 000000000000..6408d55fede1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3578.yml @@ -0,0 +1,6 @@ +author: Orchidthederg +changes: + - {bugfix: fallback sprite for dust storms was set to the carp sprite for some reason.} + - {imageadd: 'fancy new carp, meteor, and electrical storm'} + - {imagedel: 'old carp, meteor, and electrical storm sprites'} +delete-after: true From 50566a1cb4ce89885674f085ebb7e7dfea3f6436 Mon Sep 17 00:00:00 2001 From: generalthrax <139387950+generalthrax@users.noreply.github.com> Date: Fri, 18 Oct 2024 00:26:16 -0500 Subject: [PATCH 035/274] Emote Stuff (Courtesy of NithaIsTired) (#3562) ## About The Pull Request A really old emote pr made by @NithaIsTired that @rye-rice asked me to pr and finish. Adds stuff like: > visible trembling emote > visible shivering > audible snapping > booping lizard snouts > other stuff i dont remember > its a lot ## Why It's Good For The Game It's cute and cool. ## Changelog :cl: NithaIsTired add: Adds a ton of audible emotes and visible emotes like snapping your fingers or twitching add: You can boop people on the nose by clicking on their mouth with help intent add: Sound variation with a few emotes like snapping and clapping add: Laying down now plays a sound if you aren't on walk intent /:cl: --------- Signed-off-by: rye-rice <58402542+rye-rice@users.noreply.github.com> Co-authored-by: Nitha Co-authored-by: Nitha <132854285+NithaIsTired@users.noreply.github.com> Co-authored-by: rye-rice <58402542+rye-rice@users.noreply.github.com> --- code/__DEFINES/dcs/signals/signals.dm | 1 - .../mood_events/generic_negative_events.dm | 15 ++ .../mood_events/generic_positive_events.dm | 13 ++ code/game/turfs/turf.dm | 4 +- .../mob/living/carbon/carbon_defense.dm | 76 +++++++-- code/modules/mob/living/carbon/emote.dm | 19 --- code/modules/mob/living/emote.dm | 146 ++++++++++++++++++ code/modules/mob/living/living.dm | 9 +- sound/effects/Nose_boop.ogg | Bin 0 -> 27095 bytes sound/effects/boop.ogg | Bin 0 -> 16245 bytes sound/misc/claponce1.ogg | Bin 0 -> 7299 bytes sound/misc/claponce2.ogg | Bin 0 -> 11036 bytes sound/misc/fingersnap1.ogg | Bin 0 -> 7050 bytes sound/misc/fingersnap2.ogg | Bin 0 -> 6004 bytes sound/misc/snap2.ogg | Bin 0 -> 13617 bytes sound/misc/snap3.ogg | Bin 0 -> 18541 bytes 16 files changed, 249 insertions(+), 34 deletions(-) create mode 100644 sound/effects/Nose_boop.ogg create mode 100644 sound/effects/boop.ogg create mode 100644 sound/misc/claponce1.ogg create mode 100644 sound/misc/claponce2.ogg create mode 100644 sound/misc/fingersnap1.ogg create mode 100644 sound/misc/fingersnap2.ogg create mode 100644 sound/misc/snap2.ogg create mode 100644 sound/misc/snap3.ogg diff --git a/code/__DEFINES/dcs/signals/signals.dm b/code/__DEFINES/dcs/signals/signals.dm index 638b5220bc3c..9e034edeeb2c 100644 --- a/code/__DEFINES/dcs/signals/signals.dm +++ b/code/__DEFINES/dcs/signals/signals.dm @@ -527,7 +527,6 @@ #define COMSIG_CARBON_HUGGED "carbon_hugged" ///When a carbon mob is headpatted, this is called on the carbon that is headpatted. (mob/living/headpatter) #define COMSIG_CARBON_HEADPAT "carbon_headpatted" - ///When a carbon slips. Called on /turf/open/handle_slip() #define COMSIG_ON_CARBON_SLIP "carbon_slip" ///When a carbon gets a vending machine tilted on them diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index f5e51d1d59f4..a3b44b5c29e1 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -302,3 +302,18 @@ description = span_boldwarning("It isn't ending... it isn't ending, come on...\n") mood_change = -18 timeout = 3 MINUTES + +/datum/mood_event/bad_touch_bear_hug + description = "I just got squeezed way too hard." + mood_change = -3 + timeout = 2 MINUTES + +/datum/mood_event/rippedtail + description = "I ripped their tail right off, what have I done!\n" + mood_change = -5 + timeout = 30 SECONDS + +/datum/mood_event/bad_boop + description = "Someone booped my nose... ACK!\n" + mood_change = -3 + timeout = 4 MINUTES diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm index 1ab201bc0186..e35d798386c8 100644 --- a/code/datums/mood_events/generic_positive_events.dm +++ b/code/datums/mood_events/generic_positive_events.dm @@ -1,6 +1,11 @@ /datum/mood_event/hug description = "Hugs are nice.\n" mood_change = 1 + timeout = 2 + +/datum/mood_event/bear_hug + description = "I got squeezed very tightly, but it was quite nice." + mood_change = 2 timeout = 2 MINUTES /datum/mood_event/betterhug @@ -19,6 +24,14 @@ /datum/mood_event/besthug/add_effects(mob/friend) description = "[friend.name] is great to be around, [friend.p_they()] makes me feel so happy!\n" +/datum/mood_event/best_boop + description = "Someone booped my nose, they are silly!\n" + mood_change = 5 + timeout = 4 MINUTES + +/datum/mood_event/best_boop/add_effects(mob/friend) + description = "[friend.name] booped my nose, [friend.p_they()] [friend.p_are()] silly!\n" + /datum/mood_event/warmhug description = "Warm cozy hugs are the best!\n" mood_change = 1 diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index e5cc9709559c..8a90ac9fe614 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -582,8 +582,8 @@ GLOBAL_LIST_EMPTY(created_baseturf_lists) /turf/proc/acid_melt() return -/turf/handle_fall(mob/faller) - if(has_gravity(src)) +/turf/handle_fall(mob/faller, fall_sound_played) + if(has_gravity(src) && !fall_sound_played) playsound(src, "bodyfall", 50, TRUE) faller.drop_all_held_items() diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 62174120a60f..56b8fe2792d4 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -399,6 +399,8 @@ Paralyze(60) /mob/living/carbon/proc/help_shake_act(mob/living/carbon/M) + var/datum/component/mood/hugger_mood = M.GetComponent(/datum/component/mood) + var/nosound = FALSE if(on_fire) to_chat(M, "You can't put [p_them()] out with just your bare hands!") return @@ -426,6 +428,22 @@ mothdust += 10; if(istype(dna.species, /datum/species/moth)) M.mothdust += 10; // End WS edit + + if(M.zone_selected == BODY_ZONE_PRECISE_MOUTH) // Nose boops! + nosound = TRUE + playsound(src, 'sound/effects/boop.ogg', 50, 0) + if (HAS_TRAIT(M, TRAIT_FRIENDLY)) + M.visible_message(span_notice("[M] playfully boops your nose."), span_notice("You playfully boop [src]'s nose.")) + if (hugger_mood.sanity >= SANITY_GREAT) + new /obj/effect/temp_visual/heart(loc) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "best_boop", /datum/mood_event/best_boop, M) + else + M.visible_message(span_notice("[M] boops [src]'s nose."), span_notice("You boop [src] on the nose.")) + if(HAS_TRAIT(src, TRAIT_BADTOUCH)) + to_chat(M, span_warning("A scowl forms on [src]'s face as you daringly press your finger against [p_their()] nose.")) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "bad_boop", /datum/mood_event/bad_boop, M) + + else if(check_zone(M.zone_selected) == BODY_ZONE_HEAD) //Headpats! SEND_SIGNAL(src, COMSIG_CARBON_HEADPAT, M) M.visible_message("[M] gives [src] a pat on the head to make [p_them()] feel better!", \ @@ -440,10 +458,35 @@ if(HAS_TRAIT(src, TRAIT_BADTOUCH)) to_chat(M, "[src] looks visibly upset as you pat [p_them()] on the head.") +// Tail pulls! + else if((M.zone_selected == BODY_ZONE_PRECISE_GROIN) && !isnull(src.getorgan(/obj/item/organ/tail))) + M.visible_message(span_notice("[M] pulls on [src]'s tail!"), \ + null, span_hear("You hear a soft patter."), DEFAULT_MESSAGE_RANGE, list(M, src)) + to_chat(M, span_notice("You pull on [src]'s tail!")) + to_chat(src, span_notice("[M] pulls on your tail!")) + +// Rips off fake tails + else if((M.zone_selected == BODY_ZONE_PRECISE_GROIN) && (istype(head, /obj/item/clothing/head/kitty) || istype(head, /obj/item/clothing/head/collectable/kitty))) + var/obj/item/clothing/head/faketail = head + M.visible_message(span_danger("[M] pulls on [src]'s tail... and it rips off!"), \ + null, span_hear("You hear a ripping sound."), DEFAULT_MESSAGE_RANGE, list(M, src)) + to_chat(M, span_danger("You pull on [src]'s tail... and it rips off!")) + to_chat(src, span_userdanger("[M] pulls on your tail... and it rips off!")) + playsound(loc, 'sound/effects/rip1.ogg', 75, TRUE) + dropItemToGround(faketail) + M.put_in_hands(faketail) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "rippedtail", /datum/mood_event/rippedtail) + else if(M.zone_selected == BODY_ZONE_CHEST || M.zone_selected == BODY_ZONE_PRECISE_GROIN) //WS Edit - Adds more help emotes SEND_SIGNAL(src, COMSIG_CARBON_HUGGED, M) SEND_SIGNAL(M, COMSIG_CARBON_HUG, M, src) - M.visible_message("[M] hugs [src] to make [p_them()] feel better!", \ + if (M.grab_state >= GRAB_AGGRESSIVE) + M.visible_message(span_notice("[M] embraces [src] in a tight bear hug!"), \ + null, span_hear("You hear the rustling of clothes."), DEFAULT_MESSAGE_RANGE, list(M, src)) + to_chat(M, span_notice("You wrap [src] into a tight bear hug!")) + to_chat(src, span_notice("[M] squeezes you super tightly in a firm bear hug!")) + else + M.visible_message("[M] hugs [src] to make [p_them()] feel better!", \ "You hug [src] to make [p_them()] feel better!") if(istype(M.dna.species, /datum/species/moth)) //WS edit - moth dust from hugging mothdust += 15; @@ -455,12 +498,17 @@ // No moodlets for people who hate touches if(!HAS_TRAIT(src, TRAIT_BADTOUCH)) - if(bodytemperature > M.bodytemperature) - if(!HAS_TRAIT(M, TRAIT_BADTOUCH)) - SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "hug", /datum/mood_event/warmhug, src) // Hugger got a warm hug (Unless they hate hugs) - SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "hug", /datum/mood_event/hug) // Reciver always gets a mood for being hugged - else - SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "hug", /datum/mood_event/warmhug, M) // You got a warm hug + if (M.grab_state >= GRAB_AGGRESSIVE) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "hug", /datum/mood_event/bear_hug) + if(bodytemperature > M.bodytemperature) + if(!HAS_TRAIT(M, TRAIT_BADTOUCH)) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "hug", /datum/mood_event/warmhug) // Hugger got a warm hug (Unless they hate hugs) + SEND_SIGNAL(M, "hug", /datum/mood_event/hug) // Receiver always gets a mood for being hugged + else + SEND_SIGNAL(M, "hug", /datum/mood_event/warmhug,) // You got a warm hug + else + if (M.grab_state >= GRAB_AGGRESSIVE) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "hug", /datum/mood_event/bad_touch_bear_hug) // Let people know if they hugged someone really warm or really cold if(M.bodytemperature > M.dna.species.bodytemp_heat_damage_limit) @@ -474,7 +522,6 @@ to_chat(M, "It feels like [src] is freezing as you hug them.") if(HAS_TRAIT(M, TRAIT_FRIENDLY)) - var/datum/component/mood/hugger_mood = M.GetComponent(/datum/component/mood) if (hugger_mood.sanity >= SANITY_GREAT) new /obj/effect/temp_visual/heart(loc) SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "friendly_hug", /datum/mood_event/besthug, M) @@ -503,8 +550,17 @@ AdjustParalyzed(-60) AdjustImmobilized(-60) set_resting(FALSE) - - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + if(!nosound) + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + +// Shake animation +#define SHAKE_ANIMATION_OFFSET (4) + if (incapacitated()) + var/direction = prob(50) ? -1 : 1 + animate(src, pixel_x = pixel_x + SHAKE_ANIMATION_OFFSET * direction, time = 1, easing = QUAD_EASING | EASE_OUT, flags = ANIMATION_PARALLEL) + animate(pixel_x = pixel_x - (SHAKE_ANIMATION_OFFSET * 2 * direction), time = 1) + animate(pixel_x = pixel_x + SHAKE_ANIMATION_OFFSET * direction, time = 1, easing = QUAD_EASING | EASE_IN) +#undef SHAKE_ANIMATION_OFFSET /// Check ourselves to see if we've got any shrapnel, return true if we do. This is a much simpler version of what humans do, we only indicate we're checking ourselves if there's actually shrapnel /mob/living/carbon/proc/check_self_for_injuries() diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm index 5e5e8fca6d24..358fa0626092 100644 --- a/code/modules/mob/living/carbon/emote.dm +++ b/code/modules/mob/living/carbon/emote.dm @@ -39,25 +39,6 @@ key = "blink_r" message = "blinks rapidly." -/datum/emote/living/carbon/clap - key = "clap" - key_third_person = "claps" - message = "claps." - muzzle_ignore = TRUE - hands_use_check = TRUE - emote_type = EMOTE_AUDIBLE - vary = TRUE - -/datum/emote/living/carbon/clap/get_sound(mob/living/user) - if(ishuman(user)) - if(!user.get_bodypart(BODY_ZONE_L_ARM) || !user.get_bodypart(BODY_ZONE_R_ARM)) - return - else - return pick('sound/misc/clap1.ogg', - 'sound/misc/clap2.ogg', - 'sound/misc/clap3.ogg', - 'sound/misc/clap4.ogg') - /datum/emote/living/carbon/crack key = "crack" key_third_person = "cracks" diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index 56ae0db795e5..f4042464f981 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -232,6 +232,16 @@ message = "jumps!" hands_use_check = TRUE +/datum/emote/living/jump/run_emote(mob/living/user, params, type_override, intentional) + . = ..() + if(!.) + return FALSE + animate(user, pixel_y = user.pixel_y + 4, time = 0.1 SECONDS) + animate(pixel_y = user.pixel_y - 4, time = 0.1 SECONDS) + +/datum/emote/living/jump/get_sound(mob/living/user) + return 'sound/weapons/thudswoosh.ogg' + /datum/emote/living/kiss key = "kiss" key_third_person = "kisses" @@ -361,6 +371,18 @@ message = "shivers." emote_type = EMOTE_AUDIBLE +#define SHIVER_LOOP_DURATION (1 SECONDS) +/datum/emote/living/shiver/run_emote(mob/living/user, params, type_override, intentional) + . = ..() + if(!.) + return FALSE + animate(user, pixel_x = user.pixel_x + 1, time = 0.1 SECONDS) + for(var/i in 1 to SHIVER_LOOP_DURATION / (0.2 SECONDS)) //desired total duration divided by the iteration duration to give the necessary iteration count + animate(pixel_x = user.pixel_x - 1, time = 0.1 SECONDS) + animate(pixel_x = user.pixel_x + 1, time = 0.1 SECONDS) + animate(pixel_x = user.pixel_x - 1, time = 0.1 SECONDS) +#undef SHIVER_LOOP_DURATION + /datum/emote/living/sigh key = "sigh" key_third_person = "sighs" @@ -460,20 +482,62 @@ key_third_person = "sways" message = "sways around dizzily." +/datum/emote/living/sway/run_emote(mob/living/user, params, type_override, intentional) + . = ..() + if(!.) + return FALSE + animate(user, pixel_x = user.pixel_x + 2, time = 0.5 SECONDS) + for(var/i in 1 to 2) + animate(pixel_x = user.pixel_x - 4, time = 1.0 SECONDS) + animate(pixel_x = user.pixel_x + 4, time = 1.0 SECONDS) + animate(pixel_x = user.pixel_x - 2, time = 0.5 SECONDS) + /datum/emote/living/tremble key = "tremble" key_third_person = "trembles" message = "trembles in fear!" +#define TREMBLE_LOOP_DURATION (4.4 SECONDS) +/datum/emote/living/tremble/run_emote(mob/living/user, params, type_override, intentional) + . = ..() + if(!.) + return FALSE + animate(user, pixel_x = user.pixel_x + 2, time = 0.2 SECONDS) + for(var/i in 1 to TREMBLE_LOOP_DURATION / (0.4 SECONDS)) //desired total duration divided by the iteration duration to give the necessary iteration count + animate(pixel_x = user.pixel_x - 2, time = 0.2 SECONDS) + animate(pixel_x = user.pixel_x + 2, time = 0.2 SECONDS) + animate(pixel_x = user.pixel_x - 2, time = 0.2 SECONDS) +#undef TREMBLE_LOOP_DURATION + /datum/emote/living/twitch key = "twitch" key_third_person = "twitches" message = "twitches violently." +/datum/emote/living/twitch/run_emote(mob/living/user, params, type_override, intentional) + . = ..() + if(!.) + return FALSE + animate(user, pixel_x = user.pixel_x - 1, time = 0.1 SECONDS) + animate(pixel_x = user.pixel_x + 1, time = 0.1 SECONDS) + animate(time = 0.1 SECONDS) + animate(pixel_x = user.pixel_x - 1, time = 0.1 SECONDS) + animate(pixel_x = user.pixel_x + 1, time = 0.1 SECONDS) + /datum/emote/living/twitch_s key = "twitch_s" message = "twitches." +/datum/emote/living/twitch_s/run_emote(mob/living/user, params, type_override, intentional) + . = ..() + if(!.) + return FALSE + animate(user, pixel_x = user.pixel_x - 1, time = 0.1 SECONDS) + animate(pixel_x = user.pixel_x + 1, time = 0.1 SECONDS) + animate(time = 0.1 SECONDS) + animate(pixel_x = user.pixel_x - 1, time = 0.1 SECONDS) + animate(pixel_x = user.pixel_x + 1, time = 0.1 SECONDS) + /datum/emote/living/wave key = "wave" key_third_person = "waves" @@ -603,3 +667,85 @@ key_third_person = "clacks" message = "clacks their beak." emote_type = EMOTE_VISIBLE + +/datum/emote/living/tilt + key = "tilt" + key_third_person = "tilts" + message = "tilts their head to the side." + +/datum/emote/living/carbon/snap + key = "snap" + key_third_person = "snaps" + message = "snaps their fingers." + message_param = "snaps their fingers at %t." + emote_type = EMOTE_AUDIBLE + hands_use_check = TRUE + muzzle_ignore = TRUE + +/datum/emote/living/carbon/snap/get_sound(mob/living/user) + if(ishuman(user)) + if(!user.get_bodypart(BODY_ZONE_L_ARM) || !user.get_bodypart(BODY_ZONE_R_ARM)) + return + else + return pick('sound/misc/fingersnap1.ogg', + 'sound/misc/fingersnap2.ogg') + +/datum/emote/living/snap2 + key = "snap2" + key_third_person = "snaps twice" + message = "snaps twice." + message_param = "snaps twice at %t." + emote_type = EMOTE_AUDIBLE + muzzle_ignore = TRUE + hands_use_check = TRUE + vary = TRUE + sound = 'sound/misc/snap2.ogg' + +/datum/emote/living/snap3 + key = "snap3" + key_third_person = "snaps thrice" + message = "snaps thrice." + message_param = "snaps thrice at %t." + emote_type = EMOTE_AUDIBLE + muzzle_ignore = TRUE + hands_use_check = TRUE + vary = TRUE + sound = 'sound/misc/snap3.ogg' + +/datum/emote/living/carbon/clap + key = "clap" + key_third_person = "claps" + message = "claps." + muzzle_ignore = TRUE + hands_use_check = TRUE + emote_type = EMOTE_AUDIBLE + vary = TRUE + +/datum/emote/living/carbon/clap/get_sound(mob/living/user) + if(ishuman(user)) + if(!user.get_bodypart(BODY_ZONE_L_ARM) || !user.get_bodypart(BODY_ZONE_R_ARM)) + return + else + return pick('sound/misc/clap1.ogg', + 'sound/misc/clap2.ogg', + 'sound/misc/clap3.ogg', + 'sound/misc/clap4.ogg') + +/datum/emote/living/clap1 + key = "clap1" + key_third_person = "claps once" + message = "claps once." + emote_type = EMOTE_AUDIBLE + muzzle_ignore = TRUE + hands_use_check = TRUE + vary = TRUE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) + +/datum/emote/living/clap1/get_sound(mob/living/user) + return pick('sound/misc/claponce1.ogg', + 'sound/misc/claponce2.ogg') + +/datum/emote/living/clap1/can_run_emote(mob/living/carbon/user, status_check = TRUE , intentional) + if(user.usable_hands < 2) + return FALSE + return ..() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 741dfcc16015..5e3442ba039a 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -484,7 +484,9 @@ if(!silent) to_chat(src, "You will now lay down as soon as you are able to.") else - if(!silent) + if(!silent && m_intent == MOVE_INTENT_WALK) + to_chat(src, "You gently lay down.") + else if(!silent) to_chat(src, "You lay down.") set_lying_down() else @@ -1787,12 +1789,15 @@ GLOBAL_VAR_INIT(ssd_indicator_overlay, mutable_appearance('icons/mob/ssd_indicat /// Changes the value of the [living/body_position] variable. -/mob/living/proc/set_body_position(new_value) +/mob/living/proc/set_body_position(new_value, fall_sound_played) if(body_position == new_value) return . = body_position body_position = new_value if(new_value == LYING_DOWN) // From standing to lying down. + if(has_gravity() && m_intent != MOVE_INTENT_WALK) + playsound(src, "bodyfall", 50, TRUE) // Will play the falling sound if not walking + fall_sound_played = TRUE on_lying_down() else // From lying down to standing up. on_standing_up() diff --git a/sound/effects/Nose_boop.ogg b/sound/effects/Nose_boop.ogg new file mode 100644 index 0000000000000000000000000000000000000000..6a742e95eac6eccfe8ec8993a90b667bd49298be GIT binary patch literal 27095 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 A82|tP literal 0 HcmV?d00001 diff --git a/sound/misc/claponce2.ogg b/sound/misc/claponce2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..10dfdba121b4923ee36e49ed4bf3ab86b3d8e8f9 GIT binary patch literal 11036 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 J8gq<{{tdIL^-KT& literal 0 HcmV?d00001 diff --git a/sound/misc/snap2.ogg b/sound/misc/snap2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..1537084be43c0faa2291bbdc659735d7c5901554 GIT binary patch literal 13617 zcmb`td0diN`!Ie(Xn;$AXlQDnpnyxbmD)0h;6iGEU~1X8fGJj^rY+7igSa6ssbQ&U z35o(~scBhL^O#$1nI_scHD;U3G&L==G&4`{ZOyZMzrWAtegFBL&+&M!bIx^nU)Q;| zb3EI2?+yo`z~5yQ^QrTDTK!dsE#$x#>G8??mxrLtmcN&ztoYdJhHP8L{C8Q#gn*F9 z!6*;4@x%WpX)8VvasuZglT(vix25mK?@5l2_(&cfjCZHGxzpTf9(eM$z59|=(?$D5 z`!XoYv>^t6qcZ#>AOIX3aSOo@NG8ez0DuC3SR%#rSYj|mtx%E=S1E#)djqt>Dn;P{ zE}__M@LvtyQ)mtVFhD{^lr}sI7LWVv#yOUz*ZU-gc{k%%%DJ;Xh~9S&3HzEln^N|T zQ%G==C;h50UM8cKZ^ z$(<7nBbUxw>=3uRa9JdHM1>utq9M2` zQG7P}JIFEK1e_R6YDQx*`fcoT`rvFb(j5;p*e^+|a5EY<&VeLaoH z;t{W>JFomG;UNIrQ##LiAl)-?zvuP+o4^{F!5mhE+;|(Z>R+3%yzKx$ce5TyvmOSe z!E>2P_u9UH^X>hiw?R=XOXUAvvOnqz$Oxe>@wiw5_b7||C>9Aw7N>;!8-Mys-~yTQ z3BG2c=FJTs)0(ICTI|WGYlZxij+eAmCqM4so^i{^;9gQjst4+;Cu;VO2OHO@KlKh{ zPOfa#-U7!gpVyiWTE>Cvl5f?l)ZUE*aib<`o@p*&!Cs-_q+{15{wI2WtA%z~?f5mH zM<7Pwy^|@I5HVoycVX>MHxSEX|66_N;J(G(!41|)@kdGxqGe) zyMbEl>;-CZN!PPe`_K9WrKr1RqMg(V9-E^6WKrOz;)P{?hL#_VB)=+sgwhOJ#eZ+y zE8hZ+YjuGI+1z*VqVOh%pYza`QdiS=d1Jow_^R< zasbe1azEOnBEHz|dTmY^1Mz8t|7AI8*z4ui!{x-S9mLRE&Np6rZhPZ7X~yDuhK8HR zOqyp-S%|{d$4q&NrUatt1ERYZL_01XiMsH&!F)2CA8u#wq6UzU?3Z?2Lz%jC~xrR2in$%Qq#OR7C1XO}Mj zKkL6OCor7|R?u=->BRrCoE|r8f6$sboI~Gy;&JmND9{Yn>i^yV0O%<*-ulsxaCt7% zJg;e=}wB$Sax(?QVL6o=TL5gbS3qzrh;EnvdWqvd#f?le&e=!uuEEMo*Dzs36$1 zcv*P&0^vSr_QY-Bp*4v$o;N%TRbqyKbi+gNFHp-6Y!1(eXr6oXq|P%>~oPwM{?r1X0f}cNj-m2m}|Zbxz@bgNESOe=HJ> z?!pbes9HSYe!EgMbQT0dy+qYo5bP2SbpU__vJ#L0W+QY^gb)cC017|_2E}&0-8s~Z zRhkf0;~*yvcWk=p85ebGcg=(+Xdy{8&#N7lBOidY27m3DP()hSFDn5(2#^e<5rd~T z-F(BG^b}M+jy&FU7!+)i?y~DL#W$NkbWq3@!l+Y@a#d1|Zs~HH^R|z62M&XT3suQF z-O`Aw=Z%jPrZZzKYn~lmUbzVJxoI0VG+Yp~{rGYk@jnXam#w`)pNI2vv=msxH6T{o zO8%u#5;vLKKovKHO(A)*gDE6M5Id-~@py1>YuAiBMGHDClDhMF^k`$}OtiRKp^r{! z1%S2{E5RQl7tj#I2YQQFp`z4`yayK}kbA~#A1Dz+^GGWXI zPEi-Tfp(za4c6{AWq@uF^v!tCA%gL}6!eM-<35f6py`1C_@03B8;AfY(j*E2G(rKK z_4N+V8&k}io-V<+Ja3w@Ci#NUioXR>2}aiWW#Le7PI+#_vZnX~9aY|>U6#wv?aNXT zOlST_DiB~6VG7U<*0+?V@;ogflZMy;9#kqfLxRwlF@(#-GQbZ-fe9IH7R-`j8J1*E zAqgl$g2AoSCiYIwW5Mo6q-=%M<#XQPO|HA%6KVm z>nnX%64W#Cd&aAI>=d`bJGCBa#Y}v0m(T7LcI!Z7%Kq^gMRZa7%(L2X_rb`NvtR-y zEN-8vH3H~KsQ|FCEiN&xld zv)Ye|+y3#7*_+Svk0~4&1eZZj+RGp)?PWADDS<94_!`!FM;wB>%p(eP8MwZx{iS{@ zl?o(b5T6mopt=a)K8DKuJf4_xc-)6V02$pn3`TB*QlW_6dNz;4CaXbNq`TxU2ez)6 z3Z7kV8Jq1gP^G{Sa``;A%V49TczH=mJ4wCAnWUbHE_MSm%@mie$b@2$<((;7uoudv zJpHoBWw0j2eGqqghgf?d+6bT>P6Z_FwzT}p#`C?CvmfPf3Cv^}At0xJhxTAK4(x$Z zZ8;xQu$L#6dmu=*{Le%#hrRIc3Aj>m%V*^$3~(Jq{Vxm@I6&P?yV+9)l5@5qgxfn*Ux)HNH!C_OBV0;gzR4x0V`6AUu=hd?Uo3Oi) zRI&c$V$itMF0ij!BpAbm=W}eIT1UCu#6F|n354faiBC|e4DV1xE(2^jI!t(moD(xMqre|13mQI zF&NZ<6AQW_Qxv8Vkn}?Rucx9>Wm|{HG_tkXcyO}`Ku6hmFzw>qfUIAB+)TK>=F;pu!w)S5xg%YI<~48LAvzfjMTTz=Bx}{o?@@ zK+ypx^wWuV*{4FGpAND;HXkVf%Lm!z+0ey*5-oI%8g-qzQT^f14^Z`vcReGWK^8$SECwd$)y==e!d2rr2%dGg!4T^){#^pIn^O^H?eXB(! zn71O#e#bEOYB${RCS)9YDrere)=af2F!&`8&MxiPnrP@J;!zCk3$yX4lMvT+q(A?x z#Rm<+37h>Yi0ek5nh7r%XBQFs@{F3hbb{_x&1YD^PD}K>{_1HT;lhXvX#VN1rv#^{ zGn%WrZnVs>r`fIIu5hkUfOQuO^t-~MnCdJ(y1LR`o1ziOvqBR?uMVknO)7X)D>DX` zH)WsMfh;$*BZCn~0d-r=Y<#8>NK=L3`-)Zt9?@8A4%vC+1H zT+~s-VKOcPbGcjh^?ty}EAU$nJw=eHL!92s?)B7&&b9CV+5#vLq+<_w4J*j6b~q?P z4s0zkt?xPaPAooy)peQiB76}dK|s_ov3T7HBr9)hOvh**bEa0CS4MY)a0}Udb1!od zHd-(w)7;kc%+MEhw$0kv1-ZJWLGttKWKoi`NQiT5E*7ZtKzkZOdPd@Vh!){EsMR3$ z(pHOJ4T3Nj2pgJmZaIO=dW>h;(pl`!F5q7&2=3rYRXhSd9+1vCi*B!7gZ>Z5;kfQ zL)FUY@bDRPOLw_=vsjBnkE083U`zbem_}G2;GBz+y(l9M75rg8B4%P)6eqQo>dtSpaPn ztYErEOg>N6$z@r3T@1IR7n=;L>?a-zTVYsNPpdXo9)0d@X>_u;9I0}L0jMg57)$kw zlSU%_VviF^2m*;18H6FiiId(WBZtHxY>k2EG*gput(7XSl_IGzfZ{2B5sHc(O-E&} z7>d129-(SA=IV|M_fpRCEZmD!nzLihD)H5%p_V!;CRR{Q5Lj7Jr=#Do)x~^aYcfj{ z(cvn09}S5*{*HZ@qtvW?=bncz3$ZwW%!B-R!!X_=1h2u$8ESiErD;Y#CZxFEH@h%E z1pJzN%dBC(UTt=`t*C4aqRx z3k^U&8*;X6YFhAAi@nUs00bqN#)QOLj5H8eLqlA{k)gdozmS9J$l#rJKXYBn$;#>MSsgme~c2^smAc5K1 zr;R0HAGN_3sX8ignu0H35)nuXwwgH*x7j|RM6NS`H=XBY;bp;evGe9!>t+gCrvkAT zV+EU2TFeN3Cfy7!iBi>QXV>es+u+z#rEd!rDjCR@pw}Kegq+bXnzv~n&Av90aZ(Fn zWAPU^mGglYq_laC-|VR!uMYo2lR1=XslVwQVw%8_T1+aQ5V| z7C+~B=P*8<70M*e6~i9G(kwao2=k&9e1mqGCbkwoD3xSk*e+75`JKwR5TVCJ{J~uQ zt9<5q2Vd14^lV|frl6oSH;(9c28}D;%w2i)JF}Xve+bSD z8v$%Q)R!@+gMVQcO5-|b_QHah0I=n0c;1L{yN4vdto!6^ZEt*jceM}}{B2GpGqDLJ z;GQV93;$)TI7oDUdTeZD450t!qu|6HFF4v^-Fq|%7H{{A?U3)_?ri5Is|51g&Lp9b zQoS*PoQG5t_jR{4=yaOP9EDY6P(&qBfkfadT=fN$1xl)^-T-+aNlgyZ?Q13Q83>Ej zzPv|_mPjsylqJSprA8Peq*gG#rCjZItsah(@QT7X2tAZ7s-4k#V_Os!MdnW8ozY5kB{JqW7x%VkVcOjbDvf^( z+{Np$W$cQgES-)zBTuvN69?4c42sOnfem}Fguf(*Y=G7Jz5S|tjpcaf8hTy*pvAd> zwe44r74Q48VC{9*j{!97dw7BG^&_vx;d3Tu4)!J&??b|zvo@2=^!zVsO)FIEtgRX> zJIS!}!mp=pM{V2-!{u9in-4K{d&t<1(lz_eLt>y)_n6^#eYx8VF?eA&U5}Z@NNgh@$yokM=Q)sxq2# zvbq`~IeOy6u<}anrmtej1Qc&Q6KMCvm-*HBeD!k63aCWZ5(`&0p{x=dg6o(w{HRcY zQl*U`@PkmPE-Dp{U#VgnBPkK>-ZoNPU;W@5Gq7DJ?L(4@9$2229VH0NvqI6$WTXZf zWdd$mA@ysM zlvcYr&v;AM{H!_`Lsi#hGC8?KGvv)OPpFMlHt{^{IPr8F^4VD1xTR2Hmrgg=vXr5L zAhxY_(9M?bbihn5ktP?Mv!KwqV8<^kn?2VnN7q_5{LrYZ^S^YgY+;f1@Ya4iUlZT1 zJuvQY`+b`Y`&5C?=>>-zRTpO>dutAT*>u1o{3WED(Re@lq@du`mdi1Qh7&atj_;+V zNoe!wTjWFj+O6NTpY(6IAD#10y)g8k=6m`*YUhlvn`^ z*WuhFjGDgPKSv^>4!ND&ZWDLf?#81HW_7W{cPH$WjkJK9#ho>G9jKy2b~TJnF4&;H zl6!R2aNTy4bKmRp*0!!EZrDF@bS^mE2L0XApvOJkdgQWB&os-_xC0f=vg?7IE2 zdfR}w-+zBX8cI#Jc#YU_Vylnhb6e78(-q1fp@OrXE6oc?LTygF_jB)B zyIi{pUhWEKHJ=Nk*P5Py0zn8bfilEZQa3rvS^ErQKu2csLneHmQ z82!_P9efHMXlrmx^{Dp|7MoDqr3w(hti2vHTOC3$QV1p_7PYnwg^n}kL<82i1b)AF ztG6{^7nVm+at4uVc@3Y8Xwj(xBo#7TncW`8oMUA{gKP3=aXT`!Y`Im}92PwhsEU)6 zVfin+!@s!VFMg}=b(_pZn3XJ9QW$=yBG_Q$iP-jH=FRyb|5YjvuGDC7g@YInC6(Z| zliy{b{3*vE2}e1POB_k2tvGtjW?Vu2+FWwyJ~PO<4aF!!ealCR_gXIhsUKfic){oSwtt9xaTsDOpJ z9|?Wb#P#Q^DI!CFP4_W2+QPuK?c7q@a=NbV0rv8VQ2MYJ) zZrluwFmNt01LTjM`n)CYiQHk(Qnwlyc_dn8gtVM_C?k*Dqq4e;tGSzx$W=o%=~*Vf z*!omeMcu-wi!s$CVRQ}eJkP@eL5Eh5g3)8#M*UT27cQag=1(s6J$pX$Kh$B``$+h@ z?N4j!<3|ndjNDm>vSPZYf)v? zs&F&iThJ$+O5Ra!%C4|!-6j4?uP)AkLaRzPrzro&b-GTa zZq$7E0DNfvpaQR5O2414FTF0g@4L%)lB4@`84JlGL?I#sp(eO{j5ESMe{D_fC++(Hr`H4atNdT|W|r3b;LJF`McrsrV=xC`u^rEEnus~i?dUIC{ zmMbLrE20E0$62TNR4)_o(5P^CQg6!XXqj;+9C!B@bhT&`TY17~Z{>|G!px>>(c`!H zrl+0x(p}HnGJPjD`_HsR`shvf$?SuWu=D@bEo%{{u!3SbHELtvo4s3k@OTG~x za6CErZNS4`Z^f2fyS{ea zaAMok0d?+dnOKG=ozb1i_oa%QgWz-x^MXbru(uE_WhA%C`shgSn0y3ngKpX_g1GV) zq0YiDMXr37QLU~SA?I}z?Q0kBDCy>$2xBp)<&l}$Jh^wPc>=tEVKO$xCXmf_6+ub| zKIAp7g}7}XxmP+Zl|?@0(I`^t9IV^8s}uEToXD}d6f=|`j8=2jC^-G^y{&G~#G+en z=@w~`T6llfpi-J$Q?BEkv0$d&#T8dxo=Mi$T$Mvogb{ANm@K^v|i_J?CJs+yG#rQ zO?_=-M(FkDa8_<~_-7p9Yg-Y2sW#28*Wo?a+EcLwfId~E!@w*M*jy~LaajFMUq$1;B)fO>R>L1zSLXAs zTL{|UYtr)>eQWM%Bg*cad1Gp3^FAf)o1TZj_urp20qj;MKbyXD)`X7Qg}Z&iYj0>k zaJVyuJoG4~>tw@RC(g^=D;ix+lOd>cGabFjQ>KeIPn-|h=2u=n7mY1Bdx|@Qu4#@> zb_JLZuF(D2cW~kNSa+|``)F0ToF%7}b61OdXA4yAP8?~Md%Re`4)9Zm3XSqcb>LBqI9ZoQ5)V$zxamv!6GB_ zS@)@%zDCTSQR+mQ08vD?jn_Lb=x8s;#3TH~&>1JOReX#d`;Hf7QOS^t5`|YIuIi{o z#m3t%IAO11ylQmvMx}FZvGe)blbeNIymK?7aI<4QjpsE)?D_p`eu&iIuI0}Tbx5{0 zdzx-HaPe~p9$#CY`r7eu_jpdl>-f!$K{JoH)-1&TW$|I*anYsl(~pL?Z9EZqG^5eq znDrRw0S+D_1$|I->7#X3jV9zU1@8A`PE^&Xrou z3S}kw`$r|JHF|yrhSeI)LZhRES9h6o>>`=h-9S()qqzZ3(n4^l=>!)4_~4C%qwAJ1 zWua}7gW+d=oZ~8cM_rRd8Yb_LXaPE^cMR&ime(jcDcR*yWif(^+@HOFzC`)kGfcP+n+piEh&9 zm;o;YUb?8n7beVV7D=2KAzZH?RYkOtmjo=ddm-B-O0L3)ateJ;mMNf{qIsTN>yucS zu^j?FJVx6}!B()#05>DaLJ-XU>bommFYt}Aq&$2gR8}Z#&xIXRFwRqLJT-8w{uV(d z{t<_6^s(#&BE1hsAA^|DrDg{#S()0gtgD*Btk9VhYR9f{ZL(&DzeYE}4G0xRIGIm( z;5+zx@g7!kc2u|vuZ#C3TEq=#-z2zOF=q5o#)8)wn|;*D9h=u(T7Hd800jk@svPe~`2@A?8ws za^j14s}=pBM%D(W40Fim3L7lEk>8sda{Z_H)beUOu~WDtK!Bb($ z3RSk;e#p7WCQwCaR#%Ot&`Q^}Cj`ya>am1Toz7jeebjkWTs?K+!g?TNH&7WSVxVCD zMie4Cr%{1-Nm_eMu0j#%M4E$1md&*%k4cKB&!5N9h(;C@WW$IECdsbMNOHQsiCzla zoqhIb7{v*=9)o==8fE>EiD(#V8`ht2S$*U-so1X1VM@hQHx3nd@ba7Ych+UK-b-2R zn%*U}j7rwDT2*_!vpaulg#FG+7bsBkT-?=N4>LyCQCg}_H(aS;p}5G^A{Z zts5NMLkyyG7flxpAMAtGKKL`FIlL#|qxSTChP=n2juk;>qeXmykgL#jRYvKtUUxbC z@XZ|;S|X@Vql!8(?&DchU1k1xnJOYGylHpocV^XA!q6H0w0;-4fuLYn?kkwi_Cl^g z*6mZ#f(^4Jl2~y^WTETtTg7fqtNsyxdh;%4QI-C^_Yf}O&vwH0e=1t0tO-U(nfby* z5}}&Xoj78!uFwDQA@bU%25O~6riF?9^oknwnkKi6448 z!fFwTyeOLFcq*orxZ2%Vr6T2eyWh#4u?psJN45<@=`m5BM}9*D;_+p1ev!Q-MGr10_w`Ww6(*UNN-o$+S*GX_@yD^^;T{yp=zLT z!Y-(+tPyWds&}ZB%e+|wl>(M^q+c1E)uS@x7IpW`VGC&UI9zRcFxd|U3(}$8{O0Yy zth4t&qWP|W!8qNQ81{uT)UeIeO~%3+F&1SA1oUwy?orv~{5xCUf`I43Ho8f}Xfh`a zh)Bchq>;{xG()taiVjPpK$Kx|W<_z~S0{Hs(43%zG~Y)V^Dtvs`%us<(&k1|jeorH zl{kQ8Y#Nhaj2fJnM91s>V8z$uQ*rS88P&cY4>X_?^d^_B+Dm|hD~_=*roz|QW3ey{ z;lgJ)+phZnryiE1D(O6OZ!et8fqL$Fav;z#bYJWW5Bu`aUwG2!kuoNmAzj;c&Fc3Xs_{QWi!!e2kE5E-qlP$tRI@o^N1NO&vm!B z*E3N}dv62lUtxncG|UQEIj|k_x!wh-y0qrq#;*Am{_X`kZk)kSncPM3ZtSZtz`&*k7H%#?pgJVfRK$Y$W zc)v{qUJ-r%{K|UEh?Dy!ZLgZO*$uBTs^l(M-1}V8Z zngFvnLYvEw#13%dP+cljzymw^3VnFy)Bd;^#3GTi$slb3S+FV|<^n{g+Q-fg5!_09 zCDVrDT-x4A3W9p^;qt+1R+CTmz&-9{2*p1nH;i4=4d|W0PykRb-QZ z0TmEt&@7W6kr@eXE8o)|&iA2*DG`QC9ISC0B`puJ3Oxvz(E(zkFTyB+1FOH?@Kl)U zL$Kp*cZN%^;hLjUxOzN%w08}sw|>qODdqB=!!QWf=Av%9a-drC5S255!9_0(`klLY zJl}V7oV?!fq5a!$%YQCxPr5ibJioasjoUk-G3py?Y%X>+%EINu*6-h7oL%_S{7Gbj zo%Kxd*F`Uu>eqbhHjgZU19AO~56ztuZ+HBN%v$GZOz6~=;D5>O-e*1c!bG_i{T=in zY-}TPY-Px`@J6pOZqJ@Z?>CU}SJ>pxSGIUqwKJ4?bFAFcrH@TO3|m$RK6!KKCOW%Y=``Z-!=>SeURSwc7X?*8^|;GK<%^*A+>KQJjO_w!4U$q{K* zT?lw&@jE_qz}ws@3}VjHo^8@8#`LDQoV6?gTaxSR2jS&i2xl7jVVMkTPN!4{?`59; znx;y9;yLcQ5 zyzrsPS&7X*J209Lq90dn+4BY3)v-P3TN@r5*T;E6YYL3HHoFHt9)nqQfl`n$aS#R* z^|%BlPKhyR4y^Ysx#gWn!$%ez&N>tBzk@3a`NK*j{*6)t; z*Bz|cV)ouCCpsFo9xyWmOxC<7Z@h}|04_WnZ}_a&SD2CE>Gsp1$Rb~&$veaR$ZKn! z-SfyRf=egP-Z&kL#^wu;+^(_=PiNdYX#LZ#f5IdiQuCGYxL;bg)3AQ~mVRB4zB~0y zRXxxI1y+2#hkNM3NtEpol!sl_>! zkB{#k@`}XY@0X$GY3W0Aao}4dMWH^TX~Y-+K7+68d)hQB^1kvFqqpOAWSinB9MR|Q z97*=#-mW)IMe~Cj43%X_0r+;DXFk?y>J-6jaccHs@mpjXD<|=Tuxn#FF*`;;D1`W7 zOo&M1Dl5LWU9%gg$7?cyS&E^ul&p%kaVaa2_=lxLZn1E!iB~Lq)D%QJ1pSUYgXc+TyB+dz z#=D0K@2%P>-Sw#Lw?Fpwi)iTI1kO4cUCAY?AOH$-gkRK89srI6et&n`_H1hAx0Xfk zy$|*De+kf_z74yXo>#TU?&n1Jm*IT3Z#E*N{#N53yVLqTQi9sP&4IhLg~AEDkO!GD za0YCj_MQKu`lrqW{p^mal_ZDK*OLR^hzyzt?<4jYYjWXx11GK*j|KgVGV{-i2~M;K zPjmp^HLdz=wDP)9_Mfwk&?n7@={#0UPJmZQO%j%fR)(kibZ4eL2gAS^pvqg)8U^5a zZljX|daE*}L9DY_YLh{uGivzR0XAU;@31|0c(tZQk&maS_}JRa+5iF{(;i>|M8p-e z-gat=<&~JU8!l;<+S~z2WME8zIh_yiJ2RW7&VOE81z70BKK%~1&%O7(-|zQ+|9socVXr+b&R%=1 zwbx#I9rqnP7!E*zf6}j}e;2-Zo$?%F3px5xRzlj5jVdUk=btX=dhZJtA^SE){#V)< z2?3!4p9xw~yZ-t=Ql{SDh@8N7QCdc->%OdmxI<|P5%1CC*fZixlZGfy)o^SZ%Kg z^IcW9o$_5Hou8!}x}2Zqgt#w8B%ZmfAM@#v>pssK|9Kd^p9c5{i!4KrbhE z)@6aH{+<>Nkbu(!0xK}=e$2Igo0&P{zBkT1GwPftGh7fV1XE7T{-en^kLKJwdLpu} z;K0QbkrxXN+$xCqr63+#_)q@z#P`2!yM(fcmon!+~T253oZ==^`>l*pRo|L^RdIza*a zL0W#7Y4cqsk;x~1m*u?aJ%uL#a83RB&SP0#fk(W)JK_iCz--2(GGyj$$mahn!p5=# zfWN!VSfKm;OZ{xa zk?U-uhK|2W$4yUf>ebAHb(YT>O~x(b!G3A;4VyH#Mc~-T*@hp~moQ+dSb5rU@RHzf zeE+b8CbseVh|e-OqWI3~^h*XYVClD{#vf-4HtPO2`}l+F7Jmyn-Xz7HIHjL}!FS@T zY_mT%scLbbAh+9=onmn``CPuGV@J01{mgLyAVa<9;{QC}v-00u++L}mOp(q_dt7tg zc=TMo?z`T16%}CQ4sx+G73AWw!5^BBobd@t?-*Q)a_Ug>IpmJNB???rTv9nr-}1eX z6xL-;k-I>t_@4{+ig*LPb?$%U8?SA6ruJZ-^Kc3G+$|Ic_aFT*vNq@LmjyAma=yQL z;`^IrA8aZ7-;DKNk^_K3BYQ8C%7jw)?;7*N=mvi;@P8yH6Z2h#&13~Jcz_r>?>zIy zYu`^^b7oAQS7^9-%$#}7f<Y`(vl^FJhK zLqrHZryd7Y!v0%wT1clJd7rXlR}v#D9gf!=EN;-$H?L|`$p0ldsfw;TMVDOhOn!<~ zT$5JZpuMCzG<9Zu=>IeSm*fOy5y1>f4l|4RKO|?^-6jB(rUB>BpZ=cX?m3X4*~~5f za{&NgxZEiCy&mE5T^9M&MZSwru>1cmF<|SWSLlKlNZ4usumpgB-XCma?v;EKju9(u zg0zY3_>?TewB5;{s7nY*2U`O=?$% zlI~uJzt&7@pnzcK+ECK%3;4UB*c11Khc=`%c+GeftHgAn{fwvZKcI##+#Q}B)44hn zvXFD>jB`NE?zz9g@V`Ou-GZ9CwBXpZhBQ-Vc!8MHeDJ@(MVUtN_t^T*^{nK`!sq`D zR>njYI)NMLY{)`Qv1;9vc{91;jN#42knjt|DkrmlKy%?@ji&QCUl{qr(11~-g;02* zUh5S852z2m{reFe69WJsfouXKfZ3EkNJ5B& z1OP=K1A}DyuHQM-jCm?CvcW+?oE-4G;T0d*e6V5G3zU%5hG+E-8#^C>v;lt|npKKy zS~i%#KM0VFWfIv7em8z%%y|i`AB$=_kAsBm)DF3BVEoAs91aq>GAXjzQK3q0(5?^l zIq!QfcVIP$xLB2@)viyudd^hjh<`ZJpJ}zLc@hI`)fALi2oyjdfCPs z)OlE%qovRyzRh5Zt>ixpC2^O#kJa%)IAnV-4x4PR4B`a!w%4%Py@N|0WDTgW>^sia zL|tn?zZ4~|SL&kDdjX(NZxi@q*!q56wg4b4=a>3Cv!Sxc{R&AKX>$FrfU*V3x zpI@SkVL|1|u}qxyL6AF2-9b4}^2ZyGn9xBr2Gb6R-O?0)ToL0^o*O z6*C4bDbhI70BDB-Sex$#yk-^{H@sZf^IkX1m~#SQXyreIs0Me|l?~!hZY+51!!Q>F zLM=tnso9`Q^!^R12p4nyn<^0Cp@9kD58u&qDueH3AxfR#0637T-1YHEM)V1+3_}NB z6a^Y&ZVy2#DUNPQ@=CG?%8}q^*M>QQ;-qQla`$H~?YgK!RN{3uTQk_{K5nC|-n5?_wieeo*l}igwjEugXx^!F;V)F>r2Y0 zlK!P18pA!tMd@ci11zbuf2q+B@K4PEfL(p@IkGBM|1h{*P~bQK7|}T!R#_PNy=m69 zp~1)N!WA2J(>~vAm}@^YzBk;CTz_x9`8<1X!hxIM1_)An0|cqPF$^?Hpc@Qs&D`OL zHK1(F5e2FY?A5v>r)Zm6l}P+JE<21)aSpo;WIMLuqaOXB?RVt%` z&lGSuqz;f4SuV1TjcstLl24G8b2u(zbxKpbOu*;3jJGRGH@c+v+jkstw(nSqDs=}f z&2*PRQDP}L<>+(`SPJEkpMFx}GTxBxF^>J>fLL=O$`Eino&iWWeVK*T?dPt{J$z4x zOQ0o74*_TT&(_ZFz=9=kSKF`$m7I-+jS>iwEdRSf#^tR3R|BF|Iq$RS?-5`>a>sv0 zfW!Ele^71Uv#;j=g9@)iaVVONx>ltr*rmOaV*n!HAnawPbaqF(=|%&WLv984cQ(0t z1L^ynUa17BvQe@JhjHwy1@!k_z&a(LLaqiIT4j8?L5EVnXKTQIUcGi>5!-d?FL59ni8a62dQ7U@b^Mo?2e}|P z_}~*K`?l-+^vlm4ggbR~EakrR=@M|#d(DA3(`7(%G4ARb!jYMn2a*5^B!H%JfDt|D z?-{=rpa1oM01{9y0Fa12r*r4UZ5K6FU$5j3J7$ljBu#V(rk^lo?Wnp0`&+H%_a4II zHueO-0{}*O(}UyDPWf1+QtWI@o2C`_Cy(Qvwk%>PGG%_mfe8$KiYF##hmak}ou zn0D-ebo=b`sF_O_1RO(fm%#zU{<3Kp6wZwU)sP9wv>lLKfd+h+fku@FPmtV5HfGn^ zUB-Yvir~p0B)A8KsPz?!RUj@i55EoY@Y*r&>e_M**pi)jGY=(2$#52%xc*R+u#3yZ zJN=gR9ak{bzTjC8ObFl@xb^Ok$Wv2(@b>lF<4f;b^zT)qI@Bfx|L_5eVoIgZd! z?{muJ^UdX`3UsAum6;L)S~33b52ygjAAmytKJjkoR4DZCgRBHJayHV&L3X1x_oG+p zEnOYmttzedufL#w)&EuX*WHGe&gQ=sBA&d3sn~#Zwzto2D{BDA4oIkH_Iip3VpAAN zpR@%C6g`~9TuWwXZ^?wmIqi7EQr#4Pj>d=(KD9iksX$xO1Y)G(j<{Q+TUyi#p*&1= z1KoocD*RWV53YIgd5fn2u8D!itzVU7rha{2P+~)6pPR>u%;PYqI*n-VUDO-5z&YOv z**T*)au~un4?qT?wn}{=7&4VvC#@4UoiRk3orfkFRNIOK#b=Us2CLr=o8E5myi_~z zvwm_wgdN37{E?hG_PqbhnJC`G#9Ck>Ur1DyikD8+shhR6v=n<@^YJC|;1Ag~)&7?| zjRwVc+s=jAa>*)Gh$%ZsF8y{J>w?p6p`H0we0cxbl(8=GWtCAM||N zuL*H5B=5TO@Z+x>-l=*jN!QDq_in45d6hZh?$(2T%zcb1DvT2Y&k-f0atT2+fv(X5 z9!k1-livOzo9mKE0};GNdnA>2HgG9+MwG$}x9jF<1>MTz6#J=C4v%rU=Q7SS04+|5 zjhIsLw|^x_dN+}wbtYf=W|z)~d^Sm760-ViEdCr6OKMO(sk)8(z;rT9YR5}!ajWx1 z!r1!#I^PiXs5HpU*si{UKvvd=d`O|a;m~$-4i{E@;n-1{qU@1(94a<{oFL}VMirz_ z4f0ylFl5@l>|s)sDXIO1qNkJOX^8JW*yE*6abZRfJP5u?0;hqV%blH-)jclNO#C8- zYOJX#bhg&D;qAH?3;D0!2C^7~u`X>j=#C0HW!6AH+|EEo#NWbDrLOh!_I!RS{NG>roE-$qv0(YZw#5R@)PUSsyMG|cELpk88SJF-&I)f#khE0e zYVmc!0p3|n3eRGZ(B_b?t>>lGB!^yh&{p$9DQg3*5dld_=*1{w%lhltEkptWI!E>$ zZTCPpuq$yQ1OlRHA&HJPp86xO`9)_myKuk-=3geahZt4PGMv4UsH$L7S9w!bWTCyE zYe~+S8h-`Z_6OnzI0<+VldmXa8VMZczhPsp982Cnbvbqkv0^Oert#juJbgn>i- zw5pcSv9&d*4z{#VpRGTVMDAweFWMAt%AkyttLj?6!$8;vt*+XAQFL_~Z{pexH3#yMVH4 zP6s~~me)#zbj&&%Kpbkg{x+`t5in{P%#Jcn4ohr|v$04V6YXc|Gzf)NzIndhrijKz zsPx5xa2u(wjTS{fYLuPYX6MMD%62X<(OzC3!wJMZr}pBN6z1DX@Jhih0vJBD%H4wN~OiA zqyc@{3<}F!s9*SMoh`#h#FR*oTEg(kTi>qWXFKaw6nW^DtFsdiWEZf3N%G8+=k^IU0X~d&xpZ?!dhdN8fpZt)IvPKN2#$(Y&z`xt? z0=Sbdt=~^7x?b&F-2uoy2wwSk;1T%`>)BOejd{I(J^mAUGF#|$K;z-*=>%azfex7z zBBEpUjrI=Th$ouV78N~x_2!MI(YCA0Z{8SMa-Iw{sJq$rau}P9gdeEIjvhhCeamu0 zuyjVhT+wgB%dtXZXk%$MVWlJ9rPPc5HY$X+Wvv`<5peaw%B;FP{!>v1kzrASBglg{ zh2_kdavUaC0DZEue*v*(%7th~JNjMA44p*`Cb{KY96p4I$=B;s5%m8&wFB*ImC3k@ zdu{-vY6ILN;51{Fu0Z&uw}2PK*V0I|QFtD(C)mb*pg%2~<3XAWbcRd)G-m<-Lv0h)#?1Wt^FIB()i`k*y z`>luK35d}>kk*@dl9ZKG7RLASl9Bb@jq+^c-#?uNxRBUEYq1D;V~fZ=f8r0}S0noH zxR3JUXm>yV_JV^p5@(lGIOmzvnZkBTzHn!HT3HRloggQ$r4Yy@AjhmRMwclK=1tP_ z_=ZaT8Eu~&S3v9-nl;~w7Zlg~!xB2UT0C)BQn}dRwf0+@aQC{G+^R&YHZ)uteu#pM z#g7#eEV|{QA~|)X)vVO0blJ@!ug?IB;(joE(TkE0Om%IPQuVt6di08dc>-=mp4|E| zW*yiha#ktiIH@*Z6u)|kp+FVQJh9goHmN6UjpqP91<9V*^NU5f3B1Oe*#`~xno7hAaG(u5l?JY%pKd3{9OJg`dQ;dO@ zow;lCX8QXqWw+1`=&>Lac05%^@{oxREI5o>j1pkEsWBhQZf(Y1@!z|MmIw`fH{TCi zSd&9`W})=~7z(ghyw)uFa=%ZZq6;z975gLLcX`TP;8*>lzCS5lRm!g+oQpk>uzveN zHgpNi~$UIa)KHp4TVuGAeONmuA0;<19iD;y!f!k*)cNSV}S^|1x7%ndySxJ#! zlX~|ms1|Twnm&m#r6Y4}mh$8a>Mqx4g(2?)b6LaSbw1NZT$aH&Tsagu*<(u&z2 zFyF)4-Cr@E2~K=JGsbbTQ*JG|re$1JzbSh3Z_V{9~3#cN}oU-4PoI5SHWC zk7|$jFALG=D8qnnKl4cy{4Nwn z?Q%YP0Ejf88g+gNo{rvV>eq3v4#hS#EHwQ7x)FNh#Z>Fzx zE<^W_Glp=QJ?5elXLKaUsyoKhTX$4XS5A|3BEb#yHBNw1ym)Sh;?#hEEEU&?w+FwO z;&e1Cw1Hooi0n;D8gw`p)!iOtF(?*SQzNb3)u9PkIc@&!L}`%LVG!uqc%}k#SEnE52|!pee$;cWn~+OWr0?yBdU4i^q;52VkWf< z&fI~aYI$etBLhOw)Fez~#FX4a8`kAfRcJ$FQ5i`}DpP&A!5GhKha}RI*cGoZ{h`a2 z#ImHD=|`upWu(nrA9-`2#>z9b92f3j4PR6bHqi}RJ);Bkl**JVMecpy9JQV~F0fc~ zr^8liMj}j+a8tNokK4z;Z2n;L^VP2$TYk^G{mG}l=Em*&ezDS0HNoB9kDvZo!W%gF z12*2V<33s|o+1K4^XkeTSOsn}PGl0CI<@`Tn`5HiKD9v>a!s~9T{eBJw;6!4QLwyA zdOV6KR5Pw><6N}r4z$4a#m%=&Ib$fU=%UPG!>&ge#olc59(_$Y&W#-9>Wp>LQrkl<@bJ)Odssxk(aif=*KkAe*5;Rj8!xh>N)GZ+LL1l2p~V7js{+Yo zq;ZXlioWo^iYM9Yo58E3R_G6Wa~T5NmZAevf)|X0gAyW8bX<*N4l1-;_ z4do;4_QC}IO*NMixt?Gnh8JlE=_0u+@^O~wZfBV5Q0ar#1wz}ki*JE!);6oH#ZP1= zwo*m4pb;%l=LUZZ*|Gc%*-=kC0nWxetJ zARrIj$@FI8r!LeCK#Ly5sD^XP9SJLs)AKt)}`d-|bz)*WVd$%?cD*Rh($yLS0K8lF|V||7- zx@D%wz|)!8MV&v~TKMxXlOtt^|2!oyU2+>dVEL0-)0uhTpDT0F>#~tHJPjL{>EC=@ zQf0|Iz->^e{`#eWA+t45Z&4%c(&bC9zWZM zx*1<#0O;=h7?gXVRAbP7Ej+({{HSrz4eYfboTbKK+VNT;3PwX>#^TVJ;K*})RMFLr zpXlRp)i0+8t@gb&a@EgNQ_ldS+g*Pjm7@iQhL9DlD;-0CA5X#_6~r#cV2Pn`CV}H- zkl(UY*XO+a3T1opx38gal83W-82d<8)^81r@)_Tm_)A_N_x?NssW7;7sqx{BH?~0| zY|i#Cy=|lmzD>BTDw8d5pCHq|PoBs~+m^8R5`F5W)TlNae_>!qz(^rE2`vv&e9l!e zg)Ht0N9bQuJ!FNBoZv(%&3U@m@TIE@H^QdMsf*KhJO-wtgi}$;GTuIqJ_lxsR$cE1JX!gA)@Q7JyGQ4@jZK?(?f0lJDfMw>T@?g;NaiG`e&3U% zXAKEO+((tLcNs(ez}v zdD+8>87MG9VdF`75s73m;u0t69-ZLwSQorSe_`nCxoykVY4yc7_B{7nY?UG zAP^MXrE5{l!Ppy|6oHsOG+@PytU=ckLq3apYhxc=b3ULzSE&`&gMK?n$EMo25;XSB zXI5>8&L(i!Tc2Z+in7ttxMSWnCbhKzS-(bdr_#a~)k!H~hh_B9%mYu5Es2h%Avh>m zWamXvqF{;q0q-W(R?#MccV=1>sk3mQRmB=96&9K6v91JF@`Kc5b7|d00faqWDcstA z-82WiNv>iEjBpF}LHHo!t*xqz<=ITkR=In%olU1ss_0+MN$#z0$W*(B9op(t{hAR; z3I8akbU?}g3c`=P=y{yfv!HYpE~fFO7kI2`hmd=<=8WB6 z?;6Aok&`=yCc^gmeCe5d=e1n#!M45RuP+~V_e_)_I$s~|<>~Bqo#W0O4Lz5+pX7^rOH$PuMh$XtY?|LY;OyzCHMczT zbLtCxo7(9bqayOgl_LzB!JDzC67{QKSwnFtMuedr6LKA4XSh+k(JoU=1<aPI_PccSk=Fb1Ahg4a!twXXf0i3-ab~tWAX&oJnU43JzIDhfwk3u!?|frD3=#; zuIGmz5n@&6bdTYSqbV}A;B*9rsV+1teonaB^I`L#t!!?~exv5!KcBWb{Zshm!xcQi zXv18!rzUA+ULMo8LVTV1Q;=+#Ps=8buW=5Q| zvNWbttJF7Z76lPgxq||oOs$JZVuf13lP~v7s(UM`)cQ#FyFy(1i9xo$@74egUL8aZ z94m{gaKmT&VcY8<{0vU3-z9e=qe*y8o(O@@kEOBbt1*87Kx|uHuKMmf zsgjNtEH)7UAOwFxG_mFf>?(L0kMI5oI26%#K@~fb8;~*>dv-^Xj;|r74@C9W@IIQj zj!1sT=!l50nyS;3=IZP%BPYe$n@NI7RRk|$cT=K6iHc?K6c)D0t|R;49KHc`lESZ* z?yf`;?S6u(`0i}{hy){rohvnxhK&)^mfB@XXC+aR%yFn%zP9}IMnzL3(%?70ul@dr zE;KI+7knCk4I2Nyex76jc9#0~#d(q(*iq)tFzTIU@I ztymPDjacV(J4|^L4CF>$7QpVbnMJw?m674$%EbYB;ed8pRqk`Tx45EsQa~aa<7gg{ z9F%*oLCrLs4!S~bw>zeaPLU-!A<`+Y*BPGCdtwW{Ci(dZX3p?@bvA?I)$;6B)}@5X z41rZnB!?_i0I3k&?h<&;_3tUio24i3pA&JP{n1}fEONA$`E99c zVc{L|SwTl`uh`;U1E{OD)w%n{Jpy56Zs_2I$Gp`EYereMcE!27I*%~bL$)*5x1!kx zQL5Sg2m=nP&L28}M-m8|V0FdvdMVZ`LT0G~T5-SmMDM}vqsQ}G*o)*x5ATH88_y<> z?ILu~uX4@1u0~>*t;~kOyZ*19|GAo5PG=6?xbq>&`{$D%?{2_Q=Kl<}NbZQzL`;EB zT#9BEG^PZ3H6=YF|N<(#rXlLO6aYAi#9ntB89xHUa3y>z51?=(V{2XO z06fG25#z#uhoktW)l%zGt94|5g1bqM0aOb3n^r)@M*4>K0(I{~tKj^{eb9#)r*t+; zY8)#xS+KZzWr?hn;&-K0Aq}ABB2(Y2JWch9r3SUlJf_gRU*tH> zPCAivqvdYwXq4fSH!u8>TZD5M4u%>E|F`jP*}8 zC9h~qfy`H}l}f!Y-&}=Uo?AHMvf|g)+6;8yCjLzbxG7C z#U-HXbLnn)WFpF7i_6ikdW}V}yiEoDD?Gc_z~@It^rH&px=oPTww%FBkM~d5sh`*U=j>*9DPYBwAOPE^)?pOrE1&HxlPA^tEf)WVHn&WQ z)%$aCvI{H?hCBtXr~k`(dxA~CA?lzYB_aYeawY!yt~2}^M>-5KQc09yOsD%;mte9l zmfvI!caXT*yzWxnpqN|E9k9amT;Uf~BhBGXYAJPm5@}JXgL^sw4(m`sf0z!g!s;n5 zW~+JbVK5ZTP@EAZ(7{QBB`aFfF|7$k7hk3l5SHSvlGpkqAxLOH23aXa9&}pjFr*?L zVanp%(0$k)T$s5I5*Oz-3f@N3(9{+cF6^Ss+NUy;)}V3GdDI0vZqX~jS(OS2r6ky( zog@KfVr4r40++YunR7ifZf5?|?bnS2nFIyzbs2qS<>zr)v_IflSaPNHYBfn7(DgCB z@JhOi3|mxHF=wVa;;@;1Ww>Yu-NufCjBw0k5p;oBLG&`_OIX?LF8uCRTMHWZu@?m? zUwivIW^$Eb-tqE3%@ZX*=pMXAPDu*;XefBP?W;M^+c@Y>o|HhUz02b2msrdM=7 zjQ(O1a|>Yc&hR_|_&FCAshmG*xjQSz=AB_F0l1J${7=QFdQj#dfB#wGcCi+j%-dq= zsM7AB3O(BGS6hC;mxR{c|uHz98>9{i027iJGc48P&8PQ+-j1@SX%(=EDpuo@pLvG*sSlpW(GA zA(`Yzt%M~xB*okX`PGg9b0NA`)Sb{28dE}A!iN=j{kh62!I1;LCt^PnL56sYQ=uv?=RJk3~q%$nE&iyv~ZzAErs)mgxrpy6I+k?W8}g zw?4*kCdD4_{jEBwB+jobbqBNz&|eEY8};MyjbKELMo0ceQq}@Dk5e(G7e%< zy>~BqwqI+-$ELp4o4$AEUBmO})={sz{+RW_TVK&L=Z9-4R3?t(KvF0ieu)n%dWhn6 zwH?09w7cj(2rD9udoSWyN^YQAULV$wh0T4LK;)W$(Fdvh1t|;!aPJ|9{0qgm+5OSb z&WomZ1{)MRW51kSi)5)I7OlnI-`y!u9$Zo@1U5kjS@n^<6P(MXTw@Nkb=u?5`USIv zG|&6jJ6Ef=lKGaR272p}J$tN{hy=5f2bZ_0L}Nl%ua5|y>JMO8DeUL7Rs!LISKB4{j~$|<)jz^v8Dd$+~r(`C{@~sk1^XSdVl{4^Lw96j4(u zt)MXQv>lTFqIor2aIRELetzdgePV9Nk1j$H??K$sBQ?J7nAzrc`)b!wG@Ab7(=FrU zwHJ|PyWrQ6&Vv~=zi5kSt7r%UVsQLZ`bk?_@!pm+2R*0YThUWFgJD6F4V8tbvrNa= zHD?gjtQ@!akQbo&`ivw9=Gp>p(|ADqIn)QbrmI)3RmGO6_Zk!+XM zrQFCJ%E1l{y(Y;bnc8{!w-CGaoXDetm0A_!g?QkC_TaAD#f6+0xwGf>D47SPbz419SXBzX*m`T8GKS(@h@?2mak+wc0k5C0aTd!kSe`PgSc z$9FAm6mu*m4X_`JEj77ne)uQuAF{&gA}y&0ulH!wC zVY;NP;u7eiuVxm0IPcNd*!?AJ+qGln`Y0qP-K{rAJ#Fqz#_Ij<~bcY9~SadYnMzB?i)M z#@9IJ)JpE69h#exn809UJVZ5`ye4QbnamI3JN@@T^RO^BH;?P|bJ&R|eOuRJ9%0%l z63VC-Fl~x+m=fde>fpI_#xpO*M?7X(c+XXBsk``!>_f3)9p??kbTb;Yu086j_@yXV z24o3NBB>%6x_Gnz-i5H}BP2Aj7`&pEFY5?~gbrzOT|0aVwVXX(^~-~zy`0|(%5FyB z)g56@DhYn8www@yU7O%qcbtQMx>wJ$<-mcrENl)^D>oAm0w-5p4E)RgOG_J=C;n8~^rS?%0G{#8GkJ%Fh|rEzJh7FTbCo zX1iG>tSsGyn%ZQqEZeoNl>Xklc&>6Bjg+n4e$?*u;X=h``@jec>n|5lp8qhQ)BTv8 zA}nt3_uc!s_|V4`&#zef;wtLUUrea0NgAR83giSqyIq^43joE{-B)TBT^9ihl)0U9 z%vl4nV}yC_qhsy<^!n-1IvwjYqN#Kn6Lgy?E@d7o+veHZAG7!dk-D#C-{hGu3dOs5 z91jJJQ`&2&s8?drYV>tOZsN4kDvQTFH*Jerz0mr|3+4P`PJ-+4?J5yXY`s}^_%K>` z%T{nw%|F}k=eGUAriN`pmEF+;ELuN@2301qc`!aV~1J zuYblWR+=r(>froFp7Fb;FG@}ZeuU!vw&5?#jumo@Gh>qsxlUU+uI|GQ#wTRu~zcW2u#B~AID zlW=Oa^5V=V(C;TiGreECI(737Lc8vHg8`^Ym48*^^AP`IEmTdq(IZRqGF7G(v(I&_ zR)OQ>hrccjW|pT%gq80h7oMu$5mE7#DAs{$wMTc0^DeEw2W9ZXipQ6o5uKlx31kj+ zZB9#vceSgO!&uYLfhSL-lmckE7|BDMcd_gY42mo`yw-uRv6k~@$(RI^@3G6>chRGB zo<2M9y=PXp9@5=9S~8hH@_^7anim#T5&R%YG4O?|H5JpYtmH+%{^4|8wB)W_&rUY9 zLwsc$nZ=Ab&=YBI@=hhSKsk7W!An_41!6b0^_P~4oRO%!c;Nh#KYmZ*Egi`#xbq)j`UD4sgFqtI%M)-&| ze)`R8wroqO_H1EuXm@ejXyEaI^Bce)x6_(T(~19 zgmc3Wd{|I^=VZ7*x4tMAhW083vQL>nJ1N2!#3f82%kk2VY7G>QXUC-^Bp6u03=G29 z4#hzz0|#2jy*X;;!XFQppY9_S!OYE)%uJC?9qc!sPce_K$lVhI0@maoa7&=m_oiTb zwV*V39dR=ILw$ja;7>Pzj-%;t-V~`jO<6rqSuN&ajH$+vlRY}8(TFCCR6{9@PM_XZN zOLn~tJ?rT)QD328sKPN1B%| z_}9Tr-`NrIfVQbw9#r$Q>ZFVa!zKGdgH#^_zJrux3nt!E+|5Am*J?E7$thE&cPtX$ z&VNF#XDb_8d#t7-9KfhV>=Y_~O0U_4=<>ogvMb2^id+dg}7Tf8|^`csf}IX z<^v9$a&bSaSF{BT++NOB4=VazB?QeMFKe_vYeesclr9z&m0npcppTfHo_%DF%XTo) zqm@^pXikLTs~;o22_4;%)3#%AIf^9bEm_&12njI#tD|xE3;J+c6J?zoWx)fuee~iS zdvPzMQJ=;g(aTX6g3&)rjML$C;pjz%PVN%5xv^S~H5cl<%k0g)0^BgEo#>u$q@HTGoyqL#Rc*x1_afG zBQ@%{fkuL7B(0GS|EXK{`CHfJyICgg4BDZxu(&Ppgq+eic_w$|U8yU~uFOFKq2SUd(p4B3^0C!ru`m(I~*Ulqg(XK|o z+vjf?w7e^C4tB*GKrl7E+>X)#S_gl-){?4Zen^e%?WbsxQX+L)jWAr9Tt-^Ia$i&= z+Lv;dm1Jq9tw&QM!?s&TgeI~k85+?QQ1B&?$E2To8j}pF*OHrjt4A^8jYq zYj^#X@?y(fvW0cg0N(82b6#(YT0!zS$4N;E=&&8Eey7Hm51MaSzZ0DLuz3BK*eB@ zdO}+|D72ayp!Fi_wFIYkoX9e9Bw59+si+pS$~@qa+pli@BuMRhSvJ`|Z%Icc(4dvk zS&4T3P%WZoWck%kKk=pz6nq`rN#7R;iX-A;__vI#wpOt4b#eeNCzj~b-DyDhi8ozdCAAA-=y*oan?07kC8UND1k+s^+?UHLaF$dv_~TJ+kzjGcr{L(JT$qTGPbl zbY4T7RrUCLxH*tRrU?=hgltW%{4{#ctNuS^^+W^2$vw6wT`TrQdIV!obXb1v={W#T zeEs^TzON%=pS*#{YLgc=*HnCoTHL>RFByiZWKj;9EyH&)|D*ca_zUlk))5=}ysuoU}O%*E{wdZ84 z?Vg%`lgFlQu3q#J)WaQ7&%c}l&Ob%+61J{wRqO6#6_EN(-kAu*n%Jd?Pbw;m#cR~$ z-AnDMBv5sG5ZWdRRTBd}!Y-1Ezog{t)@oIhc~(jUKfgg+nmgDTm7=6#B3GufvcbSk zDc+Kfa6r(cG86;SQrRQW5&;^DEisg`9W{amTkjB8ymRfG*(H&S4GMAg!BV9&xiSgg5qIo265<*hUfUP_4Juu~hf*yrx3R?&vr){Hb|oEd zL(@_)-nukr{VidcQQxcSF{#9n(Q@vVL%LQKMVzVacNiN2Mpx;h_Tv{DGki;*Ys|aC z;Wj4S7Hu#%<_XM#&#YweIpAkPn$E~jU2)U+P=-|(txuJJ=~DBGv~gote4U^mB7aCK zBpPNZGKc(aD59uU~{RHzYJU^O0E7f(5$z8oVe>yXkH77(U-|_DI*q z11RnqZzG{>tO|Y^DwlbzS=z8p&C*^frqzyn$z@E9!6yhFPj4P81oU|Xf25bGv-rTFg+4&u(`QV&=h}YD-+HHGJOldIL0PX zr39wQ)FLjT9-Er?iy3Y>Nq|cWNkMufXnTYiB#0P|CgwW4xJPFmE$Scj#BRx?FV1QS zIBB^2^C$Ms%S~a4gc0aPK{Rry6>1V3LZ`LIQH7*>302C2qlAHK*F!9C^6xCvct&cp z@0zL=mkV7hH9|_Yymbb%7hNJZ&&=zWlhko;O9ixWSW&Q@1!i>U>pbS;tW)R&|6@Pr z<5uQUxl93u2T~`dgEB;m=)%AcGq^`<6I|hC_FYh_* zxQQ7gWWPZ}yCyNddeKY~~S; zb00}`d56E;_Iqd|q_0drKmvOoF9F*W``(Z7K3)P27Ne}@C5C^M|CRgKk-yUZ@-L2s zPjh3}8fCaAPm&tf&7%JXOL0#gCPlATncce(&{Ge)on+d!X(q&Bp!&m0?~ zH6;9;!WV+ub;alehBxdTqqcG;sH6H>Tyw$5#iOErlk|+dVBr?mQSTVvt$8E9I;8Xh zItn9I8#=l+5mInAgf;&%0??wbEQ~jr1fvS|F%%u7GtOdtKE8?78{D2+Msl524`H0d zTs?0UYagoa!HbU>k7*Cf(NcJ+!q-3Jp;s8XRmb;ltZsQE=u>OMb?Sb#S`;m+HCe~> zQ&hl&H%7oj3FyUoQKc(8thSmtWn(i{ln4~FWzf6%Kxw?p+iMTD9OSI);mF z2ih%U{(yUTfbo5!OTxAffZ?7G7~nNQcoQMh<>T}H7a~FLUGg`` zi>IV=HFNBjduqk4QG4VmbsQw2RcIQJy;59^vo*$ZnSU;AE{{t9;{@CEECH&3*_t9r z2o;|9a9truHP<*9mYMs( z6&UOL*_WR;Bh&%Ft?ML2W^DGnwO{^Rpm$aTO)n?vCzhEVbZX)HuhU=lHa;M@ zm*Re(FwrpAdLFF)>FvIjT_9{*%7X~Jqy6_&h)kGTqIO*43tOrg-WLb|9puIuCQX~% z?}+NYY5fsF@Aql(9qfrs0F2@EIe4YXl~{z(HZ3>UhOtG$YqEHc$lJM-gpk@qSWeCA ztF2;O8}HM5T5`~yB>9eq7k&c&$BMmo(X`q>cmA8$zVm7Czdj56^W2ez{o8X{Mf>Qv z`yb@~we!v1bB9m-sXCbLPh#KjFc|pCjNf3aAC%n?6JlELun|uTh`_5*Bt~jyAh~J? z_l`a@v7B+S1t0-^vOJsQW05BdGa&Y|0K`>0h*Fj+GYF+98$6<*0JLeca;f0|3AO@B z{rI4wT5#7H5JUk$)e&fjv?4;Jb*W{7kdQS2004E7)}gWG3f9e_vvPTcFusQ#AgPc7 zLX}ii+SS;CsHi&X*0BI!BJ~sm21!7wfe8Qr0002&fRCh8C?W}@Qc)6su_&TcbqoMa z185sW5AS3^6vVhpKpHWKb%4VfRkf`VRFWmdLWPMWGt{j$F zgzgzqi*E%0+31%w2pM_+AP5Ydr|X&YwLSVh0pN-1FDXr01w~W}5=2Id2B3_TwUPjk zfFodn%tWxD(CaVa3Kx=o)*`<4Ff%J!GT;LMgC{KhBrNwp_k#ZoUm^c^n2nbn7(L-B zSnuJz{{MzA`M-zhQ+i}{KzKxVCrnGjITVCoH35+X0002!_AvyLBo-3Xt{IKQ#tJ1V z6~q!Oh$3_h||GH z=s+Z$-j*KJQ0N&Tr3z_`Hj!(LrJAZy00HYzPyzw~Qq`bz5J(b$XaE3)N`2G<1O;(~ zOCb$S_!??WG+5jTMJ0ih!d72Ho*-6{k_aJ15EUzgk-!67x?!Rt>MpPbu|g#dYehg2 z)VM4Ls@%7FWn6t%gdXCN$3IGyn_B6VEg?9kbxF!rNY2b&jwx<+gZM-jRjOa*Ne W(J`vUN*z_@P+P literal 0 HcmV?d00001 From 4b47a6cec938bc3c9187b35136c7f2f18c5b55ed Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 18 Oct 2024 00:36:50 -0500 Subject: [PATCH 036/274] Automatic changelog generation for PR #3562 [ci skip] --- html/changelogs/AutoChangeLog-pr-3562.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3562.yml diff --git a/html/changelogs/AutoChangeLog-pr-3562.yml b/html/changelogs/AutoChangeLog-pr-3562.yml new file mode 100644 index 000000000000..8fb3c3c5b991 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3562.yml @@ -0,0 +1,9 @@ +author: NithaIsTired +changes: + - {rscadd: Adds a ton of audible emotes and visible emotes like snapping your fingers + or twitching} + - {rscadd: You can boop people on the nose by clicking on their mouth with help + intent} + - {rscadd: Sound variation with a few emotes like snapping and clapping} + - {rscadd: Laying down now plays a sound if you aren't on walk intent} +delete-after: true From 744c61af44816bba4b8b6dfd79ed3de6bc89d755 Mon Sep 17 00:00:00 2001 From: Gristlebee <56049844+Gristlebee@users.noreply.github.com> Date: Thu, 17 Oct 2024 23:54:44 -0700 Subject: [PATCH 037/274] To Whom It May Concern - Bullet Writing (#3552) ## About The Pull Request You can now write on bullets with a pen to give your ~~victim~~ recipient a lovely message when they're hit. ![image](https://github.com/user-attachments/assets/859b62ac-5597-40f2-bc70-59bb6091015e) ## Why It's Good For The Game Adds a little personalization to your death dealing, and I think it'd be funny. ## Changelog :cl: add: Bullets can have a message written on them. /:cl: --- .../projectiles/ammunition/_ammo_casing.dm | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/code/modules/projectiles/ammunition/_ammo_casing.dm b/code/modules/projectiles/ammunition/_ammo_casing.dm index 02578e4592f8..88b7b42d334a 100644 --- a/code/modules/projectiles/ammunition/_ammo_casing.dm +++ b/code/modules/projectiles/ammunition/_ammo_casing.dm @@ -51,7 +51,20 @@ var/stack_size = 12 /obj/item/ammo_casing/attackby(obj/item/attacking_item, mob/user, params) - if(istype(attacking_item, /obj/item/ammo_box) && user.is_holding(src)) + if(istype(attacking_item, /obj/item/pen)) + if(!user.is_literate()) + to_chat(user, "You scribble illegibly on the [src]!") + return + var/inputvalue = stripped_input(user, "What would you like to label the round?", "Bullet Labelling", "", MAX_NAME_LEN) + + if(!inputvalue) + return + + if(user.canUseTopic(src, BE_CLOSE)) + name = "[initial(src.name)][(inputvalue ? " - '[inputvalue]'" : null)]" + if(BB) + BB.name = "[initial(BB.name)][(inputvalue ? " - '[inputvalue]'" : null)]" + else if(istype(attacking_item, /obj/item/ammo_box) && user.is_holding(src)) add_fingerprint(user) var/obj/item/ammo_box/ammo_box = attacking_item var/obj/item/ammo_casing/other_casing = ammo_box.get_round(TRUE) @@ -92,6 +105,10 @@ return ..() +/obj/item/ammo_casing/examine(mob/user) + . = ..() + span_notice("You could write a message on \the [src] by writing on it with a pen.") + /obj/item/ammo_casing/proc/try_stacking(obj/item/ammo_casing/other_casing, mob/living/user) if(user) add_fingerprint(user) From bcb4bd61c39471e16e29c49997455c70179e0115 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 18 Oct 2024 02:05:51 -0500 Subject: [PATCH 038/274] Automatic changelog generation for PR #3552 [ci skip] --- html/changelogs/AutoChangeLog-pr-3552.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3552.yml diff --git a/html/changelogs/AutoChangeLog-pr-3552.yml b/html/changelogs/AutoChangeLog-pr-3552.yml new file mode 100644 index 000000000000..f263f974b90b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3552.yml @@ -0,0 +1,4 @@ +author: Gristlebee +changes: + - {rscadd: Bullets can have a message written on them.} +delete-after: true From cafd3ffa6590f717b48e372ca34a56f219bcbbf5 Mon Sep 17 00:00:00 2001 From: Apogee-dev <60533805+Apogee-dev@users.noreply.github.com> Date: Fri, 18 Oct 2024 01:31:44 -0700 Subject: [PATCH 039/274] Makes the Cobra not just a better Mongrel (and fixes a typo) (#3437) ## About The Pull Request Reduces the size of the C-20r and Cobra-20's magazines to 24 rounds, identical to the Mongrel. This also means you get two clean reloads out of a box of .45 ammunition instead of having one mag and _almost_ a second mag. Also, fixed the "civillian" typo in the cargo listings for scarborough guns. ## Why It's Good For The Game not getting two reloads out of a box is just plain irritating and also the cobra shouldn't just be a mongrel but better ## Changelog :cl: balance: Reduced Cobra-20 magazine size to 24 rounds fix: removed a typo from Scarborough cargo catalog entries /:cl: --------- Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> --- code/modules/cargo/packs/gun.dm | 8 ++++---- .../manufacturer/scarborough/ballistics.dm | 6 +++--- icons/obj/ammo.dmi | Bin 59485 -> 63668 bytes 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/code/modules/cargo/packs/gun.dm b/code/modules/cargo/packs/gun.dm index 4074f76194d3..acc0be4e62e8 100644 --- a/code/modules/cargo/packs/gun.dm +++ b/code/modules/cargo/packs/gun.dm @@ -31,7 +31,7 @@ /datum/supply_pack/gun/ringneck name = "Ringneck Pistol Crate" - desc = "Contains a civillian variant of the Ringneck pistol, produced by Scarborough Arms and chambered in 10mm." + desc = "Contains a civilian variant of the Ringneck pistol, produced by Scarborough Arms and chambered in 10mm." cost = 1000 contains = list(/obj/item/storage/pistolcase/ringneck) faction = FACTION_SYNDICATE @@ -66,7 +66,7 @@ /datum/supply_pack/gun/viperrevolver name = "Viper-23 Revolver Crate" - desc = "Contains a a civillian variant of the Viper revolver, chambered in .357 magnum." + desc = "Contains a a civilian variant of the Viper revolver, chambered in .357 magnum." cost = 2500 contains = list(/obj/item/storage/pistolcase/viper) @@ -198,14 +198,14 @@ /datum/supply_pack/gun/boomslang90 name = "Boomslang-90 Rifle Crate" - desc = "Contains a civillian variant of the Boomslang Sniper rifle- modified with a 2x scope, rather than a sniper scope. Chambered in the powerful 6.5x57mm CLIP." + desc = "Contains a civilian variant of the Boomslang Sniper rifle- modified with a 2x scope, rather than a sniper scope. Chambered in the powerful 6.5x57mm CLIP." cost = 5000 contains = list(/obj/item/storage/guncase/boomslang) crate_name = "rifle crate" /datum/supply_pack/gun/cobra20 name = "Cobra-20 SMG Crate" - desc = "Contains a civillian variant of the Cobra SMG, manufactured by Scaraborough Arms and chambered in .45" + desc = "Contains a civilian variant of the Cobra SMG, manufactured by Scaraborough Arms and chambered in .45" cost = 3000 contains = list(/obj/item/storage/guncase/cobra) crate_name = "SMG crate" diff --git a/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm b/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm index c6755bc808fb..e4054f0ac1bb 100644 --- a/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm +++ b/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm @@ -421,12 +421,12 @@ EMPTY_GUN_HELPER(automatic/smg/cobra/indie) /obj/item/ammo_box/magazine/m45_cobra name = "Cobra magazine (.45)" - desc = "A 28-round magazine for the Cobra submachine gun. These rounds do moderate damage, but struggle against armor." - icon_state = "cobra_mag-28" + desc = "A 24-round magazine for the Cobra submachine gun. These rounds do moderate damage, but struggle against armor." + icon_state = "cobra_mag-24" base_icon_state = "cobra_mag" ammo_type = /obj/item/ammo_casing/c45 caliber = ".45" - max_ammo = 28 + max_ammo = 24 /obj/item/ammo_box/magazine/m45_cobra/update_icon_state() . = ..() diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index ec5f147485401833d8ad24fb12c0cf6a26dc9a09..633a49eda54cdda76e267094df7c7ec8c584a34c 100644 GIT binary patch literal 63668 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�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

ac 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 jo@1*2Kb7_E_9+R^B^pk%;)x{){M@y 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�|5v&&(+6#QTH|7xXxCio~B9FI+ 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

)AGle|iV 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 Date: Fri, 18 Oct 2024 03:51:36 -0500 Subject: [PATCH 040/274] Automatic changelog generation for PR #3437 [ci skip] --- html/changelogs/AutoChangeLog-pr-3437.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3437.yml diff --git a/html/changelogs/AutoChangeLog-pr-3437.yml b/html/changelogs/AutoChangeLog-pr-3437.yml new file mode 100644 index 000000000000..0c4f39c31eea --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3437.yml @@ -0,0 +1,5 @@ +author: Apogee-dev +changes: + - {balance: Reduced Cobra-20 magazine size to 24 rounds} + - {bugfix: removed a typo from Scarborough cargo catalog entries} +delete-after: true From 18171b5e0d408067f7618ed377486d613a27f2c1 Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Erikafox@users.noreply.github.com> Date: Fri, 18 Oct 2024 04:54:47 -0400 Subject: [PATCH 041/274] Kill Xenobio Stuff (#3527) ## About The Pull Request Removes Xenobiology (minus slimes since they're good fluffmobs sometimes). ## Why It's Good For The Game cruft. thgvr said they'd get me a therapist if I did this. ## Changelog :cl: del: Xenobiology (minus slimes) /:cl: --------- Signed-off-by: Erika Fox <94164348+Erikafox@users.noreply.github.com> Co-authored-by: Bjarl <94164348+Bjarl@users.noreply.github.com> --- .../JungleRuins/jungle_cavecrew.dmm | 12 +- .../RockRuins/rockplanet_budgetcuts.dmm | 14 - _maps/RandomRuins/SpaceRuins/power_puzzle.dmm | 4 +- .../shuttles/nanotrasen/nanotrasen_delta.dmm | 3 - check_regex.yaml | 6 +- code/__DEFINES/atmospherics.dm | 2 +- code/__DEFINES/dcs/signals/signals.dm | 8 - code/__DEFINES/flags.dm | 2 - code/__DEFINES/misc.dm | 9 - code/__DEFINES/mobs.dm | 4 +- code/__HELPERS/icons.dm | 7 - code/__HELPERS/mobs.dm | 22 - code/_globalvars/bitfields.dm | 1 - code/_globalvars/lists/flavor_misc.dm | 7 +- code/datums/components/dejavu.dm | 107 -- code/game/gamemodes/objective_items.dm | 11 - code/game/machinery/syndicatebomb.dm | 15 - .../effects/anomalies/anomalies_bluespace.dm | 2 +- .../circuitboards/computer_circuitboards.dm | 5 - .../circuitboards/machine_circuitboards.dm | 28 - code/game/objects/items/devices/scanners.dm | 60 - .../objects/items/grenades/chem_grenade.dm | 28 - .../objects/items/grenades/clusterbuster.dm | 40 - .../objects/items/implants/implant_misc.dm | 7 - code/game/objects/items/storage/bags.dm | 3 +- .../game/objects/items/storage/uplink_kits.dm | 1 - code/game/objects/structures/salvaging.dm | 2 - code/game/turfs/open/floor/misc_floor.dm | 14 - .../antagonists/changeling/changeling.dm | 14 - .../mission_code/moonoutpost19.dm | 121 -- code/modules/cargo/bounties/slime.dm | 39 - code/modules/cargo/bounty.dm | 16 +- .../clothing/outfits/factions/minutemen.dm | 4 +- .../kitchen_machinery/monkeyrecycler.dm | 103 -- .../kitchen_machinery/processor.dm | 59 +- .../kitchen_machinery/smartfridge.dm | 17 - .../recipes/processor_recipes.dm | 5 - .../recipes/tablecraft/recipes_pie.dm | 1 - code/modules/mining/minebot.dm | 24 - .../living/carbon/alien/special/facehugger.dm | 1 - .../living/carbon/human/species_types/IPC.dm | 2 +- .../carbon/human/species_types/abductors.dm | 2 +- .../carbon/human/species_types/android.dm | 2 +- .../carbon/human/species_types/ethereal.dm | 2 +- .../carbon/human/species_types/flypeople.dm | 2 +- .../carbon/human/species_types/humans.dm | 2 +- .../carbon/human/species_types/jellypeople.dm | 134 +-- .../carbon/human/species_types/kepori.dm | 2 +- .../human/species_types/lizardpeople.dm | 2 +- .../carbon/human/species_types/mothmen.dm | 2 +- .../carbon/human/species_types/podpeople.dm | 2 +- .../carbon/human/species_types/spider.dm | 2 +- .../living/carbon/human/species_types/vox.dm | 2 +- .../simple_animal/friendly/butterfly.dm | 1 - .../living/simple_animal/friendly/capybara.dm | 1 - .../mob/living/simple_animal/friendly/cat.dm | 3 - .../mob/living/simple_animal/friendly/crab.dm | 5 - .../mob/living/simple_animal/friendly/dog.dm | 4 - .../simple_animal/friendly/farm_animals.dm | 6 - .../mob/living/simple_animal/friendly/fox.dm | 2 - .../living/simple_animal/friendly/lizard.dm | 1 - .../simple_animal/friendly/mothroach.dm | 1 - .../living/simple_animal/friendly/mouse.dm | 2 - .../living/simple_animal/friendly/penguin.dm | 1 - .../living/simple_animal/friendly/sloth.dm | 3 - .../living/simple_animal/friendly/snake.dm | 1 - .../living/simple_animal/friendly/turtle.dm | 1 - .../mob/living/simple_animal/hostile/alien.dm | 3 - .../mob/living/simple_animal/hostile/bear.dm | 1 - .../mob/living/simple_animal/hostile/bees.dm | 1 - .../mob/living/simple_animal/hostile/carp.dm | 3 - .../living/simple_animal/hostile/cockroach.dm | 2 - .../living/simple_animal/hostile/eyeballs.dm | 1 - .../living/simple_animal/hostile/faithless.dm | 1 - .../simple_animal/hostile/giant_spider.dm | 6 - .../mob/living/simple_animal/hostile/goose.dm | 2 - .../living/simple_animal/hostile/headcrab.dm | 2 - .../living/simple_animal/hostile/hivebot.dm | 1 - .../simple_animal/hostile/human/survivors.dm | 2 +- .../simple_animal/hostile/human/syndicate.dm | 1 - .../simple_animal/hostile/killertomato.dm | 1 - .../hostile/megafauna/colossus.dm | 1 - .../mob/living/simple_animal/hostile/mimic.dm | 97 -- .../hostile/mining_mobs/basilisk.dm | 2 - .../hostile/mining_mobs/goldgrub.dm | 1 - .../hostile/mining_mobs/gutlunch.dm | 2 - .../simple_animal/hostile/netherworld.dm | 2 - .../living/simple_animal/hostile/regalrat.dm | 1 - .../simple_animal/hostile/retaliate/frog.dm | 1 - .../simple_animal/hostile/retaliate/ghost.dm | 1 - .../living/simple_animal/hostile/statue.dm | 1 - .../mob/living/simple_animal/hostile/tree.dm | 1 - .../simple_animal/hostile/wumborian_fugu.dm | 1 - .../mob/living/simple_animal/parrot.dm | 2 - .../mob/living/simple_animal/simple_animal.dm | 2 - .../mob/living/simple_animal/slime/slime.dm | 52 - .../movespeed/modifiers/status_effects.dm | 17 - code/modules/power/cell.dm | 12 - code/modules/reagents/chemistry/holder.dm | 14 - .../reagents/pyrotechnic_reagents.dm | 4 - code/modules/reagents/chemistry/recipes.dm | 32 - .../reagents/chemistry/recipes/others.dm | 20 - .../chemistry/recipes/slime_extracts.dm | 595 --------- .../research/designs/comp_board_designs.dm | 8 - .../research/designs/machine_designs.dm | 9 - code/modules/research/experimentor.dm | 1 - code/modules/research/rdconsole.dm | 23 - code/modules/research/techweb/all_nodes.dm | 4 +- .../xenobiology/crossbreeding/__corecross.dm | 193 --- .../xenobiology/crossbreeding/_clothing.dm | 78 -- .../xenobiology/crossbreeding/_misc.dm | 234 ---- .../xenobiology/crossbreeding/_mobs.dm | 45 - .../xenobiology/crossbreeding/_potions.dm | 217 ---- .../crossbreeding/_status_effects.dm | 971 --------------- .../xenobiology/crossbreeding/_weapons.dm | 38 - .../xenobiology/crossbreeding/burning.dm | 307 ----- .../xenobiology/crossbreeding/charged.dm | 272 ----- .../xenobiology/crossbreeding/chilling.dm | 301 ----- .../xenobiology/crossbreeding/consuming.dm | 460 ------- .../xenobiology/crossbreeding/industrial.dm | 199 --- .../xenobiology/crossbreeding/mutative.dm | 27 - .../xenobiology/crossbreeding/prismatic.dm | 124 -- .../xenobiology/crossbreeding/recurring.dm | 138 --- .../xenobiology/crossbreeding/regenerative.dm | 354 ------ .../xenobiology/crossbreeding/reproductive.dm | 133 -- .../crossbreeding/selfsustaining.dm | 149 --- .../xenobiology/crossbreeding/stabilized.dm | 190 --- .../research/xenobiology/xenobio_camera.dm | 473 -------- .../research/xenobiology/xenobiology.dm | 1072 ----------------- code/modules/surgery/core_removal.dm | 44 - code/modules/unit_tests/create_and_destroy.dm | 2 - code/modules/uplink/uplink_items.dm | 9 - shiptest.dme | 28 - 133 files changed, 41 insertions(+), 7968 deletions(-) delete mode 100644 code/datums/components/dejavu.dm delete mode 100644 code/modules/awaymissions/mission_code/moonoutpost19.dm delete mode 100644 code/modules/cargo/bounties/slime.dm delete mode 100644 code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm delete mode 100644 code/modules/movespeed/modifiers/status_effects.dm delete mode 100644 code/modules/reagents/chemistry/recipes/slime_extracts.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/__corecross.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/_clothing.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/_misc.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/_mobs.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/_potions.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/_status_effects.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/_weapons.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/burning.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/charged.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/chilling.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/consuming.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/industrial.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/mutative.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/prismatic.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/recurring.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/regenerative.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/reproductive.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/selfsustaining.dm delete mode 100644 code/modules/research/xenobiology/crossbreeding/stabilized.dm delete mode 100644 code/modules/research/xenobiology/xenobio_camera.dm delete mode 100644 code/modules/research/xenobiology/xenobiology.dm delete mode 100644 code/modules/surgery/core_removal.dm diff --git a/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm b/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm index 557a50d9a11e..923e58b4cb05 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm @@ -1028,14 +1028,10 @@ pixel_y = 32 }, /obj/structure/closet/secure_closet/freezer/wall/directional/west, -/obj/item/reagent_containers/food/snacks/rationpack, -/obj/item/reagent_containers/food/snacks/rationpack, -/obj/item/reagent_containers/food/snacks/rationpack, -/obj/item/reagent_containers/food/snacks/rationpack, -/obj/item/reagent_containers/food/snacks/rationpack, -/obj/item/reagent_containers/food/snacks/rationpack, -/obj/item/reagent_containers/food/snacks/rationpack, -/obj/item/reagent_containers/food/snacks/rationpack, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, /obj/item/reagent_containers/condiment/enzyme{ pixel_x = -8; pixel_y = 5 diff --git a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm index 183df18879da..3b2b995fd979 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm @@ -960,21 +960,7 @@ /area/overmap_encounter/planetoid/rockplanet/explored) "pj" = ( /obj/structure/table/reinforced, -/obj/item/slime_extract/grey{ - pixel_x = -4; - pixel_y = -1 - }, -/obj/item/slime_extract/grey{ - pixel_x = 8 - }, -/obj/item/slime_extract/grey, -/obj/item/slime_extract/grey, -/obj/item/slime_extract/green{ - pixel_x = 4; - pixel_y = -6 - }, /obj/structure/window/reinforced, -/obj/item/slime_scanner, /turf/open/floor/engine, /area/ruin/rockplanet/nanotrasen) "pl" = ( diff --git a/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm b/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm index e126234531f2..e02a7e328b28 100644 --- a/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm +++ b/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm @@ -1850,8 +1850,8 @@ /obj/item/reagent_containers/food/drinks/waterbottle/empty, /obj/item/reagent_containers/food/drinks/waterbottle/empty, /obj/item/reagent_containers/food/drinks/waterbottle, -/obj/item/reagent_containers/food/snacks/rationpack, -/obj/item/reagent_containers/food/snacks/rationpack, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, /obj/item/reagent_containers/food/snacks/sosjerky, /obj/item/reagent_containers/food/snacks/sosjerky, /obj/item/stack/medical/gauze/improvised, diff --git a/_maps/shuttles/nanotrasen/nanotrasen_delta.dmm b/_maps/shuttles/nanotrasen/nanotrasen_delta.dmm index 351e8e2df037..0d57e0ca165a 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_delta.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_delta.dmm @@ -1874,9 +1874,6 @@ /obj/structure/rack, /obj/item/weldingtool/hugetank/empty, /obj/item/clothing/mask/gas/welding, -/obj/item/slimepotion/slime/sentience/mining, -/obj/item/slimepotion/slime/sentience/mining, -/obj/item/slimepotion/slime/sentience/mining, /obj/machinery/light/small/directional/east, /obj/machinery/button/door{ dir = 4; diff --git a/check_regex.yaml b/check_regex.yaml index 94f37cdcf83e..a4e63a1762f8 100644 --- a/check_regex.yaml +++ b/check_regex.yaml @@ -27,11 +27,11 @@ standards: - exactly: [1, "/atom text paths", '"/atom'] - exactly: [1, "/area text paths", '"/area'] - - exactly: [17, "/datum text paths", '"/datum'] + - exactly: [16, "/datum text paths", '"/datum'] - exactly: [4, "/mob text paths", '"/mob'] - - exactly: [36, "/obj text paths", '"/obj'] + - exactly: [35, "/obj text paths", '"/obj'] - exactly: [0, "/turf text paths", '"/turf'] - - exactly: [115, "text2path uses", "text2path"] + - exactly: [114, "text2path uses", "text2path"] - exactly: [18, "world<< uses", 'world[ \t]*<<'] - exactly: [0, "world.log<< uses", 'world.log[ \t]*<<'] diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 2870e31eff97..9a576932120f 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -200,7 +200,7 @@ /// the default air mix that open turfs spawn #define OPENTURF_DEFAULT_ATMOS "o2=22;n2=82;TEMP=293.15" #define OPENTURF_LOW_PRESSURE "o2=14;n2=30;TEMP=293.15" -/// -193,15°C telecommunications. also used for xenobiology slime killrooms +/// -193,15°C telecommunications. good fluff for comms areas #define TCOMMS_ATMOS "n2=100;TEMP=80" /// space #define AIRLESS_ATMOS "TEMP=2.7" diff --git a/code/__DEFINES/dcs/signals/signals.dm b/code/__DEFINES/dcs/signals/signals.dm index 9e034edeeb2c..f68655a7a3a4 100644 --- a/code/__DEFINES/dcs/signals/signals.dm +++ b/code/__DEFINES/dcs/signals/signals.dm @@ -677,14 +677,6 @@ #define COMSIG_ACTION_TRIGGER "action_trigger" //from base of datum/action/proc/Trigger(): (datum/action) #define COMPONENT_ACTION_BLOCK_TRIGGER 1 -//Xenobio hotkeys -#define COMSIG_XENO_SLIME_CLICK_CTRL "xeno_slime_click_ctrl" //from slime CtrlClickOn(): (/mob) -#define COMSIG_XENO_SLIME_CLICK_ALT "xeno_slime_click_alt" //from slime AltClickOn(): (/mob) -#define COMSIG_XENO_SLIME_CLICK_SHIFT "xeno_slime_click_shift" //from slime ShiftClickOn(): (/mob) -#define COMSIG_XENO_TURF_CLICK_SHIFT "xeno_turf_click_shift" //from turf ShiftClickOn(): (/mob) -#define COMSIG_XENO_TURF_CLICK_CTRL "xeno_turf_click_alt" //from turf AltClickOn(): (/mob) -#define COMSIG_XENO_MONKEY_CLICK_CTRL "xeno_monkey_click_ctrl" //from monkey CtrlClickOn(): (/mob) - // /datum/overmap signals /// From overmap Move(): (old_x, old_y) #define COMSIG_OVERMAP_MOVED "overmap_moved" diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 77e608ac922e..b97972be8a4c 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -97,8 +97,6 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define HIDDEN_AREA (1<<6) /// If false, loading multiple maps with this area type will create multiple instances. #define UNIQUE_AREA (1<<7) -/// Can the Xenobio management console transverse this area by default? -#define XENOBIOLOGY_COMPATIBLE (1<<8) /* These defines are used specifically with the atom/pass_flags bitmask diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index c6fe0591ee27..68ef8b65b127 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -335,15 +335,6 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #define SYRINGE_DRAW 0 #define SYRINGE_INJECT 1 -//gold slime core spawning -#define NO_SPAWN 0 -#define HOSTILE_SPAWN 1 -#define FRIENDLY_SPAWN 2 - -//slime core activation type -#define SLIME_ACTIVATE_MINOR 1 -#define SLIME_ACTIVATE_MAJOR 2 - #define LUMINESCENT_DEFAULT_GLOW 2 #define RIDING_OFFSET_ALL "ALL" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 7bcca355f34a..0bda789b98d4 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -396,10 +396,8 @@ #define RACE_SWAP (1<<3) //ERT spawn template (avoid races that don't function without correct gear) #define ERT_SPAWN (1<<4) -//xenobio black crossbreed -#define SLIME_EXTRACT (1<<5) //Wabbacjack staff projectiles -#define WABBAJACK (1<<6) +#define WABBAJACK (1<<5) #define SLEEP_CHECK_DEATH(X) sleep(X); if(QDELETED(src) || stat == DEAD) return; diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 38e540e996b9..3e676f289458 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -1028,13 +1028,6 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) // Pick a random animal instead of the icon, and use that instead /proc/getRandomAnimalImage(atom/A) - if(!GLOB.friendly_animal_types.len) - for(var/T in typesof(/mob/living/simple_animal)) - var/mob/living/simple_animal/SA = T - if(initial(SA.gold_core_spawnable) == FRIENDLY_SPAWN) - GLOB.friendly_animal_types += SA - - var/mob/living/simple_animal/SA = pick(GLOB.friendly_animal_types) var/icon = initial(SA.icon) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index ae5a1c1ce929..31ce8dceee49 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -482,28 +482,6 @@ GLOBAL_LIST_EMPTY(species_list) else to_chat(M, message) -//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 - var/static/list/mob_spawn_nicecritters = list() // and possible friendly mobs - - if(mob_spawn_meancritters.len <= 0 || mob_spawn_nicecritters.len <= 0) - for(var/T in typesof(/mob/living/simple_animal)) - var/mob/living/simple_animal/SA = T - switch(initial(SA.gold_core_spawnable)) - if(HOSTILE_SPAWN) - mob_spawn_meancritters += T - if(FRIENDLY_SPAWN) - mob_spawn_nicecritters += T - - var/chosen - if(mob_class == FRIENDLY_SPAWN) - chosen = pick(mob_spawn_nicecritters) - else - chosen = pick(mob_spawn_meancritters) - var/mob/living/simple_animal/C = new chosen(spawn_location) - return C - /proc/passtable_on(target, source) var/mob/living/L = target if (!HAS_TRAIT(L, TRAIT_PASSTABLE) && L.pass_flags & PASSTABLE) diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index d9957c7db0f1..df6f39cd0bbe 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -56,7 +56,6 @@ DEFINE_BITFIELD(area_flags, list( "NOTELEPORT" = NOTELEPORT, "HIDDEN_AREA" = HIDDEN_AREA, "UNIQUE_AREA" = UNIQUE_AREA, - "XENOBIOLOGY_COMPATIBLE" = XENOBIOLOGY_COMPATIBLE, )) DEFINE_BITFIELD(car_traits, list( diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index f9edbc500142..f45781b014ea 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -247,9 +247,8 @@ GLOBAL_LIST_INIT(scarySounds, list('sound/weapons/thudswoosh.ogg','sound/weapons 25 Toxins 26 Dormitories 27 Virology -28 Xenobiology -29 Law Office -30 Detective's Office +28 Law Office +29 Detective's Office */ //The whole system for the sorttype var is determined based on the order of this list, @@ -265,7 +264,7 @@ GLOBAL_LIST_INIT(TAGGERLOCATIONS, list("Disposals", "Robotics", "Head of Personnel's Office", "Library", "Chapel", "Theatre", "Bar", "Kitchen", "Hydroponics", "Janitor Closet","Genetics", "Experimentor Lab", "Toxins", "Dormitories", "Virology", - "Xenobiology", "Law Office","Detective's Office")) + , "Law Office","Detective's Office")) GLOBAL_LIST_INIT(station_prefixes, world.file2list("strings/station_prefixes.txt")) diff --git a/code/datums/components/dejavu.dm b/code/datums/components/dejavu.dm deleted file mode 100644 index b2a2cddf9c9b..000000000000 --- a/code/datums/components/dejavu.dm +++ /dev/null @@ -1,107 +0,0 @@ -/** - * A component to reset the parent to its previous state after some time passes - */ -/datum/component/dejavu - /// The turf the parent was on when this components was applied, they get moved back here after the duration - var/turf/starting_turf - /// Determined by the type of the parent so different behaviours can happen per type - var/rewind_type - /// How many rewinds will happen before the effect ends - var/rewinds_remaining - /// How long to wait between each rewind - var/rewind_interval - - /// The starting value of clone loss at the beginning of the effect - var/clone_loss = 0 - /// The starting value of toxin loss at the beginning of the effect - var/tox_loss = 0 - /// The starting value of oxygen loss at the beginning of the effect - var/oxy_loss = 0 - /// The starting value of brain loss at the beginning of the effect - var/brain_loss = 0 - /// The starting value of brute loss at the beginning of the effect - /// This only applies to simple animals - var/brute_loss - /// The starting value of integrity at the beginning of the effect - /// This only applies to objects - var/integrity - /// A list of body parts saved at the beginning of the effect - var/list/datum/saved_bodypart/saved_bodyparts - -/datum/component/dejavu/Initialize(rewinds = 1, interval = 10 SECONDS) - if(!isatom(parent)) - return COMPONENT_INCOMPATIBLE - - starting_turf = get_turf(parent) - rewinds_remaining = rewinds - rewind_interval = interval - - if(isliving(parent)) - var/mob/living/L = parent - clone_loss = L.getCloneLoss() - tox_loss = L.getToxLoss() - oxy_loss = L.getOxyLoss() - brain_loss = L.getOrganLoss(ORGAN_SLOT_BRAIN) - rewind_type = PROC_REF(rewind_living) - - if(iscarbon(parent)) - var/mob/living/carbon/C = parent - saved_bodyparts = C.save_bodyparts() - rewind_type = PROC_REF(rewind_carbon) - - else if(isanimal(parent)) - var/mob/living/simple_animal/M = parent - brute_loss = M.bruteloss - rewind_type = PROC_REF(rewind_animal) - - else if(isobj(parent)) - var/obj/O = parent - integrity = O.obj_integrity - rewind_type = PROC_REF(rewind_obj) - - addtimer(CALLBACK(src, rewind_type), rewind_interval) - -/datum/component/dejavu/Destroy() - starting_turf = null - saved_bodyparts = null - return ..() - -/datum/component/dejavu/proc/rewind() - to_chat(parent, "You remember a time not so long ago...") - - //comes after healing so new limbs comically drop to the floor - if(starting_turf) - var/atom/movable/master = parent - master.forceMove(starting_turf) - - rewinds_remaining -- - if(rewinds_remaining) - addtimer(CALLBACK(src, rewind_type), rewind_interval) - else - to_chat(parent, "But the memory falls out of your reach.") - qdel(src) - -/datum/component/dejavu/proc/rewind_living() - var/mob/living/master = parent - master.setCloneLoss(clone_loss) - master.setToxLoss(tox_loss) - master.setOxyLoss(oxy_loss) - master.setOrganLoss(ORGAN_SLOT_BRAIN, brain_loss) - rewind() - -/datum/component/dejavu/proc/rewind_carbon() - if(saved_bodyparts) - var/mob/living/carbon/master = parent - master.apply_saved_bodyparts(saved_bodyparts) - rewind_living() - -/datum/component/dejavu/proc/rewind_animal() - var/mob/living/simple_animal/master = parent - master.bruteloss = brute_loss - master.updatehealth() - rewind_living() - -/datum/component/dejavu/proc/rewind_obj() - var/obj/master = parent - master.obj_integrity = integrity - rewind() diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm index 6a4787607ef2..405ca316b7d5 100644 --- a/code/game/gamemodes/objective_items.dm +++ b/code/game/gamemodes/objective_items.dm @@ -155,17 +155,6 @@ return TRUE return FALSE -/datum/objective_item/steal/slime - name = "an unused sample of slime extract." - targetitem = /obj/item/slime_extract - difficulty = 3 - excludefromjob = list("Research Director","Scientist") - -/datum/objective_item/steal/slime/check_special_completion(obj/item/slime_extract/E) - if(E.Uses > 0) - return 1 - return 0 - /datum/objective_item/steal/blackbox name = "The Blackbox." targetitem = /obj/item/blackbox diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index b3bd14af5a07..7df56b390f1b 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -410,14 +410,6 @@ for(var/obj/item/reagent_containers/glass/G in beakers) reactants += G.reagents - for(var/obj/item/slime_extract/S in beakers) - if(S.Uses) - for(var/obj/item/reagent_containers/glass/G in beakers) - G.reagents.trans_to(S, G.reagents.total_volume) - - if(S && S.reagents && S.reagents.total_volume) - reactants += S.reagents - if(!chem_splash(get_turf(src), spread_range, reactants, temp_boost)) playsound(loc, 'sound/items/screwdriver2.ogg', 50, TRUE) return // The Explosion didn't do anything. No need to log, or disappear. @@ -460,16 +452,9 @@ for(var/obj/item/grenade/chem_grenade/G in src) if(istype(G, /obj/item/grenade/chem_grenade/large)) - var/obj/item/grenade/chem_grenade/large/LG = G max_beakers += 1 // Adding two large grenades only allows for a maximum of 7 beakers. spread_range += 2 // Extra range, reduced density. temp_boost += 50 // maximum of +150K blast using only large beakers. Not enough to self ignite. - for(var/obj/item/slime_extract/S in LG.beakers) // And slime cores. - if(beakers.len < max_beakers) - beakers += S - S.forceMove(src) - else - S.forceMove(drop_location()) if(istype(G, /obj/item/grenade/chem_grenade/cryo)) spread_range -= 1 // Reduced range, but increased density. diff --git a/code/game/objects/effects/anomalies/anomalies_bluespace.dm b/code/game/objects/effects/anomalies/anomalies_bluespace.dm index d5825181295c..19d163f131ee 100644 --- a/code/game/objects/effects/anomalies/anomalies_bluespace.dm +++ b/code/game/objects/effects/anomalies/anomalies_bluespace.dm @@ -63,7 +63,7 @@ if(istype(A, /obj/item/beacon)) continue // don't teleport beacons because that's just insanely stupid if(iscameramob(A)) - continue // Don't mess with AI eye, xenobio or advanced cameras + continue // Don't mess with AI eye, or advanced cameras if(A.anchored) continue diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 9aece73946cc..5e82266f186c 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -315,11 +315,6 @@ icon_state = "science" build_path = /obj/machinery/computer/teleporter -/obj/item/circuitboard/computer/xenobiology - name = "circuit board (Xenobiology Console)" - icon_state = "science" - build_path = /obj/machinery/computer/camera_advanced/xenobio - //Security /obj/item/circuitboard/computer/gulag_teleporter_console diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 13d6268c1520..896fa3a3e357 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -570,7 +570,6 @@ var/static/list/fridges_name_paths = list(/obj/machinery/smartfridge = "plant produce", /obj/machinery/smartfridge/food = "food", /obj/machinery/smartfridge/drinks = "drinks", - /obj/machinery/smartfridge/extract = "slimes", /obj/machinery/smartfridge/bloodbank = "blood", /obj/machinery/smartfridge/organ = "organs", /obj/machinery/smartfridge/chemistry = "chems", @@ -983,15 +982,6 @@ /obj/item/airlock_painter = 1, /obj/item/stack/sheet/glass = 1) -/obj/item/circuitboard/machine/monkey_recycler - name = "Monkey Recycler (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/monkey_recycler - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/manipulator = 1) - needs_anchored = FALSE - /obj/item/circuitboard/machine/nanite_chamber name = "Nanite Chamber (Machine Board)" icon_state = "science" @@ -1018,11 +1008,6 @@ /obj/item/stock_parts/micro_laser = 2, /obj/item/stock_parts/scanning_module = 1) -/obj/item/circuitboard/machine/processor/slime - name = "Slime Processor (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/processor/slime - /obj/item/circuitboard/machine/protolathe/department/science name = "Protolathe (Machine Board) - Science" icon_state = "science" @@ -1278,19 +1263,6 @@ /obj/item/stock_parts/manipulator = 1) needs_anchored = FALSE -/obj/item/circuitboard/machine/processor/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - if(build_path == /obj/machinery/processor) - name = "Slime Processor (Machine Board)" - build_path = /obj/machinery/processor/slime - to_chat(user, "Name protocols successfully updated.") - else - name = "Food Processor (Machine Board)" - build_path = /obj/machinery/processor - to_chat(user, "Defaulting name protocols.") - else - return ..() - /obj/item/circuitboard/machine/protolathe/department/service name = "Protolathe - Service (Machine Board)" icon_state = "service" diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 1f4b2ae6f6a2..1a9ee8ec3cf4 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -5,7 +5,6 @@ CONTAINS: T-RAY HEALTH ANALYZER GAS ANALYZER -SLIME SCANNER NANITE SCANNER GENE SCANNER @@ -616,65 +615,6 @@ GENE SCANNER to_chat(user, examine_block(jointext(render_list, "\n")), type = MESSAGE_TYPE_INFO) return TRUE -//slime scanner - -/obj/item/slime_scanner - name = "slime scanner" - desc = "A device that analyzes a slime's internal composition and measures its stats." - icon = 'icons/obj/device.dmi' - icon_state = "adv_spectrometer" - item_state = "analyzer" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - pickup_sound = 'sound/items/handling/device_pickup.ogg' - drop_sound = 'sound/items/handling/device_drop.ogg' - w_class = WEIGHT_CLASS_SMALL - flags_1 = CONDUCT_1 - throwforce = 0 - throw_speed = 3 - throw_range = 7 - custom_materials = list(/datum/material/iron=30, /datum/material/glass=20) - -/obj/item/slime_scanner/attack(mob/living/M, mob/living/user) - if(user.stat) - return - if (!isslime(M)) - to_chat(user, "This device can only scan slimes!") - return - var/mob/living/simple_animal/slime/T = M - slime_scan(T, user) - -/proc/slime_scan(mob/living/simple_animal/slime/T, mob/living/user) - var/to_render = "\nSlime scan results:\ - \n[T.colour] [T.is_adult ? "adult" : "baby"] slime\ - \nNutrition: [T.nutrition]/[T.get_max_nutrition()]" - if (T.nutrition < T.get_starve_nutrition()) - to_render += "\nWarning: slime is starving!" - else if (T.nutrition < T.get_hunger_nutrition()) - to_render += "\nWarning: slime is hungry" - to_render += "\nElectric change strength: [T.powerlevel]\nHealth: [round(T.health/T.maxHealth,0.01)*100]%" - if (T.slime_mutation[4] == T.colour) - to_render += "\nThis slime does not evolve any further." - else - if (T.slime_mutation[3] == T.slime_mutation[4]) - if (T.slime_mutation[2] == T.slime_mutation[1]) - to_render += "\nPossible mutation: [T.slime_mutation[3]]\ - \nGenetic destability: [T.mutation_chance/2] % chance of mutation on splitting" - else - to_render += "\nPossible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]] (x2)\ - \nGenetic destability: [T.mutation_chance] % chance of mutation on splitting" - else - to_render += "\nPossible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]], [T.slime_mutation[4]]\ - \nGenetic destability: [T.mutation_chance] % chance of mutation on splitting" - if (T.cores > 1) - to_render += "\nMultiple cores detected" - to_render += "\nGrowth progress: [T.amount_grown]/[SLIME_EVOLUTION_THRESHOLD]" - if(T.effectmod) - to_render += "\nCore mutation in progress: [T.effectmod]\ - \nProgress in core mutation: [T.applied] / [(SLIME_EXTRACT_CROSSING_REQUIRED * T.crossbreed_modifier)]" - to_chat(user, examine_block(to_render)) - - /obj/item/nanite_scanner name = "nanite scanner" icon = 'icons/obj/device.dmi' diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm index e8b7e0de487f..58fd68157f08 100644 --- a/code/game/objects/items/grenades/chem_grenade.dm +++ b/code/game/objects/items/grenades/chem_grenade.dm @@ -217,36 +217,8 @@ if(stage != GRENADE_READY) return - for(var/obj/item/slime_extract/S in beakers) - if(S.Uses) - for(var/obj/item/reagent_containers/glass/G in beakers) - G.reagents.trans_to(S, G.reagents.total_volume) - - //If there is still a core (sometimes it's used up) - //and there are reagents left, behave normally, - //otherwise drop it on the ground for timed reactions like gold. - - if(S) - if(S.reagents && S.reagents.total_volume) - for(var/obj/item/reagent_containers/glass/G in beakers) - S.reagents.trans_to(G, S.reagents.total_volume) - else - S.forceMove(get_turf(src)) - no_splash = TRUE ..() - //I tried to just put it in the allowed_containers list but - //if you do that it must have reagents. If you're going to - //make a special case you might as well do it explicitly. -Sayu -/obj/item/grenade/chem_grenade/large/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/slime_extract) && stage == GRENADE_WIRED) - if(!user.transferItemToLoc(I, src)) - return - to_chat(user, "You add [I] to the [initial(name)] assembly.") - beakers += I - else - return ..() - /obj/item/grenade/chem_grenade/cryo // Intended for rare cryogenic mixes. Cools the area moderately upon detonation. name = "cryo grenade" desc = "A custom made cryogenic grenade. Rapidly cools contents upon ignition." diff --git a/code/game/objects/items/grenades/clusterbuster.dm b/code/game/objects/items/grenades/clusterbuster.dm index 5326b303d977..a086cf85b055 100644 --- a/code/game/objects/items/grenades/clusterbuster.dm +++ b/code/game/objects/items/grenades/clusterbuster.dm @@ -84,35 +84,6 @@ for(var/i in 1 to steps) step_away(src,loc) -/obj/effect/payload_spawner/random_slime - var/volatile = FALSE - -/obj/effect/payload_spawner/random_slime/volatile - volatile = TRUE - -/obj/item/slime_extract/proc/activate_slime() - var/list/slime_chems = src.activate_reagents - if(!QDELETED(src)) - var/chem = pick(slime_chems) - var/amount = 5 - if(chem == "lesser plasma") //In the rare case we get another rainbow. - chem = /datum/reagent/toxin/plasma - amount = 4 - if(chem == "holy water and uranium") - chem = /datum/reagent/uranium - reagents.add_reagent(/datum/reagent/water/holywater) - reagents.add_reagent(chem,amount) - -/obj/effect/payload_spawner/random_slime/spawn_payload(type, numspawned) - for(var/loop = numspawned ,loop > 0, loop--) - var/chosen = pick(subtypesof(/obj/item/slime_extract)) - var/obj/item/slime_extract/P = new chosen(loc) - if(volatile) - addtimer(CALLBACK(P, TYPE_PROC_REF(/obj/item/slime_extract, activate_slime)), rand(15,60)) - var/steps = rand(1,4) - for(var/i in 1 to steps) - step_away(src,loc) - ////////////////////////////////// //Custom payload clusterbusters ///////////////////////////////// @@ -180,14 +151,3 @@ var/real_type = pick(subtypesof(/obj/item/grenade/clusterbuster)) new real_type(loc) return INITIALIZE_HINT_QDEL - -//rainbow slime effect -/obj/item/grenade/clusterbuster/slime - name = "Blorble Blorble" - icon_state = "slimebang" - base_state = "slimebang" - payload_spawner = /obj/effect/payload_spawner/random_slime - prime_sound = 'sound/effects/bubbles.ogg' - -/obj/item/grenade/clusterbuster/slime/volatile - payload_spawner = /obj/effect/payload_spawner/random_slime/volatile diff --git a/code/game/objects/items/implants/implant_misc.dm b/code/game/objects/items/implants/implant_misc.dm index d8f871e1ecc4..4379003d57a8 100644 --- a/code/game/objects/items/implants/implant_misc.dm +++ b/code/game/objects/items/implants/implant_misc.dm @@ -122,13 +122,6 @@ radio_key = /obj/item/encryptionkey/syndicate subspace_transmission = TRUE -/obj/item/implant/radio/slime - name = "slime radio" - icon = 'icons/obj/surgery.dmi' - icon_state = "adamantine_resonator" - radio_key = /obj/item/encryptionkey - subspace_transmission = TRUE - /obj/item/implant/radio/get_data() var/dat = {"Implant Specifications:
Name: Internal Radio Implant
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index ecee3894ccbb..cfe07df070ba 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -407,7 +407,7 @@ )) /* - * Biowaste bag (mostly for xenobiologists) + * Biowaste bag */ /obj/item/storage/bag/bio @@ -424,7 +424,6 @@ STR.max_items = 20 STR.insert_preposition = "in" STR.set_holdable(list( - /obj/item/slime_extract, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/glass/beaker, diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 9516c7128090..e8b619b0d712 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -282,7 +282,6 @@ /obj/item/storage/firstaid/tactical, /obj/item/encryptionkey/syndicate, /obj/item/clothing/glasses/thermal/syndi, - /obj/item/slimepotion/slime/sentience/nuclear, /obj/item/storage/box/syndie_kit/imp_radio, /obj/item/storage/box/syndie_kit/imp_uplink, /obj/item/clothing/gloves/krav_maga/combatglovesplus, diff --git a/code/game/objects/structures/salvaging.dm b/code/game/objects/structures/salvaging.dm index f4aad715db19..a3b3b2b5763f 100644 --- a/code/game/objects/structures/salvaging.dm +++ b/code/game/objects/structures/salvaging.dm @@ -617,7 +617,6 @@ /obj/item/circuitboard/machine/medical_kiosk = 5, /obj/item/circuitboard/machine/medipen_refiller = 5, /obj/item/circuitboard/machine/microwave = 5, - /obj/item/circuitboard/machine/monkey_recycler = 5, /obj/item/circuitboard/machine/ore_redemption = 5, /obj/item/circuitboard/machine/ore_silo = 5, /obj/item/circuitboard/machine/reagentgrinder = 5, @@ -671,7 +670,6 @@ /obj/item/circuitboard/computer/powermonitor/secret = 5, /obj/item/circuitboard/computer/prototype_cloning = 5, /obj/item/circuitboard/computer/stationalert = 5, - /obj/item/circuitboard/computer/xenobiology = 5, /obj/item/circuitboard/computer/teleporter = 5, /obj/item/circuitboard/computer/operating = 5, /obj/item/circuitboard/computer/crew = 5, diff --git a/code/game/turfs/open/floor/misc_floor.dm b/code/game/turfs/open/floor/misc_floor.dm index 98ad4658add0..97f3772ec208 100644 --- a/code/game/turfs/open/floor/misc_floor.dm +++ b/code/game/turfs/open/floor/misc_floor.dm @@ -126,20 +126,6 @@ /turf/open/floor/noslip/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) return -/turf/open/floor/bluespace - slowdown = -1 - icon_state = "bluespace" - desc = "Through a series of micro-teleports these tiles let people move at incredible speeds." - floor_tile = /obj/item/stack/tile/bluespace - - -/turf/open/floor/sepia - slowdown = 2 - icon_state = "sepia" - desc = "Time seems to flow very slowly around these tiles." - floor_tile = /obj/item/stack/tile/sepia - - /turf/open/floor/bronze name = "bronze floor" desc = "Some heavy bronze tiles." diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 7d9279f1390d..7953f3f7021a 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -539,17 +539,6 @@ newprofile.mob_overlay_icon_list = mob_overlay_icon_list.Copy() newprofile.mob_overlay_state_list = mob_overlay_state_list.Copy() //WS EDIT - Mob Overlay State -/datum/antagonist/changeling/xenobio - name = "Xenobio Changeling" - give_objectives = FALSE - show_in_roundend = FALSE //These are here for admin tracking purposes only - you_are_greet = FALSE - - chem_storage = 25 - geneticpoints = 2 - chem_recharge_rate = 0.5 - dna_max = 3 - /datum/antagonist/changeling/roundend_report() var/list/parts = list() @@ -582,6 +571,3 @@ /datum/antagonist/changeling/antag_listing_name() return ..() + "([changelingID])" - -/datum/antagonist/changeling/xenobio/antag_listing_name() - return ..() + "(Xenobio)" diff --git a/code/modules/awaymissions/mission_code/moonoutpost19.dm b/code/modules/awaymissions/mission_code/moonoutpost19.dm deleted file mode 100644 index 4f13e27001ec..000000000000 --- a/code/modules/awaymissions/mission_code/moonoutpost19.dm +++ /dev/null @@ -1,121 +0,0 @@ -// moonoutpost19 - -//Areas -/area/awaymission/moonoutpost19 - name = "space" - icon_state = "awaycontent1" - -/area/awaymission/moonoutpost19/arrivals - name = "MO19 Arrivals" - icon_state = "awaycontent2" - -/area/awaymission/moonoutpost19/research - name = "MO19 Research" - icon_state = "awaycontent3" - -/area/awaymission/moonoutpost19/syndicate - name = "Syndicate Outpost" - icon_state = "awaycontent4" - -/area/awaymission/moonoutpost19/main - name = "Khonsu 19" - always_unpowered = TRUE - power_environ = FALSE - power_equip = FALSE - power_light = FALSE - poweralm = FALSE - ambientsounds = list('sound/ambience/ambimine.ogg') - icon_state = "awaycontent5" - -/area/awaymission/moonoutpost19/hive - name = "The Hive" - always_unpowered = TRUE - power_environ = FALSE - power_equip = FALSE - power_light = FALSE - poweralm = FALSE - icon_state = "awaycontent6" - -//Papers - -/obj/item/paper/crumpled/awaymissions/moonoutpost19/hastey_note - name = "Hastily Written Note" - default_raw_text = "19 06 2554

I fucking knew it. There was a major breach, that idiotic force field failed and the xenomorphs rushed out and took out the scientists. I've managed to make it to my office and closed the blast doors. I can hear them trying to pry open the doors. Probably don't have long. I have no clue what has happened to the rest of the crew, for all I know they've been killed to produce more of the fucks." - -/obj/item/paper/fluff/awaymissions/moonoutpost19/research/larva_social - name = "Larva Xenomorph Social Interactions & Capturing Procedure" - default_raw_text = "Researcher: Dr. Sakuma Sano
Date: 04/06/2554

Report:
As expected, all that is left of the monkeys we sent in earlier is a group of xenomorph larvae. It is quite clear that the facehuggers are not selective in their hosts, and so far the gestation process has been shown to have a 100% success rate.

The larvae themselves have been behaving very differently from the lone larva we first observed, and despite shying away from humans they are clearly comfortable with others of their kind. Our previous suspicions on larvae have been confirmed with their demonstration of playfulness: they are not nearly as aggressive or violent when young, before molting to adulthood.

The majority of the play we observed involved a sort of hide-and-seek, and occasionally wrestling by tangling themselves and struggling out of it. While normally we would write these off as instinctual play for honing their skills when they molt, their growth period is so incredibly fast and they are still such adept killers that it would serve no practical purpose. The only explanation for this is perhaps to create bonds and friendships with each other, if that is even possible for such an incredibly hostile race. It may be that they are much more reasonable with each other than other life forms.

It had become clear that now was the best time to extract a xenomorph for dissecting, as these were all still larvae and the queen was still attached to its ovipositor and would be immobile. With the approval of the research director, we sent in our medical robot that had been dubbed 'Head Surgeon' into the containment pen, dropping the shields for only a fraction of a second to allow it entry. The larvae were cautious, but the curiosity of one had him within grabbing range of our robot. It was brought out and quickly euthanized through lethal injection, courtesy of our mechanical doctor." - -/obj/item/paper/fluff/awaymissions/moonoutpost19/research/xeno_queen - name = "Queen Xenomorph Physiology & Behavior Observation" - default_raw_text = "Researcher: Dr. Sakuma Sano
Date: 04/06/2554

Report:
I have studied many interesting and diverse life-forms as a xenobiologist ranging from creatures as large as cows, to specimens too small see with the naked eye. This is by far the largest alien I have ever seen. The alien we were previously studying has molted and has become an absolutely enormous creature. Standing at over 15 feet tall and weighing in at likely two tons or more, the xenomorph queen is an absolutely breathtakingly large and cruel monster. Its behavior has changed drastically from when it was a drone, having become far more comfortable with sitting and staring at us, rather than smashing at the windows.

The queen, physiologically speaking, is fairly similar to the other xenomorphs, with a few key differences. Its enormous size demands large legs, while the back seems to be always hunched forward. The dorsal tubes on the back have changed to several large spikes, and we observed the alien now sports a second pair of smaller arms on its chest. The purpose of these secondary arms is still unknown. Finally, the queen's crown has become incredibly large, with what seems to be a retractable slot to hide its head in. The dome appears to be extremely thick near the front, and will likely be able to resist a lot of trauma. Despite the enormous size it has grown to, it is not that much slower than it used to be.

After two hours of doing relatively nothing but staring, the queen began to produce an unusually large amount of resin and weeds, quickly shaping up a large nest that it then hid behind. It then proceeded to smash out all the lights, leaving us with very little to see with our cameras. When we looked through the back cameras, we had discovered that it had grown a large ovipositor, and was releasing large eggs onto the ground. This had us all in agreement that this stage of the life cycle was the queen.

Over the next few hours, the eggs grew to their full sizes, and we provided the subject with new monkey hosts. When they approached the eggs, they opened to release more facehuggers. It seems that we have observed the full cycle of reproduction for this species. We can expect more larvae in the next few hours." - -/obj/item/paper/fluff/awaymissions/moonoutpost19/research/xeno_adult - name = "Adult Xenomorph Physiology & Behavior Observation" - default_raw_text = "Researcher: Dr. Sakuma Sano
Date: 03/06/2554

Report:
The other scientists and I can hardly believe our eyes. The snake-like larva has molted into a 7 foot tall insectoid nightmare in just a few hours. It's obvious now as to why such heavy duty containment was needed. It immediately tried to escape however by flinging itself at the window in a flurry of swipes and stabs. It seems its behavior has returned to a state that is very similar to the facehugger, though I doubt with the same intent! Thankfully, our glass and shields have shown to be more than sturdy enough for such a violent creature, and so far, any attempts at the creature escaping have been in vain.

As for its physiology, the creature has an elongated head with what appears to be have an exoskeleton resembling an external rib-cage on the torso. The alien is also fairly skinny with a lean body. The little amount of meat on the alien appears to be entirely muscle. We assume this makes it deceptively strong, while remaining agile at the same time. One of the most interesting things we have seen is its pharyngeal jaw. It has some what of an inner mouth capable of being fired externally at extremely high speeds. It has already caused many dents in the walls and a few small cracks in the window with it. The alien also has a couple of dorsal tubes on its back, their purpose unknown. Finally, this monster sports a long ridged tail, complete with a large and extremely sharp blade at the tip.

Normally I would be absolutely terrified of something like this, but I'm putting my trust in Nanotrasen with the containment. After all, they wouldn't build a cell that could fail to contain its subject, would they?" - -/obj/item/paper/fluff/awaymissions/moonoutpost19/research/larva_psych - name = "Larva Xenomorph Physiology & Behavior Observation" - default_raw_text = "Researcher: Dr. Sakuma Sano
Date: 03/06/2554

Report:
When the larva first emerged from the chest of the monkey, it seemed very curious. It would wander around aimlessly for awhile and then sit still. We are unable to determine the gender of the larva, or even determine if it has a gender. After some time had passed, it seemed to lose interest in its surroundings and sat mostly still while occasionally wagging its tail. We decided to throw in a live mouse to see if it would consume it. The larva quickly attacked and ate the mouse and seemed to get larger very suddenly, this suggests that the larvae are capable of metabolizing and directing all the energy towards growth at previously thought impossible speeds. It is a shame that we cannot observe the process more closely, as we do not currently know how dangerous or violent this creature is or will become as it matures fully.

It is tempting to imagine the possibilities of utilizing such a mechanism. The capability of skipping years of growth time for children, repairing bodily damage in a matter of moments, even its usage in existing cloning technology." - -/obj/item/paper/fluff/awaymissions/moonoutpost19/research/facehugger - name = "'Facehugger' Xenomorph Physiology & Behavior Observation" - default_raw_text = "Researcher: Dr. Sakuma Sano
Date: 03/06/2554

Report:
The test subject we were provided with truly is alien. It is a small spider-like creature with bony legs leading to a smooth body. It has a long tail connected to it, and it has shown extremely aggressive behavior by flinging its entire body at the glass and shields to no avail. While doing so, we noticed there was a small pink hole in the middle of the body.

When we sent in a monkey through the crude but effective disposal tube, the alien immediately jumped at its face and latched on. The monkey was quickly suffocated by its constricting tail, unable to pry off the fingers. The monkey at first seemed to be dead, but was observed to be breathing. The recently named alien 'facehugger' fell off dead and curled its legs up like a spider moments after it had finished with the monkey's body.

While the monkey appeared to be unharmed, we kept it in the cell for a couple more hours until we were horrified to discover it screaming out in pain as a snake-like creature erupted from the monkey's chest! It appears that the 'facehugger' is only the start of this life cycle. The impregnation cycle involving the creatures growing inside the chests of their hosts seems to only be the beginning." - -/obj/item/paper/fluff/awaymissions/moonoutpost19/research/xeno_hivemind - name = "The Hivemind Hypothesis" - default_raw_text = "Researcher: Dr. Mark Douglas
Date: 17/06/2554

Report:
Earlier today we have observed a new phenomenon with our subjects. While feeding them our last monkey subject and throwing out the box, the aliens merely looked at us instead of infecting the monkey right away. They looked to be collectively distressed as they would no longer be given hosts, where instead we would move to the next phase of the experiment. When I glanced at the gas tanks and piping leading to their cell, I looked back to see all of them were up against the glass, even the queen! It was as if they all understood what was going to happen, even though we knew only the queen had the cognitive capability to do so.

The only explanation for this is a form of communication between the aliens, but we have seen no such action take place anywhere in the cell until now. We also know that regular drone and hunter xenomorphs have no personality or instinct to survive by themselves. Perhaps the queen has a direct link to them? A form of a commander or overseer that controls their every move? A hivemind?" - -/obj/item/paper/fluff/awaymissions/moonoutpost19/research/xeno_behavior - name = "\improper A Preliminary Study of Alien Behavior" - default_raw_text = "Researcher: Dr. Sakuma Sano
Date: 08/06/2554

Report:
The xenomorphs we have come to study here are a remarkable species. They are almost universally aggressive across all castes, showing no remorse or guilt or pause before or after acts of violence. They appear to be a species entirely designed to kill. Oddly enough, even their method of reproduction is a brutal two-for-one method of birthing a new xenomorph and killing its host.

The lone xenomorph we studied only five days ago showed little sign of intelligence. Only a simple drone that flung itself at the safety glass and shields repeatedly and thankfully without success. Once the drone molted into a queen, it became much more calm and calculating, merely looking at us and waiting while building its nest. As the hive grew in size and in numbers, so too did the intelligence of the common hunter and drone. We are still researching how they can communicate with one another and the relationship between the different castes and the queen. We will continue to update our research as we learn more about the species." - -/obj/item/paper/fluff/awaymissions/moonoutpost19/research/xeno_castes - name = "The Xenomorph 'Castes'" - default_raw_text = "Researcher: Dr. Mark Douglas
Date: 06/06/2554

Report:
While observing the growing number of aliens in the containment cell, we began to notice subtle differences that were consistently repeating. Like ants, these creatures clearly have different specialized variations that determine their roles in the hive. We have dubbed the three currently observed castes as Hunters, Drones, and Sentinels.

Hunters have been observed to be by far the most aggressive and agile of the three, constantly running on every surface and frequently swiping at the windows. They are also remarkably good at camouflaging themselves in darkness and on their resin structures, appearing almost invisible to the unwary observer. They are always the first to reach the monkeys we send in leading us to believe that this caste is primarily used for finding and retrieving hosts.

Drones on the other hand are much more docile and seem more shy by comparison, though not any less aggressive than the other castes. They have been observed to have a much wider head and lack dorsal tubes. They have shown to be less agile and visibly more fragile than any other caste. The drone however has never been observed to interact with the monkeys directly and instead preferring maintenance of the hive by building walls of resin and moving eggs around the nest. As far as we know, we have only ever observed a drone become a queen, and we have no way of knowing if the other castes have that capability.

Lastly, we have the Sentinels, which appear at first glance to be the guards of the hive. They have so far been only observed to remain near the queen and the eggs, frequently curled up against the walls. We have only observed one instance where they have interacted with a monkey who strayed too closely to the queen, and was pounced and held down immediately until it was applied with a facehugger. Their lack of movement makes it difficult to determine their exact purpose as guards, sentries, or other role." - -/obj/item/paper/fluff/awaymissions/moonoutpost19/research/larva_autopsy - name = "Larva Xenomorph Autopsy Report" - default_raw_text = "Researcher: Dr. Mark Douglas
Date: 04/06/2554

Report:
After an extremely dangerous, time consuming and costly dissection, we have managed to record and identify several of the organs inside of the first stage of the xenomorph cycle: the larva. This procedure took an extensive amount of time because these creatures have incredibly, almost-comically acidic blood that can melt through almost anything in a few moments. We had to use over a dozen scalpels and retractors to complete the autopsy.

The larva seems to possess far fewer and quite different organs than that of a human. There is a stomach, with no digestive tract, a heart, which seems to lack any blood-oxygen circulation purpose, and an elongated brain, even though its as dumb as any large cat. It also lacks any liver, kidneys, or other basic organs.

We can't determine the exact nature of how these creatures grow, nor if they gain organs as they become adults. The larger breeds of xenomorph are too dangerous to kill and capture to give us an accurate answer to these questions. All that we can conclude is that being able to function with so little and yet be so deadly means that these creatures are highly evolved and likely to be extremely durable to various hazards that would otherwise be lethal to humans." - -/obj/item/paper/fluff/awaymissions/moonoutpost19/research/evacuation - name = "Evacuation Procedure" - default_raw_text = "

In The Event of Xenobiology Breach: Evacuate staff, Lock down Xenobiology, Notify on-site superiors and/or Central Command immediately.



Current Xenobiology Containment Level:Secure RUN

" - -/obj/item/paper/fluff/awaymissions/moonoutpost19/log/personal - name = "Personal Log" - default_raw_text = "Log 1:
We got our promised supply drop today. We were only meant to get it, what, a week ago? This bloody gateway keeps desyncing itself, and that means subsisting off recycled water and carb packs. No clue where the damn thing connects to on its off days, and HQ say we are 'not to touch it if it isn't linking to command.' We dumped off the assload of crates Jim filled, got our boxes of oxygen, food and drink, and closed the portal.

Log 2:
Damn thing is acting up again. Three days no contact this time. I thought I heard clanking noises from it yesterday. Jim is going on about the NT base or some shit. We've been over this before - They don't know we're here, that engineer was too drunk to recognize his suit, especially since I had it painted orange. He's starting to get annoying. We're safe.

Log 3:
Gateway synced itself up automatically today. I opened it for an instant to spy through it, got a glimpse of the inside of a transport container. Either HQ's redecorating or something, or there's more than two of these things." - -/obj/item/paper/fluff/awaymissions/moonoutpost19/log/personal_2 - name = "Personal Log" - default_raw_text = "Log 1:
While mining today I noticed the NT station was finished with its renovations. They placed some huge reinforced tumor on the station, looks so ugly. I wouldn't be surprised if those pigs decided to turn that little astronomy outpost into a prison with that thing, it'd be pretty typical of them.

Log 2:
Really dumb of me but I just waved at an engineer in the outpost, and he waved back. I hope to god he was too dumb or drunk to recognize the suit, because if he isn't then we might have to pull out before they come looking for us.

Log 3:
That huge reinforced tumor in their science section has been making a lot of noise lately. I've been hearing some banging and scratching from the other side and I'm kind of glad now that they reinforced this thing so much. I'll be sleeping with my gun under my pillow from now on." - -/obj/item/paper/fluff/awaymissions/moonoutpost19/engineering - name = "Engineering Instructions" - default_raw_text = "Alright, listen up. If you're reading this, I'm either taking a shit or I've been recalled back to Command. Either way, you'll need to know how to restore power. We've stolen this stuff from Nanotrasen, so all the equipment is jury-rigged. We have generators that work on both plasma and uranium, about 50 sheets should power the outpost for quite a while. If the generators aren't working, which is very likely, take the power cell on the desk and put it into the APC in the hallway. That should get the place running, at least for a little while." - -/obj/item/paper/fluff/awaymissions/moonoutpost19/log/kenneth - name = "Personal Log - Kenneth Cunningham" - default_raw_text = "Entry One - 27/05/2554:
I just arrived, and already I hate my job. I'm stuck on this shithole of an outpost, trying to avoid these damn eggheads running all over the place preparing for god knows what. There's no crimes to stop, no syndies to kill, and I'm not even allowed to beat the fuckin' assistant senseless! They said I was transferred from Space Station 13 for 'good behavior', but this feels more like a punishment than a reward. All I know is that if I don't get some action soon, I'm going to go insane.

Entry Two - 03/06/2554:
Okay, so get this: we got a fuckin' deathsquad coming in today! I thought the day I saw one of them would be the day my employment was 'terminated', if you get my drift. They're escorting some sort of weird alien creature for the eggheads to study. I heard one of the docs telling the chef that this thing killed a whole security force before it was captured. I sure as hell hope that I don't have to fight it.

Entry Three - 08/06/2554:
My first real bit of 'action' today, if you could call it that. Crazy Ivan got in a fight with Kuester today about his Booze-O-Mat. Apparently one of the crewmembers had stolen a couple bottles of booze from the machine after Ivan disabled the ID lock. Tell you the truth, I don't blame the thief. Everyone is going a little stir-crazy in here, and the bartender is being damn stingy with the alcohol. Either way, once they started to pick a fight, I had to take them down. It's a damn shame that we don't have a brig, though. I had to lock Ivan in a fuckin' freezer, for god's sake. Let's hope that we can keep our sanity together, at least for a while.

Entry Four - 10/06/2554:
Jesus fucking Christ riding on a motorbike. These things the scientists are studying are terrifying! Fucking great huge purple bug things as tall as the ceiling, with blades for arms and drooling at the mouth. I don't think my taser will do jack shit against these damn things, but the eggheads say that they're safely contained. If they do, I have a feeling that it's only a matter of time before we're all screwed. These bastards look like walking death.

Entry Five - 18/06/2554:
Finally caught who stole the booze from Kuester. It was that fuckin' loser assistant Steve! He was in the dorms, chugging his worries away. I took one of the bottles back to the barkeep, but no one has to know about this second one. I think I'm gonna enjoy this while watching tomorrow's Thunderdome match.

Entry Six - 19/06/2554:
Oh, great. The chef is still sleeping, so we get Ivan's gruel for breakfast today. I overheard Sano and Douglas saying something about the aliens being restless, so we might get some action today. As long as it happens after the big game, I'm fine with it. I still got one beer to drink before I'm ready to die." - -/obj/item/paper/fluff/awaymissions/moonoutpost19/log/ivan - name = "Personal Log - Ivan Volodin" - default_raw_text = "Ivan Volodin Stories:

Entry Won - 28/05/2554:
Hello. I am Crazy Ivan. Boss say I must write. I do good job fixing outpost. Is very good job. Much better than mines. Many nice people. I cause no trouble.

Entry Too - 05/06/2554:
I am finding problem with Booze-O-Mat. Is not problem. I solve very easy. Use yellow tool to make purple light go off. I am good engineer! Bartender will be very happy.

Entry Tree - 08/06/2554:
Bartender is not happy. Security man is not happy. Cannot feel legs, is very cold in freezer. Is not good. Table is jammed into door, have no tools. Is very not good. But, on bright side, found meat! Shall chew to keep spirits up.

Entry Fore - 12/06/2554:
Big nasty purple bug looked at me today. Make nervous. Blue wall wire can be broken, then bad thing happens. Very very bad thing. Man in orange spacesuit wave at me today too. He seem nice. Wonder who was?

Entry Fiv - 15/06/2554:
I eat cornflakes today. Is good day. Sun shine for a while. Was nice. I also take ride on disposals chute. Was fun, but tiny. Get clog out of pipes, was vodka bottle. Is empty. This make many sads.

Entry Sex: 19/06/2554:
Purple bugs jumpy today. When waved, get hiss. Maybe very bad. Maybe just ill. Do not know. Is science problem, is not engineer problem. I eat sandwich. Is glorious job. Wish to never end." - -/obj/item/paper/fluff/awaymissions/moonoutpost19/log/gerald - name = "Personal Log - Gerald Rosswell" - default_raw_text = "Personal Log for Research Director Gerald Rosswell

Entry One - 17/05/2554:
You know, I can't believe I took this position so suddenly. I saw that corporate needed a research director for one of it's outposts and thought it would be a cakewalk, there isn't going to be a lot of research to be done on a tiny outpost. Mainly just running scans on the gas giant we are orbiting or some basic RnD. However, they conveniently forgot to tell me that me and my science staff would have to pull double duty as medical staff and that there is no one higher up on the chain of command here, so I get to pull triple duty as acting captain as well! This shit is probably allowed in some 3 point fine print buried underneath the literally thousands of pages of contracts. Well, at least the research will be easy work.

Entry Two - 25/05/2554:
Well, we all expected it at the outpost, CentCom has decided to completely change what research we are doing. They've decided that we should be research the species known as 'xenomporphs'. They announced this change 4 days ago and along with it, sadly, the termination of our current science staff barring me. Not to mention the constant noise made by the construction detail they sent to staple on an xenobiology lab ensuring no one has been able to sleep decently ever since they announced the shift. To make matters worse our current security guard actually died of a heart attack today. Just goes to show that 75 year old men shouldn't be security guards. Still can't believe that they decided to do this major change less than a month after the outpost was established.

Entry Three - 27/05/2554:
The new security guard arrived today. Apparently transferred here from the research station that also is orbiting the gas giant. He seems to be rather angry about his transfer. Considering the rumors I've heard about the research station he's probably caught off guard by the fact that Steve hasn't tried to force an IED down his throat.

Entry Four - 06/06/2554:
My requests for additional security and containment measures for the 'xenomorph' has been denied. Does Central Command not notice how dangerous these creatures are? The only thing keeping them in is a force field, a minor problem with the power grid and the entire hive is loose. What would stop them then, the lone security guard with a dinky little taser? Kenneth can barely handle a short-tempered engineer. We are under equipped and under staffed, we are inevitably going to be destroyed unless we get the equipment and staff we need.

Entry Five - 10/06/2554:
Cunningham got a good look at the xenomorph in containment. He was frightened for the rest of the day, rather amusing if it wasn't for the fact that we are all trapped on this scrap heap with naught but a force field keeping those xenomorphs in.

Entry Six - 17/06/2554:
The reactions from the specimens today has shown that they possess strange mental properties. Mark hypothesizes that they possibly have a sort of hive mind, while nothing is certain this would explain how xenomorphs seem to have vastly increased intellect when a 'queen' is present. Of course, to test this hypothesis would require many complicated procedures which we will not be able to undertake. But we do not know the full extend of the xenomorph mind, it may or may not be able to find a way to circumvent our containment system. I will resend my request for additional security measures along with this new found information." - -/obj/item/paper/fluff/awaymissions/moonoutpost19/food_specials - name = "Specials This Week" - default_raw_text = "

I Can't Believe It's Not Pasta: Half off on Wednesdays



Burger night every Friday 6PM-10PM, free drinks with purchase of meal!



Premiering Tonight: The comedy stylings of Shoe Snatching Willy! 11AM-7PM

" - -/obj/item/paper/fluff/awaymissions/moonoutpost19/welcome - name = "Welcome Notice" - default_raw_text = "

Welcome to Moon Outpost 19! Property of Nanotrasen Inc.




Staff Roster:
-Dr. Gerald Rosswell: Research Director & Acting Captain
-Dr. Sakuma Sano: Xenobiologist
-Dr. Mark Douglas: Xenobiologist
-Kenneth Cunningham: Security Officer-Ivan Volodin: Engineer
-Mathias Kuester: Bartender
-Sven Edling: Chef
-Steve: Assistant

Please enjoy your stay, and report any abnormalities to an officer." - -/obj/item/paper/fluff/awaymissions/moonoutpost19/goodbye_note - name = "Note" - default_raw_text = "Bugs break out. I run to here and lock door. I hear door next to me break open and screams. All nice people here dead now. I no want to be eaten, and bottle always said to be coward way out, but person who say that is stupid. Mira, there is no escape for me, tell Alexis and Elena that father will never come home, and that I love you all." - - diff --git a/code/modules/cargo/bounties/slime.dm b/code/modules/cargo/bounties/slime.dm deleted file mode 100644 index 4aa0797c7002..000000000000 --- a/code/modules/cargo/bounties/slime.dm +++ /dev/null @@ -1,39 +0,0 @@ -/datum/bounty/item/slime - reward = 3000 - -/datum/bounty/item/slime/New() - ..() - description = "Nanotrasen's science lead is hunting for the rare and exotic [name]. A bounty has been offered for finding it." - reward += rand(0, 4) * 500 - -/datum/bounty/item/slime/green - name = "Green Slime Extract" - wanted_types = list(/obj/item/slime_extract/green) - -/datum/bounty/item/slime/pink - name = "Pink Slime Extract" - wanted_types = list(/obj/item/slime_extract/pink) - -/datum/bounty/item/slime/gold - name = "Gold Slime Extract" - wanted_types = list(/obj/item/slime_extract/gold) - -/datum/bounty/item/slime/oil - name = "Oil Slime Extract" - wanted_types = list(/obj/item/slime_extract/oil) - -/datum/bounty/item/slime/black - name = "Black Slime Extract" - wanted_types = list(/obj/item/slime_extract/black) - -/datum/bounty/item/slime/lightpink - name = "Light Pink Slime Extract" - wanted_types = list(/obj/item/slime_extract/lightpink) - -/datum/bounty/item/slime/adamantine - name = "Adamantine Slime Extract" - wanted_types = list(/obj/item/slime_extract/adamantine) - -/datum/bounty/item/slime/rainbow - name = "Rainbow Slime Extract" - wanted_types = list(/obj/item/slime_extract/rainbow) diff --git a/code/modules/cargo/bounty.dm b/code/modules/cargo/bounty.dm index 3807e9bd6984..96d5218e551e 100644 --- a/code/modules/cargo/bounty.dm +++ b/code/modules/cargo/bounty.dm @@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(bounties_list) // Returns a new bounty of random type, but does not add it to GLOB.bounties_list. /proc/random_bounty() - switch(rand(1, 13)) + switch(rand(1, 12)) if(1) var/subtype = pick(subtypesof(/datum/bounty/item/assistant)) return new subtype @@ -103,18 +103,15 @@ GLOBAL_LIST_EMPTY(bounties_list) var/subtype = pick(subtypesof(/datum/bounty/item/science)) return new subtype if(9) - var/subtype = pick(subtypesof(/datum/bounty/item/slime)) - return new subtype - if(10) var/subtype = pick(subtypesof(/datum/bounty/item/engineering)) return new subtype - if(11) + if(10) var/subtype = pick(subtypesof(/datum/bounty/item/mining)) return new subtype - if(12) + if(11) var/subtype = pick(subtypesof(/datum/bounty/item/medical)) return new subtype - if(13) + if(12) var/subtype = pick(subtypesof(/datum/bounty/item/botany)) return new subtype @@ -153,10 +150,7 @@ GLOBAL_LIST_EMPTY(bounties_list) /********************************Dynamic Gens********************************/ for(var/i in 0 to 1) - if(prob(50)) - pick = pick(subtypesof(/datum/bounty/item/slime)) - else - pick = pick(subtypesof(/datum/bounty/item/science)) + pick = pick(subtypesof(/datum/bounty/item/science)) try_add_bounty(new pick) /********************************Cutoff for Non-Low Priority Bounties********************************/ diff --git a/code/modules/clothing/outfits/factions/minutemen.dm b/code/modules/clothing/outfits/factions/minutemen.dm index 36530b20754b..4507d46ea958 100644 --- a/code/modules/clothing/outfits/factions/minutemen.dm +++ b/code/modules/clothing/outfits/factions/minutemen.dm @@ -601,7 +601,7 @@ belt = /obj/item/storage/belt/military/clip/gunner suit_store = /obj/item/gun/ballistic/automatic/hmg/cm40 - backpack_contents = list(/obj/item/clothing/mask/gas/clip=1, /obj/item/reagent_containers/food/snacks/rationpack=1) + backpack_contents = list(/obj/item/clothing/mask/gas/clip=1, /obj/item/storage/ration/shredded_beef=1) ///lead, i guess you could reuse this for "Brig Officer" @@ -629,7 +629,7 @@ suit_store = /obj/item/gun/ballistic/automatic/assault/cm82 belt = /obj/item/storage/belt/military/clip/cm82 - backpack_contents = list(/obj/item/clothing/mask/gas/clip=1, /obj/item/reagent_containers/food/snacks/rationpack=1, /obj/item/gun/ballistic/automatic/pistol/cm23=1) + backpack_contents = list(/obj/item/clothing/mask/gas/clip=1, /obj/item/storage/ration/shredded_beef=1, /obj/item/gun/ballistic/automatic/pistol/cm23=1) /datum/outfit/job/clip/minutemen/grunt/commander name = "CLIP Minutemen - Field Commander" diff --git a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm deleted file mode 100644 index 79382343e1ae..000000000000 --- a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm +++ /dev/null @@ -1,103 +0,0 @@ -GLOBAL_LIST_EMPTY(monkey_recyclers) - -/obj/machinery/monkey_recycler - name = "monkey recycler" - desc = "A machine used for recycling dead monkeys into monkey cubes." - icon = 'icons/obj/kitchen.dmi' - icon_state = "grinder" - layer = BELOW_OBJ_LAYER - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = IDLE_DRAW_MINIMAL - active_power_usage = ACTIVE_DRAW_MEDIUM - circuit = /obj/item/circuitboard/machine/monkey_recycler - var/stored_matter = 0 - var/cube_production = 0.2 - var/list/connected = list() //Keeps track of connected xenobio consoles, for deletion in /Destroy() - -/obj/machinery/monkey_recycler/Initialize(mapload) - . = ..() - if (mapload) - GLOB.monkey_recyclers += src - -/obj/machinery/monkey_recycler/Destroy() - GLOB.monkey_recyclers -= src - for(var/thing in connected) - var/obj/machinery/computer/camera_advanced/xenobio/console = thing - console.connected_recycler = null - connected.Cut() - return ..() - -/obj/machinery/monkey_recycler/RefreshParts() //Ranges from 0.2 to 0.8 per monkey recycled - cube_production = 0 - for(var/obj/item/stock_parts/manipulator/B in component_parts) - cube_production += B.rating * 0.1 - for(var/obj/item/stock_parts/matter_bin/M in component_parts) - cube_production += M.rating * 0.1 - -/obj/machinery/monkey_recycler/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Producing [cube_production] cubes for every monkey inserted." - -/obj/machinery/monkey_recycler/attackby(obj/item/O, mob/user, params) - if(default_deconstruction_screwdriver(user, "grinder_open", "grinder", O)) - return - - if(default_pry_open(O)) - return - - if(default_unfasten_wrench(user, O)) - power_change() - return - - if(default_deconstruction_crowbar(O)) - return - - if(machine_stat) //NOPOWER etc - return - else - return ..() - -/obj/machinery/monkey_recycler/MouseDrop_T(mob/living/target, mob/living/user) - if(!istype(target)) - return - if(ismonkey(target)) - stuff_monkey_in(target, user) - -/obj/machinery/monkey_recycler/proc/stuff_monkey_in(mob/living/carbon/monkey/target, mob/living/user) - if(!istype(target)) - return - if(target.stat == CONSCIOUS) - to_chat(user, "The monkey is struggling far too much to put it in the recycler.") - return - if(target.buckled || target.has_buckled_mobs()) - to_chat(user, "The monkey is attached to something.") - return - qdel(target) - to_chat(user, "You stuff the monkey into the machine.") - playsound(src.loc, 'sound/machines/juicer.ogg', 50, TRUE) - var/offset = prob(50) ? -2 : 2 - animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking - use_power(500) - stored_matter += cube_production - addtimer(VARSET_CALLBACK(src, pixel_x, base_pixel_x)) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), user, "The machine now has [stored_matter] monkey\s worth of material stored.")) - -/obj/machinery/monkey_recycler/interact(mob/user) - if(stored_matter >= 1) - to_chat(user, "The machine hisses loudly as it condenses the ground monkey meat. After a moment, it dispenses a brand new monkey cube.") - playsound(src.loc, 'sound/machines/hiss.ogg', 50, TRUE) - for(var/i in 1 to FLOOR(stored_matter, 1)) - new /obj/item/reagent_containers/food/snacks/monkeycube(src.loc) - stored_matter-- - to_chat(user, "The machine's display flashes that it has [stored_matter] monkeys worth of material left.") - else - to_chat(user, "The machine needs at least 1 monkey worth of material to produce a monkey cube. It currently has [stored_matter].") - -/obj/machinery/monkey_recycler/multitool_act(mob/living/user, obj/item/multitool/I) - . = ..() - if(istype(I)) - to_chat(user, "You log [src] in the multitool's buffer.") - I.buffer = src - return TRUE diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm index bc17a9fd22af..ef3cceed2afc 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm @@ -37,7 +37,7 @@ qdel(what) /obj/machinery/processor/proc/select_recipe(X) - for (var/type in subtypesof(/datum/food_processor_process) - /datum/food_processor_process/mob) + for (var/type in subtypesof(/datum/food_processor_process)) var/datum/food_processor_process/recipe = new type() if (!istype(X, recipe.input) || !istype(src, recipe.required_machine)) continue @@ -149,60 +149,3 @@ O.forceMove(drop_location()) for (var/mob/M in src) M.forceMove(drop_location()) - -/obj/machinery/processor/slime - name = "slime processor" - desc = "An industrial grinder with a sticker saying appropriated for science department. Keep hands clear of intake area while operating." - -/obj/machinery/processor/slime/Initialize() - . = ..() - var/obj/item/circuitboard/machine/B = new /obj/item/circuitboard/machine/processor/slime(null) - B.apply_default_parts(src) - -/obj/machinery/processor/slime/adjust_item_drop_location(atom/movable/AM) - var/static/list/slimecores = subtypesof(/obj/item/slime_extract) - var/i = 0 - if(!(i = slimecores.Find(AM.type))) // If the item is not found - return - if (i <= 16) // If in the first 12 slots - AM.pixel_x = AM.base_pixel_x - 12 + ((i%4)*8) - AM.pixel_y = AM.base_pixel_y - 12 + (round(i/4)*8) - return i - var/ii = i - 16 - AM.pixel_x = AM.base_pixel_x - 12 + ((ii%4)*8) - AM.pixel_y = AM.base_pixel_y - 12 + (round(ii/4)*8) - return i - -/obj/machinery/processor/slime/process() - if(processing) - return - var/mob/living/simple_animal/slime/picked_slime - for(var/mob/living/simple_animal/slime/slime in range(1,src)) - if(slime.loc == src) - continue - if(istype(slime, /mob/living/simple_animal/slime)) - if(slime.stat) - picked_slime = slime - break - if(!picked_slime) - return - var/datum/food_processor_process/P = select_recipe(picked_slime) - if (!P) - return - - visible_message("[picked_slime] is sucked into [src].") - picked_slime.forceMove(src) - -/obj/machinery/processor/slime/process_food(datum/food_processor_process/recipe, atom/movable/what) - var/mob/living/simple_animal/slime/S = what - if (istype(S)) - var/C = S.cores - if(S.stat != DEAD) - S.forceMove(drop_location()) - S.visible_message("[C] crawls free of the processor!") - return - for(var/i in 1 to (C+rating_amount-1)) - var/atom/movable/item = new S.coretype(drop_location()) - adjust_item_drop_location(item) - SSblackbox.record_feedback("tally", "slime_core_harvested", 1, S.colour) - ..() diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index 6016def705b5..6d9945337f71 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -382,23 +382,6 @@ return TRUE return FALSE -// ------------------------------------- -// Xenobiology Slime-Extract Smartfridge -// ------------------------------------- -/obj/machinery/smartfridge/extract - name = "smart slime extract storage" - desc = "A refrigerated storage unit for slime extracts." - -/obj/machinery/smartfridge/extract/accept_check(obj/item/O) - if(istype(O, /obj/item/slime_extract)) - return TRUE - if(istype(O, /obj/item/slime_scanner)) - return TRUE - return FALSE - -/obj/machinery/smartfridge/extract/preloaded - initial_contents = list(/obj/item/slime_scanner = 2) - // ------------------------- // Organ Surgery Smartfridge // ------------------------- diff --git a/code/modules/food_and_drinks/recipes/processor_recipes.dm b/code/modules/food_and_drinks/recipes/processor_recipes.dm index c13983c6792d..63ffccdba79c 100644 --- a/code/modules/food_and_drinks/recipes/processor_recipes.dm +++ b/code/modules/food_and_drinks/recipes/processor_recipes.dm @@ -45,11 +45,6 @@ input = /obj/item/reagent_containers/food/snacks/grown/parsnip output = /obj/item/reagent_containers/food/snacks/roastparsnip -/datum/food_processor_process/mob/slime - input = /mob/living/simple_animal/slime - output = null - required_machine = /obj/machinery/processor/slime - /datum/food_processor_process/towercap input = /obj/item/grown/log output = /obj/item/popsicle_stick diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm index 5c9bcc56cc7d..42afb89c4228 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm @@ -150,7 +150,6 @@ /datum/reagent/consumable/sugar = 5, /obj/item/reagent_containers/food/snacks/pie/plain = 1, /obj/item/reagent_containers/food/snacks/chocolatebar = 3, - /obj/item/slime_extract = 1 //The reason you dont know how to make it! ) result = /obj/item/reagent_containers/food/snacks/pie/cocolavatart subcategory = CAT_PIE diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index cc2a9f176c70..45b62eb3897d 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -303,29 +303,5 @@ M.updatehealth() qdel(src) -//AI - -/obj/item/slimepotion/slime/sentience/mining - name = "minebot AI upgrade" - desc = "Can be used to grant sentience to minebots. It's incompatible with minebot armor and melee upgrades, and will override them." - icon_state = "door_electronics" - icon = 'icons/obj/module.dmi' - sentience_type = SENTIENCE_MINEBOT - custom_price = 1000 - var/base_health_add = 5 //sentient minebots are penalized for beign sentient; they have their stats reset to normal plus these values - var/base_damage_add = 1 //this thus disables other minebot upgrades - var/base_speed_add = 1 - var/base_cooldown_add = 10 //base cooldown isn't reset to normal, it's just added on, since it's not practical to disable the cooldown module - -/obj/item/slimepotion/slime/sentience/mining/after_success(mob/living/user, mob/living/simple_animal/SM) - if(istype(SM, /mob/living/simple_animal/hostile/mining_drone)) - var/mob/living/simple_animal/hostile/mining_drone/M = SM - M.maxHealth = initial(M.maxHealth) + base_health_add - M.melee_damage_lower = initial(M.melee_damage_lower) + base_damage_add - M.melee_damage_upper = initial(M.melee_damage_upper) + base_damage_add - M.move_to_delay = initial(M.move_to_delay) + base_speed_add - if(M.stored_gun) - M.stored_gun.overheat_time += base_cooldown_add - #undef MINEDRONE_COLLECT #undef MINEDRONE_ATTACK diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index c9cdcaf8199c..1db46a4d5415 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -35,7 +35,6 @@ initial_language_holder = /datum/language_holder/alien flags_1 = PREVENT_CONTENTS_EXPLOSION_1 footstep_type = FOOTSTEP_MOB_CLAW - gold_core_spawnable = NO_SPAWN pass_flags = PASSTABLE | PASSGRILLE | PASSMOB mob_size = MOB_SIZE_TINY environment_smash = ENVIRONMENT_SMASH_NONE diff --git a/code/modules/mob/living/carbon/human/species_types/IPC.dm b/code/modules/mob/living/carbon/human/species_types/IPC.dm index 20d3f81aa38d..14b8081e7c0c 100644 --- a/code/modules/mob/living/carbon/human/species_types/IPC.dm +++ b/code/modules/mob/living/carbon/human/species_types/IPC.dm @@ -32,7 +32,7 @@ attack_sound = 'sound/items/trayhit1.ogg' deathsound = "sound/voice/borg_deathsound.ogg" wings_icons = list("Robotic") - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP species_language_holder = /datum/language_holder/ipc loreblurb = "Integrated Positronic Chassis or \"IPC\" for short, are synthetic lifeforms composed of an Artificial \ Intelligence program encased in a bipedal robotic shell. They are fragile, allergic to EMPs, and the butt of endless toaster jokes. \ diff --git a/code/modules/mob/living/carbon/human/species_types/abductors.dm b/code/modules/mob/living/carbon/human/species_types/abductors.dm index 41bc6721755f..229bdcb21c2f 100644 --- a/code/modules/mob/living/carbon/human/species_types/abductors.dm +++ b/code/modules/mob/living/carbon/human/species_types/abductors.dm @@ -5,7 +5,7 @@ species_traits = list(NOBLOOD,NOEYESPRITES,NO_BONES) inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_CHUNKYFINGERS,TRAIT_NOHUNGER,TRAIT_NOBREATH) mutanttongue = /obj/item/organ/tongue/abductor - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN ass_image = 'icons/ass/assgrey.png' species_chest = /obj/item/bodypart/chest/abductor diff --git a/code/modules/mob/living/carbon/human/species_types/android.dm b/code/modules/mob/living/carbon/human/species_types/android.dm index 623041674516..6bb5956ae0ab 100644 --- a/code/modules/mob/living/carbon/human/species_types/android.dm +++ b/code/modules/mob/living/carbon/human/species_types/android.dm @@ -11,7 +11,7 @@ reagent_tag = PROCESS_SYNTHETIC species_gibs = "robotic" attack_sound = 'sound/items/trayhit1.ogg' - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN /datum/species/android/on_species_gain(mob/living/carbon/C) . = ..() diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm index cfbc682f24de..f3c477fefb85 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -20,7 +20,7 @@ damage_overlay_type = "" //We are too cool for regular damage overlays species_age_max = 300 species_traits = list(DYNCOLORS, EYECOLOR, HAIR, FACEHAIR) - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN species_language_holder = /datum/language_holder/ethereal inherent_traits = list(TRAIT_NOHUNGER) sexes = FALSE //no fetish content allowed diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm index f5de9f873b3b..7cf8d8ee3e45 100644 --- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm @@ -9,7 +9,7 @@ meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/fly disliked_food = null liked_food = GORE | RAW // Sure, the raw... the bloody... but I think stuff GROSS, like baseball burgers, are liked - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN species_language_holder = /datum/language_holder/fly species_chest = /obj/item/bodypart/chest/fly diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm index 882fffc9ff41..b45ec4b05f3e 100644 --- a/code/modules/mob/living/carbon/human/species_types/humans.dm +++ b/code/modules/mob/living/carbon/human/species_types/humans.dm @@ -9,7 +9,7 @@ skinned_type = /obj/item/stack/sheet/animalhide/human disliked_food = GROSS | RAW | CLOTH liked_food = JUNKFOOD | FRIED | SUGAR - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP loreblurb = "Mostly hairless mammalians. Their home system, Sol, lies in a sort of \"bluespace dead-zone\" that blocks anything from entering or exiting Sol's dead-zone through bluespace without a relay. While it leaves Sol extremely well-defended, it meant that they went unnoticed and uncontacted until they were themselves able to breach it." /datum/species/human/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 14526059354d..bd937acaa09f 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -20,7 +20,7 @@ coldmod = 6 // = 3x cold damage heatmod = 0.5 // = 1/4x heat damage burnmod = 0.5 // = 1/2x generic burn damage - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN inherent_factions = list("slime") species_language_holder = /datum/language_holder/jelly ass_image = 'icons/ass/assslime.png' @@ -222,7 +222,7 @@ species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD) hair_color = "mutcolor" hair_alpha = 150 - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | RACE_SWAP | ERT_SPAWN var/datum/action/innate/split_body/slime_split var/list/mob/living/carbon/bodies var/datum/action/innate/swap_body/swap_body @@ -517,50 +517,22 @@ id = SPECIES_LUMINESCENT var/glow_intensity = LUMINESCENT_DEFAULT_GLOW var/obj/effect/dummy/luminescent_glow/glow - var/obj/item/slime_extract/current_extract - var/datum/action/innate/integrate_extract/integrate_extract - var/datum/action/innate/use_extract/extract_minor - var/datum/action/innate/use_extract/major/extract_major - var/extract_cooldown = 0 - examine_limb_id = SPECIES_JELLYPERSON //Species datums don't normally implement destroy, but JELLIES SUCK ASS OUT OF A STEEL STRAW /datum/species/jelly/luminescent/Destroy(force, ...) - current_extract = null QDEL_NULL(glow) - QDEL_NULL(integrate_extract) - QDEL_NULL(extract_major) - QDEL_NULL(extract_minor) return ..() /datum/species/jelly/luminescent/on_species_loss(mob/living/carbon/C) ..() - if(current_extract) - current_extract.forceMove(C.drop_location()) - current_extract = null QDEL_NULL(glow) - QDEL_NULL(integrate_extract) - QDEL_NULL(extract_major) - QDEL_NULL(extract_minor) /datum/species/jelly/luminescent/on_species_gain(mob/living/carbon/C, datum/species/old_species) ..() glow = new(C) update_glow(C) - integrate_extract = new(src) - integrate_extract.Grant(C) - extract_minor = new(src) - extract_minor.Grant(C) - extract_major = new(src) - extract_major.Grant(C) - -/datum/species/jelly/luminescent/proc/update_slime_actions() - integrate_extract.update_name() - integrate_extract.UpdateButtonIcon() - extract_minor.UpdateButtonIcon() - extract_major.UpdateButtonIcon() /datum/species/jelly/luminescent/proc/update_glow(mob/living/carbon/C, intensity) if(intensity) @@ -581,108 +553,6 @@ if(!isliving(loc)) return INITIALIZE_HINT_QDEL - -/datum/action/innate/integrate_extract - name = "Integrate Extract" - desc = "Eat a slime extract to use its properties." - check_flags = AB_CHECK_CONSCIOUS - button_icon_state = "slimeconsume" - icon_icon = 'icons/mob/actions/actions_slime.dmi' - background_icon_state = "bg_alien" - -/datum/action/innate/integrate_extract/proc/update_name() - var/datum/species/jelly/luminescent/species = target - if(!species || !species.current_extract) - name = "Integrate Extract" - desc = "Eat a slime extract to use its properties." - else - name = "Eject Extract" - desc = "Eject your current slime extract." - -/datum/action/innate/integrate_extract/UpdateButtonIcon(status_only, force) - var/datum/species/jelly/luminescent/species = target - if(!species || !species.current_extract) - button_icon_state = "slimeconsume" - else - button_icon_state = "slimeeject" - ..() - -/datum/action/innate/integrate_extract/ApplyIcon(atom/movable/screen/movable/action_button/current_button, force) - ..(current_button, TRUE) - var/datum/species/jelly/luminescent/species = target - if(species?.current_extract) - current_button.add_overlay(mutable_appearance(species.current_extract.icon, species.current_extract.icon_state)) - -/datum/action/innate/integrate_extract/Activate() - var/mob/living/carbon/human/H = owner - var/datum/species/jelly/luminescent/species = target - if(!is_species(H, /datum/species/jelly/luminescent) || !species) - return - CHECK_DNA_AND_SPECIES(H) - - if(species.current_extract) - var/obj/item/slime_extract/S = species.current_extract - if(!H.put_in_active_hand(S)) - S.forceMove(H.drop_location()) - species.current_extract = null - to_chat(H, "You eject [S].") - species.update_slime_actions() - else - var/obj/item/I = H.get_active_held_item() - if(istype(I, /obj/item/slime_extract)) - var/obj/item/slime_extract/S = I - if(!S.Uses) - to_chat(H, "[I] is spent! You cannot integrate it.") - return - if(!H.temporarilyRemoveItemFromInventory(S)) - return - S.forceMove(H) - species.current_extract = S - to_chat(H, "You consume [I], and you feel it pulse within you...") - species.update_slime_actions() - else - to_chat(H, "You need to hold an unused slime extract in your active hand!") - -/datum/action/innate/use_extract - name = "Extract Minor Activation" - desc = "Pulse the slime extract with energized jelly to activate it." - check_flags = AB_CHECK_CONSCIOUS - button_icon_state = "slimeuse1" - icon_icon = 'icons/mob/actions/actions_slime.dmi' - background_icon_state = "bg_alien" - var/activation_type = SLIME_ACTIVATE_MINOR - -/datum/action/innate/use_extract/IsAvailable() - if(..()) - var/datum/species/jelly/luminescent/species = target - if(species && species.current_extract && (world.time > species.extract_cooldown)) - return TRUE - return FALSE - -/datum/action/innate/use_extract/ApplyIcon(atom/movable/screen/movable/action_button/current_button, force) - ..(current_button, TRUE) - var/datum/species/jelly/luminescent/species = owner - if(species?.current_extract) - current_button.add_overlay(mutable_appearance(species.current_extract.icon, species.current_extract.icon_state)) - -/datum/action/innate/use_extract/Activate() - var/mob/living/carbon/human/H = owner - var/datum/species/jelly/luminescent/species = owner - if(!is_species(H, /datum/species/jelly/luminescent) || !species) - return - CHECK_DNA_AND_SPECIES(H) - - if(species.current_extract) - species.extract_cooldown = world.time + 100 - var/cooldown = species.current_extract.activate(H, species, activation_type) - species.extract_cooldown = world.time + cooldown - -/datum/action/innate/use_extract/major - name = "Extract Major Activation" - desc = "Pulse the slime extract with plasma jelly to activate it." - button_icon_state = "slimeuse2" - activation_type = SLIME_ACTIVATE_MAJOR - ///////////////////////////////////STARGAZERS////////////////////////////////////////// //Stargazers are the telepathic branch of jellypeople, able to project psychic messages and to link minds with willing participants. diff --git a/code/modules/mob/living/carbon/human/species_types/kepori.dm b/code/modules/mob/living/carbon/human/species_types/kepori.dm index 39e3cbc3d07a..e4677fbc19f5 100644 --- a/code/modules/mob/living/carbon/human/species_types/kepori.dm +++ b/code/modules/mob/living/carbon/human/species_types/kepori.dm @@ -9,7 +9,7 @@ meat = /obj/item/reagent_containers/food/snacks/meat/slab/chicken disliked_food = FRIED | GROSS | CLOTH liked_food = MEAT | GORE - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP loreblurb = "Kepori are a species covered in feathers vaguely reminiscent of earth’s extinct troodontidae. They’re small and sometimes seen as weak by other species due to their hollow bones but make up for that in speed and reflexes. They tend to woop when excited, scared, or for any other reason at all." attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 9d539007df4e..5ee7441e2f54 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -12,7 +12,7 @@ coldmod = 1.5 heatmod = 0.67 default_features = list("mcolor" = "0F0", "tail_lizard" = "Smooth", "face_markings" = "None", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Normal Legs", "body_size" = "Normal") - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm index f8495f783e36..10375f424e82 100644 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -16,7 +16,7 @@ toxic_food = MEAT | RAW | GORE mutanteyes = /obj/item/organ/eyes/compound //WS Edit - Compound eyes mutanttongue = /obj/item/organ/tongue/moth //WS Edit - Insectoid language - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP species_language_holder = /datum/language_holder/moth loreblurb = "Bug-mammal hybrids resembling Sol's lepidopterans. They share the least DNA with baseline humans of any human-derived geneline, being significant portions insect and modified whole-cloth DNA. Their classification as another human geneline or as something else is highly debated. All evidence that would point to their origin– which is presumably a genelab somewhere– has seemingly disappeared into thin air. Mothpeople themselves have no centralized culture or homeworld, leading to a fractured existence amongst the stars." wings_icons = list("Megamoth", "Mothra") diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index d5ce34ca412f..fe017fdd2a84 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -18,7 +18,7 @@ meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/plant disliked_food = MEAT | DAIRY liked_food = VEGETABLES | FRUIT | GRAIN | CLOTH //cannibals apparentely - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP | ERT_SPAWN species_language_holder = /datum/language_holder/plant species_chest = /obj/item/bodypart/chest/pod diff --git a/code/modules/mob/living/carbon/human/species_types/spider.dm b/code/modules/mob/living/carbon/human/species_types/spider.dm index 764a7166ff2d..1b66c952172d 100644 --- a/code/modules/mob/living/carbon/human/species_types/spider.dm +++ b/code/modules/mob/living/carbon/human/species_types/spider.dm @@ -56,7 +56,7 @@ GLOBAL_LIST_INIT(spider_last, world.file2list("strings/names/spider_last.txt")) toxic_food = VEGETABLES | DAIRY | CLOTH mutanteyes = /obj/item/organ/eyes/night_vision/spider mutanttongue = /obj/item/organ/tongue/spider - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP species_language_holder = /datum/language_holder/spider loreblurb = "Rachnids are aliens with coincidental physiological similarities to Sol's spiders. Despite visible adaptations that would make them excellent hunters, modern Rachnidian culture revolves around honing the skills and talents of oneself, treating them as forms of self-expression. Rachnids tend to focus on their work intensely, priding themselves on a job well done and languishing if they see themselves as underperforming in their field." var/web_cooldown = 30 diff --git a/code/modules/mob/living/carbon/human/species_types/vox.dm b/code/modules/mob/living/carbon/human/species_types/vox.dm index 1a73860ab29f..5c2b91127f27 100644 --- a/code/modules/mob/living/carbon/human/species_types/vox.dm +++ b/code/modules/mob/living/carbon/human/species_types/vox.dm @@ -10,7 +10,7 @@ meat = /obj/item/reagent_containers/food/snacks/meat/slab/chicken disliked_food = GRAIN liked_food = MEAT - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP loreblurb = "Vox are a big bird-like species with quills, much larger and much more long-lasting than other species. Sadly, not much else is known." attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm index bf4f45e28329..9c6ead823bd5 100644 --- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm +++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm @@ -23,7 +23,6 @@ ventcrawler = VENTCRAWLER_ALWAYS mob_size = MOB_SIZE_TINY mob_biotypes = MOB_ORGANIC|MOB_BUG - gold_core_spawnable = FRIENDLY_SPAWN verb_say = "flutters" verb_ask = "flutters inquisitively" verb_exclaim = "flutters intensely" diff --git a/code/modules/mob/living/simple_animal/friendly/capybara.dm b/code/modules/mob/living/simple_animal/friendly/capybara.dm index 091bf42993f2..f1366aaa89a4 100644 --- a/code/modules/mob/living/simple_animal/friendly/capybara.dm +++ b/code/modules/mob/living/simple_animal/friendly/capybara.dm @@ -43,7 +43,6 @@ real_name = "Caspar" desc = "It's Caspar, the Capybara Captain, the Capy Cappy." gender = MALE - gold_core_spawnable = NO_SPAWN unique_pet = TRUE var/wear_hat = /obj/item/clothing/head/caphat diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 33c8bbdb3ed2..396dc82202a9 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -33,7 +33,6 @@ var/mob/living/simple_animal/mouse/movement_target ///Limits how often cats can spam chasing mice. var/emote_cooldown = 0 - gold_core_spawnable = FRIENDLY_SPAWN collar_type = "cat" held_state = "cat2" @@ -91,7 +90,6 @@ icon_living = "cat" icon_dead = "cat_dead" gender = FEMALE - gold_core_spawnable = NO_SPAWN unique_pet = TRUE var/list/family = list()//var restored from savefile, has count of each child type var/list/children = list()//Actual mob weak references of children @@ -167,7 +165,6 @@ /mob/living/simple_animal/pet/cat/Proc name = "Proc" gender = MALE - gold_core_spawnable = NO_SPAWN unique_pet = TRUE diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index bd16daa567f5..a2556f0cc943 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -23,7 +23,6 @@ ventcrawler = VENTCRAWLER_ALWAYS var/obj/item/inventory_head var/obj/item/inventory_mask - gold_core_spawnable = FRIENDLY_SPAWN /mob/living/simple_animal/crab/Life() ..() @@ -44,7 +43,6 @@ real_name = "Coffee" desc = "It's Coffee, the other pet!" gender = FEMALE - gold_core_spawnable = NO_SPAWN /mob/living/simple_animal/crab/evil name = "Evil Crab" @@ -53,7 +51,6 @@ icon_state = "evilcrab" icon_living = "evilcrab" icon_dead = "evilcrab_dead" - gold_core_spawnable = FRIENDLY_SPAWN /mob/living/simple_animal/crab/kreb name = "Kreb" @@ -62,7 +59,6 @@ icon_state = "kreb" icon_living = "kreb" icon_dead = "kreb_dead" - gold_core_spawnable = NO_SPAWN /mob/living/simple_animal/crab/evil/kreb name = "Evil Kreb" @@ -70,4 +66,3 @@ icon_state = "evilkreb" icon_living = "evilkreb" icon_dead = "evilkreb_dead" - gold_core_spawnable = NO_SPAWN diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index ebfd85f3ca23..2a47d4f0c220 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -88,7 +88,6 @@ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/corgi = 3, /obj/item/stack/sheet/animalhide/corgi = 1) childtype = list(/mob/living/simple_animal/pet/dog/corgi/puppy = 95, /mob/living/simple_animal/pet/dog/corgi/puppy/void = 5) animal_species = /mob/living/simple_animal/pet/dog - gold_core_spawnable = FRIENDLY_SPAWN collar_type = "corgi" var/obj/item/inventory_head var/obj/item/inventory_back @@ -121,7 +120,6 @@ icon_living = "pug" icon_dead = "pug_dead" butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/pug = 3) - gold_core_spawnable = FRIENDLY_SPAWN collar_type = "pug" held_state = "pug" @@ -394,7 +392,6 @@ response_disarm_simple = "bop" response_harm_continuous = "kicks" response_harm_simple = "kick" - gold_core_spawnable = NO_SPAWN unique_pet = TRUE var/age = 0 var/record_age = 1 @@ -569,7 +566,6 @@ real_name = "Lisa" gender = FEMALE desc = "She's tearing you apart." - gold_core_spawnable = NO_SPAWN unique_pet = TRUE icon_state = "lisa" icon_living = "lisa" diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 65baddfee360..cc2ab1da9ef6 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -122,7 +122,6 @@ attack_sound = 'sound/weapons/punch1.ogg' health = 50 maxHealth = 50 - gold_core_spawnable = FRIENDLY_SPAWN blood_volume = BLOOD_VOLUME_NORMAL food_type = list(/obj/item/reagent_containers/food/snacks/grown/wheat) tame_chance = 25 @@ -178,7 +177,6 @@ /mob/living/simple_animal/cow/wisdom name = "wisdom cow" desc = "Known for its wisdom, shares it with all" - gold_core_spawnable = FALSE tame_chance = 0 bonus_tame_chance = 0 speak_chance = 15 @@ -229,8 +227,6 @@ var/amount_grown = 0 pass_flags = PASSTABLE | PASSGRILLE | PASSMOB mob_size = MOB_SIZE_TINY - gold_core_spawnable = FRIENDLY_SPAWN - footstep_type = FOOTSTEP_MOB_CLAW /mob/living/simple_animal/chick/Initialize() @@ -290,7 +286,6 @@ var/list/feedMessages = list("It clucks happily.","It clucks happily.") var/list/layMessage = EGG_LAYING_MESSAGES var/list/validColors = list("brown","black","white") - gold_core_spawnable = FRIENDLY_SPAWN var/static/chicken_count = 0 footstep_type = FOOTSTEP_MOB_CLAW @@ -386,7 +381,6 @@ var/list/feedMessages = list("It clucks happily.","It clucks happily.") var/list/layMessage = EGG_LAYING_MESSAGES var/list/validColors = list("brown","black","white") - gold_core_spawnable = FRIENDLY_SPAWN var/static/chicken_count = 0 environment_smash = ENVIRONMENT_SMASH_NONE melee_damage_lower = 3 diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm index 8fc52916fa39..164e412cdd1d 100644 --- a/code/modules/mob/living/simple_animal/friendly/fox.dm +++ b/code/modules/mob/living/simple_animal/friendly/fox.dm @@ -20,7 +20,6 @@ response_disarm_simple = "gently push aside" response_harm_continuous = "kicks" response_harm_simple = "kick" - gold_core_spawnable = FRIENDLY_SPAWN held_state = "fox" footstep_type = FOOTSTEP_MOB_CLAW @@ -34,5 +33,4 @@ name = "Renault" desc = "Renault, the Captain's trustworthy fox." gender = FEMALE - gold_core_spawnable = NO_SPAWN unique_pet = TRUE diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm index c854936c7d22..e872fdfcefce 100644 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm @@ -23,7 +23,6 @@ pass_flags = PASSTABLE | PASSMOB mob_size = MOB_SIZE_SMALL mob_biotypes = MOB_ORGANIC|MOB_BEAST|MOB_REPTILE - gold_core_spawnable = FRIENDLY_SPAWN obj_damage = 0 environment_smash = ENVIRONMENT_SMASH_NONE var/static/list/edibles = typecacheof(list(/mob/living/simple_animal/butterfly, /mob/living/simple_animal/hostile/cockroach)) //list of atoms, however turfs won't affect AI, but will affect consumption. diff --git a/code/modules/mob/living/simple_animal/friendly/mothroach.dm b/code/modules/mob/living/simple_animal/friendly/mothroach.dm index 881e64d2a70f..083c576e1c17 100644 --- a/code/modules/mob/living/simple_animal/friendly/mothroach.dm +++ b/code/modules/mob/living/simple_animal/friendly/mothroach.dm @@ -17,7 +17,6 @@ health = 25 maxHealth = 25 speed = 1.25 - gold_core_spawnable = FRIENDLY_SPAWN verb_say = "flutters" verb_ask = "flutters inquisitively" verb_exclaim = "flutters loudly" diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 7b11d05bcf2c..c647b59f4d49 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -45,7 +45,6 @@ GLOBAL_VAR_INIT(mouse_killed, 0) mob_biotypes = MOB_ORGANIC|MOB_BEAST lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //WS Edit var/body_color //brown, gray and white, leave blank for random - gold_core_spawnable = FRIENDLY_SPAWN move_force = MOVE_FORCE_EXTREMELY_WEAK //WS Edit var/chew_probability = 1 var/full = FALSE //WS Edit @@ -261,7 +260,6 @@ GLOBAL_VAR_INIT(mouse_killed, 0) response_disarm_simple = "gently push aside" response_harm_continuous = "splats" response_harm_simple = "splat" - gold_core_spawnable = NO_SPAWN /obj/item/reagent_containers/food/snacks/deadmouse name = "dead mouse" diff --git a/code/modules/mob/living/simple_animal/friendly/penguin.dm b/code/modules/mob/living/simple_animal/friendly/penguin.dm index 5e39c3c8a51d..50ea0a5003cb 100644 --- a/code/modules/mob/living/simple_animal/friendly/penguin.dm +++ b/code/modules/mob/living/simple_animal/friendly/penguin.dm @@ -32,7 +32,6 @@ icon_state = "penguin" icon_living = "penguin" icon_dead = "penguin_dead" - gold_core_spawnable = FRIENDLY_SPAWN butcher_results = list(/obj/item/organ/ears/penguin = 1, /obj/item/reagent_containers/food/snacks/meat/slab/penguin = 3) /mob/living/simple_animal/pet/penguin/baby diff --git a/code/modules/mob/living/simple_animal/friendly/sloth.dm b/code/modules/mob/living/simple_animal/friendly/sloth.dm index fa5ab9c9df94..63bc7d76e5dd 100644 --- a/code/modules/mob/living/simple_animal/friendly/sloth.dm +++ b/code/modules/mob/living/simple_animal/friendly/sloth.dm @@ -18,7 +18,6 @@ response_harm_continuous = "kicks" response_harm_simple = "kick" mob_biotypes = MOB_ORGANIC|MOB_BEAST - gold_core_spawnable = FRIENDLY_SPAWN melee_damage_lower = 18 melee_damage_upper = 18 health = 50 @@ -33,7 +32,6 @@ /mob/living/simple_animal/sloth/paperwork name = "Paperwork" desc = "Cargo's pet sloth. About as useful as the rest of the techs." - gold_core_spawnable = NO_SPAWN //Cargo Sloth 2 @@ -45,4 +43,3 @@ icon_dead = "cool_sloth_dead" gender = FEMALE butcher_results = list(/obj/item/toy/spinningtoy = 1) - gold_core_spawnable = NO_SPAWN diff --git a/code/modules/mob/living/simple_animal/friendly/snake.dm b/code/modules/mob/living/simple_animal/friendly/snake.dm index d33fac8f5c00..38fb4ced3d9f 100644 --- a/code/modules/mob/living/simple_animal/friendly/snake.dm +++ b/code/modules/mob/living/simple_animal/friendly/snake.dm @@ -35,7 +35,6 @@ pass_flags = PASSTABLE | PASSMOB mob_size = MOB_SIZE_SMALL mob_biotypes = MOB_ORGANIC|MOB_BEAST|MOB_REPTILE - gold_core_spawnable = FRIENDLY_SPAWN obj_damage = 0 environment_smash = ENVIRONMENT_SMASH_NONE var/glasses_overlay_file = 'icons/mob/pets.dmi' diff --git a/code/modules/mob/living/simple_animal/friendly/turtle.dm b/code/modules/mob/living/simple_animal/friendly/turtle.dm index 97b07424d375..3ef772cc4be0 100644 --- a/code/modules/mob/living/simple_animal/friendly/turtle.dm +++ b/code/modules/mob/living/simple_animal/friendly/turtle.dm @@ -19,7 +19,6 @@ response_harm_continuous = "kicks" response_harm_simple = "kick" mob_biotypes = MOB_ORGANIC|MOB_BEAST - gold_core_spawnable = NO_SPAWN melee_damage_lower = 0.5 melee_damage_upper = 1 health = 2500 diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index ec7c76f5ca61..e7d029467f25 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -30,7 +30,6 @@ see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE unique_name = 1 - gold_core_spawnable = HOSTILE_SPAWN deathsound = 'sound/voice/hiss6.ogg' deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw..." @@ -143,7 +142,6 @@ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno = 10, /obj/item/stack/sheet/animalhide/xeno = 2) mob_size = MOB_SIZE_LARGE - gold_core_spawnable = NO_SPAWN /obj/projectile/neurotox name = "neurotoxin" @@ -169,7 +167,6 @@ friendly_verb_simple = "caress" obj_damage = 0 environment_smash = ENVIRONMENT_SMASH_NONE - gold_core_spawnable = HOSTILE_SPAWN icon_state = "maid" icon_living = "maid" icon_dead = "maid_dead" diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index b6f5c58b424e..6cf14fd33c9c 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -98,7 +98,6 @@ health = 120 maxHealth = 120 armored = TRUE - gold_core_spawnable = HOSTILE_SPAWN /mob/living/simple_animal/hostile/bear/cave name = "brown bear" diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index 676b58a98520..c56f87178e75 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -47,7 +47,6 @@ mob_size = MOB_SIZE_TINY mob_biotypes = MOB_ORGANIC|MOB_BUG movement_type = FLYING - gold_core_spawnable = FRIENDLY_SPAWN search_objects = 1 //have to find those plant trays! //Spaceborn beings don't get hurt by space diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index 67a80713d8ec..a0986111a4b1 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -43,7 +43,6 @@ faction = list("carp", "mining") movement_type = FLYING pressure_resistance = 200 - gold_core_spawnable = HOSTILE_SPAWN var/random_color = TRUE //if the carp uses random coloring var/rarechance = 1 //chance for rare color variant @@ -159,7 +158,6 @@ icon_state = "holocarp" icon_living = "holocarp" maxbodytemp = INFINITY - gold_core_spawnable = NO_SPAWN del_on_death = 1 random_color = FALSE food_type = list() @@ -229,7 +227,6 @@ desc = "A failed Syndicate experiment in weaponized space carp technology, it now serves as a lovable mascot." gender = FEMALE speak_emote = list("squeaks") - gold_core_spawnable = NO_SPAWN faction = list(ROLE_SYNDICATE) AIStatus = AI_OFF rarechance = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/cockroach.dm b/code/modules/mob/living/simple_animal/hostile/cockroach.dm index c822268a7fe2..5a931b0079b4 100644 --- a/code/modules/mob/living/simple_animal/hostile/cockroach.dm +++ b/code/modules/mob/living/simple_animal/hostile/cockroach.dm @@ -23,7 +23,6 @@ melee_damage_upper = 0 obj_damage = 0 ventcrawler = VENTCRAWLER_ALWAYS - gold_core_spawnable = FRIENDLY_SPAWN verb_say = "chitters" verb_ask = "chitters inquisitively" verb_exclaim = "chitters loudly" @@ -49,7 +48,6 @@ melee_damage_lower = 5 melee_damage_upper = 5 obj_damage = 20 - gold_core_spawnable = HOSTILE_SPAWN projectilesound = 'sound/weapons/gun/pistol/shot.ogg' projectiletype = /obj/projectile/glockroachbullet casingtype = /obj/item/ammo_casing/glockroach diff --git a/code/modules/mob/living/simple_animal/hostile/eyeballs.dm b/code/modules/mob/living/simple_animal/hostile/eyeballs.dm index 57a33c2ee02a..8a1fe372ee6a 100644 --- a/code/modules/mob/living/simple_animal/hostile/eyeballs.dm +++ b/code/modules/mob/living/simple_animal/hostile/eyeballs.dm @@ -29,7 +29,6 @@ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 maxbodytemp = 1500 - gold_core_spawnable = HOSTILE_SPAWN faction = list("spooky") del_on_death = 1 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index c9c2e131cc09..a814d67ebc86 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -31,7 +31,6 @@ minbodytemp = 0 faction = list("faithless") - gold_core_spawnable = HOSTILE_SPAWN footstep_type = FOOTSTEP_MOB_SHOE diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 5e3e8d0b34d5..71b31c9568e1 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -50,7 +50,6 @@ attack_verb_simple = "bite" attack_sound = 'sound/weapons/bite.ogg' unique_name = 1 - gold_core_spawnable = HOSTILE_SPAWN lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE footstep_type = FOOTSTEP_MOB_CLAW mob_size = MOB_SIZE_LARGE @@ -122,7 +121,6 @@ var/datum/action/innate/spider/lay_eggs/lay_eggs var/datum/action/innate/spider/set_directive/set_directive var/static/list/consumed_mobs = list() //the refs of mobs that have been consumed by nurse spiders to lay eggs - gold_core_spawnable = NO_SPAWN /mob/living/simple_animal/hostile/poison/giant_spider/nurse/Initialize() . = ..() @@ -172,7 +170,6 @@ melee_damage_upper = 20 poison_per_bite = 5 move_to_delay = 5 - gold_core_spawnable = NO_SPAWN //vipers are the rare variant of the hunter, no IMMEDIATE damage but so much poison medical care will be needed fast. /mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper @@ -205,7 +202,6 @@ move_to_delay = 8 speed = 9 status_flags = NONE - gold_core_spawnable = NO_SPAWN var/slowed_by_webs = FALSE /mob/living/simple_animal/hostile/poison/giant_spider/tarantula/Moved(atom/oldloc, dir) @@ -225,7 +221,6 @@ maxbodytemp = 1500 poison_type = /datum/reagent/consumable/frostoil color = rgb(114,228,250) - gold_core_spawnable = NO_SPAWN /mob/living/simple_animal/hostile/poison/giant_spider/nurse/ice name = "giant ice spider" @@ -242,7 +237,6 @@ maxbodytemp = 1500 poison_type = /datum/reagent/consumable/frostoil color = rgb(114,228,250) - gold_core_spawnable = NO_SPAWN /mob/living/simple_animal/hostile/poison/giant_spider/handle_automated_action() if(!..()) //AIStatus is off diff --git a/code/modules/mob/living/simple_animal/hostile/goose.dm b/code/modules/mob/living/simple_animal/hostile/goose.dm index a175bb40feca..6a11507beea1 100644 --- a/code/modules/mob/living/simple_animal/hostile/goose.dm +++ b/code/modules/mob/living/simple_animal/hostile/goose.dm @@ -29,7 +29,6 @@ speak_emote = list("honks") faction = list("neutral") attack_same = TRUE - gold_core_spawnable = HOSTILE_SPAWN var/random_retaliate = TRUE var/icon_vomit_start = "vomit_start" var/icon_vomit = "vomit" @@ -95,7 +94,6 @@ response_disarm_simple = "gently push aside" response_harm_continuous = "kicks" response_harm_simple = "kick" - gold_core_spawnable = NO_SPAWN random_retaliate = FALSE var/vomiting = FALSE var/vomitCoefficient = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm index 850ff235375f..292a9fee3658 100644 --- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm +++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm @@ -73,8 +73,6 @@ if(origin && (origin.current ? (origin.current.stat == DEAD) : origin.get_ghost())) origin.transfer_to(M) var/datum/antagonist/changeling/C = origin.has_antag_datum(/datum/antagonist/changeling) - if(!C) - C = origin.add_antag_datum(/datum/antagonist/changeling/xenobio) if(C.can_absorb_dna(owner)) C.add_new_profile(owner) diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 431229fefc44..b6d7665221af 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -120,7 +120,6 @@ maxHealth = 60 ranged = TRUE rapid = 3 - gold_core_spawnable = HOSTILE_SPAWN var/datum/action/innate/hivebot/foamwall/foam /mob/living/simple_animal/hostile/hivebot/mechanic/Initialize(mapload) diff --git a/code/modules/mob/living/simple_animal/hostile/human/survivors.dm b/code/modules/mob/living/simple_animal/hostile/human/survivors.dm index eccb38bee5bd..d03f0be88083 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/survivors.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/survivors.dm @@ -149,7 +149,7 @@ /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 5, /obj/item/melee/knife/combat = 3, - /obj/item/reagent_containers/food/snacks/rationpack = 30 + /obj/item/storage/ration/shredded_beef = 30 ) ) if (prob(15)) //mayhaps a medkit diff --git a/code/modules/mob/living/simple_animal/hostile/human/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/human/syndicate.dm index a88a79610b60..4983c53ef88d 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/syndicate.dm @@ -283,7 +283,6 @@ limb_destroyer = 1 speak_emote = list("states") bubble_icon = "syndibot" - gold_core_spawnable = HOSTILE_SPAWN del_on_death = 1 deathmessage = "is smashed into pieces!" diff --git a/code/modules/mob/living/simple_animal/hostile/killertomato.dm b/code/modules/mob/living/simple_animal/hostile/killertomato.dm index 8b1de1c2b8a4..1b1dd1d72901 100644 --- a/code/modules/mob/living/simple_animal/hostile/killertomato.dm +++ b/code/modules/mob/living/simple_animal/hostile/killertomato.dm @@ -28,4 +28,3 @@ atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 150 maxbodytemp = 500 - gold_core_spawnable = HOSTILE_SPAWN diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index ff06df9c6113..a386758b8e6c 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -659,7 +659,6 @@ GLOBAL_DATUM(blackbox, /obj/machinery/smartfridge/black_box) pass_flags = PASSTABLE | PASSGRILLE | PASSMOB ventcrawler = VENTCRAWLER_ALWAYS mob_size = MOB_SIZE_TINY - gold_core_spawnable = HOSTILE_SPAWN verb_say = "warps" verb_ask = "floats inquisitively" verb_exclaim = "zaps" diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index 0568533c1e0c..ecdc357b8da3 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -267,102 +267,5 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca icon_state = TrueGun.icon_state icon_living = TrueGun.icon_state -/mob/living/simple_animal/hostile/mimic/xenobio - health = 210 - maxHealth = 210 - attack_verb_continuous = "bites" - attack_verb_simple = "bite" - speak_emote = list("clatters") - gold_core_spawnable = HOSTILE_SPAWN - var/opened = FALSE - var/open_sound = 'sound/machines/crate_open.ogg' - var/close_sound = 'sound/machines/crate_close.ogg' - var/max_mob_size = MOB_SIZE_HUMAN - var/locked = FALSE - var/datum/action/innate/mimic/lock/lock - -/mob/living/simple_animal/hostile/mimic/xenobio/Initialize() - . = ..() - lock = new - lock.Grant(src) - -/mob/living/simple_animal/hostile/mimic/xenobio/AttackingTarget() - if(src == target) - toggle_open() - return - return ..() - -/mob/living/simple_animal/hostile/mimic/xenobio/attack_hand(mob/living/carbon/human/M) - . = ..() - if(M.a_intent != "help") - return - toggle_open() - -/mob/living/simple_animal/hostile/mimic/xenobio/death() - var/obj/structure/closet/crate/C = new(get_turf(src)) - // Put loot in crate - for(var/atom/movable/AM as anything in src) - AM.forceMove(C) - return ..() - -/mob/living/simple_animal/hostile/mimic/xenobio/CanAllowThrough(atom/movable/mover, border_dir) - . = ..() - if(istype(mover, /obj/structure/closet)) - return FALSE - -/mob/living/simple_animal/hostile/mimic/xenobio/proc/toggle_open() - if(locked) - return - if(!opened) - density = FALSE - opened = TRUE - icon_state = "crateopen" - playsound(src, open_sound, 50, TRUE) - for(var/atom/movable/AM as anything in src) - AM.forceMove(loc) - else - density = TRUE - opened = FALSE - icon_state = "crate" - playsound(src, close_sound, 50, TRUE) - for(var/atom/movable/AM in get_turf(src)) - if(insertion_allowed(AM)) - AM.forceMove(src) - -/mob/living/simple_animal/hostile/mimic/xenobio/proc/insertion_allowed(atom/movable/AM) - if(ismob(AM)) - if(!isliving(AM)) //Don't let ghosts and such get trapped in the beast. - return FALSE - var/mob/living/L = AM - if(L.anchored || L.buckled || L.incorporeal_move || L.has_buckled_mobs()) - return FALSE - if(L.mob_size > MOB_SIZE_TINY) // Tiny mobs are treated as items. - if(L.density || L.mob_size > max_mob_size) - return FALSE - L.stop_pulling() - - else if(istype(AM, /obj/structure/closet)) - return FALSE - else if(isobj(AM)) - if(AM.anchored || AM.has_buckled_mobs()) - return FALSE - else if(isitem(AM) && !HAS_TRAIT(AM, TRAIT_NODROP)) - return TRUE - else - return FALSE - return TRUE - /datum/action/innate/mimic background_icon_state = "bg_default" - -/datum/action/innate/mimic/lock - name = "Lock/Unlock" - desc = "Toggle preventing yourself from being opened or closed." - -/datum/action/innate/mimic/lock/Activate() - var/mob/living/simple_animal/hostile/mimic/xenobio/M = owner - M.locked = !M.locked - if(!M.locked) - to_chat(M, "You loosen up, allowing yourself to be opened and closed.") - else - to_chat(M, "You stiffen up, preventing anyone from opening or closing you.") diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm index b03363e956f1..d3040bc7717c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm @@ -32,7 +32,6 @@ attack_sound = 'sound/weapons/bladeslice.ogg' aggro_vision_range = 9 turns_per_move = 5 - gold_core_spawnable = HOSTILE_SPAWN loot = list(/obj/item/stack/ore/diamond{layer = ABOVE_MOB_LAYER}, /obj/item/stack/ore/diamond{layer = ABOVE_MOB_LAYER}) var/lava_drinker = TRUE @@ -229,7 +228,6 @@ robust_searching = 1 attack_same = TRUE // So we'll fight basilisks //mob_trophy = /obj/item/mob_trophy/watcher_wing - gold_core_spawnable = NO_SPAWN loot = list() butcher_results = list(/obj/item/stack/ore/diamond = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 1) lava_drinker = FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm index e4eb7122d391..fede2e8753ac 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm @@ -29,7 +29,6 @@ throw_message = "sinks in slowly, before being pushed out of " deathmessage = "stops moving as green liquid oozes from the carcass!" status_flags = CANPUSH - gold_core_spawnable = HOSTILE_SPAWN search_objects = 1 wanted_objects = list( /obj/item/stack/ore/diamond, diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm index e7257c7d39c4..a6457306cda7 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm @@ -28,7 +28,6 @@ friendly_verb_simple = "pinch" a_intent = INTENT_HELP ventcrawler = VENTCRAWLER_ALWAYS - gold_core_spawnable = FRIENDLY_SPAWN stat_attack = HARD_CRIT gender = NEUTER stop_automated_movement = FALSE @@ -102,7 +101,6 @@ /mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch name = "grublunch" wanted_objects = list() //They don't eat. - gold_core_spawnable = NO_SPAWN var/growth = 0 //Baby gutlunch diff --git a/code/modules/mob/living/simple_animal/hostile/netherworld.dm b/code/modules/mob/living/simple_animal/hostile/netherworld.dm index 25827781b4b8..8ec732defc04 100644 --- a/code/modules/mob/living/simple_animal/hostile/netherworld.dm +++ b/code/modules/mob/living/simple_animal/hostile/netherworld.dm @@ -14,7 +14,6 @@ attack_sound = 'sound/weapons/bladeslice.ogg' faction = list("nether") speak_emote = list("screams") - gold_core_spawnable = HOSTILE_SPAWN atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE @@ -158,7 +157,6 @@ icon_state = "blank-body" icon_living = "blank-body" icon_dead = "blank-dead" - gold_core_spawnable = NO_SPAWN health = 100 maxHealth = 100 melee_damage_lower = 5 diff --git a/code/modules/mob/living/simple_animal/hostile/regalrat.dm b/code/modules/mob/living/simple_animal/hostile/regalrat.dm index cad59e7369b8..f957018dfad1 100644 --- a/code/modules/mob/living/simple_animal/hostile/regalrat.dm +++ b/code/modules/mob/living/simple_animal/hostile/regalrat.dm @@ -25,7 +25,6 @@ attack_sound = 'sound/weapons/punch1.ogg' ventcrawler = VENTCRAWLER_ALWAYS unique_name = TRUE - gold_core_spawnable = HOSTILE_SPAWN faction = list("rat") var/datum/action/cooldown/coffer var/datum/action/cooldown/riot diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm index e8bee6661a5a..6c23f5cefe23 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm @@ -28,7 +28,6 @@ butcher_results = list(/obj/item/reagent_containers/food/snacks/nugget = 1) pass_flags = PASSTABLE | PASSGRILLE | PASSMOB mob_size = MOB_SIZE_TINY - gold_core_spawnable = FRIENDLY_SPAWN var/stepped_sound = 'sound/effects/huuu.ogg' /mob/living/simple_animal/hostile/retaliate/frog/Initialize() diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm index 8b9d0d666bfb..d72cdf215e22 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm @@ -30,7 +30,6 @@ maxbodytemp = 1500 movement_type = FLYING pressure_resistance = 300 - gold_core_spawnable = NO_SPAWN //too spooky for science light_system = MOVABLE_LIGHT light_range = 1 // same glowing as visible player ghosts light_power = 2 diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index bac0b4b1d51b..d5b56f758cb1 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -49,7 +49,6 @@ move_force = MOVE_FORCE_EXTREMELY_STRONG move_resist = MOVE_FORCE_EXTREMELY_STRONG pull_force = MOVE_FORCE_EXTREMELY_STRONG - gold_core_spawnable = HOSTILE_SPAWN var/cannot_be_seen = 1 var/mob/living/creator = null diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index 41efc6993d9d..c040a2221d0b 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -40,7 +40,6 @@ deathmessage = "is hacked into pieces!" loot = list(/obj/item/stack/sheet/mineral/wood) - gold_core_spawnable = HOSTILE_SPAWN del_on_death = 1 var/is_tree = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm index b77436c09c89..be3242ed5252 100644 --- a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm +++ b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm @@ -32,7 +32,6 @@ aggro_vision_range = 9 mob_size = MOB_SIZE_SMALL environment_smash = ENVIRONMENT_SMASH_NONE - gold_core_spawnable = HOSTILE_SPAWN var/wumbo = 0 var/inflate_cooldown = 0 var/datum/action/innate/fugu/expand/E diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index bc22f78ae7a3..b39793d9a414 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -64,7 +64,6 @@ friendly_verb_simple = "groom" mob_size = MOB_SIZE_SMALL movement_type = FLYING - gold_core_spawnable = FRIENDLY_SPAWN var/parrot_damage_upper = 10 var/parrot_state = PARROT_WANDER //Hunt for a perch when created @@ -904,7 +903,6 @@ name = "Polly" desc = "Polly the Parrot. An expert on quantum cracker theory." speak = list("Polly wanna cracker!", ":e Check the crystal, you chucklefucks!",":e Wire the solars, you lazy bums!",":e WHO TOOK THE DAMN HARDSUITS?",":e OH GOD ITS ABOUT TO DELAMINATE CALL THE SHUTTLE") - gold_core_spawnable = NO_SPAWN speak_chance = 3 var/memory_saved = FALSE var/rounds_survived = 0 diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 55ea24c81d7d..35e0e535c96d 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -98,8 +98,6 @@ var/obj/item/card/id/access_card = null ///In the event that you want to have a buffing effect on the mob, but don't want it to stack with other effects, any outside force that applies a buff to a simple mob should at least set this to 1, so we have something to check against. var/buffed = 0 - ///If the mob can be spawned with a gold slime core. HOSTILE_SPAWN are spawned with plasma, FRIENDLY_SPAWN are spawned with blood. - var/gold_core_spawnable = NO_SPAWN var/datum/component/spawner/nest diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index cb4b76983563..cafb6cb77bd5 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -43,7 +43,6 @@ // for the sake of cleanliness, though, here they are. status_flags = CANUNCONSCIOUS|CANPUSH - var/cores = 1 // the number of /obj/item/slime_extract's the slime has left inside var/mutation_chance = 30 // Chance of mutating, should be between 25 and 35 var/powerlevel = 0 // 1-10 controls how much electricity they are generating @@ -71,7 +70,6 @@ ///////////TIME FOR SUBSPECIES var/colour = "grey" - var/coretype = /obj/item/slime_extract/grey var/list/slime_mutation[4] var/static/list/slime_colours = list("rainbow", "grey", "purple", "metal", "orange", @@ -79,13 +77,6 @@ "gold", "green", "adamantine", "oil", "light pink", "bluespace", "cerulean", "sepia", "black", "pyrite") - ///////////CORE-CROSSING CODE - - var/effectmod //What core modification is being used. - var/crossbreed_modifier = 1 // modifies how many extracts are needed - var/applied = 0 //How many extracts of the modtype have been applied. - - /mob/living/simple_animal/slime/Initialize(mapload, new_colour="grey", new_is_adult=FALSE) var/datum/action/innate/slime/feed/F = new F.Grant(src) @@ -119,8 +110,6 @@ colour = new_colour update_name() slime_mutation = mutation_table(colour) - var/sanitizedcolour = replacetext(colour, " ", "") - coretype = text2path("/obj/item/slime_extract/[sanitizedcolour]") regenerate_icons() /mob/living/simple_animal/slime/update_name() @@ -354,50 +343,9 @@ force_effect = round(W.force/2) if(prob(10 + force_effect)) discipline_slime(user) - if(istype(W, /obj/item/storage/bag/bio)) - var/obj/item/storage/P = W - if(!effectmod) - to_chat(user, "The slime is not currently being mutated.") - return - var/hasOutput = FALSE //Have we outputted text? - var/hasFound = FALSE //Have we found an extract to be added? - for(var/obj/item/slime_extract/S in P.contents) - if(S.effectmod == effectmod) - SEND_SIGNAL(P, COMSIG_TRY_STORAGE_TAKE, S, get_turf(src), TRUE) - qdel(S) - applied++ - hasFound = TRUE - if(applied >= (SLIME_EXTRACT_CROSSING_REQUIRED * crossbreed_modifier)) - to_chat(user, "You feed the slime as many of the extracts from the bag as you can, and it mutates!") - playsound(src, 'sound/effects/attackblob.ogg', 50, TRUE) - spawn_corecross() - hasOutput = TRUE - break - if(!hasOutput) - if(!hasFound) - to_chat(user, "There are no extracts in the bag that this slime will accept!") - else - to_chat(user, "You feed the slime some extracts from the bag.") - playsound(src, 'sound/effects/attackblob.ogg', 50, TRUE) return ..() -/mob/living/simple_animal/slime/proc/spawn_corecross() - var/static/list/crossbreeds = subtypesof(/obj/item/slimecross) - visible_message("[src] shudders, its mutated core consuming the rest of its body!") - playsound(src, 'sound/magic/smoke.ogg', 50, TRUE) - var/crosspath - for(var/X in crossbreeds) - var/obj/item/slimecross/S = X - if(initial(S.colour) == colour && initial(S.effect) == effectmod) - crosspath = S - break - if(crosspath) - new crosspath(loc) - else - visible_message("The mutated core shudders, and collapses into a puddle, unable to maintain its form.") - qdel(src) - /mob/living/simple_animal/slime/proc/apply_water() adjustBruteLoss(rand(15,20)) if(!client) diff --git a/code/modules/movespeed/modifiers/status_effects.dm b/code/modules/movespeed/modifiers/status_effects.dm deleted file mode 100644 index 25cbcd42e124..000000000000 --- a/code/modules/movespeed/modifiers/status_effects.dm +++ /dev/null @@ -1,17 +0,0 @@ -/datum/movespeed_modifier/status_effect/bloodchill - multiplicative_slowdown = 3 - -/datum/movespeed_modifier/status_effect/bonechill - multiplicative_slowdown = 3 - -/datum/movespeed_modifier/status_effect/lightpink - multiplicative_slowdown = -0.25 - blacklisted_movetypes = (FLYING|FLOATING) - -/datum/movespeed_modifier/status_effect/tarfoot - multiplicative_slowdown = 0.5 - blacklisted_movetypes = (FLYING|FLOATING) - -/datum/movespeed_modifier/status_effect/sepia - variable = TRUE - blacklisted_movetypes = (FLYING|FLOATING) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index b1847513a941..74f6d8f3fe6f 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -342,18 +342,6 @@ custom_materials = null grown_battery = TRUE //it has the overlays for wires -/obj/item/stock_parts/cell/high/slime - name = "charged slime core" - desc = "A yellow slime core infused with plasma, it crackles with power." - icon = 'icons/mob/slimes.dmi' - icon_state = "yellow slime extract" - custom_materials = null - rating = 5 //self-recharge makes these desirable - self_recharge = 1 // Infused slime cores self-recharge, over time - -/*Hypercharged slime cell - located in /code/modules/research/xenobiology/crossbreeding/_misc.dm -/obj/item/stock_parts/cell/high/slime/hypercharged */ - /obj/item/stock_parts/cell/emproof name = "\improper EMP-proof cell" desc = "An EMP-proof cell." diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 49765fd6747b..a442ee2a11c8 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -519,11 +519,6 @@ if(!C.required_other) matching_other = 1 - else if(istype(cached_my_atom, /obj/item/slime_extract)) - var/obj/item/slime_extract/M = cached_my_atom - - if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this - matching_other = 1 else if(!C.required_container) matching_container = 1 @@ -571,15 +566,6 @@ for(var/mob/M in seen) to_chat(M, "[iconhtml] [selected_reaction.mix_message]") - if(istype(cached_my_atom, /obj/item/slime_extract)) - var/obj/item/slime_extract/ME2 = my_atom - ME2.Uses-- - if(ME2.Uses <= 0) // give the notification that the slime core is dead - for(var/mob/M in seen) - to_chat(M, "[iconhtml] \The [my_atom]'s power is consumed in the reaction.") - ME2.name = "used slime extract" - ME2.desc = "This extract has been used up." - selected_reaction.on_reaction(src, multiplier) reaction_occurred = 1 diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index 313fb7475e00..14ded3b571f9 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -299,10 +299,6 @@ shock_timer = 0 //immune to shocks M.AdjustAllImmobility(-40) M.adjustStaminaLoss(-2, 0) - if(isluminescent(M)) - var/mob/living/carbon/human/H = M - var/datum/species/jelly/luminescent/L = H.dna.species - L.extract_cooldown = max(0, L.extract_cooldown - 20) ..() /datum/reagent/firefighting_foam diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index 851a9e38a267..d5e74a6766bb 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -18,38 +18,6 @@ return //I recommend you set the result amount to the total volume of all components. -/datum/chemical_reaction/proc/chemical_mob_spawn(datum/reagents/holder, amount_to_spawn, reaction_name, mob_class = HOSTILE_SPAWN, mob_faction = "chemicalsummon", random = TRUE) - if(holder && holder.my_atom) - var/atom/A = holder.my_atom - var/turf/T = get_turf(A) - var/message = "Mobs have been spawned in [ADMIN_VERBOSEJMP(T)] by a [reaction_name] reaction." - message += " (
VV)" - - var/mob/M = get(A, /mob) - if(M) - message += " - Carried By: [ADMIN_LOOKUPFLW(M)]" - else - message += " - Last Fingerprint: [(A.fingerprintslast ? A.fingerprintslast : "N/A")]" - - message_admins(message, 0, 1) - log_game("[reaction_name] chemical mob spawn reaction occuring at [AREACOORD(T)] carried by [key_name(M)] with last fingerprint [A.fingerprintslast? A.fingerprintslast : "N/A"]") - - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, TRUE) - - for(var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null)) - C.flash_act() - - for(var/i in 1 to amount_to_spawn) - var/mob/living/simple_animal/S - if(random) - S = create_random_mob(get_turf(holder.my_atom), mob_class) - else - S = new mob_class(get_turf(holder.my_atom))//Spawn our specific mob_class - S.faction |= mob_faction - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(S, pick(NORTH,SOUTH,EAST,WEST)) - ///Simulates a vortex that moves nearby movable atoms towards or away from the turf T. Range also determines the strength of the effect. High values cause nearby objects to be thrown. /proc/goonchem_vortex(turf/T, setting_type, range) for(var/atom/movable/X in orange(range, T)) diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index d9b6b782115e..c4eaf50e45d0 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -435,18 +435,6 @@ results = list(/datum/reagent/colorful_reagent = 5) required_reagents = list(/datum/reagent/stable_plasma = 1, /datum/reagent/uranium/radium = 1, /datum/reagent/drug/space_drugs = 1, /datum/reagent/medicine/cryoxadone = 1, /datum/reagent/consumable/triple_citrus = 1) -/datum/chemical_reaction/life - required_reagents = list(/datum/reagent/medicine/strange_reagent = 1, /datum/reagent/medicine/synthflesh = 1, /datum/reagent/blood = 1) - -/datum/chemical_reaction/life/on_reaction(datum/reagents/holder, created_volume) - chemical_mob_spawn(holder, rand(1, round(created_volume, 1)), "Life (hostile)") //defaults to HOSTILE_SPAWN - -/datum/chemical_reaction/life_friendly - required_reagents = list(/datum/reagent/medicine/strange_reagent = 1, /datum/reagent/medicine/synthflesh = 1, /datum/reagent/consumable/sugar = 1) - -/datum/chemical_reaction/life_friendly/on_reaction(datum/reagents/holder, created_volume) - chemical_mob_spawn(holder, rand(1, round(created_volume, 1)), "Life (friendly)", FRIENDLY_SPAWN) - /datum/chemical_reaction/corgium required_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent = 1, /datum/reagent/medicine/strange_reagent = 1, /datum/reagent/blood = 1) required_temp = 374 @@ -560,14 +548,6 @@ required_container = /obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom mix_message = "The mushroom's insides bubble and pop and it becomes very limp." -/datum/chemical_reaction/slime_extractification - required_reagents = list(/datum/reagent/toxin/slimejelly = 30, /datum/reagent/consumable/frostoil = 5, /datum/reagent/toxin/plasma = 5) - mix_message = "The mixture condenses into a ball." - -/datum/chemical_reaction/slime_extractification/on_reaction(datum/reagents/holder, created_volume) - var/location = get_turf(holder.my_atom) - new /obj/item/slime_extract/grey(location) - /datum/chemical_reaction/metalgen_imprint required_reagents = list(/datum/reagent/metalgen = 1, /datum/reagent/liquid_dark_matter = 1) results = list(/datum/reagent/metalgen = 1) diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm deleted file mode 100644 index 7429db4c1dec..000000000000 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ /dev/null @@ -1,595 +0,0 @@ - -/datum/chemical_reaction/slime - var/deletes_extract = TRUE - -/datum/chemical_reaction/slime/on_reaction(datum/reagents/holder) - use_slime_core(holder) - -/datum/chemical_reaction/slime/proc/use_slime_core(datum/reagents/holder) - SSblackbox.record_feedback("tally", "slime_cores_used", 1, "type") - if(deletes_extract) - delete_extract(holder) - -/datum/chemical_reaction/slime/proc/delete_extract(datum/reagents/holder) - var/obj/item/slime_extract/M = holder.my_atom - if(M.Uses <= 0 && !results.len) //if the slime doesn't output chemicals - qdel(M) - -//Grey -/datum/chemical_reaction/slime/slimespawn - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/grey - required_other = TRUE - -/datum/chemical_reaction/slime/slimespawn/on_reaction(datum/reagents/holder) - var/mob/living/simple_animal/slime/S = new(get_turf(holder.my_atom), "grey") - S.visible_message("Infused with plasma, the core begins to quiver and grow, and a new baby slime emerges from it!") - ..() - -/datum/chemical_reaction/slime/slimeinaprov - results = list(/datum/reagent/medicine/epinephrine = 3) - required_reagents = list(/datum/reagent/water = 5) - required_other = TRUE - required_container = /obj/item/slime_extract/grey - -/datum/chemical_reaction/slime/slimemonkey - required_reagents = list(/datum/reagent/blood = 1) - required_container = /obj/item/slime_extract/grey - required_other = TRUE - -/datum/chemical_reaction/slime/slimemonkey/on_reaction(datum/reagents/holder) - for(var/i in 1 to 3) - new /obj/item/reagent_containers/food/snacks/monkeycube(get_turf(holder.my_atom)) - ..() - -//Green -/datum/chemical_reaction/slime/slimemutate - results = list(/datum/reagent/consumable/berryjuice = 1) // Removal of mutation toxins. This used to be jellyperson toxin, but is now just jelly. - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_other = TRUE - required_container = /obj/item/slime_extract/green - -/datum/chemical_reaction/slime/unstabletoxin - results = list(/datum/reagent/toxin/mutagen = 1) // Removal of mutation toxins. This used to be unstable toxin, but is now unstable mutagen. - required_reagents = list(/datum/reagent/uranium/radium = 1) - required_other = TRUE - required_container = /obj/item/slime_extract/green - - -//Metal -/datum/chemical_reaction/slime/slimemetal - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/metal - required_other = TRUE - -/datum/chemical_reaction/slime/slimemetal/on_reaction(datum/reagents/holder) - var/turf/location = get_turf(holder.my_atom) - new /obj/item/stack/sheet/plasteel(location, 5) - new /obj/item/stack/sheet/metal(location, 15) - ..() - -/datum/chemical_reaction/slime/slimeglass - required_reagents = list(/datum/reagent/water = 1) - required_container = /obj/item/slime_extract/metal - required_other = TRUE - -/datum/chemical_reaction/slime/slimeglass/on_reaction(datum/reagents/holder) - var/turf/location = get_turf(holder.my_atom) - new /obj/item/stack/sheet/rglass(location, 5) - new /obj/item/stack/sheet/glass(location, 15) - ..() - -//Gold -/datum/chemical_reaction/slime/slimemobspawn - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/gold - required_other = TRUE - deletes_extract = FALSE //we do delete, but we don't do so instantly - -/datum/chemical_reaction/slime/slimemobspawn/on_reaction(datum/reagents/holder) - var/turf/T = get_turf(holder.my_atom) - summon_mobs(holder, T) - var/obj/item/slime_extract/M = holder.my_atom - deltimer(M.qdel_timer) - ..() - M.qdel_timer = addtimer(CALLBACK(src, PROC_REF(delete_extract), holder), 55, TIMER_STOPPABLE) - -/datum/chemical_reaction/slime/slimemobspawn/proc/summon_mobs(datum/reagents/holder, turf/T) - T.visible_message("The slime extract begins to vibrate violently!") - addtimer(CALLBACK(src, PROC_REF(chemical_mob_spawn), holder, 5, "Gold Slime", HOSTILE_SPAWN), 50) - -/datum/chemical_reaction/slime/slimemobspawn/lesser - required_reagents = list(/datum/reagent/blood = 1) - -/datum/chemical_reaction/slime/slimemobspawn/lesser/summon_mobs(datum/reagents/holder, turf/T) - T.visible_message("The slime extract begins to vibrate violently!") - addtimer(CALLBACK(src, PROC_REF(chemical_mob_spawn), holder, 3, "Lesser Gold Slime", HOSTILE_SPAWN, "neutral"), 50) - -/datum/chemical_reaction/slime/slimemobspawn/friendly - required_reagents = list(/datum/reagent/water = 1) - -/datum/chemical_reaction/slime/slimemobspawn/friendly/summon_mobs(datum/reagents/holder, turf/T) - T.visible_message("The slime extract begins to vibrate adorably!") - addtimer(CALLBACK(src, PROC_REF(chemical_mob_spawn), holder, 1, "Friendly Gold Slime", FRIENDLY_SPAWN, "neutral"), 50) - -/datum/chemical_reaction/slime/slimemobspawn/spider - required_reagents = list(/datum/reagent/spider_extract = 1) - -/datum/chemical_reaction/slime/slimemobspawn/spider/summon_mobs(datum/reagents/holder, turf/T) - T.visible_message("The slime extract begins to vibrate crikey-ingly!") - addtimer(CALLBACK(src, PROC_REF(chemical_mob_spawn), holder, 3, "Traitor Spider Slime", /mob/living/simple_animal/hostile/poison/giant_spider/nurse/midwife, "neutral", FALSE), 50) - - -//Silver -/datum/chemical_reaction/slime/slimebork - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/silver - required_other = TRUE - -/datum/chemical_reaction/slime/slimebork/on_reaction(datum/reagents/holder) - //BORK BORK BORK - var/turf/T = get_turf(holder.my_atom) - - playsound(T, 'sound/effects/phasein.ogg', 100, TRUE) - - for(var/mob/living/carbon/C in viewers(T, null)) - C.flash_act() - - for(var/i in 1 to 4 + rand(1,2)) - var/chosen = getbork() - var/obj/B = new chosen(T) - if(prob(5))//Fry it! - var/obj/item/food/deepfryholder/fried - fried = new(T, B) - fried.fry() // actually set the name and colour it - B = fried - if(prob(50)) - for(var/j in 1 to rand(1, 3)) - step(B, pick(NORTH,SOUTH,EAST,WEST)) - ..() - -/datum/chemical_reaction/slime/slimebork/proc/getbork() - return get_random_food() - -/datum/chemical_reaction/slime/slimebork/drinks - required_reagents = list(/datum/reagent/water = 1) - -/datum/chemical_reaction/slime/slimebork/drinks/getbork() - return get_random_drink() - -//Blue -/datum/chemical_reaction/slime/slimefrost - results = list(/datum/reagent/consumable/frostoil = 10) - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/blue - required_other = TRUE - -/datum/chemical_reaction/slime/slimestabilizer - required_reagents = list(/datum/reagent/blood = 1) - required_container = /obj/item/slime_extract/blue - required_other = TRUE - -/datum/chemical_reaction/slime/slimestabilizer/on_reaction(datum/reagents/holder) - new /obj/item/slimepotion/slime/stabilizer(get_turf(holder.my_atom)) - ..() - -/datum/chemical_reaction/slime/slimefoam - required_reagents = list(/datum/reagent/water = 5) - required_container = /obj/item/slime_extract/blue - required_other = TRUE - -/datum/chemical_reaction/slime/slimefoam/on_reaction(datum/reagents/holder) - holder.create_foam(/datum/effect_system/foam_spread,80, "[src] spews out foam!") - -//Dark Blue -/datum/chemical_reaction/slime/slimefreeze - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/darkblue - required_other = TRUE - deletes_extract = FALSE - -/datum/chemical_reaction/slime/slimefreeze/on_reaction(datum/reagents/holder) - var/turf/T = get_turf(holder.my_atom) - T.visible_message("The slime extract starts to feel extremely cold!") - addtimer(CALLBACK(src, PROC_REF(freeze), holder), 50) - var/obj/item/slime_extract/M = holder.my_atom - deltimer(M.qdel_timer) - ..() - M.qdel_timer = addtimer(CALLBACK(src, PROC_REF(delete_extract), holder), 55, TIMER_STOPPABLE) - -/datum/chemical_reaction/slime/slimefreeze/proc/freeze(datum/reagents/holder) - if(holder && holder.my_atom) - var/turf/open/T = get_turf(holder.my_atom) - if(istype(T)) - T.atmos_spawn_air("n2=50;TEMP=2.7") - -/datum/chemical_reaction/slime/slimefireproof - required_reagents = list(/datum/reagent/water = 1) - required_container = /obj/item/slime_extract/darkblue - required_other = TRUE - -/datum/chemical_reaction/slime/slimefireproof/on_reaction(datum/reagents/holder) - new /obj/item/slimepotion/fireproof(get_turf(holder.my_atom)) - ..() - -//Orange -/datum/chemical_reaction/slime/slimecasp - results = list(/datum/reagent/consumable/capsaicin = 10) - required_reagents = list(/datum/reagent/blood = 1) - required_container = /obj/item/slime_extract/orange - required_other = TRUE - -/datum/chemical_reaction/slime/slimefire - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/orange - required_other = TRUE - deletes_extract = FALSE - -/datum/chemical_reaction/slime/slimefire/on_reaction(datum/reagents/holder) - var/turf/T = get_turf(holder.my_atom) - T.visible_message("The slime extract begins to vibrate adorably!") - addtimer(CALLBACK(src, PROC_REF(slime_burn), holder), 50) - var/obj/item/slime_extract/M = holder.my_atom - deltimer(M.qdel_timer) - ..() - M.qdel_timer = addtimer(CALLBACK(src, PROC_REF(delete_extract), holder), 55, TIMER_STOPPABLE) - -/datum/chemical_reaction/slime/slimefire/proc/slime_burn(datum/reagents/holder) - if(holder && holder.my_atom) - var/turf/open/T = get_turf(holder.my_atom) - if(istype(T)) - T.atmos_spawn_air("plasma=50;TEMP=1000") - - -/datum/chemical_reaction/slime/slimesmoke - results = list(/datum/reagent/phosphorus = 10, /datum/reagent/potassium = 10, /datum/reagent/consumable/sugar = 10) - required_reagents = list(/datum/reagent/water = 5) - required_container = /obj/item/slime_extract/orange - required_other = TRUE - -//Yellow -/datum/chemical_reaction/slime/slimeoverload - required_reagents = list(/datum/reagent/blood = 1) - required_container = /obj/item/slime_extract/yellow - required_other = TRUE - -/datum/chemical_reaction/slime/slimeoverload/on_reaction(datum/reagents/holder, created_volume) - empulse(get_turf(holder.my_atom), 3, 7) - ..() - -/datum/chemical_reaction/slime/slimecell - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/yellow - required_other = TRUE - -/datum/chemical_reaction/slime/slimecell/on_reaction(datum/reagents/holder, created_volume) - new /obj/item/stock_parts/cell/high/slime(get_turf(holder.my_atom)) - ..() - -/datum/chemical_reaction/slime/slimeglow - required_reagents = list(/datum/reagent/water = 1) - required_container = /obj/item/slime_extract/yellow - required_other = TRUE - -/datum/chemical_reaction/slime/slimeglow/on_reaction(datum/reagents/holder) - var/turf/T = get_turf(holder.my_atom) - T.visible_message("The slime begins to emit a soft light. Squeezing it will cause it to grow brightly.") - new /obj/item/flashlight/slime(T) - ..() - -//Purple -/datum/chemical_reaction/slime/slimepsteroid - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/purple - required_other = TRUE - -/datum/chemical_reaction/slime/slimepsteroid/on_reaction(datum/reagents/holder) - new /obj/item/slimepotion/slime/steroid(get_turf(holder.my_atom)) - ..() - -/datum/chemical_reaction/slime/slimeregen - results = list(/datum/reagent/medicine/regen_jelly = 5) - required_reagents = list(/datum/reagent/blood = 1) - required_container = /obj/item/slime_extract/purple - required_other = TRUE - -//Dark Purple -/datum/chemical_reaction/slime/slimeplasma - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/darkpurple - required_other = TRUE - -/datum/chemical_reaction/slime/slimeplasma/on_reaction(datum/reagents/holder) - new /obj/item/stack/sheet/mineral/plasma(get_turf(holder.my_atom), 3) - ..() - -//Red -/datum/chemical_reaction/slime/slimemutator - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/red - required_other = TRUE - -/datum/chemical_reaction/slime/slimemutator/on_reaction(datum/reagents/holder) - new /obj/item/slimepotion/slime/mutator(get_turf(holder.my_atom)) - ..() - -/datum/chemical_reaction/slime/slimebloodlust - required_reagents = list(/datum/reagent/blood = 1) - required_container = /obj/item/slime_extract/red - required_other = TRUE - -/datum/chemical_reaction/slime/slimebloodlust/on_reaction(datum/reagents/holder) - for(var/mob/living/simple_animal/slime/slime in viewers(get_turf(holder.my_atom), null)) - if(slime.docile) //Undoes docility, but doesn't make rabid. - slime.visible_message("[slime] forgets its training, becoming wild once again!") - slime.docile = FALSE - slime.update_name() - continue - slime.rabid = 1 - slime.visible_message("The [slime] is driven into a frenzy!") - ..() - -/datum/chemical_reaction/slime/slimespeed - required_reagents = list(/datum/reagent/water = 1) - required_container = /obj/item/slime_extract/red - required_other = TRUE - -/datum/chemical_reaction/slime/slimespeed/on_reaction(datum/reagents/holder) - new /obj/item/slimepotion/speed(get_turf(holder.my_atom)) - ..() - -//Pink -/datum/chemical_reaction/slime/docility - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/pink - required_other = TRUE - -/datum/chemical_reaction/slime/docility/on_reaction(datum/reagents/holder) - new /obj/item/slimepotion/slime/docility(get_turf(holder.my_atom)) - ..() - -/datum/chemical_reaction/slime/gender - required_reagents = list(/datum/reagent/blood = 1) - required_container = /obj/item/slime_extract/pink - required_other = TRUE - -/datum/chemical_reaction/slime/gender/on_reaction(datum/reagents/holder) - new /obj/item/slimepotion/genderchange(get_turf(holder.my_atom)) - ..() - -//Black -/datum/chemical_reaction/slime/slimemutate2 - results = list(/datum/reagent/aslimetoxin = 1) - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_other = TRUE - required_container = /obj/item/slime_extract/black - -//Oil -/datum/chemical_reaction/slime/slimeexplosion - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/oil - required_other = TRUE - deletes_extract = FALSE - -/datum/chemical_reaction/slime/slimeexplosion/on_reaction(datum/reagents/holder) - var/turf/T = get_turf(holder.my_atom) - var/lastkey = holder.my_atom.fingerprintslast - var/touch_msg = "N/A" - if(lastkey) - var/mob/toucher = get_mob_by_key(lastkey) - touch_msg = "[ADMIN_LOOKUPFLW(toucher)]." - message_admins("Slime Explosion reaction started at [ADMIN_VERBOSEJMP(T)]. Last Fingerprint: [touch_msg]") - log_game("Slime Explosion reaction started at [AREACOORD(T)]. Last Fingerprint: [lastkey ? lastkey : "N/A"].") - T.visible_message("The slime extract begins to vibrate violently !") - addtimer(CALLBACK(src, PROC_REF(boom), holder), 50) - var/obj/item/slime_extract/M = holder.my_atom - deltimer(M.qdel_timer) - ..() - M.qdel_timer = addtimer(CALLBACK(src, PROC_REF(delete_extract), holder), 55, TIMER_STOPPABLE) - -/datum/chemical_reaction/slime/slimeexplosion/proc/boom(datum/reagents/holder) - if(holder && holder.my_atom) - explosion(get_turf(holder.my_atom), 1 ,3, 6) - - -/datum/chemical_reaction/slime/slimecornoil - results = list(/datum/reagent/consumable/cornoil = 10) - required_reagents = list(/datum/reagent/blood = 1) - required_container = /obj/item/slime_extract/oil - required_other = TRUE - -//Light Pink -/datum/chemical_reaction/slime/slimepotion2 - required_container = /obj/item/slime_extract/lightpink - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_other = TRUE - -/datum/chemical_reaction/slime/slimepotion2/on_reaction(datum/reagents/holder) - new /obj/item/slimepotion/slime/sentience(get_turf(holder.my_atom)) - ..() - -/datum/chemical_reaction/slime/renaming - required_container = /obj/item/slime_extract/lightpink - required_reagents = list(/datum/reagent/water = 1) - required_other = TRUE - -/datum/chemical_reaction/slime/renaming/on_reaction(datum/reagents/holder) - new /obj/item/slimepotion/slime/renaming(holder.my_atom.drop_location()) - ..() - - -//Adamantine -/datum/chemical_reaction/slime/adamantine - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/adamantine - required_other = TRUE - -/datum/chemical_reaction/slime/adamantine/on_reaction(datum/reagents/holder) - new /obj/item/stack/sheet/mineral/hidden/hellstone(get_turf(holder.my_atom)) - ..() - -//Bluespace -/datum/chemical_reaction/slime/slimefloor2 - required_reagents = list(/datum/reagent/blood = 1) - required_container = /obj/item/slime_extract/bluespace - required_other = TRUE - -/datum/chemical_reaction/slime/slimefloor2/on_reaction(datum/reagents/holder, created_volume) - new /obj/item/stack/tile/bluespace(get_turf(holder.my_atom), 25) - ..() - - -/datum/chemical_reaction/slime/slimecrystal - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/bluespace - required_other = TRUE - -/datum/chemical_reaction/slime/slimecrystal/on_reaction(datum/reagents/holder, created_volume) - var/obj/item/stack/ore/bluespace_crystal/BC = new (get_turf(holder.my_atom)) - BC.visible_message("The [BC.name] appears out of thin air!") - ..() - -/datum/chemical_reaction/slime/slimeradio - required_reagents = list(/datum/reagent/water = 1) - required_container = /obj/item/slime_extract/bluespace - required_other = TRUE - -/datum/chemical_reaction/slime/slimeradio/on_reaction(datum/reagents/holder, created_volume) - new /obj/item/slimepotion/slime/slimeradio(get_turf(holder.my_atom)) - ..() - -//Cerulean -/datum/chemical_reaction/slime/slimepsteroid2 - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/cerulean - required_other = TRUE - -/datum/chemical_reaction/slime/slimepsteroid2/on_reaction(datum/reagents/holder) - new /obj/item/slimepotion/enhancer(get_turf(holder.my_atom)) - ..() - -/datum/chemical_reaction/slime/slime_territory - required_reagents = list(/datum/reagent/blood = 1) - required_container = /obj/item/slime_extract/cerulean - required_other = TRUE - -/datum/chemical_reaction/slime/slime_territory/on_reaction(datum/reagents/holder) - new /obj/item/areaeditor/blueprints/slime(get_turf(holder.my_atom)) - ..() - -//Sepia -/datum/chemical_reaction/slime/slimestop - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/sepia - required_other = TRUE - -/datum/chemical_reaction/slime/slimestop/on_reaction(datum/reagents/holder) - addtimer(CALLBACK(src, PROC_REF(slime_stop), holder), 5 SECONDS) - -/datum/chemical_reaction/slime/slimestop/proc/slime_stop(datum/reagents/holder) - var/obj/item/slime_extract/sepia/extract = holder.my_atom - var/turf/T = get_turf(holder.my_atom) - new /obj/effect/timestop(T, null, null, null) - if(istype(extract)) - if(extract.Uses > 0) - var/mob/lastheld = get_mob_by_key(holder.my_atom.fingerprintslast) - if(lastheld && !lastheld.equip_to_slot_if_possible(extract, ITEM_SLOT_HANDS, disable_warning = TRUE)) - extract.forceMove(get_turf(lastheld)) - use_slime_core(holder) - -/datum/chemical_reaction/slime/slimecamera - required_reagents = list(/datum/reagent/water = 1) - required_container = /obj/item/slime_extract/sepia - required_other = TRUE - -/datum/chemical_reaction/slime/slimecamera/on_reaction(datum/reagents/holder) - new /obj/item/camera(get_turf(holder.my_atom)) - new /obj/item/camera_film(get_turf(holder.my_atom)) - ..() - -/datum/chemical_reaction/slime/slimefloor - required_reagents = list(/datum/reagent/blood = 1) - required_container = /obj/item/slime_extract/sepia - required_other = TRUE - -/datum/chemical_reaction/slime/slimefloor/on_reaction(datum/reagents/holder) - new /obj/item/stack/tile/sepia(get_turf(holder.my_atom), 25) - ..() - -//Pyrite -/datum/chemical_reaction/slime/slimepaint - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/pyrite - required_other = TRUE - -/datum/chemical_reaction/slime/slimepaint/on_reaction(datum/reagents/holder) - var/chosen = pick(subtypesof(/obj/item/paint)) - new chosen(get_turf(holder.my_atom)) - ..() - -/datum/chemical_reaction/slime/slimecrayon - required_reagents = list(/datum/reagent/blood = 1) - required_container = /obj/item/slime_extract/pyrite - required_other = TRUE - -/datum/chemical_reaction/slime/slimecrayon/on_reaction(datum/reagents/holder) - var/chosen = pick(difflist(subtypesof(/obj/item/toy/crayon),typesof(/obj/item/toy/crayon/spraycan))) - new chosen(get_turf(holder.my_atom)) - ..() - -//Rainbow :o) -/datum/chemical_reaction/slime/slimeRNG - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_other = TRUE - required_container = /obj/item/slime_extract/rainbow - -/datum/chemical_reaction/slime/slimeRNG/on_reaction(datum/reagents/holder, created_volume) - if(created_volume >= 5) - var/obj/item/grenade/clusterbuster/slime/S = new (get_turf(holder.my_atom)) - S.visible_message("Infused with plasma, the core begins to expand uncontrollably!") - S.icon_state = "[S.base_state]_active" - S.active = TRUE - addtimer(CALLBACK(S, TYPE_PROC_REF(/obj/item/grenade, prime)), rand(15,60)) - else - var/mob/living/simple_animal/slime/random/S = new (get_turf(holder.my_atom)) - S.visible_message("Infused with plasma, the core begins to quiver and grow, and a new baby slime emerges from it!") - ..() - -/datum/chemical_reaction/slime/slimebomb - required_reagents = list(/datum/reagent/toxin/slimejelly = 1) - required_other = TRUE - required_container = /obj/item/slime_extract/rainbow - -/datum/chemical_reaction/slime/slimebomb/on_reaction(datum/reagents/holder, created_volume) - var/turf/T = get_turf(holder.my_atom) - var/obj/item/grenade/clusterbuster/slime/volatile/S = new (T) - S.visible_message("Infused with slime jelly, the core begins to expand uncontrollably!") - S.icon_state = "[S.base_state]_active" - S.active = TRUE - addtimer(CALLBACK(S, TYPE_PROC_REF(/obj/item/grenade, prime)), rand(15,60)) - var/lastkey = holder.my_atom.fingerprintslast - var/touch_msg = "N/A" - if(lastkey) - var/mob/toucher = get_mob_by_key(lastkey) - touch_msg = "[ADMIN_LOOKUPFLW(toucher)]." - message_admins("Brorble Brorble primed at [ADMIN_VERBOSEJMP(T)]. Last Fingerprint: [touch_msg]") - log_game("Brorble Brorble primed at [AREACOORD(T)]. Last Fingerprint: [lastkey ? lastkey : "N/A"].") - ..() - -/datum/chemical_reaction/slime/slime_transfer - required_reagents = list(/datum/reagent/blood = 1) - required_other = TRUE - required_container = /obj/item/slime_extract/rainbow - -/datum/chemical_reaction/slime/slime_transfer/on_reaction(datum/reagents/holder) - new /obj/item/slimepotion/transference(get_turf(holder.my_atom)) - ..() - -/datum/chemical_reaction/slime/flight_potion - required_reagents = list(/datum/reagent/water/holywater = 5, /datum/reagent/uranium = 5) - required_other = TRUE - required_container = /obj/item/slime_extract/rainbow - -/datum/chemical_reaction/slime/flight_potion/on_reaction(datum/reagents/holder) - new /obj/item/reagent_containers/glass/bottle/potion/flight(get_turf(holder.my_atom)) - ..() diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index 2ba8ef1e2d7a..baa48134abbd 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -38,14 +38,6 @@ category = list("Computer Boards") departmental_flags = DEPARTMENTAL_FLAG_SCIENCE -/datum/design/board/xenobiocamera - name = "Computer Design (Xenobiology Console)" - desc = "Allows for the construction of circuit boards used to build xenobiology camera computers." - id = "xenobioconsole" - build_path = /obj/item/circuitboard/computer/xenobiology - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - /datum/design/board/aiupload name = "Computer Design (AI Upload)" desc = "Allows for the construction of circuit boards used to build an AI Upload Console." diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index bbc83dd1e705..737572ef2fc2 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -332,15 +332,6 @@ build_path = /obj/item/circuitboard/machine/smartfridge category = list ("Misc. Machinery") - -/datum/design/board/monkey_recycler - name = "Machine Design (Monkey Recycler Board)" - desc = "The circuit board for a monkey recycler." - id = "monkey_recycler" - build_path = /obj/item/circuitboard/machine/monkey_recycler - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SERVICE - /datum/design/board/seed_extractor name = "Machine Design (Seed Extractor Board)" desc = "The circuit board for a seed extractor." diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index ce473ad739cb..64e5a0921b2b 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -82,7 +82,6 @@ /obj/item/grenade, /obj/item/aicard, /obj/item/storage/backpack/holding, - /obj/item/slime_extract, /obj/item/onetankbomb, /obj/item/transfer_valve)) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 8b6acd39ae34..c21e3b1e6fcc 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -123,29 +123,6 @@ Nothing else in the console has ID requirements. return ..() /obj/machinery/computer/rdconsole/attackby(obj/item/D, mob/user, params) - if(istype(D, /obj/item/slime_extract)) - var/obj/item/slime_extract/E = D - if(!slime_already_researched[E.type]) - if(!E.research) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 3, -1) - visible_message("[src] buzzes and displays a message: Invalid extract! (You shouldn't be seeing this. If you are, tell someone.)") - return - if(E.Uses <= 0) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 3, -1) - visible_message("[src] buzzes and displays a message: Extract consumed - no research available.") - return - else - playsound(src, 'sound/machines/ping.ogg', 50, 3, -1) - visible_message("[user] inserts [E] into a slot on the [src]!", "You insert [E] into a slot on the [src], producting [E.research] points from the extract's chemical makeup!") - stored_research.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = E.research)) - slime_already_researched[E.type] = TRUE - qdel(D) - return - else - visible_message("[src] buzzes and displays a message: Slime extract already researched!") - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 3, -1) - return - if(istype(D, /obj/item/seeds)) var/obj/item/seeds/E = D if(!plant_already_researched[E.type]) diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 12dee3405a8c..39770fce5c85 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -119,7 +119,7 @@ display_name = "Biological Processing" description = "From slimes to kitchens." prereq_ids = list("biotech") - design_ids = list("smartfridge", "gibber", "deepfryer", "monkey_recycler", "processor", "gibber", "microwave", "reagentgrinder", "dish_drive") + design_ids = list("smartfridge", "gibber", "deepfryer", "processor", "gibber", "microwave", "reagentgrinder", "dish_drive") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -230,7 +230,7 @@ display_name = "Basic Bluespace Theory" description = "Basic studies into the mysterious alternate dimension known as bluespace." prereq_ids = list("base") - design_ids = list("beacon", "xenobioconsole", "telesci_gps", "bluespace_crystal") + design_ids = list("beacon", "telesci_gps", "bluespace_crystal") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 diff --git a/code/modules/research/xenobiology/crossbreeding/__corecross.dm b/code/modules/research/xenobiology/crossbreeding/__corecross.dm deleted file mode 100644 index e2cfe4b40871..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/__corecross.dm +++ /dev/null @@ -1,193 +0,0 @@ -////////////////////////////////////////////// -////////// SLIME CROSSBREEDS ////////// -////////////////////////////////////////////// -// A system of combining two extract types. // -// Performed by feeding a slime 10 of an // -// extract color. // -////////////////////////////////////////////// -/*==========================================*\ -To add a crossbreed: - The file name is automatically selected - by the crossbreeding effect, which uses - the format slimecross/[modifier]/[color]. - - If a crossbreed doesn't exist, don't - worry. If no file is found at that - location, it will simple display that - the crossbreed was too unstable. - - As a result, do not feel the need to - try to add all of the crossbred - effects at once, if you're here and - trying to make a new slime type. Just - get your slimetype in the codebase and - get around to the crossbreeds eventually! -\*==========================================*/ - -/obj/item/slimecross //The base type for crossbred extracts. Mostly here for posterity, and to set base case things. - name = "crossbred slime extract" - desc = "An extremely potent slime extract, formed through crossbreeding." - icon = 'icons/obj/slimecrossing.dmi' - icon_state = "base" - var/colour = "null" - var/effect = "null" - var/effect_desc = "null" - force = 0 - w_class = WEIGHT_CLASS_TINY - throwforce = 0 - throw_speed = 3 - throw_range = 6 - -/obj/item/slimecross/examine(mob/user) - . = ..() - if(effect_desc) - . += "[effect_desc]" - -/obj/item/slimecross/Initialize() - . = ..() - name = effect + " " + colour + " extract" - var/itemcolor = "#FFFFFF" - switch(colour) - if("orange") - itemcolor = "#FFA500" - if("purple") - itemcolor = "#B19CD9" - if("blue") - itemcolor = "#ADD8E6" - if("metal") - itemcolor = "#7E7E7E" - if("yellow") - itemcolor = "#FFFF00" - if("dark purple") - itemcolor = "#551A8B" - if("dark blue") - itemcolor = "#0000FF" - if("silver") - itemcolor = "#D3D3D3" - if("bluespace") - itemcolor = "#32CD32" - if("sepia") - itemcolor = "#704214" - if("cerulean") - itemcolor = "#2956B2" - if("pyrite") - itemcolor = "#FAFAD2" - if("red") - itemcolor = "#FF0000" - if("green") - itemcolor = "#00FF00" - if("pink") - itemcolor = "#FF69B4" - if("gold") - itemcolor = "#FFD700" - if("oil") - itemcolor = "#505050" - if("black") - itemcolor = "#000000" - if("light pink") - itemcolor = "#FFB6C1" - if("adamantine") - itemcolor = "#008B8B" - add_atom_colour(itemcolor, FIXED_COLOUR_PRIORITY) - -/obj/item/slimecrossbeaker //To be used as a result for extract reactions that make chemicals. - name = "result extract" - desc = "You shouldn't see this." - icon = 'icons/obj/slimecrossing.dmi' - icon_state = "base" - var/del_on_empty = TRUE - var/list/list_reagents - -/obj/item/slimecrossbeaker/Initialize() - . = ..() - create_reagents(50, INJECTABLE | DRAWABLE) - if(list_reagents) - for(var/reagent in list_reagents) - reagents.add_reagent(reagent, list_reagents[reagent]) - if(del_on_empty) - START_PROCESSING(SSobj,src) - -/obj/item/slimecrossbeaker/Destroy() - STOP_PROCESSING(SSobj,src) - return ..() - -/obj/item/slimecrossbeaker/process() - if(!reagents.total_volume) - visible_message("[src] has been drained completely, and melts away.") - qdel(src) - -/obj/item/slimecrossbeaker/bloodpack //Pack of 50u blood. Deletes on empty. - name = "blood extract" - desc = "A sphere of liquid blood, somehow managing to stay together." - color = "#FF0000" - list_reagents = list(/datum/reagent/blood = 50) - -/obj/item/slimecrossbeaker/pax //5u synthpax. - name = "peace-inducing extract" - desc = "A small blob of synthetic pax." - color = "#FFCCCC" - list_reagents = list(/datum/reagent/pax/peaceborg = 5) - -/obj/item/slimecrossbeaker/omnizine //15u omnizine. - name = "healing extract" - desc = "A gelatinous extract of pure omnizine." - color = "#FF00FF" - list_reagents = list(/datum/reagent/medicine/omnizine = 15) - -/obj/item/slimecrossbeaker/autoinjector //As with the above, but automatically injects whomever it is used on with contents. - var/ignore_flags = FALSE - var/self_use_only = FALSE - -/obj/item/slimecrossbeaker/autoinjector/Initialize() - . = ..() - reagents.flags = DRAWABLE // Cannot be refilled, since it's basically an autoinjector! - -/obj/item/slimecrossbeaker/autoinjector/attack(mob/living/M, mob/user) - if(!reagents.total_volume) - to_chat(user, "[src] is empty!") - return - if(!iscarbon(M)) - return - if(self_use_only && M != user) - to_chat(user, "This can only be used on yourself.") - return - if(reagents.total_volume && (ignore_flags || M.can_inject(user, 1))) - reagents.trans_to(M, reagents.total_volume, transfered_by = user) - if(user != M) - to_chat(M, "[user] presses [src] against you!") - to_chat(user, "You press [src] against [M], injecting [M.p_them()].") - else - to_chat(user, "You press [src] against yourself, and it flattens against you!") - else - to_chat(user, "There's no place to stick [src]!") - -/obj/item/slimecrossbeaker/autoinjector/regenpack - ignore_flags = TRUE //It is, after all, intended to heal. - name = "mending solution" - desc = "A strange glob of sweet-smelling semifluid, which seems to stick to skin rather easily." - color = "#FF00FF" - list_reagents = list(/datum/reagent/medicine/regen_jelly = 20) - -/obj/item/slimecrossbeaker/autoinjector/slimejelly //Primarily for slimepeople, but you do you. - self_use_only = TRUE - ignore_flags = TRUE - name = "slime jelly bubble" - desc = "A sphere of slime jelly. It seems to stick to your skin, but avoids other surfaces." - color = "#00FF00" - list_reagents = list(/datum/reagent/toxin/slimejelly = 50) - -/obj/item/slimecrossbeaker/autoinjector/peaceandlove - name = "peaceful distillation" - desc = "A light pink gooey sphere. Simply touching it makes you a little dizzy." - color = "#DDAAAA" - list_reagents = list(/datum/reagent/pax/peaceborg = 10, /datum/reagent/drug/space_drugs = 15) //Peace, dudes - -/obj/item/slimecrossbeaker/autoinjector/peaceandlove/Initialize() - . = ..() - reagents.flags = NONE // It won't be *that* easy to get your hands on pax. - -/obj/item/slimecrossbeaker/autoinjector/slimestimulant - name = "invigorating gel" - desc = "A bubbling purple mixture, designed to heal and boost movement." - color = "#FF00FF" - list_reagents = list(/datum/reagent/medicine/regen_jelly = 30, /datum/reagent/drug/methamphetamine = 9) diff --git a/code/modules/research/xenobiology/crossbreeding/_clothing.dm b/code/modules/research/xenobiology/crossbreeding/_clothing.dm deleted file mode 100644 index 3d466983f430..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/_clothing.dm +++ /dev/null @@ -1,78 +0,0 @@ -/* -Slimecrossing Armor - Armor added by the slimecrossing system. - Collected here for clarity. -*/ - -//Rebreather mask - Chilling Blue -/obj/item/clothing/mask/nobreath - name = "rebreather mask" - desc = "A transparent mask, resembling a conventional breath mask, but made of bluish slime. Seems to lack any air supply tube, though." - icon_state = "slime" - item_state = "slime" - body_parts_covered = NONE - w_class = WEIGHT_CLASS_SMALL - gas_transfer_coefficient = 0 - permeability_coefficient = 0.5 - flags_cover = MASKCOVERSMOUTH - resistance_flags = NONE - -/obj/item/clothing/mask/nobreath/equipped(mob/living/carbon/human/user, slot) - . = ..() - if(slot == ITEM_SLOT_MASK) - ADD_TRAIT(user, TRAIT_NOBREATH, "breathmask_[REF(src)]") - user.failed_last_breath = FALSE - user.clear_alert("not_enough_oxy") - user.apply_status_effect(/datum/status_effect/rebreathing) - -/obj/item/clothing/mask/nobreath/dropped(mob/living/carbon/human/user) - ..() - REMOVE_TRAIT(user, TRAIT_NOBREATH, "breathmask_[REF(src)]") - user.remove_status_effect(/datum/status_effect/rebreathing) - -/obj/item/clothing/head/peaceflower - name = "heroine bud" - desc = "An extremely addictive flower, full of peace magic." - icon = 'icons/obj/slimecrossing.dmi' - icon_state = "peaceflower" - item_state = "peaceflower" - slot_flags = ITEM_SLOT_HEAD - body_parts_covered = NONE - force = 0 - throwforce = 0 - w_class = WEIGHT_CLASS_TINY - throw_speed = 1 - throw_range = 3 - -/obj/item/clothing/head/peaceflower/equipped(mob/living/carbon/human/user, slot) - . = ..() - if(slot == ITEM_SLOT_HEAD) - ADD_TRAIT(user, TRAIT_PACIFISM, "peaceflower_[REF(src)]") - -/obj/item/clothing/head/peaceflower/dropped(mob/living/carbon/human/user) - ..() - REMOVE_TRAIT(user, TRAIT_PACIFISM, "peaceflower_[REF(src)]") - -/obj/item/clothing/head/peaceflower/attack_hand(mob/user) - if(iscarbon(user)) - var/mob/living/carbon/C = user - if(src == C.head) - to_chat(user, "You feel at peace. Why would you want anything else?") - return - return ..() - -/obj/item/clothing/suit/armor/heavy/adamantine - name = "adamantine armor" - desc = "A full suit of adamantine plate armor. Impressively resistant to damage, but weighs about as much as you do." - icon_state = "adamsuit" - item_state = "adamsuit" - flags_inv = NONE - obj_flags = IMMUTABLE_SLOW - slowdown = 4 - var/hit_reflect_chance = 40 - -/obj/item/clothing/suit/armor/heavy/adamantine/IsReflect(def_zone) - if(def_zone in list(BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) && prob(hit_reflect_chance)) - return TRUE - else - return FALSE diff --git a/code/modules/research/xenobiology/crossbreeding/_misc.dm b/code/modules/research/xenobiology/crossbreeding/_misc.dm deleted file mode 100644 index 2af2ecf64689..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/_misc.dm +++ /dev/null @@ -1,234 +0,0 @@ -/* -Slimecrossing Items - General items added by the slimecrossing system. - Collected here for clarity. -*/ - -//Rewind camera - I'm already Burning Sepia -/obj/item/camera/rewind - name = "sepia-tinted camera" - desc = "They say a picture is like a moment stopped in time." - pictures_left = 1 - pictures_max = 1 - can_customise = FALSE - default_picture_name = "A nostalgic picture" - var/used = FALSE - -/datum/saved_bodypart - var/obj/item/bodypart/old_part - var/bodypart_type - var/brute_dam - var/burn_dam - var/stamina_dam - -/datum/saved_bodypart/New(obj/item/bodypart/part) - old_part = part - bodypart_type = part.type - brute_dam = part.brute_dam - burn_dam = part.burn_dam - stamina_dam = part.stamina_dam - -/mob/living/carbon/proc/apply_saved_bodyparts(list/datum/saved_bodypart/parts) - var/list/dont_chop = list() - for(var/zone in parts) - var/datum/saved_bodypart/saved_part = parts[zone] - var/obj/item/bodypart/already = get_bodypart(zone) - if(QDELETED(saved_part.old_part)) - saved_part.old_part = new saved_part.bodypart_type - if(!already || already != saved_part.old_part) - saved_part.old_part.replace_limb(src, TRUE) - saved_part.old_part.heal_damage(INFINITY, INFINITY, INFINITY, null, FALSE) - saved_part.old_part.receive_damage(saved_part.brute_dam, saved_part.burn_dam, saved_part.stamina_dam) - dont_chop[zone] = TRUE - for(var/obj/item/bodypart/BP as anything in bodyparts) - if(dont_chop[BP.body_zone]) - continue - BP.drop_limb(TRUE) - -/mob/living/carbon/proc/save_bodyparts() - var/list/datum/saved_bodypart/ret = list() - for(var/_part in bodyparts) - var/obj/item/bodypart/part = _part - var/datum/saved_bodypart/saved_part = new(part) - - ret[part.body_zone] = saved_part - return ret - -/obj/item/camera/rewind/afterattack(atom/target, mob/user, flag) - if(!on || !pictures_left || !isturf(target.loc)) - return - if(!used)//selfie time - if(user == target) - to_chat(user, "You take a selfie!") - else - to_chat(user, "You take a photo with [target]!") - to_chat(target, "[user] takes a photo with you!") - to_chat(target, "You'll remember this moment forever!") - - used = TRUE - target.AddComponent(/datum/component/dejavu, 2) - .=..() - -/obj/item/camera/rewind/loot - pictures_left = 5 - pictures_max = 5 - -//Timefreeze camera - Old Burning Sepia result. Kept in case admins want to spawn it -/obj/item/camera/timefreeze - name = "sepia-tinted camera" - desc = "They say a picture is like a moment stopped in time." - pictures_left = 1 - pictures_max = 1 - var/used = FALSE - -/obj/item/camera/timefreeze/afterattack(atom/target, mob/user, flag) - if(!on || !pictures_left || !isturf(target.loc)) - return - if(!used) //refilling the film does not refill the timestop - new /obj/effect/timestop(get_turf(target), 2, 50, list(user)) - used = TRUE - desc = "This camera has seen better days." - . = ..() - - -//Hypercharged slime cell - Charged Yellow -/obj/item/stock_parts/cell/high/slime/hypercharged - name = "hypercharged slime core" - desc = "A charged yellow slime extract, infused with even more plasma. It almost hurts to touch." - rating = 7 //Roughly 1.5 times the original. - maxcharge = 20000 //2 times the normal one. - chargerate = 2250 //1.5 times the normal rate. - -//Barrier cube - Chilling Grey -/obj/item/barriercube - name = "barrier cube" - desc = "A compressed cube of slime. When squeezed, it grows to massive size!" - icon = 'icons/obj/slimecrossing.dmi' - icon_state = "barriercube" - w_class = WEIGHT_CLASS_TINY - -/obj/item/barriercube/attack_self(mob/user) - if(locate(/obj/structure/barricade/slime) in get_turf(loc)) - to_chat(user, "You can't fit more than one barrier in the same space!") - return - to_chat(user, "You squeeze [src].") - var/obj/B = new /obj/structure/barricade/slime(get_turf(loc)) - B.visible_message("[src] suddenly grows into a large, gelatinous barrier!") - qdel(src) - -//Slime barricade - Chilling Grey -/obj/structure/barricade/slime - name = "gelatinous barrier" - desc = "A huge chunk of grey slime. Bullets might get stuck in it." - icon = 'icons/obj/slimecrossing.dmi' - icon_state = "slimebarrier" - proj_pass_rate = 40 - max_integrity = 60 - -//Melting Gel Wall - Chilling Metal -/obj/effect/forcefield/slimewall - name = "solidified gel" - desc = "A mass of solidified slime gel - completely impenetrable, but it's melting away!" - icon = 'icons/obj/slimecrossing.dmi' - icon_state = "slimebarrier_thick" - CanAtmosPass = ATMOS_PASS_NO - opacity = TRUE - timeleft = 100 - -//Rainbow barrier - Chilling Rainbow -/obj/effect/forcefield/slimewall/rainbow - name = "rainbow barrier" - desc = "Despite others' urgings, you probably shouldn't taste this." - icon_state = "rainbowbarrier" - -//Ration pack - Chilling Silver -/obj/item/reagent_containers/food/snacks/rationpack - name = "ration pack" - desc = "A square bar that sadly looks like chocolate, packaged in a nondescript grey wrapper. Has saved soldiers' lives before - usually by stopping bullets." - icon_state = "rationpack" - bitesize = 3 - junkiness = 15 - filling_color = "#964B00" - tastes = list("cardboard" = 3, "sadness" = 3) - foodtype = null //Don't ask what went into them. You're better off not knowing. - list_reagents = list(/datum/reagent/consumable/nutriment/stabilized = 10, /datum/reagent/consumable/nutriment = 2) //Won't make you fat. Will make you question your sanity. - -/obj/item/reagent_containers/food/snacks/rationpack/checkLiked(fraction, mob/M) //Nobody likes rationpacks. Nobody. - if(last_check_time + 50 < world.time) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.mind && !HAS_TRAIT(H, TRAIT_AGEUSIA)) - to_chat(H,"That didn't taste very good...") //No disgust, though. It's just not good tasting. - SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/gross_food) - last_check_time = world.time - return - ..() - -//Ice stasis block - Chilling Dark Blue -/obj/structure/ice_stasis - name = "ice block" - desc = "A massive block of ice. You can see something vaguely humanoid inside." - icon = 'icons/obj/slimecrossing.dmi' - icon_state = "frozen" - density = TRUE - max_integrity = 100 - armor = list("melee" = 30, "bullet" = 50, "laser" = -50, "energy" = -50, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = -80, "acid" = 30) - -/obj/structure/ice_stasis/Initialize() - . = ..() - playsound(src, 'sound/magic/ethereal_exit.ogg', 50, TRUE) - -/obj/structure/ice_stasis/Destroy() - for(var/atom/movable/M in contents) - M.forceMove(loc) - playsound(src, 'sound/effects/glassbr3.ogg', 50, TRUE) - return ..() - -//Gold capture device - Chilling Gold -/obj/item/capturedevice - name = "gold capture device" - desc = "Bluespace technology packed into a roughly egg-shaped device, used to store nonhuman creatures. Can't catch them all, though - it only fits one." - w_class = WEIGHT_CLASS_SMALL - icon = 'icons/obj/slimecrossing.dmi' - icon_state = "capturedevice" - -/obj/item/capturedevice/attack(mob/living/M, mob/user) - if(length(contents)) - to_chat(user, "The device already has something inside.") - return - if(!isanimal(M)) - to_chat(user, "The capture device only works on simple creatures.") - return - if(M.mind) - to_chat(user, "You offer the device to [M].") - if(alert(M, "Would you like to enter [user]'s capture device?", "Gold Capture Device", "Yes", "No") == "Yes") - if(user.canUseTopic(src, BE_CLOSE) && user.canUseTopic(M, BE_CLOSE)) - to_chat(user, "You store [M] in the capture device.") - to_chat(M, "The world warps around you, and you're suddenly in an endless void, with a window to the outside floating in front of you.") - store(M, user) - else - to_chat(user, "You were too far away from [M].") - to_chat(M, "You were too far away from [user].") - else - to_chat(user, "[M] refused to enter the device.") - return - else - if(istype(M, /mob/living/simple_animal/hostile) && !("neutral" in M.faction)) - to_chat(user, "This creature is too aggressive to capture.") - return - to_chat(user, "You store [M] in the capture device.") - store(M) - -/obj/item/capturedevice/attack_self(mob/user) - if(contents.len) - to_chat(user, "You open the capture device!") - release() - else - to_chat(user, "The device is empty...") - -/obj/item/capturedevice/proc/store(mob/living/M) - M.forceMove(src) - -/obj/item/capturedevice/proc/release() - for(var/atom/movable/M in contents) - M.forceMove(get_turf(loc)) diff --git a/code/modules/research/xenobiology/crossbreeding/_mobs.dm b/code/modules/research/xenobiology/crossbreeding/_mobs.dm deleted file mode 100644 index 0d155f2f90f7..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/_mobs.dm +++ /dev/null @@ -1,45 +0,0 @@ -/* -Slimecrossing Mobs - Mobs and effects added by the slimecrossing system. - Collected here for clarity. -*/ - -//Slime transformation power - Burning Black -/obj/effect/proc_holder/spell/targeted/shapeshift/slimeform - name = "Slime Transformation" - desc = "Transform from a human to a slime, or back again!" - action_icon_state = "transformslime" - cooldown_min = 0 - charge_max = 0 - invocation_type = "none" - shapeshift_type = /mob/living/simple_animal/slime/transformedslime - convert_damage = TRUE - convert_damage_type = CLONE - var/remove_on_restore = FALSE - -/obj/effect/proc_holder/spell/targeted/shapeshift/slimeform/Restore(mob/living/M) - if(remove_on_restore) - if(M.mind) - M.mind.RemoveSpell(src) - ..() - -//Transformed slime - Burning Black -/mob/living/simple_animal/slime/transformedslime - -/mob/living/simple_animal/slime/transformedslime/Reproduce() //Just in case. - to_chat(src, "I can't reproduce...") - return - -//Slime corgi - Chilling Pink -/mob/living/simple_animal/pet/dog/corgi/puppy/slime - name = "\improper slime corgi puppy" - real_name = "slime corgi puppy" - desc = "An unbearably cute pink slime corgi puppy." - icon_state = "slime_puppy" - icon_living = "slime_puppy" - icon_dead = "slime_puppy_dead" - nofur = TRUE - gold_core_spawnable = NO_SPAWN - speak_emote = list("blorbles", "bubbles", "borks") - emote_hear = list("bubbles!", "splorts.", "splops!") - emote_see = list("gets goop everywhere.", "flops.", "jiggles!") diff --git a/code/modules/research/xenobiology/crossbreeding/_potions.dm b/code/modules/research/xenobiology/crossbreeding/_potions.dm deleted file mode 100644 index fc9d9ef06c6a..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/_potions.dm +++ /dev/null @@ -1,217 +0,0 @@ -/* -Slimecrossing Potions - Potions added by the slimecrossing system. - Collected here for clarity. -*/ - -//Extract cloner - Charged Grey -/obj/item/slimepotion/extract_cloner - name = "extract cloning potion" - desc = "An more powerful version of the extract enhancer potion, capable of cloning regular slime extracts." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potpurple" - -/obj/item/slimepotion/extract_cloner/afterattack(obj/item/target, mob/user , proximity) - if(!proximity) - return - if(istype(target, /obj/item/reagent_containers)) - return ..(target, user, proximity) - if(istype(target, /obj/item/slimecross)) - to_chat(user, "[target] is too complex for the potion to clone!") - return - if(!istype(target, /obj/item/slime_extract)) - return - var/obj/item/slime_extract/S = target - if(S.recurring) - to_chat(user, "[target] is too complex for the potion to clone!") - return - var/path = S.type - var/obj/item/slime_extract/C = new path(get_turf(target)) - C.Uses = S.Uses - to_chat(user, "You pour the potion onto [target], and the fluid solidifies into a copy of it!") - qdel(src) - return - -//Peace potion - Charged Light Pink -/obj/item/slimepotion/peacepotion - name = "pacification potion" - desc = "A light pink solution of chemicals, smelling like liquid peace. And mercury salts." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potlightpink" - -/obj/item/slimepotion/peacepotion/attack(mob/living/M, mob/user) - if(!isliving(M) || M.stat == DEAD) - to_chat(user, "[src] only works on the living.") - return ..() - if(istype(M, /mob/living/simple_animal/hostile/megafauna)) - to_chat(user, "[src] does not work on beings of pure evil!") - return ..() - if(M != user) - M.visible_message("[user] starts to feed [M] [src]!", - "[user] starts to feed you [src]!") - else - M.visible_message("[user] starts to drink [src]!", - "You start to drink [src]!") - - if(!do_after(user, 100, target = M)) - return - if(M != user) - to_chat(user, "You feed [M] [src]!") - else - to_chat(user, "You drink [src]!") - if(isanimal(M)) - ADD_TRAIT(M, TRAIT_PACIFISM, MAGIC_TRAIT) - else if(iscarbon(M)) - var/mob/living/carbon/C = M - C.gain_trauma(/datum/brain_trauma/severe/pacifism, TRAUMA_RESILIENCE_SURGERY) - qdel(src) - -//Love potion - Charged Pink -/obj/item/slimepotion/lovepotion - name = "love potion" - desc = "A pink chemical mix thought to inspire feelings of love." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potpink" - -/obj/item/slimepotion/lovepotion/attack(mob/living/M, mob/user) - if(!isliving(M) || M.stat == DEAD) - to_chat(user, "The love potion only works on living things, sicko!") - return ..() - if(istype(M, /mob/living/simple_animal/hostile/megafauna)) - to_chat(user, "The love potion does not work on beings of pure evil!") - return ..() - if(user == M) - to_chat(user, "You can't drink the love potion. What are you, a narcissist?") - return ..() - if(M.has_status_effect(STATUS_EFFECT_INLOVE)) - to_chat(user, "[M] is already lovestruck!") - return ..() - - M.visible_message("[user] starts to feed [M] a love potion!", - "[user] starts to feed you a love potion!") - - if(!do_after(user, 50, target = M)) - return - to_chat(user, "You feed [M] the love potion!") - to_chat(M, "You develop feelings for [user], and anyone [user.p_they()] like.") - if(M.mind) - M.mind.store_memory("You are in love with [user].") - M.faction |= "[REF(user)]" - M.apply_status_effect(STATUS_EFFECT_INLOVE, user) - qdel(src) - -//Pressure potion - Charged Dark Blue -/obj/item/slimepotion/spaceproof - name = "slime pressurization potion" - desc = "A potent chemical sealant that will render any article of clothing airtight. Has two uses." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potblue" - var/uses = 2 - -/obj/item/slimepotion/spaceproof/afterattack(obj/item/clothing/C, mob/user, proximity) - . = ..() - if(!uses) - qdel(src) - return - if(!proximity) - return - if(!istype(C)) - to_chat(user, "The potion can only be used on clothing!") - return - if(C.min_cold_protection_temperature == SPACE_SUIT_MIN_TEMP_PROTECT && C.clothing_flags & STOPSPRESSUREDAMAGE) - to_chat(user, "The [C] is already pressure-resistant!") - return ..() - to_chat(user, "You slather the blue gunk over the [C], making it airtight.") - C.name = "pressure-resistant [C.name]" - C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - C.add_atom_colour("#000080", FIXED_COLOUR_PRIORITY) - C.min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT - C.cold_protection = C.body_parts_covered - C.clothing_flags |= STOPSPRESSUREDAMAGE - uses-- - if(!uses) - qdel(src) - -//Enhancer potion - Charged Cerulean -/obj/item/slimepotion/enhancer/max - name = "extract maximizer" - desc = "An extremely potent chemical mix that will maximize a slime extract's uses." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potpurple" - -//Lavaproofing potion - Charged Red -/obj/item/slimepotion/lavaproof - name = "slime lavaproofing potion" - desc = "A strange, reddish goo said to repel lava as if it were water, without reducing flammability. Has two uses." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potred" - resistance_flags = LAVA_PROOF | FIRE_PROOF - var/uses = 2 - -/obj/item/slimepotion/lavaproof/afterattack(obj/item/C, mob/user, proximity) - . = ..() - if(!uses) - qdel(src) - return ..() - if(!proximity) - return ..() - if(!istype(C)) - to_chat(user, "You can't coat this with lavaproofing fluid!") - return ..() - to_chat(user, "You slather the red gunk over the [C], making it lavaproof.") - C.name = "lavaproof [C.name]" - C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - C.add_atom_colour("#800000", FIXED_COLOUR_PRIORITY) - C.resistance_flags |= LAVA_PROOF - if (istype(C, /obj/item/clothing)) - var/obj/item/clothing/CL = C - CL.clothing_flags |= LAVAPROTECT - uses-- - if(!uses) - qdel(src) - -//Revival potion - Charged Grey -/obj/item/slimepotion/slime_reviver - name = "slime revival potion" - desc = "Infused with plasma and compressed gel, this brings dead slimes back to life." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potsilver" - -/obj/item/slimepotion/slime_reviver/attack(mob/living/simple_animal/slime/M, mob/user) - if(!isslime(M)) - to_chat(user, "The potion only works on slimes!") - return ..() - if(M.stat != DEAD) - to_chat(user, "The slime is still alive!") - return - if(M.maxHealth <= 0) - to_chat(user, "The slime is too unstable to return!") - M.revive(full_heal = TRUE, admin_revive = FALSE) - M.set_stat(CONSCIOUS) - M.visible_message("[M] is filled with renewed vigor and blinks awake!") - M.maxHealth -= 10 //Revival isn't healthy. - M.health -= 10 - M.regenerate_icons() - qdel(src) - -//Stabilizer potion - Charged Blue -/obj/item/slimepotion/slime/chargedstabilizer - name = "slime omnistabilizer" - desc = "An extremely potent chemical mix that will stop a slime from mutating completely." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potcyan" - -/obj/item/slimepotion/slime/chargedstabilizer/attack(mob/living/simple_animal/slime/M, mob/user) - if(!isslime(M)) - to_chat(user, "The stabilizer only works on slimes!") - return ..() - if(M.stat) - to_chat(user, "The slime is dead!") - return - if(M.mutation_chance == 0) - to_chat(user, "The slime already has no chance of mutating!") - return - - to_chat(user, "You feed the slime the omnistabilizer. It will not mutate this cycle!") - M.mutation_chance = 0 - qdel(src) diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm deleted file mode 100644 index 651eb2fece14..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ /dev/null @@ -1,971 +0,0 @@ -/atom/movable/screen/alert/status_effect/rainbow_protection - name = "Rainbow Protection" - desc = "You are defended from harm, but so are those you might seek to injure!" - icon_state = "slime_rainbowshield" - -/datum/status_effect/rainbow_protection - id = "rainbow_protection" - duration = 100 - alert_type = /atom/movable/screen/alert/status_effect/rainbow_protection - var/originalcolor - -/datum/status_effect/rainbow_protection/on_apply() - owner.status_flags |= GODMODE - ADD_TRAIT(owner, TRAIT_PACIFISM, /datum/status_effect/rainbow_protection) - owner.visible_message("[owner] shines with a brilliant rainbow light.", - "You feel protected by an unknown force!") - originalcolor = owner.color - return ..() - -/datum/status_effect/rainbow_protection/tick() - owner.color = rgb(rand(0,255),rand(0,255),rand(0,255)) - return ..() - -/datum/status_effect/rainbow_protection/on_remove() - owner.status_flags &= ~GODMODE - owner.color = originalcolor - REMOVE_TRAIT(owner, TRAIT_PACIFISM, /datum/status_effect/rainbow_protection) - owner.visible_message("[owner] stops glowing, the rainbow light fading away.", - "You no longer feel protected...") - -/atom/movable/screen/alert/status_effect/slimeskin - name = "Adamantine Slimeskin" - desc = "You are covered in a thick, non-neutonian gel." - icon_state = "slime_stoneskin" - -/datum/status_effect/slimeskin - id = "slimeskin" - duration = 300 - alert_type = /atom/movable/screen/alert/status_effect/slimeskin - var/originalcolor - -/datum/status_effect/slimeskin/on_apply() - originalcolor = owner.color - owner.color = "#3070CC" - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.damage_resistance += 10 - owner.visible_message("[owner] is suddenly covered in a strange, blue-ish gel!", - "You are covered in a thick, rubbery gel.") - return ..() - -/datum/status_effect/slimeskin/on_remove() - owner.color = originalcolor - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.damage_resistance -= 10 - owner.visible_message("[owner]'s gel coating liquefies and dissolves away.", - "Your gel second-skin dissolves!") - -/datum/status_effect/slimerecall - id = "slime_recall" - duration = -1 //Will be removed by the extract. - alert_type = null - var/interrupted = FALSE - var/mob/target - var/icon/bluespace - -/datum/status_effect/slimerecall/on_apply() - RegisterSignal(owner, COMSIG_LIVING_RESIST, PROC_REF(resistField)) - to_chat(owner, "You feel a sudden tug from an unknown force, and feel a pull to bluespace!") - to_chat(owner, "Resist if you wish avoid the force!") - bluespace = icon('icons/effects/effects.dmi',"chronofield") - owner.add_overlay(bluespace) - return ..() - -/datum/status_effect/slimerecall/proc/resistField() - interrupted = TRUE - owner.remove_status_effect(src) -/datum/status_effect/slimerecall/on_remove() - UnregisterSignal(owner, COMSIG_LIVING_RESIST) - owner.cut_overlay(bluespace) - if(interrupted || !ismob(target)) - to_chat(owner, "The bluespace tug fades away, and you feel that the force has passed you by.") - return - owner.visible_message("[owner] disappears in a flurry of sparks!", - "The unknown force snatches briefly you from reality, and deposits you next to [target]!") - do_sparks(3, TRUE, owner) - owner.forceMove(target.loc) - -/atom/movable/screen/alert/status_effect/freon/stasis - desc = "You're frozen inside of a protective ice cube! While inside, you can't do anything, but are immune to harm! Resist to get out." - -/datum/status_effect/frozenstasis - id = "slime_frozen" - status_type = STATUS_EFFECT_UNIQUE - duration = -1 //Will remove self when block breaks. - alert_type = /atom/movable/screen/alert/status_effect/freon/stasis - var/obj/structure/ice_stasis/cube - -/datum/status_effect/frozenstasis/on_apply() - RegisterSignal(owner, COMSIG_LIVING_RESIST, PROC_REF(breakCube)) - cube = new /obj/structure/ice_stasis(get_turf(owner)) - owner.forceMove(cube) - owner.status_flags |= GODMODE - return ..() - -/datum/status_effect/frozenstasis/tick() - if(!cube || owner.loc != cube) - owner.remove_status_effect(src) - -/datum/status_effect/frozenstasis/proc/breakCube() - owner.remove_status_effect(src) - -/datum/status_effect/frozenstasis/on_remove() - if(cube) - qdel(cube) - owner.status_flags &= ~GODMODE - UnregisterSignal(owner, COMSIG_LIVING_RESIST) - -/datum/status_effect/slime_clone - id = "slime_cloned" - status_type = STATUS_EFFECT_UNIQUE - duration = -1 - alert_type = null - var/mob/living/clone - var/datum/mind/originalmind //For when the clone gibs. - -/datum/status_effect/slime_clone/on_apply() - var/typepath = owner.type - clone = new typepath(owner.loc) - var/mob/living/carbon/O = owner - var/mob/living/carbon/C = clone - if(istype(C) && istype(O)) - C.real_name = O.real_name - O.dna.transfer_identity(C) - C.updateappearance(mutcolor_update=1) - if(owner.mind) - originalmind = owner.mind - owner.mind.transfer_to(clone) - clone.apply_status_effect(/datum/status_effect/slime_clone_decay) - return ..() - -/datum/status_effect/slime_clone/tick() - if(!istype(clone) || clone.stat != CONSCIOUS) - owner.remove_status_effect(src) - -/datum/status_effect/slime_clone/on_remove() - if(clone && clone.mind && owner) - clone.mind.transfer_to(owner) - else - if(owner && originalmind) - originalmind.transfer_to(owner) - if(originalmind.key) - owner.ckey = originalmind.key - if(clone) - clone.unequip_everything() - qdel(clone) - -/atom/movable/screen/alert/status_effect/clone_decay - name = "Clone Decay" - desc = "You are simply a construct, and cannot maintain this form forever. You will be returned to your original body if you should fall." - icon_state = "slime_clonedecay" - -/datum/status_effect/slime_clone_decay - id = "slime_clonedecay" - status_type = STATUS_EFFECT_UNIQUE - duration = -1 - alert_type = /atom/movable/screen/alert/status_effect/clone_decay - -/datum/status_effect/slime_clone_decay/tick() - owner.adjustToxLoss(1, 0) - owner.adjustOxyLoss(1, 0) - owner.adjustBruteLoss(1, 0) - owner.adjustFireLoss(1, 0) - owner.color = "#007BA7" - -/atom/movable/screen/alert/status_effect/bloodchill - name = "Bloodchilled" - desc = "You feel a shiver down your spine after getting hit with a glob of cold blood. You'll move slower and get frostbite for a while!" - icon_state = "bloodchill" - -/datum/status_effect/bloodchill - id = "bloodchill" - duration = 100 - alert_type = /atom/movable/screen/alert/status_effect/bloodchill - -/datum/status_effect/bloodchill/on_apply() - owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/bloodchill) - return ..() - -/datum/status_effect/bloodchill/tick() - if(prob(50)) - owner.adjustFireLoss(2) - -/datum/status_effect/bloodchill/on_remove() - owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/bloodchill) - -/datum/status_effect/bonechill - id = "bonechill" - duration = 80 - alert_type = /atom/movable/screen/alert/status_effect/bonechill - -/datum/status_effect/bonechill/on_apply() - owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/bonechill) - return ..() - -/datum/status_effect/bonechill/tick() - if(prob(50)) - owner.adjustFireLoss(1) - owner.Jitter(3) - owner.adjust_bodytemperature(-10) - -/datum/status_effect/bonechill/on_remove() - owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/bonechill) -/atom/movable/screen/alert/status_effect/bonechill - name = "Bonechilled" - desc = "You feel a shiver down your spine after hearing the haunting noise of bone rattling. You'll move slower and get frostbite for a while!" - icon_state = "bloodchill" - -/datum/status_effect/rebreathing - id = "rebreathing" - duration = -1 - alert_type = null - -/datum/status_effect/rebreathing/tick() - owner.adjustOxyLoss(-6, 0) //Just a bit more than normal breathing. - -/////////////////////////////////////////////////////// -//////////////////CONSUMING EXTRACTS/////////////////// -/////////////////////////////////////////////////////// - -/datum/status_effect/firecookie - id = "firecookie" - status_type = STATUS_EFFECT_REPLACE - alert_type = null - duration = 100 - -/datum/status_effect/firecookie/on_apply() - ADD_TRAIT(owner, TRAIT_RESISTCOLD,"firecookie") - owner.adjust_bodytemperature(110) - return ..() - -/datum/status_effect/firecookie/on_remove() - REMOVE_TRAIT(owner, TRAIT_RESISTCOLD,"firecookie") - -/datum/status_effect/watercookie - id = "watercookie" - status_type = STATUS_EFFECT_REPLACE - alert_type = null - duration = 100 - -/datum/status_effect/watercookie/on_apply() - ADD_TRAIT(owner, TRAIT_NOSLIPWATER,"watercookie") - return ..() - -/datum/status_effect/watercookie/tick() - for(var/turf/open/T in range(get_turf(owner),1)) - T.MakeSlippery(TURF_WET_WATER, min_wet_time = 10, wet_time_to_add = 5) - -/datum/status_effect/watercookie/on_remove() - REMOVE_TRAIT(owner, TRAIT_NOSLIPWATER,"watercookie") - -/datum/status_effect/metalcookie - id = "metalcookie" - status_type = STATUS_EFFECT_REPLACE - alert_type = null - duration = 100 - -/datum/status_effect/metalcookie/on_apply() - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.brute_mod *= 0.9 - return ..() - -/datum/status_effect/metalcookie/on_remove() - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.brute_mod /= 0.9 - -/datum/status_effect/sparkcookie - id = "sparkcookie" - status_type = STATUS_EFFECT_REPLACE - alert_type = null - duration = 300 - var/original_coeff - -/datum/status_effect/sparkcookie/on_apply() - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - original_coeff = H.physiology.siemens_coeff - H.physiology.siemens_coeff = 0 - return ..() - -/datum/status_effect/sparkcookie/on_remove() - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.siemens_coeff = original_coeff - -/datum/status_effect/toxincookie - id = "toxincookie" - status_type = STATUS_EFFECT_REPLACE - alert_type = null - duration = 600 - -/datum/status_effect/toxincookie/on_apply() - ADD_TRAIT(owner, TRAIT_TOXINLOVER,"toxincookie") - return ..() - -/datum/status_effect/toxincookie/on_remove() - REMOVE_TRAIT(owner, TRAIT_TOXINLOVER,"toxincookie") - -/datum/status_effect/timecookie - id = "timecookie" - status_type = STATUS_EFFECT_REPLACE - alert_type = null - duration = 600 - -/datum/status_effect/timecookie/on_apply() - if(ishuman(owner)) - var/mob/living/carbon/human/H - H.physiology.do_after_speed *= 0.95 - return ..() - -/datum/status_effect/timecookie/on_remove() - if(ishuman(owner)) - var/mob/living/carbon/human/H - H.physiology.do_after_speed /= 0.95 - -/datum/status_effect/lovecookie - id = "lovecookie" - status_type = STATUS_EFFECT_REPLACE - alert_type = null - duration = 300 - -/datum/status_effect/lovecookie/tick() - if(owner.stat != CONSCIOUS) - return - if(iscarbon(owner)) - var/mob/living/carbon/C = owner - if(C.handcuffed) - return - var/list/huggables = list() - for(var/mob/living/carbon/L in range(get_turf(owner),1)) - if(L != owner) - huggables += L - if(length(huggables)) - var/mob/living/carbon/hugged = pick(huggables) - owner.visible_message("[owner] hugs [hugged]!", "You hug [hugged]!") - -/datum/status_effect/tarcookie - id = "tarcookie" - status_type = STATUS_EFFECT_REPLACE - alert_type = null - duration = 100 - -/datum/status_effect/tarcookie/tick() - for(var/mob/living/carbon/human/L in range(get_turf(owner),1)) - if(L != owner) - L.apply_status_effect(/datum/status_effect/tarfoot) - -/datum/status_effect/tarfoot - id = "tarfoot" - status_type = STATUS_EFFECT_REPLACE - alert_type = null - duration = 30 - -/datum/status_effect/tarfoot/on_apply() - owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/tarfoot) - return ..() - -/datum/status_effect/tarfoot/on_remove() - owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/tarfoot) - -/datum/status_effect/spookcookie - id = "spookcookie" - status_type = STATUS_EFFECT_REPLACE - alert_type = null - duration = 300 - -/datum/status_effect/spookcookie/on_apply() - var/image/I = image(icon = 'icons/mob/simple_human.dmi', icon_state = "skeleton", layer = ABOVE_MOB_LAYER, loc = owner) - I.override = 1 - owner.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/everyone, "spookyscary", I) - return ..() - -/datum/status_effect/spookcookie/on_remove() - owner.remove_alt_appearance("spookyscary") - -/datum/status_effect/peacecookie - id = "peacecookie" - status_type = STATUS_EFFECT_REPLACE - alert_type = null - duration = 100 - -/datum/status_effect/peacecookie/tick() - for(var/mob/living/L in range(get_turf(owner),1)) - L.apply_status_effect(/datum/status_effect/plur) - -/datum/status_effect/plur - id = "plur" - status_type = STATUS_EFFECT_REPLACE - alert_type = null - duration = 30 - -/datum/status_effect/plur/on_apply() - ADD_TRAIT(owner, TRAIT_PACIFISM, "peacecookie") - return ..() - -/datum/status_effect/plur/on_remove() - REMOVE_TRAIT(owner, TRAIT_PACIFISM, "peacecookie") - -/datum/status_effect/adamantinecookie - id = "adamantinecookie" - status_type = STATUS_EFFECT_REPLACE - alert_type = null - duration = 100 - -/datum/status_effect/adamantinecookie/on_apply() - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.burn_mod *= 0.9 - return ..() - -/datum/status_effect/adamantinecookie/on_remove() - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.burn_mod /= 0.9 - -/////////////////////////////////////////////////////// -//////////////////STABILIZED EXTRACTS////////////////// -/////////////////////////////////////////////////////// - -/datum/status_effect/stabilized //The base stabilized extract effect, has no effect of its' own. - id = "stabilizedbase" - duration = -1 - alert_type = null - var/obj/item/slimecross/stabilized/linked_extract - var/colour = "null" - -/datum/status_effect/stabilized/tick() - if(!linked_extract || !linked_extract.loc) //Sanity checking - qdel(src) - return - if(linked_extract && linked_extract.loc != owner && linked_extract.loc.loc != owner) - linked_extract.linked_effect = null - if(!QDELETED(linked_extract)) - linked_extract.owner = null - START_PROCESSING(SSobj,linked_extract) - qdel(src) - return ..() - -/datum/status_effect/stabilized/null //This shouldn't ever happen, but just in case. - id = "stabilizednull" - - -//Stabilized effects start below. -/datum/status_effect/stabilized/grey - id = "stabilizedgrey" - colour = "grey" - -/datum/status_effect/stabilized/grey/tick() - for(var/mob/living/simple_animal/slime/S in range(1, get_turf(owner))) - if(!(owner in S.Friends)) - to_chat(owner, "[linked_extract] pulses gently as it communicates with [S].") - S.set_friendship(owner, 1) - return ..() - -/datum/status_effect/stabilized/orange - id = "stabilizedorange" - colour = "orange" - -/datum/status_effect/stabilized/orange/tick() - var/body_temperature_difference = owner.get_body_temp_normal(apply_change=FALSE) - owner.bodytemperature - owner.adjust_bodytemperature(min(5,body_temperature_difference)) - return ..() - -/datum/status_effect/stabilized/purple - id = "stabilizedpurple" - colour = "purple" - -/datum/status_effect/stabilized/purple/tick() - var/is_healing = FALSE - if(owner.getBruteLoss() > 0) - owner.adjustBruteLoss(-0.2) - is_healing = TRUE - if(owner.getFireLoss() > 0) - owner.adjustFireLoss(-0.2) - is_healing = TRUE - if(owner.getToxLoss() > 0) - owner.adjustToxLoss(-0.2, forced = TRUE) //Slimepeople should also get healed. - is_healing = TRUE - if(is_healing) - examine_text = "SUBJECTPRONOUN is regenerating slowly, purplish goo filling in small injuries!" - new /obj/effect/temp_visual/heal(get_turf(owner), "#FF0000") - else - examine_text = null - ..() - -/datum/status_effect/stabilized/blue - id = "stabilizedblue" - colour = "blue" - -/datum/status_effect/stabilized/blue/on_apply() - ADD_TRAIT(owner, TRAIT_NOSLIPWATER, "slimestatus") - return ..() - -/datum/status_effect/stabilized/blue/on_remove() - REMOVE_TRAIT(owner, TRAIT_NOSLIPWATER, "slimestatus") - -/datum/status_effect/stabilized/metal - id = "stabilizedmetal" - colour = "metal" - var/cooldown = 30 - var/max_cooldown = 30 - -/datum/status_effect/stabilized/metal/tick() - if(cooldown > 0) - cooldown-- - else - cooldown = max_cooldown - var/list/sheets = list() - for(var/obj/item/stack/sheet/S in owner.GetAllContents()) - if(S.amount < S.max_amount) - sheets += S - - if(sheets.len > 0) - var/obj/item/stack/sheet/S = pick(sheets) - S.amount++ - to_chat(owner, "[linked_extract] adds a layer of slime to [S], which metamorphosizes into another sheet of material!") - return ..() - - -/datum/status_effect/stabilized/yellow - id = "stabilizedyellow" - colour = "yellow" - var/cooldown = 10 - var/max_cooldown = 10 - examine_text = "Nearby electronics seem just a little more charged wherever SUBJECTPRONOUN goes." - -/datum/status_effect/stabilized/yellow/tick() - if(cooldown > 0) - cooldown-- - return ..() - cooldown = max_cooldown - var/list/batteries = list() - for(var/obj/item/stock_parts/cell/C in owner.GetAllContents()) - if(C.charge < C.maxcharge) - batteries += C - if(batteries.len) - var/obj/item/stock_parts/cell/ToCharge = pick(batteries) - ToCharge.charge += min(ToCharge.maxcharge - ToCharge.charge, ToCharge.maxcharge/10) //10% of the cell, or to maximum. - to_chat(owner, "[linked_extract] discharges some energy into a device you have.") - return ..() - -/obj/item/hothands - name = "burning fingertips" - desc = "You shouldn't see this." - -/obj/item/hothands/get_temperature() - return 290 //Below what's required to ignite plasma. - -/datum/status_effect/stabilized/darkpurple - id = "stabilizeddarkpurple" - colour = "dark purple" - var/obj/item/hothands/fire - examine_text = "Their fingertips burn brightly!" - -/datum/status_effect/stabilized/darkpurple/on_apply() - ADD_TRAIT(owner, TRAIT_RESISTHEATHANDS, "slimestatus") - fire = new(owner) - return ..() - -/datum/status_effect/stabilized/darkpurple/tick() - var/obj/item/I = owner.get_active_held_item() - var/obj/item/reagent_containers/food/snacks/F = I - if(istype(F)) - if(F.cooked_type) - to_chat(owner, "[linked_extract] flares up brightly, and your hands alone are enough cook [F]!") - var/obj/item/result = F.microwave_act() - if(istype(result)) - owner.put_in_hands(result) - else - I.attackby(fire, owner) - return ..() - -/datum/status_effect/stabilized/darkpurple/on_remove() - REMOVE_TRAIT(owner, TRAIT_RESISTHEATHANDS, "slimestatus") - qdel(fire) - -/datum/status_effect/stabilized/darkblue - id = "stabilizeddarkblue" - colour = "dark blue" - -/datum/status_effect/stabilized/darkblue/tick() - if(owner.fire_stacks > 0 && prob(80)) - owner.fire_stacks-- - if(owner.fire_stacks <= 0) - to_chat(owner, "[linked_extract] coats you in a watery goo, extinguishing the flames.") - var/obj/O = owner.get_active_held_item() - if(O) - O.extinguish() //All shamelessly copied from water's expose_obj, since I didn't seem to be able to get it here for some reason. - O.acid_level = 0 - // Monkey cube - if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube)) - to_chat(owner, "[linked_extract] kept your hands wet! It makes [O] expand!") - var/obj/item/reagent_containers/food/snacks/monkeycube/cube = O - cube.Expand() - - // Dehydrated carp - else if(istype(O, /obj/item/toy/plush/carpplushie/dehy_carp)) - to_chat(owner, "[linked_extract] kept your hands wet! It makes [O] expand!") - var/obj/item/toy/plush/carpplushie/dehy_carp/dehy = O - dehy.Swell() // Makes a carp - - else if(istype(O, /obj/item/stack/sheet/hairlesshide)) - to_chat(owner, "[linked_extract] kept your hands wet! It wets [O]!") - var/obj/item/stack/sheet/hairlesshide/HH = O - new /obj/item/stack/sheet/wethide(get_turf(HH), HH.amount) - qdel(HH) - ..() - -/datum/status_effect/stabilized/silver - id = "stabilizedsilver" - colour = "silver" - -/datum/status_effect/stabilized/silver/on_apply() - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.hunger_mod *= 0.8 //20% buff - return ..() - -/datum/status_effect/stabilized/silver/on_remove() - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.hunger_mod /= 0.8 - -//Bluespace has an icon because it's kinda active. -/atom/movable/screen/alert/status_effect/bluespaceslime - name = "Stabilized Bluespace Extract" - desc = "You shouldn't see this, since we set it to change automatically!" - icon_state = "slime_bluespace_on" - -/datum/status_effect/bluespacestabilization - id = "stabilizedbluespacecooldown" - duration = 1200 - alert_type = null - -/datum/status_effect/stabilized/bluespace - id = "stabilizedbluespace" - colour = "bluespace" - alert_type = /atom/movable/screen/alert/status_effect/bluespaceslime - var/healthcheck - -/datum/status_effect/stabilized/bluespace/tick() - if(owner.has_status_effect(/datum/status_effect/bluespacestabilization)) - linked_alert.desc = "The stabilized bluespace extract is still aligning you with the bluespace axis." - linked_alert.icon_state = "slime_bluespace_off" - return ..() - else - linked_alert.desc = "The stabilized bluespace extract will try to redirect you from harm!" - linked_alert.icon_state = "slime_bluespace_on" - - if(healthcheck && (healthcheck - owner.health) > 5) - owner.visible_message("[linked_extract] notices the sudden change in [owner]'s physical health, and activates!") - do_sparks(5,FALSE,owner) - var/F = find_safe_turf(zlevels = owner.z, extended_safety_checks = TRUE) - var/range = 0 - if(!F) - F = get_turf(owner) - range = 50 - if(do_teleport(owner, F, range, channel = TELEPORT_CHANNEL_BLUESPACE)) - to_chat(owner, "[linked_extract] will take some time to re-align you on the bluespace axis.") - do_sparks(5,FALSE,owner) - owner.apply_status_effect(/datum/status_effect/bluespacestabilization) - healthcheck = owner.health - return ..() - -/datum/status_effect/stabilized/sepia - id = "stabilizedsepia" - colour = "sepia" - var/mod = 0 - -/datum/status_effect/stabilized/sepia/tick() - if(prob(50) && mod > -1) - mod-- - owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = -0.5) - else if(mod < 1) - mod++ - // yeah a value of 0 does nothing but replacing the trait in place is cheaper than removing and adding repeatedly - owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = 0) - return ..() - -/datum/status_effect/stabilized/sepia/on_remove() - owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia) - -/datum/status_effect/stabilized/cerulean - id = "stabilizedcerulean" - colour = "cerulean" - var/mob/living/clone - -/datum/status_effect/stabilized/cerulean/on_apply() - var/typepath = owner.type - clone = new typepath(owner.loc) - var/mob/living/carbon/O = owner - var/mob/living/carbon/C = clone - if(istype(C) && istype(O)) - C.real_name = O.real_name - O.dna.transfer_identity(C) - C.updateappearance(mutcolor_update=1) - return ..() - -/datum/status_effect/stabilized/cerulean/tick() - if(owner.stat == DEAD) - if(clone && clone.stat != DEAD) - owner.visible_message("[owner] blazes with brilliant light, [linked_extract] whisking [owner.p_their()] soul away.", - "You feel a warm glow from [linked_extract], and you open your eyes... elsewhere.") - if(owner.mind) - owner.mind.transfer_to(clone) - clone = null - qdel(linked_extract) - if(!clone || clone.stat == DEAD) - to_chat(owner, "[linked_extract] desperately tries to move your soul to a living body, but can't find one!") - qdel(linked_extract) - ..() - -/datum/status_effect/stabilized/cerulean/on_remove() - if(clone) - clone.visible_message("[clone] dissolves into a puddle of goo!") - clone.unequip_everything() - qdel(clone) - -/datum/status_effect/stabilized/pyrite - id = "stabilizedpyrite" - colour = "pyrite" - var/originalcolor - -/datum/status_effect/stabilized/pyrite/on_apply() - originalcolor = owner.color - return ..() - -/datum/status_effect/stabilized/pyrite/tick() - owner.color = rgb(rand(0,255),rand(0,255),rand(0,255)) - return ..() - -/datum/status_effect/stabilized/pyrite/on_remove() - owner.color = originalcolor - -/datum/status_effect/stabilized/red - id = "stabilizedred" - colour = "red" - -/datum/status_effect/stabilized/red/on_apply() - . = ..() - owner.add_movespeed_mod_immunities(type, /datum/movespeed_modifier/equipment_speedmod) - -/datum/status_effect/stabilized/red/on_remove() - owner.remove_movespeed_mod_immunities(type, /datum/movespeed_modifier/equipment_speedmod) - return ..() - -/datum/status_effect/stabilized/green - id = "stabilizedgreen" - colour = "green" - var/datum/dna/originalDNA - var/originalname - -/datum/status_effect/stabilized/green/on_apply() - to_chat(owner, "You feel different...") - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - originalDNA = new H.dna.type - originalname = H.real_name - H.dna.copy_dna(originalDNA) - randomize_human(H) - return ..() - -/datum/status_effect/stabilized/green/tick() //Only occasionally give examiners a warning. - if(prob(50)) - examine_text = "SUBJECTPRONOUN looks a bit green and gooey..." - else - examine_text = null - return ..() - -/datum/status_effect/stabilized/green/on_remove() - to_chat(owner, "You feel more like yourself.") - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - originalDNA.transfer_identity(H) - H.real_name = originalname - H.updateappearance(mutcolor_update=1) - -/datum/status_effect/brokenpeace - id = "brokenpeace" - duration = 1200 - alert_type = null - -/datum/status_effect/pinkdamagetracker - id = "pinkdamagetracker" - duration = -1 - alert_type = null - var/damage = 0 - var/lasthealth - -/datum/status_effect/pinkdamagetracker/tick() - if((lasthealth - owner.health) > 0) - damage += (lasthealth - owner.health) - lasthealth = owner.health - -/datum/status_effect/stabilized/pink - id = "stabilizedpink" - colour = "pink" - var/list/mobs = list() - var/faction_name - -/datum/status_effect/stabilized/pink/on_apply() - faction_name = owner.real_name - return ..() - -/datum/status_effect/stabilized/pink/tick() - for(var/mob/living/simple_animal/M in view(7,get_turf(owner))) - if(!(M in mobs)) - mobs += M - M.apply_status_effect(/datum/status_effect/pinkdamagetracker) - M.faction |= faction_name - for(var/mob/living/simple_animal/M in mobs) - if(!(M in view(7,get_turf(owner)))) - M.faction -= faction_name - M.remove_status_effect(/datum/status_effect/pinkdamagetracker) - mobs -= M - var/datum/status_effect/pinkdamagetracker/C = M.has_status_effect(/datum/status_effect/pinkdamagetracker) - if(istype(C) && C.damage > 0) - C.damage = 0 - owner.apply_status_effect(/datum/status_effect/brokenpeace) - var/HasFaction = FALSE - for(var/i in owner.faction) - if(i == faction_name) - HasFaction = TRUE - - if(HasFaction && owner.has_status_effect(/datum/status_effect/brokenpeace)) - owner.faction -= faction_name - to_chat(owner, "The peace has been broken! Hostile creatures will now react to you!") - if(!HasFaction && !owner.has_status_effect(/datum/status_effect/brokenpeace)) - to_chat(owner, "[linked_extract] pulses, generating a fragile aura of peace.") - owner.faction |= faction_name - return ..() - -/datum/status_effect/stabilized/pink/on_remove() - for(var/mob/living/simple_animal/M in mobs) - M.faction -= faction_name - M.remove_status_effect(/datum/status_effect/pinkdamagetracker) - for(var/i in owner.faction) - if(i == faction_name) - owner.faction -= faction_name - -/datum/status_effect/stabilized/oil - id = "stabilizedoil" - colour = "oil" - examine_text = "SUBJECTPRONOUN smells of sulfer and oil!" - -/datum/status_effect/stabilized/oil/tick() - if(owner.stat == DEAD) - explosion(get_turf(owner),1,2,4,flame_range = 5) - return ..() - -/datum/status_effect/stabilized/black - id = "stabilizedblack" - colour = "black" - var/messagedelivered = FALSE - var/heal_amount = 1 - -/datum/status_effect/stabilized/black/tick() - if(owner.pulling && isliving(owner.pulling) && owner.grab_state == GRAB_KILL) - var/mob/living/M = owner.pulling - if(M.stat == DEAD) - return - if(!messagedelivered) - to_chat(owner,"You feel your hands melt around [M]'s neck and start to drain [M.p_them()] of life.") - to_chat(owner.pulling, "[owner]'s hands melt around your neck, and you can feel your life starting to drain away!") - messagedelivered = TRUE - examine_text = "SUBJECTPRONOUN is draining health from [owner.pulling]!" - var/list/healing_types = list() - if(owner.getBruteLoss() > 0) - healing_types += BRUTE - if(owner.getFireLoss() > 0) - healing_types += BURN - if(owner.getToxLoss() > 0) - healing_types += TOX - if(owner.getCloneLoss() > 0) - healing_types += CLONE - - owner.apply_damage_type(-heal_amount, damagetype=pick(healing_types)) - owner.adjust_nutrition(3) - M.adjustCloneLoss(heal_amount * 1.2) //This way, two people can't just convert each other's damage away. - else - messagedelivered = FALSE - examine_text = null - return ..() - -/datum/status_effect/stabilized/lightpink - id = "stabilizedlightpink" - colour = "light pink" - -/datum/status_effect/stabilized/lightpink/on_apply() - owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/lightpink) - return ..() - -/datum/status_effect/stabilized/lightpink/tick() - for(var/mob/living/carbon/human/H in range(1, get_turf(owner))) - if(H != owner && H.stat != DEAD && H.health <= 0 && !H.reagents.has_reagent(/datum/reagent/medicine/epinephrine)) - to_chat(owner, "[linked_extract] pulses in sync with [H]'s heartbeat, trying to keep [H.p_them()] alive.") - H.reagents.add_reagent(/datum/reagent/medicine/epinephrine,5) - return ..() - -/datum/status_effect/stabilized/lightpink/on_remove() - owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/lightpink) - -/datum/status_effect/stabilized/adamantine - id = "stabilizedadamantine" - colour = "adamantine" - examine_text = "SUBJECTPRONOUN has a strange metallic coating on their skin." - -/datum/status_effect/stabilized/gold - id = "stabilizedgold" - colour = "gold" - var/mob/living/simple_animal/familiar - -/datum/status_effect/stabilized/gold/tick() - var/obj/item/slimecross/stabilized/gold/linked = linked_extract - if(QDELETED(familiar)) - familiar = new linked.mob_type(get_turf(owner.loc)) - familiar.name = linked.mob_name - familiar.del_on_death = TRUE - familiar.copy_languages(owner, LANGUAGE_MASTER) - if(linked.saved_mind) - linked.saved_mind.transfer_to(familiar) - familiar.update_atom_languages() - familiar.ckey = linked.saved_mind.key - else - if(familiar.mind) - linked.saved_mind = familiar.mind - return ..() - -/datum/status_effect/stabilized/gold/on_remove() - if(familiar) - qdel(familiar) - -/datum/status_effect/stabilized/adamantine/on_apply() - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.damage_resistance += 5 - return ..() - -/datum/status_effect/stabilized/adamantine/on_remove() - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.damage_resistance -= 5 - -/datum/status_effect/stabilized/rainbow - id = "stabilizedrainbow" - colour = "rainbow" - -/datum/status_effect/stabilized/rainbow/tick() - if(owner.health <= 0) - var/obj/item/slimecross/stabilized/rainbow/X = linked_extract - if(istype(X)) - if(X.regencore) - X.regencore.afterattack(owner,owner,TRUE) - X.regencore = null - owner.visible_message("[owner] flashes a rainbow of colors, and [owner.p_their()] skin is coated in a milky regenerative goo!") - qdel(src) - qdel(linked_extract) - return ..() diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm deleted file mode 100644 index 2bca49c62913..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm +++ /dev/null @@ -1,38 +0,0 @@ -/* -Slimecrossing Weapons - Weapons added by the slimecrossing system. - Collected here for clarity. -*/ - -//Boneblade - Burning Green -/obj/item/melee/arm_blade/slime - name = "slimy boneblade" - desc = "What remains of the bones in your arm. Incredibly sharp, and painful for both you and your opponents." - force = 22.5 - force_string = "painful" - -/obj/item/melee/arm_blade/slime/attack(mob/living/L, mob/user) - . = ..() - if(prob(20)) - user.force_scream() - -//Adamantine shield - Chilling Adamantine -/obj/item/shield/adamantineshield - name = "adamantine shield" - desc = "A gigantic shield made of solid adamantium." - icon = 'icons/obj/slimecrossing.dmi' - icon_state = "adamshield" - item_state = "adamshield" - w_class = WEIGHT_CLASS_HUGE - armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) - slot_flags = ITEM_SLOT_BACK - block_chance = 50 - force = 0 - throw_range = 1 //How far do you think you're gonna throw a solid crystalline shield...? - throw_speed = 2 - attack_verb = list("bashed","pounded","slammed") - item_flags = SLOWS_WHILE_IN_HAND - -/obj/item/shield/adamantineshield/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, require_twohands=TRUE, force_wielded=15) diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm deleted file mode 100644 index 7d19fb0f8cfd..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/burning.dm +++ /dev/null @@ -1,307 +0,0 @@ -/* -Burning extracts: - Have a unique, primarily offensive effect when - filled with 10u plasma and activated in-hand. -*/ -/obj/item/slimecross/burning - name = "burning extract" - desc = "It's boiling over with barely-contained energy." - effect = "burning" - icon_state = "burning" - -/obj/item/slimecross/burning/Initialize() - . = ..() - create_reagents(10, INJECTABLE | DRAWABLE) - -/obj/item/slimecross/burning/attack_self(mob/user) - if(!reagents.has_reagent(/datum/reagent/toxin/plasma,10)) - to_chat(user, "This extract needs to be full of plasma to activate!") - return - reagents.remove_reagent(/datum/reagent/toxin/plasma,10) - to_chat(user, "You squeeze the extract, and it absorbs the plasma!") - playsound(src, 'sound/effects/bubbles.ogg', 50, TRUE) - playsound(src, 'sound/magic/fireball.ogg', 50, TRUE) - do_effect(user) - -/obj/item/slimecross/burning/proc/do_effect(mob/user) //If, for whatever reason, you don't want to delete the extract, don't do ..() - qdel(src) - return - -/obj/item/slimecross/burning/grey - colour = "grey" - effect_desc = "Creates a hungry and speedy slime that will love you forever." - -/obj/item/slimecross/burning/grey/do_effect(mob/user) - var/mob/living/simple_animal/slime/S = new(get_turf(user),"grey") - S.visible_message("A baby slime emerges from [src], and it nuzzles [user] before burbling hungrily!") - S.set_friendship(user, 20) //Gas, gas, gas - S.bodytemperature = T0C + 400 //We gonna step on the gas. - S.set_nutrition(S.get_hunger_nutrition()) //Tonight, we fight! - ..() - -/obj/item/slimecross/burning/orange - colour = "orange" - effect_desc = "Expels pepperspray in a radius when activated." - -/obj/item/slimecross/burning/orange/do_effect(mob/user) - user.visible_message("[src] boils over with a caustic gas!") - var/datum/reagents/R = new/datum/reagents(100) - R.add_reagent(/datum/reagent/consumable/condensedcapsaicin, 100) - - var/datum/effect_system/smoke_spread/chem/smoke = new - smoke.set_up(R, 7, get_turf(user)) - smoke.start() - ..() - -/obj/item/slimecross/burning/purple - colour = "purple" - effect_desc = "Creates a clump of invigorating gel, it has healing properties and makes you feel good." - -/obj/item/slimecross/burning/purple/do_effect(mob/user) - user.visible_message("[src] fills with a bubbling liquid!") - new /obj/item/slimecrossbeaker/autoinjector/slimestimulant(get_turf(user)) - ..() - -/obj/item/slimecross/burning/blue - colour = "blue" - effect_desc = "Freezes the floor around you and chills nearby people." - -/obj/item/slimecross/burning/blue/do_effect(mob/user) - user.visible_message("[src] flash-freezes the area!") - for(var/turf/open/T in range(3, get_turf(user))) - T.MakeSlippery(TURF_WET_PERMAFROST, min_wet_time = 10, wet_time_to_add = 5) - for(var/mob/living/carbon/M in range(5, get_turf(user))) - if(M != user && iscarbon(M)) - var/mob/living/carbon/C = M - M.bodytemperature = C.dna.species.bodytemp_cold_damage_limit + 10 //Not quite cold enough to hurt. - to_chat(M, "You feel a chill run down your spine, and the floor feels a bit slippery with frost...") - ..() - -/obj/item/slimecross/burning/metal - colour = "metal" - effect_desc = "Instantly destroys walls around you." - -/obj/item/slimecross/burning/metal/do_effect(mob/user) - for(var/turf/closed/wall/W in range(1,get_turf(user))) - W.dismantle_wall(devastated = TRUE) - playsound(W, 'sound/effects/break_stone.ogg', 50, TRUE) - user.visible_message("[src] pulses violently, and shatters the walls around it!") - ..() - -/obj/item/slimecross/burning/yellow - colour = "yellow" - effect_desc = "Electrocutes people near you." - -/obj/item/slimecross/burning/yellow/do_effect(mob/user) - user.visible_message("[src] explodes into an electrical field!") - playsound(get_turf(src), 'sound/weapons/zapbang.ogg', 50, TRUE) - for(var/mob/living/M in range(4,get_turf(user))) - if(M != user) - var/mob/living/carbon/C = M - if(istype(C)) - C.electrocute_act(25,src) - else - M.adjustFireLoss(25) - to_chat(M, "You feel a sharp electrical pulse!") - ..() - -/obj/item/slimecross/burning/darkpurple - colour = "dark purple" - effect_desc = "Creates a cloud of plasma." - -/obj/item/slimecross/burning/darkpurple/do_effect(mob/user) - user.visible_message("[src] sublimates into a cloud of plasma!") - var/turf/T = get_turf(user) - T.atmos_spawn_air("plasma=60") - ..() - -/obj/item/slimecross/burning/darkblue - colour = "dark blue" - effect_desc = "Expels a burst of chilling smoke while also filling you with cryoxadone." - -/obj/item/slimecross/burning/darkblue/do_effect(mob/user) - user.visible_message("[src] releases a burst of chilling smoke!") - var/datum/reagents/R = new/datum/reagents(100) - R.add_reagent(/datum/reagent/consumable/frostoil, 40) - user.reagents.add_reagent(/datum/reagent/medicine/cryoxadone,10) - var/datum/effect_system/smoke_spread/chem/smoke = new - smoke.set_up(R, 7, get_turf(user)) - smoke.start() - ..() - -/obj/item/slimecross/burning/silver - colour = "silver" - effect_desc = "Creates a few pieces of slime jelly laced food." - -/obj/item/slimecross/burning/silver/do_effect(mob/user) - var/amount = rand(3,6) - var/list/turfs = list() - for(var/turf/open/T in range(1,get_turf(user))) - turfs += T - for(var/i = 0, i < amount, i++) - var/path = get_random_food() - var/obj/item/O = new path(pick(turfs)) - O.reagents.add_reagent(/datum/reagent/toxin/slimejelly,5) //Oh god it burns - if(prob(50)) - O.desc += " It smells strange..." - user.visible_message("[src] produces a few pieces of food!") - ..() - -/obj/item/slimecross/burning/bluespace - colour = "bluespace" - effect_desc = "Teleports anyone directly next to you." - -/obj/item/slimecross/burning/bluespace/do_effect(mob/user) - user.visible_message("[src] sparks, and lets off a shockwave of bluespace energy!") - for(var/mob/living/L in range(1, get_turf(user))) - if(L != user) - do_teleport(L, get_turf(L), 6, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) //Somewhere between the effectiveness of fake and real BS crystal - new /obj/effect/particle_effect/sparks(get_turf(L)) - playsound(get_turf(L), "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - ..() - -/obj/item/slimecross/burning/sepia - colour = "sepia" - effect_desc = "Turns into a special camera that rewinds time when used." - -/obj/item/slimecross/burning/sepia/do_effect(mob/user) - user.visible_message("[src] shapes itself into a camera!") - new /obj/item/camera/rewind(get_turf(user)) - ..() - -/obj/item/slimecross/burning/cerulean - colour = "cerulean" - effect_desc = "Produces an extract cloning potion, which copies an extract, as well as its extra uses." - -/obj/item/slimecross/burning/cerulean/do_effect(mob/user) - user.visible_message("[src] produces a potion!") - new /obj/item/slimepotion/extract_cloner(get_turf(user)) - ..() - -/obj/item/slimecross/burning/pyrite - colour = "pyrite" - effect_desc = "Shatters all lights in the current room." - -/obj/item/slimecross/burning/pyrite/do_effect(mob/user) - user.visible_message("[src] releases a colorful wave of energy, which shatters the lights!") - var/area/A = get_area(user.loc) - for(var/obj/machinery/light/L in A) //Shamelessly copied from the APC effect. - L.on = TRUE - L.break_light_tube() - L.on = FALSE - stoplag() - ..() - -/obj/item/slimecross/burning/red - colour = "red" - effect_desc = "Makes nearby slimes rabid, and they'll also attack their friends." - -/obj/item/slimecross/burning/red/do_effect(mob/user) - user.visible_message("[src] pulses a hazy red aura for a moment, which wraps around [user]!") - for(var/mob/living/simple_animal/slime/S in view(7, get_turf(user))) - if(user in S.Friends) - var/friendliness = S.Friends[user] - S.clear_friends() - S.set_friendship(user, friendliness) - else - S.clear_friends() - S.rabid = 1 - S.visible_message("The [S] is driven into a dangerous frenzy!") - ..() - -/obj/item/slimecross/burning/green - colour = "green" - effect_desc = "The user gets a dull arm blade in the hand it is used in." - -/obj/item/slimecross/burning/green/do_effect(mob/user) - var/which_hand = "l_hand" - if(!(user.active_hand_index % 2)) - which_hand = "r_hand" - var/mob/living/L = user - if(!istype(user)) - return - var/obj/item/held = L.get_active_held_item() //This should be itself, but just in case... - L.dropItemToGround(held) - var/obj/item/melee/arm_blade/slime/blade = new(user) - if(!L.put_in_hands(blade)) - qdel(blade) - user.visible_message("[src] melts onto [user]'s arm, boiling the flesh horribly!") - else - user.visible_message("[src] sublimates the flesh around [user]'s arm, transforming the bone into a gruesome blade!") - user.force_scream() - L.apply_damage(30,BURN,which_hand) - ..() - -/obj/item/slimecross/burning/pink - colour = "pink" - effect_desc = "Creates a beaker of synthpax." - -/obj/item/slimecross/burning/pink/do_effect(mob/user) - user.visible_message("[src] shrinks into a small, gel-filled pellet!") - new /obj/item/slimecrossbeaker/pax(get_turf(user)) - ..() - -/obj/item/slimecross/burning/gold - colour = "gold" - effect_desc = "Creates a gank squad of monsters that are friendly to the user." - -/obj/item/slimecross/burning/gold/do_effect(mob/user) - user.visible_message("[src] shudders violently, and summons an army for [user]!") - for(var/i in 1 to 3) //Less than gold normally does, since it's safer and faster. - var/mob/living/simple_animal/S = create_random_mob(get_turf(user), HOSTILE_SPAWN) - S.faction |= "[REF(user)]" - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(S, pick(NORTH,SOUTH,EAST,WEST)) - ..() - -/obj/item/slimecross/burning/oil - colour = "oil" - effect_desc = "Creates an explosion after a few seconds." - -/obj/item/slimecross/burning/oil/do_effect(mob/user) - user.visible_message("[user] activates [src]. It's going to explode!", "You activate [src]. It crackles in anticipation") - addtimer(CALLBACK(src, PROC_REF(boom)), 50) - -/obj/item/slimecross/burning/oil/proc/boom() - var/turf/T = get_turf(src) - playsound(T, 'sound/effects/explosion2.ogg', 200, TRUE) - for(var/mob/living/M in range(2, T)) - new /obj/effect/temp_visual/explosion(get_turf(M)) - M.ex_act(EXPLODE_HEAVY) - qdel(src) - -/obj/item/slimecross/burning/black - colour = "black" - effect_desc = "Transforms the user into a slime. They can transform back at will and do not lose any items." - -/obj/item/slimecross/burning/black/do_effect(mob/user) - var/mob/living/L = user - if(!istype(L)) - return - user.visible_message("[src] absorbs [user], transforming [user.p_them()] into a slime!") - var/obj/effect/proc_holder/spell/targeted/shapeshift/slimeform/S = new() - S.remove_on_restore = TRUE - user.mind.AddSpell(S) - S.cast(list(user),user) - ..() - -/obj/item/slimecross/burning/lightpink - colour = "light pink" - effect_desc = "Paxes everyone in sight." - -/obj/item/slimecross/burning/lightpink/do_effect(mob/user) - user.visible_message("[src] lets off a hypnotizing pink glow!") - for(var/mob/living/carbon/C in view(7, get_turf(user))) - C.reagents.add_reagent(/datum/reagent/pax,5) - ..() - -/obj/item/slimecross/burning/adamantine - colour = "adamantine" - effect_desc = "Creates a mighty adamantine shield." - -/obj/item/slimecross/burning/adamantine/do_effect(mob/user) - user.visible_message("[src] crystallizes into a large shield!") - new /obj/item/shield/adamantineshield(get_turf(user)) - ..() - diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm deleted file mode 100644 index f01b148d4d5e..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/charged.dm +++ /dev/null @@ -1,272 +0,0 @@ -/* -Charged extracts: - Have a unique, effect when filled with - 10u plasma and activated in-hand, related to their - normal extract effect. -*/ -/obj/item/slimecross/charged - name = "charged extract" - desc = "It sparks with electric power." - effect = "charged" - icon_state = "charged" - -/obj/item/slimecross/charged/Initialize() - . = ..() - create_reagents(10, INJECTABLE | DRAWABLE) - -/obj/item/slimecross/charged/attack_self(mob/user) - if(!reagents.has_reagent(/datum/reagent/toxin/plasma,10)) - to_chat(user, "This extract needs to be full of plasma to activate!") - return - reagents.remove_reagent(/datum/reagent/toxin/plasma,10) - to_chat(user, "You squeeze the extract, and it absorbs the plasma!") - playsound(src, 'sound/effects/bubbles.ogg', 50, TRUE) - playsound(src, 'sound/effects/light_flicker.ogg', 50, TRUE) - do_effect(user) - -/obj/item/slimecross/charged/proc/do_effect(mob/user) //If, for whatever reason, you don't want to delete the extract, don't do ..() - qdel(src) - return - -/obj/item/slimecross/charged/grey - colour = "grey" - effect_desc = "Produces a slime reviver potion, which revives dead slimes." - -/obj/item/slimecross/charged/grey/do_effect(mob/user) - new /obj/item/slimepotion/slime_reviver(get_turf(user)) - user.visible_message("[src] distills into a potion!") - ..() - -/obj/item/slimecross/charged/orange - colour = "orange" - effect_desc = "Instantly makes a large burst of flame for a moment." - -/obj/item/slimecross/charged/orange/do_effect(mob/user) - for(var/turf/turf in range(5,get_turf(user))) - if(!locate(/obj/effect/hotspot) in turf) - new /obj/effect/hotspot(turf) - ..() - -/obj/item/slimecross/charged/purple - colour = "purple" - effect_desc = "Creates a packet of omnizine." - -/obj/item/slimecross/charged/purple/do_effect(mob/user) - new /obj/item/slimecrossbeaker/omnizine(get_turf(user)) - user.visible_message("[src] sparks, and floods with a regenerative solution!") - ..() - -/obj/item/slimecross/charged/blue - colour = "blue" - effect_desc = "Creates a potion that neuters the mutation chance of a slime, which passes on to new generations." - -/obj/item/slimecross/charged/blue/do_effect(mob/user) - new /obj/item/slimepotion/slime/chargedstabilizer(get_turf(user)) - user.visible_message("[src] distills into a potion!") - ..() - -/obj/item/slimecross/charged/metal - colour = "metal" - effect_desc = "Produces a bunch of metal and plasteel." - -/obj/item/slimecross/charged/metal/do_effect(mob/user) - new /obj/item/stack/sheet/metal(get_turf(user), 25) - new /obj/item/stack/sheet/plasteel(get_turf(user), 10) - user.visible_message("[src] grows into a plethora of metals!") - ..() - -/obj/item/slimecross/charged/yellow - colour = "yellow" - effect_desc = "Creates a hypercharged slime cell battery, which has high capacity and recharges constantly at a very fast rate." - -/obj/item/slimecross/charged/yellow/do_effect(mob/user) - new /obj/item/stock_parts/cell/high/slime/hypercharged(get_turf(user)) - user.visible_message("[src] sparks violently, and swells with electric power!") - ..() - -/obj/item/slimecross/charged/darkpurple - colour = "dark purple" - effect_desc = "Creates several sheets of plasma." - -/obj/item/slimecross/charged/darkpurple/do_effect(mob/user) - new /obj/item/stack/sheet/mineral/plasma(get_turf(user), 10) - user.visible_message("[src] produces a large amount of plasma!") - ..() - -/obj/item/slimecross/charged/darkblue - colour = "dark blue" - effect_desc = "Produces a pressure proofing potion." - -/obj/item/slimecross/charged/darkblue/do_effect(mob/user) - new /obj/item/slimepotion/spaceproof(get_turf(user)) - user.visible_message("[src] distills into a potion!") - ..() - -/obj/item/slimecross/charged/silver - colour = "silver" - effect_desc = "Creates a slime cake and some drinks." - -/obj/item/slimecross/charged/silver/do_effect(mob/user) - new /obj/item/food/cake/slimecake(get_turf(user)) - for(var/i in 1 to 10) - var/drink_type = get_random_drink() - new drink_type(get_turf(user)) - user.visible_message("[src] produces a party's worth of cake and drinks!") - ..() - -/obj/item/slimecross/charged/bluespace - colour = "bluespace" - effect_desc = "Makes a bluespace polycrystal." - -/obj/item/slimecross/charged/bluespace/do_effect(mob/user) - new /obj/item/stack/sheet/bluespace_crystal(get_turf(user), 10) - user.visible_message("[src] produces several sheets of polycrystal!") - ..() - -/obj/item/slimecross/charged/sepia - colour = "sepia" - effect_desc = "Creates a camera obscura." - -/obj/item/slimecross/charged/sepia/do_effect(mob/user) - new /obj/item/camera/spooky(get_turf(user)) - user.visible_message("[src] flickers in a strange, ethereal manner, and produces a camera!") - ..() - -/obj/item/slimecross/charged/cerulean - colour = "cerulean" - effect_desc = "Creates an extract enhancer, giving whatever it's used on five more uses." - -/obj/item/slimecross/charged/cerulean/do_effect(mob/user) - new /obj/item/slimepotion/enhancer/max(get_turf(user)) - user.visible_message("[src] distills into a potion!") - ..() - -/obj/item/slimecross/charged/pyrite - colour = "pyrite" - effect_desc = "Creates bananium. Oh no." - -/obj/item/slimecross/charged/pyrite/do_effect(mob/user) - new /obj/item/stack/sheet/mineral/hidden/hellstone(get_turf(user), 10) - user.visible_message("[src] solidifies with a horrifying banana stench!") - ..() - -/obj/item/slimecross/charged/red - colour = "red" - effect_desc = "Produces a lavaproofing potion" - -/obj/item/slimecross/charged/red/do_effect(mob/user) - new /obj/item/slimepotion/lavaproof(get_turf(user)) - user.visible_message("[src] distills into a potion!") - ..() - -/obj/item/slimecross/charged/green - colour = "green" - effect_desc = "Lets you choose what slime species you want to be." - -/obj/item/slimecross/charged/green/do_effect(mob/user) - var/mob/living/carbon/human/H = user - if(!istype(H)) - to_chat(user, "You must be a humanoid to use this!") - return - var/racechoice = input(H, "Choose your slime subspecies.", "Slime Selection") as null|anything in sortList(subtypesof(/datum/species/jelly), /proc/cmp_typepaths_asc) - if(!racechoice) - to_chat(user, "You decide not to become a slime for now.") - return - if(!user.canUseTopic(src, BE_CLOSE)) - return - H.set_species(racechoice, icon_update=1) - H.visible_message("[H] suddenly shifts form as [src] dissolves into [H.p_their()] skin!") - ..() - -/obj/item/slimecross/charged/pink - colour = "pink" - effect_desc = "Produces a... lovepotion... no ERP." - -/obj/item/slimecross/charged/pink/do_effect(mob/user) - new /obj/item/slimepotion/lovepotion(get_turf(user)) - user.visible_message("[src] distills into a potion!") - ..() - -/obj/item/slimecross/charged/gold - colour = "gold" - effect_desc = "Slowly spawns 10 hostile monsters." - var/max_spawn = 10 - var/spawned = 0 - -/obj/item/slimecross/charged/gold/do_effect(mob/user) - user.visible_message("[src] starts shuddering violently!") - addtimer(CALLBACK(src, PROC_REF(startTimer)), 50) - -/obj/item/slimecross/charged/gold/proc/startTimer() - START_PROCESSING(SSobj, src) - -/obj/item/slimecross/charged/gold/process() - visible_message("[src] lets off a spark, and produces a living creature!") - new /obj/effect/particle_effect/sparks(get_turf(src)) - playsound(get_turf(src), "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - create_random_mob(get_turf(src), HOSTILE_SPAWN) - spawned++ - if(spawned >= max_spawn) - visible_message("[src] collapses into a puddle of goo.") - qdel(src) - -/obj/item/slimecross/charged/gold/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/slimecross/charged/oil - colour = "oil" - effect_desc = "Creates an explosion after a few seconds." - -/obj/item/slimecross/charged/oil/do_effect(mob/user) - user.visible_message("[src] begins to shake with rapidly increasing force!") - addtimer(CALLBACK(src, PROC_REF(boom)), 50) - -/obj/item/slimecross/charged/oil/proc/boom() - explosion(get_turf(src), 2, 3, 4) //Much smaller effect than normal oils, but devastatingly strong where it does hit. - qdel(src) - -/obj/item/slimecross/charged/black - colour = "black" - effect_desc = "Randomizes the user's species." - -/obj/item/slimecross/charged/black/do_effect(mob/user) - var/mob/living/carbon/human/H = user - if(!istype(H)) - to_chat(user, "You have to be able to have a species to get your species changed.") - return - var/list/allowed_species = list() - for(var/stype in subtypesof(/datum/species)) - var/datum/species/X = stype - if(initial(X.changesource_flags) & SLIME_EXTRACT) - allowed_species += stype - - var/datum/species/changed = pick(allowed_species) - if(changed) - H.set_species(changed, icon_update = 1) - to_chat(H, "You feel very different!") - ..() - -/obj/item/slimecross/charged/lightpink - colour = "light pink" - effect_desc = "Produces a pacification potion, which works on monsters and humanoids." - -/obj/item/slimecross/charged/lightpink/do_effect(mob/user) - new /obj/item/slimepotion/peacepotion(get_turf(user)) - user.visible_message("[src] distills into a potion!") - ..() - -/obj/item/slimecross/charged/adamantine - colour = "adamantine" - effect_desc = "Does nothing. Sorry :)" - -/obj/item/slimecross/charged/rainbow - colour = "rainbow" - effect_desc = "Produces three living slimes of random colors." - -/obj/item/slimecross/charged/rainbow/do_effect(mob/user) - user.visible_message("[src] swells and splits into three new slimes!") - for(var/i in 1 to 3) - var/mob/living/simple_animal/slime/S = new(get_turf(user)) - S.random_colour() - ..() diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm deleted file mode 100644 index 8b2aa42f0487..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/chilling.dm +++ /dev/null @@ -1,301 +0,0 @@ -/* -Chilling extracts: - Have a unique, primarily defensive effect when - filled with 10u plasma and activated in-hand. -*/ -/obj/item/slimecross/chilling - name = "chilling extract" - desc = "It's cold to the touch, as if frozen solid." - effect = "chilling" - icon_state = "chilling" - -/obj/item/slimecross/chilling/Initialize() - . = ..() - create_reagents(10, INJECTABLE | DRAWABLE) - -/obj/item/slimecross/chilling/attack_self(mob/user) - if(!reagents.has_reagent(/datum/reagent/toxin/plasma,10)) - to_chat(user, "This extract needs to be full of plasma to activate!") - return - reagents.remove_reagent(/datum/reagent/toxin/plasma,10) - to_chat(user, "You squeeze the extract, and it absorbs the plasma!") - playsound(src, 'sound/effects/bubbles.ogg', 50, TRUE) - playsound(src, 'sound/effects/glassbr1.ogg', 50, TRUE) - do_effect(user) - -/obj/item/slimecross/chilling/proc/do_effect(mob/user) //If, for whatever reason, you don't want to delete the extract, don't do ..() - qdel(src) - return - -/obj/item/slimecross/chilling/grey - colour = "grey" - effect_desc = "Creates some slime barrier cubes. When used they create slimy barricades." - -/obj/item/slimecross/chilling/grey/do_effect(mob/user) - user.visible_message("[src] produces a few small, grey cubes") - for(var/i in 1 to 3) - new /obj/item/barriercube(get_turf(user)) - ..() - -/obj/item/slimecross/chilling/orange - colour = "orange" - effect_desc = "Creates a ring of fire one tile away from the user." - -/obj/item/slimecross/chilling/orange/do_effect(mob/user) - user.visible_message("[src] shatters, and lets out a jet of heat!") - for(var/turf/T in orange(get_turf(user),2)) - if(get_dist(get_turf(user), T) > 1) - new /obj/effect/hotspot(T) - ..() - -/obj/item/slimecross/chilling/purple - colour = "purple" - effect_desc = "Injects everyone in the area with some regenerative jelly." - -/obj/item/slimecross/chilling/purple/do_effect(mob/user) - var/area/A = get_area(get_turf(user)) - if(A.outdoors) - to_chat(user, "[src] can't affect such a large area.") - return - user.visible_message("[src] shatters, and a healing aura fills the room briefly.") - for(var/mob/living/carbon/C in A) - C.reagents.add_reagent(/datum/reagent/medicine/regen_jelly,10) - ..() - -/obj/item/slimecross/chilling/blue - colour = "blue" - effect_desc = "Creates a rebreather, a tankless mask." - -/obj/item/slimecross/chilling/blue/do_effect(mob/user) - user.visible_message("[src] cracks, and spills out a liquid goo, which reforms into a mask!") - new /obj/item/clothing/mask/nobreath(get_turf(user)) - ..() - -/obj/item/slimecross/chilling/metal - colour = "metal" - effect_desc = "Temporarily surrounds the user with unbreakable walls." - -/obj/item/slimecross/chilling/metal/do_effect(mob/user) - user.visible_message("[src] melts like quicksilver, and surrounds [user] in a wall!") - for(var/turf/T in orange(get_turf(user),1)) - if(get_dist(get_turf(user), T) > 0) - new /obj/effect/forcefield/slimewall(T) - ..() - -/obj/item/slimecross/chilling/yellow - colour = "yellow" - effect_desc = "Recharges the room's APC by 50%." - -/obj/item/slimecross/chilling/yellow/do_effect(mob/user) - var/area/A = get_area(get_turf(user)) - user.visible_message("[src] shatters, and a the air suddenly feels charged for a moment.") - for(var/obj/machinery/power/apc/C in A) - if(C.cell) - C.cell.charge = min(C.cell.charge + C.cell.maxcharge/2, C.cell.maxcharge) - ..() - -/obj/item/slimecross/chilling/darkpurple - colour = "dark purple" - effect_desc = "Removes all plasma gas in the area." - -/obj/item/slimecross/chilling/darkpurple/do_effect(mob/user) - var/area/A = get_area(get_turf(user)) - if(A.outdoors) - to_chat(user, "[src] can't affect such a large area.") - return - var/filtered = FALSE - for(var/turf/open/T in A) - var/datum/gas_mixture/G = T.air - if(istype(G)) - G.set_moles(GAS_PLASMA, 0) - filtered = TRUE - T.air_update_turf() - if(filtered) - user.visible_message("Cracks spread throughout [src], and some air is sucked in!") - else - user.visible_message("[src] cracks, but nothing happens.") - ..() - -/obj/item/slimecross/chilling/darkblue - colour = "dark blue" - effect_desc = "Seals the user in a protective block of ice." - -/obj/item/slimecross/chilling/darkblue/do_effect(mob/user) - if(isliving(user)) - user.visible_message("[src] freezes over [user]'s entire body!") - var/mob/living/M = user - M.apply_status_effect(/datum/status_effect/frozenstasis) - ..() - -/obj/item/slimecross/chilling/silver - colour = "silver" - effect_desc = "Creates several ration packs." - -/obj/item/slimecross/chilling/silver/do_effect(mob/user) - user.visible_message("[src] crumbles into icy powder, leaving behind several emergency food supplies!") - var/amount = rand(5, 10) - for(var/i in 1 to amount) - new /obj/item/reagent_containers/food/snacks/rationpack(get_turf(user)) - ..() - -/obj/item/slimecross/chilling/bluespace - colour = "bluespace" - effect_desc = "Touching people with this extract adds them to a list, when it is activated it teleports everyone on that list to the user." - var/list/allies = list() - var/active = FALSE - -/obj/item/slimecross/chilling/bluespace/afterattack(atom/target, mob/user, proximity) - if(!proximity || !isliving(target) || active) - return - if(target in allies) - allies -= target - to_chat(user, "You unlink [src] with [target].") - else - allies |= target - to_chat(user, "You link [src] with [target].") - return - -/obj/item/slimecross/chilling/bluespace/do_effect(mob/user) - if(allies.len <= 0) - to_chat(user, "[src] is not linked to anyone!") - return - to_chat(user, "You feel [src] pulse as it begins charging bluespace energies...") - active = TRUE - for(var/mob/living/M in allies) - var/datum/status_effect/slimerecall/S = M.apply_status_effect(/datum/status_effect/slimerecall) - S.target = user - if(do_after(user, 100, target=src)) - to_chat(user, "[src] shatters as it tears a hole in reality, snatching the linked individuals from the void!") - for(var/mob/living/M in allies) - var/datum/status_effect/slimerecall/S = M.has_status_effect(/datum/status_effect/slimerecall) - M.remove_status_effect(S) - else - to_chat(user, "[src] falls dark, dissolving into nothing as the energies fade away.") - for(var/mob/living/M in allies) - var/datum/status_effect/slimerecall/S = M.has_status_effect(/datum/status_effect/slimerecall) - if(istype(S)) - S.interrupted = TRUE - M.remove_status_effect(S) - ..() - -/obj/item/slimecross/chilling/sepia - colour = "sepia" - effect_desc = "Touching someone with it adds/removes them from a list. Activating the extract stops time for 7 seconds, and everyone on the list is immune, except the user." - var/list/allies = list() - -/obj/item/slimecross/chilling/sepia/afterattack(atom/target, mob/user, proximity) - if(!proximity || !isliving(target)) - return - if(target in allies) - allies -= target - to_chat(user, "You unlink [src] with [target].") - else - allies |= target - to_chat(user, "You link [src] with [target].") - return - -/obj/item/slimecross/chilling/sepia/do_effect(mob/user) - user.visible_message("[src] shatters, freezing time itself!") - allies -= user //support class - new /obj/effect/timestop(get_turf(user), 2, 70, allies) - ..() - -/obj/item/slimecross/chilling/cerulean - colour = "cerulean" - effect_desc = "Creates a flimsy copy of the user, that they control." - -/obj/item/slimecross/chilling/cerulean/do_effect(mob/user) - if(isliving(user)) - user.visible_message("[src] creaks and shifts into a clone of [user]!") - var/mob/living/M = user - M.apply_status_effect(/datum/status_effect/slime_clone) - ..() - -/obj/item/slimecross/chilling/pyrite - colour = "pyrite" - effect_desc = "Creates a pair of Prism Glasses, which allow the wearer to place colored light crystals." - -/obj/item/slimecross/chilling/pyrite/do_effect(mob/user) - user.visible_message("[src] does nothing sorry lol!") - ..() - -/obj/item/slimecross/chilling/red - colour = "red" - effect_desc = "Pacifies every slime in your vacinity." - -/obj/item/slimecross/chilling/red/do_effect(mob/user) - var/slimesfound = FALSE - for(var/mob/living/simple_animal/slime/S in view(get_turf(user), 7)) - slimesfound = TRUE - S.docile = TRUE - if(slimesfound) - user.visible_message("[src] lets out a peaceful ring as it shatters, and nearby slimes seem calm.") - else - user.visible_message("[src] lets out a peaceful ring as it shatters, but nothing happens...") - ..() - -/obj/item/slimecross/chilling/pink - colour = "pink" - effect_desc = "Creates a slime corgi puppy." - -/obj/item/slimecross/chilling/pink/do_effect(mob/user) - user.visible_message("[src] cracks like an egg, and an adorable puppy comes tumbling out!") - new /mob/living/simple_animal/pet/dog/corgi/puppy/slime(get_turf(user)) - ..() - -/obj/item/slimecross/chilling/gold - colour = "gold" - effect_desc = "Produces a golden capture device" - -/obj/item/slimecross/chilling/gold/do_effect(mob/user) - user.visible_message("[src] lets off golden light as it melts and reforms into an egg-like device!") - new /obj/item/capturedevice(get_turf(user)) - ..() - -/obj/item/slimecross/chilling/oil - colour = "oil" - effect_desc = "It creates a weak, but wide-ranged explosion." - -/obj/item/slimecross/chilling/oil/do_effect(mob/user) - user.visible_message("[src] begins to shake with muted intensity!") - addtimer(CALLBACK(src, PROC_REF(boom)), 50) - -/obj/item/slimecross/chilling/oil/proc/boom() - explosion(get_turf(src), -1, -1, 10, 0) //Large radius, but mostly light damage, and no flash. - qdel(src) - -/obj/item/slimecross/chilling/black - colour = "black" - effect_desc = "Does nothing. :)" - -/obj/item/slimecross/chilling/lightpink - colour = "light pink" - effect_desc = "Creates a Heroine Bud, a special flower that pacifies whoever wears it on their head. They will not be able to take it off without help." - -/obj/item/slimecross/chilling/lightpink/do_effect(mob/user) - user.visible_message("[src] blooms into a beautiful flower!") - new /obj/item/clothing/head/peaceflower(get_turf(user)) - ..() - -/obj/item/slimecross/chilling/adamantine - colour = "adamantine" - effect_desc = "Solidifies into a set of adamantine armor." - -/obj/item/slimecross/chilling/adamantine/do_effect(mob/user) - user.visible_message("[src] creaks and breaks as it shifts into a heavy set of armor!") - new /obj/item/clothing/suit/armor/heavy/adamantine(get_turf(user)) - ..() - -/obj/item/slimecross/chilling/rainbow - colour = "rainbow" - effect_desc = "Makes an unpassable wall in every door in the area." - -/obj/item/slimecross/chilling/rainbow/do_effect(mob/user) - var/area/area = get_area(user) - if(area.outdoors) - to_chat(user, "[src] can't affect such a large area.") - return - user.visible_message("[src] reflects an array of dazzling colors and light, energy rushing to nearby doors!") - for(var/obj/machinery/door/airlock/door in area) - new /obj/effect/forcefield/slimewall/rainbow(door.loc) - return ..() diff --git a/code/modules/research/xenobiology/crossbreeding/consuming.dm b/code/modules/research/xenobiology/crossbreeding/consuming.dm deleted file mode 100644 index f2a162af3aac..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/consuming.dm +++ /dev/null @@ -1,460 +0,0 @@ -/* -Consuming extracts: - Can eat food items. - After consuming enough, produces special cookies. -*/ -/obj/item/slimecross/consuming - name = "consuming extract" - desc = "It hungers... for more." //My slimecross has finally decided to eat... my buffet! - icon_state = "consuming" - effect = "consuming" - var/nutriment_eaten = 0 - var/nutriment_required = 10 - var/cooldown = 600 //1 minute. - var/last_produced = 0 - var/cookies = 5 //Number of cookies to spawn - var/cookietype = /obj/item/slime_cookie - -/obj/item/slimecross/consuming/attackby(obj/item/O, mob/user) - if(istype(O,/obj/item/reagent_containers/food/snacks)) - if(last_produced + cooldown > world.time) - to_chat(user, "[src] is still digesting after its last meal!") - return - var/datum/reagent/N = O.reagents.has_reagent(/datum/reagent/consumable/nutriment) - if(N) - nutriment_eaten += N.volume - to_chat(user, "[src] opens up and swallows [O] whole!") - qdel(O) - playsound(src, 'sound/items/eatfood.ogg', 20, TRUE) - else - to_chat(user, "[src] burbles unhappily at the offering.") - if(nutriment_eaten >= nutriment_required) - nutriment_eaten = 0 - user.visible_message("[src] swells up and produces a small pile of cookies!") - playsound(src, 'sound/effects/splat.ogg', 40, TRUE) - last_produced = world.time - for(var/i in 1 to cookies) - var/obj/item/S = spawncookie() - S.pixel_x = base_pixel_x + rand(-5, 5) - S.pixel_y = base_pixel_y + rand(-5, 5) - return - ..() - -/obj/item/slimecross/consuming/proc/spawncookie() - return new cookietype(get_turf(src)) - -/obj/item/slime_cookie //While this technically acts like food, it's so removed from it that I made it its' own type. - name = "error cookie" - desc = "A weird slime cookie. You shouldn't see this." - icon = 'icons/obj/food/slimecookies.dmi' - var/taste = "error" - var/nutrition = 5 - icon_state = "base" - force = 0 - w_class = WEIGHT_CLASS_TINY - throwforce = 0 - throw_speed = 3 - throw_range = 6 - -/obj/item/slime_cookie/proc/do_effect(mob/living/M, mob/user) - return - -/obj/item/slime_cookie/attack(mob/living/M, mob/user) - var/fed = FALSE - if(M == user) - M.visible_message("[user] eats [src]!", "You eat [src].") - fed = TRUE - else - M.visible_message("[user] tries to force [M] to eat [src]!", "[user] tries to force you to eat [src]!") - if(do_after(user, 20, target = M)) - fed = TRUE - M.visible_message("[user] forces [M] to eat [src]!", "[user] forces you to eat [src].") - if(fed) - var/mob/living/carbon/human/H = M - - if(!istype(H) || !HAS_TRAIT(H, TRAIT_AGEUSIA)) - to_chat(M, "Tastes like [taste].") - playsound(get_turf(M), 'sound/items/eatfood.ogg', 20, TRUE) - if(nutrition) - M.reagents.add_reagent(/datum/reagent/consumable/nutriment,nutrition) - do_effect(M, user) - qdel(src) - return - ..() - -/obj/item/slimecross/consuming/grey - colour = "grey" - effect_desc = "Creates a slime cookie." - cookietype = /obj/item/slime_cookie/grey - -/obj/item/slime_cookie/grey - name = "slime cookie" - desc = "A grey-ish transparent cookie. Nutritious, probably." - icon_state = "grey" - taste = "goo" - nutrition = 15 - -/obj/item/slimecross/consuming/orange - colour = "orange" - effect_desc = "Creates a slime cookie that heats the target up and grants cold immunity for a short time." - cookietype = /obj/item/slime_cookie/orange - -/obj/item/slime_cookie/orange - name = "fiery cookie" - desc = "A orange cookie with a fiery pattern. Feels warm." - icon_state = "orange" - taste = "cinnamon and burning" - -/obj/item/slime_cookie/orange/do_effect(mob/living/M, mob/user) - M.apply_status_effect(/datum/status_effect/firecookie) - -/obj/item/slimecross/consuming/purple - colour = "purple" - effect_desc = "Creates a slime cookie that heals the target from every type of damage." - cookietype = /obj/item/slime_cookie/purple - -/obj/item/slime_cookie/purple - name = "health cookie" - desc = "A purple cookie with a cross pattern. Soothing." - icon_state = "purple" - taste = "fruit jam and cough medicine" - -/obj/item/slime_cookie/purple/do_effect(mob/living/M, mob/user) - M.adjustBruteLoss(-5) - M.adjustFireLoss(-5) - M.adjustToxLoss(-5, forced=1) //To heal slimepeople. - M.adjustOxyLoss(-5) - M.adjustCloneLoss(-5) - M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -5) - -/obj/item/slimecross/consuming/blue - colour = "blue" - effect_desc = "Creates a slime cookie that wets the floor around you and makes you immune to water based slipping for a short time." - cookietype = /obj/item/slime_cookie/blue - -/obj/item/slime_cookie/blue - name = "water cookie" - desc = "A transparent blue cookie. Constantly dripping wet." - icon_state = "blue" - taste = /datum/reagent/water - -/obj/item/slime_cookie/blue/do_effect(mob/living/M, mob/user) - M.apply_status_effect(/datum/status_effect/watercookie) - -/obj/item/slimecross/consuming/metal - colour = "metal" - effect_desc = "Creates a slime cookie that increases the target's resistance to brute damage." - cookietype = /obj/item/slime_cookie/metal - -/obj/item/slime_cookie/metal - name = "metallic cookie" - desc = "A shiny grey cookie. Hard to the touch." - icon_state = "metal" - taste = /datum/reagent/copper - -/obj/item/slime_cookie/metal/do_effect(mob/living/M, mob/user) - M.apply_status_effect(/datum/status_effect/metalcookie) - -/obj/item/slimecross/consuming/yellow - colour = "yellow" - effect_desc = "Creates a slime cookie that makes the target immune to electricity for a short time." - cookietype = /obj/item/slime_cookie/yellow - -/obj/item/slime_cookie/yellow - name = "sparking cookie" - desc = "A yellow cookie with a lightning pattern. Has a rubbery texture." - icon_state = "yellow" - taste = "lemon cake and rubber gloves" - -/obj/item/slime_cookie/yellow/do_effect(mob/living/M, mob/user) - M.apply_status_effect(/datum/status_effect/sparkcookie) - -/obj/item/slimecross/consuming/darkpurple - colour = "dark purple" - effect_desc = "Creates a slime cookie that reverses how the target's body treats toxins." - cookietype = /obj/item/slime_cookie/darkpurple - -/obj/item/slime_cookie/darkpurple - name = "toxic cookie" - desc = "A dark purple cookie, stinking of plasma." - icon_state = "darkpurple" - taste = "slime jelly and toxins" - -/obj/item/slime_cookie/darkpurple/do_effect(mob/living/M, mob/user) - M.apply_status_effect(/datum/status_effect/toxincookie) - -/obj/item/slimecross/consuming/darkblue - colour = "dark blue" - effect_desc = "Creates a slime cookie that chills the target and extinguishes them." - cookietype = /obj/item/slime_cookie/darkblue - -/obj/item/slime_cookie/darkblue - name = "frosty cookie" - desc = "A dark blue cookie with a snowflake pattern. Feels cold." - icon_state = "darkblue" - taste = "mint and bitter cold" - -/obj/item/slime_cookie/darkblue/do_effect(mob/living/M, mob/user) - M.adjust_bodytemperature(-110) - M.ExtinguishMob() - -/obj/item/slimecross/consuming/silver - colour = "silver" - effect_desc = "Creates a slime cookie that never gets the target fat." - cookietype = /obj/item/slime_cookie/silver - -/obj/item/slime_cookie/silver - name = "waybread cookie" - desc = "A warm, crispy cookie, sparkling silver in the light. Smells wonderful." - icon_state = "silver" - taste = "masterful elven baking" - nutrition = 0 //We don't want normal nutriment - -/obj/item/slime_cookie/silver/do_effect(mob/living/M, mob/user) - M.reagents.add_reagent(/datum/reagent/consumable/nutriment/stabilized,10) - -/obj/item/slimecross/consuming/bluespace - colour = "bluespace" - effect_desc = "Creates a slime cookie that teleports the target to a random place in the area." - cookietype = /obj/item/slime_cookie/bluespace - -/obj/item/slime_cookie/bluespace - name = "space cookie" - desc = "A white cookie with green icing. Surprisingly hard to hold." - icon_state = "bluespace" - taste = "sugar and starlight" - -/obj/item/slime_cookie/bluespace/do_effect(mob/living/M, mob/user) - var/list/L = get_area_turfs(get_area(M)) - var/turf/target - while (L.len && !target) - var/I = rand(1, L.len) - var/turf/T = L[I] - if (is_centcom_level(T)) - L.Cut(I,I+1) - continue - if(!T.density) - var/clear = TRUE - for(var/obj/O in T) - if(O.density) - clear = FALSE - break - if(clear) - target = T - if (!target) - L.Cut(I,I+1) - - if(target) - do_teleport(M, target, 0, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) - new /obj/effect/particle_effect/sparks(get_turf(M)) - playsound(get_turf(M), "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - -/obj/item/slimecross/consuming/sepia - colour = "sepia" - effect_desc = "Creates a slime cookie that makes the target do things slightly faster." - cookietype = /obj/item/slime_cookie/sepia - -/obj/item/slime_cookie/sepia - name = "time cookie" - desc = "A light brown cookie with a clock pattern. Takes some time to chew." - icon_state = "sepia" - taste = "brown sugar and a metronome" - -/obj/item/slime_cookie/sepia/do_effect(mob/living/M, mob/user) - M.apply_status_effect(/datum/status_effect/timecookie) - -/obj/item/slimecross/consuming/cerulean - colour = "cerulean" - effect_desc = "Creates a slime cookie that has a chance to make another once you eat it." - cookietype = /obj/item/slime_cookie/cerulean - cookies = 3 //You're gonna get more. - -/obj/item/slime_cookie/cerulean - name = "duplicookie" - desc = "A cerulean cookie with strange proportions. It feels like it could break apart easily." - icon_state = "cerulean" - taste = "a sugar cookie" - -/obj/item/slime_cookie/cerulean/do_effect(mob/living/M, mob/user) - if(prob(50)) - to_chat(M, "A piece of [src] breaks off while you chew, and falls to the ground.") - var/obj/item/slime_cookie/cerulean/C = new(get_turf(M)) - C.taste = taste + " and a sugar cookie" - -/obj/item/slimecross/consuming/pyrite - colour = "pyrite" - effect_desc = "Creates a slime cookie that randomly colors the target." - cookietype = /obj/item/slime_cookie/pyrite - -/obj/item/slime_cookie/pyrite - name = "color cookie" - desc = "A yellow cookie with rainbow-colored icing. Reflects the light strangely." - icon_state = "pyrite" - taste = "vanilla and " //Randomly selected color dye. - var/colour = "#FFFFFF" - -/obj/item/slime_cookie/pyrite/Initialize() - . = ..() - var/tastemessage = "paint remover" - switch(rand(1,7)) - if(1) - tastemessage = "red dye" - colour = "#FF0000" - if(2) - tastemessage = "orange dye" - colour = "#FFA500" - if(3) - tastemessage = "yellow dye" - colour = "#FFFF00" - if(4) - tastemessage = "green dye" - colour = "#00FF00" - if(5) - tastemessage = "blue dye" - colour = "#0000FF" - if(6) - tastemessage = "indigo dye" - colour = "#4B0082" - if(7) - tastemessage = "violet dye" - colour = "#FF00FF" - taste += tastemessage - -/obj/item/slime_cookie/pyrite/do_effect(mob/living/M, mob/user) - M.add_atom_colour(colour,WASHABLE_COLOUR_PRIORITY) - -/obj/item/slimecross/consuming/red - colour = "red" - effect_desc = "Creates a slime cookie that creates a spatter of blood on the floor, while also restoring some of the target's blood." - cookietype = /obj/item/slime_cookie/red - -/obj/item/slime_cookie/red - name = "blood cookie" - desc = "A red cookie, oozing a thick red fluid. Vampires might enjoy it." - icon_state = "red" - taste = "red velvet and iron" - -/obj/item/slime_cookie/red/do_effect(mob/living/M, mob/user) - new /obj/effect/decal/cleanable/blood(get_turf(M)) - playsound(get_turf(M), 'sound/effects/splat.ogg', 10, TRUE) - if(iscarbon(M)) - var/mob/living/carbon/C = M - C.blood_volume += 25 //Half a vampire drain. - -/obj/item/slimecross/consuming/green - colour = "green" - effect_desc = "Creates a slime cookie that is absolutely disgusting, makes the target vomit, however all reagent in their body are also removed." - cookietype = /obj/item/slime_cookie/green - -/obj/item/slime_cookie/green - name = "gross cookie" - desc = "A disgusting green cookie, seeping with pus. You kind of feel ill just looking at it." - icon_state = "green" - taste = "the contents of your stomach" - -/obj/item/slime_cookie/green/do_effect(mob/living/M, mob/user) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - H.vomit(25) - M.reagents.remove_all() - -/obj/item/slimecross/consuming/pink - colour = "pink" - effect_desc = "Creates a slime cookie that makes the target want to spread the love." - cookietype = /obj/item/slime_cookie/pink - -/obj/item/slime_cookie/pink - name = "love cookie" - desc = "A pink cookie with an icing heart. D'aww." - icon_state = "pink" - taste = "love and hugs" - -/obj/item/slime_cookie/pink/do_effect(mob/living/M, mob/user) - M.apply_status_effect(/datum/status_effect/lovecookie) - -/obj/item/slimecross/consuming/gold - colour = "gold" - effect_desc = "Creates a slime cookie that has a gold coin inside." - cookietype = /obj/item/slime_cookie/gold - -/obj/item/slime_cookie/gold - name = "gilded cookie" - desc = "A buttery golden cookie, closer to a bread than anything. May good fortune find you." - icon_state = "gold" - taste = "sweet cornbread and wealth" - -/obj/item/slime_cookie/gold/do_effect(mob/living/M, mob/user) - var/obj/item/held = M.get_active_held_item() //This should be itself, but just in case... - M.dropItemToGround(held) - var/newcoin = /obj/item/coin/gold - var/obj/item/coin/C = new newcoin(get_turf(M)) - playsound(get_turf(C), 'sound/items/coinflip.ogg', 50, TRUE) - M.put_in_hand(C) - -/obj/item/slimecross/consuming/oil - colour = "oil" - effect_desc = "Creates a slime cookie that slows anyone next to the user." - cookietype = /obj/item/slime_cookie/oil - -/obj/item/slime_cookie/oil - name = "tar cookie" - desc = "An oily black cookie, which sticks to your hands. Smells like chocolate." - icon_state = "oil" - taste = "rich molten chocolate and tar" - -/obj/item/slime_cookie/oil/do_effect(mob/living/M, mob/user) - M.apply_status_effect(/datum/status_effect/tarcookie) - -/obj/item/slimecross/consuming/black - colour = "black" - effect_desc = "Creates a slime cookie that makes the target look like a spooky skeleton for a little bit." - cookietype = /obj/item/slime_cookie/black - -/obj/item/slime_cookie/black - name = "spooky cookie" - desc = "A pitch black cookie with an icing ghost on the front. Spooky!" - icon_state = "black" - taste = "ghosts and stuff" - -/obj/item/slime_cookie/black/do_effect(mob/living/M, mob/user) - M.apply_status_effect(/datum/status_effect/spookcookie) - -/obj/item/slimecross/consuming/lightpink - colour = "light pink" - effect_desc = "Creates a slime cookie that makes the target, and anyone next to the target, pacifistic for a small amount of time." - cookietype = /obj/item/slime_cookie/lightpink - -/obj/item/slime_cookie/lightpink - name = "peace cookie" - desc = "A light pink cookie with a peace symbol in the icing. Lovely!" - icon_state = "lightpink" - taste = "strawberry icing and P.L.U.R" //Literal candy raver. - -/obj/item/slime_cookie/lightpink/do_effect(mob/living/M, mob/user) - M.apply_status_effect(/datum/status_effect/peacecookie) - -/obj/item/slimecross/consuming/adamantine - colour = "adamantine" - effect_desc = "Creates a slime cookie that increases the target's resistance to burn damage." - cookietype = /obj/item/slime_cookie/adamantine - -/obj/item/slime_cookie/adamantine - name = "crystal cookie" - desc = "A translucent rock candy in the shape of a cookie. Surprisingly chewy." - icon_state = "adamantine" - taste = "crystalline sugar and metal" - -/obj/item/slime_cookie/adamantine/do_effect(mob/living/M, mob/user) - M.apply_status_effect(/datum/status_effect/adamantinecookie) - -/obj/item/slimecross/consuming/rainbow - colour = "rainbow" - effect_desc = "Creates a slime cookie that has the effect of a random cookie." - -/obj/item/slimecross/consuming/rainbow/spawncookie() - var/cookie_type = pick(subtypesof(/obj/item/slime_cookie)) - var/obj/item/slime_cookie/S = new cookie_type(get_turf(src)) - S.name = "rainbow cookie" - S.desc = "A beautiful rainbow cookie, constantly shifting colors in the light." - S.icon_state = "rainbow" - return S diff --git a/code/modules/research/xenobiology/crossbreeding/industrial.dm b/code/modules/research/xenobiology/crossbreeding/industrial.dm deleted file mode 100644 index da9387883f0c..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/industrial.dm +++ /dev/null @@ -1,199 +0,0 @@ -/* -Industrial extracts: - Slowly consume plasma, produce items with it. -*/ -/obj/item/slimecross/industrial - name = "industrial extract" - desc = "A gel-like, sturdy extract, fond of plasma and industry." - effect = "industrial" - icon_state = "industrial_still" - var/plasmarequired = 2 //Units of plasma required to be consumed to produce item. - var/itempath = /obj/item //The item produced by the extract. - var/plasmaabsorbed = 0 //Units of plasma aborbed by the extract already. Absorbs at a rate of 2u/obj tick. - var/itemamount = 1 //How many items to spawn - -/obj/item/slimecross/industrial/examine(mob/user) - . = ..() - . += "It currently has [plasmaabsorbed] units of plasma floating inside the outer shell, out of [plasmarequired] units." - -/obj/item/slimecross/industrial/proc/do_after_spawn(obj/item/spawned) - return - -/obj/item/slimecross/industrial/Initialize() - . = ..() - create_reagents(100, INJECTABLE | DRAWABLE) - START_PROCESSING(SSobj,src) - -/obj/item/slimecross/industrial/Destroy() - STOP_PROCESSING(SSobj,src) - return ..() - -/obj/item/slimecross/industrial/process() - var/IsWorking = FALSE - if(reagents.has_reagent(/datum/reagent/toxin/plasma,amount = 2) && plasmarequired > 1) //Can absorb as much as 2 - IsWorking = TRUE - reagents.remove_reagent(/datum/reagent/toxin/plasma,2) - plasmaabsorbed += 2 - else if(reagents.has_reagent(/datum/reagent/toxin/plasma,amount = 1)) //Can absorb as little as 1 - IsWorking = TRUE - reagents.remove_reagent(/datum/reagent/toxin/plasma,1) - plasmaabsorbed += 1 - - if(plasmaabsorbed >= plasmarequired) - playsound(src, 'sound/effects/attackblob.ogg', 50, TRUE) - plasmaabsorbed -= plasmarequired - for(var/i = 0, i < itemamount, i++) - do_after_spawn(new itempath(get_turf(src))) - else if(IsWorking) - playsound(src, 'sound/effects/bubbles.ogg', 5, TRUE) - if(IsWorking) - icon_state = "industrial" - else - icon_state = "industrial_still" - -/obj/item/slimecross/industrial/grey - colour = "grey" - effect_desc = "Produces monkey cubes." - itempath = /obj/item/reagent_containers/food/snacks/monkeycube - itemamount = 5 - -/obj/item/slimecross/industrial/orange - colour = "orange" - effect_desc = "Produces slime zippo lighters." - plasmarequired = 6 - itempath = /obj/item/lighter/slime - -/obj/item/slimecross/industrial/purple - colour = "purple" - effect_desc = "Produces autoinjectors with regen jelly inside." - plasmarequired = 5 - itempath = /obj/item/slimecrossbeaker/autoinjector/regenpack - -/obj/item/slimecross/industrial/blue - colour = "blue" - effect_desc = "Produces full fire extinguishers." - plasmarequired = 10 - itempath = /obj/item/extinguisher - -/obj/item/slimecross/industrial/metal - colour = "metal" - effect_desc = "Produces metal sheets." - plasmarequired = 3 - itempath = /obj/item/stack/sheet/metal/ten - -/obj/item/slimecross/industrial/yellow - colour = "yellow" - effect_desc = "Produces high capacity power cells, which are not fully charged on creation." - plasmarequired = 5 - itempath = /obj/item/stock_parts/cell/high - -/obj/item/slimecross/industrial/yellow/do_after_spawn(obj/item/spawned) - var/obj/item/stock_parts/cell/high/C = spawned - if(istype(C)) - C.charge = rand(0,C.maxcharge/2) - -/obj/item/slimecross/industrial/darkpurple - colour = "dark purple" - effect_desc = "Produces plasma... for plasma." - plasmarequired = 10 - itempath = /obj/item/stack/sheet/mineral/plasma - -/obj/item/slimecross/industrial/darkblue - colour = "dark blue" - effect_desc = "Produces one-use fireproofing potions." - plasmarequired = 6 - itempath = /obj/item/slimepotion/fireproof - -/obj/item/slimecross/industrial/darkblue/do_after_spawn(obj/item/spawned) - var/obj/item/slimepotion/fireproof/potion = spawned - if(istype(potion)) - potion.uses = 1 - -/obj/item/slimecross/industrial/silver - colour = "silver" - effect_desc = "Produces random food and drink items." - plasmarequired = 1 - //Item picked below. - -/obj/item/slimecross/industrial/silver/process() - itempath = pick(list(get_random_food(), get_random_drink())) - ..() - -/obj/item/slimecross/industrial/bluespace - colour = "bluespace" - effect_desc = "Produces synthetic bluespace crystals." - plasmarequired = 7 - itempath = /obj/item/stack/ore/bluespace_crystal/artificial - -/obj/item/slimecross/industrial/sepia - colour = "sepia" - effect_desc = "Produces cameras." - plasmarequired = 2 - itempath = /obj/item/camera - -/obj/item/slimecross/industrial/cerulean - colour = "cerulean" - effect_desc = "Produces normal slime extract enhancers." - plasmarequired = 5 - itempath = /obj/item/slimepotion/enhancer - -/obj/item/slimecross/industrial/pyrite - colour = "pyrite" - effect_desc = "Produces cans of spraypaint." - plasmarequired = 2 - itempath = /obj/item/toy/crayon/spraycan - -/obj/item/slimecross/industrial/red - colour = "red" - effect_desc = "Produces blood orbs." - plasmarequired = 5 - itempath = /obj/item/slimecrossbeaker/bloodpack - -/obj/item/slimecross/industrial/green - colour = "green" - effect_desc = "Produces self-use-only slime jelly autoinjectors." - plasmarequired = 7 - itempath = /obj/item/slimecrossbeaker/autoinjector/slimejelly - -/obj/item/slimecross/industrial/pink - colour = "pink" - effect_desc = "Produces synthpax and space drug autoinjectors." - plasmarequired = 6 - itempath = /obj/item/slimecrossbeaker/autoinjector/peaceandlove - -/obj/item/slimecross/industrial/gold - colour = "gold" - effect_desc = "Produces random coins." - plasmarequired = 10 - -/obj/item/slimecross/industrial/gold/process() - itempath = pick(/obj/item/coin/silver, /obj/item/coin/iron, /obj/item/coin/gold, /obj/item/coin/diamond, /obj/item/coin/plasma, /obj/item/coin/uranium) - ..() - -/obj/item/slimecross/industrial/oil - colour = "oil" - effect_desc = "Produces IEDs." - plasmarequired = 4 - itempath = /obj/item/grenade/iedcasing/spawned - -/obj/item/slimecross/industrial/black //What does this have to do with black slimes? No clue! Fun, though - colour = "black" - effect_desc = "Produces slime brand regenerative cigarettes." - plasmarequired = 6 - itempath = /obj/item/storage/fancy/cigarettes/cigpack_xeno - -/obj/item/slimecross/industrial/lightpink - colour = "light pink" - effect_desc = "Produces heart shaped boxes that have candies in them." - plasmarequired = 3 - itempath = /obj/item/storage/fancy/heart_box - -/obj/item/slimecross/industrial/rainbow - colour = "rainbow" - effect_desc = "Produces random slime extracts." - plasmarequired = 5 - //Item picked below. - -/obj/item/slimecross/industrial/rainbow/process() - itempath = pick(subtypesof(/obj/item/slime_extract)) - ..() diff --git a/code/modules/research/xenobiology/crossbreeding/mutative.dm b/code/modules/research/xenobiology/crossbreeding/mutative.dm deleted file mode 100644 index 043e124641ab..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/mutative.dm +++ /dev/null @@ -1,27 +0,0 @@ -/obj/item/slimecross/mutative - name = "mutative extract" - desc = "It's softly pulsing with mutagenic energy." - effect = "mutative" - icon_state = "mutative" - -/obj/item/slimecross/mutative/Initialize() - . = ..() - create_reagents(10, INJECTABLE | DRAWABLE) - -/obj/item/slimecross/mutative/attack_self(mob/user) - if(!reagents.has_reagent(/datum/reagent/toxin/plasma,10)) - to_chat(user, "This extract needs to be full of plasma to activate!") - return - reagents.remove_reagent(/datum/reagent/toxin/plasma,10) - to_chat(user, "You squeeze the extract, and it absorbs the plasma!") - playsound(src, 'sound/effects/bubbles.ogg', 50, TRUE) - playsound(src, 'sound/magic/fireball.ogg', 50, TRUE) - do_effect(user) - -/obj/item/slimecross/mutative/proc/do_effect(mob/user) //If, for whatever reason, you don't want to delete the extract, don't do ..() - qdel(src) - return - -/obj/item/slimecross/mutative/rainbow - colour = "rainbow" - effect_desc = "Hardens into a shard of slimy crystal. Prick yourself with it to bring forth a Slime Guardian." diff --git a/code/modules/research/xenobiology/crossbreeding/prismatic.dm b/code/modules/research/xenobiology/crossbreeding/prismatic.dm deleted file mode 100644 index 9cfc4542d526..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/prismatic.dm +++ /dev/null @@ -1,124 +0,0 @@ -/* -Prismatic extracts: - Becomes an infinite-use paintbrush. -*/ -/obj/item/slimecross/prismatic - name = "prismatic extract" - desc = "It's constantly wet with a semi-transparent, colored goo." - effect = "prismatic" - effect_desc = "When used it paints whatever it hits." - icon_state = "prismatic" - var/paintcolor = "#FFFFFF" - -/obj/item/slimecross/prismatic/afterattack(turf/target, mob/user, proximity) - if(!proximity) - return - if(!istype(target) || isspaceturf(target)) - return - target.add_atom_colour(paintcolor, WASHABLE_COLOUR_PRIORITY) - playsound(target, 'sound/effects/slosh.ogg', 20, TRUE) - -/obj/item/slimecross/prismatic/grey/ - colour = "grey" - desc = "It's constantly wet with a pungent-smelling, clear chemical." - -/obj/item/slimecross/prismatic/grey/afterattack(turf/target, mob/user, proximity) - . = ..() - if(!proximity) - return - if(istype(target) && target.color != initial(target.color)) - target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - playsound(target, 'sound/effects/slosh.ogg', 20, TRUE) - -/obj/item/slimecross/prismatic/orange - paintcolor = "#FFA500" - colour = "orange" - -/obj/item/slimecross/prismatic/purple - paintcolor = "#B19CD9" - colour = "purple" - -/obj/item/slimecross/prismatic/blue - paintcolor = "#ADD8E6" - colour = "blue" - -/obj/item/slimecross/prismatic/metal - paintcolor = "#7E7E7E" - colour = "metal" - -/obj/item/slimecross/prismatic/yellow - paintcolor = "#FFFF00" - colour = "yellow" - -/obj/item/slimecross/prismatic/darkpurple - paintcolor = "#551A8B" - colour = "dark purple" - -/obj/item/slimecross/prismatic/darkblue - paintcolor = "#0000FF" - colour = "dark blue" - -/obj/item/slimecross/prismatic/silver - paintcolor = "#D3D3D3" - colour = "silver" - -/obj/item/slimecross/prismatic/bluespace - paintcolor = "#32CD32" - colour = "bluespace" - -/obj/item/slimecross/prismatic/sepia - paintcolor = "#704214" - colour = "sepia" - -/obj/item/slimecross/prismatic/cerulean - paintcolor = "#2956B2" - colour = "cerulean" - -/obj/item/slimecross/prismatic/pyrite - paintcolor = "#FAFAD2" - colour = "pyrite" - -/obj/item/slimecross/prismatic/red - paintcolor = "#FF0000" - colour = "red" - -/obj/item/slimecross/prismatic/green - paintcolor = "#00FF00" - colour = "green" - -/obj/item/slimecross/prismatic/pink - paintcolor = "#FF69B4" - colour = "pink" - -/obj/item/slimecross/prismatic/gold - paintcolor = "#FFD700" - colour = "gold" - -/obj/item/slimecross/prismatic/oil - paintcolor = "#505050" - colour = "oil" - -/obj/item/slimecross/prismatic/black - paintcolor = "#000000" - colour = "black" - -/obj/item/slimecross/prismatic/lightpink - paintcolor = "#FFB6C1" - colour = "light pink" - -/obj/item/slimecross/prismatic/adamantine - paintcolor = "#008B8B" - colour = "adamantine" - -/obj/item/slimecross/prismatic/rainbow - paintcolor = "#FFFFFF" - colour = "rainbow" - -/obj/item/slimecross/prismatic/rainbow/attack_self(mob/user) - var/newcolor = input(user, "Choose the slime color:", "Color change",paintcolor) as color|null - if(user.get_active_held_item() != src || user.stat != CONSCIOUS || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) - return - if(!newcolor) - return - paintcolor = newcolor - return diff --git a/code/modules/research/xenobiology/crossbreeding/recurring.dm b/code/modules/research/xenobiology/crossbreeding/recurring.dm deleted file mode 100644 index 4a094744f7f8..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/recurring.dm +++ /dev/null @@ -1,138 +0,0 @@ -/* -Recurring extracts: - Generates a new charge every few seconds. - If depleted of its' last charge, stops working. -*/ -/obj/item/slimecross/recurring - name = "recurring extract" - desc = "A tiny, glowing core, wrapped in several layers of goo." - effect = "recurring" - icon_state = "recurring" - var/extract_type - var/obj/item/slime_extract/extract - var/cooldown = 0 - var/max_cooldown = 5 //In sets of 2 seconds. - -/obj/item/slimecross/recurring/Initialize() - . = ..() - extract = new extract_type(src.loc) - visible_message("[src] wraps a layer of goo around itself!") - extract.name = name - extract.desc = desc - extract.icon = icon - extract.icon_state = icon_state - extract.color = color - extract.recurring = TRUE - src.forceMove(extract) - START_PROCESSING(SSobj,src) - -/obj/item/slimecross/recurring/process() - if(cooldown > 0) - cooldown-- - else if(extract.Uses < 10 && extract.Uses > 0) - extract.Uses++ - cooldown = max_cooldown - else if(extract.Uses <= 0) - extract.visible_message("The light inside [extract] flickers and dies out.") - extract.desc = "A tiny, inert core, bleeding dark, cerulean-colored goo." - extract.icon_state = "prismatic" - qdel(src) - -/obj/item/slimecross/recurring/Destroy() - . = ..() - STOP_PROCESSING(SSobj,src) - -/obj/item/slimecross/recurring/grey - extract_type = /obj/item/slime_extract/grey - colour = "grey" - -/obj/item/slimecross/recurring/orange - extract_type = /obj/item/slime_extract/orange - colour = "orange" - -/obj/item/slimecross/recurring/purple - extract_type = /obj/item/slime_extract/purple - colour = "purple" - -/obj/item/slimecross/recurring/blue - extract_type = /obj/item/slime_extract/blue - colour = "blue" - -/obj/item/slimecross/recurring/metal - extract_type = /obj/item/slime_extract/metal - colour = "metal" - max_cooldown = 10 - -/obj/item/slimecross/recurring/yellow - extract_type = /obj/item/slime_extract/yellow - colour = "yellow" - max_cooldown = 10 - -/obj/item/slimecross/recurring/darkpurple - extract_type = /obj/item/slime_extract/darkpurple - colour = "dark purple" - max_cooldown = 10 - -/obj/item/slimecross/recurring/darkblue - extract_type = /obj/item/slime_extract/darkblue - colour = "dark blue" - -/obj/item/slimecross/recurring/silver - extract_type = /obj/item/slime_extract/silver - colour = "silver" - -/obj/item/slimecross/recurring/bluespace - extract_type = /obj/item/slime_extract/bluespace - colour = "bluespace" - -/obj/item/slimecross/recurring/sepia - extract_type = /obj/item/slime_extract/sepia - colour = "sepia" - max_cooldown = 18 //No infinite timestop for you! - -/obj/item/slimecross/recurring/cerulean - extract_type = /obj/item/slime_extract/cerulean - colour = "cerulean" - -/obj/item/slimecross/recurring/pyrite - extract_type = /obj/item/slime_extract/pyrite - colour = "pyrite" - -/obj/item/slimecross/recurring/red - extract_type = /obj/item/slime_extract/red - colour = "red" - -/obj/item/slimecross/recurring/green - extract_type = /obj/item/slime_extract/green - colour = "green" - -/obj/item/slimecross/recurring/pink - extract_type = /obj/item/slime_extract/pink - colour = "pink" - -/obj/item/slimecross/recurring/gold - extract_type = /obj/item/slime_extract/gold - colour = "gold" - max_cooldown = 15 - -/obj/item/slimecross/recurring/oil - extract_type = /obj/item/slime_extract/oil - colour = "oil" //Why would you want this? - -/obj/item/slimecross/recurring/black - extract_type = /obj/item/slime_extract/black - colour = "black" - -/obj/item/slimecross/recurring/lightpink - extract_type = /obj/item/slime_extract/lightpink - colour = "light pink" - -/obj/item/slimecross/recurring/adamantine - extract_type = /obj/item/slime_extract/adamantine - colour = "adamantine" - max_cooldown = 10 - -/obj/item/slimecross/recurring/rainbow - extract_type = /obj/item/slime_extract/rainbow - colour = "rainbow" - max_cooldown = 20 //It's pretty powerful. diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm deleted file mode 100644 index 75a1201d924a..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm +++ /dev/null @@ -1,354 +0,0 @@ -/* -Regenerative extracts: - Work like a legion regenerative core. - Has a unique additional effect. -*/ -/obj/item/slimecross/regenerative - name = "regenerative extract" - desc = "It's filled with a milky substance, and pulses like a heartbeat." - effect = "regenerative" - icon_state = "regenerative" - - var/oxy_loss = 0 - var/tox_loss = 0 - var/fire_loss = 0 - var/brute_loss = 0 - var/stamina_loss = 0 - var/blood_loss = 100 - var/organ_loss = 3 - var/slime_heal_modifier = 1 //Specialised types only heal half - var/jelly_amount = 7.5 - var/bone_loss = FALSE - var/life_loss = FALSE - var/slime_delay = 10 - -/obj/item/slimecross/regenerative/proc/core_effect(mob/living/carbon/human/target, mob/user) - return -/obj/item/slimecross/regenerative/proc/core_effect_before(mob/living/carbon/human/target, mob/user) - return - -/obj/item/slimecross/regenerative/afterattack(atom/target,mob/user,prox) - . = ..() - if(!prox || !isliving(target)) - return - var/mob/living/H = target - if(H.stat == DEAD && life_loss) - slime_delay = 200 //Reviving the dead takes a while, 20 seconds to be exact - to_chat(user, "You begin using the [src] to try and bring [H] back from the dead...") - else - slime_delay = 10 - if(H.stat == DEAD && !life_loss) // Won't revive the dead, except for specific extracts - to_chat(user, "[src] will not work on the dead!") - return - if(H != user) - if(!do_after(user, slime_delay, H)) // 1 second delay - return FALSE - user.visible_message("[user] crushes the [src] over [H], the milky goo quickly regenerating some of [H.p_their()] injuries!", - "You squeeze the [src], and it bursts over [H], the milky goo regenerating some of [H.p_their()] injuries.") - else - if(!do_after(user, (slime_delay * 1.5), H)) // 1.5 second delay - return FALSE - user.visible_message("[user] crushes the [src] over [user.p_them()]self, the milky goo quickly regenerating some of [user.p_their()] injuries!", - "You squeeze the [src], and it bursts in your hand, splashing you with milky goo which quickly regenerates some of your injuries!") -// Slimes are good at healing clone damage, but don't heal other damage types as much. Additionally heals 15 organ damage. - core_effect_before(H, user) // can affect heal multiplier - oxy_loss = (12.5 + (H.getOxyLoss() * 0.4 * slime_heal_modifier)) - tox_loss = (12.5 + (H.getToxLoss() * 0.4 * slime_heal_modifier)) - fire_loss = (12.5 + (H.getFireLoss() * 0.4 * slime_heal_modifier)) - brute_loss = (12.5 + (H.getBruteLoss() * 0.4 * slime_heal_modifier)) - stamina_loss = (12.5 + (H.getStaminaLoss() * 0.5 * slime_heal_modifier)) - core_effect(H, user) // can affect specific healing values - H.reagents.add_reagent(/datum/reagent/medicine/regen_jelly,jelly_amount) // Splits the healing effect across an instant heal, and a smaller heal after. - H.specific_heal(brute_amt = brute_loss, fire_amt = fire_loss, tox_amt = tox_loss, oxy_amt = oxy_loss, stam_amt = stamina_loss, organ_amt = organ_loss, clone_amt = 100, blood_amt = blood_loss, specific_bones = bone_loss, specific_revive = life_loss) - playsound(target, 'sound/effects/splat.ogg', 40, TRUE) - qdel(src) - -/obj/item/slimecross/regenerative/grey - colour = "grey" //Has no bonus effect. - effect_desc = "Partially heals the target and does nothing else." - -/obj/item/slimecross/regenerative/orange - colour = "orange" - -/obj/item/slimecross/regenerative/orange/core_effect_before(mob/living/target, mob/user) - target.visible_message("The [src] boils over!") - for(var/turf/turf in range(1,target)) - if(!locate(/obj/effect/hotspot) in turf) - new /obj/effect/hotspot(turf) - -/obj/item/slimecross/regenerative/purple - colour = "purple" - effect_desc = "Weakly heals the target, but treats toxin damage especially well. Additionally injects them with some additional regen jelly." - -/obj/item/slimecross/regenerative/purple/core_effect_before(mob/living/target, mob/user) - slime_heal_modifier = 0.75 - -/obj/item/slimecross/regenerative/purple/core_effect(mob/living/target, mob/user) - tox_loss = (10 + (target.getBruteLoss() * 0.8)) - jelly_amount += 10 - -/obj/item/slimecross/regenerative/blue - colour = "blue" - effect_desc = "Weakly heals the target, but extra effective at treating burns. Additionally makes the floor wet." - -/obj/item/slimecross/regenerative/blue/core_effect_before(mob/living/target, mob/user) - slime_heal_modifier = 0.5 - -/obj/item/slimecross/regenerative/blue/core_effect(mob/living/target, mob/user) - if(isturf(target.loc)) - var/turf/open/T = get_turf(target) - T.MakeSlippery(TURF_WET_WATER, min_wet_time = 10, wet_time_to_add = 5) - target.visible_message("The milky goo in the extract gets all over the floor!") - fire_loss = (10 + (target.getFireLoss() * 0.8)) - jelly_amount *= 0.2 - -/obj/item/slimecross/regenerative/metal - colour = "metal" - effect_desc = "Barely heals the target, but fixes their bones .Additionally encases the target in a locker." - -/obj/item/slimecross/regenerative/metal/core_effect_before(mob/living/target, mob/user) - slime_heal_modifier = 0.1 - -/obj/item/slimecross/regenerative/metal/core_effect(mob/living/target, mob/user) - target.visible_message("The milky goo hardens and reshapes itself, encasing [target]!") - var/obj/structure/closet/C = new /obj/structure/closet(target.loc) - C.name = "slimy closet" - C.desc = "Looking closer, it seems to be made of a sort of solid, opaque, metal-like goo." - target.forceMove(C) - bone_loss = TRUE - jelly_amount *= 0.2 - -/obj/item/slimecross/regenerative/yellow - colour = "yellow" - effect_desc = "Partially heals the target, can revive the dead. additionally Partially recharges a single item on the target." - life_loss = TRUE //Will revive the dead. Heals normally unless target is dead, in which case it heals less. - -/obj/item/slimecross/regenerative/yellow/core_effect_before(mob/living/target, mob/user) - if(target.stat == DEAD) - slime_heal_modifier = 0.1 //use surgery to fix wounds - else - slime_heal_modifier = 0.75 //discourages spamming these to revive a target, combine with other cores - -/obj/item/slimecross/regenerative/yellow/core_effect(mob/living/target, mob/user) - var/list/batteries = list() - for(var/obj/item/stock_parts/cell/C in target.GetAllContents()) - if(C.charge < C.maxcharge) - batteries += C - if(batteries.len) - var/obj/item/stock_parts/cell/ToCharge = pick(batteries) - ToCharge.charge = ToCharge.maxcharge - to_chat(target, "You feel a strange electrical pulse, and one of your electrical items was recharged.") - if(target.stat == DEAD) - blood_loss = 100 - organ_loss = 30 // More effective at fixing organs if the target is dead - jelly_amount *= 0.2 - target.visible_message("The [src] sparks as it tries to revive [target]!") - -/obj/item/slimecross/regenerative/darkpurple - colour = "dark purple" - effect_desc = "Partially heals the target and gives them purple clothing if they are naked." - -/obj/item/slimecross/regenerative/darkpurple/core_effect(mob/living/target, mob/user) - var/equipped = 0 - equipped += target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/purple(null), ITEM_SLOT_FEET) - equipped += target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(null), ITEM_SLOT_ICLOTHING) - equipped += target.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/purple(null), ITEM_SLOT_GLOVES) - equipped += target.equip_to_slot_or_del(new /obj/item/clothing/head/soft/purple(null), ITEM_SLOT_HEAD) - if(equipped > 0) - target.visible_message("The milky goo congeals into clothing!") - -/obj/item/slimecross/regenerative/darkblue - colour = "dark blue" - effect_desc = "Partially heals the target and fireproofs their clothes." - -/obj/item/slimecross/regenerative/darkblue/core_effect(mob/living/target, mob/user) - if(!ishuman(target)) - return - var/mob/living/carbon/human/H = target - var/fireproofed = FALSE - if(H.get_item_by_slot(ITEM_SLOT_OCLOTHING)) - fireproofed = TRUE - var/obj/item/clothing/C = H.get_item_by_slot(ITEM_SLOT_OCLOTHING) - fireproof(C) - if(H.get_item_by_slot(ITEM_SLOT_HEAD)) - fireproofed = TRUE - var/obj/item/clothing/C = H.get_item_by_slot(ITEM_SLOT_HEAD) - fireproof(C) - if(fireproofed) - target.visible_message("Some of [target]'s clothing gets coated in the goo, and turns blue!") - -/obj/item/slimecross/regenerative/darkblue/proc/fireproof(obj/item/clothing/C) - C.name = "fireproofed [C.name]" - C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - C.add_atom_colour("#000080", FIXED_COLOUR_PRIORITY) - C.max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - C.heat_protection = C.body_parts_covered - C.resistance_flags |= FIRE_PROOF - -/obj/item/slimecross/regenerative/silver - colour = "silver" - effect_desc = "Partially heals the target and makes their belly feel round and full." - -/obj/item/slimecross/regenerative/silver/core_effect(mob/living/target, mob/user) - target.set_nutrition(NUTRITION_LEVEL_FULL - 1) - to_chat(target, "You feel satiated.") - -/obj/item/slimecross/regenerative/bluespace - colour = "bluespace" - effect_desc = "Partially heals the target and teleports them to where this core was created." - var/turf/open/T - -/obj/item/slimecross/regenerative/bluespace/core_effect(mob/living/target, mob/user) - target.visible_message("[src] disappears in a shower of sparks!","The milky goo teleports you somewhere it remembers!") - do_sparks(5,FALSE,target) - target.forceMove(T) - do_sparks(5,FALSE,target) - -/obj/item/slimecross/regenerative/bluespace/Initialize() - . = ..() - T = get_turf(src) - -/obj/item/slimecross/regenerative/sepia - colour = "sepia" - effect_desc = "Partially heals the target and stops time." - -/obj/item/slimecross/regenerative/sepia/core_effect_before(mob/living/target, mob/user) - to_chat(target, "You try to forget how you feel.") - target.AddComponent(/datum/component/dejavu) - -/obj/item/slimecross/regenerative/cerulean - colour = "cerulean" - effect_desc = "Slightly heals the target, but provides a boost of oxygen for a while. Additionally makes a second regenerative core with no special effects." - -/obj/item/slimecross/regenerative/cerulean/core_effect_before(mob/living/target, mob/user) - slime_heal_modifier = 0.5 - -/obj/item/slimecross/regenerative/cerulean/core_effect(mob/living/target, mob/user) - src.forceMove(user.loc) - var/obj/item/slimecross/X = new /obj/item/slimecross/regenerative(user.loc) - X.name = name - X.desc = desc - user.put_in_active_hand(X) - oxy_loss = 150 - target.reagents.add_reagent(/datum/reagent/medicine/salbutamol,15) //Similar to the luminescent effect, lets you breathe without oxygen for a while. - to_chat(user, "Some of the milky goo congeals in your hand!") - -/obj/item/slimecross/regenerative/pyrite - colour = "pyrite" - effect_desc = "Partially heals and randomly colors the target." - -/obj/item/slimecross/regenerative/pyrite/core_effect(mob/living/target, mob/user) - target.visible_message("The milky goo coating [target] leaves [target.p_them()] a different color!") - target.add_atom_colour(rgb(rand(0,255),rand(0,255),rand(0,255)),WASHABLE_COLOUR_PRIORITY) - -/obj/item/slimecross/regenerative/red - colour = "red" - effect_desc = "Slightly heals the target and injects them with a lot of blood, what a rush!" - -/obj/item/slimecross/regenerative/red/core_effect_before(mob/living/target, mob/user) - slime_heal_modifier = 0.5 - -/obj/item/slimecross/regenerative/red/core_effect(mob/living/target, mob/user) - to_chat(target, "You feel... faster.") - target.reagents.add_reagent(/datum/reagent/medicine/ephedrine,3) - blood_loss += 700 - -/obj/item/slimecross/regenerative/green - colour = "green" - effect_desc = "Weakly heals the target, but fixes their organs .Additionally changes the spieces or color of a slime or jellyperson." - -/obj/item/slimecross/regenerative/green/core_effect_before(mob/living/target, mob/user) - slime_heal_modifier = 0.5 - -/obj/item/slimecross/regenerative/green/core_effect(mob/living/target, mob/user) - if(isslime(target)) - target.visible_message("The [target] suddenly changes color!") - var/mob/living/simple_animal/slime/S = target - S.random_colour() - organ_loss += 17 - - -/obj/item/slimecross/regenerative/pink - colour = "pink" - effect_desc = "Partially heals the target and injects them with some krokodil." - -/obj/item/slimecross/regenerative/pink/core_effect(mob/living/target, mob/user) - to_chat(target, "You feel more calm.") - target.reagents.add_reagent(/datum/reagent/drug/krokodil,4) - -/obj/item/slimecross/regenerative/gold - colour = "gold" - effect_desc = "Partially heals the target and produces a random coin." - -/obj/item/slimecross/regenerative/gold/core_effect(mob/living/target, mob/user) - var/newcoin = pick(/obj/item/coin/silver, /obj/item/coin/iron, /obj/item/coin/gold, /obj/item/coin/diamond, /obj/item/coin/plasma, /obj/item/coin/uranium) - var/obj/item/coin/C = new newcoin(target.loc) - playsound(C, 'sound/items/coinflip.ogg', 50, TRUE) - target.put_in_hand(C) - -/obj/item/slimecross/regenerative/oil - colour = "oil" - effect_desc = "Partially heals the target and flashes everyone in sight." - -/obj/item/slimecross/regenerative/oil/core_effect(mob/living/target, mob/user) - playsound(src, 'sound/weapons/flash.ogg', 100, TRUE) - for(var/mob/living/L in view(user,7)) - L.flash_act() - -/obj/item/slimecross/regenerative/black - colour = "black" - effect_desc = "Partially heals the target and creates a duplicate of them, that drops dead soon after." - -/obj/item/slimecross/regenerative/black/core_effect_before(mob/living/target, mob/user) - var/dummytype = target.type - var/mob/living/dummy = new dummytype(target.loc) - to_chat(target, "The milky goo flows from your skin, forming an imperfect copy of you.") - if(iscarbon(target)) - var/mob/living/carbon/T = target - var/mob/living/carbon/D = dummy - T.dna.transfer_identity(D) - D.updateappearance(mutcolor_update=1) - D.real_name = T.real_name - dummy.adjustBruteLoss(target.getBruteLoss()) - dummy.adjustFireLoss(target.getFireLoss()) - dummy.adjustToxLoss(target.getToxLoss()) - dummy.adjustOxyLoss(200) - -/obj/item/slimecross/regenerative/lightpink - colour = "light pink" - effect_desc = "Partially heals the target and also heals the user." - -// Doesn't heal the user as much as the target -/obj/item/slimecross/regenerative/lightpink/core_effect(mob/living/target, mob/user) - if(!isliving(user)) - return - if(target == user) - return - var/mob/living/U = user - var/oxy_loss = (10 + (U.getOxyLoss() * 0.3)) - var/tox_loss = (10 + (U.getToxLoss() * 0.3)) - var/fire_loss = (10 + (U.getFireLoss() * 0.3)) - var/brute_loss = (10 + (U.getBruteLoss() * 0.3)) - var/stamina_loss = (10 + (U.getStaminaLoss() * 0.35)) - U.reagents.add_reagent(/datum/reagent/medicine/regen_jelly,10) // Splits the healing effect across an instant heal, and a smaller heal after. - U.specific_heal(brute_amt = brute_loss, fire_amt = fire_loss, tox_amt = tox_loss, oxy_amt = oxy_loss, stam_amt = stamina_loss, organ_amt = 2, clone_amt = 100) - to_chat(U, "Some of the milky goo sprays onto you, as well!") - -/obj/item/slimecross/regenerative/adamantine - colour = "adamantine" - effect_desc = "weakly heals the target, but extra effective at treating brute trauma. Additionally boosts their armor." - -/obj/item/slimecross/regenerative/adamantine/core_effect_before(mob/living/target, mob/user) - slime_heal_modifier = 0.3 - -/obj/item/slimecross/regenerative/adamantine/core_effect(mob/living/target, mob/user) //WIP - Find out why this doesn't work. - target.apply_status_effect(STATUS_EFFECT_SLIMESKIN) - brute_loss = (10 + (target.getBruteLoss() * 0.65)) //most common damage type, let's not go overboard - jelly_amount *= 0.5 - -/obj/item/slimecross/regenerative/rainbow - colour = "rainbow" - effect_desc = "Partially heals the target and temporarily makes them immortal, but pacifistic." - -/obj/item/slimecross/regenerative/rainbow/core_effect(mob/living/target, mob/user) - target.apply_status_effect(STATUS_EFFECT_RAINBOWPROTECTION) diff --git a/code/modules/research/xenobiology/crossbreeding/reproductive.dm b/code/modules/research/xenobiology/crossbreeding/reproductive.dm deleted file mode 100644 index f51c5a271177..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/reproductive.dm +++ /dev/null @@ -1,133 +0,0 @@ -/* -Reproductive extracts: - When fed three monkey cubes, produces between - 1 and 4 normal slime extracts of the same colour. -*/ -/obj/item/slimecross/reproductive - name = "reproductive extract" - desc = "It pulses with a strange hunger." - icon_state = "reproductive" - effect = "reproductive" - effect_desc = "When fed monkey cubes it produces more extracts. Bio bag compatible as well." - var/extract_type = /obj/item/slime_extract/ - var/cubes_eaten = 0 - var/last_produce = 0 - var/cooldown = 30 // 3 seconds. - -/obj/item/slimecross/reproductive/attackby(obj/item/O, mob/user) - if((last_produce + cooldown) > world.time) - to_chat(user, "[src] is still digesting!") - return - if(istype(O, /obj/item/storage/bag/bio)) - var/list/inserted = list() - SEND_SIGNAL(O, COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/monkeycube, src, 1, null, null, user, inserted) - if(inserted.len) - var/obj/item/reagent_containers/food/snacks/monkeycube/M = inserted[1] - if(istype(M)) - eat_cube(M, user) - else - to_chat(user, "There are no monkey cubes in the bio bag!") - if(istype(O,/obj/item/reagent_containers/food/snacks/monkeycube)) - eat_cube(O, user) - if(cubes_eaten >= 3) - var/cores = rand(1,4) - visible_message("[src] briefly swells to a massive size, and expels [cores] extract[cores > 1 ? "s":""]!") - playsound(src, 'sound/effects/splat.ogg', 40, TRUE) - last_produce = world.time - for(var/i = 0, i < cores, i++) - new extract_type(get_turf(loc)) - cubes_eaten = 0 - -/obj/item/slimecross/reproductive/proc/eat_cube(obj/item/reagent_containers/food/snacks/monkeycube, mob/user) - qdel(monkeycube) - cubes_eaten++ - to_chat(user, "You feed [monkeycube] to [src], and it pulses gently.") - playsound(src, 'sound/items/eatfood.ogg', 20, TRUE) - -/obj/item/slimecross/reproductive/grey - extract_type = /obj/item/slime_extract/grey - colour = "grey" - -/obj/item/slimecross/reproductive/orange - extract_type = /obj/item/slime_extract/orange - colour = "orange" - -/obj/item/slimecross/reproductive/purple - extract_type = /obj/item/slime_extract/purple - colour = "purple" - -/obj/item/slimecross/reproductive/blue - extract_type = /obj/item/slime_extract/blue - colour = "blue" - -/obj/item/slimecross/reproductive/metal - extract_type = /obj/item/slime_extract/metal - colour = "metal" - -/obj/item/slimecross/reproductive/yellow - extract_type = /obj/item/slime_extract/yellow - colour = "yellow" - -/obj/item/slimecross/reproductive/darkpurple - extract_type = /obj/item/slime_extract/darkpurple - colour = "dark purple" - -/obj/item/slimecross/reproductive/darkblue - extract_type = /obj/item/slime_extract/darkblue - colour = "dark blue" - -/obj/item/slimecross/reproductive/silver - extract_type = /obj/item/slime_extract/silver - colour = "silver" - -/obj/item/slimecross/reproductive/bluespace - extract_type = /obj/item/slime_extract/bluespace - colour = "bluespace" - -/obj/item/slimecross/reproductive/sepia - extract_type = /obj/item/slime_extract/sepia - colour = "sepia" - -/obj/item/slimecross/reproductive/cerulean - extract_type = /obj/item/slime_extract/cerulean - colour = "cerulean" - -/obj/item/slimecross/reproductive/pyrite - extract_type = /obj/item/slime_extract/pyrite - colour = "pyrite" - -/obj/item/slimecross/reproductive/red - extract_type = /obj/item/slime_extract/red - colour = "red" - -/obj/item/slimecross/reproductive/green - extract_type = /obj/item/slime_extract/green - colour = "green" - -/obj/item/slimecross/reproductive/pink - extract_type = /obj/item/slime_extract/pink - colour = "pink" - -/obj/item/slimecross/reproductive/gold - extract_type = /obj/item/slime_extract/gold - colour = "gold" - -/obj/item/slimecross/reproductive/oil - extract_type = /obj/item/slime_extract/oil - colour = "oil" - -/obj/item/slimecross/reproductive/black - extract_type = /obj/item/slime_extract/black - colour = "black" - -/obj/item/slimecross/reproductive/lightpink - extract_type = /obj/item/slime_extract/lightpink - colour = "light pink" - -/obj/item/slimecross/reproductive/adamantine - extract_type = /obj/item/slime_extract/adamantine - colour = "adamantine" - -/obj/item/slimecross/reproductive/rainbow - extract_type = /obj/item/slime_extract/rainbow - colour = "rainbow" diff --git a/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm b/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm deleted file mode 100644 index 814083c3bb50..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm +++ /dev/null @@ -1,149 +0,0 @@ -/* -Self-sustaining extracts: - Produces 4 extracts that do not need reagents. -*/ -/obj/item/slimecross/selfsustaining - name = "self-sustaining extract" - effect = "self-sustaining" - icon_state = "selfsustaining" - var/extract_type = /obj/item/slime_extract - -/obj/item/autoslime - name = "autoslime" - desc = "It resembles a normal slime extract, but seems filled with a strange, multi-colored fluid." - var/obj/item/slime_extract/extract - var/effect_desc = "A self-sustaining slime extract. When used, lets you choose which reaction you want." - -//Just divides into the actual item. -/obj/item/slimecross/selfsustaining/Initialize() - ..() - visible_message("The [src] shudders, and splits into four smaller extracts.") - for(var/i = 0, i < 4, i++) - var/obj/item/autoslime/A = new /obj/item/autoslime(src.loc) - var/obj/item/slime_extract/X = new extract_type(A) - A.extract = X - A.icon = icon - A.icon_state = icon_state - A.color = color - A.name = "self-sustaining " + colour + " extract" - return INITIALIZE_HINT_QDEL - -/obj/item/autoslime/Initialize() - return ..() - -/obj/item/autoslime/attack_self(mob/user) - var/reagentselect = input(user, "Choose the reagent the extract will produce.", "Self-sustaining Reaction") as null|anything in sortList(extract.activate_reagents, /proc/cmp_typepaths_asc) - var/amount = 5 - var/secondary - - if (user.get_active_held_item() != src || user.stat != CONSCIOUS || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) - return - if(!reagentselect) - return - if(reagentselect == "lesser plasma") - amount = 4 - reagentselect = /datum/reagent/toxin/plasma - if(reagentselect == "holy water and uranium") - reagentselect = /datum/reagent/water/holywater - secondary = /datum/reagent/uranium - extract.forceMove(user.drop_location()) - qdel(src) - user.put_in_active_hand(extract) - extract.reagents.add_reagent(reagentselect,amount) - if(secondary) - extract.reagents.add_reagent(secondary,amount) - -/obj/item/autoslime/examine(mob/user) - . = ..() - if(effect_desc) - . += "[effect_desc]" - -//Different types. - -/obj/item/slimecross/selfsustaining/grey - extract_type = /obj/item/slime_extract/grey - colour = "grey" - -/obj/item/slimecross/selfsustaining/orange - extract_type = /obj/item/slime_extract/orange - colour = "orange" - -/obj/item/slimecross/selfsustaining/purple - extract_type = /obj/item/slime_extract/purple - colour = "purple" - -/obj/item/slimecross/selfsustaining/blue - extract_type = /obj/item/slime_extract/blue - colour = "blue" - -/obj/item/slimecross/selfsustaining/metal - extract_type = /obj/item/slime_extract/metal - colour = "metal" - -/obj/item/slimecross/selfsustaining/yellow - extract_type = /obj/item/slime_extract/yellow - colour = "yellow" - -/obj/item/slimecross/selfsustaining/darkpurple - extract_type = /obj/item/slime_extract/darkpurple - colour = "dark purple" - -/obj/item/slimecross/selfsustaining/darkblue - extract_type = /obj/item/slime_extract/darkblue - colour = "dark blue" - -/obj/item/slimecross/selfsustaining/silver - extract_type = /obj/item/slime_extract/silver - colour = "silver" - -/obj/item/slimecross/selfsustaining/bluespace - extract_type = /obj/item/slime_extract/bluespace - colour = "bluespace" - -/obj/item/slimecross/selfsustaining/sepia - extract_type = /obj/item/slime_extract/sepia - colour = "sepia" - -/obj/item/slimecross/selfsustaining/cerulean - extract_type = /obj/item/slime_extract/cerulean - colour = "cerulean" - -/obj/item/slimecross/selfsustaining/pyrite - extract_type = /obj/item/slime_extract/pyrite - colour = "pyrite" - -/obj/item/slimecross/selfsustaining/red - extract_type = /obj/item/slime_extract/red - colour = "red" - -/obj/item/slimecross/selfsustaining/green - extract_type = /obj/item/slime_extract/green - colour = "green" - -/obj/item/slimecross/selfsustaining/pink - extract_type = /obj/item/slime_extract/pink - colour = "pink" - -/obj/item/slimecross/selfsustaining/gold - extract_type = /obj/item/slime_extract/gold - colour = "gold" - -/obj/item/slimecross/selfsustaining/oil - extract_type = /obj/item/slime_extract/oil - colour = "oil" - -/obj/item/slimecross/selfsustaining/black - extract_type = /obj/item/slime_extract/black - colour = "black" - -/obj/item/slimecross/selfsustaining/lightpink - extract_type = /obj/item/slime_extract/lightpink - colour = "light pink" - -/obj/item/slimecross/selfsustaining/adamantine - extract_type = /obj/item/slime_extract/adamantine - colour = "adamantine" - -/obj/item/slimecross/selfsustaining/rainbow - extract_type = /obj/item/slime_extract/rainbow - colour = "rainbow" diff --git a/code/modules/research/xenobiology/crossbreeding/stabilized.dm b/code/modules/research/xenobiology/crossbreeding/stabilized.dm deleted file mode 100644 index eee23636f780..000000000000 --- a/code/modules/research/xenobiology/crossbreeding/stabilized.dm +++ /dev/null @@ -1,190 +0,0 @@ -/* -Stabilized extracts: - Provides a passive buff to the holder. -*/ - -//To add: Create an effect in crossbreeding/_status_effects.dm with the name "/datum/status_effect/stabilized/[color]" -//Status effect will automatically be applied while held, and lost on drop. - -/obj/item/slimecross/stabilized - name = "stabilized extract" - desc = "It seems inert, but anything it touches glows softly..." - effect = "stabilized" - icon_state = "stabilized" - var/datum/status_effect/linked_effect - var/mob/living/owner - -/obj/item/slimecross/stabilized/Initialize() - . = ..() - START_PROCESSING(SSobj,src) - -/obj/item/slimecross/stabilized/Destroy() - STOP_PROCESSING(SSobj,src) - qdel(linked_effect) - return ..() - -/obj/item/slimecross/stabilized/process() - var/humanfound = null - if(ishuman(loc)) - humanfound = loc - if(ishuman(loc.loc)) //Check if in backpack. - humanfound = (loc.loc) - if(!humanfound) - return - var/mob/living/carbon/human/H = humanfound - var/effectpath = /datum/status_effect/stabilized - var/static/list/effects = subtypesof(/datum/status_effect/stabilized) - for(var/X in effects) - var/datum/status_effect/stabilized/S = X - if(initial(S.colour) == colour) - effectpath = S - break - if(!H.has_status_effect(effectpath)) - var/datum/status_effect/stabilized/S = H.apply_status_effect(effectpath) - owner = H - S.linked_extract = src - STOP_PROCESSING(SSobj,src) - - - -//Colors and subtypes: -/obj/item/slimecross/stabilized/grey - colour = "grey" - effect_desc = "Makes slimes friendly to the owner" - -/obj/item/slimecross/stabilized/orange - colour = "orange" - effect_desc = "Passively tries to increase or decrease the owner's body temperature to normal" - -/obj/item/slimecross/stabilized/purple - colour = "purple" - effect_desc = "Provides a regeneration effect" - -/obj/item/slimecross/stabilized/blue - colour = "blue" - effect_desc = "Makes the owner immune to slipping on water, soap or foam. Space lube and ice are still too slippery." - -/obj/item/slimecross/stabilized/metal - colour = "metal" - effect_desc = "Every 30 seconds, adds a sheet of material to a random stack in the owner's backpack." - -/obj/item/slimecross/stabilized/yellow - colour = "yellow" - effect_desc = "Every ten seconds it recharges a device on the owner by 10%." - -/obj/item/slimecross/stabilized/darkpurple - colour = "dark purple" - effect_desc = "Gives you burning fingertips, automatically cooking any microwavable food you hold." - -/obj/item/slimecross/stabilized/darkblue - colour = "dark blue" - effect_desc = "Slowly extinguishes the owner if they are on fire, also wets items like monkey cubes, creating a monkey." - -/obj/item/slimecross/stabilized/silver - colour = "silver" - effect_desc = "Slows the rate at which the owner loses nutrition" - -/obj/item/slimecross/stabilized/bluespace - colour = "bluespace" - effect_desc = "On a two minute cooldown, when the owner has taken enough damage, they are teleported to a safe place." - -/obj/item/slimecross/stabilized/sepia - colour = "sepia" - effect_desc = "Randomly adjusts the owner's speed." - -/obj/item/slimecross/stabilized/cerulean - colour = "cerulean" - effect_desc = "Creates a duplicate of the owner. If the owner dies they will take control of the duplicate, unless the death was from beheading or gibbing." - -/obj/item/slimecross/stabilized/pyrite - colour = "pyrite" - effect_desc = "Randomly colors the owner every few seconds." - -/obj/item/slimecross/stabilized/red - colour = "red" - effect_desc = "Nullifies all equipment based slowdowns." - -/obj/item/slimecross/stabilized/green - colour = "green" - effect_desc = "Changes the owner's name and appearance while holding this extract." - -/obj/item/slimecross/stabilized/pink - colour = "pink" - effect_desc = "As long as no creatures are harmed in the owner's presense, they will not attack you. If the peace is broken it takes two minutes to restore." - -/obj/item/slimecross/stabilized/gold - colour = "gold" - effect_desc = "Creates a pet when held." - var/mob_type - var/datum/mind/saved_mind - var/mob_name = "Familiar" - -/obj/item/slimecross/stabilized/gold/proc/generate_mobtype() - var/static/list/mob_spawn_pets = list() - if(mob_spawn_pets.len <= 0) - for(var/T in typesof(/mob/living/simple_animal)) - var/mob/living/simple_animal/SA = T - switch(initial(SA.gold_core_spawnable)) - if(FRIENDLY_SPAWN) - mob_spawn_pets += T - mob_type = pick(mob_spawn_pets) - -/obj/item/slimecross/stabilized/gold/Initialize() - . = ..() - generate_mobtype() - -/obj/item/slimecross/stabilized/gold/attack_self(mob/user) - var/choice = input(user, "Which do you want to reset?", "Familiar Adjustment") as null|anything in sortList(list("Familiar Location", "Familiar Species", "Familiar Sentience", "Familiar Name")) - if(!user.canUseTopic(src, BE_CLOSE)) - return - if(isliving(user)) - var/mob/living/L = user - if(L.has_status_effect(/datum/status_effect/stabilized/gold)) - L.remove_status_effect(/datum/status_effect/stabilized/gold) - if(choice == "Familiar Location") - to_chat(user, "You prod [src], and it shudders slightly.") - START_PROCESSING(SSobj, src) - if(choice == "Familiar Species") - to_chat(user, "You squeeze [src], and a shape seems to shift around inside.") - generate_mobtype() - START_PROCESSING(SSobj, src) - if(choice == "Familiar Sentience") - to_chat(user, "You poke [src], and it lets out a glowing pulse.") - saved_mind = null - START_PROCESSING(SSobj, src) - if(choice == "Familiar Name") - var/newname = sanitize_name(stripped_input(user, "Would you like to change the name of [mob_name]", "Name change", mob_name, MAX_NAME_LEN)) - if(newname) - mob_name = newname - to_chat(user, "You speak softly into [src], and it shakes slightly in response.") - START_PROCESSING(SSobj, src) - -/obj/item/slimecross/stabilized/oil - colour = "oil" - effect_desc = "The owner will violently explode when they die while holding this extract." - -/obj/item/slimecross/stabilized/black - colour = "black" - effect_desc = "While strangling someone, the owner's hands melt around their neck, draining their life in exchange for food and healing." - -/obj/item/slimecross/stabilized/lightpink - colour = "light pink" - effect_desc = "The owner moves at high speeds while holding this extract, also stabilizes anyone in critical condition around you using Epinephrine." - -/obj/item/slimecross/stabilized/adamantine - colour = "adamantine" - effect_desc = "Owner gains a slight boost in damage resistance to all types." - -/obj/item/slimecross/stabilized/rainbow - colour = "rainbow" - effect_desc = "Accepts a regenerative extract and automatically uses it if the owner enters a critical condition." - var/obj/item/slimecross/regenerative/regencore - -/obj/item/slimecross/stabilized/rainbow/attackby(obj/item/O, mob/user) - var/obj/item/slimecross/regenerative/regen = O - if(istype(regen) && !regencore) - to_chat(user, "You place [O] in [src], prepping the extract for automatic application!") - regencore = regen - regen.forceMove(src) - return - return ..() diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm deleted file mode 100644 index 81ac7db98b01..000000000000 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ /dev/null @@ -1,473 +0,0 @@ -//Xenobio control console -/mob/camera/aiEye/remote/xenobio - visible_icon = TRUE - icon = 'icons/mob/cameramob.dmi' - icon_state = "generic_camera" - var/allowed_area = null - -/mob/camera/aiEye/remote/xenobio/Initialize() - var/area/A = get_area(loc) - allowed_area = A.name - . = ..() - -/mob/camera/aiEye/remote/xenobio/setLoc(t) - var/area/new_area = get_area(t) - if(new_area && new_area.name == allowed_area || new_area && (new_area.area_flags & XENOBIOLOGY_COMPATIBLE)) - return ..() - else - return - -/obj/machinery/computer/camera_advanced/xenobio - name = "Slime management console" - desc = "A computer used for remotely handling slimes." - networks = list("ss13") - circuit = /obj/item/circuitboard/computer/xenobiology - var/datum/action/innate/slime_place/slime_place_action - var/datum/action/innate/slime_pick_up/slime_up_action - var/datum/action/innate/feed_slime/feed_slime_action - var/datum/action/innate/monkey_recycle/monkey_recycle_action - var/datum/action/innate/slime_scan/scan_action - var/datum/action/innate/feed_potion/potion_action - var/datum/action/innate/hotkey_help/hotkey_help - - var/obj/machinery/monkey_recycler/connected_recycler - var/list/stored_slimes - var/obj/item/slimepotion/slime/current_potion - var/max_slimes = 5 - var/monkeys = 0 - - icon_screen = "slime_comp" - icon_keyboard = "rd_key" - - light_color = LIGHT_COLOR_PINK - -/obj/machinery/computer/camera_advanced/xenobio/Initialize(mapload) - . = ..() - slime_place_action = new - slime_up_action = new - feed_slime_action = new - monkey_recycle_action = new - scan_action = new - potion_action = new - hotkey_help = new - stored_slimes = list() - for(var/obj/machinery/monkey_recycler/recycler in GLOB.monkey_recyclers) - if(get_area(recycler.loc) == get_area(loc)) - connected_recycler = recycler - connected_recycler.connected += src - -/obj/machinery/computer/camera_advanced/xenobio/Destroy() - QDEL_NULL(current_potion) - for(var/thing in stored_slimes) - var/mob/living/simple_animal/slime/S = thing - S.forceMove(drop_location()) - stored_slimes.Cut() - if(connected_recycler) - connected_recycler.connected -= src - connected_recycler = null - return ..() - -/obj/machinery/computer/camera_advanced/xenobio/handle_atom_del(atom/A) - if(A == current_potion) - current_potion = null - if(A in stored_slimes) - stored_slimes -= A - return ..() - -/obj/machinery/computer/camera_advanced/xenobio/CreateEye() - eyeobj = new /mob/camera/aiEye/remote/xenobio(get_turf(src)) - eyeobj.origin = src - eyeobj.visible_icon = TRUE - eyeobj.icon = 'icons/mob/cameramob.dmi' - eyeobj.icon_state = "generic_camera" - -/obj/machinery/computer/camera_advanced/xenobio/GrantActions(mob/living/user) - ..() - - if(slime_up_action) - slime_up_action.target = src - slime_up_action.Grant(user) - actions += slime_up_action - - if(slime_place_action) - slime_place_action.target = src - slime_place_action.Grant(user) - actions += slime_place_action - - if(feed_slime_action) - feed_slime_action.target = src - feed_slime_action.Grant(user) - actions += feed_slime_action - - if(monkey_recycle_action) - monkey_recycle_action.target = src - monkey_recycle_action.Grant(user) - actions += monkey_recycle_action - - if(scan_action) - scan_action.target = src - scan_action.Grant(user) - actions += scan_action - - if(potion_action) - potion_action.target = src - potion_action.Grant(user) - actions += potion_action - - if(hotkey_help) - hotkey_help.target = src - hotkey_help.Grant(user) - actions += hotkey_help - - RegisterSignal(user, COMSIG_XENO_SLIME_CLICK_CTRL, PROC_REF(XenoSlimeClickCtrl)) - RegisterSignal(user, COMSIG_XENO_SLIME_CLICK_ALT, PROC_REF(XenoSlimeClickAlt)) - RegisterSignal(user, COMSIG_XENO_SLIME_CLICK_SHIFT, PROC_REF(XenoSlimeClickShift)) - RegisterSignal(user, COMSIG_XENO_TURF_CLICK_SHIFT, PROC_REF(XenoTurfClickShift)) - RegisterSignal(user, COMSIG_XENO_TURF_CLICK_CTRL, PROC_REF(XenoTurfClickCtrl)) - RegisterSignal(user, COMSIG_XENO_MONKEY_CLICK_CTRL, PROC_REF(XenoMonkeyClickCtrl)) - - //Checks for recycler on every interact, prevents issues with load order on certain maps. - if(!connected_recycler) - for(var/obj/machinery/monkey_recycler/recycler in GLOB.monkey_recyclers) - if(get_area(recycler.loc) == get_area(loc)) - connected_recycler = recycler - connected_recycler.connected += src - -/obj/machinery/computer/camera_advanced/xenobio/remove_eye_control(mob/living/user) - UnregisterSignal(user, COMSIG_XENO_SLIME_CLICK_CTRL) - UnregisterSignal(user, COMSIG_XENO_SLIME_CLICK_ALT) - UnregisterSignal(user, COMSIG_XENO_SLIME_CLICK_SHIFT) - UnregisterSignal(user, COMSIG_XENO_TURF_CLICK_SHIFT) - UnregisterSignal(user, COMSIG_XENO_TURF_CLICK_CTRL) - UnregisterSignal(user, COMSIG_XENO_MONKEY_CLICK_CTRL) - ..() - -/obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube)) - monkeys++ - to_chat(user, "You feed [O] to [src]. It now has [monkeys] monkey cubes stored.") - qdel(O) - return - else if(istype(O, /obj/item/storage/bag)) - var/obj/item/storage/P = O - var/loaded = FALSE - for(var/obj/G in P.contents) - if(istype(G, /obj/item/reagent_containers/food/snacks/monkeycube)) - loaded = TRUE - monkeys++ - qdel(G) - if(loaded) - to_chat(user, "You fill [src] with the monkey cubes stored in [O]. [src] now has [monkeys] monkey cubes stored.") - return - else if(istype(O, /obj/item/slimepotion/slime)) - var/replaced = FALSE - if(user && !user.transferItemToLoc(O, src)) - return - if(!QDELETED(current_potion)) - current_potion.forceMove(drop_location()) - replaced = TRUE - current_potion = O - to_chat(user, "You load [O] in the console's potion slot[replaced ? ", replacing the one that was there before" : ""].") - return - ..() - -/obj/machinery/computer/camera_advanced/xenobio/multitool_act(mob/living/user, obj/item/multitool/I) - . = ..() - if (istype(I) && istype(I.buffer,/obj/machinery/monkey_recycler)) - to_chat(user, "You link [src] with [I.buffer] in [I] buffer.") - connected_recycler = I.buffer - connected_recycler.connected += src - return TRUE - -/datum/action/innate/slime_place - name = "Place Slimes" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "slime_down" - -/datum/action/innate/slime_place/Activate() - if(!target || !isliving(owner)) - return - var/mob/living/C = owner - var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = target - - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - for(var/mob/living/simple_animal/slime/S in X.stored_slimes) - S.forceMove(remote_eye.loc) - S.visible_message("[S] warps in!") - X.stored_slimes -= S - else - to_chat(owner, "Target is not near a camera. Cannot proceed.") - -/datum/action/innate/slime_pick_up - name = "Pick up Slime" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "slime_up" - -/datum/action/innate/slime_pick_up/Activate() - if(!target || !isliving(owner)) - return - var/mob/living/C = owner - var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = target - - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - for(var/mob/living/simple_animal/slime/S in remote_eye.loc) - if(X.stored_slimes.len >= X.max_slimes) - break - if(!S.ckey) - if(S.buckled) - S.Feedstop(silent = TRUE) - S.visible_message("[S] vanishes in a flash of light!") - S.forceMove(X) - X.stored_slimes += S - else - to_chat(owner, "Target is not near a camera. Cannot proceed.") - - -/datum/action/innate/feed_slime - name = "Feed Slimes" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "monkey_down" - -/datum/action/innate/feed_slime/Activate() - if(!target || !isliving(owner)) - return - var/mob/living/C = owner - var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = target - - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - if(X.monkeys >= 1) - var/mob/living/carbon/monkey/food = new /mob/living/carbon/monkey(remote_eye.loc, TRUE, owner) - if (!QDELETED(food)) - food.LAssailant = WEAKREF(C) - X.monkeys-- - X.monkeys = round(X.monkeys, 0.1) //Prevents rounding errors - to_chat(owner, "[X] now has [X.monkeys] monkeys stored.") - else - to_chat(owner, "[X] needs to have at least 1 monkey stored. Currently has [X.monkeys] monkeys stored.") - else - to_chat(owner, "Target is not near a camera. Cannot proceed.") - - -/datum/action/innate/monkey_recycle - name = "Recycle Monkeys" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "monkey_up" - -/datum/action/innate/monkey_recycle/Activate() - if(!target || !isliving(owner)) - return - var/mob/living/C = owner - var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = target - var/obj/machinery/monkey_recycler/recycler = X.connected_recycler - - if(!recycler) - to_chat(owner, "There is no connected monkey recycler. Use a multitool to link one.") - return - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - for(var/mob/living/carbon/monkey/M in remote_eye.loc) - if(M.stat) - M.visible_message("[M] vanishes as [M.p_theyre()] reclaimed for recycling!") - recycler.use_power(500) - X.monkeys += recycler.cube_production - X.monkeys = round(X.monkeys, 0.1) //Prevents rounding errors - qdel(M) - to_chat(owner, "[X] now has [X.monkeys] monkeys available.") - else - to_chat(owner, "Target is not near a camera. Cannot proceed.") - -/datum/action/innate/slime_scan - name = "Scan Slime" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "slime_scan" - -/datum/action/innate/slime_scan/Activate() - if(!target || !isliving(owner)) - return - var/mob/living/C = owner - var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control - - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - for(var/mob/living/simple_animal/slime/S in remote_eye.loc) - slime_scan(S, C) - else - to_chat(owner, "Target is not near a camera. Cannot proceed.") - -/datum/action/innate/feed_potion - name = "Apply Potion" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "slime_potion" - -/datum/action/innate/feed_potion/Activate() - if(!target || !isliving(owner)) - return - - var/mob/living/C = owner - var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = target - - if(QDELETED(X.current_potion)) - to_chat(owner, "No potion loaded.") - return - - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - for(var/mob/living/simple_animal/slime/S in remote_eye.loc) - X.current_potion.attack(S, C) - break - else - to_chat(owner, "Target is not near a camera. Cannot proceed.") - -/datum/action/innate/hotkey_help - name = "Hotkey Help" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "hotkey_help" - -/datum/action/innate/hotkey_help/Activate() - if(!target || !isliving(owner)) - return - to_chat(owner, "Click shortcuts:") - to_chat(owner, "Shift-click a slime to pick it up, or the floor to drop all held slimes.") - to_chat(owner, "Ctrl-click a slime to scan it.") - to_chat(owner, "Alt-click a slime to feed it a potion.") - to_chat(owner, "Ctrl-click or a dead monkey to recycle it, or the floor to place a new monkey.") - -// -// Alternate clicks for slime, monkey and open turf if using a xenobio console - -// Scans slime -/mob/living/simple_animal/slime/CtrlClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_SLIME_CLICK_CTRL, src) - ..() - -//Feeds a potion to slime -/mob/living/simple_animal/slime/AltClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_SLIME_CLICK_ALT, src) - ..() - -//Picks up slime -/mob/living/simple_animal/slime/ShiftClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_SLIME_CLICK_SHIFT, src) - ..() - -//Place slimes -/turf/open/ShiftClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_TURF_CLICK_SHIFT, src) - ..() - -//Place monkey -/turf/open/CtrlClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_TURF_CLICK_CTRL, src) - ..() - -//Pick up monkey -/mob/living/carbon/monkey/CtrlClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_MONKEY_CLICK_CTRL, src) - ..() - -// Scans slime -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickCtrl(mob/living/user, mob/living/simple_animal/slime/S) - if(!GLOB.cameranet.checkTurfVis(S.loc)) - to_chat(user, "Target is not near a camera. Cannot proceed.") - return - var/mob/living/C = user - var/mob/camera/aiEye/remote/xenobio/E = C.remote_control - var/area/mobarea = get_area(S.loc) - if(mobarea.name == E.allowed_area || (mobarea & XENOBIOLOGY_COMPATIBLE)) - slime_scan(S, C) - -//Feeds a potion to slime -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickAlt(mob/living/user, mob/living/simple_animal/slime/S) - if(!GLOB.cameranet.checkTurfVis(S.loc)) - to_chat(user, "Target is not near a camera. Cannot proceed.") - return - var/mob/living/C = user - var/mob/camera/aiEye/remote/xenobio/E = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin - var/area/mobarea = get_area(S.loc) - if(QDELETED(X.current_potion)) - to_chat(C, "No potion loaded.") - return - if(mobarea.name == E.allowed_area ||(mobarea & XENOBIOLOGY_COMPATIBLE)) - X.current_potion.attack(S, C) - -//Picks up slime -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickShift(mob/living/user, mob/living/simple_animal/slime/S) - if(!GLOB.cameranet.checkTurfVis(S.loc)) - to_chat(user, "Target is not near a camera. Cannot proceed.") - return - var/mob/living/C = user - var/mob/camera/aiEye/remote/xenobio/E = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin - var/area/mobarea = get_area(S.loc) - if(mobarea.name == E.allowed_area || (mobarea & XENOBIOLOGY_COMPATIBLE)) - if(X.stored_slimes.len >= X.max_slimes) - to_chat(C, "Slime storage is full.") - return - if(S.ckey) - to_chat(C, "The slime wiggled free!") - return - if(S.buckled) - S.Feedstop(silent = TRUE) - S.visible_message("[S] vanishes in a flash of light!") - S.forceMove(X) - X.stored_slimes += S - -//Place slimes -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoTurfClickShift(mob/living/user, turf/open/T) - if(!GLOB.cameranet.checkTurfVis(T)) - to_chat(user, "Target is not near a camera. Cannot proceed.") - return - var/mob/living/C = user - var/mob/camera/aiEye/remote/xenobio/E = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin - var/area/turfarea = get_area(T) - if(turfarea.name == E.allowed_area || (turfarea & XENOBIOLOGY_COMPATIBLE)) - for(var/mob/living/simple_animal/slime/S in X.stored_slimes) - S.forceMove(T) - S.visible_message("[S] warps in!") - X.stored_slimes -= S - -//Place monkey -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoTurfClickCtrl(mob/living/user, turf/open/T) - if(!GLOB.cameranet.checkTurfVis(T)) - to_chat(user, "Target is not near a camera. Cannot proceed.") - return - var/mob/living/C = user - var/mob/camera/aiEye/remote/xenobio/E = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin - var/area/turfarea = get_area(T) - if(turfarea.name == E.allowed_area || (turfarea & XENOBIOLOGY_COMPATIBLE)) - if(X.monkeys >= 1) - var/mob/living/carbon/monkey/food = new /mob/living/carbon/monkey(T, TRUE, C) - if (!QDELETED(food)) - food.LAssailant = WEAKREF(C) - X.monkeys-- - X.monkeys = round(X.monkeys, 0.1) //Prevents rounding errors - to_chat(C, "[X] now has [X.monkeys] monkeys stored.") - else - to_chat(C, "[X] needs to have at least 1 monkey stored. Currently has [X.monkeys] monkeys stored.") - -//Pick up monkey -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoMonkeyClickCtrl(mob/living/user, mob/living/carbon/monkey/M) - if(!isturf(M.loc) || !GLOB.cameranet.checkTurfVis(M.loc)) - to_chat(user, "Target is not near a camera. Cannot proceed.") - return - var/mob/living/C = user - var/mob/camera/aiEye/remote/xenobio/E = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin - var/area/mobarea = get_area(M.loc) - if(!X.connected_recycler) - to_chat(C, "There is no connected monkey recycler. Use a multitool to link one.") - return - if(mobarea.name == E.allowed_area || (mobarea & XENOBIOLOGY_COMPATIBLE)) - if(!M.stat) - return - M.visible_message("[M] vanishes as [p_theyre()] reclaimed for recycling!") - X.connected_recycler.use_power(500) - X.monkeys += connected_recycler.cube_production - X.monkeys = round(X.monkeys, 0.1) //Prevents rounding errors - qdel(M) - to_chat(C, "[X] now has [X.monkeys] monkeys available.") diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm deleted file mode 100644 index c907f11c1cfa..000000000000 --- a/code/modules/research/xenobiology/xenobiology.dm +++ /dev/null @@ -1,1072 +0,0 @@ -/// Slime Extracts /// - -/obj/item/slime_extract - name = "slime extract" - desc = "Goo extracted from a slime. Legends claim these to have \"magical powers\"." - icon = 'icons/mob/slimes.dmi' - icon_state = "grey slime extract" - force = 0 - w_class = WEIGHT_CLASS_TINY - throwforce = 0 - throw_speed = 3 - throw_range = 6 - grind_results = list() - var/Uses = 1 ///uses before it goes inert - var/qdel_timer = null ///deletion timer, for delayed reactions - var/effectmod ///Which type of crossbred - var/crossbreed_modifier = 1 //Modifies how many extracts are needed to cross a core. - var/list/activate_reagents = list() ///Reagents required for activation - var/recurring = FALSE - var/research ///Research point value for slime cores. These are defines stored in [/__DEFINES/research] - the actual values are updated there. - -/obj/item/slime_extract/examine(mob/user) - . = ..() - if(Uses > 1) - . += "It has [Uses] uses remaining." - -/obj/item/slime_extract/attackby(obj/item/O, mob/user) - if(istype(O, /obj/item/slimepotion/enhancer)) - if(Uses >= 5 || recurring) - to_chat(user, "You cannot enhance this extract further!") - return ..() - if(O.type == /obj/item/slimepotion/enhancer) //Seriously, why is this defined here...? - to_chat(user, "You apply the enhancer to the slime extract. It may now be reused one more time.") - Uses++ - if(O.type == /obj/item/slimepotion/enhancer/max) - to_chat(user, "You dump the maximizer on the slime extract. It can now be used a total of 5 times!") - Uses = 5 - qdel(O) - ..() - -/obj/item/slime_extract/Initialize() - . = ..() - create_reagents(100, INJECTABLE | DRAWABLE) - -/obj/item/slime_extract/on_grind() - if(Uses) - grind_results[/datum/reagent/toxin/slimejelly] = 20 - -/** -* Effect when activated by a Luminescent. -* -* This proc is called whenever a Luminescent consumes a slime extract. Each one is separated into major and minor effects depending on the extract. Cooldown is measured in deciseconds. -* -* * arg1 - The mob absorbing the slime extract. -* * arg2 - The valid species for the absorbtion. Should always be a Luminescent unless something very major has changed. -* * arg3 - Whether or not the activation is major or minor. Major activations have large, complex effects, minor are simple. -*/ -/obj/item/slime_extract/proc/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - to_chat(user, "Nothing happened... This slime extract cannot be activated this way.") - return 0 - -/** -* Core-crossing: Feeding adult slimes extracts to obtain a much more powerful, single extract. -* -* By using a valid core on a living adult slime, then feeding it nine more of the same type, you can mutate it into more useful items. Not every slime type has an implemented core cross. -*/ -/obj/item/slime_extract/attack(mob/living/simple_animal/slime/M, mob/user) - if(!isslime(M)) - return ..() - if(M.stat) - to_chat(user, "The slime is dead!") - return - if(!M.is_adult) - to_chat(user, "The slime must be an adult to cross its core!") - return - if(M.effectmod && M.effectmod != effectmod) - to_chat(user, "The slime is already being crossed with a different extract!") - return - - if(!M.effectmod) - M.effectmod = effectmod - M.crossbreed_modifier = crossbreed_modifier - - M.applied++ - qdel(src) - to_chat(user, "You feed the slime [src], [M.applied == 1 ? "starting to mutate its core." : "further mutating its core."]") - playsound(M, 'sound/effects/attackblob.ogg', 50, TRUE) - - if(M.applied >= (SLIME_EXTRACT_CROSSING_REQUIRED * crossbreed_modifier)) - M.spawn_corecross() - -/obj/item/slime_extract/grey - name = "grey slime extract" - icon_state = "grey slime extract" - effectmod = "reproductive" - activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_0 - custom_price = 1000 - -/obj/item/slime_extract/grey/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - var/obj/item/reagent_containers/food/snacks/monkeycube/M = new - if(!user.put_in_active_hand(M)) - M.forceMove(user.drop_location()) - playsound(user, 'sound/effects/splat.ogg', 50, TRUE) - to_chat(user, "You spit out a monkey cube.") - return 120 - if(SLIME_ACTIVATE_MAJOR) - to_chat(user, "Your [name] starts pulsing...") - if(do_after(user, 40, target = user)) - var/mob/living/simple_animal/slime/S = new(get_turf(user), "grey") - playsound(user, 'sound/effects/splat.ogg', 50, TRUE) - to_chat(user, "You spit out [S].") - return 350 - else - return 0 - -/obj/item/slime_extract/gold - name = "gold slime extract" - icon_state = "gold slime extract" - effectmod = "symbiont" - activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_4 - -/obj/item/slime_extract/gold/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - user.visible_message("[user] starts shaking!","Your [name] starts pulsing gently...") - if(do_after(user, 40, target = user)) - var/mob/living/simple_animal/S = create_random_mob(user.drop_location(), FRIENDLY_SPAWN) - S.faction |= "neutral" - playsound(user, 'sound/effects/splat.ogg', 50, TRUE) - user.visible_message("[user] spits out [S]!", "You spit out [S]!") - return 300 - - if(SLIME_ACTIVATE_MAJOR) - user.visible_message("[user] starts shaking violently!","Your [name] starts pulsing violently...") - if(do_after(user, 50, target = user)) - var/mob/living/simple_animal/S = create_random_mob(user.drop_location(), HOSTILE_SPAWN) - if(user.a_intent != INTENT_HARM) - S.faction |= "neutral" - else - S.faction |= "slime" - playsound(user, 'sound/effects/splat.ogg', 50, TRUE) - user.visible_message("[user] spits out [S]!", "You spit out [S]!") - return 600 - -/obj/item/slime_extract/silver - name = "silver slime extract" - icon_state = "silver slime extract" - effectmod = "consuming" - activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_2 - -/obj/item/slime_extract/silver/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - var/food_type = get_random_food() - var/obj/O = new food_type - if(!user.put_in_active_hand(O)) - O.forceMove(user.drop_location()) - playsound(user, 'sound/effects/splat.ogg', 50, TRUE) - user.visible_message("[user] spits out [O]!", "You spit out [O]!") - return 200 - if(SLIME_ACTIVATE_MAJOR) - var/drink_type = get_random_drink() - var/obj/O = new drink_type - if(!user.put_in_active_hand(O)) - O.forceMove(user.drop_location()) - playsound(user, 'sound/effects/splat.ogg', 50, TRUE) - user.visible_message("[user] spits out [O]!", "You spit out [O]!") - return 200 - -/obj/item/slime_extract/metal - name = "metal slime extract" - icon_state = "metal slime extract" - effectmod = "industrial" - activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_1 - -/obj/item/slime_extract/metal/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - var/obj/item/stack/sheet/glass/O = new(null, 5) - if(!user.put_in_active_hand(O)) - O.forceMove(user.drop_location()) - playsound(user, 'sound/effects/splat.ogg', 50, TRUE) - user.visible_message("[user] spits out [O]!", "You spit out [O]!") - return 150 - - if(SLIME_ACTIVATE_MAJOR) - var/obj/item/stack/sheet/metal/O = new(null, 5) - if(!user.put_in_active_hand(O)) - O.forceMove(user.drop_location()) - playsound(user, 'sound/effects/splat.ogg', 50, TRUE) - user.visible_message("[user] spits out [O]!", "You spit out [O]!") - return 200 - -/obj/item/slime_extract/purple - name = "purple slime extract" - icon_state = "purple slime extract" - effectmod = "regenerative" - crossbreed_modifier = 0.3 - activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) - research = SLIME_RESEARCH_TIER_1 - -/obj/item/slime_extract/purple/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - user.adjust_nutrition(50) - user.blood_volume += 50 - to_chat(user, "You activate [src], and your body is refilled with fresh slime jelly!") - return 150 - - if(SLIME_ACTIVATE_MAJOR) - to_chat(user, "You activate [src], and it releases regenerative chemicals!") - user.reagents.add_reagent(/datum/reagent/medicine/regen_jelly,10) - return 600 - -/obj/item/slime_extract/darkpurple - name = "dark purple slime extract" - icon_state = "dark purple slime extract" - effectmod = "self-sustaining" - activate_reagents = list(/datum/reagent/toxin/plasma) - research = SLIME_RESEARCH_TIER_2 - -/obj/item/slime_extract/darkpurple/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - var/obj/item/stack/sheet/mineral/plasma/O = new(null, 1) - if(!user.put_in_active_hand(O)) - O.forceMove(user.drop_location()) - playsound(user, 'sound/effects/splat.ogg', 50, TRUE) - user.visible_message("[user] spits out [O]!", "You spit out [O]!") - return 150 - - if(SLIME_ACTIVATE_MAJOR) - var/turf/open/T = get_turf(user) - if(istype(T)) - T.atmos_spawn_air("plasma=20") - to_chat(user, "You activate [src], and a cloud of plasma bursts out of your skin!") - return 900 - -/obj/item/slime_extract/orange - name = "orange slime extract" - icon_state = "orange slime extract" - effectmod = "burning" - activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_1 - -/obj/item/slime_extract/orange/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - to_chat(user, "You activate [src]. You start feeling hot!") - user.reagents.add_reagent(/datum/reagent/consumable/capsaicin,10) - return 150 - - if(SLIME_ACTIVATE_MAJOR) - user.reagents.add_reagent(/datum/reagent/phosphorus,5)// - user.reagents.add_reagent(/datum/reagent/potassium,5) // = smoke, along with any reagents inside mr. slime - user.reagents.add_reagent(/datum/reagent/consumable/sugar,5) // - to_chat(user, "You activate [src], and a cloud of smoke bursts out of your skin!") - return 450 - -/obj/item/slime_extract/yellow - name = "yellow slime extract" - icon_state = "yellow slime extract" - effectmod = "charged" - crossbreed_modifier = 0.8 - activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_2 - -/obj/item/slime_extract/yellow/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - if(species.glow_intensity != LUMINESCENT_DEFAULT_GLOW) - to_chat(user, "Your glow is already enhanced!") - return - species.update_glow(user, 5) - addtimer(CALLBACK(species, TYPE_PROC_REF(/datum/species/jelly/luminescent, update_glow), user, LUMINESCENT_DEFAULT_GLOW), 600) - to_chat(user, "You start glowing brighter.") - - if(SLIME_ACTIVATE_MAJOR) - user.visible_message("[user]'s skin starts flashing intermittently...", "Your skin starts flashing intermittently...") - if(do_after(user, 25, target = user)) - empulse(user, 1, 2) - user.visible_message("[user]'s skin flashes!", "Your skin flashes as you emit an electromagnetic pulse!") - return 600 - -/obj/item/slime_extract/red - name = "red slime extract" - icon_state = "red slime extract" - effectmod = "sanguine" - activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_4 - -/obj/item/slime_extract/red/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - to_chat(user, "You activate [src]. You start feeling fast!") - user.reagents.add_reagent(/datum/reagent/medicine/ephedrine,5) - return 450 - - if(SLIME_ACTIVATE_MAJOR) - user.visible_message("[user]'s skin flashes red for a moment...", "Your skin flashes red as you emit rage-inducing pheromones...") - for(var/mob/living/simple_animal/slime/slime in viewers(get_turf(user), null)) - slime.rabid = TRUE - slime.visible_message("The [slime] is driven into a frenzy!") - return 600 - -/obj/item/slime_extract/blue - name = "blue slime extract" - icon_state = "blue slime extract" - effectmod = "stabilized" - activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_1 - -/obj/item/slime_extract/blue/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - to_chat(user, "You activate [src]. Your genome feels more stable!") - user.adjustCloneLoss(-15) - user.reagents.add_reagent(/datum/reagent/medicine/mutadone, 10) - user.reagents.add_reagent(/datum/reagent/medicine/potass_iodide, 10) - return 250 - - if(SLIME_ACTIVATE_MAJOR) - user.reagents.create_foam(/datum/effect_system/foam_spread,20) - user.visible_message("Foam spews out from [user]'s skin!", "You activate [src], and foam bursts out of your skin!") - return 600 - -/obj/item/slime_extract/darkblue - name = "dark blue slime extract" - icon_state = "dark blue slime extract" - effectmod = "chilling" - activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_2 - -/obj/item/slime_extract/darkblue/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - to_chat(user, "You activate [src]. You start feeling colder!") - user.ExtinguishMob() - user.adjust_fire_stacks(-20) - user.reagents.add_reagent(/datum/reagent/consumable/frostoil,4) - user.reagents.add_reagent(/datum/reagent/medicine/cryoxadone,5) - return 100 - - if(SLIME_ACTIVATE_MAJOR) - var/turf/open/T = get_turf(user) - if(istype(T)) - T.atmos_spawn_air("nitrogen=40;TEMP=2.7") - to_chat(user, "You activate [src], and icy air bursts out of your skin!") - return 900 - -/obj/item/slime_extract/pink - name = "pink slime extract" - icon_state = "pink slime extract" - effectmod = "gentle" - activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) - research = SLIME_RESEARCH_TIER_4 - -/obj/item/slime_extract/pink/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - if(user.gender != MALE && user.gender != FEMALE) - to_chat(user, "You can't swap your gender!") - return - - if(user.gender == MALE) - user.gender = FEMALE - user.visible_message("[user] suddenly looks more feminine!", "You suddenly feel more feminine!") - else - user.gender = MALE - user.visible_message("[user] suddenly looks more masculine!", "You suddenly feel more masculine!") - return 100 - - if(SLIME_ACTIVATE_MAJOR) - user.visible_message("[user]'s skin starts flashing hypnotically...", "Your skin starts forming odd patterns, pacifying creatures around you.") - for(var/mob/living/carbon/C in viewers(user, null)) - if(C != user) - C.reagents.add_reagent(/datum/reagent/pax,2) - return 600 - -/obj/item/slime_extract/green - name = "green slime extract" - icon_state = "green slime extract" - effectmod = "mutative" - activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/uranium/radium) - research = SLIME_RESEARCH_TIER_4 - -/obj/item/slime_extract/green/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - to_chat(user, "You feel yourself reverting to human form...") - if(do_after(user, 120, target = user)) - to_chat(user, "You feel human again!") - user.set_species(/datum/species/human) - return - to_chat(user, "You stop the transformation.") - - if(SLIME_ACTIVATE_MAJOR) - to_chat(user, "You feel yourself radically changing your slime type...") - if(do_after(user, 120, target = user)) - to_chat(user, "You feel different!") - user.set_species(pick(/datum/species/jelly/slime, /datum/species/jelly/stargazer)) - return - to_chat(user, "You stop the transformation.") - -/obj/item/slime_extract/lightpink - name = "light pink slime extract" - icon_state = "light pink slime extract" - effectmod = "loyal" - activate_reagents = list(/datum/reagent/toxin/plasma) - research = SLIME_RESEARCH_TIER_5 - -/obj/item/slime_extract/lightpink/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - var/obj/item/slimepotion/slime/renaming/O = new(null, 1) - if(!user.put_in_active_hand(O)) - O.forceMove(user.drop_location()) - playsound(user, 'sound/effects/splat.ogg', 50, TRUE) - user.visible_message("[user] spits out [O]!", "You spit out [O]!") - return 150 - - if(SLIME_ACTIVATE_MAJOR) - var/obj/item/slimepotion/slime/sentience/O = new(null, 1) - if(!user.put_in_active_hand(O)) - O.forceMove(user.drop_location()) - playsound(user, 'sound/effects/splat.ogg', 50, TRUE) - user.visible_message("[user] spits out [O]!", "You spit out [O]!") - return 450 - -/obj/item/slime_extract/black - name = "black slime extract" - icon_state = "black slime extract" - effectmod = "transformative" - activate_reagents = list(/datum/reagent/toxin/plasma) - research = SLIME_RESEARCH_TIER_5 - -/obj/item/slime_extract/black/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - to_chat(user, "You feel something wrong inside you...") - user.ForceContractDisease(new /datum/disease/transformation/slime(), FALSE, TRUE) - return 100 - - if(SLIME_ACTIVATE_MAJOR) - to_chat(user, "You feel your own light turning dark...") - if(do_after(user, 120, target = user)) - to_chat(user, "You feel a longing for darkness.") - user.set_species(pick(/datum/species/shadow)) - return - to_chat(user, "You stop feeding [src].") - -/obj/item/slime_extract/oil - name = "oil slime extract" - icon_state = "oil slime extract" - effectmod = "detonating" - activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) - research = SLIME_RESEARCH_TIER_5 - -/obj/item/slime_extract/oil/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - to_chat(user, "You vomit slippery oil.") - playsound(user, 'sound/effects/splat.ogg', 50, TRUE) - new /obj/effect/decal/cleanable/oil/slippery(get_turf(user)) - return 450 - - if(SLIME_ACTIVATE_MAJOR) - user.visible_message("[user]'s skin starts pulsing and glowing ominously...", "You feel unstable...") - if(do_after(user, 60, target = user)) - to_chat(user, "You explode!") - explosion(get_turf(user), 1 ,3, 6) - user.gib() - return - to_chat(user, "You stop feeding [src], and the feeling passes.") - -/obj/item/slime_extract/adamantine - name = "adamantine slime extract" - icon_state = "adamantine slime extract" - effectmod = "crystalline" - activate_reagents = list(/datum/reagent/toxin/plasma) - research = SLIME_RESEARCH_TIER_5 - -/obj/item/slime_extract/adamantine/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - if(species.armor > 0) - to_chat(user, "Your skin is already hardened!") - return - to_chat(user, "You feel your skin harden and become more resistant.") - species.armor += 25 - addtimer(CALLBACK(src, PROC_REF(reset_armor), species), 1200) - return 450 - -/obj/item/slime_extract/adamantine/proc/reset_armor(datum/species/jelly/luminescent/species) - if(istype(species)) - species.armor -= 25 - -/obj/item/slime_extract/bluespace - name = "bluespace slime extract" - icon_state = "bluespace slime extract" - effectmod = "warping" - activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) - var/teleport_ready = FALSE - var/teleport_x = 0 - var/teleport_y = 0 - var/teleport_z = 0 - research = SLIME_RESEARCH_TIER_3 - -/obj/item/slime_extract/bluespace/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - to_chat(user, "You feel your body vibrating...") - if(do_after(user, 25, target = user)) - to_chat(user, "You teleport!") - do_teleport(user, get_turf(user), 6, asoundin = 'sound/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) - return 300 - - if(SLIME_ACTIVATE_MAJOR) - if(!teleport_ready) - to_chat(user, "You feel yourself anchoring to this spot...") - var/turf/T = get_turf(user) - teleport_x = T.x - teleport_y = T.y - teleport_z = T.z - teleport_ready = TRUE - else - teleport_ready = FALSE - if(teleport_x && teleport_y && teleport_z) - var/turf/T = locate(teleport_x, teleport_y, teleport_z) - to_chat(user, "You snap back to your anchor point!") - do_teleport(user, T, asoundin = 'sound/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) - return 450 - - -/obj/item/slime_extract/pyrite - name = "pyrite slime extract" - icon_state = "pyrite slime extract" - effectmod = "prismatic" - crossbreed_modifier = 0.5 - activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) - research = SLIME_RESEARCH_TIER_3 - -/obj/item/slime_extract/pyrite/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - var/chosen = pick(difflist(subtypesof(/obj/item/toy/crayon),typesof(/obj/item/toy/crayon/spraycan))) - var/obj/item/O = new chosen(null) - if(!user.put_in_active_hand(O)) - O.forceMove(user.drop_location()) - playsound(user, 'sound/effects/splat.ogg', 50, TRUE) - user.visible_message("[user] spits out [O]!", "You spit out [O]!") - return 150 - - if(SLIME_ACTIVATE_MAJOR) - var/blacklisted_cans = list(/obj/item/toy/crayon/spraycan/borg, /obj/item/toy/crayon/spraycan/infinite) - var/chosen = pick(subtypesof(/obj/item/toy/crayon/spraycan) - blacklisted_cans) - var/obj/item/O = new chosen(null) - if(!user.put_in_active_hand(O)) - O.forceMove(user.drop_location()) - playsound(user, 'sound/effects/splat.ogg', 50, TRUE) - user.visible_message("[user] spits out [O]!", "You spit out [O]!") - return 250 - -/obj/item/slime_extract/cerulean - name = "cerulean slime extract" - icon_state = "cerulean slime extract" - effectmod = "recurring" - activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) - research = SLIME_RESEARCH_TIER_3 - -/obj/item/slime_extract/cerulean/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - user.reagents.add_reagent(/datum/reagent/medicine/salbutamol,15) - to_chat(user, "You feel like you don't need to breathe!") - return 150 - - if(SLIME_ACTIVATE_MAJOR) - var/turf/open/T = get_turf(user) - if(istype(T)) - T.atmos_spawn_air("o2=11;n2=41;TEMP=293.15") - to_chat(user, "You activate [src], and fresh air bursts out of your skin!") - return 600 - -/obj/item/slime_extract/sepia - name = "sepia slime extract" - icon_state = "sepia slime extract" - effectmod = "lengthened" - activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) - research = SLIME_RESEARCH_TIER_3 - -/obj/item/slime_extract/sepia/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - var/obj/item/camera/O = new(null, 1) - if(!user.put_in_active_hand(O)) - O.forceMove(user.drop_location()) - playsound(user, 'sound/effects/splat.ogg', 50, TRUE) - user.visible_message("[user] spits out [O]!", "You spit out [O]!") - return 150 - - if(SLIME_ACTIVATE_MAJOR) - to_chat(user, "You feel time slow down...") - if(do_after(user, 30, target = user)) - new /obj/effect/timestop(get_turf(user), 2, 50, list(user)) - return 900 - -/obj/item/slime_extract/rainbow - name = "rainbow slime extract" - icon_state = "rainbow slime extract" - effectmod = "hyperchromatic" - activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,"lesser plasma",/datum/reagent/toxin/slimejelly,"holy water and uranium") //Curse this snowflake reagent list. - research = SLIME_RESEARCH_TIER_RAINBOW - -/obj/item/slime_extract/rainbow/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) - switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - user.dna.features["mcolor"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F") - user.updateappearance(mutcolor_update=1) - species.update_glow(user) - to_chat(user, "You feel different...") - return 100 - - if(SLIME_ACTIVATE_MAJOR) - var/chosen = pick(subtypesof(/obj/item/slime_extract)) - var/obj/item/O = new chosen(null) - if(!user.put_in_active_hand(O)) - O.forceMove(user.drop_location()) - playsound(user, 'sound/effects/splat.ogg', 50, TRUE) - user.visible_message("[user] spits out [O]!", "You spit out [O]!") - return 150 - -////Slime-derived potions/// - -/** -* #Slime potions -* -* Feed slimes potions either by hand or using the slime console. -* -* Slime potions either augment the slime's behavior, its extract output, or its intelligence. These all come either from extract effects or cross cores. -* A few of the more powerful ones can modify someone's equipment or gender. -* New ones should probably be accessible only through cross cores as all the normal core types already have uses. Rule of thumb is 'stronger effects go in cross cores'. -*/ - -/obj/item/slimepotion - name = "slime potion" - desc = "A hard yet gelatinous capsule excreted by a slime, containing mysterious substances." - w_class = WEIGHT_CLASS_BULKY - -/obj/item/slimepotion/afterattack(obj/item/reagent_containers/target, mob/user , proximity) - . = ..() - if(!proximity) - return - if (istype(target)) - to_chat(user, "You cannot transfer [src] to [target]! It appears the potion must be given directly to a slime to absorb." ) - return - -/obj/item/slimepotion/slime/docility - name = "docility potion" - desc = "A potent chemical mix that nullifies a slime's hunger, causing it to become docile and tame." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potsilver" - -/obj/item/slimepotion/slime/docility/attack(mob/living/simple_animal/slime/M, mob/user) - if(!isslime(M)) - to_chat(user, "The potion only works on slimes!") - return ..() - if(M.stat) - to_chat(user, "The slime is dead!") - return - if(M.rabid) //Stops being rabid, but doesn't become truly docile. - to_chat(M, "You absorb the potion, and your rabid hunger finally settles to a normal desire to feed.") - to_chat(user, "You feed the slime the potion, calming its rabid rage.") - M.rabid = FALSE - qdel(src) - return - M.docile = 1 - M.set_nutrition(700) - to_chat(M, "You absorb the potion and feel your intense desire to feed melt away.") - to_chat(user, "You feed the slime the potion, removing its hunger and calming it.") - var/newname = sanitize_name(stripped_input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime", MAX_NAME_LEN)) - - if (!newname) - newname = "pet slime" - M.name = newname - M.real_name = newname - qdel(src) - -/obj/item/slimepotion/slime/sentience - name = "intelligence potion" - desc = "A miraculous chemical mix that grants human like intelligence to living beings." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potpink" - var/list/not_interested = list() - var/being_used = FALSE - var/sentience_type = SENTIENCE_ORGANIC - -/obj/item/slimepotion/slime/sentience/attack(mob/living/M, mob/user) - if(being_used || !ismob(M)) - return - if(!isanimal(M) || M.ckey) //only works on animals that aren't player controlled - to_chat(user, "[M] is already too intelligent for this to work!") - return - if(M.stat) - to_chat(user, "[M] is dead!") - return - var/mob/living/simple_animal/SM = M - if(SM.sentience_type != sentience_type) - to_chat(user, "[src] won't work on [SM].") - return - - to_chat(user, "You offer [src] to [SM]...") - being_used = TRUE - - var/list/candidates = pollCandidatesForMob("Do you want to play as [SM.name]?", ROLE_SENTIENCE, null, ROLE_SENTIENCE, 50, SM, POLL_IGNORE_SENTIENCE_POTION) // see poll_ignore.dm - if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) - SM.key = C.key - SM.mind.enslave_mind_to_creator(user) - SM.sentience_act() - to_chat(SM, "All at once it makes sense: you know what you are and who you are! Self awareness is yours!") - to_chat(SM, "You are grateful to be self aware and owe [user.real_name] a great debt. Serve [user.real_name], and assist [user.p_them()] in completing [user.p_their()] goals at any cost.") - if(SM.flags_1 & HOLOGRAM_1) //Check to see if it's a holodeck creature - to_chat(SM, "You also become depressingly aware that you are not a real creature, but instead a holoform. Your existence is limited to the parameters of the holodeck.") - to_chat(user, "[SM] accepts [src] and suddenly becomes attentive and aware. It worked!") - SM.copy_languages(user) - after_success(user, SM) - qdel(src) - else - to_chat(user, "[SM] looks interested for a moment, but then looks back down. Maybe you should try again later.") - being_used = FALSE - ..() - -/obj/item/slimepotion/slime/sentience/proc/after_success(mob/living/user, mob/living/simple_animal/SM) - return - -/obj/item/slimepotion/slime/sentience/nuclear - name = "syndicate intelligence potion" - desc = "A miraculous chemical mix that grants human like intelligence to living beings. It has been modified with Syndicate technology to also grant an internal radio implant to the target and authenticate with identification systems." - -/obj/item/slimepotion/slime/sentience/nuclear/after_success(mob/living/user, mob/living/simple_animal/SM) - var/obj/item/implant/radio/syndicate/imp = new(src) - imp.implant(SM, user) - - SM.access_card = new /obj/item/card/id/syndicate(SM) - ADD_TRAIT(SM.access_card, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) - -/obj/item/slimepotion/transference - name = "consciousness transference potion" - desc = "A strange slime-based chemical that, when used, allows the user to transfer their consciousness to a lesser being." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potorange" - var/prompted = 0 - var/animal_type = SENTIENCE_ORGANIC - -/obj/item/slimepotion/transference/afterattack(mob/living/M, mob/user, proximity) - if(!proximity) - return - if(prompted || !ismob(M)) - return - if(!isanimal(M) || M.ckey) //much like sentience, these will not work on something that is already player controlled - to_chat(user, "[M] already has a higher consciousness!") - return ..() - if(M.stat) - to_chat(user, "[M] is dead!") - return ..() - var/mob/living/simple_animal/SM = M - if(SM.sentience_type != animal_type) - to_chat(user, "You cannot transfer your consciousness to [SM]." ) - return ..() - var/jb = is_banned_from(user.ckey, ROLE_MIND_TRANSFER) - if(QDELETED(src) || QDELETED(M) || QDELETED(user)) - return - - if(jb) - to_chat(user, "Your mind goes blank as you attempt to use the potion.") - return - - prompted = 1 - if(alert("This will permanently transfer your consciousness to [SM]. Are you sure you want to do this?",,"Yes","No")=="No") - prompted = 0 - return - - to_chat(user, "You drink the potion then place your hands on [SM]...") - - - user.mind.transfer_to(SM) - SM.faction = user.faction.Copy() - SM.sentience_act() //Same deal here as with sentience - user.death() - to_chat(SM, "In a quick flash, you feel your consciousness flow into [SM]!") - to_chat(SM, "You are now [SM]. Your allegiances, alliances, and role is still the same as it was prior to consciousness transfer!") - SM.name = "[user.real_name]" - qdel(src) - -/obj/item/slimepotion/slime/steroid - name = "slime steroid" - desc = "A potent chemical mix that will cause a baby slime to generate more extract." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potred" - -/obj/item/slimepotion/slime/steroid/attack(mob/living/simple_animal/slime/M, mob/user) - if(!isslime(M))//If target is not a slime. - to_chat(user, "The steroid only works on baby slimes!") - return ..() - if(M.is_adult) //Can't steroidify adults - to_chat(user, "Only baby slimes can use the steroid!") - return - if(M.stat) - to_chat(user, "The slime is dead!") - return - if(M.cores >= 5) - to_chat(user, "The slime already has the maximum amount of extract!") - return - - to_chat(user, "You feed the slime the steroid. It will now produce one more extract.") - M.cores++ - qdel(src) - -/obj/item/slimepotion/enhancer - name = "extract enhancer" - desc = "A potent chemical mix that will give a slime extract an additional use." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potpurple" - -/obj/item/slimepotion/slime/stabilizer - name = "slime stabilizer" - desc = "A potent chemical mix that will reduce the chance of a slime mutating." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potcyan" - -/obj/item/slimepotion/slime/stabilizer/attack(mob/living/simple_animal/slime/M, mob/user) - if(!isslime(M)) - to_chat(user, "The stabilizer only works on slimes!") - return ..() - if(M.stat) - to_chat(user, "The slime is dead!") - return - if(M.mutation_chance == 0) - to_chat(user, "The slime already has no chance of mutating!") - return - - to_chat(user, "You feed the slime the stabilizer. It is now less likely to mutate.") - M.mutation_chance = clamp(M.mutation_chance-15,0,100) - qdel(src) - -/obj/item/slimepotion/slime/mutator - name = "slime mutator" - desc = "A potent chemical mix that will increase the chance of a slime mutating." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potgreen" - -/obj/item/slimepotion/slime/mutator/attack(mob/living/simple_animal/slime/M, mob/user) - if(!isslime(M)) - to_chat(user, "The mutator only works on slimes!") - return ..() - if(M.stat) - to_chat(user, "The slime is dead!") - return - if(M.mutator_used) - to_chat(user, "This slime has already consumed a mutator, any more would be far too unstable!") - return - if(M.mutation_chance == 100) - to_chat(user, "The slime is already guaranteed to mutate!") - return - - to_chat(user, "You feed the slime the mutator. It is now more likely to mutate.") - M.mutation_chance = clamp(M.mutation_chance+12,0,100) - M.mutator_used = TRUE - qdel(src) - -/obj/item/slimepotion/speed - name = "slime speed potion" - desc = "A potent chemical mix that will reduce the slowdown from any item." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potyellow" - -/obj/item/slimepotion/speed/afterattack(obj/C, mob/user, proximity) - . = ..() - if(!proximity) - return - if(!istype(C)) - to_chat(user, "The potion can only be used on items or vehicles!") - return - if(isitem(C)) - var/obj/item/I = C - if(I.slowdown <= 0.25 || I.obj_flags & IMMUTABLE_SLOW) - to_chat(user, "The [C] can't be made any faster!") - return ..() - I.slowdown = 0.25 - - if(istype(C, /obj/vehicle)) - var/obj/vehicle/V = C - var/datum/component/riding/R = V.GetComponent(/datum/component/riding) - if(R) - var/vehicle_speed_mod = round(CONFIG_GET(number/movedelay/run_delay) * 0.85, 0.01) - if(R.vehicle_move_delay <= vehicle_speed_mod) - to_chat(user, "The [C] can't be made any faster!") - return ..() - R.vehicle_move_delay = vehicle_speed_mod - - to_chat(user, "You slather the red gunk over the [C], making it faster.") - C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - C.add_atom_colour("#FF0000", FIXED_COLOUR_PRIORITY) - qdel(src) - -/obj/item/slimepotion/fireproof - name = "slime chill potion" - desc = "A potent chemical mix that will fireproof any article of clothing. Has three uses." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potblue" - resistance_flags = FIRE_PROOF - var/uses = 3 - -/obj/item/slimepotion/fireproof/afterattack(obj/item/clothing/C, mob/user, proximity) - . = ..() - if(!proximity) - return - if(!uses) - qdel(src) - return - if(!istype(C)) - to_chat(user, "The potion can only be used on clothing!") - return - if(C.max_heat_protection_temperature >= FIRE_IMMUNITY_MAX_TEMP_PROTECT) - to_chat(user, "The [C] is already fireproof!") - return - to_chat(user, "You slather the blue gunk over the [C], fireproofing it.") - C.name = "fireproofed [C.name]" - C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - C.add_atom_colour("#000080", FIXED_COLOUR_PRIORITY) - C.max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - C.heat_protection = C.body_parts_covered - C.resistance_flags |= FIRE_PROOF - uses -- - if(!uses) - qdel(src) - -/obj/item/slimepotion/genderchange - name = "gender change potion" - desc = "An interesting chemical mix that changes the biological gender of what its applied to. Cannot be used on things that lack gender entirely." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potlightpink" - -/obj/item/slimepotion/genderchange/attack(mob/living/L, mob/user) - if(!istype(L) || L.stat == DEAD) - to_chat(user, "The potion can only be used on living things!") - return - - if(L.gender != MALE && L.gender != FEMALE) - to_chat(user, "The potion can only be used on gendered things!") - return - - if(L.gender == MALE) - L.gender = FEMALE - L.visible_message("[L] suddenly looks more feminine!", "You suddenly feel more feminine!") - else - L.gender = MALE - L.visible_message("[L] suddenly looks more masculine!", "You suddenly feel more masculine!") - L.regenerate_icons() - qdel(src) - -/obj/item/slimepotion/slime/renaming - name = "renaming potion" - desc = "A potion that allows a self-aware being to change what name it subconciously presents to the world." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potgreen" - - var/being_used = FALSE - -/obj/item/slimepotion/slime/renaming/attack(mob/living/M, mob/user) - if(being_used || !ismob(M)) - return - if(!M.ckey) //only works on animals that aren't player controlled - to_chat(user, "[M] is not self aware, and cannot pick its own name.") - return - - being_used = TRUE - - to_chat(user, "You offer [src] to [user]...") - - var/new_name = stripped_input(M, "What would you like your name to be?", "Input a name", M.real_name, MAX_NAME_LEN) - - if(!new_name || QDELETED(src) || QDELETED(M) || new_name == M.real_name || !M.Adjacent(user)) - being_used = FALSE - return - - M.visible_message("[M] has a new name, [new_name].", "Your old name of [M.real_name] fades away, and your new name [new_name] anchors itself in your mind.") - message_admins("[ADMIN_LOOKUPFLW(user)] used [src] on [ADMIN_LOOKUPFLW(M)], letting them rename themselves into [new_name].") - - // pass null as first arg to not update records or ID/PDA - M.fully_replace_character_name(null, new_name) - - qdel(src) - -/obj/item/slimepotion/slime/slimeradio - name = "bluespace radio potion" - desc = "A strange chemical that grants those who ingest it the ability to broadcast and receive subscape radio waves." - icon = 'icons/obj/chemical/misc.dmi' - icon_state = "potgrey" - -/obj/item/slimepotion/slime/slimeradio/attack(mob/living/M, mob/user) - if(!ismob(M)) - return - if(!isanimal(M)) - to_chat(user, "[M] is too complex for the potion!") - return - if(M.stat) - to_chat(user, "[M] is dead!") - return - - to_chat(user, "You feed the potion to [M].") - to_chat(M, "Your mind tingles as you are fed the potion. You can hear radio waves now!") - var/obj/item/implant/radio/slime/imp = new(src) - imp.implant(M, user) - qdel(src) - -///Definitions for slime products that don't have anywhere else to go (Floor tiles, blueprints). - -/obj/item/stack/tile/bluespace - name = "bluespace floor tile" - singular_name = "floor tile" - desc = "Through a series of micro-teleports these tiles let people move at incredible speeds." - icon_state = "tile-bluespace" - item_state = "tile-bluespace" - w_class = WEIGHT_CLASS_NORMAL - force = 6 - custom_materials = list(/datum/material/iron=500) - throwforce = 10 - throw_speed = 3 - throw_range = 7 - flags_1 = CONDUCT_1 - max_amount = 60 - turf_type = /turf/open/floor/bluespace - - -/obj/item/stack/tile/sepia - name = "sepia floor tile" - singular_name = "floor tile" - desc = "Time seems to flow very slowly around these tiles." - icon_state = "tile-sepia" - item_state = "tile-sepia" - w_class = WEIGHT_CLASS_NORMAL - force = 6 - custom_materials = list(/datum/material/iron=500) - throwforce = 10 - throw_speed = 0.1 - throw_range = 28 - flags_1 = CONDUCT_1 - max_amount = 60 - turf_type = /turf/open/floor/sepia - - -/obj/item/areaeditor/blueprints/slime - name = "cerulean prints" - desc = "A one use yet of blueprints made of jelly like organic material. Extends the reach of the management console." - color = "#2956B2" - -/obj/item/areaeditor/blueprints/slime/edit_area() - ..() - var/area/A = get_area(src) - for(var/turf/T in A) - T.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - T.add_atom_colour("#2956B2", FIXED_COLOUR_PRIORITY) - A.area_flags |= XENOBIOLOGY_COMPATIBLE - qdel(src) diff --git a/code/modules/surgery/core_removal.dm b/code/modules/surgery/core_removal.dm deleted file mode 100644 index c5bfd1108202..000000000000 --- a/code/modules/surgery/core_removal.dm +++ /dev/null @@ -1,44 +0,0 @@ -/datum/surgery/core_removal - name = "Core removal" - steps = list(/datum/surgery_step/incise, /datum/surgery_step/extract_core) - target_mobtypes = list(/mob/living/simple_animal/slime) - possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD) - lying_required = FALSE - ignore_clothes = TRUE - -/datum/surgery/core_removal/can_start(mob/user, mob/living/target) - if(target.stat == DEAD) - return 1 - return 0 - -//extract brain -/datum/surgery_step/extract_core - name = "extract core" - implements = list( - TOOL_HEMOSTAT = 100, - TOOL_CROWBAR = 100) - time = 16 - -/datum/surgery_step/extract_core/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - display_results(user, target, "You begin to extract a core from [target]...", - "[user] begins to extract a core from [target].", - "[user] begins to extract a core from [target].") - -/datum/surgery_step/extract_core/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) - var/mob/living/simple_animal/slime/slime = target - if(slime.cores > 0) - slime.cores-- - display_results(user, target, "You successfully extract a core from [target]. [slime.cores] core\s remaining.", - "[user] successfully extracts a core from [target]!", - "[user] successfully extracts a core from [target]!") - - new slime.coretype(slime.loc) - - if(slime.cores <= 0) - slime.icon_state = "[slime.colour] baby slime dead-nocore" - return ..() - else - return 0 - else - to_chat(user, "There aren't any cores left in [target]!") - return ..() diff --git a/code/modules/unit_tests/create_and_destroy.dm b/code/modules/unit_tests/create_and_destroy.dm index 0e0248162fc8..f16ad0055056 100644 --- a/code/modules/unit_tests/create_and_destroy.dm +++ b/code/modules/unit_tests/create_and_destroy.dm @@ -13,8 +13,6 @@ /turf/template_noop, //Never meant to be created, errors out the ass for mobcode reasons /mob/living/carbon, - //And another - /obj/item/slimecross/recurring, //This should be obvious /obj/machinery/doomsday_device, //Template type diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 4bfe534940f1..ef38d21a7740 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -1506,15 +1506,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/clothing/glasses/thermal/syndi cost = 4 -/datum/uplink_item/device_tools/potion - name = "Syndicate Sentience Potion" - item = /obj/item/slimepotion/slime/sentience/nuclear - desc = "A potion recovered at great risk by undercover Syndicate operatives and then subsequently modified with Syndicate technology. \ - Using it will make any animal sentient, and bound to serve you, as well as implanting an internal radio for communication and an internal ID card for opening doors." - cost = 4 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - restricted = TRUE - /datum/uplink_item/device_tools/guerillagloves name = "Guerilla Gloves" desc = "A pair of highly robust combat gripper gloves that excels at performing takedowns at close range, with an added lining of insulation. Careful not to hit a wall!" diff --git a/shiptest.dme b/shiptest.dme index 87d8ceed34a0..529ab2cfb100 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -497,7 +497,6 @@ #include "code\datums\components\construction.dm" #include "code\datums\components\creamed.dm" #include "code\datums\components\deadchat_control.dm" -#include "code\datums\components\dejavu.dm" #include "code\datums\components\deployable.dm" #include "code\datums\components\dooropendeathproc.dm" #include "code\datums\components\earprotection.dm" @@ -1839,7 +1838,6 @@ #include "code\modules\awaymissions\mission_code\caves.dm" #include "code\modules\awaymissions\mission_code\centcomAway.dm" #include "code\modules\awaymissions\mission_code\challenge.dm" -#include "code\modules\awaymissions\mission_code\moonoutpost19.dm" #include "code\modules\awaymissions\mission_code\murderdome.dm" #include "code\modules\awaymissions\mission_code\research.dm" #include "code\modules\awaymissions\mission_code\snowdin.dm" @@ -1900,7 +1898,6 @@ #include "code\modules\cargo\bounties\reagent.dm" #include "code\modules\cargo\bounties\science.dm" #include "code\modules\cargo\bounties\security.dm" -#include "code\modules\cargo\bounties\slime.dm" #include "code\modules\cargo\bounties\special.dm" #include "code\modules\cargo\bounties\virus.dm" #include "code\modules\cargo\exports\gear.dm" @@ -2179,7 +2176,6 @@ #include "code\modules\food_and_drinks\kitchen_machinery\grill.dm" #include "code\modules\food_and_drinks\kitchen_machinery\icecream_vat.dm" #include "code\modules\food_and_drinks\kitchen_machinery\microwave.dm" -#include "code\modules\food_and_drinks\kitchen_machinery\monkeyrecycler.dm" #include "code\modules\food_and_drinks\kitchen_machinery\processor.dm" #include "code\modules\food_and_drinks\kitchen_machinery\smartfridge.dm" #include "code\modules\food_and_drinks\recipes\drinks_recipes.dm" @@ -2853,7 +2849,6 @@ #include "code\modules\movespeed\modifiers\misc.dm" #include "code\modules\movespeed\modifiers\mobs.dm" #include "code\modules\movespeed\modifiers\reagent.dm" -#include "code\modules\movespeed\modifiers\status_effects.dm" #include "code\modules\ninja\__ninjaDefines.dm" #include "code\modules\ninja\energy_katana.dm" #include "code\modules\ninja\ninja_event.dm" @@ -3142,7 +3137,6 @@ #include "code\modules\reagents\chemistry\recipes\medicine.dm" #include "code\modules\reagents\chemistry\recipes\others.dm" #include "code\modules\reagents\chemistry\recipes\pyrotechnics.dm" -#include "code\modules\reagents\chemistry\recipes\slime_extracts.dm" #include "code\modules\reagents\chemistry\recipes\special.dm" #include "code\modules\reagents\chemistry\recipes\toxins.dm" #include "code\modules\reagents\reagent_containers\blood_pack.dm" @@ -3241,27 +3235,6 @@ #include "code\modules\research\techweb\_techweb.dm" #include "code\modules\research\techweb\_techweb_node.dm" #include "code\modules\research\techweb\all_nodes.dm" -#include "code\modules\research\xenobiology\xenobio_camera.dm" -#include "code\modules\research\xenobiology\xenobiology.dm" -#include "code\modules\research\xenobiology\crossbreeding\__corecross.dm" -#include "code\modules\research\xenobiology\crossbreeding\_clothing.dm" -#include "code\modules\research\xenobiology\crossbreeding\_misc.dm" -#include "code\modules\research\xenobiology\crossbreeding\_mobs.dm" -#include "code\modules\research\xenobiology\crossbreeding\_potions.dm" -#include "code\modules\research\xenobiology\crossbreeding\_status_effects.dm" -#include "code\modules\research\xenobiology\crossbreeding\_weapons.dm" -#include "code\modules\research\xenobiology\crossbreeding\burning.dm" -#include "code\modules\research\xenobiology\crossbreeding\charged.dm" -#include "code\modules\research\xenobiology\crossbreeding\chilling.dm" -#include "code\modules\research\xenobiology\crossbreeding\consuming.dm" -#include "code\modules\research\xenobiology\crossbreeding\industrial.dm" -#include "code\modules\research\xenobiology\crossbreeding\mutative.dm" -#include "code\modules\research\xenobiology\crossbreeding\prismatic.dm" -#include "code\modules\research\xenobiology\crossbreeding\recurring.dm" -#include "code\modules\research\xenobiology\crossbreeding\regenerative.dm" -#include "code\modules\research\xenobiology\crossbreeding\reproductive.dm" -#include "code\modules\research\xenobiology\crossbreeding\selfsustaining.dm" -#include "code\modules\research\xenobiology\crossbreeding\stabilized.dm" #include "code\modules\ruins\rockplanet_ruin_code.dm" #include "code\modules\ruins\icemoonruin_code\hydroponicslab.dm" #include "code\modules\ruins\icemoonruin_code\library.dm" @@ -3335,7 +3308,6 @@ #include "code\modules\surgery\bone_repair.dm" #include "code\modules\surgery\brain_surgery.dm" #include "code\modules\surgery\cavity_implant.dm" -#include "code\modules\surgery\core_removal.dm" #include "code\modules\surgery\coronary_bypass.dm" #include "code\modules\surgery\dental_implant.dm" #include "code\modules\surgery\experimental_dissection.dm" From cd88cfe298a12c116aed69e8e142cfcf888a96bd Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 18 Oct 2024 04:05:17 -0500 Subject: [PATCH 042/274] Automatic changelog generation for PR #3527 [ci skip] --- html/changelogs/AutoChangeLog-pr-3527.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3527.yml diff --git a/html/changelogs/AutoChangeLog-pr-3527.yml b/html/changelogs/AutoChangeLog-pr-3527.yml new file mode 100644 index 000000000000..bdcc4553c462 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3527.yml @@ -0,0 +1,4 @@ +author: Erikafox +changes: + - {rscdel: Xenobiology (minus slimes)} +delete-after: true From 1a71631c673e455947e6d5f3de550aa10c699d18 Mon Sep 17 00:00:00 2001 From: generalthrax <139387950+generalthrax@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:56:01 -0500 Subject: [PATCH 043/274] E40 Changes (.299 cargo and firerate) (#3502) ## About The Pull Request Brings up the E40 ballistic mode firerate by a fair amount to compensate for the significantly lower damage. Experimenting, mostly. Takes the .299 Caseless box out of the black market and adds it to cargo. Fixes a typo that said it held 75 rounds when it actually held 120. You're gonna need that ammo, it guzzles. ## Why It's Good For The Game E40 is a Big, Big purchase if you don't already have it and the Raleigh starts with the rifle and needs to Gamble in order to get more ammo. Should make it the legendary, expensive weapon it is And make both components Actually Usable. ## Changelog :cl: balance: E40 hybrid rifle ballistic mode now shoots faster balance: .299 Caseless taken out of the black market, added to cargo fix: .299 Caseless now correctly states it holds 120 rounds /:cl: --------- Signed-off-by: generalthrax <139387950+generalthrax@users.noreply.github.com> --- .../cargo/blackmarket/blackmarket_items/ammo.dm | 11 ----------- .../cargo/blackmarket/blackmarket_items/weapons.dm | 2 +- code/modules/cargo/packs/ammo.dm | 6 ++++++ code/modules/projectiles/guns/ballistic/assault.dm | 2 +- 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm b/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm index 434a80c6416d..0dad1cd32c7c 100644 --- a/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm +++ b/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm @@ -57,17 +57,6 @@ stock = 6 availability_prob = 0 -/datum/blackmarket_item/ammo/c299 - name = "Eoehoma .299 Caseless Ammo Box" - desc = "This ammunition for the E-40 Hybrid Rifle is probably worth more than the people you're shooting it at." - item = /obj/item/storage/box/ammo/c299 - - price_min = 300 - price_max = 700 - stock_min = 4 - stock_max = 8 - availability_prob = 0 - /datum/blackmarket_item/ammo/saber_mag name = "Saber 9mm SMG Magazines" desc = "Magazines for use in the Saber 9mm SMG. No, they don't work as swords." diff --git a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm index 740ee2c5341b..21a0786d9812 100644 --- a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm +++ b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm @@ -129,7 +129,7 @@ name = "E-40 Hybrid Assault Rifle" desc = "A dual mode hybrid assault rifle made by the now defunct Eoehoma Firearms. Capable of firing both bullets AND lasers, for the discerning dealer in death. Chambered in Eoehoma .299 Caseless." item = /obj/item/gun/ballistic/automatic/assault/e40 - pair_item = list(/datum/blackmarket_item/ammo/e40_mag, /datum/blackmarket_item/ammo/c299) + pair_item = list(/datum/blackmarket_item/ammo/e40_mag) price_min = 7000 price_max = 10000 diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm index 716cb51d1e97..4cd6814189a3 100644 --- a/code/modules/cargo/packs/ammo.dm +++ b/code/modules/cargo/packs/ammo.dm @@ -424,6 +424,12 @@ contains = list(/obj/item/storage/box/ammo/a44roum_hp) cost = 500 +/datum/supply_pack/ammo/c299 + name = ".299 Eoehoma Caseless Ammo Box Crate" + desc = "Contains a 120-round box of .299 Caseless ammo from the defunct Eoehoma. Used for the E-40 Hybrid Rifle." + contains = list(/obj/item/storage/box/ammo/c299) + cost = 250 + /datum/supply_pack/ammo/c22lr name = ".22 LR Ammo Box Crate" desc = "Contains a 60-round ammo box for refilling .22 LR weapons." diff --git a/code/modules/projectiles/guns/ballistic/assault.dm b/code/modules/projectiles/guns/ballistic/assault.dm index 42cb637a557f..4570be971fda 100644 --- a/code/modules/projectiles/guns/ballistic/assault.dm +++ b/code/modules/projectiles/guns/ballistic/assault.dm @@ -154,7 +154,7 @@ var/obj/item/gun/energy/laser/e40_laser_secondary/secondary fire_select_icon_state_prefix = "e40_" - fire_delay = 0.18 SECONDS + fire_delay = 0.1 SECONDS recoil_unwielded = 3 gun_firenames = list(FIREMODE_FULLAUTO = "full auto ballistic", FIREMODE_OTHER = "full auto laser") From 74d7ecacd88a1f1510ac019df11c1b737d631e9d Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 18 Oct 2024 04:30:51 -0500 Subject: [PATCH 044/274] Automatic changelog generation for PR #3502 [ci skip] --- html/changelogs/AutoChangeLog-pr-3502.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3502.yml diff --git a/html/changelogs/AutoChangeLog-pr-3502.yml b/html/changelogs/AutoChangeLog-pr-3502.yml new file mode 100644 index 000000000000..569fdeae93e6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3502.yml @@ -0,0 +1,4 @@ +author: generalthrax +changes: + - {balance: E40 hybrid rifle ballistic mode now shoots faster} +delete-after: true From 83b37f120de91dd9b47876656d3eaf651a08ea1e Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Erikafox@users.noreply.github.com> Date: Fri, 18 Oct 2024 05:44:12 -0400 Subject: [PATCH 045/274] Adds 2 Airlock Helpers For Mapping (#3515) ## About The Pull Request as title ## Why It's Good For The Game mapping tools ## Changelog :cl: code: pre-weld and pre-sealed airlock helpers for maps. /:cl: Co-authored-by: Bjarl <94164348+Bjarl@users.noreply.github.com> --- code/modules/mapping/mapping_helpers.dm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 251cf46e7c5f..47e545c33663 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -152,6 +152,25 @@ else airlock.locked = TRUE +/obj/effect/mapping_helpers/airlock/welded + name = "airlock welder" + +/obj/effect/mapping_helpers/airlock/welded/payload(obj/machinery/door/airlock/airlock) + if(airlock.welded) + log_mapping("[src] at [AREACOORD(src)] tried to weld [airlock] but it's already locked!") + else + airlock.welded = TRUE + +/obj/effect/mapping_helpers/airlock/sealed + name = "airlock sealer" + +/obj/effect/mapping_helpers/airlock/sealed/payload(obj/machinery/door/airlock/airlock) + if(airlock.seal) + log_mapping("[src] at [AREACOORD(src)] tried to seal [airlock] but it's already already got a seal? What the hell!") + else + airlock.seal = new /obj/item/door_seal(src) + + /obj/effect/mapping_helpers/airlock/unres name = "airlock unresctricted side helper" From 6bf1a18cb853d2ad8690a61d1948ff4af0aea48c Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 18 Oct 2024 04:56:15 -0500 Subject: [PATCH 046/274] Automatic changelog generation for PR #3515 [ci skip] --- html/changelogs/AutoChangeLog-pr-3515.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3515.yml diff --git a/html/changelogs/AutoChangeLog-pr-3515.yml b/html/changelogs/AutoChangeLog-pr-3515.yml new file mode 100644 index 000000000000..7b6c13c2a83a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3515.yml @@ -0,0 +1,4 @@ +author: Erikafox +changes: + - {code_imp: pre-weld and pre-sealed airlock helpers for maps.} +delete-after: true From 14fa4c0c1a78286908aa6c4d4113f93d0f5df415 Mon Sep 17 00:00:00 2001 From: Imaginos16 <77556824+Imaginos16@users.noreply.github.com> Date: Fri, 18 Oct 2024 02:44:40 -0700 Subject: [PATCH 047/274] Handrail Resprite by Spooky! (#3587) ## About The Pull Request Does what it says on the tin, full credits go to Spooky (AKA spookywastaken on discord) ![image](https://github.com/user-attachments/assets/8461d56e-beb5-45f0-a8cc-20a72ca94137) ## Why It's Good For The Game They look a lot better than what we have right now. ## Changelog :cl: Spookywastaken imageadd: Handrails have been resprited! /:cl: --- icons/obj/structures/handrail.dmi | Bin 480 -> 577 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/structures/handrail.dmi b/icons/obj/structures/handrail.dmi index 1a8d98d6697d65b91e3621134c3db7f78e2a9e8b..4326fccaf9e74a9000607ca90b68f82f84d17e11 100644 GIT binary patch delta 412 zcmV;N0b~B)1HlB4Bq||LOjJd{z`%k{Cy!z{PB$zX8XYz|JzQaAkd>NiBPpgLD8RtL zC#$(=kw}hz0Z&OpK~zYIy_CIfgD@0@X@Ls1S~Pp*yg*6PohsL`64j(@2SQ$eCM#n` z*1l~aY`MYlN!lJEgKU5J@Ax>*iG-Z1D(SzxO3$S@ZD$fvWcB-OI-9;`wXguZrBIqQ zks_tVBDn~3QspX&qj-{Po8J8(yWzdH`h5@7#Zj4mH9+gC(}rvTD;*AC|Knq?pf4H# zXq>PeDC+^*5E%jnx)}uxGN&tm)^S1%2pR+k!oF-90Ql|%0KZbgSv12=NRyiKk-v?S0-S>f%~NiSUlej;A=pE ze^>*$t?(LPYry7%?G0Zb_=^60YQRAz6BBSID&a6jI5@?M_cwgWac zv~|MGSvJ!uv;F^|4*YgSEIan8)*UsSIiNV^nE2~p59-7LExk^aOr5K$$+A5qWdhi6 zA*DR9e_qPN3;|kRFKSaBzMY4H%|lIr8J2g)dRX Date: Fri, 18 Oct 2024 05:18:59 -0500 Subject: [PATCH 048/274] Automatic changelog generation for PR #3587 [ci skip] --- html/changelogs/AutoChangeLog-pr-3587.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3587.yml diff --git a/html/changelogs/AutoChangeLog-pr-3587.yml b/html/changelogs/AutoChangeLog-pr-3587.yml new file mode 100644 index 000000000000..7942c48be50c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3587.yml @@ -0,0 +1,4 @@ +author: Spookywastaken +changes: + - {imageadd: Handrails have been resprited!} +delete-after: true From 75ad9e010204e4bdca8a16786922951dd2faf9f5 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Date: Fri, 18 Oct 2024 11:12:32 -0500 Subject: [PATCH 049/274] Fixes examine on ammo casing to hint you can write on them (#3588) ## About The Pull Request I somehow missed this in review! ## Why It's Good For The Game My bad i somehow missed that! ## Changelog :cl: fix: examine on ammo casings now properly hint that you can write on them /:cl: --- code/modules/projectiles/ammunition/_ammo_casing.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/ammunition/_ammo_casing.dm b/code/modules/projectiles/ammunition/_ammo_casing.dm index 88b7b42d334a..580410f6683f 100644 --- a/code/modules/projectiles/ammunition/_ammo_casing.dm +++ b/code/modules/projectiles/ammunition/_ammo_casing.dm @@ -107,7 +107,7 @@ /obj/item/ammo_casing/examine(mob/user) . = ..() - span_notice("You could write a message on \the [src] by writing on it with a pen.") + . += span_notice("You could write a message on \the [src] by writing on it with a pen.") /obj/item/ammo_casing/proc/try_stacking(obj/item/ammo_casing/other_casing, mob/living/user) if(user) From 783fabb413daf3874001642ec1c6c367fe77ddf7 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 18 Oct 2024 11:23:35 -0500 Subject: [PATCH 050/274] Automatic changelog generation for PR #3588 [ci skip] --- html/changelogs/AutoChangeLog-pr-3588.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3588.yml diff --git a/html/changelogs/AutoChangeLog-pr-3588.yml b/html/changelogs/AutoChangeLog-pr-3588.yml new file mode 100644 index 000000000000..a5e4f8035c04 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3588.yml @@ -0,0 +1,4 @@ +author: FalloutFalcon +changes: + - {bugfix: examine on ammo casings now properly hint that you can write on them} +delete-after: true From fce4b504d0741765635eba344253bb77c17ef109 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Date: Fri, 18 Oct 2024 12:44:34 -0500 Subject: [PATCH 051/274] gives the autolathe the space heater board. (#3563) ## About The Pull Request see title ## Why It's Good For The Game this is emergency equipment to help fix ships which fits with what an autolathe should be able to print. ## Changelog :cl: add: Autolathes can now print space heater boards. /:cl: --- code/modules/research/designs/machine_designs.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 737572ef2fc2..b910f6f008e8 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -85,7 +85,8 @@ desc = "The circuit board for a space heater." id = "space_heater" build_path = /obj/item/circuitboard/machine/space_heater - category = list ("Engineering Machinery") + build_type = AUTOLATHE | IMPRINTER + category = list ("Engineering Machinery", "initial", "Equipment") departmental_flags = ALL /datum/design/board/teleport_station From e5c30bd275c45c94ae96e9a811a46ead5d824e5b Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 18 Oct 2024 12:54:56 -0500 Subject: [PATCH 052/274] Automatic changelog generation for PR #3563 [ci skip] --- html/changelogs/AutoChangeLog-pr-3563.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3563.yml diff --git a/html/changelogs/AutoChangeLog-pr-3563.yml b/html/changelogs/AutoChangeLog-pr-3563.yml new file mode 100644 index 000000000000..fed193b074f2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3563.yml @@ -0,0 +1,4 @@ +author: FalloutFalcon +changes: + - {rscadd: Autolathes can now print space heater boards.} +delete-after: true From a3a7c21a1e659c68790acca5c45c09cf45f5d1f4 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 19 Oct 2024 01:02:07 +0000 Subject: [PATCH 053/274] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-3437.yml | 5 ----- html/changelogs/AutoChangeLog-pr-3502.yml | 4 ---- html/changelogs/AutoChangeLog-pr-3515.yml | 4 ---- html/changelogs/AutoChangeLog-pr-3527.yml | 4 ---- html/changelogs/AutoChangeLog-pr-3552.yml | 4 ---- html/changelogs/AutoChangeLog-pr-3562.yml | 9 -------- html/changelogs/AutoChangeLog-pr-3563.yml | 4 ---- html/changelogs/AutoChangeLog-pr-3578.yml | 6 ------ html/changelogs/AutoChangeLog-pr-3587.yml | 4 ---- html/changelogs/AutoChangeLog-pr-3588.yml | 4 ---- html/changelogs/archive/2024-10.yml | 26 +++++++++++++++++++++++ 11 files changed, 26 insertions(+), 48 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-3437.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3502.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3515.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3527.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3552.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3562.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3563.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3578.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3587.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3588.yml diff --git a/html/changelogs/AutoChangeLog-pr-3437.yml b/html/changelogs/AutoChangeLog-pr-3437.yml deleted file mode 100644 index 0c4f39c31eea..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3437.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Apogee-dev -changes: - - {balance: Reduced Cobra-20 magazine size to 24 rounds} - - {bugfix: removed a typo from Scarborough cargo catalog entries} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3502.yml b/html/changelogs/AutoChangeLog-pr-3502.yml deleted file mode 100644 index 569fdeae93e6..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3502.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: generalthrax -changes: - - {balance: E40 hybrid rifle ballistic mode now shoots faster} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3515.yml b/html/changelogs/AutoChangeLog-pr-3515.yml deleted file mode 100644 index 7b6c13c2a83a..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3515.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Erikafox -changes: - - {code_imp: pre-weld and pre-sealed airlock helpers for maps.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3527.yml b/html/changelogs/AutoChangeLog-pr-3527.yml deleted file mode 100644 index bdcc4553c462..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3527.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Erikafox -changes: - - {rscdel: Xenobiology (minus slimes)} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3552.yml b/html/changelogs/AutoChangeLog-pr-3552.yml deleted file mode 100644 index f263f974b90b..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3552.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Gristlebee -changes: - - {rscadd: Bullets can have a message written on them.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3562.yml b/html/changelogs/AutoChangeLog-pr-3562.yml deleted file mode 100644 index 8fb3c3c5b991..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3562.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: NithaIsTired -changes: - - {rscadd: Adds a ton of audible emotes and visible emotes like snapping your fingers - or twitching} - - {rscadd: You can boop people on the nose by clicking on their mouth with help - intent} - - {rscadd: Sound variation with a few emotes like snapping and clapping} - - {rscadd: Laying down now plays a sound if you aren't on walk intent} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3563.yml b/html/changelogs/AutoChangeLog-pr-3563.yml deleted file mode 100644 index fed193b074f2..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3563.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: FalloutFalcon -changes: - - {rscadd: Autolathes can now print space heater boards.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3578.yml b/html/changelogs/AutoChangeLog-pr-3578.yml deleted file mode 100644 index 6408d55fede1..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3578.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Orchidthederg -changes: - - {bugfix: fallback sprite for dust storms was set to the carp sprite for some reason.} - - {imageadd: 'fancy new carp, meteor, and electrical storm'} - - {imagedel: 'old carp, meteor, and electrical storm sprites'} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3587.yml b/html/changelogs/AutoChangeLog-pr-3587.yml deleted file mode 100644 index 7942c48be50c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3587.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Spookywastaken -changes: - - {imageadd: Handrails have been resprited!} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3588.yml b/html/changelogs/AutoChangeLog-pr-3588.yml deleted file mode 100644 index a5e4f8035c04..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3588.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: FalloutFalcon -changes: - - {bugfix: examine on ammo casings now properly hint that you can write on them} -delete-after: true diff --git a/html/changelogs/archive/2024-10.yml b/html/changelogs/archive/2024-10.yml index f01ea10489ed..6730fb66654a 100644 --- a/html/changelogs/archive/2024-10.yml +++ b/html/changelogs/archive/2024-10.yml @@ -253,3 +253,29 @@ - rscadd: Atlas-class Light Armored Crusier rye-rice: - rscadd: Resprites the commander and Commissioner +2024-10-19: + Apogee-dev: + - balance: Reduced Cobra-20 magazine size to 24 rounds + - bugfix: removed a typo from Scarborough cargo catalog entries + Erikafox: + - rscdel: Xenobiology (minus slimes) + - code_imp: pre-weld and pre-sealed airlock helpers for maps. + FalloutFalcon: + - rscadd: Autolathes can now print space heater boards. + - bugfix: examine on ammo casings now properly hint that you can write on them + Gristlebee: + - rscadd: Bullets can have a message written on them. + NithaIsTired: + - rscadd: Adds a ton of audible emotes and visible emotes like snapping your fingers + or twitching + - rscadd: You can boop people on the nose by clicking on their mouth with help intent + - rscadd: Sound variation with a few emotes like snapping and clapping + - rscadd: Laying down now plays a sound if you aren't on walk intent + Orchidthederg: + - bugfix: fallback sprite for dust storms was set to the carp sprite for some reason. + - imageadd: fancy new carp, meteor, and electrical storm + - imagedel: old carp, meteor, and electrical storm sprites + Spookywastaken: + - imageadd: Handrails have been resprited! + generalthrax: + - balance: E40 hybrid rifle ballistic mode now shoots faster From 1407fa1d1ffc60ed743e0635c0532f1e876a9c8b Mon Sep 17 00:00:00 2001 From: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Date: Fri, 18 Oct 2024 23:49:50 -0500 Subject: [PATCH 054/274] blind people can examine things quicker (#3576) ## About The Pull Request halfs the time to examine when blind ## Why It's Good For The Game this trait only gives 4 points and you already can see more then a tile away its so grating to stack these on top of each other. since your blind you have to examine way more things so figure out what they are. as the like 1 person who plays someone blind it makes me want to like log off sometimes. ## Changelog :cl: balance: blind people can examine twice as fast /:cl: --- code/modules/mob/mob.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index a05c2e65688e..c800acc46786 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -537,9 +537,9 @@ visible_message(" [name] begins feeling around for \the [examined_thing.name]...") /// how long it takes for the blind person to find the thing they're examining - var/examine_delay_length = rand(1 SECONDS, 2 SECONDS) + var/examine_delay_length = rand(0.5 SECONDS, 1 SECONDS) if(client?.recent_examines && client?.recent_examines[examined_thing]) //easier to find things we just touched - examine_delay_length = 0.5 SECONDS + examine_delay_length = 0.25 SECONDS else if(isobj(examined_thing)) examine_delay_length *= 1.5 else if(ismob(examined_thing) && examined_thing != src) From e036562fb9fc8fd270ec2f557a94e4d93c3b7e40 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 19 Oct 2024 00:00:41 -0500 Subject: [PATCH 055/274] Automatic changelog generation for PR #3576 [ci skip] --- html/changelogs/AutoChangeLog-pr-3576.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3576.yml diff --git a/html/changelogs/AutoChangeLog-pr-3576.yml b/html/changelogs/AutoChangeLog-pr-3576.yml new file mode 100644 index 000000000000..a00c9d2e7b09 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3576.yml @@ -0,0 +1,4 @@ +author: FalloutFalcon +changes: + - {balance: blind people can examine twice as fast} +delete-after: true From 813cf06ed9a9fc5ec066d65bbb9eb70fa9ab2c2d Mon Sep 17 00:00:00 2001 From: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Date: Sat, 19 Oct 2024 10:39:09 -0500 Subject: [PATCH 056/274] defines the two primary atmos req types (#3490) ## About The Pull Request Makes two defines for atmos requirments, immune and normal, as they are 99% of atmos requirments ## Why It's Good For The Game i hate looking at it to be frank saves atleast one byte of space ## Changelog :cl: code: makes defines for the two primary atoms requirement lists /:cl: --------- Co-authored-by: Sun-Soaked <45698967+Sun-Soaked@users.noreply.github.com> --- code/__DEFINES/atmospherics.dm | 2 ++ code/modules/antagonists/borer/borer.dm | 2 +- code/modules/antagonists/morph/morph.dm | 2 +- code/modules/antagonists/revenant/revenant.dm | 2 +- code/modules/antagonists/slaughter/slaughter.dm | 2 +- code/modules/cargo/gondolapod.dm | 2 +- code/modules/holiday/easter.dm | 2 +- code/modules/mining/minebot.dm | 2 +- .../living/carbon/alien/special/facehugger.dm | 2 +- .../modules/mob/living/simple_animal/bot/bot.dm | 2 +- .../living/simple_animal/friendly/gondola.dm | 2 +- .../simple_animal/hostile/abandoned_minebot.dm | 2 +- .../mob/living/simple_animal/hostile/alien.dm | 2 +- .../mob/living/simple_animal/hostile/bear.dm | 2 +- .../mob/living/simple_animal/hostile/bees.dm | 2 +- .../mob/living/simple_animal/hostile/carp.dm | 2 +- .../mob/living/simple_animal/hostile/clown.dm | 1 - .../living/simple_animal/hostile/cockroach.dm | 2 +- .../living/simple_animal/hostile/eyeballs.dm | 2 +- .../living/simple_animal/hostile/faithless.dm | 2 +- .../simple_animal/hostile/giant_spider.dm | 6 +++--- .../mob/living/simple_animal/hostile/hivebot.dm | 2 +- .../simple_animal/hostile/human/frontiersman.dm | 17 ++++++++--------- .../living/simple_animal/hostile/human/human.dm | 1 - .../simple_animal/hostile/human/nanotrasen.dm | 3 +-- .../simple_animal/hostile/human/pirate.dm | 5 ++--- .../simple_animal/hostile/human/skeleton.dm | 2 +- .../simple_animal/hostile/human/syndicate.dm | 15 +++++++-------- .../simple_animal/hostile/human/zombie.dm | 2 +- .../hostile/jungle/_jungle_mobs.dm | 2 +- .../hostile/megafauna/cult_templar.dm | 2 +- .../hostile/megafauna/megafauna.dm | 2 +- .../mob/living/simple_animal/hostile/mimic.dm | 2 +- .../hostile/mining_mobs/hivelord.dm | 2 +- .../hostile/mining_mobs/mining_mobs.dm | 2 +- .../living/simple_animal/hostile/netherworld.dm | 2 +- .../simple_animal/hostile/retaliate/bat.dm | 2 +- .../simple_animal/hostile/retaliate/clown.dm | 1 - .../simple_animal/hostile/retaliate/ghost.dm | 2 +- .../simple_animal/hostile/retaliate/spaceman.dm | 1 - .../simple_animal/hostile/space_dragon.dm | 2 +- .../mob/living/simple_animal/hostile/statue.dm | 2 +- .../mob/living/simple_animal/hostile/tree.dm | 2 +- .../simple_animal/hostile/venus_human_trap.dm | 2 +- .../mob/living/simple_animal/simple_animal.dm | 2 +- .../mob/living/simple_animal/slime/slime.dm | 2 +- 46 files changed, 59 insertions(+), 65 deletions(-) diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 9a576932120f..f884de16926b 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -386,3 +386,5 @@ GLOBAL_LIST_INIT(pipe_paint_colors, sortList(list( "yellow" = rgb(255,198,0) ))) +#define IMMUNE_ATMOS_REQS list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) +#define NORMAL_ATMOS_REQS list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) diff --git a/code/modules/antagonists/borer/borer.dm b/code/modules/antagonists/borer/borer.dm index 71877dd61f8b..4a3f73da57c5 100644 --- a/code/modules/antagonists/borer/borer.dm +++ b/code/modules/antagonists/borer/borer.dm @@ -79,7 +79,7 @@ GLOBAL_VAR_INIT(total_borer_hosts_needed, 3) mob_size = MOB_SIZE_SMALL faction = list("creature") ventcrawler = VENTCRAWLER_ALWAYS - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1500 diff --git a/code/modules/antagonists/morph/morph.dm b/code/modules/antagonists/morph/morph.dm index 19b0cc891523..9f9d4140cc68 100644 --- a/code/modules/antagonists/morph/morph.dm +++ b/code/modules/antagonists/morph/morph.dm @@ -16,7 +16,7 @@ status_flags = CANPUSH pass_flags = PASSTABLE ventcrawler = VENTCRAWLER_ALWAYS - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxHealth = 150 health = 150 diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm index 81f8facd465a..d348531bfabe 100644 --- a/code/modules/antagonists/revenant/revenant.dm +++ b/code/modules/antagonists/revenant/revenant.dm @@ -36,7 +36,7 @@ response_harm_simple = "punch through" unsuitable_atmos_damage = 0 damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) //I don't know how you'd apply those, but revenants no-sell them anyway. - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = INFINITY harm_intent_damage = 0 diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm index 595fbb27f61a..56e5d76fb654 100644 --- a/code/modules/antagonists/slaughter/slaughter.dm +++ b/code/modules/antagonists/slaughter/slaughter.dm @@ -23,7 +23,7 @@ attack_sound = 'sound/magic/demon_attack1.ogg' var/feast_sound = 'sound/magic/demon_consume.ogg' deathsound = 'sound/magic/demon_dies.ogg' - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = INFINITY faction = list("slaughter") diff --git a/code/modules/cargo/gondolapod.dm b/code/modules/cargo/gondolapod.dm index 560fc46668de..2a05796e67fc 100644 --- a/code/modules/cargo/gondolapod.dm +++ b/code/modules/cargo/gondolapod.dm @@ -20,7 +20,7 @@ layer = TABLE_LAYER//so that deliveries dont appear underneath it loot = list(/obj/effect/decal/cleanable/blood/gibs, /obj/item/stack/sheet/animalhide/gondola = 2, /obj/item/reagent_containers/food/snacks/meat/slab/gondola = 2) //Gondolas aren't affected by cold. - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1500 maxHealth = 200 diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm index a5cf4d78499e..34325454bd79 100644 --- a/code/modules/holiday/easter.dm +++ b/code/modules/holiday/easter.dm @@ -55,7 +55,7 @@ icon_state = "s_rabbit_white" icon_living = "s_rabbit_white" icon_dead = "s_rabbit_white_dead" - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1500 unsuitable_atmos_damage = 0 diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index 45b62eb3897d..2563e2644bf0 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -13,7 +13,7 @@ mouse_opacity = MOUSE_OPACITY_ICON faction = list("neutral") a_intent = INTENT_HARM - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 move_to_delay = 10 health = 125 diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 1db46a4d5415..37384cf91e6f 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -27,7 +27,7 @@ attack_verb_simple = "flail at" attack_sound = 'sound/weapons/bladeslice.ogg' faction = list(ROLE_ALIEN) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS verb_say = "squeaks" verb_ask = "squeaks" verb_exclaim = "shrieks" diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 1c25a67c1dbe..8cdc5f3c6818 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -8,7 +8,7 @@ wander = 0 healable = 0 damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS maxbodytemp = INFINITY minbodytemp = 0 has_unlimited_silicon_privilege = 1 diff --git a/code/modules/mob/living/simple_animal/friendly/gondola.dm b/code/modules/mob/living/simple_animal/friendly/gondola.dm index 54e8dad7edb4..0bb662979ee1 100644 --- a/code/modules/mob/living/simple_animal/friendly/gondola.dm +++ b/code/modules/mob/living/simple_animal/friendly/gondola.dm @@ -22,7 +22,7 @@ icon_living = "gondola" loot = list(/obj/effect/decal/cleanable/blood/gibs, /obj/item/stack/sheet/animalhide/gondola = 1, /obj/item/reagent_containers/food/snacks/meat/slab/gondola = 1) //Gondolas aren't affected by cold. - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1500 maxHealth = 200 diff --git a/code/modules/mob/living/simple_animal/hostile/abandoned_minebot.dm b/code/modules/mob/living/simple_animal/hostile/abandoned_minebot.dm index 78432c92a4d5..58e48850c2b8 100644 --- a/code/modules/mob/living/simple_animal/hostile/abandoned_minebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/abandoned_minebot.dm @@ -9,7 +9,7 @@ status_flags = CANSTUN|CANKNOCKDOWN|CANPUSH mouse_opacity = MOUSE_OPACITY_ICON a_intent = INTENT_HARM - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 move_to_delay = 10 health = 70 diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index e7d029467f25..402c6c920c0b 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -22,7 +22,7 @@ bubble_icon = "alien" a_intent = INTENT_HARM attack_sound = 'sound/weapons/bladeslice.ogg' - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS unsuitable_atmos_damage = 15 faction = list(ROLE_ALIEN) status_flags = CANPUSH diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 6cf14fd33c9c..2de363729229 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -34,7 +34,7 @@ friendly_verb_simple = "bear hug" //Space bears aren't affected by cold. - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1500 diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index c56f87178e75..c019c6a65ad5 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -50,7 +50,7 @@ search_objects = 1 //have to find those plant trays! //Spaceborn beings don't get hurt by space - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 del_on_death = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index a0986111a4b1..4f0448b385c3 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -37,7 +37,7 @@ speak_emote = list("gnashes") //Space carp aren't affected by cold. - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1500 faction = list("carp", "mining") diff --git a/code/modules/mob/living/simple_animal/hostile/clown.dm b/code/modules/mob/living/simple_animal/hostile/clown.dm index b513c74e9d58..756556191ae9 100644 --- a/code/modules/mob/living/simple_animal/hostile/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/clown.dm @@ -29,7 +29,6 @@ del_on_death = 1 loot = list(/obj/effect/mob_spawn/human/clown/corpse) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) minbodytemp = 270 maxbodytemp = 370 unsuitable_atmos_damage = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/cockroach.dm b/code/modules/mob/living/simple_animal/hostile/cockroach.dm index 5a931b0079b4..d744d4a413c1 100644 --- a/code/modules/mob/living/simple_animal/hostile/cockroach.dm +++ b/code/modules/mob/living/simple_animal/hostile/cockroach.dm @@ -7,7 +7,7 @@ maxHealth = 1 turns_per_move = 5 loot = list(/obj/effect/decal/cleanable/insectguts) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 270 maxbodytemp = INFINITY pass_flags = PASSTABLE | PASSGRILLE | PASSMOB diff --git a/code/modules/mob/living/simple_animal/hostile/eyeballs.dm b/code/modules/mob/living/simple_animal/hostile/eyeballs.dm index 8a1fe372ee6a..26f176d74fa5 100644 --- a/code/modules/mob/living/simple_animal/hostile/eyeballs.dm +++ b/code/modules/mob/living/simple_animal/hostile/eyeballs.dm @@ -26,7 +26,7 @@ attack_verb_simple = "blink at" attack_sound = 'sound/weapons/pierce.ogg' movement_type = FLYING - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1500 faction = list("spooky") diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index a814d67ebc86..6959b9e61cd4 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -27,7 +27,7 @@ attack_sound = 'sound/hallucinations/growl1.ogg' speak_emote = list("growls") - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 faction = list("faithless") diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 71b31c9568e1..fa15c57249e9 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -216,7 +216,7 @@ /mob/living/simple_animal/hostile/poison/giant_spider/ice //spiders dont usually like tempatures of 140 kelvin who knew name = "giant ice spider" - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1500 poison_type = /datum/reagent/consumable/frostoil @@ -224,7 +224,7 @@ /mob/living/simple_animal/hostile/poison/giant_spider/nurse/ice name = "giant ice spider" - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1500 poison_type = /datum/reagent/consumable/frostoil @@ -232,7 +232,7 @@ /mob/living/simple_animal/hostile/poison/giant_spider/hunter/ice name = "giant ice spider" - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1500 poison_type = /datum/reagent/consumable/frostoil diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index b6d7665221af..b98da0a899fc 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -23,7 +23,7 @@ projectiletype = /obj/projectile/hivebotbullet faction = list("hivebot") check_friendly_fire = 1 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS possible_a_intents = list(INTENT_HELP, INTENT_GRAB, INTENT_DISARM, INTENT_HARM) minbodytemp = 0 verb_say = "states" diff --git a/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm b/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm index 70bddd7be0e0..8fd800b83f83 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm @@ -10,7 +10,6 @@ melee_damage_upper = 15 loot = list(/obj/effect/mob_spawn/human/corpse/frontier, /obj/item/melee/knife/survival) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) faction = list(FACTION_ANTAG_FRONTIERSMEN) footstep_type = FOOTSTEP_MOB_SHOE @@ -20,7 +19,7 @@ loot = list(/obj/effect/mob_spawn/human/corpse/frontier, /obj/item/clothing/mask/gas/sechailer, /obj/item/tank/internals/emergency_oxygen/engi) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 @@ -42,7 +41,7 @@ /obj/item/gun/ballistic/revolver/shadow, /obj/item/clothing/mask/gas/sechailer, /obj/item/tank/internals/emergency_oxygen/engi) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 /mob/living/simple_animal/hostile/human/frontier/ranged/internals/neutered @@ -102,7 +101,7 @@ /obj/item/gun/ballistic/rifle/illestren, /obj/item/clothing/mask/gas/sechailer, /obj/item/tank/internals/emergency_oxygen/engi) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 /mob/living/simple_animal/hostile/human/frontier/ranged/mosin/internals/neutered @@ -130,7 +129,7 @@ /obj/item/gun/ballistic/shotgun/brimstone, /obj/item/clothing/mask/gas, /obj/item/tank/internals/emergency_oxygen/engi) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 /mob/living/simple_animal/hostile/human/frontier/ranged/trooper/internals/neutered @@ -185,7 +184,7 @@ /obj/item/gun/ballistic/automatic/assault/skm, /obj/item/clothing/mask/gas, /obj/item/tank/internals/emergency_oxygen/engi) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 /mob/living/simple_animal/hostile/human/frontier/ranged/trooper/skm/internals/neutered @@ -212,7 +211,7 @@ /obj/item/gun/ballistic/rifle/illestren, /obj/item/clothing/mask/gas, /obj/item/tank/internals/emergency_oxygen/engi) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 /mob/living/simple_animal/hostile/human/frontier/ranged/trooper/rifle/internals/neutered @@ -241,7 +240,7 @@ loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper/heavy, /obj/item/clothing/mask/gas, /obj/item/tank/internals/emergency_oxygen/engi) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 @@ -272,7 +271,7 @@ /obj/item/gun/ballistic/automatic/pistol/mauler, /obj/item/clothing/mask/gas, /obj/item/tank/internals/emergency_oxygen/engi) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 /mob/living/simple_animal/hostile/human/frontier/ranged/officer/internals/neutered diff --git a/code/modules/mob/living/simple_animal/hostile/human/human.dm b/code/modules/mob/living/simple_animal/hostile/human/human.dm index 633bd40090e8..fe90db49e618 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/human.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/human.dm @@ -30,7 +30,6 @@ loot = list(/obj/effect/mob_spawn/human/corpse/damaged) del_on_death = TRUE - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) unsuitable_atmos_damage = 15 minbodytemp = 180 status_flags = CANPUSH diff --git a/code/modules/mob/living/simple_animal/hostile/human/nanotrasen.dm b/code/modules/mob/living/simple_animal/hostile/human/nanotrasen.dm index 6c1676d202ab..96b7c3f3a4e0 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/nanotrasen.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/nanotrasen.dm @@ -7,7 +7,6 @@ stat_attack = HARD_CRIT melee_damage_upper = 15 loot = list(/obj/effect/mob_spawn/human/corpse/nanotrasensoldier) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) faction = list(ROLE_DEATHSQUAD) check_friendly_fire = TRUE dodging = TRUE @@ -72,7 +71,7 @@ rapid_melee = 3 retreat_distance = 0 minimum_distance = 1 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 projectiletype = /obj/projectile/beam/laser projectilesound = 'sound/weapons/laser.ogg' diff --git a/code/modules/mob/living/simple_animal/hostile/human/pirate.dm b/code/modules/mob/living/simple_animal/hostile/human/pirate.dm index df10cfa6a2b4..b5cdd48e7788 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/pirate.dm @@ -5,7 +5,6 @@ icon_living = "piratemelee" icon_dead = "pirate_dead" speak_chance = 0 - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) speak_emote = list("yarrs") loot = list(/obj/effect/mob_spawn/human/corpse/pirate, /obj/item/melee/transforming/energy/sword/saber/pirate) @@ -31,7 +30,7 @@ icon_state = "piratespace" icon_living = "piratespace" icon_dead = "piratespace_dead" - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 speed = 1 @@ -71,7 +70,7 @@ icon_state = "piratespaceranged" icon_living = "piratespaceranged" icon_dead = "piratespaceranged_dead" - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 speed = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm index 12a3c2b2604c..4eac3878efa1 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm @@ -19,7 +19,7 @@ attack_verb_continuous = "slashes" attack_verb_simple = "slash" attack_sound = 'sound/hallucinations/growl1.ogg' - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS unsuitable_atmos_damage = 10 stat_attack = HARD_CRIT faction = list("skeleton") diff --git a/code/modules/mob/living/simple_animal/hostile/human/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/human/syndicate.dm index 4983c53ef88d..3f81cd145dcd 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/syndicate.dm @@ -13,7 +13,6 @@ speak_chance = 0 stat_attack = HARD_CRIT loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) maxbodytemp = 400 unsuitable_atmos_damage = 15 faction = list(FACTION_ANTAG_SYNDICATE) @@ -29,7 +28,7 @@ name = "Ramzi Clique Commando" maxHealth = 170 health = 170 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1000 speed = 1 @@ -64,7 +63,7 @@ name = "Ramzi Clique Commando" maxHealth = 170 health = 170 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1000 speed = 1 @@ -117,7 +116,7 @@ name = "Ramzi Clique Commando" maxHealth = 170 health = 170 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1000 speed = 1 @@ -165,7 +164,7 @@ name = "Ramzi Clique Commando" maxHealth = 170 health = 170 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1000 speed = 1 @@ -195,7 +194,7 @@ name = "Ramzi Clique Commando" maxHealth = 170 health = 170 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1000 speed = 1 @@ -226,7 +225,7 @@ name = "Ramzi Clique Commando" maxHealth = 170 health = 170 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1000 speed = 1 @@ -275,7 +274,7 @@ attack_verb_simple = "cut" attack_sound = 'sound/weapons/bladeslice.ogg' faction = list(ROLE_SYNDICATE) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1000 mob_size = MOB_SIZE_TINY diff --git a/code/modules/mob/living/simple_animal/hostile/human/zombie.dm b/code/modules/mob/living/simple_animal/hostile/human/zombie.dm index 7a12465b98bb..e13461a49568 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/zombie.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/zombie.dm @@ -16,7 +16,7 @@ attack_verb_simple = "bite" attack_sound = 'sound/hallucinations/growl1.ogg' a_intent = INTENT_HARM - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 status_flags = CANPUSH loot = list() diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/_jungle_mobs.dm b/code/modules/mob/living/simple_animal/hostile/jungle/_jungle_mobs.dm index 32dc8d4bc887..4a0970751d9b 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle/_jungle_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle/_jungle_mobs.dm @@ -1,6 +1,6 @@ /mob/living/simple_animal/hostile/jungle vision_range = 5 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS faction = list("jungle") weather_immunities = list("acid") obj_damage = 30 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm index c06c78068ce9..bf5809265172 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm @@ -448,7 +448,7 @@ stop_automated_movement = 1 status_flags = CANPUSH attack_sound = 'sound/magic/demon_attack1.ogg' - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS faction = list("cult") maxHealth = 60 health = 60 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index 37934c0367e5..120bf4825999 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -15,7 +15,7 @@ robust_searching = TRUE ranged_ignores_vision = TRUE stat_attack = DEAD - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) minbodytemp = 0 maxbodytemp = INFINITY diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index ecdc357b8da3..53825863281e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -23,7 +23,7 @@ speak_emote = list("creaks") taunt_chance = 30 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 faction = list("mimic") diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index bd9133ffce20..2bae8ea2a5dc 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -365,7 +365,7 @@ del_on_death = TRUE sentience_type = SENTIENCE_BOSS loot = list(/obj/item/organ/regenerative_core/legion = 3, /obj/effect/mob_spawn/human/corpse/damaged/legioninfested = 5, /obj/effect/mob_spawn/human/corpse/damaged/legioninfested = 5, /obj/effect/mob_spawn/human/corpse/damaged/legioninfested = 5) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = INFINITY move_to_delay = 7 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm index 6beb2f23b9e6..b5781a200e61 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm @@ -1,7 +1,7 @@ //the base mining mob /mob/living/simple_animal/hostile/asteroid vision_range = 2 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS faction = list("mining") weather_immunities = list("lava","ash") obj_damage = 30 diff --git a/code/modules/mob/living/simple_animal/hostile/netherworld.dm b/code/modules/mob/living/simple_animal/hostile/netherworld.dm index 8ec732defc04..e6a5ec66cb9a 100644 --- a/code/modules/mob/living/simple_animal/hostile/netherworld.dm +++ b/code/modules/mob/living/simple_animal/hostile/netherworld.dm @@ -14,7 +14,7 @@ attack_sound = 'sound/weapons/bladeslice.ogg' faction = list("nether") speak_emote = list("screams") - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE var/phaser = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm index 4f671f37ac68..2a3c67f1d188 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm @@ -36,7 +36,7 @@ //Space bats need no air to fly in. - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 /mob/living/simple_animal/hostile/retaliate/bat/Initialize() diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm index 75610b382cb3..611b5641ff52 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm @@ -29,7 +29,6 @@ del_on_death = 1 loot = list(/obj/effect/mob_spawn/human/clown/corpse) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) minbodytemp = 270 maxbodytemp = 370 unsuitable_atmos_damage = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm index d72cdf215e22..a3da5b7c5be9 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm @@ -25,7 +25,7 @@ speak_emote = list("weeps") deathmessage = "wails, disintegrating into a pile of ectoplasm!" loot = list(/obj/item/ectoplasm) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1500 movement_type = FLYING diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm index 80e5968cbc4d..ce333d2ef002 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm @@ -51,7 +51,6 @@ faction = list("nanotrasenprivate") a_intent = INTENT_HARM loot = list(/obj/effect/mob_spawn/human/corpse/nanotrasensoldier) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) unsuitable_atmos_damage = 15 status_flags = CANPUSH search_objects = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/space_dragon.dm b/code/modules/mob/living/simple_animal/hostile/space_dragon.dm index 3375cd0a7269..a40b9043ee67 100644 --- a/code/modules/mob/living/simple_animal/hostile/space_dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/space_dragon.dm @@ -44,7 +44,7 @@ mouse_opacity = MOUSE_OPACITY_ICON butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 30) deathmessage = "screeches as its wings turn to dust and it collapses on the floor, life estinguished." - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1500 faction = list("carp") diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index d5b56f758cb1..b4a70b9c304c 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -28,7 +28,7 @@ attack_verb_simple = "claw" attack_sound = 'sound/hallucinations/growl1.ogg' - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 faction = list("statue") diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index c040a2221d0b..69e0970e2264 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -80,7 +80,7 @@ loot = list(/obj/item/stack/rods) speak_emote = list("polls") faction = list() - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS is_tree = FALSE /mob/living/simple_animal/hostile/tree/festivus/attack_hand(mob/living/carbon/human/M) diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm index 52ddcc72963a..13d8dd57ba42 100644 --- a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm +++ b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm @@ -96,7 +96,7 @@ a_intent = INTENT_HARM ranged_cooldown_time = 45 attack_sound = 'sound/weapons/bladeslice.ogg' - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS unsuitable_atmos_damage = 0 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE faction = list("hostile","vines","plants") diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 35e0e535c96d..5ee1d8f102be 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -59,7 +59,7 @@ ///Atmos effect - Yes, you can make creatures that require plasma or co2 to survive. N2O is a trace gas and handled separately, hence why it isn't here. It'd be hard to add it. Hard and me don't mix (Yes, yes make all the dick jokes you want with that.) - Errorage ///Leaving something at 0 means it's off - has no maximum. - var/list/atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) + var/list/atmos_requirements = NORMAL_ATMOS_REQS ///This damage is taken when atmos doesn't fit all the requirements above. var/unsuitable_atmos_damage = 2 diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index cafb6cb77bd5..56478ebc7853 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -24,7 +24,7 @@ bubble_icon = "slime" initial_language_holder = /datum/language_holder/slime - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = IMMUNE_ATMOS_REQS maxHealth = 150 health = 150 From c221fec7ea364ac12810a45078160353f0aeece1 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 19 Oct 2024 10:59:28 -0500 Subject: [PATCH 057/274] Automatic changelog generation for PR #3490 [ci skip] --- html/changelogs/AutoChangeLog-pr-3490.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3490.yml diff --git a/html/changelogs/AutoChangeLog-pr-3490.yml b/html/changelogs/AutoChangeLog-pr-3490.yml new file mode 100644 index 000000000000..08b4e0f3baed --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3490.yml @@ -0,0 +1,4 @@ +author: FalloutFalcon +changes: + - {code_imp: makes defines for the two primary atoms requirement lists} +delete-after: true From d89b05d427cb58ece64955e3ccd7c53cb8daaee1 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 20 Oct 2024 01:08:08 +0000 Subject: [PATCH 058/274] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-3490.yml | 4 ---- html/changelogs/AutoChangeLog-pr-3576.yml | 4 ---- html/changelogs/archive/2024-10.yml | 4 ++++ 3 files changed, 4 insertions(+), 8 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-3490.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3576.yml diff --git a/html/changelogs/AutoChangeLog-pr-3490.yml b/html/changelogs/AutoChangeLog-pr-3490.yml deleted file mode 100644 index 08b4e0f3baed..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3490.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: FalloutFalcon -changes: - - {code_imp: makes defines for the two primary atoms requirement lists} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3576.yml b/html/changelogs/AutoChangeLog-pr-3576.yml deleted file mode 100644 index a00c9d2e7b09..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3576.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: FalloutFalcon -changes: - - {balance: blind people can examine twice as fast} -delete-after: true diff --git a/html/changelogs/archive/2024-10.yml b/html/changelogs/archive/2024-10.yml index 6730fb66654a..0c385dd7fba7 100644 --- a/html/changelogs/archive/2024-10.yml +++ b/html/changelogs/archive/2024-10.yml @@ -279,3 +279,7 @@ - imageadd: Handrails have been resprited! generalthrax: - balance: E40 hybrid rifle ballistic mode now shoots faster +2024-10-20: + FalloutFalcon: + - balance: blind people can examine twice as fast + - code_imp: makes defines for the two primary atoms requirement lists From ea23d20cb3b5e8ef14e91b2cfc13712abf2af3ce Mon Sep 17 00:00:00 2001 From: Apogee-dev <60533805+Apogee-dev@users.noreply.github.com> Date: Sat, 19 Oct 2024 19:38:00 -0700 Subject: [PATCH 059/274] Disables the Komodo (#3601) ## About The Pull Request Makes the Komodo adminspawn. This is a temporary measure until the Komodo's replacement is finished. ## Why It's Good For The Game the komodo has a downright rancid reputation and is pending a replacement anyway. Putting access to it under admin control helps at least a little, letting admins allow players with a proven record to run it without completely locking it away. ## Changelog :cl: balance: Made Komodo aspawn /:cl: --- _maps/configs/syndicate_gorlex_komodo.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/configs/syndicate_gorlex_komodo.json b/_maps/configs/syndicate_gorlex_komodo.json index b51dee46ffd9..0cefb4ca08b3 100644 --- a/_maps/configs/syndicate_gorlex_komodo.json +++ b/_maps/configs/syndicate_gorlex_komodo.json @@ -51,5 +51,5 @@ "slots": 2 } }, - "enabled": true + "enabled": false } From ceb18d8101b945e4ebc6aa27f8b01b3766eacac2 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 19 Oct 2024 21:48:41 -0500 Subject: [PATCH 060/274] Automatic changelog generation for PR #3601 [ci skip] --- html/changelogs/AutoChangeLog-pr-3601.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3601.yml diff --git a/html/changelogs/AutoChangeLog-pr-3601.yml b/html/changelogs/AutoChangeLog-pr-3601.yml new file mode 100644 index 000000000000..8b3e5a2c034c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3601.yml @@ -0,0 +1,4 @@ +author: Apogee-dev +changes: + - {balance: Made Komodo aspawn} +delete-after: true From 0be25e600e65962ad6abd27300c74b81afc3a818 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 21 Oct 2024 01:04:29 +0000 Subject: [PATCH 061/274] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-3601.yml | 4 ---- html/changelogs/archive/2024-10.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-3601.yml diff --git a/html/changelogs/AutoChangeLog-pr-3601.yml b/html/changelogs/AutoChangeLog-pr-3601.yml deleted file mode 100644 index 8b3e5a2c034c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3601.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Apogee-dev -changes: - - {balance: Made Komodo aspawn} -delete-after: true diff --git a/html/changelogs/archive/2024-10.yml b/html/changelogs/archive/2024-10.yml index 0c385dd7fba7..429ef831cde4 100644 --- a/html/changelogs/archive/2024-10.yml +++ b/html/changelogs/archive/2024-10.yml @@ -283,3 +283,6 @@ FalloutFalcon: - balance: blind people can examine twice as fast - code_imp: makes defines for the two primary atoms requirement lists +2024-10-21: + Apogee-dev: + - balance: Made Komodo aspawn From c152aaead2a5972b2db4f722b5b2dedd4680bc17 Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Erikafox@users.noreply.github.com> Date: Mon, 21 Oct 2024 19:30:26 -0400 Subject: [PATCH 062/274] Adds Sords For PGF (#3571) ## About The Pull Request As title ## Why It's Good For The Game It's fluff stuff for the PGF. ## Changelog :cl: Imaginos, Erika add: The Pan Gezenan Federation has sent out shipments of boarding cutlasses to the Frontier. Expect cool doohickeys on your friendly neighborhood PGF Vessel imageadd: Imaginos: PGF sord sprites code: sabres now take up less space in code /:cl: --------- Co-authored-by: Erika Fox <94164348+Bjarl@users.noreply.github.com> --- code/game/objects/items/melee/sword.dm | 7 +++ code/game/objects/items/storage/belt.dm | 77 +++++------------------- icons/obj/clothing/belts.dmi | Bin 17005 -> 17655 bytes icons/obj/weapon/sword.dmi | Bin 15674 -> 15208 bytes 4 files changed, 21 insertions(+), 63 deletions(-) diff --git a/code/game/objects/items/melee/sword.dm b/code/game/objects/items/melee/sword.dm index ff384770a318..e74dd456b466 100644 --- a/code/game/objects/items/melee/sword.dm +++ b/code/game/objects/items/melee/sword.dm @@ -132,6 +132,13 @@ icon_state = "suns-swordstick" item_state = "suns-swordstick" +/obj/item/melee/sword/sabre/pgf + name = "\improper boarding cutlass" + desc = "When beam and bullet puncture the hull, a trustworthy blade will carry you through the fight" + icon_state = "pgf-sabre" + block_chance = 30 + force = 22 + /obj/item/melee/sword/sabre/suns/telescopic name = "telescopic sabre" desc = "A telescopic and retractable blade given to SUNS peacekeepers for easy concealment and carry. It's design makes it slightly less effective than normal sabres sadly, however it is still excelent at piercing armor." diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 3b7de4f3ad1d..3d974e5033e7 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -751,6 +751,7 @@ item_state = "sheath" base_icon_state = "sheath" w_class = WEIGHT_CLASS_BULKY + var/sabre_type = /obj/item/melee/sword/sabre /obj/item/storage/belt/sabre/ComponentInitialize() . = ..() @@ -760,7 +761,7 @@ STR.use_sound = null //if youre wondering why this is null, its so you can look in your sheath to prepare to draw, without letting anyone know youre preparing to draw it STR.max_w_class = WEIGHT_CLASS_BULKY STR.set_holdable(list( - /obj/item/melee/sword/sabre + sabre_type )) /obj/item/storage/belt/sabre/examine(mob/user) @@ -788,7 +789,7 @@ return ..() /obj/item/storage/belt/sabre/PopulateContents() - new /obj/item/melee/sword/sabre(src) + new sabre_type(src) update_appearance() /obj/item/storage/belt/sabre/solgov @@ -798,21 +799,7 @@ icon_state = "sheath-solgov" item_state = "sheath-solgov" w_class = WEIGHT_CLASS_BULKY - -/obj/item/storage/belt/sabre/solgov/ComponentInitialize() - AddComponent(component_type) - AddElement(/datum/element/update_icon_updates_onmob) - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 1 - STR.use_sound = null - STR.max_w_class = WEIGHT_CLASS_BULKY - STR.set_holdable(list( - /obj/item/melee/sword/sabre/solgov - )) - -/obj/item/storage/belt/sabre/solgov/PopulateContents() - new /obj/item/melee/sword/sabre/solgov(src) - update_appearance() + sabre_type = /obj/item/melee/sword/sabre/solgov /obj/item/storage/belt/sabre/suns name = "SUNS sabre sheath" @@ -827,22 +814,7 @@ icon_state = "suns-sheath" item_state = "suns-sheath" w_class = WEIGHT_CLASS_BULKY - -/obj/item/storage/belt/sabre/suns/ComponentInitialize() - AddComponent(component_type) - AddElement(/datum/element/update_icon_updates_onmob) - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 1 - STR.use_sound = null - STR.max_w_class = WEIGHT_CLASS_BULKY - STR.set_holdable(list( - /obj/item/melee/sword/sabre/suns - )) - -/obj/item/storage/belt/sabre/suns/PopulateContents() - new /obj/item/melee/sword/sabre/suns(src) - update_appearance() - + sabre_type = /obj/item/melee/sword/sabre/suns /obj/item/storage/belt/sabre/suns/captain name = "SUNS captain's sabre sheath" @@ -852,21 +824,7 @@ icon_state = "suns-capsheath" item_state = "suns-capsheath" w_class = WEIGHT_CLASS_BULKY - -/obj/item/storage/belt/sabre/suns/captain/ComponentInitialize() - AddComponent(component_type) - AddElement(/datum/element/update_icon_updates_onmob) - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 1 - STR.use_sound = null - STR.max_w_class = WEIGHT_CLASS_BULKY - STR.set_holdable(list( - /obj/item/melee/sword/sabre/suns/captain - )) - -/obj/item/storage/belt/sabre/suns/captain/PopulateContents() - new /obj/item/melee/sword/sabre/suns/captain(src) - update_appearance() + sabre_type = /obj/item/melee/sword/sabre/suns/captain /obj/item/storage/belt/sabre/suns/cmo name = "SUNS cane sheath" @@ -882,21 +840,14 @@ icon_state = "suns-cane" item_state = "suns-cane" w_class = WEIGHT_CLASS_BULKY - -/obj/item/storage/belt/sabre/suns/cmo/ComponentInitialize() - AddComponent(component_type) - AddElement(/datum/element/update_icon_updates_onmob) - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 1 - STR.use_sound = null - STR.max_w_class = WEIGHT_CLASS_BULKY - STR.set_holdable(list( - /obj/item/melee/sword/sabre/suns/cmo - )) - -/obj/item/storage/belt/sabre/suns/cmo/PopulateContents() - new /obj/item/melee/sword/sabre/suns/cmo(src) - update_appearance() + sabre_type = /obj/item/melee/sword/sabre/suns/cmo + +/obj/item/storage/belt/sabre/pgf + name = "cutlass sheath" + desc = "A mass produced thermoplastic-leather sheath made to hold a boarding cutlass." + base_icon_state = "sheath-pgf" + icon_state = "sheath-pgf" + item_state = "sheath-pgf" /obj/item/storage/belt/security/webbing/inteq name = "inteq webbing" diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index d1857dbe878d022487733af5f18cf5c41763b9c9..931f502def1d42a79a7923658438812d28c4a86a 100644 GIT binary patch literal 17655 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 r>}F!O(&6LCxB(mzz4(77g_u6{1-oD!M<>^9}K literal 17005 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 rasNLFW%=q@m(lmD6vkS{T&oxyJoJ?G_gG literal 15674 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 E2TU{#PXGV_ From 2d2562570fd9aff743abf7fe87d0dd515d26fc96 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 21 Oct 2024 18:50:11 -0500 Subject: [PATCH 063/274] Automatic changelog generation for PR #3571 [ci skip] --- html/changelogs/AutoChangeLog-pr-3571.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3571.yml diff --git a/html/changelogs/AutoChangeLog-pr-3571.yml b/html/changelogs/AutoChangeLog-pr-3571.yml new file mode 100644 index 000000000000..142f0cf62e1b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3571.yml @@ -0,0 +1,7 @@ +author: Imaginos, Erika +changes: + - {rscadd: The Pan Gezenan Federation has sent out shipments of boarding cutlasses + to the Frontier. Expect cool doohickeys on your friendly neighborhood PGF Vessel} + - {imageadd: 'Imaginos: PGF sord sprites'} + - {code_imp: sabres now take up less space in code} +delete-after: true From 7b112004f70d86195b9bc23d2a02192786ebcb9d Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 22 Oct 2024 01:03:20 +0000 Subject: [PATCH 064/274] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-3571.yml | 7 ------- html/changelogs/archive/2024-10.yml | 6 ++++++ 2 files changed, 6 insertions(+), 7 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-3571.yml diff --git a/html/changelogs/AutoChangeLog-pr-3571.yml b/html/changelogs/AutoChangeLog-pr-3571.yml deleted file mode 100644 index 142f0cf62e1b..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3571.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Imaginos, Erika -changes: - - {rscadd: The Pan Gezenan Federation has sent out shipments of boarding cutlasses - to the Frontier. Expect cool doohickeys on your friendly neighborhood PGF Vessel} - - {imageadd: 'Imaginos: PGF sord sprites'} - - {code_imp: sabres now take up less space in code} -delete-after: true diff --git a/html/changelogs/archive/2024-10.yml b/html/changelogs/archive/2024-10.yml index 429ef831cde4..9366ccc7125a 100644 --- a/html/changelogs/archive/2024-10.yml +++ b/html/changelogs/archive/2024-10.yml @@ -286,3 +286,9 @@ 2024-10-21: Apogee-dev: - balance: Made Komodo aspawn +2024-10-22: + Imaginos, Erika: + - rscadd: The Pan Gezenan Federation has sent out shipments of boarding cutlasses + to the Frontier. Expect cool doohickeys on your friendly neighborhood PGF Vessel + - imageadd: 'Imaginos: PGF sord sprites' + - code_imp: sabres now take up less space in code From 2e2349241b0b70cdcf46437bea5fad31cf42591e Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Erikafox@users.noreply.github.com> Date: Tue, 22 Oct 2024 00:19:00 -0400 Subject: [PATCH 065/274] Hallucination Anomaly Fix (#3614) ## About The Pull Request Hallucination Anomalies will no longer migrate off their tile ## Why It's Good For The Game bugfix ## Changelog :cl: fix: Hallucination Anomalies will stay on their tile now. /:cl: Co-authored-by: Bjarl <94164348+Bjarl@users.noreply.github.com> --- .../objects/effects/anomalies/anomalies_hallucination.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/objects/effects/anomalies/anomalies_hallucination.dm b/code/game/objects/effects/anomalies/anomalies_hallucination.dm index e48a1879f257..8a0a469ba52b 100644 --- a/code/game/objects/effects/anomalies/anomalies_hallucination.dm +++ b/code/game/objects/effects/anomalies/anomalies_hallucination.dm @@ -19,8 +19,8 @@ var/turf/open/our_turf = get_turf(src) if(istype(our_turf)) hallucination_pulse(our_turf, 5) - pixel_x = pixel_x + clamp(rand(-5, 5), -16, 16) - pixel_y = pixel_y + clamp(rand(-5, 5), -16, 16) + pixel_x = clamp(pixel_x + rand(-5, 5), -16, 16) + pixel_y = clamp(pixel_y + rand(-5, 5), -16, 16) /obj/effect/anomaly/hallucination/detonate() var/turf/open/our_turf = get_turf(src) @@ -45,7 +45,7 @@ var/list/messages = list( "You feel your conscious mind fall apart!", "Reality warps around you!", - "Something's wispering around you!", + "Something whispers around you!", "You are going insane!", ) to_chat(user, span_warning(pick(messages))) From 72086fb5b7d288f319a0a6a269d0a3eead32dba6 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 21 Oct 2024 23:29:56 -0500 Subject: [PATCH 066/274] Automatic changelog generation for PR #3614 [ci skip] --- html/changelogs/AutoChangeLog-pr-3614.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3614.yml diff --git a/html/changelogs/AutoChangeLog-pr-3614.yml b/html/changelogs/AutoChangeLog-pr-3614.yml new file mode 100644 index 000000000000..527edaa1080c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3614.yml @@ -0,0 +1,4 @@ +author: Erikafox +changes: + - {bugfix: Hallucination Anomalies will stay on their tile now.} +delete-after: true From 17150bc36d146cea892b1eb8c4c6443118337872 Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Erikafox@users.noreply.github.com> Date: Tue, 22 Oct 2024 00:19:40 -0400 Subject: [PATCH 067/274] Update belt.dm (#3617) fix mistake i made in sabre stuff Co-authored-by: Erika Fox <94164348+Bjarl@users.noreply.github.com> --- code/game/objects/items/storage/belt.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 3d974e5033e7..ed5ecc0d2717 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -848,6 +848,7 @@ base_icon_state = "sheath-pgf" icon_state = "sheath-pgf" item_state = "sheath-pgf" + sabre_type = /obj/item/melee/sword/sabre/pgf /obj/item/storage/belt/security/webbing/inteq name = "inteq webbing" From f9d9638a6e2c98861d64cfd83b68bd4214af4beb Mon Sep 17 00:00:00 2001 From: generalthrax <139387950+generalthrax@users.noreply.github.com> Date: Tue, 22 Oct 2024 00:47:50 -0500 Subject: [PATCH 068/274] Uncomments Machete Cargo Order (#3584) ## About The Pull Request Uncomments the Machete Crate from cargo ## Why It's Good For The Game They're bulky but they're neat melee options. Beats you to death with machetes ## Changelog :cl: add: Added Stamped Steel Machetes, 5 for 500 /:cl: --- code/modules/cargo/packs/sec_supply.dm | 5 ----- 1 file changed, 5 deletions(-) diff --git a/code/modules/cargo/packs/sec_supply.dm b/code/modules/cargo/packs/sec_supply.dm index 1045f2730ea9..e4208699338b 100644 --- a/code/modules/cargo/packs/sec_supply.dm +++ b/code/modules/cargo/packs/sec_supply.dm @@ -77,18 +77,13 @@ /obj/item/melee/knife/survival) crate_name = "combat knife crate" -/* /datum/supply_pack/sec_supply/machete name = "Stampted Steel Machete Crate" desc = "Contains five mass produced machetes. A perfect choice for crews on a budget." cost = 500 contains = list(/obj/item/melee/sword/mass, - /obj/item/melee/sword/mass, - /obj/item/melee/sword/mass, - /obj/item/melee/sword/mass, /obj/item/melee/sword/mass) crate_name = "combat knife crate" -*/ /datum/supply_pack/sec_supply/flamethrower name = "Flamethrower Crate" From ffbf7cf832a2c98bad8c2eed434fcad1324f66fc Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 22 Oct 2024 00:58:03 -0500 Subject: [PATCH 069/274] Automatic changelog generation for PR #3584 [ci skip] --- html/changelogs/AutoChangeLog-pr-3584.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3584.yml diff --git a/html/changelogs/AutoChangeLog-pr-3584.yml b/html/changelogs/AutoChangeLog-pr-3584.yml new file mode 100644 index 000000000000..12e3350793e1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3584.yml @@ -0,0 +1,4 @@ +author: generalthrax +changes: + - {rscadd: 'Added Stamped Steel Machetes, 5 for 500'} +delete-after: true From 0c8f4c661d0ef9e027c7afc638c6567eb14029d8 Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Erikafox@users.noreply.github.com> Date: Tue, 22 Oct 2024 01:48:26 -0400 Subject: [PATCH 070/274] Analgesia trait fixes (#3583) ## About The Pull Request Analgesia is now incompatible with self-aware Embeds and EMPs no longer give people with analgesia big warning messages ## Why It's Good For The Game code good ## Changelog :cl: fix: Analgesia can no longer be taken with self-aware fix: Few edge cases for analgesiacs getting pain /:cl: --------- Signed-off-by: Erika Fox <94164348+Erikafox@users.noreply.github.com> Co-authored-by: Bjarl <94164348+Bjarl@users.noreply.github.com> Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> --- code/controllers/subsystem/processing/quirks.dm | 4 +++- code/datums/components/embedded.dm | 5 ++++- code/modules/mob/living/carbon/human/human_defense.dm | 4 ++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index c6f9e4404c07..41e3f77d6134 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -23,7 +23,9 @@ PROCESSING_SUBSYSTEM_DEF(quirks) list("Ageusia","Vegetarian","Deviant Tastes"), \ list("Ananas Affinity","Ananas Aversion"), \ list("Alcohol Tolerance","Light Drinker"), \ - list("Bad Touch", "Friendly")) + list("Bad Touch", "Friendly"), \ + list("Self-Aware", "Congenital Analgesia") + ) species_blacklist = list("Blood Deficiency" = list(SPECIES_IPC, SPECIES_JELLYPERSON, SPECIES_PLASMAMAN, SPECIES_VAMPIRE)) diff --git a/code/datums/components/embedded.dm b/code/datums/components/embedded.dm index 018321094283..13c21c2c8f29 100644 --- a/code/datums/components/embedded.dm +++ b/code/datums/components/embedded.dm @@ -164,7 +164,10 @@ if(harmful && prob(chance)) var/damage = weapon.w_class * jostle_pain_mult limb.receive_damage(brute=(1-pain_stam_pct) * damage, stamina=pain_stam_pct * damage) - to_chat(victim, "[weapon] embedded in your [limb.name] jostles and stings!") + if(HAS_TRAIT(victim, TRAIT_ANALGESIA)) + to_chat(victim, span_notice("[weapon] embedded in your [limb.name] shifts around.")) + return + to_chat(victim, span_userdanger("[weapon] embedded in your [limb.name] jostles and stings!")) /// Called when then item randomly falls out of a carbon. This handles the damage and descriptors, then calls safe_remove() diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index c26956991d33..764ede83aa90 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -522,8 +522,8 @@ var/informed = FALSE for(var/obj/item/bodypart/L as anything in bodyparts) if(!IS_ORGANIC_LIMB(L)) - if(!informed) - to_chat(src, "You feel a sharp pain as your robotic limbs overload.") + if(!informed && !HAS_TRAIT(src, TRAIT_ANALGESIA)) + to_chat(src, span_userdanger("You feel a sharp pain as your robotic limbs overload.")) informed = TRUE switch(severity) if(1) From a2483829c7dea5db529352fa0cdc50c95526ab09 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 22 Oct 2024 01:10:54 -0500 Subject: [PATCH 071/274] Automatic changelog generation for PR #3583 [ci skip] --- html/changelogs/AutoChangeLog-pr-3583.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3583.yml diff --git a/html/changelogs/AutoChangeLog-pr-3583.yml b/html/changelogs/AutoChangeLog-pr-3583.yml new file mode 100644 index 000000000000..932d150c5bb6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3583.yml @@ -0,0 +1,5 @@ +author: Erikafox +changes: + - {bugfix: Analgesia can no longer be taken with self-aware} + - {bugfix: Few edge cases for analgesiacs getting pain} +delete-after: true From b42dea75e1d5db8670083c32df7ac42c4c46cc2f Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Erikafox@users.noreply.github.com> Date: Tue, 22 Oct 2024 10:00:56 -0400 Subject: [PATCH 072/274] Lets you fax holochips (#3606) ## About The Pull Request as title ## Why It's Good For The Game wireless money transfer... in the year of our space 505fs... unthinkable... ## Changelog :cl: add: You can now fax credit holochips /:cl: --------- Co-authored-by: Erika Fox <94164348+Bjarl@users.noreply.github.com> --- code/modules/paperwork/fax.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm index 0bf0a3eb51d3..ece23ebbfc81 100644 --- a/code/modules/paperwork/fax.dm +++ b/code/modules/paperwork/fax.dm @@ -31,7 +31,8 @@ /// List of types which should always be allowed to be faxed var/static/list/allowed_types = list( /obj/item/paper, - /obj/item/photo + /obj/item/photo, + /obj/item/holochip, ) /// List of types which should be allowed to be faxed if hacked var/static/list/exotic_types = list( @@ -46,7 +47,6 @@ /obj/item/reagent_containers/food/snacks/pancakes, /obj/item/throwing_star, /obj/item/spacecash, - /obj/item/holochip, /obj/item/card, /obj/item/folder/biscuit ) From ba953a28c6df77bd3be03f44a475b42b060b1a8c Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 22 Oct 2024 09:11:45 -0500 Subject: [PATCH 073/274] Automatic changelog generation for PR #3606 [ci skip] --- html/changelogs/AutoChangeLog-pr-3606.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3606.yml diff --git a/html/changelogs/AutoChangeLog-pr-3606.yml b/html/changelogs/AutoChangeLog-pr-3606.yml new file mode 100644 index 000000000000..747ad59533f5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3606.yml @@ -0,0 +1,4 @@ +author: Erikafox +changes: + - {rscadd: You can now fax credit holochips} +delete-after: true From 8c635bd6f6cb337880ee10316af6f11b1ca3b32c Mon Sep 17 00:00:00 2001 From: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Date: Tue, 22 Oct 2024 10:31:18 -0500 Subject: [PATCH 074/274] smarter allowed ammo types (#3429) ## About The Pull Request deal with cell sizes, snowflaked gun inits for diffrent mags and evil subtypes a basic unit test to make sure it works you can now pass a arg to empty a guns, ammo boxes, and cells in new so we don't need 8 billion sub types for that. using that, gun cases now are easier to make and have a sub type which grabs guns from the tile its on for mappers. cool regex if stuff conflict merges cell_type = (\/[\w\/]+) or mag_type = (\/[\w\/]+) default_ammo_type = $1\n\tallowed_ammo_types = list(\n\t\t$1,\n\t) ## Why It's Good For The Game ## Changelog :cl: fix: ammo refactor: refactored ammo types to not be snowflaked when handling spawning subtyped guns /:cl: --- .../IceRuins/icemoon_ice_lodge.dmm | 2 +- .../lavaland_abandonedlisteningpost.dmm | 2 +- .../shuttles/independent/independent_kilo.dmm | 4 +- _maps/shuttles/inteq/inteq_talos.dmm | 48 ++- _maps/shuttles/minutemen/minutemen_atlas.dmm | 6 +- .../shuttles/nanotrasen/nanotrasen_ranger.dmm | 8 +- _maps/shuttles/roumain/srm_elder.dmm | 2 +- _maps/shuttles/solgov/solgov_chronicle.dmm | 2 +- _maps/shuttles/solgov/solgov_inkwell.dmm | 2 +- _maps/shuttles/solgov/solgov_paracelsus.dmm | 2 +- .../syndicate/syndicate_gorlex_hyena.dmm | 4 +- .../syndicate/syndicate_twinkleshine.dmm | 6 +- check_regex.yaml | 2 +- code/__DEFINES/guns.dm | 4 - .../machinery/porta_turret/portable_turret.dm | 2 +- code/game/machinery/suit_storage_unit.dm | 2 +- code/game/objects/items/storage/guncases.dm | 308 ++++++++---------- code/modules/awaymissions/capture_the_flag.dm | 20 +- code/modules/cargo/packs/gun.dm | 30 +- .../mining/lavaland/necropolis_chests.dm | 2 +- .../mob/living/simple_animal/hostile/mimic.dm | 2 +- code/modules/power/cell.dm | 6 +- .../boxes_magazines/_box_magazine.dm | 4 +- code/modules/projectiles/gun.dm | 14 +- code/modules/projectiles/guns/ballistic.dm | 36 +- .../projectiles/guns/ballistic/assault.dm | 29 +- .../projectiles/guns/ballistic/automatic.dm | 15 +- .../projectiles/guns/ballistic/gauss.dm | 42 ++- .../modules/projectiles/guns/ballistic/hmg.dm | 26 +- .../projectiles/guns/ballistic/launchers.dm | 20 +- .../projectiles/guns/ballistic/pistol.dm | 48 ++- .../projectiles/guns/ballistic/revolver.dm | 51 +-- .../projectiles/guns/ballistic/rifle.dm | 30 +- .../projectiles/guns/ballistic/shotgun.dm | 122 +++++-- .../modules/projectiles/guns/ballistic/smg.dm | 40 ++- .../modules/projectiles/guns/ballistic/toy.dm | 25 +- code/modules/projectiles/guns/energy.dm | 36 +- .../projectiles/guns/energy/energy_gun.dm | 22 +- .../guns/energy/kinetic_accelerator.dm | 7 +- code/modules/projectiles/guns/energy/laser.dm | 20 +- .../projectiles/guns/energy/laser_gatling.dm | 5 +- code/modules/projectiles/guns/energy/pulse.dm | 25 +- .../projectiles/guns/energy/special.dm | 17 +- .../clip_lanchester/ballistics.dm | 44 ++- .../manufacturer/clip_lanchester/lasers.dm | 8 +- .../manufacturer/etherbor/energy_gunsword.dm | 19 +- .../frontier_import/ballistics.dm | 25 +- .../nanotrasen_sharplite/ballistics.dm | 9 +- .../manufacturer/scarborough/ballistics.dm | 127 +++++--- .../projectiles/guns/misc/beam_rifle.dm | 13 +- code/modules/projectiles/guns/misc/bow.dm | 5 +- code/modules/projectiles/guns/powered.dm | 26 +- code/modules/unit_tests/_unit_tests.dm | 1 + code/modules/unit_tests/gun_sanity.dm | 17 + 54 files changed, 856 insertions(+), 538 deletions(-) create mode 100644 code/modules/unit_tests/gun_sanity.dm diff --git a/_maps/RandomRuins/IceRuins/icemoon_ice_lodge.dmm b/_maps/RandomRuins/IceRuins/icemoon_ice_lodge.dmm index 87fc7ea3d267..92b840e05aa0 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_ice_lodge.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_ice_lodge.dmm @@ -1066,7 +1066,7 @@ projectile_type = null }, /obj/item/gun/ballistic/automatic/smg/firestorm{ - spawnwithmagazine = 0 + default_ammo_type = 0 }, /turf/open/floor/wood/maple{ icon_state = "wood-broken4" diff --git a/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm b/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm index 8cc99b4a591a..24fea81ce05c 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm @@ -1116,7 +1116,7 @@ /area/ruin/unpowered/listening_post) "te" = ( /obj/item/gun/ballistic/automatic/smg/cobra{ - spawnwithmagazine = 0 + default_ammo_type = 0 }, /obj/item/ammo_box/magazine/m45_cobra{ start_empty = 1 diff --git a/_maps/shuttles/independent/independent_kilo.dmm b/_maps/shuttles/independent/independent_kilo.dmm index f9504be9d31e..43941169b66a 100644 --- a/_maps/shuttles/independent/independent_kilo.dmm +++ b/_maps/shuttles/independent/independent_kilo.dmm @@ -663,7 +663,7 @@ }, /obj/item/storage/box/ammo/a12g_rubbershot, /obj/item/gun/ballistic/shotgun/doublebarrel/presawn{ - spawnwithmagazine = 0 + default_ammo_type = 0 }, /obj/structure/cable/pink{ icon_state = "4-10" @@ -1876,7 +1876,7 @@ }, /obj/effect/decal/cleanable/oil, /obj/item/storage/box/ammo/a12g_buckshot, -/obj/item/gun/ballistic/shotgun/doublebarrel/no_mag, +/obj/item/gun/ballistic/shotgun/doublebarrel/empty, /turf/open/floor/plasteel/patterned, /area/ship/cargo) "Vd" = ( diff --git a/_maps/shuttles/inteq/inteq_talos.dmm b/_maps/shuttles/inteq/inteq_talos.dmm index 79ec309513f8..5df5060f6f06 100644 --- a/_maps/shuttles/inteq/inteq_talos.dmm +++ b/_maps/shuttles/inteq/inteq_talos.dmm @@ -5309,12 +5309,21 @@ /obj/structure/sign/poster/retro/lasergun_new{ pixel_x = -32 }, -/obj/item/gun/ballistic/shotgun/automatic/bulldog/inteq/no_mag{ - pixel_x = -8; - pixel_y = 8 +/obj/item/storage/guncase/inherit{ + pixel_x = 2; + pixel_y = -2 }, -/obj/item/gun/ballistic/shotgun/automatic/bulldog/inteq/no_mag{ - pixel_x = -12 +/obj/item/gun/ballistic/shotgun/automatic/bulldog/inteq/no_mag, +/obj/item/ammo_box/magazine/m12g_bulldog, +/obj/item/ammo_box/magazine/m12g_bulldog, +/obj/item/storage/guncase/inherit{ + pixel_y = 2; + pixel_x = -2 + }, +/obj/item/gun/ballistic/shotgun/automatic/bulldog/inteq/no_mag, +/obj/item/ammo_box/magazine/m12g_bulldog, +/obj/item/ammo_box/magazine/m12g_bulldog{ + pixel_y = -1 }, /turf/open/floor/plasteel/tech/grid, /area/ship/security/armory) @@ -6534,25 +6543,9 @@ /obj/structure/sign/poster/official/ion_carbine{ pixel_x = -32 }, -/obj/item/ammo_box/magazine/m12g_bulldog{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/ammo_box/magazine/m12g_bulldog{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/ammo_box/magazine/m12g_bulldog{ - pixel_x = -5 - }, -/obj/item/ammo_box/magazine/m12g_bulldog{ - pixel_x = -5 - }, -/obj/item/ammo_box/magazine/co9mm{ - pixel_x = 5 - }, -/obj/item/ammo_box/magazine/co9mm{ - pixel_x = -5 +/obj/item/toy/plush/moth/deadhead{ + pixel_x = 3; + pixel_y = 3 }, /turf/open/floor/plasteel/tech/grid, /area/ship/security/armory) @@ -7415,9 +7408,10 @@ /obj/structure/rack, /obj/effect/turf_decal/siding/thinplating/dark, /obj/effect/decal/cleanable/dirt, -/obj/item/gun/ballistic/automatic/pistol/commander/inteq{ - pixel_y = 5 - }, +/obj/item/storage/guncase/pistol/inherit, +/obj/item/gun/ballistic/automatic/pistol/commander/inteq, +/obj/item/ammo_box/magazine/co9mm, +/obj/item/ammo_box/magazine/co9mm, /turf/open/floor/plasteel/tech/grid, /area/ship/security/armory) "Wr" = ( diff --git a/_maps/shuttles/minutemen/minutemen_atlas.dmm b/_maps/shuttles/minutemen/minutemen_atlas.dmm index 407a8f00bcfe..325069e91a6e 100644 --- a/_maps/shuttles/minutemen/minutemen_atlas.dmm +++ b/_maps/shuttles/minutemen/minutemen_atlas.dmm @@ -278,7 +278,7 @@ name = "captain's locker"; req_access_txt = "20" }, -/obj/item/storage/pistolcase/cm23, +/obj/item/storage/guncase/pistol/cm23, /obj/item/clothing/suit/armor/clip_capcoat{ pixel_x = -14 }, @@ -746,7 +746,7 @@ name = "first officer's locker"; req_access_txt = "19" }, -/obj/item/storage/pistolcase/cm23{ +/obj/item/storage/guncase/pistol/cm23{ pixel_y = -4 }, /obj/item/clothing/head/clip/slouch/officer{ @@ -1165,7 +1165,7 @@ /obj/machinery/airalarm/directional/north, /obj/structure/guncloset, /obj/item/gun/ballistic/automatic/assault/cm82{ - spawnwithmagazine = 0; + default_ammo_type = 0; pixel_x = -4; pixel_y = 8 }, diff --git a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm index d70424c08c84..f50061aaa28f 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm @@ -243,7 +243,7 @@ /obj/item/gps, /obj/item/ammo_box/magazine/co9mm, /obj/item/storage/belt/security/webbing, -/obj/item/storage/pistolcase/commander, +/obj/item/storage/guncase/pistol/commander, /obj/item/clothing/glasses/hud/security/sunglasses, /obj/structure/window/reinforced/tinted{ dir = 4 @@ -4187,7 +4187,7 @@ pixel_x = 7; pixel_y = -20 }, -/obj/item/storage/pistolcase/egun, +/obj/item/storage/guncase/energy/egun, /obj/item/megaphone/command, /obj/structure/closet/secure_closet/lp/lieutenant, /obj/effect/turf_decal/techfloor{ @@ -6250,14 +6250,14 @@ name = "Armory"; req_ship_access = 1 }, -/obj/item/storage/pistolcase/commander, +/obj/item/storage/guncase/pistol/commander, /obj/item/ammo_box/magazine/co9mm, /obj/item/clothing/suit/armor/nanotrasen/slim, /obj/item/clothing/suit/armor/nanotrasen/slim, /obj/item/ammo_box/magazine/smgm9mm, /obj/item/ammo_box/magazine/smgm9mm, /obj/item/ammo_box/magazine/smgm9mm, -/obj/item/storage/pistolcase, +/obj/item/storage/guncase/pistol, /obj/effect/turf_decal/steeldecal/steel_decals10{ dir = 5 }, diff --git a/_maps/shuttles/roumain/srm_elder.dmm b/_maps/shuttles/roumain/srm_elder.dmm index 23c64f4681a6..24d00ebde456 100644 --- a/_maps/shuttles/roumain/srm_elder.dmm +++ b/_maps/shuttles/roumain/srm_elder.dmm @@ -2020,7 +2020,7 @@ }, /obj/item/storage/backpack/satchel/leather, /obj/item/storage/box/ammo/a44roum, -/obj/item/storage/pistolcase/montagne, +/obj/item/storage/guncase/pistol/montagne, /obj/item/clothing/accessory/waistcoat/roumain, /turf/open/floor/wood/mahogany, /area/ship/bridge) diff --git a/_maps/shuttles/solgov/solgov_chronicle.dmm b/_maps/shuttles/solgov/solgov_chronicle.dmm index f08281a47103..9a3be7fe22c1 100644 --- a/_maps/shuttles/solgov/solgov_chronicle.dmm +++ b/_maps/shuttles/solgov/solgov_chronicle.dmm @@ -272,7 +272,7 @@ /obj/item/clothing/suit/armor/solgov_trenchcoat, /obj/item/spacecash/bundle/loadsamoney, /obj/item/clothing/neck/cloak/solgovcap, -/obj/item/storage/pistolcase/modelh, +/obj/item/storage/guncase/pistol/modelh, /obj/item/storage/box/ammo/ferroslug, /turf/open/floor/carpet/royalblue, /area/ship/crew/office) diff --git a/_maps/shuttles/solgov/solgov_inkwell.dmm b/_maps/shuttles/solgov/solgov_inkwell.dmm index 1a38d735246b..0a63ed263799 100644 --- a/_maps/shuttles/solgov/solgov_inkwell.dmm +++ b/_maps/shuttles/solgov/solgov_inkwell.dmm @@ -5933,7 +5933,7 @@ /obj/item/fish_feed, /obj/item/pen/fountain/solgov, /obj/item/clothing/neck/cloak/solgovcap, -/obj/item/storage/pistolcase/modelh, +/obj/item/storage/guncase/pistol/modelh, /obj/item/storage/box/ammo/ferroslug, /turf/open/floor/wood/maple, /area/ship/crew/dorm/dormtwo) diff --git a/_maps/shuttles/solgov/solgov_paracelsus.dmm b/_maps/shuttles/solgov/solgov_paracelsus.dmm index e062f70d011d..4c749a5744fe 100644 --- a/_maps/shuttles/solgov/solgov_paracelsus.dmm +++ b/_maps/shuttles/solgov/solgov_paracelsus.dmm @@ -3581,7 +3581,7 @@ /obj/item/fish_feed, /obj/item/pen/fountain/solgov, /obj/item/clothing/neck/cloak/solgovcap, -/obj/item/storage/pistolcase/modelh, +/obj/item/storage/guncase/pistol/modelh, /obj/item/storage/box/ammo/ferroslug, /turf/open/floor/carpet/royalblue, /area/ship/crew) diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm index 7d0278f8b906..4aafbcf9dc72 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm @@ -64,7 +64,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/item/ammo_box/a357/match, /obj/item/pen/edagger, -/obj/item/storage/pistolcase/a357, +/obj/item/storage/guncase/pistol/a357, /obj/item/storage/box/ammo/a357, /turf/open/floor/carpet/black, /area/ship/bridge) @@ -2504,7 +2504,7 @@ /obj/item/clothing/suit/ngr, /obj/item/clothing/head/hardhat/ngr/foreman, /obj/item/tank/jetpack/suit, -/obj/item/storage/pistolcase/ringneck, +/obj/item/storage/guncase/pistol/ringneck, /turf/open/floor/carpet/red, /area/ship/cargo/office) "QW" = ( diff --git a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm index 3a3438c8f2f8..111dd2f22690 100644 --- a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm +++ b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm @@ -1809,7 +1809,7 @@ /obj/item/codespeak_manual{ charges = 2 }, -/obj/item/storage/pistolcase/a357, +/obj/item/storage/guncase/pistol/a357, /obj/item/megaphone/sec{ name = "syndicate megaphone" }, @@ -7375,7 +7375,7 @@ keyslot = null }, /obj/item/storage/belt/sabre/solgov, -/obj/item/storage/pistolcase/modelh, +/obj/item/storage/guncase/pistol/modelh, /obj/item/storage/box/ammo/ferroslug, /turf/open/floor/mineral/plastitanium, /area/ship/bridge) @@ -8865,7 +8865,7 @@ /obj/item/megaphone/sec{ name = "syndicate megaphone" }, -/obj/item/storage/pistolcase/ringneck, +/obj/item/storage/guncase/pistol/ringneck, /obj/item/clothing/head/HoS/beret/syndicate, /obj/item/radio/headset/syndicate/alt/leader, /obj/item/clothing/gloves/krav_maga/combatglovesplus, diff --git a/check_regex.yaml b/check_regex.yaml index a4e63a1762f8..a9ed6b699d7f 100644 --- a/check_regex.yaml +++ b/check_regex.yaml @@ -29,7 +29,7 @@ standards: - exactly: [1, "/area text paths", '"/area'] - exactly: [16, "/datum text paths", '"/datum'] - exactly: [4, "/mob text paths", '"/mob'] - - exactly: [35, "/obj text paths", '"/obj'] + - exactly: [33, "/obj text paths", '"/obj'] - exactly: [0, "/turf text paths", '"/turf'] - exactly: [114, "text2path uses", "text2path"] diff --git a/code/__DEFINES/guns.dm b/code/__DEFINES/guns.dm index 26f7cfbfb6a9..2804ecab6bfd 100644 --- a/code/__DEFINES/guns.dm +++ b/code/__DEFINES/guns.dm @@ -158,10 +158,6 @@ ///ammo box will have a different state for full and empty; -max_ammo and -0 #define AMMO_BOX_FULL_EMPTY 2 -#define MAG_SIZE_SMALL 1 -#define MAG_SIZE_MEDIUM 2 -#define MAG_SIZE_LARGE 3 - //Projectile Reflect #define REFLECT_NORMAL (1<<0) #define REFLECT_FAKEPROJECTILE (1<<1) diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 5df6e5fce6b3..5d89f33549d3 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -1283,7 +1283,7 @@ DEFINE_BITFIELD(turret_flags, list( /obj/item/gun/ballistic/get_turret_properties() . = ..() - var/obj/item/ammo_box/mag = mag_type + var/obj/item/ammo_box/mag = default_ammo_type var/obj/item/ammo_casing/primary_ammo = initial(mag.ammo_type) .["base_icon_state"] = "syndie" diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index cc742c409f0e..9f69bb5748c8 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -666,7 +666,7 @@ else if(istype(AM, /obj/item/mod/control) && !storage) AM.forceMove(src) mod = AM - else if(istype(AM, /obj/item) && !storage) + else if(istype(AM, /obj/item) && !AM.anchored && !storage) AM.forceMove(src) storage = AM update_appearance() diff --git a/code/game/objects/items/storage/guncases.dm b/code/game/objects/items/storage/guncases.dm index 947ed3d8b914..c846dd36b050 100644 --- a/code/game/objects/items/storage/guncases.dm +++ b/code/game/objects/items/storage/guncases.dm @@ -13,209 +13,183 @@ hitsound = 'sound/weapons/smash.ogg' drop_sound = 'sound/items/handling/toolbox_drop.ogg' pickup_sound = 'sound/items/handling/toolbox_pickup.ogg' + var/max_items = 10 + var/max_w_class = WEIGHT_CLASS_BULKY + var/gun_type + var/mag_type + var/mag_count = 2 + var/ammoless = TRUE + var/grab_loc = FALSE + var/holdable_items = list( + /obj/item/gun, + /obj/item/ammo_box, + /obj/item/stock_parts/cell/gun + ) + +/obj/item/storage/guncase/Initialize(mapload) + . = ..() + if(mapload && grab_loc) + var/items_eaten = 0 + for(var/obj/item/I in loc) + if(I.w_class > max_w_class) + continue + if(is_type_in_list(I, holdable_items)) + I.forceMove(src) + items_eaten++ + if(items_eaten >= mag_count + 1) + break /obj/item/storage/guncase/ComponentInitialize() . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 10 - STR.max_w_class = WEIGHT_CLASS_BULKY - STR.set_holdable(list( - /obj/item/gun, - /obj/item/ammo_box, - /obj/item/stock_parts/cell/gun - )) + STR.max_items = max_items + STR.max_w_class = max_w_class + STR.set_holdable(holdable_items) + +/obj/item/storage/guncase/PopulateContents() + if(grab_loc) + return + if(gun_type) + new gun_type(src, ammoless) + if(mag_type) + for(var/i in 1 to mag_count) + if(ispath(mag_type, /obj/item/ammo_box) | ispath(mag_type, /obj/item/stock_parts/cell)) + new mag_type(src, ammoless) + +/// Need to double check this in a seperate pr that adds this to a few ships +/// Eats the items on its tile +/obj/item/storage/guncase/inherit + grab_loc = TRUE /obj/item/storage/guncase/winchester -/obj/item/storage/guncase/winchester/PopulateContents() - new /obj/item/gun/ballistic/shotgun/flamingarrow/no_mag(src) + gun_type = /obj/item/gun/ballistic/shotgun/flamingarrow /obj/item/storage/guncase/conflagration -/obj/item/storage/guncase/conflagration/PopulateContents() - new /obj/item/gun/ballistic/shotgun/flamingarrow/conflagration/no_mag(src) + gun_type = /obj/item/gun/ballistic/shotgun/flamingarrow/conflagration /obj/item/storage/guncase/absolution -/obj/item/storage/guncase/absolution/PopulateContents() - new /obj/item/gun/ballistic/shotgun/flamingarrow/absolution/no_mag(src) + gun_type = /obj/item/gun/ballistic/shotgun/flamingarrow/absolution /obj/item/storage/guncase/skm -/obj/item/storage/guncase/skm/PopulateContents() - new /obj/item/gun/ballistic/automatic/assault/skm/no_mag(src) - new /obj/item/ammo_box/magazine/skm_762_40/empty(src) - new /obj/item/ammo_box/magazine/skm_762_40/empty(src) + gun_type = /obj/item/gun/ballistic/automatic/assault/skm + mag_type = /obj/item/ammo_box/magazine/skm_762_40 /obj/item/storage/guncase/p16 -/obj/item/storage/guncase/p16/PopulateContents() - new /obj/item/gun/ballistic/automatic/assault/p16/no_mag(src) - new /obj/item/ammo_box/magazine/p16/empty(src) - new /obj/item/ammo_box/magazine/p16/empty(src) + gun_type = /obj/item/gun/ballistic/automatic/assault/p16 + mag_type = /obj/item/ammo_box/magazine/p16 /obj/item/storage/guncase/beacon -/obj/item/storage/guncase/beacon/PopulateContents() - new /obj/item/gun/ballistic/shotgun/doublebarrel/beacon/no_mag(src) + gun_type = /obj/item/gun/ballistic/shotgun/doublebarrel/beacon /obj/item/storage/guncase/scout -/obj/item/storage/guncase/scout/PopulateContents() - new /obj/item/gun/ballistic/rifle/scout/no_mag(src) - new /obj/item/ammo_box/a300/empty(src) - new /obj/item/ammo_box/a300/empty(src) + gun_type = /obj/item/gun/ballistic/rifle/scout + mag_type = /obj/item/ammo_box/a300 /obj/item/storage/guncase/boomslang -/obj/item/storage/guncase/boomslang/PopulateContents() - new /obj/item/gun/ballistic/automatic/marksman/boomslang/indie/no_mag(src) - new /obj/item/ammo_box/magazine/boomslang/short/empty(src) - new /obj/item/ammo_box/magazine/boomslang/short/empty(src) + gun_type = /obj/item/gun/ballistic/automatic/marksman/boomslang/indie + mag_type = /obj/item/ammo_box/magazine/boomslang/short /obj/item/storage/guncase/cobra -/obj/item/storage/guncase/cobra/PopulateContents() - new /obj/item/gun/ballistic/automatic/smg/cobra/indie/no_mag(src) - new /obj/item/ammo_box/magazine/m45_cobra/empty(src) - new /obj/item/ammo_box/magazine/m45_cobra/empty(src) + gun_type = /obj/item/gun/ballistic/automatic/smg/cobra/indie + mag_type = /obj/item/ammo_box/magazine/m45_cobra /obj/item/storage/guncase/hellfire -/obj/item/storage/guncase/hellfire/PopulateContents() - new /obj/item/gun/ballistic/shotgun/hellfire/no_mag(src) + gun_type = /obj/item/gun/ballistic/shotgun/hellfire /obj/item/storage/guncase/doublebarrel -/obj/item/storage/guncase/doublebarrel/PopulateContents() - new /obj/item/gun/ballistic/shotgun/doublebarrel/no_mag(src) + gun_type = /obj/item/gun/ballistic/shotgun/doublebarrel /obj/item/storage/guncase/brimstone -/obj/item/storage/guncase/brimstone/PopulateContents() - new /obj/item/gun/ballistic/shotgun/brimstone/no_mag(src) + gun_type = /obj/item/gun/ballistic/shotgun/brimstone /obj/item/storage/guncase/illestren -/obj/item/storage/guncase/illestren/PopulateContents() - new /obj/item/gun/ballistic/rifle/illestren/empty(src) - new /obj/item/ammo_box/magazine/illestren_a850r/empty(src) - new /obj/item/ammo_box/magazine/illestren_a850r/empty(src) + gun_type = /obj/item/gun/ballistic/rifle/illestren + mag_type = /obj/item/ammo_box/magazine/illestren_a850r /obj/item/storage/guncase/wt550 -/obj/item/storage/guncase/wt550/PopulateContents() - new /obj/item/gun/ballistic/automatic/smg/wt550/no_mag(src) - new /obj/item/ammo_box/magazine/wt550m9/empty(src) - new /obj/item/ammo_box/magazine/wt550m9/empty(src) + gun_type = /obj/item/gun/ballistic/automatic/smg/wt550 + mag_type = /obj/item/ammo_box/magazine/wt550m9 -/obj/item/storage/pistolcase +/obj/item/storage/guncase/pistol name = "pistol case" desc = "A large box designed for holding pistols and magazines safely." - icon = 'icons/obj/guncase.dmi' - icon_state = "guncase" - item_state = "infiltrator_case" - force = 12 - throwforce = 12 - throw_speed = 2 - w_class = WEIGHT_CLASS_BULKY - attack_verb = list("robusted") - hitsound = 'sound/weapons/smash.ogg' - drop_sound = 'sound/items/handling/toolbox_drop.ogg' - pickup_sound = 'sound/items/handling/toolbox_pickup.ogg' + max_items = 8 + max_w_class = WEIGHT_CLASS_NORMAL -/obj/item/storage/pistolcase/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 8 - STR.max_w_class = WEIGHT_CLASS_NORMAL - STR.set_holdable(list( - /obj/item/gun, - /obj/item/ammo_box/, - /obj/item/stock_parts/cell/gun - )) - -/obj/item/storage/pistolcase/modelh -/obj/item/storage/pistolcase/modelh/PopulateContents() - new /obj/item/gun/ballistic/automatic/powered/gauss/modelh/no_mag(src) - new /obj/item/ammo_box/magazine/modelh/empty(src) - new /obj/item/ammo_box/magazine/modelh/empty(src) - -/obj/item/storage/pistolcase/ringneck -/obj/item/storage/pistolcase/ringneck/PopulateContents() - new /obj/item/gun/ballistic/automatic/pistol/ringneck/indie/no_mag(src) - new /obj/item/ammo_box/magazine/m10mm_ringneck/empty(src) - new /obj/item/ammo_box/magazine/m10mm_ringneck/empty(src) - -/obj/item/storage/pistolcase/candor -/obj/item/storage/pistolcase/candor/PopulateContents() - new /obj/item/gun/ballistic/automatic/pistol/candor/no_mag(src) - new /obj/item/ammo_box/magazine/m45/empty(src) - new /obj/item/ammo_box/magazine/m45/empty(src) - -/obj/item/storage/pistolcase/detective -/obj/item/storage/pistolcase/detective/PopulateContents() - new /obj/item/gun/ballistic/revolver/detective/no_mag(src) - new /obj/item/ammo_box/c38/empty(src) - new /obj/item/ammo_box/c38/empty(src) - -/obj/item/storage/pistolcase/shadow -/obj/item/storage/pistolcase/shadow/PopulateContents() - new /obj/item/gun/ballistic/revolver/shadow/no_mag(src) - -/obj/item/storage/pistolcase/viper -/obj/item/storage/pistolcase/viper/PopulateContents() - new /obj/item/gun/ballistic/revolver/viper/indie/no_mag(src) - -/obj/item/storage/pistolcase/commander -/obj/item/storage/pistolcase/commander/PopulateContents() - new /obj/item/gun/ballistic/automatic/pistol/commander/no_mag(src) - new /obj/item/ammo_box/magazine/co9mm/empty(src) - new /obj/item/ammo_box/magazine/co9mm/empty(src) - -/obj/item/storage/pistolcase/firebrand -/obj/item/storage/pistolcase/firebrand/PopulateContents() - new /obj/item/gun/ballistic/revolver/firebrand/no_mag(src) - -/obj/item/storage/pistolcase/derringer -/obj/item/storage/pistolcase/derringer/PopulateContents() - new /obj/item/gun/ballistic/derringer/no_mag(src) - -/obj/item/storage/pistolcase/a357 -/obj/item/storage/pistolcase/a357/PopulateContents() - new /obj/item/gun/ballistic/revolver/viper/no_mag(src) - new /obj/item/ammo_box/a357/empty(src) - new /obj/item/ammo_box/a357/empty(src) - -/obj/item/storage/pistolcase/montagne -/obj/item/storage/pistolcase/montagne/PopulateContents() - new /obj/item/gun/ballistic/revolver/montagne/no_mag(src) - new /obj/item/ammo_box/a44roum_speedloader/empty(src) - new /obj/item/ammo_box/a44roum_speedloader/empty(src) - -/obj/item/storage/pistolcase/disposable -/obj/item/storage/pistolcase/disposable/PopulateContents() +/// Need to double check this in a seperate pr that adds this to a few ships +/// Eats the items on its tile +/obj/item/storage/guncase/pistol/inherit + grab_loc = TRUE + +/obj/item/storage/guncase/pistol/modelh + gun_type = /obj/item/gun/ballistic/automatic/powered/gauss/modelh + mag_type = /obj/item/ammo_box/magazine/modelh + +/obj/item/storage/guncase/pistol/ringneck + gun_type = /obj/item/gun/ballistic/automatic/pistol/ringneck/indie + mag_type = /obj/item/ammo_box/magazine/m10mm_ringneck + +/obj/item/storage/guncase/pistol/candor + gun_type = /obj/item/gun/ballistic/automatic/pistol/candor + mag_type = /obj/item/ammo_box/magazine/m45 + +/obj/item/storage/guncase/pistol/detective + gun_type = /obj/item/gun/ballistic/revolver/detective + mag_type = /obj/item/ammo_box/c38 + +/obj/item/storage/guncase/pistol/shadow + gun_type = /obj/item/gun/ballistic/revolver/shadow + +/obj/item/storage/guncase/pistol/viper + gun_type = /obj/item/gun/ballistic/revolver/viper/indie + +/obj/item/storage/guncase/pistol/commander + gun_type = /obj/item/gun/ballistic/automatic/pistol/commander + mag_type = /obj/item/ammo_box/magazine/co9mm + +/obj/item/storage/guncase/pistol/firebrand + gun_type = /obj/item/gun/ballistic/revolver/firebrand + +/obj/item/storage/guncase/pistol/derringer + gun_type = /obj/item/gun/ballistic/derringer + +/obj/item/storage/guncase/pistol/a357 + gun_type = /obj/item/gun/ballistic/revolver/viper + mag_type = /obj/item/ammo_box/a357/empty + +/obj/item/storage/guncase/pistol/montagne + gun_type = /obj/item/gun/ballistic/revolver/montagne + mag_type = /obj/item/ammo_box/a44roum_speedloader + +/obj/item/storage/guncase/pistol/cm23 + gun_type = /obj/item/gun/ballistic/automatic/pistol/cm23 + mag_type = /obj/item/ammo_box/magazine/cm23 + +/obj/item/storage/guncase/pistol/disposable +/obj/item/storage/guncase/pistol/disposable/PopulateContents() new /obj/item/gun/ballistic/automatic/pistol/disposable(src) new /obj/item/gun/ballistic/automatic/pistol/disposable(src) -/obj/item/storage/pistolcase/laser -/obj/item/storage/pistolcase/laser/PopulateContents() - new /obj/item/gun/energy/laser/empty_cell(src) - new /obj/item/stock_parts/cell/gun(src) - -/obj/item/storage/pistolcase/egun -/obj/item/storage/pistolcase/egun/PopulateContents() - new /obj/item/gun/energy/e_gun/empty_cell(src) - new /obj/item/stock_parts/cell/gun(src) - -/obj/item/storage/pistolcase/kalixpistol -/obj/item/storage/pistolcase/kalixpistol/PopulateContents() - new /obj/item/gun/energy/kalix/pistol/empty_cell(src) - new /obj/item/stock_parts/cell/gun/kalix(src) - -/obj/item/storage/guncase/kalixrifle -/obj/item/storage/guncase/kalixrifle/PopulateContents() - new /obj/item/gun/energy/kalix/empty_cell(src) - new /obj/item/stock_parts/cell/gun/kalix(src) - -/obj/item/storage/pistolcase/miniegun -/obj/item/storage/pistolcase/miniegun/PopulateContents() - new /obj/item/gun/energy/e_gun/mini/empty_cell(src) - new /obj/item/stock_parts/cell/gun/mini(src) - -/obj/item/storage/pistolcase/iongun -/obj/item/storage/pistolcase/iongun/PopulateContents() - new /obj/item/gun/energy/ionrifle/empty_cell(src) - new /obj/item/stock_parts/cell/gun(src) - -/obj/item/storage/pistolcase/cm23/PopulateContents() - . = ..() - new /obj/item/gun/ballistic/automatic/pistol/cm23/no_mag(src) - new /obj/item/ammo_box/magazine/cm23/empty(src) - new /obj/item/ammo_box/magazine/cm23/empty(src) +/obj/item/storage/guncase/pistol/kalixpistol + gun_type = /obj/item/gun/energy/kalix/pistol + mag_type = /obj/item/stock_parts/cell/gun/kalix + +/obj/item/storage/guncase/pistol/miniegun + gun_type = /obj/item/gun/energy/e_gun/mini + mag_type = /obj/item/stock_parts/cell/gun/mini + +/obj/item/storage/guncase/energy + mag_type = /obj/item/stock_parts/cell/gun + +/obj/item/storage/guncase/energy/laser + gun_type = /obj/item/gun/energy/laser + +/obj/item/storage/guncase/energy/egun + gun_type = /obj/item/gun/energy/e_gun + +/obj/item/storage/guncase/energy/kalixrifle + gun_type = /obj/item/gun/energy/kalix + mag_type = /obj/item/stock_parts/cell/gun/kalix + +/obj/item/storage/guncase/energy/iongun + gun_type = /obj/item/gun/energy/ionrifle diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index 5fc667c4db4a..cde1ad6a4de1 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -406,7 +406,10 @@ /obj/item/gun/ballistic/automatic/pistol/deagle/ctf desc = "This looks like it could really hurt in melee." force = 75 - mag_type = /obj/item/ammo_box/magazine/m50/ctf + default_ammo_type = /obj/item/ammo_box/magazine/m50/ctf + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/m50/ctf, + ) /obj/item/gun/ballistic/automatic/pistol/deagle/ctf/dropped() . = ..() @@ -432,7 +435,10 @@ . = ..() /obj/item/gun/ballistic/automatic/laser/ctf - mag_type = /obj/item/ammo_box/magazine/recharge/ctf + default_ammo_type = /obj/item/ammo_box/magazine/recharge/ctf + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/recharge/ctf, + ) desc = "This looks like it could really hurt in melee." force = 50 @@ -480,7 +486,10 @@ // RED TEAM GUNS /obj/item/gun/ballistic/automatic/laser/ctf/red - mag_type = /obj/item/ammo_box/magazine/recharge/ctf/red + default_ammo_type = /obj/item/ammo_box/magazine/recharge/ctf/red + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/recharge/ctf/red, + ) /obj/item/ammo_box/magazine/recharge/ctf/red ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/red @@ -495,7 +504,10 @@ // BLUE TEAM GUNS /obj/item/gun/ballistic/automatic/laser/ctf/blue - mag_type = /obj/item/ammo_box/magazine/recharge/ctf/blue + default_ammo_type = /obj/item/ammo_box/magazine/recharge/ctf/blue + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/recharge/ctf/blue, + ) /obj/item/ammo_box/magazine/recharge/ctf/blue ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/blue diff --git a/code/modules/cargo/packs/gun.dm b/code/modules/cargo/packs/gun.dm index acc0be4e62e8..9a35b8778e76 100644 --- a/code/modules/cargo/packs/gun.dm +++ b/code/modules/cargo/packs/gun.dm @@ -10,7 +10,7 @@ name = "Disposable Gun Crate" desc = "In some sectors, these disposable pistols are the only firearms that can be legally sold for less than 200cr. That price is still far too high." cost = 300 - contains = list(/obj/item/storage/pistolcase/disposable) + contains = list(/obj/item/storage/guncase/pistol/disposable) crate_name = "disposable gun crate" faction = FACTION_FRONTIER @@ -18,7 +18,7 @@ name = ".38 Derringer Crate" desc = "A cheap, concealable pistol manufactured by the reputable Hunter's Pride. At least it's better than a disposable pistol. Chambered in .38 rounds." cost = 350 - contains = list(/obj/item/storage/pistolcase/derringer) + contains = list(/obj/item/storage/guncase/pistol/derringer) crate_name = "derringer crate" faction = FACTION_SRM @@ -26,49 +26,49 @@ name = "Commander Pistol Crate" desc = "Contains a modified Candor 'Commander' pistol, produced by Nanotrasen and chambered in 9mm." cost = 750 - contains = list(/obj/item/storage/pistolcase/commander) + contains = list(/obj/item/storage/guncase/pistol/commander) faction = FACTION_NT /datum/supply_pack/gun/ringneck name = "Ringneck Pistol Crate" desc = "Contains a civilian variant of the Ringneck pistol, produced by Scarborough Arms and chambered in 10mm." cost = 1000 - contains = list(/obj/item/storage/pistolcase/ringneck) + contains = list(/obj/item/storage/guncase/pistol/ringneck) faction = FACTION_SYNDICATE /datum/supply_pack/gun/candors name = "Candor Pistol Crate" desc = "Contains a Candor pistol, the trusty sidearm of any spacer, produced by Hunter's Pride and chambered in .45 ACP." cost = 1000 - contains = list(/obj/item/storage/pistolcase/candor) + contains = list(/obj/item/storage/guncase/pistol/candor) faction = FACTION_SRM /datum/supply_pack/gun/pepperbox name = "HP Firebrand Pepperbox Revolver Crate" desc = "Contains a concealable pepperbox revolver manufactured by the Saint Roumain Militia, chambered in .357." cost = 1250 - contains = list(/obj/item/storage/pistolcase/firebrand) + contains = list(/obj/item/storage/guncase/pistol/firebrand) faction = FACTION_SRM /datum/supply_pack/gun/detrevolver name = "Hunter's Pride Detective Revolver Crate" desc = "Contains a concealable revolver favored by police departments around the sector, chambered in .38." cost = 600 - contains = list(/obj/item/storage/pistolcase/detective) + contains = list(/obj/item/storage/guncase/pistol/detective) faction = FACTION_SRM /datum/supply_pack/gun/shadowrevolver name = "Shadow Revolver Crate" desc = "Contains a concealable Shadow revolver, chambered in .44 Roumain." cost = 1000 - contains = list(/obj/item/storage/pistolcase/shadow) + contains = list(/obj/item/storage/guncase/pistol/shadow) faction = FACTION_SRM /datum/supply_pack/gun/viperrevolver name = "Viper-23 Revolver Crate" desc = "Contains a a civilian variant of the Viper revolver, chambered in .357 magnum." cost = 2500 - contains = list(/obj/item/storage/pistolcase/viper) + contains = list(/obj/item/storage/guncase/pistol/viper) /* Energy @@ -78,21 +78,21 @@ name = "Laser Gun Crate" desc = "Contains a lethal, high-energy laser gun." cost = 1000 - contains = list(/obj/item/storage/pistolcase/laser) + contains = list(/obj/item/storage/guncase/energy/laser) crate_name = "laser crate" /datum/supply_pack/gun/mini_energy name = "Mini Energy Gun Crate" desc = "Contains a small, versatile energy gun, capable of firing both nonlethal and lethal blasts, but with a limited power cell." cost = 500 - contains = list(/obj/item/storage/pistolcase/miniegun) + contains = list(/obj/item/storage/guncase/pistol/miniegun) crate_name = "laser crate" /datum/supply_pack/gun/energy name = "Energy Gun Crate" desc = "Contains a versatile energy gun, capable of firing both nonlethal and lethal blasts of light." cost = 1250 - contains = list(/obj/item/storage/pistolcase/egun) + contains = list(/obj/item/storage/guncase/energy/egun) crate_name = "energy gun crate" crate_type = /obj/structure/closet/crate/secure/plasma @@ -100,7 +100,7 @@ name = "Ion Rifle Crate" desc = "Contains a single Mk.I Ion Projector, a special anti-tank rifle designed to disable electronic threats at range." cost = 10000 - contains = list(/obj/item/storage/pistolcase/iongun) + contains = list(/obj/item/storage/guncase/energy/iongun) crate_name = "ion rifle crate" crate_type = /obj/structure/closet/crate/secure/plasma @@ -108,14 +108,14 @@ name = "Etherbor SG-8 Beam Pistol Crate" desc = "Contains a single SG-8 Beam Pistol, a civilian-grade sidearm developed in the PGF, manufactured by Etherbor Industries." cost = 1000 - contains = list(/obj/item/storage/pistolcase/kalixpistol) + contains = list(/obj/item/storage/guncase/pistol/kalixpistol) crate_name = "beam pistol crate" /datum/supply_pack/gun/laser/kalix name = "Etherbor BG-12 Beam Rifle Crate" desc = "Contains a single BG-12 Beam Rifle, a civilian-grade semi-automatic developed in the PGF, manufactured by Etherbor Industries." cost = 3000 - contains = list(/obj/item/storage/guncase/kalixrifle) + contains = list(/obj/item/storage/guncase/energy/kalixrifle) crate_name = "beam rifle crate" /* diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 5ead7fcb9296..d6f8866bb1ec 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -833,7 +833,7 @@ slot_flags = ITEM_SLOT_BELT fire_delay = 0.1 SECONDS recoil = 1 - cell_type = /obj/item/stock_parts/cell/gun + default_ammo_type = /obj/item/stock_parts/cell/gun ammo_type = list(/obj/item/ammo_casing/energy/spur) supports_variations = VOX_VARIATION var/chargesound diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index 53825863281e..7b8bb392f1f9 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -224,7 +224,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca TrueGun = G if(istype(G, /obj/item/gun/ballistic)) Pewgun = G - var/obj/item/ammo_box/magazine/M = Pewgun.mag_type + var/obj/item/ammo_box/magazine/M = Pewgun.default_ammo_type casingtype = initial(M.ammo_type) if(istype(G, /obj/item/gun/energy)) Zapgun = G diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 74f6d8f3fe6f..0e29e53da52e 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -29,13 +29,15 @@ /obj/item/stock_parts/cell/get_cell() return src -/obj/item/stock_parts/cell/Initialize(mapload, override_maxcharge) +/obj/item/stock_parts/cell/Initialize(mapload, spawn_empty, override_maxcharge) . = ..() START_PROCESSING(SSobj, src) create_reagents(5, INJECTABLE | DRAINABLE) if (override_maxcharge) maxcharge = override_maxcharge charge = maxcharge + if(spawn_empty) + charge = 0 if(ratingdesc) desc += " This one has a rating of [DisplayEnergy(maxcharge)], and you should not swallow it." update_appearance() @@ -398,6 +400,8 @@ chargerate = 1500 rating = 0 //Makes it incompatible with RPED +/obj/item/stock_parts/cell/gun/empty + /obj/item/stock_parts/cell/gun/empty/Initialize() . = ..() charge = 0 diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 73a626721f4b..6f7900e2d6cb 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -36,8 +36,10 @@ ///cost of the materials in the magazine/box itself var/list/base_cost -/obj/item/ammo_box/Initialize() +/obj/item/ammo_box/Initialize(mapload, spawn_empty) . = ..() + if(spawn_empty) + start_empty = TRUE if(!base_icon_state) base_icon_state = icon_state diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index ae6131981fd9..ea8d5fcbfff2 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -56,7 +56,8 @@ //BALLISTIC ///Compatible magazines with the gun - var/mag_type = /obj/item/ammo_box/magazine/m10mm_ringneck //Removes the need for max_ammo and caliber info + var/default_ammo_type + var/allowed_ammo_types ///Whether the gun alarms when empty or not. var/empty_alarm = FALSE ///Do we eject the magazine upon runing out of ammo? @@ -99,7 +100,6 @@ //ENERGY //What type of power cell this uses var/obj/item/stock_parts/cell/gun/cell - var/cell_type = /obj/item/stock_parts/cell/gun //Can it be charged in a recharger? var/can_charge = TRUE var/selfcharge = FALSE @@ -107,8 +107,6 @@ var/charge_delay = 4 //whether the gun's cell drains the cyborg user's cell to recharge var/use_cyborg_cell = FALSE - ///Used for large and small cells - var/mag_size = MAG_SIZE_MEDIUM //Time it takes to unscrew the cell var/unscrewing_time = 2 SECONDS @@ -295,13 +293,9 @@ ///Attachments spawned on initialization. Should also be in valid attachments or it SHOULD(once i add that) fail var/list/default_attachments = list() -//BALLISTIC - ///Whether the gun will spawn loaded with a magazine - var/spawnwithmagazine = TRUE - //ENERGY //set to true so the gun is given an empty cell - var/dead_cell = FALSE + var/spawn_no_ammo = FALSE // Need to sort ///trigger guard on the weapon. Used for hulk mutations and ashies. I honestly dont know how usefult his is, id avoid touching it @@ -325,7 +319,7 @@ ///This prevents gun from firing until the coodown is done, affected by lag var/current_cooldown = 0 -/obj/item/gun/Initialize() +/obj/item/gun/Initialize(mapload, spawn_empty) . = ..() RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 877079684ed2..0fbf50157c8f 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -1,6 +1,11 @@ -#define EMPTY_GUN_HELPER(gun_type) \ +#define NO_MAG_GUN_HELPER(gun_type) \ /obj/item/gun/ballistic/##gun_type/no_mag { \ - spawnwithmagazine = FALSE; \ + default_ammo_type = FALSE; \ + } + +#define EMPTY_GUN_HELPER(gun_type) \ + /obj/item/gun/ballistic/##gun_type/empty { \ + spawn_no_ammo = TRUE; \ } ///Subtype for any kind of ballistic gun @@ -36,18 +41,26 @@ ) ) -/obj/item/gun/ballistic/Initialize() +/obj/item/gun/ballistic/Initialize(mapload, spawn_empty) . = ..() - if (!spawnwithmagazine && !ispath(mag_type, /obj/item/ammo_box/magazine/internal)) + if(spawn_empty) + if(internal_magazine) + spawn_no_ammo = TRUE + else + default_ammo_type = FALSE + + if (!default_ammo_type && !internal_magazine) bolt_locked = TRUE update_appearance() return - if (!magazine) - magazine = new mag_type(src) - if (!spawnwithmagazine) - get_ammo_list (drop_all = TRUE) - chamber_round() + if (ispath(default_ammo_type)) + magazine = new default_ammo_type(src) + if (spawn_no_ammo) + get_ammo_list(drop_all = TRUE) + else + chamber_round() update_appearance() + /obj/item/gun/ballistic/update_icon_state() if(current_skin) icon_state = "[unique_reskin[current_skin]][sawn_off ? "_sawn" : ""]" @@ -146,7 +159,7 @@ ///Handles all the logic needed for magazine insertion /obj/item/gun/ballistic/proc/insert_magazine(mob/user, obj/item/ammo_box/magazine/inserted_mag, display_message = TRUE) - if(!istype(inserted_mag, mag_type)) + if(!(inserted_mag.type in allowed_ammo_types)) to_chat(user, "\The [inserted_mag] doesn't seem to fit into \the [src]...") return FALSE if(user.transferItemToLoc(inserted_mag, src)) @@ -340,7 +353,8 @@ rounds.Add(chambered) if(drop_all) chambered = null - rounds.Add(magazine.ammo_list(drop_all)) + if(magazine) + rounds.Add(magazine.ammo_list(drop_all)) return rounds /obj/item/gun/ballistic/blow_up(mob/user) diff --git a/code/modules/projectiles/guns/ballistic/assault.dm b/code/modules/projectiles/guns/ballistic/assault.dm index 4570be971fda..091c1aba92ba 100644 --- a/code/modules/projectiles/guns/ballistic/assault.dm +++ b/code/modules/projectiles/guns/ballistic/assault.dm @@ -43,7 +43,10 @@ w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK manufacturer = MANUFACTURER_IMPORT - mag_type = /obj/item/ammo_box/magazine/skm_762_40 + default_ammo_type = /obj/item/ammo_box/magazine/skm_762_40 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/skm_762_40, + ) spread = 1 wield_delay = 0.7 SECONDS @@ -51,7 +54,7 @@ fire_delay = 0.2 SECONDS /obj/item/gun/ballistic/automatic/assault/skm/no_mag - spawnwithmagazine = FALSE + default_ammo_type = FALSE /obj/item/gun/ballistic/automatic/assault/skm/pirate name = "\improper Chopper" @@ -84,7 +87,10 @@ show_magazine_on_sprite = TRUE w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK - mag_type = /obj/item/ammo_box/magazine/p16 + default_ammo_type = /obj/item/ammo_box/magazine/p16 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/p16, + ) spread = 2 wield_delay = 0.5 SECONDS @@ -97,7 +103,7 @@ eject_empty_sound = 'sound/weapons/gun/rifle/m16_unload.ogg' /obj/item/gun/ballistic/automatic/assault/p16/no_mag - spawnwithmagazine = FALSE + default_ammo_type = FALSE /obj/item/gun/ballistic/automatic/assault/cm82 name = "\improper CM-16" @@ -133,7 +139,10 @@ w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK - mag_type = /obj/item/ammo_box/magazine/swiss + default_ammo_type = /obj/item/ammo_box/magazine/swiss + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/swiss, + ) manufacturer = MANUFACTURER_SOLARARMORIES spread = 8 spread_unwielded = 15 @@ -150,7 +159,10 @@ mob_overlay_icon = 'icons/obj/guns/manufacturer/eoehoma/onmob.dmi' icon_state = "e40" item_state = "e40" - mag_type = /obj/item/ammo_box/magazine/e40 + default_ammo_type = /obj/item/ammo_box/magazine/e40 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/e40, + ) var/obj/item/gun/energy/laser/e40_laser_secondary/secondary fire_select_icon_state_prefix = "e40_" @@ -310,7 +322,10 @@ weapon_weight = WEAPON_MEDIUM w_class = WEIGHT_CLASS_BULKY internal_magazine = TRUE - mag_type = /obj/item/ammo_box/magazine/internal/vickland + default_ammo_type = /obj/item/ammo_box/magazine/internal/vickland + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/vickland, + ) fire_sound = 'sound/weapons/gun/rifle/vickland.ogg' manufacturer = MANUFACTURER_HUNTERSPRIDE diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index 6b1e30296d57..63c85287cdf8 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -29,7 +29,10 @@ icon_state = "surplus" item_state = "moistnugget" weapon_weight = WEAPON_HEAVY - mag_type = /obj/item/ammo_box/magazine/m10mm_ringneck/rifle + default_ammo_type = /obj/item/ammo_box/magazine/m10mm_ringneck/rifle + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/m10mm_ringneck/rifle, + ) fire_delay = 0.5 SECONDS burst_size = 1 w_class = WEIGHT_CLASS_HUGE @@ -43,7 +46,10 @@ desc = "Though sometimes mocked for the relatively weak firepower of their energy weapons, the logistic miracle of rechargeable ammunition has given Nanotrasen a decisive edge over many a foe." icon_state = "oldrifle" item_state = "arg" - mag_type = /obj/item/ammo_box/magazine/recharge + default_ammo_type = /obj/item/ammo_box/magazine/recharge + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/recharge, + ) fire_delay = 0.2 SECONDS burst_size = 0 fire_sound = 'sound/weapons/laser.ogg' @@ -54,7 +60,10 @@ desc = "A makeshift zip gun cobbled together from various scrap bits and chambered in 9mm. It's a miracle it even works." icon_state = "ZipPistol" item_state = "ZipPistol" - mag_type = /obj/item/ammo_box/magazine/zip_ammo_9mm + default_ammo_type = /obj/item/ammo_box/magazine/zip_ammo_9mm + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/zip_ammo_9mm, + ) actions_types = list() show_magazine_on_sprite = TRUE weapon_weight = WEAPON_LIGHT diff --git a/code/modules/projectiles/guns/ballistic/gauss.dm b/code/modules/projectiles/guns/ballistic/gauss.dm index 3fdc2e55dadd..13e5b8aec75d 100644 --- a/code/modules/projectiles/guns/ballistic/gauss.dm +++ b/code/modules/projectiles/guns/ballistic/gauss.dm @@ -8,7 +8,10 @@ icon_state = "gauss" item_state = "arg" slot_flags = 0 - mag_type = /obj/item/ammo_box/magazine/gauss + default_ammo_type = /obj/item/ammo_box/magazine/gauss + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/gauss, + ) fire_sound = 'sound/weapons/gun/gauss/magrifle.ogg' load_sound = 'sound/weapons/gun/gauss/rifle_reload.ogg' burst_size = 1 @@ -33,7 +36,10 @@ /obj/item/gun/ballistic/automatic/powered/gauss/modelh name = "Model H" desc = "A standard-issue pistol exported from the Solarian Confederation. It fires slow flesh-rending ferromagnetic slugs at a high energy cost, however they are ineffective on any armor." - mag_type = /obj/item/ammo_box/magazine/modelh + default_ammo_type = /obj/item/ammo_box/magazine/modelh + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/modelh, + ) icon = 'icons/obj/guns/manufacturer/solararmories/48x32.dmi' lefthand_file = 'icons/obj/guns/manufacturer/solararmories/lefthand.dmi' righthand_file = 'icons/obj/guns/manufacturer/solararmories/righthand.dmi' @@ -42,7 +48,10 @@ item_state = "model-h" fire_sound = 'sound/weapons/gun/gauss/modelh.ogg' load_sound = 'sound/weapons/gun/gauss/pistol_reload.ogg' - cell_type = /obj/item/stock_parts/cell/gun/solgov + default_cell_type = /obj/item/stock_parts/cell/gun/solgov + allowed_cell_types = list( + /obj/item/stock_parts/cell/gun/solgov, + ) slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_SMALL fire_delay = 0.6 SECONDS //pistol, but heavy caliber. @@ -56,18 +65,24 @@ fire_select_icon_state_prefix = "slug_" /obj/item/gun/ballistic/automatic/powered/gauss/modelh/no_mag - spawnwithmagazine = FALSE + default_ammo_type = FALSE /obj/item/gun/ballistic/automatic/powered/gauss/modelh/suns desc = "A standard-issue pistol exported from the Solarian Confederation. It fires slow flesh-rending ferromagnetic slugs at a high energy cost, however they are ineffective on any armor. It is painted in the colors of SUNS." - mag_type = /obj/item/ammo_box/magazine/modelh + default_ammo_type = /obj/item/ammo_box/magazine/modelh + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/modelh, + ) icon_state = "model-h_suns" item_state = "model-h_suns" /obj/item/gun/ballistic/automatic/powered/gauss/claris name = "Claris" desc = "An antiquated Solarian rifle. Chambered in ferromagnetic pellets, just as the founding Solarians intended." - mag_type = /obj/item/ammo_box/magazine/internal/claris + default_ammo_type = /obj/item/ammo_box/magazine/internal/claris + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/claris, + ) icon = 'icons/obj/guns/manufacturer/solararmories/48x32.dmi' lefthand_file = 'icons/obj/guns/manufacturer/solararmories/lefthand.dmi' righthand_file = 'icons/obj/guns/manufacturer/solararmories/righthand.dmi' @@ -76,7 +91,10 @@ item_state = "claris" fire_sound = 'sound/weapons/gun/gauss/claris.ogg' load_sound = 'sound/weapons/gun/gauss/sniper_reload.ogg' - cell_type = /obj/item/stock_parts/cell/gun/solgov + default_cell_type = /obj/item/stock_parts/cell/gun/solgov + allowed_cell_types = list( + /obj/item/stock_parts/cell/gun/solgov, + ) fire_delay = 0.4 SECONDS bolt_type = BOLT_TYPE_NO_BOLT internal_magazine = TRUE @@ -93,7 +111,10 @@ /obj/item/gun/ballistic/automatic/powered/gauss/gar name = "Solar 'GAR' Carbine" desc = "A Solarian carbine, unusually modern for its producers. Launches ferromagnetic lances at alarming speeds." - mag_type = /obj/item/ammo_box/magazine/gar + default_ammo_type = /obj/item/ammo_box/magazine/gar + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/gar, + ) icon = 'icons/obj/guns/manufacturer/solararmories/48x32.dmi' lefthand_file = 'icons/obj/guns/manufacturer/solararmories/lefthand.dmi' righthand_file = 'icons/obj/guns/manufacturer/solararmories/righthand.dmi' @@ -102,7 +123,10 @@ item_state = "gar" fire_sound = 'sound/weapons/gun/gauss/gar.ogg' load_sound = 'sound/weapons/gun/gauss/rifle_reload.ogg' - cell_type = /obj/item/stock_parts/cell/gun/solgov + default_cell_type = /obj/item/stock_parts/cell/gun/solgov + allowed_cell_types = list( + /obj/item/stock_parts/cell/gun/solgov, + ) burst_size = 1 fire_delay = 0.2 SECONDS diff --git a/code/modules/projectiles/guns/ballistic/hmg.dm b/code/modules/projectiles/guns/ballistic/hmg.dm index 780b24dc80fb..0a1265034f85 100644 --- a/code/modules/projectiles/guns/ballistic/hmg.dm +++ b/code/modules/projectiles/guns/ballistic/hmg.dm @@ -139,7 +139,10 @@ icon_state = "solar" fire_sound = 'sound/weapons/gun/l6/shot.ogg' - mag_type = /obj/item/ammo_box/magazine/rifle47x33mm + default_ammo_type = /obj/item/ammo_box/magazine/rifle47x33mm + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/rifle47x33mm, + ) spread = 7 fire_delay = 0.1 SECONDS @@ -178,7 +181,12 @@ w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK manufacturer = MANUFACTURER_IMPORT - mag_type = /obj/item/ammo_box/magazine/skm_762_40 + default_ammo_type = /obj/item/ammo_box/magazine/skm_762_40 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/skm_762_40, + /obj/item/ammo_box/magazine/skm_762_40/extended, + /obj/item/ammo_box/magazine/skm_762_40/drum + ) fire_delay = 0.13 SECONDS @@ -198,17 +206,7 @@ AddElement(/datum/element/update_icon_updates_onmob) /obj/item/gun/ballistic/automatic/hmg/skm_lmg/extended //spawns with the proper extended magazine, for erts - spawnwithmagazine = FALSE - -/obj/item/gun/ballistic/automatic/hmg/skm_lmg/extended/Initialize() - . = ..() - magazine = new /obj/item/ammo_box/magazine/skm_762_40/extended(src) - chamber_round() + default_ammo_type = /obj/item/ammo_box/magazine/skm_762_40/extended /obj/item/gun/ballistic/automatic/hmg/skm_lmg/drum_mag //spawns with a drum, maybe not for erts but admin enhanced ERTS? when things really go to shit - spawnwithmagazine = FALSE - -/obj/item/gun/ballistic/automatic/hmg/skm_lmg/drum_mag/Initialize() - . = ..() - magazine = new /obj/item/ammo_box/magazine/skm_762_40/drum(src) - chamber_round() + default_ammo_type = /obj/item/ammo_box/magazine/skm_762_40/drum diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index 2044fae60ee2..2baee53a158a 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -4,7 +4,10 @@ /obj/item/gun/ballistic/revolver/grenadelauncher//this is only used for underbarrel grenade launchers at the moment, but admins can still spawn it if they feel like being assholes desc = "A break-action, single-shot grenade launcher. A compact way to deliver a big boom." name = "grenade launcher" - mag_type = /obj/item/ammo_box/magazine/internal/grenadelauncher + default_ammo_type = /obj/item/ammo_box/magazine/internal/grenadelauncher + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/grenadelauncher, + ) fire_sound = 'sound/weapons/gun/general/grenade_launch.ogg' w_class = WEIGHT_CLASS_NORMAL bolt_type = BOLT_TYPE_NO_BOLT @@ -24,7 +27,10 @@ name = "multi grenade launcher" icon = 'icons/mecha/mecha_equipment.dmi' icon_state = "mecha_grenadelnchr" - mag_type = /obj/item/ammo_box/magazine/internal/cylinder/grenademulti + default_ammo_type = /obj/item/ammo_box/magazine/internal/cylinder/grenademulti + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/cylinder/grenademulti, + ) /obj/item/gun/ballistic/revolver/grenadelauncher/cyborg/attack_self() return @@ -34,7 +40,10 @@ desc = "A prototype pistol designed to fire self-propelled rockets." icon_state = "gyropistol" fire_sound = 'sound/weapons/gun/general/grenade_launch.ogg' - mag_type = /obj/item/ammo_box/magazine/m75 + default_ammo_type = /obj/item/ammo_box/magazine/m75 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/m75, + ) burst_size = 1 fire_delay = 0.4 SECONDS actions_types = list() @@ -59,7 +68,10 @@ GLOBAL_LIST_INIT(rpg_scrawlings, list( icon_state = "rocketlauncher" item_state = "rocketlauncher" - mag_type = /obj/item/ammo_box/magazine/internal/rocketlauncher + default_ammo_type = /obj/item/ammo_box/magazine/internal/rocketlauncher + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/rocketlauncher, + ) fire_sound = 'sound/weapons/gun/general/rocket_launch.ogg' load_sound = 'sound/weapons/gun/general/rocket_load.ogg' gun_firemodes = list(FIREMODE_SEMIAUTO) diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index cdae6b83df4c..54ee4455973d 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -29,7 +29,10 @@ righthand_file = 'icons/obj/guns/manufacturer/hunterspride/righthand.dmi' mob_overlay_icon = 'icons/obj/guns/manufacturer/hunterspride/onmob.dmi' - mag_type = /obj/item/ammo_box/magazine/m45 + default_ammo_type = /obj/item/ammo_box/magazine/m45 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/m45, + ) fire_sound = 'sound/weapons/gun/pistol/candor.ogg' rack_sound = 'sound/weapons/gun/pistol/candor_cocked.ogg' lock_back_sound = 'sound/weapons/gun/pistol/slide_lock.ogg' @@ -41,13 +44,13 @@ eject_empty_sound = 'sound/weapons/gun/pistol/candor_unload.ogg' show_magazine_on_sprite = TRUE -EMPTY_GUN_HELPER(automatic/pistol/candor) +NO_MAG_GUN_HELPER(automatic/pistol/candor) /obj/item/gun/ballistic/automatic/pistol/candor/factory //also give this to the srm, their candors should probably look factory fresh from how well taken care of they are desc = "A classic semi-automatic handgun, widely popular throughout the Frontier. An engraving on the slide marks it as a product of 'Hunter's Pride Arms and Ammunition'. This example has been kept in especially good shape, and may as well be fresh out of the workshop. Chambered in .45." item_state = "hp_generic_fresh" -EMPTY_GUN_HELPER(automatic/pistol/candor/factory) +NO_MAG_GUN_HELPER(automatic/pistol/candor/factory) /obj/item/gun/ballistic/automatic/pistol/candor/factory/update_overlays() . = ..() @@ -68,7 +71,10 @@ EMPTY_GUN_HELPER(automatic/pistol/candor/factory) mob_overlay_icon = 'icons/obj/guns/manufacturer/frontier_import/onmob.dmi' icon_state = "deagle" force = 14 - mag_type = /obj/item/ammo_box/magazine/m50 + default_ammo_type = /obj/item/ammo_box/magazine/m50 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/m50, + ) mag_display = TRUE show_magazine_on_sprite = TRUE fire_sound = 'sound/weapons/gun/pistol/deagle.ogg' @@ -108,7 +114,10 @@ EMPTY_GUN_HELPER(automatic/pistol/candor/factory) mob_overlay_icon = 'icons/obj/guns/manufacturer/nanotrasen_sharplite/onmob.dmi' w_class = WEIGHT_CLASS_NORMAL - mag_type = /obj/item/ammo_box/magazine/co9mm + default_ammo_type = /obj/item/ammo_box/magazine/co9mm + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/co9mm, + ) var/funnysounds = TRUE var/cooldown = 0 load_sound = 'sound/weapons/gun/pistol/mag_insert.ogg' @@ -171,7 +180,10 @@ EMPTY_GUN_HELPER(automatic/pistol/candor/factory) mob_overlay_icon = 'icons/obj/guns/manufacturer/solararmories/onmob.dmi' weapon_weight = WEAPON_LIGHT - mag_type = /obj/item/ammo_box/magazine/pistol556mm + default_ammo_type = /obj/item/ammo_box/magazine/pistol556mm + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/pistol556mm, + ) fire_sound = 'sound/weapons/gun/pistol/pistolec.ogg' manufacturer = MANUFACTURER_SOLARARMORIES load_sound = 'sound/weapons/gun/pistol/mag_insert.ogg' @@ -195,7 +207,10 @@ EMPTY_GUN_HELPER(automatic/pistol/candor/factory) icon_state = "disposable" //credit to discord user 20nypercent for the sprite w_class = WEIGHT_CLASS_NORMAL - mag_type = /obj/item/ammo_box/magazine/disposable + default_ammo_type = /obj/item/ammo_box/magazine/disposable + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/disposable, + ) custom_materials = list(/datum/material/plastic=2000) manufacturer = MANUFACTURER_NONE has_safety = FALSE //thing barely costs anything, why would it have a safety? @@ -220,7 +235,10 @@ EMPTY_GUN_HELPER(automatic/pistol/candor/factory) righthand_file = 'icons/obj/guns/manufacturer/hunterspride/righthand.dmi' mob_overlay_icon = 'icons/obj/guns/manufacturer/hunterspride/onmob.dmi' - mag_type = /obj/item/ammo_box/magazine/internal/derr38 + default_ammo_type = /obj/item/ammo_box/magazine/internal/derr38 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/derr38, + ) fire_sound = 'sound/weapons/gun/revolver/shot.ogg' load_sound = 'sound/weapons/gun/revolver/load_bullet.ogg' eject_sound = 'sound/weapons/gun/revolver/empty.ogg' @@ -255,15 +273,21 @@ EMPTY_GUN_HELPER(automatic/pistol/candor/factory) mob_overlay_icon = 'icons/obj/guns/manufacturer/scarborough/onmob.dmi' icon_state = "derringer_syndie" - mag_type = /obj/item/ammo_box/magazine/internal/derr357 + default_ammo_type = /obj/item/ammo_box/magazine/internal/derr357 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/derr357, + ) fire_sound_volume = 50 //Tactical stealth firing /obj/item/gun/ballistic/derringer/gold name = "\improper Golden Derringer" desc = "The golden sheen is somewhat counter-intuitive on a holdout weapon, but it looks cool. Uses .357 ammo." icon_state = "derringer_gold" - mag_type = /obj/item/ammo_box/magazine/internal/derr357 + default_ammo_type = /obj/item/ammo_box/magazine/internal/derr357 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/derr357, + ) + +EMPTY_GUN_HELPER(ballistic/derringer) -/obj/item/gun/ballistic/derringer/no_mag - spawnwithmagazine = FALSE diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 648ad96640f2..2c7b664ff3b5 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -10,7 +10,10 @@ name = "i demand" desc = "You feel as if you should make a 'adminhelp' if you see one of these, along with a 'github' report. You don't really understand what this means though." icon_state = "revolver" - mag_type = /obj/item/ammo_box/magazine/internal/cylinder + default_ammo_type = /obj/item/ammo_box/magazine/internal/cylinder + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/cylinder, + ) fire_sound = 'sound/weapons/gun/revolver/shot.ogg' rack_sound = 'sound/weapons/gun/revolver/revolver_prime.ogg' load_sound = 'sound/weapons/gun/revolver/load_bullet.ogg' @@ -465,7 +468,10 @@ righthand_file = 'icons/obj/guns/manufacturer/hunterspride/righthand.dmi' mob_overlay_icon = 'icons/obj/guns/manufacturer/hunterspride/onmob.dmi' - mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev38 + default_ammo_type = /obj/item/ammo_box/magazine/internal/cylinder/rev38 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/cylinder/rev38, + ) obj_flags = UNIQUE_RENAME semi_auto = TRUE //double action safety_wording = "safety" @@ -532,14 +538,8 @@ EMPTY_GUN_HELPER(revolver/detective) to_chat(user, "You remove the modifications on [src]. Now it will fire .38 rounds.") return TRUE -/obj/item/gun/ballistic/revolver/detective/no_mag - spawnwithmagazine = FALSE - -/obj/item/gun/ballistic/revolver/viper/no_mag - spawnwithmagazine = FALSE - -/obj/item/gun/ballistic/revolver/no_mag - spawnwithmagazine = FALSE +EMPTY_GUN_HELPER(revolver) +EMPTY_GUN_HELPER(revolver/viper) /obj/item/gun/ballistic/revolver/mateba name = "\improper Unica 6 auto-revolver" @@ -576,14 +576,16 @@ EMPTY_GUN_HELPER(revolver/detective) spread_unwielded = 15 recoil = 0 - mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev44/montagne + default_ammo_type = /obj/item/ammo_box/magazine/internal/cylinder/rev44/montagne + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/cylinder/rev44/montagne, + ) /obj/item/gun/ballistic/revolver/montagne/ComponentInitialize() . = ..() AddComponent(/datum/component/ammo_hud/revolver) -/obj/item/gun/ballistic/revolver/montagne/no_mag - spawnwithmagazine = FALSE +EMPTY_GUN_HELPER(revolver/montagne) /obj/item/gun/ballistic/revolver/ashhand name = "HP Ashhand" @@ -595,7 +597,10 @@ EMPTY_GUN_HELPER(revolver/detective) icon_state = "ashhand" item_state = "ashhand" - mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev4570 + default_ammo_type = /obj/item/ammo_box/magazine/internal/cylinder/rev4570 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/cylinder/rev4570, + ) fire_sound = 'sound/weapons/gun/revolver/shot_hunting.ogg' rack_sound = 'sound/weapons/gun/revolver/viper_prime.ogg' manufacturer = MANUFACTURER_HUNTERSPRIDE @@ -621,7 +626,10 @@ EMPTY_GUN_HELPER(revolver/detective) righthand_file = 'icons/obj/guns/manufacturer/hunterspride/righthand.dmi' mob_overlay_icon = 'icons/obj/guns/manufacturer/hunterspride/onmob.dmi' - mag_type = /obj/item/ammo_box/magazine/internal/cylinder/pepperbox + default_ammo_type = /obj/item/ammo_box/magazine/internal/cylinder/pepperbox + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/cylinder/pepperbox, + ) spread = 20 manufacturer = MANUFACTURER_HUNTERSPRIDE spread_unwielded = 50 @@ -630,8 +638,7 @@ EMPTY_GUN_HELPER(revolver/detective) semi_auto = TRUE safety_wording = "safety" -/obj/item/gun/ballistic/revolver/firebrand/no_mag - spawnwithmagazine = FALSE +EMPTY_GUN_HELPER(revolver/firebrand) /obj/item/gun/ballistic/revolver/shadow name = "\improper HP Shadow" @@ -644,7 +651,10 @@ EMPTY_GUN_HELPER(revolver/detective) icon_state = "shadow" item_state = "shadow" - mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev44 + default_ammo_type = /obj/item/ammo_box/magazine/internal/cylinder/rev44 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/cylinder/rev44, + ) manufacturer = MANUFACTURER_HUNTERSPRIDE obj_flags = UNIQUE_RENAME gate_loaded = TRUE @@ -667,10 +677,9 @@ EMPTY_GUN_HELPER(revolver/detective) . = ..() AddComponent(/datum/component/ammo_hud/revolver) -/obj/item/gun/ballistic/revolver/shadow/no_mag - spawnwithmagazine = FALSE - /obj/item/gun/ballistic/revolver/shadow/reskin_obj(mob/M) . = ..() if(current_skin) item_state = unique_reskin[current_skin] + +EMPTY_GUN_HELPER(revolver/shadow) diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index a61413057606..9396db025d7e 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -5,7 +5,10 @@ mob_overlay_icon = 'icons/mob/clothing/back.dmi' icon_state = "hunting" item_state = "hunting" - mag_type = /obj/item/ammo_box/magazine/internal/boltaction + default_ammo_type = /obj/item/ammo_box/magazine/internal/boltaction + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/boltaction, + ) bolt_wording = "bolt" w_class = WEIGHT_CLASS_BULKY weapon_weight = WEAPON_HEAVY @@ -85,14 +88,17 @@ eject_empty_sound = 'sound/weapons/gun/rifle/vickland_unload.ogg' internal_magazine = FALSE - mag_type = /obj/item/ammo_box/magazine/illestren_a850r + default_ammo_type = /obj/item/ammo_box/magazine/illestren_a850r + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/illestren_a850r, + ) empty_autoeject = TRUE eject_sound_vary = FALSE can_be_sawn_off = TRUE manufacturer = MANUFACTURER_HUNTERSPRIDE /obj/item/gun/ballistic/rifle/illestren/empty //i had to name it empty instead of no_mag because else it wouldnt work with guncases. sorry! - spawnwithmagazine = FALSE + default_ammo_type = FALSE /obj/item/gun/ballistic/rifle/illestren/sawoff(forced = FALSE) . = ..() @@ -127,7 +133,10 @@ /obj/item/gun/ballistic/rifle/solgov name = "SSG-669C" desc = "A bolt-action sniper rifle used by Solarian troops. Beloved for its rotary design and accuracy. Chambered in 8x58mm Caseless." - mag_type = /obj/item/ammo_box/magazine/internal/boltaction/solgov + default_ammo_type = /obj/item/ammo_box/magazine/internal/boltaction/solgov + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/boltaction/solgov, + ) icon_state = "ssg669c" item_state = "ssg669c" icon = 'icons/obj/guns/manufacturer/solararmories/48x32.dmi' @@ -160,7 +169,10 @@ icon_state = "scout" item_state = "scout" - mag_type = /obj/item/ammo_box/magazine/internal/boltaction/smile + default_ammo_type = /obj/item/ammo_box/magazine/internal/boltaction/smile + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/boltaction/smile, + ) fire_sound = 'sound/weapons/gun/rifle/scout.ogg' rack_sound = 'sound/weapons/gun/rifle/scout_bolt_out.ogg' @@ -174,9 +186,6 @@ manufacturer = MANUFACTURER_HUNTERSPRIDE -/obj/item/gun/ballistic/rifle/scout/no_mag - spawnwithmagazine = FALSE - /obj/item/gun/ballistic/rifle/polymer name = "polymer survivor rifle" desc = "A bolt-action rifle made of scrap, desperation, and luck. Likely to shatter at any moment. Chambered in 7.62x40mm." @@ -185,6 +194,9 @@ item_state = "crackhead_rifle" weapon_weight = WEAPON_HEAVY w_class = WEIGHT_CLASS_BULKY - mag_type = /obj/item/ammo_box/magazine/internal/boltaction/polymer + default_ammo_type = /obj/item/ammo_box/magazine/internal/boltaction/polymer + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/boltaction/polymer, + ) can_be_sawn_off = FALSE manufacturer = MANUFACTURER_NONE diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index ab85fb9a01c4..26c796555ebd 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -11,7 +11,10 @@ force = 10 flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_BACK - mag_type = /obj/item/ammo_box/magazine/internal/shot + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot, + ) semi_auto = FALSE internal_magazine = TRUE casing_ejector = FALSE @@ -66,7 +69,10 @@ gun_firemodes = list(FIREMODE_FULLAUTO) default_firemode = FIREMODE_FULLAUTO - mag_type = /obj/item/ammo_box/magazine/internal/shot/lethal + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/lethal + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/lethal, + ) manufacturer = MANUFACTURER_HUNTERSPRIDE fire_delay = 0.05 SECONDS //slamfire rack_delay = 0.2 SECONDS @@ -88,8 +94,8 @@ item_state = "illestren_factory_sawn" // i couldnt care about making another sprite, looks close enough mob_overlay_state = item_state -/obj/item/gun/ballistic/shotgun/brimstone/no_mag - spawnwithmagazine = FALSE +EMPTY_GUN_HELPER(shotgun/brimstone) + // HELLFIRE SHOTGUN // /obj/item/gun/ballistic/shotgun/hellfire @@ -102,7 +108,10 @@ icon_state = "hellfire" item_state = "hellfire" - mag_type = /obj/item/ammo_box/magazine/internal/shot/riot + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/riot + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/riot, + ) sawn_desc = "Come with me if you want to live." can_be_sawn_off = TRUE rack_sound = 'sound/weapons/gun/shotgun/rack_alt.ogg' @@ -125,8 +134,8 @@ item_state = "dshotgun_sawn" // ditto mob_overlay_state = item_state -/obj/item/gun/ballistic/shotgun/hellfire/no_mag - spawnwithmagazine = FALSE +EMPTY_GUN_HELPER(shotgun/hellfire) + // Automatic Shotguns// /obj/item/gun/ballistic/shotgun/automatic spread = 4 @@ -145,14 +154,20 @@ icon_state = "cshotgun" item_state = "shotgun_combat" fire_delay = 0.5 SECONDS - mag_type = /obj/item/ammo_box/magazine/internal/shot/com + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/com + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/com, + ) w_class = WEIGHT_CLASS_BULKY /obj/item/gun/ballistic/shotgun/automatic/combat/compact name = "compact combat shotgun" desc = "A compact version of the semi-automatic combat shotgun. For close encounters." icon_state = "cshotgunc" - mag_type = /obj/item/ammo_box/magazine/internal/shot/com/compact + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/com/compact + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/com/compact, + ) w_class = WEIGHT_CLASS_NORMAL weapon_weight = WEAPON_MEDIUM @@ -169,7 +184,10 @@ icon_state = "cycler" - mag_type = /obj/item/ammo_box/magazine/internal/shot/tube + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/tube + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/tube, + ) w_class = WEIGHT_CLASS_HUGE var/toggled = FALSE var/obj/item/ammo_box/magazine/internal/shot/alternate_magazine @@ -182,7 +200,7 @@ /obj/item/gun/ballistic/shotgun/automatic/dual_tube/Initialize() . = ..() if (!alternate_magazine) - alternate_magazine = new mag_type(src) + alternate_magazine = new default_ammo_type(src) /obj/item/gun/ballistic/shotgun/automatic/dual_tube/attack_self(mob/living/user) if(!chambered && magazine.contents.len) @@ -211,10 +229,13 @@ desc = "A variation of the Bulldog, seized from Syndicate armories by deserting troopers then modified to IRMG's standards." icon_state = "bulldog_inteq" item_state = "bulldog_inteq" - mag_type = /obj/item/ammo_box/magazine/m12g_bulldog + default_ammo_type = /obj/item/ammo_box/magazine/m12g_bulldog + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/m12g_bulldog, + ) manufacturer = MANUFACTURER_INTEQ -EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) +NO_MAG_GUN_HELPER(shotgun/automatic/bulldog/inteq) ///////////////////////////// @@ -244,7 +265,10 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) force = 10 flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_BACK - mag_type = /obj/item/ammo_box/magazine/internal/shot/dual + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/dual + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/dual, + ) obj_flags = UNIQUE_RENAME unique_reskin = list("Default" = "dshotgun", @@ -330,8 +354,7 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) item_state = "dshotgun_sawn" mob_overlay_state = item_state -/obj/item/gun/ballistic/shotgun/doublebarrel/no_mag - spawnwithmagazine = FALSE +EMPTY_GUN_HELPER(shotgun/doublebarrel) // sawn off beforehand /obj/item/gun/ballistic/shotgun/doublebarrel/presawn @@ -350,7 +373,10 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) recoil = 3 //or not recoil_unwielded = 5 item_state = "dshotgun_sawn" - mag_type = /obj/item/ammo_box/magazine/internal/shot/dual/lethal + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/dual/lethal + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/dual/lethal, + ) /obj/item/gun/ballistic/shotgun/doublebarrel/roumain name = "HP antique double-barreled shotgun" @@ -382,7 +408,10 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) w_class = WEIGHT_CLASS_BULKY force = 10 slot_flags = null - mag_type = /obj/item/ammo_box/magazine/internal/shot/improvised + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/improvised + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/improvised, + ) sawn_desc = "I'm just here for the gasoline." unique_reskin = null var/slung = FALSE @@ -430,7 +459,10 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) name = "compact compact combat shotgun" desc = "A compact version of the compact version of the semi automatic combat shotgun. For when you want a gun the same size as your brain." icon_state = "cshotguncc" - mag_type = /obj/item/ammo_box/magazine/internal/shot/com/compact/compact + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/com/compact/compact + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/com/compact/compact, + ) w_class = WEIGHT_CLASS_SMALL sawn_desc = "You know, this isn't funny anymore." can_be_sawn_off = TRUE @@ -453,7 +485,10 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) name = "compact compact compact combat shotgun" desc = "A compact version of the compact version of the compact version of the semi automatic combat shotgun. It's a miracle it works..." icon_state = "cshotgunccc" - mag_type = /obj/item/ammo_box/magazine/internal/shot/com/compact/compact/compact + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/com/compact/compact/compact + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/com/compact/compact/compact, + ) w_class = WEIGHT_CLASS_TINY sawn_desc = "Sigh. This is a trigger attached to a bullet." can_be_sawn_off = TRUE @@ -486,7 +521,10 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) w_class = WEIGHT_CLASS_BULKY force = 15 //blunt edge and really heavy attack_verb = list("bludgeoned", "smashed") - mag_type = /obj/item/ammo_box/magazine/internal/shot/sex + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/sex + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/sex, + ) burst_size = 6 burst_delay = 0.04 SECONDS //?? very weird number pb_knockback = 12 @@ -529,7 +567,10 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) recoil_unwielded = 200 recoil_backtime_multiplier = 1 fire_sound_volume = 100 - mag_type = /obj/item/ammo_box/magazine/internal/shot/hundred + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/hundred + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/hundred, + ) //Lever-Action Rifles /obj/item/gun/ballistic/shotgun/flamingarrow @@ -545,7 +586,10 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) mob_overlay_icon = 'icons/obj/guns/manufacturer/hunterspride/onmob.dmi' inhand_x_dimension = 32 inhand_y_dimension = 32 - mag_type = /obj/item/ammo_box/magazine/internal/shot/winchester + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/winchester + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/winchester, + ) fire_sound = 'sound/weapons/gun/rifle/flamingarrow.ogg' rack_sound = 'sound/weapons/gun/rifle/skm_cocked.ogg' bolt_wording = "lever" @@ -561,8 +605,7 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) recoil = 0 recoil_unwielded = 2 -/obj/item/gun/ballistic/shotgun/flamingarrow/no_mag - spawnwithmagazine = FALSE +EMPTY_GUN_HELPER(shotgun/flamingarrow) /obj/item/gun/ballistic/shotgun/flamingarrow/update_icon_state() . = ..() @@ -642,7 +685,10 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) fire_sound = 'sound/weapons/gun/revolver/shot.ogg' desc = "A large lever-action rifle with hand-stamped Hunter's Pride marks on the receiver and an 8 round ammunition capacity. More powerful than the Flaming Arrow, the Absolution is a popular pick for hunting larger fauna like bears and goliaths, especially when a bolt action's slower rate of fire would be a liability. Chambered in .357." sawn_desc = "A large lever-action rifle, sawn down for portability. It looks much cooler, but you should probably be using a revolver..." - mag_type = /obj/item/ammo_box/magazine/internal/shot/winchester/absolution + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/winchester/absolution + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/winchester/absolution, + ) /obj/item/gun/ballistic/shotgun/flamingarrow/absolution/sawoff(forced = FALSE) . = ..() @@ -663,9 +709,6 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) recoil = 0 recoil_unwielded = 3 -/obj/item/gun/ballistic/shotgun/flamingarrow/absolution/no_mag - spawnwithmagazine = FALSE - /obj/item/gun/ballistic/shotgun/flamingarrow/conflagration name = "HP Conflagration" base_icon_state = "conflagration" @@ -674,7 +717,10 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) fire_sound = 'sound/weapons/gun/shotgun/shot.ogg' desc = "A lightweight lever-action shotgun with a 5 round ammunition capacity. The lever action allows it to be cycled quickly and acurrately. In theory, you could ever operate it one-handed. Chambered in 12g." sawn_desc = "A lever action shotgun that's been sawed down for portability. The recoil makes it mostly useless outside of point-blank range, but it hits hard for its size and, more importantly, can be flipped around stylishly." - mag_type = /obj/item/ammo_box/magazine/internal/shot/winchester/conflagration + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/winchester/conflagration + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/winchester/conflagration, + ) /obj/item/gun/ballistic/shotgun/flamingarrow/conflagration/sawoff(forced = FALSE) . = ..() @@ -695,8 +741,7 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) recoil = 0 recoil_unwielded = 3 -/obj/item/gun/ballistic/shotgun/flamingarrow/conflagration/no_mag - spawnwithmagazine = FALSE +EMPTY_GUN_HELPER(shotgun/flamingarrow/conflagration) //Elephant Gun /obj/item/gun/ballistic/shotgun/doublebarrel/twobore @@ -713,7 +758,10 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) item_state = "huntsman" unique_reskin = null attack_verb = list("bludgeoned", "smashed") - mag_type = /obj/item/ammo_box/magazine/internal/shot/twobore + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/twobore + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/twobore, + ) w_class = WEIGHT_CLASS_BULKY force = 20 //heavy ass elephant gun, why wouldnt it be recoil = 4 @@ -741,7 +789,10 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) unique_reskin = null inhand_x_dimension = 32 inhand_y_dimension = 32 - mag_type = /obj/item/ammo_box/magazine/internal/shot/beacon + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/beacon + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/beacon, + ) fire_sound = 'sound/weapons/gun/revolver/shot_hunting.ogg' w_class = WEIGHT_CLASS_BULKY weapon_weight = WEAPON_MEDIUM @@ -772,8 +823,7 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) recoil = 2 recoil_unwielded = 4 -/obj/item/gun/ballistic/shotgun/doublebarrel/beacon/no_mag - spawnwithmagazine = FALSE +EMPTY_GUN_HELPER(shotgun/doublebarrel/beacon) /obj/item/gun/ballistic/shotgun/doublebarrel/beacon/factory desc = "A single-shot break-action rifle made by Hunter's Pride and sold to civilian hunters. This example has been kept in excellent shape and may as well be fresh out of the workshop. Uses .45-70 ammo." diff --git a/code/modules/projectiles/guns/ballistic/smg.dm b/code/modules/projectiles/guns/ballistic/smg.dm index 6f52daaf2292..ac7852c93889 100644 --- a/code/modules/projectiles/guns/ballistic/smg.dm +++ b/code/modules/projectiles/guns/ballistic/smg.dm @@ -33,7 +33,10 @@ mob_overlay_icon = 'icons/obj/guns/manufacturer/nanotrasen_sharplite/onmob.dmi' icon_state = "wt550" item_state = "arg" - mag_type = /obj/item/ammo_box/magazine/wt550m9 + default_ammo_type = /obj/item/ammo_box/magazine/wt550m9 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/wt550m9, + ) actions_types = list() show_magazine_on_sprite = TRUE show_magazine_on_sprite_ammo = TRUE @@ -42,7 +45,7 @@ fire_sound = 'sound/weapons/gun/smg/smg_heavy.ogg' /obj/item/gun/ballistic/automatic/smg/wt550/no_mag - spawnwithmagazine = FALSE + default_ammo_type = FALSE /obj/item/gun/ballistic/automatic/smg/vector name = "\improper Vector carbine" @@ -53,7 +56,10 @@ mob_overlay_icon = 'icons/obj/guns/manufacturer/nanotrasen_sharplite/onmob.dmi' icon_state = "vector" item_state = "vector" - mag_type = /obj/item/ammo_box/magazine/smgm9mm //you guys remember when the autorifle was chambered in 9mm + default_ammo_type = /obj/item/ammo_box/magazine/smgm9mm + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/smgm9mm, + ) //you guys remember when the autorifle was chambered in 9mm bolt_type = BOLT_TYPE_LOCKING show_magazine_on_sprite = TRUE weapon_weight = WEAPON_LIGHT @@ -70,7 +76,11 @@ icon_state = "firestorm" item_state = "firestorm" - mag_type = /obj/item/ammo_box/magazine/c45_firestorm_mag + default_ammo_type = /obj/item/ammo_box/magazine/c45_firestorm_mag + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/c45_firestorm_mag, + /obj/item/ammo_box/magazine/c45_firestorm_mag/pan + ) unique_mag_sprites_for_variants = TRUE burst_size = 1 actions_types = list() @@ -84,12 +94,7 @@ wield_slowdown = 0.4 /obj/item/gun/ballistic/automatic/smg/firestorm/pan //spawns with pan magazine, can take sticks instead of just drums, not sure where this would be used, maybe erts? - spawnwithmagazine = FALSE - -/obj/item/gun/ballistic/automatic/smg/firestorm/pan/Initialize() - . = ..() - magazine = new /obj/item/ammo_box/magazine/c45_firestorm_mag/pan(src) - chamber_round() + default_ammo_type = /obj/item/ammo_box/magazine/c45_firestorm_mag/pan /obj/item/gun/ballistic/automatic/smg/skm_carbine name = "\improper SKM-24v" @@ -110,7 +115,10 @@ weapon_weight = WEAPON_MEDIUM w_class = WEIGHT_CLASS_NORMAL - mag_type = /obj/item/ammo_box/magazine/skm_545_39 + default_ammo_type = /obj/item/ammo_box/magazine/skm_545_39 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/skm_545_39, + ) recoil = 2 recoil_unwielded = 6 @@ -161,7 +169,10 @@ icon_state = "skm_inteqsmg" item_state = "skm_inteqsmg" - mag_type = /obj/item/ammo_box/magazine/smgm10mm + default_ammo_type = /obj/item/ammo_box/magazine/smgm10mm + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/smgm10mm, + ) manufacturer = MANUFACTURER_INTEQ fire_sound = 'sound/weapons/gun/smg/vector_fire.ogg' @@ -195,7 +206,10 @@ default_attachments = list(/obj/item/attachment/foldable_stock) icon_state = "saber" item_state = "gun" - mag_type = /obj/item/ammo_box/magazine/smgm9mm + default_ammo_type = /obj/item/ammo_box/magazine/smgm9mm + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/smgm9mm, + ) bolt_type = BOLT_TYPE_LOCKING show_magazine_on_sprite = TRUE manufacturer = MANUFACTURER_NANOTRASEN_OLD diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index 43a9415671d6..52abb7dd32ee 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -9,7 +9,10 @@ icon_state = "toysmg" item_state = "toysmg" - mag_type = /obj/item/ammo_box/magazine/toy/smg + default_ammo_type = /obj/item/ammo_box/magazine/toy/smg + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/toy/smg, + ) fire_sound = 'sound/items/syringeproj.ogg' force = 0 throwforce = 0 @@ -29,7 +32,10 @@ item_state = "toypistol" bolt_type = BOLT_TYPE_LOCKING w_class = WEIGHT_CLASS_SMALL - mag_type = /obj/item/ammo_box/magazine/toy/pistol + default_ammo_type = /obj/item/ammo_box/magazine/toy/pistol + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/toy/pistol, + ) fire_sound = 'sound/items/syringeproj.ogg' burst_size = 1 fire_delay = 0.2 SECONDS @@ -38,7 +44,10 @@ recoil_unwielded = -10 /obj/item/gun/ballistic/automatic/toy/pistol/riot - mag_type = /obj/item/ammo_box/magazine/toy/pistol/riot + default_ammo_type = /obj/item/ammo_box/magazine/toy/pistol/riot + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/toy/pistol/riot, + ) /obj/item/gun/ballistic/automatic/toy/pistol/riot/Initialize() magazine = new /obj/item/ammo_box/magazine/toy/pistol/riot(src) @@ -58,7 +67,10 @@ force = 0 throwforce = 0 - mag_type = /obj/item/ammo_box/magazine/internal/shot/toy + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/toy + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/toy, + ) fire_sound = 'sound/items/syringeproj.ogg' item_flags = NONE casing_ejector = FALSE @@ -76,7 +88,10 @@ desc = "A weapon favored by many overactive children. Ages 8 and up." icon_state = "foamcrossbow" item_state = "crossbow" - mag_type = /obj/item/ammo_box/magazine/internal/shot/toy/crossbow + default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/toy/crossbow + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/shot/toy/crossbow, + ) fire_sound = 'sound/items/syringeproj.ogg' slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_SMALL diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index aaf37d4c9556..9c75aa56edcc 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -18,6 +18,14 @@ fire_select_icon_state_prefix = "laser_" + default_ammo_type = /obj/item/stock_parts/cell/gun + allowed_ammo_types = list( + /obj/item/stock_parts/cell/gun, + /obj/item/stock_parts/cell/gun/upgraded, + /obj/item/stock_parts/cell/gun/empty, + /obj/item/stock_parts/cell/gun/upgraded/empty, + ) + tac_reloads = FALSE tactical_reload_delay = 1.2 SECONDS @@ -49,13 +57,17 @@ /obj/item/gun/energy/get_cell() return cell -/obj/item/gun/energy/Initialize() +/obj/item/gun/energy/Initialize(mapload, spawn_empty) . = ..() - if(cell_type) - cell = new cell_type(src) - else - cell = new(src) - if(dead_cell) + if(spawn_empty) + if(internal_magazine) + spawn_no_ammo = TRUE + else + default_ammo_type = FALSE + + if(default_ammo_type) + cell = new default_ammo_type(src) + if(spawn_no_ammo) cell.use(cell.maxcharge) update_ammo_types() recharge_newshot(TRUE) @@ -103,7 +115,7 @@ //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/gun/energy/attack_hand(mob/user) - if(!internal_cell && loc == user && user.is_holding(src) && cell && tac_reloads) + if(!internal_magazine && loc == user && user.is_holding(src) && cell && tac_reloads) eject_cell(user) return return ..() @@ -114,7 +126,7 @@ update_appearance() /obj/item/gun/energy/attackby(obj/item/A, mob/user, params) - if (!internal_cell && istype(A, /obj/item/stock_parts/cell/gun)) + if (!internal_magazine && (A.type in allowed_ammo_types)) var/obj/item/stock_parts/cell/gun/C = A if (!cell) insert_cell(user, C) @@ -125,12 +137,6 @@ return ..() /obj/item/gun/energy/proc/insert_cell(mob/user, obj/item/stock_parts/cell/gun/C) - if(mag_size == MAG_SIZE_SMALL && !istype(C, /obj/item/stock_parts/cell/gun/mini)) - to_chat(user, span_warning("\The [C] doesn't seem to fit into \the [src]...")) - return FALSE - if(mag_size == MAG_SIZE_LARGE && !istype(C, /obj/item/stock_parts/cell/gun/large)) - to_chat(user, span_warning("\The [C] doesn't seem to fit into \the [src]...")) - return FALSE if(user.transferItemToLoc(C, src)) cell = C to_chat(user, span_notice("You load the [C] into \the [src].")) @@ -163,7 +169,7 @@ update_appearance() /obj/item/gun/energy/screwdriver_act(mob/living/user, obj/item/I) - if(cell && !internal_cell) + if(cell && !internal_magazine) to_chat(user, span_notice("You begin unscrewing and pulling out the cell...")) if(I.use_tool(src, user, unscrewing_time, volume = 100)) to_chat(user, span_notice("You remove the power cell.")) diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm index 90bfa9a8ead1..2844991f9cc7 100644 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/code/modules/projectiles/guns/energy/energy_gun.dm @@ -14,7 +14,7 @@ manufacturer = MANUFACTURER_SHARPLITE_NEW /obj/item/gun/energy/e_gun/empty_cell - dead_cell = TRUE + spawn_no_ammo = TRUE /obj/item/gun/energy/e_gun/mini name = "miniature energy gun" @@ -22,8 +22,10 @@ icon_state = "mini" item_state = "gun" w_class = WEIGHT_CLASS_SMALL - cell_type = /obj/item/stock_parts/cell/gun/mini - mag_size = MAG_SIZE_SMALL + default_ammo_type = /obj/item/stock_parts/cell/gun/mini + allowed_ammo_types = list( + /obj/item/stock_parts/cell/gun/mini, + ) throwforce = 11 //This is funny, trust me. ammo_x_offset = 2 charge_sections = 3 @@ -34,7 +36,7 @@ spread_unwielded = 5 /obj/item/gun/energy/e_gun/mini/empty_cell - dead_cell = TRUE + spawn_no_ammo = TRUE /obj/item/gun/energy/e_gun/hades name = "SL AL-655 'Hades' energy rifle" @@ -43,7 +45,7 @@ ammo_x_offset = 2 charge_sections = 5 ammo_type = list(/obj/item/ammo_casing/energy/laser/assault, /obj/item/ammo_casing/energy/disabler) - cell_type = /obj/item/stock_parts/cell/gun/upgraded + default_ammo_type = /obj/item/stock_parts/cell/gun/upgraded weapon_weight = WEAPON_MEDIUM w_class = WEIGHT_CLASS_BULKY @@ -69,7 +71,7 @@ /obj/item/gun/energy/e_gun/hos name = "\improper X-01 MultiPhase Energy Gun" desc = "This is an expensive, modern recreation of an antique laser gun. This gun has several unique firemodes, but lacks the ability to recharge over time." - cell_type = /obj/item/stock_parts/cell/gun/upgraded + default_ammo_type = /obj/item/stock_parts/cell/gun/upgraded icon_state = "hoslaser" force = 10 ammo_type = list(/obj/item/ammo_casing/energy/disabler/hos, /obj/item/ammo_casing/energy/laser/hos, /obj/item/ammo_casing/energy/ion/hos, /obj/item/ammo_casing/energy/electrode/hos) @@ -125,7 +127,7 @@ item_state = "nucgun" charge_delay = 5 can_charge = FALSE - internal_cell = TRUE + internal_magazine = TRUE ammo_x_offset = 2 ammo_type = list(/obj/item/ammo_casing/energy/laser, /obj/item/ammo_casing/energy/disabler) selfcharge = 1 @@ -184,7 +186,6 @@ item_state = "gun" ammo_x_offset = 2 charge_sections = 6 - mag_size = MAG_SIZE_SMALL wield_delay = 0.2 SECONDS wield_slowdown = 0.15 @@ -193,7 +194,10 @@ spread_unwielded = 5 ammo_type = list(/obj/item/ammo_casing/energy/disabler/hitscan, /obj/item/ammo_casing/energy/ion/cheap) - cell_type = /obj/item/stock_parts/cell/gun/mini + default_ammo_type = /obj/item/stock_parts/cell/gun/mini + allowed_ammo_types = list( + /obj/item/stock_parts/cell/gun/mini, + ) /obj/item/gun/energy/e_gun/adv_stopping name = "advanced stopping revolver" diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 5d0e8d54e4e2..c7cebd1025be 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -4,12 +4,15 @@ icon_state = "kineticgun" item_state = "kineticgun" ammo_type = list(/obj/item/ammo_casing/energy/kinetic) - cell_type = /obj/item/stock_parts/cell/emproof + default_ammo_type = /obj/item/stock_parts/cell/emproof + allowed_ammo_types = list( + /obj/item/stock_parts/cell/emproof, + ) item_flags = NONE obj_flags = UNIQUE_RENAME weapon_weight = WEAPON_LIGHT automatic_charge_overlays = FALSE - internal_cell = TRUE //prevents you from giving it an OP cell - WS Edit + internal_magazine = TRUE //prevents you from giving it an OP cell - WS Edit custom_price = 750 w_class = WEIGHT_CLASS_BULKY diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index eff3d67b2df1..f5f82ff43fb9 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -16,7 +16,7 @@ spread_unwielded = 10 /obj/item/gun/energy/laser/empty_cell - dead_cell = TRUE + spawn_no_ammo = TRUE /obj/item/gun/energy/laser/practice name = "practice laser gun" @@ -96,8 +96,10 @@ icon_state = "lasercannon" item_state = "laser" w_class = WEIGHT_CLASS_BULKY - mag_size = MAG_SIZE_LARGE - cell_type = "/obj/item/stock_parts/cell/gun/large" + default_ammo_type = /obj/item/stock_parts/cell/gun/large + allowed_ammo_types = list( + /obj/item/stock_parts/cell/gun/large, + ) force = 10 flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_BACK @@ -203,9 +205,11 @@ item_state = "gun" ammo_x_offset = 2 charge_sections = 4 - mag_size = MAG_SIZE_SMALL w_class = WEIGHT_CLASS_NORMAL - cell_type = /obj/item/stock_parts/cell/gun/mini + default_ammo_type = /obj/item/stock_parts/cell/gun/mini + allowed_ammo_types = list( + /obj/item/stock_parts/cell/gun/mini, + ) ammo_type = list(/obj/item/ammo_casing/energy/lasergun/hitscan) manufacturer = MANUFACTURER_SHARPLITE_NEW @@ -245,8 +249,10 @@ icon_state = "e50" item_state = "e50" - mag_size = MAG_SIZE_LARGE - cell_type = /obj/item/stock_parts/cell/gun/large + default_ammo_type = /obj/item/stock_parts/cell/gun/large + allowed_ammo_types = list( + /obj/item/stock_parts/cell/gun/large, + ) ammo_type = list(/obj/item/ammo_casing/energy/laser/eoehoma/e50) weapon_weight = WEAPON_HEAVY manufacturer = MANUFACTURER_EOEHOMA diff --git a/code/modules/projectiles/guns/energy/laser_gatling.dm b/code/modules/projectiles/guns/energy/laser_gatling.dm index 22e6e57d8817..066b19386486 100644 --- a/code/modules/projectiles/guns/energy/laser_gatling.dm +++ b/code/modules/projectiles/guns/energy/laser_gatling.dm @@ -116,7 +116,10 @@ custom_materials = null weapon_weight = WEAPON_MEDIUM ammo_type = list(/obj/item/ammo_casing/energy/laser/minigun) - cell_type = /obj/item/stock_parts/cell/crap + default_ammo_type = /obj/item/stock_parts/cell/crap + allowed_ammo_types = list( + /obj/item/stock_parts/cell/crap, + ) item_flags = NEEDS_PERMIT | SLOWS_WHILE_IN_HAND can_charge = FALSE var/obj/item/minigunpack/ammo_pack diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index 40fd10e94785..973297d1b4e4 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -13,8 +13,11 @@ flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_BACK ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse, /obj/item/ammo_casing/energy/laser) - internal_cell = TRUE //prevents you from giving it an OP cell - WS Edit - cell_type = /obj/item/stock_parts/cell/pulse //somone make this backpack mounted, or connected to the deathsquad suit at some point + internal_magazine = TRUE //prevents you from giving it an OP cell - WS Edit + default_ammo_type = /obj/item/stock_parts/cell/pulse + allowed_ammo_types = list( + /obj/item/stock_parts/cell/pulse, + ) //somone make this backpack mounted, or connected to the deathsquad suit at some point manufacturer = MANUFACTURER_SHARPLITE_NEW ammo_x_offset = 2 charge_sections = 6 @@ -38,9 +41,11 @@ slot_flags = ITEM_SLOT_BACK icon_state = "pulse_carbine" item_state = null - internal_cell = FALSE - mag_size = MAG_SIZE_LARGE //haha gun go brr - cell_type = /obj/item/stock_parts/cell/gun/large + internal_magazine = FALSE + default_ammo_type = /obj/item/stock_parts/cell/gun/large + allowed_ammo_types = list( + /obj/item/stock_parts/cell/gun/large, + ) ammo_x_offset = 2 charge_sections = 4 @@ -69,14 +74,20 @@ slot_flags = ITEM_SLOT_BELT icon_state = "pulse_pistol" item_state = "gun" - cell_type = /obj/item/stock_parts/cell/pulse/pistol + default_ammo_type = /obj/item/stock_parts/cell/pulse/pistol + allowed_ammo_types = list( + /obj/item/stock_parts/cell/pulse/pistol, + ) ammo_x_offset = 2 charge_sections = 4 /obj/item/gun/energy/pulse/destroyer name = "pulse destroyer" desc = "A heavy-duty energy rifle built for pure destruction." - cell_type = /obj/item/stock_parts/cell/infinite + default_ammo_type = /obj/item/stock_parts/cell/infinite + allowed_ammo_types = list( + /obj/item/stock_parts/cell/infinite, + ) ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse) /obj/item/gun/energy/pulse/destroyer/attack_self(mob/living/user) diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 067a4bbc5d97..e394aa2b7b4d 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -7,7 +7,6 @@ ammo_x_offset = 2 ammo_y_offset = 2 w_class = WEIGHT_CLASS_HUGE - mag_size = MAG_SIZE_LARGE //yes, you can put the comically large cell in it. No, you aren't getting it roundstart. You slut. flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_BACK ammo_type = list(/obj/item/ammo_casing/energy/ion) @@ -17,7 +16,7 @@ return /obj/item/gun/energy/ionrifle/empty_cell - dead_cell = TRUE + spawn_no_ammo = TRUE /obj/item/gun/energy/ionrifle/carbine name = "ion carbine" @@ -59,7 +58,10 @@ item_state = "c20r" w_class = WEIGHT_CLASS_BULKY ammo_type = list(/obj/item/ammo_casing/energy/meteor) - cell_type = /obj/item/stock_parts/cell/potato + default_ammo_type = /obj/item/stock_parts/cell/potato + allowed_ammo_types = list( + /obj/item/stock_parts/cell/potato, + ) selfcharge = 1 /obj/item/gun/energy/meteorgun/pen @@ -125,7 +127,7 @@ tool_behaviour = TOOL_DECONSTRUCT wall_decon_damage = 200 toolspeed = 0.9 //plasmacutters can be used like angle grinders, and are a bit faster - internal_cell = TRUE //so you don't cheese through the need for plasma - WS EDIT + internal_magazine = TRUE //so you don't cheese through the need for plasma - WS EDIT var/charge_cut = 100 //amount of charge used up to start action (multiplied by amount) and per progress_flash_divisor ticks of cutting var/adv = FALSE @@ -287,7 +289,10 @@ desc = "A modified energy weapon re-designed to fire 3D-printed flechettes, pulled directly from the cyborg's internal power source." icon_state = "l6_cyborg" icon = 'icons/obj/guns/projectile.dmi' - cell_type = /obj/item/stock_parts/cell/secborg + default_ammo_type = /obj/item/stock_parts/cell/secborg + allowed_ammo_types = list( + /obj/item/stock_parts/cell/secborg, + ) ammo_type = list(/obj/item/ammo_casing/energy/c3dbullet) can_charge = FALSE use_cyborg_cell = TRUE @@ -345,7 +350,7 @@ icon_state = "freezegun" desc = "A gun that changes temperatures." ammo_type = list(/obj/item/ammo_casing/energy/temp, /obj/item/ammo_casing/energy/temp/hot) - cell_type = /obj/item/stock_parts/cell/gun/upgraded + default_ammo_type = /obj/item/stock_parts/cell/gun/upgraded ammo_x_offset = 2 /obj/item/gun/energy/temperature/security diff --git a/code/modules/projectiles/guns/manufacturer/clip_lanchester/ballistics.dm b/code/modules/projectiles/guns/manufacturer/clip_lanchester/ballistics.dm index b84171d437da..507eb705f5d6 100644 --- a/code/modules/projectiles/guns/manufacturer/clip_lanchester/ballistics.dm +++ b/code/modules/projectiles/guns/manufacturer/clip_lanchester/ballistics.dm @@ -10,7 +10,10 @@ icon_state = "cm23" item_state = "clip_generic" w_class = WEIGHT_CLASS_NORMAL - mag_type = /obj/item/ammo_box/magazine/cm23 + default_ammo_type = /obj/item/ammo_box/magazine/cm23 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/cm23, + ) // can_suppress = FALSE fire_sound = 'sound/weapons/gun/pistol/cm23.ogg' rack_sound = 'sound/weapons/gun/pistol/candor_cocked.ogg' @@ -24,7 +27,7 @@ recoil_unwielded = 3 /obj/item/gun/ballistic/automatic/pistol/cm23/no_mag - spawnwithmagazine = FALSE + default_ammo_type = FALSE /obj/item/ammo_box/magazine/cm23 name = "CM-23 pistol magazine (10mm)" @@ -52,7 +55,10 @@ icon_state = "cm70" item_state = "clip_generic" - mag_type = /obj/item/ammo_box/magazine/m9mm_cm70 + default_ammo_type = /obj/item/ammo_box/magazine/m9mm_cm70 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/m9mm_cm70, + ) // can_suppress = FALSE burst_size = 3 burst_delay = 0.1 SECONDS @@ -95,7 +101,10 @@ icon_state = "cm5" item_state = "cm5" - mag_type = /obj/item/ammo_box/magazine/cm5_9mm + default_ammo_type = /obj/item/ammo_box/magazine/cm5_9mm + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/cm5_9mm, + ) bolt_type = BOLT_TYPE_CLIP weapon_weight = WEAPON_LIGHT fire_sound = 'sound/weapons/gun/smg/cm5.ogg' @@ -125,7 +134,7 @@ fire_select_icon_state_prefix = "clip_" adjust_fire_select_icon_state_on_safety = TRUE -EMPTY_GUN_HELPER(automatic/smg/cm5) +NO_MAG_GUN_HELPER(automatic/smg/cm5) /obj/item/ammo_box/magazine/cm5_9mm name = "CM-5 magazine (9mm)" @@ -235,7 +244,10 @@ EMPTY_GUN_HELPER(automatic/smg/cm5) weapon_weight = WEAPON_MEDIUM w_class = WEIGHT_CLASS_BULKY bolt_type = BOLT_TYPE_CLIP - mag_type = /obj/item/ammo_box/magazine/f4_308 + default_ammo_type = /obj/item/ammo_box/magazine/f4_308 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/f4_308, + ) fire_sound = 'sound/weapons/gun/rifle/f4.ogg' burst_size = 0 actions_types = list() @@ -290,7 +302,10 @@ EMPTY_GUN_HELPER(automatic/smg/cm5) fire_sound = 'sound/weapons/gun/sniper/cmf90.ogg' - mag_type = /obj/item/ammo_box/magazine/f90 + default_ammo_type = /obj/item/ammo_box/magazine/f90 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/f90, + ) bolt_type = BOLT_TYPE_CLIP fire_delay = 1 SECONDS @@ -335,7 +350,10 @@ EMPTY_GUN_HELPER(automatic/smg/cm5) w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK bolt_type = BOLT_TYPE_CLIP - mag_type = /obj/item/ammo_box/magazine/p16 + default_ammo_type = /obj/item/ammo_box/magazine/p16 + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/p16, + ) spread = 2 wield_delay = 0.5 SECONDS @@ -398,7 +416,10 @@ EMPTY_GUN_HELPER(automatic/smg/cm5) w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK manufacturer = MANUFACTURER_MINUTEMAN - mag_type = /obj/item/ammo_box/magazine/cm40_762_40_box + default_ammo_type = /obj/item/ammo_box/magazine/cm40_762_40_box + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/cm40_762_40_box, + ) spread = 10 spread_unwielded = 35 @@ -454,7 +475,10 @@ EMPTY_GUN_HELPER(automatic/smg/cm5) weapon_weight = WEAPON_MEDIUM // can_suppress = FALSE - mag_type = /obj/item/ammo_box/magazine/cm15_12g + default_ammo_type = /obj/item/ammo_box/magazine/cm15_12g + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/cm15_12g, + ) empty_indicator = FALSE unique_mag_sprites_for_variants = FALSE diff --git a/code/modules/projectiles/guns/manufacturer/clip_lanchester/lasers.dm b/code/modules/projectiles/guns/manufacturer/clip_lanchester/lasers.dm index 2fbe0009a563..de0e28c85b15 100644 --- a/code/modules/projectiles/guns/manufacturer/clip_lanchester/lasers.dm +++ b/code/modules/projectiles/guns/manufacturer/clip_lanchester/lasers.dm @@ -12,7 +12,13 @@ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO) default_firemode = FIREMODE_SEMIAUTO - cell_type = /obj/item/stock_parts/cell/gun + default_ammo_type = /obj/item/stock_parts/cell/gun + allowed_ammo_types = list( + /obj/item/stock_parts/cell/gun, + /obj/item/stock_parts/cell/gun/upgraded, + /obj/item/stock_parts/cell/gun/empty, + /obj/item/stock_parts/cell/gun/upgraded/empty, + ) ammo_type = list(/obj/item/ammo_casing/energy/kalix, /obj/item/ammo_casing/energy/disabler/hitscan) manufacturer = MANUFACTURER_MINUTEMAN_LASER diff --git a/code/modules/projectiles/guns/manufacturer/etherbor/energy_gunsword.dm b/code/modules/projectiles/guns/manufacturer/etherbor/energy_gunsword.dm index 4e16d2d03512..a0bbb7185621 100644 --- a/code/modules/projectiles/guns/manufacturer/etherbor/energy_gunsword.dm +++ b/code/modules/projectiles/guns/manufacturer/etherbor/energy_gunsword.dm @@ -16,7 +16,10 @@ wield_delay = 0.7 SECONDS wield_slowdown = 0.35 - cell_type = /obj/item/stock_parts/cell/gun/kalix + default_ammo_type = /obj/item/stock_parts/cell/gun/kalix + allowed_ammo_types = list( + /obj/item/stock_parts/cell/gun/kalix, + ) ammo_type = list(/obj/item/ammo_casing/energy/kalix, /obj/item/ammo_casing/energy/disabler/hitscan) load_sound = 'sound/weapons/gun/gauss/pistol_reload.ogg' @@ -43,7 +46,7 @@ armour_penetration = -10 /obj/item/gun/energy/kalix/empty_cell - dead_cell = TRUE + spawn_no_ammo = TRUE /obj/item/gun/energy/kalix/pgf name = "Etherbor BG-16" @@ -54,7 +57,10 @@ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO) default_firemode = FIREMODE_SEMIAUTO - cell_type = /obj/item/stock_parts/cell/gun/pgf + default_ammo_type = /obj/item/stock_parts/cell/gun/pgf + allowed_ammo_types = list( + /obj/item/stock_parts/cell/gun/pgf, + ) ammo_type = list(/obj/item/ammo_casing/energy/kalix/pgf , /obj/item/ammo_casing/energy/disabler/hitscan) /obj/projectile/beam/hitscan/kalix/pgf @@ -86,7 +92,10 @@ spread = 2 spread_unwielded = 5 - cell_type = /obj/item/stock_parts/cell/gun/kalix + default_ammo_type = /obj/item/stock_parts/cell/gun/kalix + allowed_ammo_types = list( + /obj/item/stock_parts/cell/gun/kalix, + ) ammo_type = list(/obj/item/ammo_casing/energy/kalix/pistol) @@ -98,7 +107,7 @@ delay = 0 /obj/item/gun/energy/kalix/pistol/empty_cell - dead_cell = TRUE + spawn_no_ammo = TRUE /obj/item/gun/energy/kalix/pgf/heavy name = "Etherbor HBG-7" diff --git a/code/modules/projectiles/guns/manufacturer/frontier_import/ballistics.dm b/code/modules/projectiles/guns/manufacturer/frontier_import/ballistics.dm index 224712438b90..93efbe0afbc4 100644 --- a/code/modules/projectiles/guns/manufacturer/frontier_import/ballistics.dm +++ b/code/modules/projectiles/guns/manufacturer/frontier_import/ballistics.dm @@ -9,7 +9,10 @@ icon_state = "mauler" item_state = "hp_generic" w_class = WEIGHT_CLASS_NORMAL - mag_type = /obj/item/ammo_box/magazine/m9mm_mauler + default_ammo_type = /obj/item/ammo_box/magazine/m9mm_mauler + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/m9mm_mauler, + ) fire_delay = 0.06 SECONDS gun_firemodes = list(FIREMODE_FULLAUTO) @@ -58,7 +61,10 @@ icon_state = "spitter" item_state = "spitter" - mag_type = /obj/item/ammo_box/magazine/spitter_9mm + default_ammo_type = /obj/item/ammo_box/magazine/spitter_9mm + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/spitter_9mm, + ) bolt_type = BOLT_TYPE_OPEN weapon_weight = WEAPON_LIGHT show_magazine_on_sprite = TRUE @@ -133,7 +139,10 @@ icon_state = "pounder" item_state = "pounder" - mag_type = /obj/item/ammo_box/magazine/c22lr_pounder_pan + default_ammo_type = /obj/item/ammo_box/magazine/c22lr_pounder_pan + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/c22lr_pounder_pan, + ) burst_size = 1 fire_delay = 0.05 SECONDS spread = 25 @@ -180,7 +189,10 @@ icon_state = "shredder" item_state = "shredder" - mag_type = /obj/item/ammo_box/magazine/m12_shredder + default_ammo_type = /obj/item/ammo_box/magazine/m12_shredder + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/m12_shredder, + ) spread = 15 recoil = 2 recoil_unwielded = 7 @@ -241,7 +253,10 @@ icon_state = "rpg" item_state = "rpg" - mag_type = /obj/item/ammo_box/magazine/internal/rocketlauncher/oneshot + default_ammo_type = /obj/item/ammo_box/magazine/internal/rocketlauncher/oneshot + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/rocketlauncher/oneshot, + ) fire_sound = 'sound/weapons/gun/general/rocket_launch.ogg' load_sound = 'sound/weapons/gun/general/rocket_load.ogg' weapon_weight = WEAPON_HEAVY diff --git a/code/modules/projectiles/guns/manufacturer/nanotrasen_sharplite/ballistics.dm b/code/modules/projectiles/guns/manufacturer/nanotrasen_sharplite/ballistics.dm index 9ba4929cf0a4..5386f323e60d 100644 --- a/code/modules/projectiles/guns/manufacturer/nanotrasen_sharplite/ballistics.dm +++ b/code/modules/projectiles/guns/manufacturer/nanotrasen_sharplite/ballistics.dm @@ -9,7 +9,10 @@ mob_overlay_icon = 'icons/obj/guns/manufacturer/nanotrasen_sharplite/onmob.dmi' w_class = WEIGHT_CLASS_NORMAL - mag_type = /obj/item/ammo_box/magazine/co9mm + default_ammo_type = /obj/item/ammo_box/magazine/co9mm + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/co9mm, + ) manufacturer = MANUFACTURER_VIGILITAS fire_sound = 'sound/weapons/gun/pistol/rattlesnake.ogg' load_sound = 'sound/weapons/gun/pistol/mag_insert.ogg' @@ -21,7 +24,7 @@ lock_back_sound = 'sound/weapons/gun/pistol/lock_small.ogg' bolt_drop_sound = 'sound/weapons/gun/pistol/drop_small.ogg' -EMPTY_GUN_HELPER(automatic/pistol/commander) +NO_MAG_GUN_HELPER(automatic/pistol/commander) /obj/item/ammo_box/magazine/co9mm name = "commander pistol magazine (9mm)" @@ -49,4 +52,4 @@ EMPTY_GUN_HELPER(automatic/pistol/commander) item_state = "inteq_generic" manufacturer = MANUFACTURER_INTEQ -EMPTY_GUN_HELPER(automatic/pistol/commander/inteq) +NO_MAG_GUN_HELPER(automatic/pistol/commander/inteq) diff --git a/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm b/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm index e4054f0ac1bb..fe34236cdd79 100644 --- a/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm +++ b/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm @@ -10,7 +10,10 @@ item_state = "sa_generic" w_class = WEIGHT_CLASS_SMALL - mag_type = /obj/item/ammo_box/magazine/m10mm_ringneck + default_ammo_type = /obj/item/ammo_box/magazine/m10mm_ringneck + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/m10mm_ringneck, + ) fire_sound = 'sound/weapons/gun/pistol/shot.ogg' dry_fire_sound = 'sound/weapons/gun/pistol/dry_fire.ogg' @@ -59,7 +62,7 @@ spread_unwielded = 9 recoil_unwielded = 2 -EMPTY_GUN_HELPER(automatic/pistol/ringneck) +NO_MAG_GUN_HELPER(automatic/pistol/ringneck) /obj/item/gun/ballistic/automatic/pistol/ringneck/indie name = "Ringneck-76" @@ -74,7 +77,7 @@ EMPTY_GUN_HELPER(automatic/pistol/ringneck) spread_unwielded = 7 recoil_unwielded = 3 -EMPTY_GUN_HELPER(automatic/pistol/ringneck/indie) +NO_MAG_GUN_HELPER(automatic/pistol/ringneck/indie) /obj/item/ammo_box/magazine/m10mm_ringneck @@ -101,7 +104,10 @@ EMPTY_GUN_HELPER(automatic/pistol/ringneck/indie) icon_state = "asp" item_state = "sa_generic" - mag_type = /obj/item/ammo_box/magazine/m57_39_asp + default_ammo_type = /obj/item/ammo_box/magazine/m57_39_asp + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/m57_39_asp, + ) fire_sound = 'sound/weapons/gun/pistol/asp.ogg' @@ -143,7 +149,7 @@ EMPTY_GUN_HELPER(automatic/pistol/ringneck/indie) ) ) -EMPTY_GUN_HELPER(automatic/pistol/asp) +NO_MAG_GUN_HELPER(automatic/pistol/asp) /obj/item/ammo_box/magazine/m57_39_asp name = "Asp magazine (5.7x39mm)" @@ -192,7 +198,8 @@ EMPTY_GUN_HELPER(automatic/pistol/asp) semi_auto = TRUE //double action safety_wording = "safety" -EMPTY_GUN_HELPER(revolver/viper) +/obj/item/gun/ballistic/revolver/viper/no_mag + spawn_no_ammo = TRUE /obj/item/gun/ballistic/revolver/viper/indie name = "Viper-23" @@ -208,7 +215,8 @@ EMPTY_GUN_HELPER(revolver/viper) . = ..() AddComponent(/datum/component/ammo_hud/revolver) -EMPTY_GUN_HELPER(revolver/viper/indie) +/obj/item/gun/ballistic/revolver/viper/indie/no_mag + spawn_no_ammo = TRUE /obj/item/gun/ballistic/automatic/pistol/rattlesnake name = "MP-84 \"Rattlesnake\"" @@ -222,7 +230,10 @@ EMPTY_GUN_HELPER(revolver/viper/indie) icon_state = "rattlesnake" item_state = "rattlesnake" - mag_type = /obj/item/ammo_box/magazine/m9mm_rattlesnake + default_ammo_type = /obj/item/ammo_box/magazine/m9mm_rattlesnake + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/m9mm_rattlesnake, + ) fire_sound = 'sound/weapons/gun/pistol/rattlesnake.ogg' dry_fire_sound = 'sound/weapons/gun/pistol/dry_fire.ogg' @@ -271,7 +282,7 @@ EMPTY_GUN_HELPER(revolver/viper/indie) gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_BURST) default_firemode = FIREMODE_SEMIAUTO -EMPTY_GUN_HELPER(automatic/pistol/rattlesnake) +NO_MAG_GUN_HELPER(automatic/pistol/rattlesnake) /obj/item/gun/ballistic/automatic/pistol/rattlesnake/inteq name = "MP-84m Kingsnake" @@ -308,7 +319,10 @@ EMPTY_GUN_HELPER(automatic/pistol/rattlesnake) w_class = WEIGHT_CLASS_TINY - mag_type = /obj/item/ammo_box/magazine/m22lr_himehabu + default_ammo_type = /obj/item/ammo_box/magazine/m22lr_himehabu + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/m22lr_himehabu, + ) fire_sound = 'sound/weapons/gun/pistol/himehabu.ogg' load_sound = 'sound/weapons/gun/pistol/mag_insert_alt.ogg' @@ -345,7 +359,7 @@ EMPTY_GUN_HELPER(automatic/pistol/rattlesnake) spread_unwielded = 0 wield_slowdown = 0 -EMPTY_GUN_HELPER(automatic/pistol/himehabu) +NO_MAG_GUN_HELPER(automatic/pistol/himehabu) /obj/item/ammo_box/magazine/m22lr_himehabu name = "pistol magazine (.22 LR)" @@ -371,7 +385,10 @@ EMPTY_GUN_HELPER(automatic/pistol/himehabu) icon_state = "cobra" item_state = "cobra" - mag_type = /obj/item/ammo_box/magazine/m45_cobra + default_ammo_type = /obj/item/ammo_box/magazine/m45_cobra + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/m45_cobra, + ) fire_sound = 'sound/weapons/gun/smg/cobra.ogg' @@ -406,7 +423,7 @@ EMPTY_GUN_HELPER(automatic/pistol/himehabu) ) ) -EMPTY_GUN_HELPER(automatic/smg/cobra) +NO_MAG_GUN_HELPER(automatic/smg/cobra) /obj/item/gun/ballistic/automatic/smg/cobra/indie name = "Cobra-20" @@ -414,7 +431,7 @@ EMPTY_GUN_HELPER(automatic/smg/cobra) icon_state = "cobra20" item_state = "cobra20" -EMPTY_GUN_HELPER(automatic/smg/cobra/indie) +NO_MAG_GUN_HELPER(automatic/smg/cobra/indie) /obj/item/ammo_box/magazine/m45_cobra @@ -445,7 +462,10 @@ EMPTY_GUN_HELPER(automatic/smg/cobra/indie) icon_state = "sidewinder" item_state = "sidewinder" - mag_type = /obj/item/ammo_box/magazine/m57_39_sidewinder + default_ammo_type = /obj/item/ammo_box/magazine/m57_39_sidewinder + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/m57_39_sidewinder, + ) fire_sound = 'sound/weapons/gun/smg/sidewinder.ogg' @@ -499,7 +519,7 @@ EMPTY_GUN_HELPER(automatic/smg/cobra/indie) default_attachments = list(/obj/item/attachment/foldable_stock/sidewinder) -EMPTY_GUN_HELPER(automatic/smg/sidewinder) +NO_MAG_GUN_HELPER(automatic/smg/sidewinder) /obj/item/ammo_box/magazine/m57_39_sidewinder name = "Sidewinder magazine (5.7x39mm)" @@ -526,7 +546,11 @@ EMPTY_GUN_HELPER(automatic/smg/sidewinder) fire_sound = 'sound/weapons/gun/sniper/cmf90.ogg' - mag_type = /obj/item/ammo_box/magazine/boomslang + default_ammo_type = /obj/item/ammo_box/magazine/boomslang + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/boomslang, + /obj/item/ammo_box/magazine/boomslang/short, + ) w_class = WEIGHT_CLASS_BULKY fire_delay = 1 SECONDS @@ -568,7 +592,7 @@ EMPTY_GUN_HELPER(automatic/smg/sidewinder) ) ) -EMPTY_GUN_HELPER(automatic/marksman/boomslang) +NO_MAG_GUN_HELPER(automatic/marksman/boomslang) /obj/item/gun/ballistic/automatic/marksman/boomslang/indie name = "Boomslang-90" @@ -580,7 +604,7 @@ EMPTY_GUN_HELPER(automatic/marksman/boomslang) zoom_amt = 3 //Long range, enough to see in front of you, but no tiles behind you. zoom_out_amt = 0 -EMPTY_GUN_HELPER(automatic/marksman/boomslang/indie) +NO_MAG_GUN_HELPER(automatic/marksman/boomslang/indie) /obj/item/ammo_box/magazine/boomslang name = "\improper Boomslang Magazine (6.5x57mm CLIP)" @@ -602,9 +626,6 @@ EMPTY_GUN_HELPER(automatic/marksman/boomslang/indie) max_ammo = 5 multiple_sprites = AMMO_BOX_PER_BULLET -/obj/item/ammo_box/magazine/boomslang/short/empty - start_empty = TRUE - /obj/item/gun/ballistic/automatic/marksman/taipan name = "AMR-83 \"Taipan\"" desc = "A monstrous semi-automatic anti-materiel rifle, surprisingly short for its class. Designed to destroy mechs, light vehicles, and equipment, but more than capable of obliterating regular personnel. Chambered in .50 BMG." @@ -623,7 +644,10 @@ EMPTY_GUN_HELPER(automatic/marksman/boomslang/indie) rack_sound = 'sound/weapons/gun/sniper/rack.ogg' suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg' weapon_weight = WEAPON_HEAVY - mag_type = /obj/item/ammo_box/magazine/sniper_rounds + default_ammo_type = /obj/item/ammo_box/magazine/sniper_rounds + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/sniper_rounds, + ) w_class = WEIGHT_CLASS_BULKY zoom_amt = 10 //Long range, enough to see in front of you, but no tiles behind you. zoom_out_amt = 5 @@ -644,7 +668,7 @@ EMPTY_GUN_HELPER(automatic/marksman/boomslang/indie) valid_attachments = list() slot_available = list() -EMPTY_GUN_HELPER(automatic/marksman/taipan) +NO_MAG_GUN_HELPER(automatic/marksman/taipan) //########### RIFLES ###########// @@ -659,7 +683,13 @@ EMPTY_GUN_HELPER(automatic/marksman/taipan) icon_state = "hydra" item_state = "hydra" - mag_type = /obj/item/ammo_box/magazine/m556_42_hydra + default_ammo_type = /obj/item/ammo_box/magazine/m556_42_hydra + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/m556_42_hydra, + /obj/item/ammo_box/magazine/m556_42_hydra/extended, + /obj/item/ammo_box/magazine/m556_42_hydra/casket, + /obj/item/ammo_box/magazine/m556_42_hydra/small + ) gun_firenames = list(FIREMODE_SEMIAUTO = "single", FIREMODE_BURST = "burst fire", FIREMODE_FULLAUTO = "full auto", FIREMODE_OTHER = "underbarrel grenade launcher") gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO) //gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_BURST, FIREMODE_OTHER) @@ -711,7 +741,7 @@ EMPTY_GUN_HELPER(automatic/marksman/taipan) ) ) -EMPTY_GUN_HELPER(automatic/assault/hydra) +NO_MAG_GUN_HELPER(automatic/assault/hydra) //we hard code "hydra", why? because if not, i would need to duplicate the extended/short magazine sprites like 3 fucking times for every variant with a different icon state. this eases the spriting burden /obj/item/gun/ballistic/automatic/assault/hydra/update_overlays() @@ -778,20 +808,11 @@ EMPTY_GUN_HELPER(automatic/assault/hydra) ) /obj/item/gun/ballistic/automatic/assault/hydra/lmg/extended - spawnwithmagazine = FALSE //so we spawn with the short magaine + default_ammo_type = /obj/item/ammo_box/magazine/m556_42_hydra/extended -/obj/item/gun/ballistic/automatic/assault/hydra/lmg/extended/Initialize() - . = ..() - magazine = new /obj/item/ammo_box/magazine/m556_42_hydra/extended(src) - chamber_round() /obj/item/gun/ballistic/automatic/assault/hydra/lmg/casket_mag - spawnwithmagazine = FALSE //so we spawn with the short magaine - -/obj/item/gun/ballistic/automatic/assault/hydra/lmg/casket_mag/Initialize() - . = ..() - magazine = new /obj/item/ammo_box/magazine/m556_42_hydra/casket(src) - chamber_round() + default_ammo_type = /obj/item/ammo_box/magazine/m556_42_hydra/casket /obj/item/gun/ballistic/automatic/assault/hydra/dmr name = "SBR-80 \"Hydra\"" @@ -807,16 +828,10 @@ EMPTY_GUN_HELPER(automatic/assault/hydra) spread_unwielded = 12 wield_slowdown = 0.8 //dmrrrr wield_delay = 0.85 SECONDS //above - spawnwithmagazine = FALSE //so we spawn with the short magaine zoomable = TRUE + default_ammo_type = /obj/item/ammo_box/magazine/m556_42_hydra/small -EMPTY_GUN_HELPER(automatic/assault/hydra/dmr) - -/obj/item/gun/ballistic/automatic/assault/hydra/dmr/Initialize() - . = ..() - magazine = new /obj/item/ammo_box/magazine/m556_42_hydra/small(src) - chamber_round() - +NO_MAG_GUN_HELPER(automatic/assault/hydra/dmr) /obj/item/gun/ballistic/automatic/assault/hydra/underbarrel_gl name = "SMR-80 \"Hydra\"" @@ -942,7 +957,16 @@ EMPTY_GUN_HELPER(automatic/assault/hydra/dmr) item_state = "bulldog" weapon_weight = WEAPON_MEDIUM - mag_type = /obj/item/ammo_box/magazine/m12g_bulldog + default_ammo_type = /obj/item/ammo_box/magazine/m12g_bulldog + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/m12g_bulldog, + /obj/item/ammo_box/magazine/m12g_bulldog/drum, + /obj/item/ammo_box/magazine/m12g_bulldog/drum/stun, + /obj/item/ammo_box/magazine/m12g_bulldog/drum/slug, + /obj/item/ammo_box/magazine/m12g_bulldog/drum/dragon, + /obj/item/ammo_box/magazine/m12g_bulldog/drum/bioterror, + /obj/item/ammo_box/magazine/m12g_bulldog/drum/meteor, + ) fire_delay = 0.4 SECONDS // this NEEDS the old delay. fire_sound = 'sound/weapons/gun/shotgun/bulldog.ogg' show_magazine_on_sprite = TRUE @@ -988,7 +1012,7 @@ EMPTY_GUN_HELPER(automatic/assault/hydra/dmr) ) ) -EMPTY_GUN_HELPER(shotgun/automatic/bulldog) +NO_MAG_GUN_HELPER(shotgun/automatic/bulldog) /obj/item/ammo_box/magazine/m12g_bulldog name = "shotgun box magazine (12g buckshot)" @@ -1031,10 +1055,6 @@ EMPTY_GUN_HELPER(shotgun/automatic/bulldog) name = "shotgun drum magazine (12g meteor slugs)" ammo_type = /obj/item/ammo_casing/shotgun/meteorslug - -EMPTY_GUN_HELPER(shotgun/bulldog) - - /obj/item/gun/ballistic/rocketlauncher/mako name = "RR-86 \"Mako\"" desc = "A large, four-tube rocket launcher, the Mako fires (relatively) small rockets filled with incendiary compound, designed to cause fires and deny enemy movement. Capable of causing significant damage to exosuits on impact, as well." @@ -1046,7 +1066,10 @@ EMPTY_GUN_HELPER(shotgun/bulldog) icon_state = "mako" item_state = "mako" - mag_type = /obj/item/ammo_box/magazine/internal/mako + default_ammo_type = /obj/item/ammo_box/magazine/internal/mako + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/mako, + ) fire_sound = 'sound/weapons/gun/general/rocket_launch.ogg' load_sound = 'sound/weapons/gun/general/rocket_load.ogg' w_class = WEIGHT_CLASS_BULKY diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm index 2e2fc46c3752..3d1c407a7e56 100644 --- a/code/modules/projectiles/guns/misc/beam_rifle.dm +++ b/code/modules/projectiles/guns/misc/beam_rifle.dm @@ -28,9 +28,11 @@ weapon_weight = WEAPON_HEAVY w_class = WEIGHT_CLASS_BULKY ammo_type = list(/obj/item/ammo_casing/energy/beam_rifle/hitscan) - internal_cell = FALSE //prevents you from giving it an OP cell - WS Edit //shut up dumb nerd - mag_size = MAG_SIZE_LARGE - cell_type = "/obj/item/stock_parts/cell/gun/large" + internal_magazine = FALSE //prevents you from giving it an OP cell - WS Edit //shut up dumb nerd + default_ammo_type = /obj/item/stock_parts/cell/gun/large + allowed_ammo_types = list( + /obj/item/stock_parts/cell/gun/large, + ) canMouseDown = TRUE var/aiming = FALSE var/aiming_time = 12 @@ -78,7 +80,10 @@ /obj/item/gun/energy/beam_rifle/debug delay = 0 - cell_type = /obj/item/stock_parts/cell/infinite + default_ammo_type = /obj/item/stock_parts/cell/infinite + allowed_ammo_types = list( + /obj/item/stock_parts/cell/infinite, + ) aiming_time = 0 recoil = 0 diff --git a/code/modules/projectiles/guns/misc/bow.dm b/code/modules/projectiles/guns/misc/bow.dm index 9f2957ba40cd..01c60b3ca865 100644 --- a/code/modules/projectiles/guns/misc/bow.dm +++ b/code/modules/projectiles/guns/misc/bow.dm @@ -7,7 +7,10 @@ load_sound = null fire_sound = 'sound/weapons/bowfire.ogg' slot_flags = ITEM_SLOT_BACK - mag_type = /obj/item/ammo_box/magazine/internal/bow + default_ammo_type = /obj/item/ammo_box/magazine/internal/bow + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/internal/bow, + ) trigger_guard = TRIGGER_GUARD_ALLOW_ALL force = 15 attack_verb = list("whipped", "cracked") diff --git a/code/modules/projectiles/guns/powered.dm b/code/modules/projectiles/guns/powered.dm index a9ab2f6365f4..44419c099564 100644 --- a/code/modules/projectiles/guns/powered.dm +++ b/code/modules/projectiles/guns/powered.dm @@ -1,13 +1,21 @@ /obj/item/gun/ballistic/automatic/powered - mag_type = /obj/item/ammo_box/magazine/gauss + default_ammo_type = /obj/item/ammo_box/magazine/gauss + allowed_ammo_types = list( + /obj/item/ammo_box/magazine/gauss, + ) + var/default_cell_type = /obj/item/stock_parts/cell/gun + var/list/allowed_cell_types = list( + /obj/item/stock_parts/cell/gun, + /obj/item/stock_parts/cell/gun/upgraded, + /obj/item/stock_parts/cell/gun/empty, + /obj/item/stock_parts/cell/gun/upgraded/empty, + ) charge_sections = 3 /obj/item/gun/ballistic/automatic/powered/Initialize() . = ..() - if(cell_type) - cell = new cell_type(src) - else - cell = new(src) + if(default_cell_type) + cell = new default_cell_type(src) update_appearance() /obj/item/gun/ballistic/automatic/powered/examine(mob/user) @@ -39,19 +47,13 @@ //the things below were taken from energy gun code. blame whoever coded this, not me /obj/item/gun/ballistic/automatic/powered/attackby(obj/item/A, mob/user, params) - if (!internal_cell && istype(A, /obj/item/stock_parts/cell/gun)) + if (!internal_cell && (A.type in allowed_cell_types)) var/obj/item/stock_parts/cell/gun/C = A if (!cell) insert_cell(user, C) return ..() /obj/item/gun/ballistic/automatic/powered/proc/insert_cell(mob/user, obj/item/stock_parts/cell/gun/C) - if(mag_size == MAG_SIZE_SMALL && !istype(C, /obj/item/stock_parts/cell/gun/mini)) - to_chat(user, "\The [C] doesn't seem to fit into \the [src]...") - return FALSE - if(mag_size == MAG_SIZE_LARGE && !istype(C, /obj/item/stock_parts/cell/gun/large)) - to_chat(user, "\The [C] doesn't seem to fit into \the [src]...") - return FALSE if(user.transferItemToLoc(C, src)) cell = C to_chat(user, "You load the [C] into \the [src].") diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index ba42b9bc9f46..16e76901f957 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -83,6 +83,7 @@ #include "connect_loc.dm" #include "biome_lists.dm" #include "emoting.dm" +#include "gun_sanity.dm" #include "keybinding_init.dm" #include "machine_disassembly.dm" #include "open_air.dm" diff --git a/code/modules/unit_tests/gun_sanity.dm b/code/modules/unit_tests/gun_sanity.dm new file mode 100644 index 000000000000..36630dfea8dc --- /dev/null +++ b/code/modules/unit_tests/gun_sanity.dm @@ -0,0 +1,17 @@ +/datum/unit_test/gun_sanity/Run() + for(var/gun_path in subtypesof(/obj/item/gun)) + var/obj/item/gun/target_gun = new gun_path() + if(target_gun.default_ammo_type) + if(!ispath(target_gun.default_ammo_type)) + TEST_FAIL("The default ammo ([target_gun.default_ammo_type]) in [gun_path] is not a type") + + if(!(target_gun.default_ammo_type in target_gun.allowed_ammo_types)) + TEST_FAIL("The default ammo ([target_gun.default_ammo_type]) in [gun_path] in not in its allowed ammo types") + + if(ispath(gun_path, /obj/item/gun/ballistic)) + if(!(target_gun.magazine?.type == target_gun.default_ammo_type)) + TEST_FAIL("[gun_path]'s mag ([target_gun.magazine?.type]) does not equal its default_ammo_type") + else + if(target_gun.internal_magazine) + TEST_FAIL("[gun_path] with an internal mag has no mag") + qdel(target_gun) From 552cb1b5cfe84259d9c5e298b6305bac81617405 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 22 Oct 2024 10:42:33 -0500 Subject: [PATCH 075/274] Automatic changelog generation for PR #3429 [ci skip] --- html/changelogs/AutoChangeLog-pr-3429.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3429.yml diff --git a/html/changelogs/AutoChangeLog-pr-3429.yml b/html/changelogs/AutoChangeLog-pr-3429.yml new file mode 100644 index 000000000000..b44dfe339e77 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3429.yml @@ -0,0 +1,6 @@ +author: FalloutFalcon +changes: + - {bugfix: ammo} + - {refactor: refactored ammo types to not be snowflaked when handling spawning subtyped + guns} +delete-after: true From 0751c471a7c079a6b3f3cb766ca063cc7ee62325 Mon Sep 17 00:00:00 2001 From: Sun-Soaked <45698967+Sun-Soaked@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:46:27 -0400 Subject: [PATCH 076/274] Claymores & Mine Tweaks (#2988) ## About The Pull Request TODO: - [x] Actually implement claymores (should we let players have them?)(Cargo?) - [x] Remove weird sprite shim I made when world icons are merged, add world icons to mines - [x] Sprites (this time we actually need them since the placeholder ones are tgmc & I didn't ask for permission) Adds Mines that explode when an object passes in front of them & fire an ammo casing in that direction. Adds claymores as an implemented example of this- short range, shreds people at point blank. Adds World Icons to normal Mines I had to do some tweaking behind the scenes to implement mobless casing firing- but I'm pleased to say that fire_casing() can now deal emotionally with being handed a null user. Also minorly tweaks explosion devastation, so heavy explosions can only strip tiles that have already been damaged You can still immediately strip tiles with devastating explosions ## Why It's Good For The Game FRONT TOWARDS ENEMY ## Changelog :cl: add: Directional Mines, implemented as Claymores. add: Mines now have World Icons balance: explosions now only strip to space when a tile is already damaged fix: Prox mines explode from slightly further away & no longer activate through walls. fix: Multiple mines can no longer be stacked on a tile code: fire_casing() can now be called by non-mobs, allowing objects to shoot casings. /:cl: --- code/datums/components/pellet_cloud.dm | 13 +- code/game/objects/items/devices/mines.dm | 229 +++++++++++++++--- code/game/objects/items/shrapnel.dm | 43 +++- code/game/turfs/open/floor.dm | 2 +- code/modules/cargo/packs/sec_supply.dm | 25 ++ .../modules/projectiles/ammunition/_firing.dm | 4 +- .../projectiles/projectile/energy/misc.dm | 25 +- icons/obj/landmine.dmi | Bin 2821 -> 3328 bytes icons/obj/world/landmine.dmi | Bin 0 -> 3377 bytes 9 files changed, 292 insertions(+), 49 deletions(-) create mode 100644 icons/obj/world/landmine.dmi diff --git a/code/datums/components/pellet_cloud.dm b/code/datums/components/pellet_cloud.dm index 19b1e2094993..3bc86ad2e53b 100644 --- a/code/datums/components/pellet_cloud.dm +++ b/code/datums/components/pellet_cloud.dm @@ -90,7 +90,10 @@ /datum/component/pellet_cloud/proc/create_casing_pellets(obj/item/ammo_casing/shell, atom/target, mob/living/user, fired_from, randomspread, spread, zone_override, params, distro) - shooter = user + if(user) + shooter = user + else + shooter = fired_from var/targloc = get_turf(target) if(!zone_override) zone_override = shooter.zone_selected @@ -106,8 +109,12 @@ RegisterSignal(shell.BB, COMSIG_PROJECTILE_SELF_ON_HIT, PROC_REF(pellet_hit)) RegisterSignal(shell.BB, list(COMSIG_PROJECTILE_RANGE_OUT, COMSIG_PARENT_QDELETING), PROC_REF(pellet_range)) pellets += shell.BB - if(!shell.throw_proj(target, targloc, shooter, params, spread)) - return + if(user) + if(!shell.throw_proj(target, targloc, shooter, params, spread)) + return + else + if(!shell.throw_proj(target, targloc, null, params, spread, shooter)) + return if(i != num_pellets) shell.newshot() diff --git a/code/game/objects/items/devices/mines.dm b/code/game/objects/items/devices/mines.dm index 1772cbf497c3..6547fde77ada 100644 --- a/code/game/objects/items/devices/mines.dm +++ b/code/game/objects/items/devices/mines.dm @@ -11,6 +11,7 @@ icon_state = "mine" item_state = "assembly"//when we get custom sprites replace this. please base_icon_state = "mine" + light_color = "#FF0000" /// Is our mine live? var/armed = FALSE @@ -24,13 +25,11 @@ var/manufacturer = MANUFACTURER_NONE - /obj/item/mine/Initialize(mapload) . = ..() if(armed) now_armed() - /obj/item/mine/examine(mob/user) . = ..() if(!armed) @@ -45,33 +44,39 @@ . = ..() icon_state = "[base_icon_state][triggered ? "_exploding" : null][!armed && anchored ? "_arming" : null][armed && anchored && !triggered ? "_armed" : null]" -//mines have a small chance to be triggered by damage, but they take longer to explode +/// mines have a small chance to be triggered by damage, but they take longer to explode /obj/item/mine/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir) . = ..() if(prob(35) & obj_integrity > 0) blast_delay = blast_delay * 2 trigger_mine() -//insert your horrible fate here +/// insert your horrible fate here /obj/item/mine/proc/mine_effect(mob/victim) return -//handles controlled deactivation +/// handles controlled deactivation /obj/item/mine/proc/disarm() if(triggered) //no turning back now return + light_power = 0 + light_range = 0 anchored = FALSE armed = FALSE update_appearance(UPDATE_ICON_STATE) return -//using an unarmed mine inhand deploys it. +/// using an unarmed mine inhand deploys it. /obj/item/mine/attack_self(mob/user) if(!armed) + if(!loccheck(user)) + to_chat(user, span_warning("There's already a mine at this position!")) + return user.visible_message(span_danger("[user] deploys the [src]."), span_notice("You deploy the [src].")) user.dropItemToGround(src) anchored = TRUE + dir = user.dir playsound(src, 'sound/machines/click.ogg', 60, TRUE) if(arm_delay) @@ -82,27 +87,30 @@ armed = TRUE message_admins("[key_name(user)] has placed \a [src] at ([x],[y],[z]).") -//let them know the mine's done cooking +/obj/item/mine/proc/loccheck(mob/user) + for(var/obj/item/mine/alreadymined in user.loc) + if(alreadymined.anchored) + return FALSE + return TRUE + +/// let them know the mine's done cooking /obj/item/mine/proc/now_armed() armed = TRUE update_appearance(UPDATE_ICON_STATE) + light_power = 1 + light_range = 1 playsound(src, 'sound/machines/nuke/angry_beep.ogg', 55, FALSE, 1) visible_message("\The [src] beeps softly, indicating it is now active.", vision_distance = COMBAT_MESSAGE_RANGE) /// Can this mine trigger on the passed movable? /obj/item/mine/proc/can_trigger(atom/movable/on_who) - //var/badtype = typecacheof(list(/obj/effect, /obj/item/mine)) if(triggered || !isturf(loc) || !armed || iseffect(on_who) || istype(on_who, /obj/item/mine)) return FALSE - //if(on_who == badtype)//no recursive self triggering. Bad landmine - // return FALSE return TRUE /// When something sets off a mine /obj/item/mine/proc/trigger_mine(atom/movable/triggerer) - if(obj_integrity <= 0) - return - if(triggered) //too busy detonating to detonate again + if(obj_integrity <= 0 || triggered)//too busy detonating to detonate again return if(triggerer) triggerer.visible_message(span_danger("[icon2html(src, viewers(src))] [triggerer] sets off \the [src]. It's gonna blow!"), span_danger("[icon2html(src, viewers(src))] \The [src] activates.")) @@ -114,7 +122,6 @@ playsound(src, 'sound/items/mine_activate.ogg', 70, FALSE) else playsound(src, 'sound/items/mine_activate_short.ogg', 80, FALSE) - light_color = "#FF0000" light_power = 5 light_range = 3 if(!blast_delay)//addtimer gets mad if the delay is 0 @@ -122,7 +129,7 @@ else addtimer(CALLBACK(src, PROC_REF(blast_now), triggerer), blast_delay) -//NOW we actually blow up +///NOW we actually blow up /obj/item/mine/proc/blast_now(atom/movable/triggerer) var/datum/effect_system/spark_spread/sporks = new /datum/effect_system/spark_spread sporks.set_up(3, 1, src) @@ -142,7 +149,7 @@ user.visible_message(span_warning("[user] extends their hand towards \the [src]!"), span_userdanger("You extend your arms to pick up \the [src], knowing that it will likely blow up when you touch it!")) if(do_after(user, 5 SECONDS, target = src))//SO SO generous. You can still step back from the edge. if(prob(10)) - user.visible_message(span_notice("[user] picks up \the [src], which miraculously doesn't explode!"), span_notice("You pick up \the [src], which miraculously doesn't explode!")) + user.visible_message(span_notice("[user] picks up \the [src], which miraculously doesn't go off!"), span_notice("You pick up \the [src], which miraculously doesn't go off!")) disarm() else user.visible_message(span_danger("[user] attempts to pick up \the [src] only to hear a beep as it activates in their hand!"), span_danger("You attempt to pick up \the [src] only to hear a beep as it activates in your hands!")) @@ -166,8 +173,8 @@ trigger_mine(user) // -//PRESSURE BASED MINE: -//Mine that explodes when stepped on. +///PRESSURE BASED MINE: +///Mine that explodes when stepped on. /obj/item/mine/pressure name = "dummy landmine" /// When true, mines trigger instantly on being stepped upon @@ -254,11 +261,7 @@ clicked = FALSE . = ..() -/obj/item/mine/pressure/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) - trigger_mine(AM) - ..() - -//handles disarming(and failing to disarm) +///handles disarming(and failing to disarm) /obj/item/mine/pressure/attackby(obj/item/I, mob/user) if(I.tool_behaviour == TOOL_SCREWDRIVER) if(sealed) @@ -275,18 +278,16 @@ else . = ..() -// -//PROXIMITY MINES -//Mines that explode when someone moves nearby. Simpler, because I don't have to worry about saving step info or disarming logic -// +//PROXIMITY MINES +///Mines that explode when someone moves nearby. Simpler, because I don't have to worry about saving step info or disarming logic /obj/item/mine/proximity name = "dummy proximity mine" blast_delay = 15 DECISECONDS arm_delay = 10 SECONDS//clear the area ///needed for the proximity checks. var/datum/proximity_monitor/proximity_monitor - var/proximity_range = 2 + var/proximity_range = 3 /obj/item/mine/proximity/Initialize(mapload) . = ..() @@ -302,12 +303,8 @@ /obj/item/mine/proximity/now_armed() . = ..() proximity_monitor = new(src, proximity_range) - light_color = "#FF0000" - light_power = 1 - light_range = 1 /obj/item/mine/proximity/disarm() - . = ..() QDEL_NULL(proximity_monitor) /obj/item/mine/proximity/Destroy() @@ -316,7 +313,11 @@ . = ..() /obj/item/mine/proximity/HasProximity(atom/movable/triggerer) - if(!iscarbon(triggerer))//let's keep these on player movements for now. + //let's keep these on player movements for now. + if(!iscarbon(triggerer)) + return + //Quick and dirty solution for preventing activations behind walls. + if(!(triggerer in view(proximity_range, src))) return if(!can_trigger(triggerer)) return @@ -326,9 +327,92 @@ QDEL_NULL(proximity_monitor) return +//DIRECTIONAL MINES +///Once deployed, keeps an eye on a line of turfs in the faced direction. If something moves in them, explode. +/obj/item/mine/directional + name = "directional mine" + desc = "An anti-personnel device that activates when an object moves in front of it. This one does nothing and is for testing purposes only." + + blast_delay = 1 DECISECONDS + arm_delay = 5 SECONDS + + ///range of tripwire + var/trigger_range = 4 + + ///projectile casing to fire in the selected direction when the mine is triggered. + //null prevents a projectile from being fired. + var/obj/item/ammo_casing/casingtype = null + + ///cache of turfs for detection area + var/list/tripwire_turfs + + ///for aiming the resulting projectiles + var/turf/target_turf + +///kills any existing tripwires +/obj/item/mine/directional/proc/remove_tripwires() + if(tripwire_turfs) + for(var/turf/affected_turf in tripwire_turfs) + UnregisterSignal(affected_turf, COMSIG_ATOM_ENTERED) + tripwire_turfs = null + if(target_turf) + target_turf = null + return + +///sets up tripwires(or recreates them, if already present) +/obj/item/mine/directional/proc/draw_tripwires() + if(tripwire_turfs) + remove_tripwires() + //we'll also use this to set up the pew + target_turf = get_ranged_target_turf(src, dir, trigger_range) + var/turf/starting_turf = get_turf(src) + tripwire_turfs = get_line(starting_turf, target_turf) + + for(var/turf/affected_turf in tripwire_turfs) + RegisterSignal(affected_turf, COMSIG_ATOM_ENTERED, PROC_REF(on_entered)) + +/obj/item/mine/directional/claymore/now_armed() + draw_tripwires() + . = ..() + +/obj/item/mine/directional/proc/on_entered(datum/source, atom/movable/arrived) + SIGNAL_HANDLER + if(!(arrived in view(trigger_range, src))) + return + if(!can_trigger(arrived)) + return + + if(ismob(arrived)) + var/mob/living/fool = arrived + fool.do_alert_animation(fool) + + visible_message(span_danger("[icon2html(src, viewers(src))] *click*")) + playsound(src, 'sound/machines/click.ogg', 100, TRUE) + INVOKE_ASYNC(src, PROC_REF(trigger_mine), arrived) + + +//pew pew +/obj/item/mine/directional/mine_effect(mob/victim) + if(casingtype && target_turf && victim ?(src.loc != victim.loc) : victim == null) + var/obj/item/ammo_casing/casing = new casingtype(src) + casing.fire_casing(target_turf, null, null, null, 30, ran_zone(), 60, src) + . = ..() + +/obj/item/mine/directional/disarm() + remove_tripwires() + visible_message(span_danger("With a soft clunk, the [src]'s securing bolts retract.")) + . = ..() + +///handles weird cases like ship movement or teleporting +/obj/item/mine/directional/Moved() + . = ..() + if(!loc) + return + if(armed & !triggered) + draw_tripwires() + // //LANDMINE TYPES -//Rylie please help me make these more immersive // /obj/item/mine/pressure/explosive @@ -380,7 +464,7 @@ shrapnel_magnitude = 4 /obj/item/mine/pressure/explosive/fire/mine_effect(mob/victim) - if(victim.is_holding(src))//in case it's been picked up + if(victim && victim.is_holding(src))//in case it's been picked up for(var/turf/T in view(4,victim)) T.IgniteTurf(15) new /obj/effect/hotspot(T) @@ -473,7 +557,7 @@ AddComponent(/datum/component/pellet_cloud, projectile_type=shrapnel_type, magnitude=shrapnel_magnitude) -//like all real 'less' than lethal crowd control options this is, in fact, not very good at being nonlethal +///like all real 'less' than lethal crowd control options this is, in fact, not very good at being nonlethal /obj/item/mine/proximity/explosive/sting name = "\improper'Stinger' Crowd Management Device" desc = "A \"less\" than lethal crowd control weapon, designed to demoralise and scatter anti-NT protestors. The bands of ballistic gel inside strike targets and incapacitate without causing serious maiming. In Theory." @@ -526,6 +610,76 @@ desc = "An anti-infantry device produced during the corporate wars. The explosive payload has been swapped out for 'viscerator'-type antipersonnel drones." spawn_type = /mob/living/simple_animal/hostile/viscerator + + +//Claymores +//shrapnel based dir explosive, extreme short range +//FRONT TOWARDS ENEMY +/obj/item/mine/directional/claymore + name = "C-10 Claymore" + desc = "A compact anti-personnel device with a directional trigger that responds to movement. A faded sticker on the back reads \"FRONT TOWARDS ENEMY\"." + icon = 'icons/obj/world/landmine.dmi' + icon_state = "mine_claymore" + base_icon_state = "mine_claymore" + + trigger_range = 2 + + //customize explosive power + var/range_devastation = -1 + var/range_heavy = 1 + var/range_light = 2 + var/range_flame = 0 + + //using this to indicate pb + var/range_flash = 1 + + //a second run of shrapnel, intended for maiming especially pb targets + var/obj/item/ammo_casing/shredtype = /obj/item/ammo_casing/caseless/shrapnel/shred + casingtype = /obj/item/ammo_casing/caseless/shrapnel + + manufacturer = MANUFACTURER_SCARBOROUGH + +//this will return to basic mines when we relegate them to specifically being on certain ruins & battlefields. For now, it's way too dangerous +/obj/item/mine/directional/claymore/Initialize() + . = ..() + AddElement(/datum/element/world_icon, null, icon, 'icons/obj/landmine.dmi') + +/obj/item/mine/directional/claymore/attackby(obj/item/I, mob/user) + if (I.tool_behaviour == TOOL_SCREWDRIVER && armed) + to_chat(user, "You begin unscrewing \the [src]'s arming pin...") + I.play_tool_sound(src, 50) + if(do_after(user, 10 SECONDS, target = src)) + to_chat(user, "You unscrew \the [src]'s arming pin, disarming it.") + disarm() + else + . = ..() + +/obj/item/mine/directional/claymore/mine_effect(mob/victim) + . = ..() + //if you somehow explode it while on the same tile, you win bonus shrapnel + //also spews stuff everywhere if it's triggered while not set up + if(!target_turf || victim ? (victim.loc == src.loc) : victim == null) + explosion(src, range_devastation, range_heavy, range_light, range_flash, 1, 0, range_flame, 0, 1) + var/casingammo = casingtype.projectile_type + var/shredammo = shredtype.projectile_type + if(casingtype) + AddComponent(/datum/component/pellet_cloud, projectile_type = casingammo, magnitude = 1) + if(shredtype) + AddComponent(/datum/component/pellet_cloud, projectile_type = shredammo, magnitude = 2) + else + var/blastloc = get_step_towards(src, target_turf) + explosion(blastloc, range_devastation, range_heavy, range_light, range_flash, 1, 0, range_flame, 0, 1) + if(shredtype) + var/obj/item/ammo_casing/shredcasing = new shredtype(src) + shredcasing.fire_casing(target_turf, null, null, null, 30, ran_zone(), 50, src) + +/obj/item/mine/directional/claymore/plasma + name = "\improper Etherbor EC-1" + desc = "A proximity explosive designed by the PGF for ambushing advancing infantry & defending corridors. Cooks armored targets to well-done." + shredtype = /obj/item/ammo_casing/caseless/shrapnel/shred/plasma + casingtype = /obj/item/ammo_casing/caseless/shrapnel/plasma + manufacturer = MANUFACTURER_PGF + // //GIMMICK MINES// //pretty much exclusively for adminbus & code dependencies @@ -671,6 +825,9 @@ LIVE_MINE_HELPER(proximity/explosive/sting) LIVE_MINE_HELPER(proximity/spawner/manhack) LIVE_MINE_HELPER(proximity/explosive/plasma) +LIVE_MINE_HELPER(directional/claymore) +LIVE_MINE_HELPER(directional/claymore/plasma) + LIVE_MINE_HELPER(pressure/gas) LIVE_MINE_HELPER(pressure/kickmine) LIVE_MINE_HELPER(pressure/sound) diff --git a/code/game/objects/items/shrapnel.dm b/code/game/objects/items/shrapnel.dm index 249ee7dc41ed..db676e60fc3c 100644 --- a/code/game/objects/items/shrapnel.dm +++ b/code/game/objects/items/shrapnel.dm @@ -35,7 +35,7 @@ name = "flying shrapnel shard" damage = 10 range = 10 - armour_penetration = -20 + armour_penetration = -5 dismemberment = 25 ricochets_max = 2 ricochet_chance = 40 @@ -49,7 +49,7 @@ /obj/projectile/bullet/shrapnel/rusty damage = 8 - armour_penetration = -35 + armour_penetration = -10 dismemberment = 15 ricochets_max = 3//duller = less likely to stick in a wall ricochet_chance = 60 @@ -115,3 +115,42 @@ /obj/projectile/bullet/pellet/stingball/on_ricochet(atom/A) hit_stunned_targets = TRUE // ducking will save you from the first wave, but not the rebounds + + +//claymore shrapnel stuff// +//2 small bursts- one that harasses people passing by a bit aways, one that brutalizes point-blank targets. +/obj/item/ammo_casing/caseless/shrapnel + name = "directional shrapnel burst :D" + desc = "I May Have Overreacted" + pellets = 4 + variance = 70 + projectile_type = /obj/projectile/bullet/shrapnel/claymore + randomspread = TRUE + +/obj/item/ammo_casing/caseless/shrapnel/shred + name = "point blank directional shrapnel burst" + desc = "Claymores are lethal to armored infantry at point blank range." + pellets = 3 + variance = 50 + projectile_type = /obj/projectile/bullet/shrapnel/claymore/pointbl + randomspread = TRUE + +/obj/projectile/bullet/shrapnel/claymore + name = "ceramic splinter" + range = 4 + armour_penetration = 0 + +/obj/projectile/bullet/shrapnel/claymore/pointbl + name = "large ceramic shard" + range = 2 + damage = 18 + dismemberment = 30 + armour_penetration = 10 + +/obj/item/ammo_casing/caseless/shrapnel/plasma + name = "directional plasma burst" + projectile_type = /obj/projectile/energy/plasmabolt + +/obj/item/ammo_casing/caseless/shrapnel/shred/plasma + name = "point blank directional plasma burst" + projectile_type = /obj/projectile/energy/plasmabolt/shred diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm index 23fdfcc6d998..7b1603df119d 100644 --- a/code/game/turfs/open/floor.dm +++ b/code/game/turfs/open/floor.dm @@ -62,7 +62,7 @@ if(1) ScrapeAway(2, flags = CHANGETURF_INHERIT_AIR) if(2) - if(prob(60)) + if(prob(50) && broken) ScrapeAway(flags = CHANGETURF_INHERIT_AIR) else break_tile() diff --git a/code/modules/cargo/packs/sec_supply.dm b/code/modules/cargo/packs/sec_supply.dm index e4208699338b..3ae043e4293d 100644 --- a/code/modules/cargo/packs/sec_supply.dm +++ b/code/modules/cargo/packs/sec_supply.dm @@ -155,3 +155,28 @@ contains = list(/obj/item/gun/energy/e_gun/advtaser, /obj/item/gun/energy/e_gun/advtaser) crate_name = "hybrid taser crate" + +/datum/supply_pack/sec_supply/claymore + name = "C-10 Claymore Crate" + desc = "Four motion-activated directional mines, perfect for ambushing enemy infantry. Still debatably legal to sell!" + cost = 3000 + contains = list(/obj/item/paper/fluff/claymore, + /obj/item/mine/directional/claymore, + /obj/item/mine/directional/claymore, + /obj/item/mine/directional/claymore, + /obj/item/mine/directional/claymore) + crate_name = "C-10 Claymore crate" + +/obj/item/paper/fluff/claymore + name = "PRODUCT USAGE GUIDE" + desc = "A dusty memo stamped with the Scarborough Arms logo." + default_raw_text = "ASSEMBLY:

\ + -Deploy mounting legs and emplace device. Front should be placed in direction of enemy egress, no more then three meters from intended target area.

\ + -INFORM ALLIES OF PLACEMENT LOCATION.

\ + -Wait for arming sequence to complete.

\ + -Enjoy hands-free area denial, courtesy of Scarborough Arms.


\ + DISASSEMBLY & STORAGE:

\ + -Insert screwdriver into arming pin access and turn 180 degrees. There will be considerable resistance. DO NOT Step onto or in front of device.

\ + -When pressure releases, reach below device and lift via underside in one clean motion. Mounting legs will automatically retract.

\ + -The device is now safe to handle.

\ + -Safely stow device in secure, moisture-free location, away from fire and blunt force. " diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm index bdc5254f13c9..cfa4e91e645c 100644 --- a/code/modules/projectiles/ammunition/_firing.dm +++ b/code/modules/projectiles/ammunition/_firing.dm @@ -8,7 +8,7 @@ spread = round((rand() - 0.5) * distro) else //Smart spread spread = round(1 - 0.5) * distro - if(!throw_proj(target, targloc, user, params, spread)) + if(!throw_proj(target, targloc, user, params, spread, fired_from)) return FALSE else if(isnull(BB)) @@ -45,7 +45,7 @@ reagents.trans_to(BB, reagents.total_volume, transfered_by = user) //For chemical darts/bullets qdel(reagents) -/obj/item/ammo_casing/proc/throw_proj(atom/target, turf/targloc, mob/living/user, params, spread) +/obj/item/ammo_casing/proc/throw_proj(atom/target, turf/targloc, mob/living/user, params, spread, atom/fired_from) var/turf/curloc if(user) curloc = get_turf(user) diff --git a/code/modules/projectiles/projectile/energy/misc.dm b/code/modules/projectiles/projectile/energy/misc.dm index 11f948ddb415..c9e113455387 100644 --- a/code/modules/projectiles/projectile/energy/misc.dm +++ b/code/modules/projectiles/projectile/energy/misc.dm @@ -27,18 +27,33 @@ /obj/projectile/energy/plasmabolt name = "ionized plasma" damage = 25 - armour_penetration = -10 + armour_penetration = -15 range = 8 damage_type = BURN icon_state = "blastwave" color = "#00ff00" hitsound = 'sound/weapons/sear.ogg' + var/heatpwr = 350 /obj/projectile/energy/plasmabolt/on_hit(atom/target, blocked = FALSE) . = ..() if(iscarbon(target)) - var/mob/living/carbon/M = target - M.adjust_bodytemperature(350) + var/mob/living/carbon/cooked = target + cooked.adjust_bodytemperature(heatpwr) if(prob(35)) - M.adjust_fire_stacks(15) - M.IgniteMob() + cooked.adjust_fire_stacks(15) + cooked.IgniteMob() + else + if(cooked.on_fire) + cooked.adjust_fire_stacks(10) + +/obj/projectile/energy/plasmabolt/shred + name = "high-energy ionized plasma" + damage = 35 + armour_penetration = -5 + range = 2 + damage_type = BURN + icon_state = "blastwave" + color = "#00ff00" + hitsound = 'sound/weapons/sear.ogg' + heatpwr = 700 diff --git a/icons/obj/landmine.dmi b/icons/obj/landmine.dmi index dd19fd9d3991a7ab6066d70f467cbd9d60140f3c..40b3e3e4ba127417b178ff6cfadf594d668fb3bf 100644 GIT binary patch literal 3328 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 RvgcZW)fHQ_W>XKue*h~EmDT_N diff --git a/icons/obj/world/landmine.dmi b/icons/obj/world/landmine.dmi new file mode 100644 index 0000000000000000000000000000000000000000..be8db65a3f5fdeb8d15450a93a800aaf2ff4f4de GIT binary patch literal 3377 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 D&Uv3_ literal 0 HcmV?d00001 From 869db8746118999b12b036cde9bf828e2b93a38e Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 22 Oct 2024 14:57:06 -0500 Subject: [PATCH 077/274] Automatic changelog generation for PR #2988 [ci skip] --- html/changelogs/AutoChangeLog-pr-2988.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2988.yml diff --git a/html/changelogs/AutoChangeLog-pr-2988.yml b/html/changelogs/AutoChangeLog-pr-2988.yml new file mode 100644 index 000000000000..de93fd889fcb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2988.yml @@ -0,0 +1,11 @@ +author: Sun-Soaked +changes: + - {rscadd: 'Directional Mines, implemented as Claymores.'} + - {rscadd: Mines now have World Icons} + - {balance: explosions now only strip to space when a tile is already damaged} + - {bugfix: Prox mines explode from slightly further away & no longer activate through + walls.} + - {bugfix: Multiple mines can no longer be stacked on a tile} + - {code_imp: 'fire_casing() can now be called by non-mobs, allowing objects to shoot + casings.'} +delete-after: true From e954bb00e69e4a5a7e4ee5b0a872f5a92d708e80 Mon Sep 17 00:00:00 2001 From: meem <75212565+meemofcourse@users.noreply.github.com> Date: Tue, 22 Oct 2024 16:57:32 -0300 Subject: [PATCH 078/274] ERT Update (#3383) ## About The Pull Request This pull request is focused on ERTs. It does not add any ERT subshuttles. It does the following: * Removes the /centcom series of outfits (ERTs, dsquaddies, inspectors, and so on) because the system wasn't a subtype of job outfits and was Old. It does not remove their content. * Adds the outpost_access boolean to ERTs, which determines if ERT members should be given access to the outpost. * Does some Misc things: * Subtype of CM-15 mag with inc ammo. * Subtype of CM-5 mag with rubbershot ammo. * Changes up the loot in the ramzi commando outfit a bit. * Adds a bunch of subtypes of webbings with ammo. * Smokebombs no longer have dead memes in their desc. * Adds and changes a bunch of fucking ERTs: * Indies ![indie_erts](https://github.com/user-attachments/assets/4a6f52ac-591d-4189-bede-89ab41799f2b) * Deathsquad was moved to here. Also, they get a janitor and pizza delivery team, plus an EVA variant of the EMT team. * Roumain ![srm_erts](https://github.com/user-attachments/assets/d5299176-def8-4988-8814-c844216f0dc3) * This was originally the primary focus of this PR. There's two teams to choose from: * A hunting party, composed of a Montagne, a Machinist, a Doctor, and some Hunters. * A defense militia, composed of a Montange, a Colligne, a Machinist, a Doctor, and some Hunters. The hunters this time have a variety of ouchy hurt guns, notably the Montange with a two-bore. * CLIP ![erts_clip](https://github.com/user-attachments/assets/839eb885-7da8-4645-ac1f-12a410bd895e) * CLIP kind of stole the spotlight from Roumain, with a whopping 6 teams to choose from: * Standard team, with a Sergeant, Corpsman, Gunner, Engineer, and the common Minutemen. EVA Variant included. * An inspector. For your Inspector ERT needs. * A BARD Field Team, with some BARD Field Agents, so you can prove that damn poster wrong. * A BARD Emergency Team, with Fire, Medical, Xenofauna Specialists and Master Sergeant, so you can prove that damn poster right. * A C-MM Military Police team, with a riot variant, so you can keep safe all of the above. * A C-MM Media team, so you can take photos of all of the above. * Inteq ![inteq_erts](https://github.com/user-attachments/assets/44807c24-1c5b-462c-bd5c-525ac62fc6e8) * Inteq has three ERTs to choose from: * A run-of-the-mill team, composed of a Vanguard, Artificer, Corpsman, and some Enforcers. EVA variant. * A honor guard team, standing in as a military police team and defending any notable figures. * A mothership investigator. Inspector ERT. * SolGov ![erts_solcon](https://github.com/user-attachments/assets/8b0cd506-69aa-4ab9-a0a8-7425f659cff6) * I didn't do much here. Inspector has some cooler gear, I suppose. * NGR ![syndie_erts](https://github.com/user-attachments/assets/02d90da3-f42a-4470-a3a9-a9db84fdf2f5) * The NGR ERT got updated to use their up-to-date gear, of particular note the Marksman and Grenadier. * They also get an official for Inspector ERT Needs. * Cybersun * Cybersun wasn't touched much. * Brand new Hardliner ERT. * Cybersun Representative, Inspector ERT. * PGF ![erts_gezena](https://github.com/user-attachments/assets/8e07f655-5222-4910-ba05-bc47bd28e252) * The PGF gets a standard team, with a Gunner, Medic, Engineer and Gunnery Sergeant. * There is a Federation Observer, which is the inspector ERT. * Ramzi * Ramzi has a single ERT to choose from. This basic team should not be underestimated; it has a Demolitionist with a rocket launcher, a Medic with combat simulants, a Leader with access to varying types of shotgun ammunition, and Cell Members with explosives to spare. If they know how to use their gear right, they might not die in a Vaquero airlock. * Fronties ![erts_fronties](https://github.com/user-attachments/assets/8d32dd49-a3a3-4f14-b04e-3af181a47e6b) * The Frontiersmen now have four ERTs to choose from: * A basic team, with Illestern Riflemen and an Officer. There's an unarmed variant if you want to equip them yourself. * A raiding team, with Riflemen, an Engineer, a Medic, and an Officer. Balanced, probably. * Shock troops, with a Sentry, a Flametrooper, Shock Medic, Shock Officer, and SKM Riflemen. Finally, the sentries see some use. * A randomized team. The chances and equipment were reviewed a bit so you have more chances of getting something Fun instead of Nothing. * NT ![nt_erts](https://github.com/user-attachments/assets/aaab7554-ca7b-4be3-b3a9-d8bad55d317a) * Practically every NT ERT has been killed off except a Vigilitas security team, an N+S delivery team, and CentCom's last stand - the inspector ERT. ## Why It's Good For The Game please play SRM ## Changelog :cl: add: A lot of ERTs and ERT remasters, including Fronties, Ramzi, PGF, NGR, Indies and whatnot del: Most Nanotrasen ERTs have been shelved pending assets del: Smokebomb randomized descriptions /:cl: --------- Signed-off-by: meem <75212565+meemofcourse@users.noreply.github.com> Co-authored-by: rye-rice <58402542+rye-rice@users.noreply.github.com> --- .../syndicate/syndicate_twinkleshine.dmm | 8 +- code/datums/ert.dm | 290 ----------- code/datums/ert/_ert.dm | 39 ++ code/datums/ert/ert_clip.dm | 59 +++ code/datums/ert/ert_frontiersmen.dm | 36 ++ code/datums/ert/ert_gezena.dm | 21 + code/datums/ert/ert_indies.dm | 50 ++ code/datums/ert/ert_inteq.dm | 32 ++ code/datums/ert/ert_nanotrasen.dm | 26 + code/datums/ert/ert_roumain.dm | 24 + code/datums/ert/ert_solgov.dm | 19 + code/datums/ert/ert_syndicate.dm | 73 +++ code/game/objects/items/grenades/smokebomb.dm | 9 +- code/game/objects/items/storage/belt.dm | 61 ++- code/modules/admin/verbs/one_click_antag.dm | 14 +- code/modules/admin/verbs/randomverbs.dm | 4 +- code/modules/antagonists/ert/ert.dm | 6 +- code/modules/antagonists/ert/frontiersmen.dm | 38 +- code/modules/antagonists/ert/gezena.dm | 29 ++ code/modules/antagonists/ert/indie.dm | 20 +- code/modules/antagonists/ert/inteq.dm | 38 +- code/modules/antagonists/ert/minutemen.dm | 95 ++-- code/modules/antagonists/ert/nanotrasen.dm | 191 ++----- code/modules/antagonists/ert/roumain.dm | 50 ++ code/modules/antagonists/ert/solgov.dm | 11 +- code/modules/antagonists/ert/syndicate.dm | 110 ++-- code/modules/client/preferences.dm | 2 +- code/modules/clothing/factions/clip.dm | 13 +- .../modules/clothing/factions/frontiersmen.dm | 50 +- code/modules/clothing/factions/gezena.dm | 25 + code/modules/clothing/factions/hardliners.dm | 6 + code/modules/clothing/factions/ngr.dm | 11 + code/modules/clothing/head/helmet.dm | 2 +- .../clothing/outfits/ert/frontiersmen_ert.dm | 118 +++-- .../clothing/outfits/ert/gezena_ert.dm | 87 ++++ .../modules/clothing/outfits/ert/indie_ert.dm | 103 +++- .../modules/clothing/outfits/ert/inteq_ert.dm | 118 ++++- .../clothing/outfits/ert/minutemen_ert.dm | 150 ++++-- .../clothing/outfits/ert/nanotrasen_ert.dm | 490 ++---------------- .../clothing/outfits/ert/roumain_ert.dm | 131 +++++ .../clothing/outfits/ert/solgov_ert.dm | 14 +- .../clothing/outfits/ert/syndicate_ert.dm | 295 ++++++++--- .../clothing/outfits/factions/minutemen.dm | 21 +- .../clothing/outfits/factions/roumain.dm | 2 +- code/modules/clothing/outfits/standard.dm | 84 --- .../mob/living/simple_animal/corpse.dm | 6 +- .../boxes_magazines/external/shotgun.dm | 6 + .../clip_lanchester/ballistics.dm | 17 +- .../manufacturer/scarborough/ballistics.dm | 11 +- shiptest.dme | 15 +- 50 files changed, 1833 insertions(+), 1297 deletions(-) delete mode 100644 code/datums/ert.dm create mode 100644 code/datums/ert/_ert.dm create mode 100644 code/datums/ert/ert_clip.dm create mode 100644 code/datums/ert/ert_frontiersmen.dm create mode 100644 code/datums/ert/ert_gezena.dm create mode 100644 code/datums/ert/ert_indies.dm create mode 100644 code/datums/ert/ert_inteq.dm create mode 100644 code/datums/ert/ert_nanotrasen.dm create mode 100644 code/datums/ert/ert_roumain.dm create mode 100644 code/datums/ert/ert_solgov.dm create mode 100644 code/datums/ert/ert_syndicate.dm create mode 100644 code/modules/antagonists/ert/gezena.dm create mode 100644 code/modules/antagonists/ert/roumain.dm create mode 100644 code/modules/clothing/outfits/ert/gezena_ert.dm create mode 100644 code/modules/clothing/outfits/ert/roumain_ert.dm diff --git a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm index 111dd2f22690..9b789add9c3e 100644 --- a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm +++ b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm @@ -1830,7 +1830,7 @@ name = "operative's locker" }, /obj/item/clothing/suit/armor/vest/syndie, -/obj/item/clothing/head/helmet/operator, +/obj/item/clothing/head/helmet/syndie, /obj/item/gun/ballistic/automatic/pistol/ringneck/no_mag, /obj/item/ammo_box/magazine/m10mm_ringneck, /obj/item/ammo_box/magazine/m10mm_ringneck, @@ -2095,7 +2095,7 @@ /area/ship/crew/canteen) "lZ" = ( /obj/item/clothing/suit/armor/vest/syndie, -/obj/item/clothing/head/helmet/operator, +/obj/item/clothing/head/helmet/syndie, /obj/item/gun/ballistic/automatic/pistol/ringneck/no_mag, /obj/item/ammo_box/magazine/m10mm_ringneck, /obj/item/ammo_box/magazine/m10mm_ringneck, @@ -3310,7 +3310,7 @@ name = "operative's locker" }, /obj/item/clothing/suit/armor/vest/syndie, -/obj/item/clothing/head/helmet/operator, +/obj/item/clothing/head/helmet/syndie, /obj/item/gun/ballistic/automatic/pistol/ringneck/no_mag, /obj/item/ammo_box/magazine/m10mm_ringneck, /obj/item/ammo_box/magazine/m10mm_ringneck, @@ -7123,7 +7123,7 @@ name = "operative's locker" }, /obj/item/clothing/suit/armor/vest/syndie, -/obj/item/clothing/head/helmet/operator, +/obj/item/clothing/head/helmet/syndie, /obj/item/gun/ballistic/automatic/pistol/ringneck/no_mag, /obj/item/ammo_box/magazine/m10mm_ringneck, /obj/item/ammo_box/magazine/m10mm_ringneck, diff --git a/code/datums/ert.dm b/code/datums/ert.dm deleted file mode 100644 index 0c5227e41074..000000000000 --- a/code/datums/ert.dm +++ /dev/null @@ -1,290 +0,0 @@ -/datum/ert - var/mobtype = /mob/living/carbon/human - var/team = /datum/team/ert - var/opendoors = FALSE - var/leader_role = /datum/antagonist/ert/commander - var/enforce_human = FALSE - var/roles = list(/datum/antagonist/ert/security, /datum/antagonist/ert/medic, /datum/antagonist/ert/engineer) //List of possible roles to be assigned to ERT members. - var/rename_team - var/code - var/mission = "Assist your employers in achieving their goals. Protect corporate assets." - var/teamsize = 5 - var/polldesc - /// If TRUE, gives the team members "[role] [random last name]" style names - var/random_names = FALSE - /// If TRUE, special slots (that are not the leader) will use a predefined limit - var/limit_slots = FALSE - /// If TRUE, the admin who created the response team will be spawned in the briefing room (or in the shuttle) in their preferred briefing outfit (assuming they're a ghost) - var/spawn_admin = FALSE - /// If TRUE, we try and pick one of the most experienced players who volunteered to fill the leader slot - var/leader_experience = TRUE - /// A custom map template to spawn the ERT at. If use_custom_shuttle is FALSE, the ERT will spawn on foot. By default, a Kunai-Class. - var/datum/map_template/ert_template = /datum/map_template/shuttle/subshuttles/kunai - /// If we should actually _use_ the ert_template custom shuttle - var/use_custom_shuttle = TRUE - /// If TRUE, the ERT will spawn at the outpost. If use_custom_shuttle is also TRUE, the shuttle will be docked at the outpost - var/spawn_at_outpost = TRUE - -// Nanotrasen - -/datum/ert/New() - if (!polldesc) - polldesc = "a Code [code] Nanotrasen Emergency Response Team" - -/datum/ert/blue - opendoors = FALSE - code = "Blue" - -/datum/ert/amber - code = "Amber" - -/datum/ert/red - leader_role = /datum/antagonist/ert/commander/red - roles = list(/datum/antagonist/ert/security/red, /datum/antagonist/ert/medic/red, /datum/antagonist/ert/engineer/red) - code = "Red" - -/datum/ert/deathsquad - roles = list(/datum/antagonist/ert/deathsquad) - leader_role = /datum/antagonist/ert/deathsquad/leader - rename_team = "Deathsquad" - code = "Delta" - mission = "Leave no witnesses." - polldesc = "an elite Nanotrasen Strike Team" - -/datum/ert/marine - leader_role = /datum/antagonist/ert/marine - roles = list(/datum/antagonist/ert/marine/security, /datum/antagonist/ert/marine/engineer = 1, /datum/antagonist/ert/marine/medic = 1) - rename_team = "Marine Squad" - polldesc = "an 'elite' Nanotrasen Strike Team" - opendoors = FALSE - -/datum/ert/centcom_official - code = "Green" - teamsize = 1 - opendoors = FALSE - leader_role = /datum/antagonist/ert/official - roles = list(/datum/antagonist/ert/official) - rename_team = "CentCom Officials" - polldesc = "a CentCom Official" - random_names = FALSE - leader_experience = FALSE - spawn_at_outpost = FALSE - ert_template = /datum/map_template/shuttle/subshuttles/ancon - -/datum/ert/centcom_official/New() - mission = "Conduct a routine review of [station_name()]'s vessels." - -/datum/ert/janitor - roles = list(/datum/antagonist/ert/janitor, /datum/antagonist/ert/janitor/heavy) - leader_role = /datum/antagonist/ert/janitor/heavy - teamsize = 4 - opendoors = FALSE - rename_team = "Janitor" - mission = "Clean up EVERYTHING." - polldesc = "a Nanotrasen Janitorial Response Team" - -/datum/ert/intern - roles = list(/datum/antagonist/ert/intern) - leader_role = /datum/antagonist/ert/intern/leader - teamsize = 7 - opendoors = FALSE - spawn_at_outpost = FALSE - rename_team = "Horde of Interns" - mission = "Assist in conflict resolution." - polldesc = "an unpaid internship opportunity with Nanotrasen" - ert_template = /datum/map_template/shuttle/subshuttles/ancon - -/datum/ert/intern/unarmed - roles = list(/datum/antagonist/ert/intern/unarmed) - leader_role = /datum/antagonist/ert/intern/leader/unarmed - rename_team = "Unarmed Horde of Interns" - -/datum/ert/loss_prevention - code = "Light Blue" - teamsize = 4 - opendoors = FALSE - leader_role = /datum/antagonist/ert/lp/lieutenant - roles = list(/datum/antagonist/ert/lp, /datum/antagonist/ert/lp/medic = 1, /datum/antagonist/ert/lp/engineer = 1) - rename_team = "Loss Prevention Team" - polldesc = "a Nanotrasen loss prevention team" - -// Inteq - -/datum/ert/inteq - teamsize = 4 - opendoors = FALSE - leader_role = /datum/antagonist/ert/inteq/leader - roles = list(/datum/antagonist/ert/inteq) - mission = "Carry out your contract." - rename_team = "Generic Inteq Team" - polldesc = "an Inteq emergency team" - ert_template = /datum/map_template/shuttle/subshuttles/anvil - -// SolGov - -/datum/ert/solgov - teamsize = 4 - opendoors = FALSE - leader_role = /datum/antagonist/ert/solgov - roles = list(/datum/antagonist/ert/solgov) - mission = "Intervene in Solarian interests." - rename_team = "SolGov Sonnensoldner Team" - polldesc = "a SolGov mercenary team" - -/datum/ert/solgov/inspector - teamsize = 1 - leader_role = /datum/antagonist/ert/official/solgov - roles = list(/datum/antagonist/ert/official/solgov) - rename_team = "SolGov Inspector" - polldesc = "a solarian inspector" - spawn_at_outpost = FALSE - -/datum/ert/solgov/inspector/New() - mission = "Conduct a routine review on [station_name()]'s vessels." - -// CLIP - -/datum/ert/minutemen - teamsize = 5 - opendoors = FALSE - leader_role = /datum/antagonist/ert/minutemen/leader - /// TODO: figure out a way to fill in at least one rifleman first - roles = list(/datum/antagonist/ert/minutemen, /datum/antagonist/ert/minutemen/corpsman = 1, /datum/antagonist/ert/minutemen/engi = 1, /datum/antagonist/ert/minutemen/gunner = 1) - mission = "Keep the peace in sector affairs" - rename_team = "CLIP Minutemen Squadron" - polldesc = "a CLIP Minutemen squadron" - ert_template = /datum/map_template/shuttle/subshuttles/crux - -//quick infantry - for use when you need to throw minutemen somewhere fast but dont want ANY preperation at all -/datum/ert/minutemen/quick - teamsize = 4 - opendoors = FALSE - leader_role = /datum/antagonist/ert/minutemen/leader - roles = list(/datum/antagonist/ert/minutemen) - mission = "Resolve the conflict at hand" - polldesc = "a CLIP Minutemen emergency team" - random_names = TRUE - - -/datum/ert/minutemen/bard - leader_role = /datum/antagonist/ert/minutemen/bard/leader - roles = list(/datum/antagonist/ert/minutemen/bard, /datum/antagonist/ert/minutemen/bard/medic = 1, /datum/antagonist/ert/minutemen/bard/flamer = 1) - rename_team = "CLIP Minutemen BARD Squadron" - polldesc = "a CLIP Minutemen biohazard removal team" - -/datum/ert/minutemen/riot - teamsize = 6 - leader_role = /datum/antagonist/ert/minutemen/riot/leader - roles = list(/datum/antagonist/ert/minutemen/riot) - rename_team = "CLIP Minutemen Riot Control Squadron" - polldesc = "a CLIP Minutemen riot control team" - -/datum/ert/minutemen/eva - leader_role = /datum/antagonist/ert/minutemen/eva/leader - roles = list(/datum/antagonist/ert/minutemen/eva) - -/datum/ert/minutemen/inspector - teamsize = 1 - leader_role = /datum/antagonist/ert/official/minutemen - roles = list(/datum/antagonist/ert/official/minutemen) - rename_team = "CLIP Minutemen GOLD Inspector" - polldesc = "a CLIP Minutemen inspector" - -// Syndicate - -/datum/ert/syndicate - teamsize = 4 - opendoors = FALSE - leader_role = /datum/antagonist/ert/syndicate/leader - roles = list(/datum/antagonist/ert/syndicate) - mission = "Serve the interests of the Syndicate." - rename_team = "Generic Syndicate Team" - polldesc = "a Syndicate emergency team" - spawn_at_outpost = FALSE - -/datum/ert/syndicate/gorlex - leader_role = /datum/antagonist/ert/syndicate/gorlex/leader - roles = list(/datum/antagonist/ert/syndicate/gorlex, /datum/antagonist/ert/syndicate/gorlex/pointman = 1, /datum/antagonist/ert/syndicate/gorlex/medic = 1, /datum/antagonist/ert/syndicate/gorlex/sniper = 1) - mission = "Serve the interests of the 2nd Battlegroup." - rename_team = "2nd Battlegroup Squad" - polldesc = "a loyalist Gorlex squad" - -/datum/ert/syndicate/cybersun - leader_role = /datum/antagonist/ert/syndicate/cybersun/leader - roles = list(/datum/antagonist/ert/syndicate/cybersun) - mission = "Serve the interests of CyberSun." - rename_team = "Cybersun Commando Team" - polldesc = "a Cybersun Commando team" - -/datum/ert/syndicate/cybersun/medic - leader_role = /datum/antagonist/ert/syndicate/cybersun/medic/leader - roles = list(/datum/antagonist/ert/syndicate/cybersun/medic) - mission = "Assist CyberSun clients." - rename_team = "Cybersun Medical Intervention Team" - polldesc = "a Cybersun paramedic team" - ert_template = /datum/map_template/shuttle/subshuttles/runner - -/datum/ert/syndicate/inspector - teamsize = 1 - leader_role = /datum/antagonist/ert/official/syndicate - roles = list(/datum/antagonist/ert/official/syndicate) - rename_team = "Syndicate Inspector" - polldesc = "a syndicate inspector" - spawn_at_outpost = FALSE - -/datum/ert/syndicate/inspector/New() - mission = "Conduct a routine review on [station_name()]'s vessels." - -// Frontiersmen -/datum/ert/frontier - teamsize = 4 - opendoors = FALSE - leader_role = /datum/antagonist/ert/frontier/leader - roles = list(/datum/antagonist/ert/frontier) - rename_team = "Generic Frontiersmen Team" - mission = "Pillage in the name of the Frontiersmen." - polldesc = "an armed group of pirates" - random_names = TRUE - leader_experience = FALSE - spawn_at_outpost = FALSE - ert_template = /datum/map_template/shuttle/subshuttles/sugarcube - -/datum/ert/frontier/random - teamsize = 8 - leader_role = /datum/antagonist/ert/frontier/random - roles = list(/datum/antagonist/ert/frontier/random) - rename_team = "Randomly Equipped Frontiersmen Team" - -/datum/ert/frontier/assault - leader_role = /datum/antagonist/ert/frontier/leader - roles = list(/datum/antagonist/ert/frontier/better, /datum/antagonist/ert/frontier/medic, /datum/antagonist/ert/frontier/engineer) - rename_team = "Assault Frontiersmen Team" - polldesc = "a well armed squad of pirates" - -/datum/ert/frontier/unarmed //use for finer control of pirate's armaments - leader_role = /datum/antagonist/ert/frontier/leader/unnarmed - roles = list(/datum/antagonist/ert/frontier/unnarmed) - rename_team = "Unnarmed Frontiersmen Team" - polldesc = "a custom squad of pirates" - -/datum/ert/independent - teamsize = 3 - opendoors = FALSE - leader_role = /datum/antagonist/ert/independent - roles = list(/datum/antagonist/ert/independent) - rename_team = "Security Independent Team" - polldesc = "an independent security team" - -/datum/ert/independent/emt - teamsize = 4 - leader_role = /datum/antagonist/ert/independent/emt - roles = list(/datum/antagonist/ert/independent/emt) - rename_team = "Medical Independent Team" - polldesc = "an independent medical response team" - -/datum/ert/independent/firefighter - teamsize = 5 - leader_role = /datum/antagonist/ert/independent/firefighter/leader - roles = list(/datum/antagonist/ert/independent/firefighter, /datum/antagonist/ert/independent/firefighter/medic) - rename_team = "Independent Firefighter Team" - polldesc = "an independent firefighting team" diff --git a/code/datums/ert/_ert.dm b/code/datums/ert/_ert.dm new file mode 100644 index 000000000000..3618d99dee24 --- /dev/null +++ b/code/datums/ert/_ert.dm @@ -0,0 +1,39 @@ +/datum/ert + var/mobtype = /mob/living/carbon/human + var/team = /datum/team/ert + // opens a special subtype of blastdoor. also a legacy setting that will probably not work with multiple outposts + var/opendoors = FALSE + var/leader_role = /datum/antagonist/ert/independent + // makes members spawn as humans. mostly a legacy setting but maybe you'll find it useful + var/enforce_human = FALSE + // list of possible roles to be assigned to ERT members. if it has a value (e.g. datum/antagonist/myspecialguy = 1), the role will be limited + var/roles = list(/datum/antagonist/ert/independent) + // this will appear in the end of round report and the antagonist team list + var/rename_team = "Emergency Response Team" + // this will be shown to the ERT members to be put in their memory + var/mission = "Make effective use of your tools." + // determines the size of the team. make sure there's enough size for all the special roles you may add + var/teamsize = 5 + // this will be shown to ghosts as "Would you like to be considered for [polldesc]?" + var/polldesc = "an emergency response team" + /// If TRUE, gives the team members "[role] [random last name]" style names + var/random_names = FALSE + /// If TRUE, special slots (that are not the leader) will use a predefined limit + var/limit_slots = TRUE + /// If TRUE, the admin who created the response team will be spawned in the briefing room (or in the shuttle) in their preferred briefing outfit (assuming they're a ghost) + var/spawn_admin = FALSE + /// If TRUE, we try and pick one of the most experienced players who volunteered to fill the leader slot + var/leader_experience = TRUE + /// A custom map template to spawn the ERT at. If use_custom_shuttle is FALSE, the ERT will spawn on foot. By default, a Kunai-Class. + var/datum/map_template/ert_template = /datum/map_template/shuttle/subshuttles/kunai + /// If we should actually _use_ the ert_template custom shuttle + var/use_custom_shuttle = TRUE + /// If TRUE, the ERT will spawn at the outpost. If use_custom_shuttle is also TRUE, the shuttle will be docked at the outpost + var/spawn_at_outpost = TRUE + /// should we give the ERT access to the outpost + var/outpost_access = FALSE + +/datum/ert/New() + . = ..() + if(!polldesc) + polldesc = "uhm uhh uhmmmm" diff --git a/code/datums/ert/ert_clip.dm b/code/datums/ert/ert_clip.dm new file mode 100644 index 000000000000..79c4c7493ede --- /dev/null +++ b/code/datums/ert/ert_clip.dm @@ -0,0 +1,59 @@ +/datum/ert/minutemen + teamsize = 5 + leader_role = /datum/antagonist/ert/minutemen/leader + /// TODO: figure out a way to fill in at least one rifleman first + roles = list(/datum/antagonist/ert/minutemen, /datum/antagonist/ert/minutemen/corpsman = 1, /datum/antagonist/ert/minutemen/engi = 1, /datum/antagonist/ert/minutemen/gunner = 1) + mission = "Keep the peace in sector affairs." + rename_team = "CLIP Minutemen Infantry" + polldesc = "a CLIP Minutemen squadron" + ert_template = /datum/map_template/shuttle/subshuttles/crux + +/datum/ert/minutemen/eva + leader_role = /datum/antagonist/ert/minutemen/leader/eva + roles = list(/datum/antagonist/ert/minutemen/eva) + +/datum/ert/minutemen/inspector + teamsize = 1 + leader_role = /datum/antagonist/ert/minutemen/inspector + roles = list(/datum/antagonist/ert/minutemen/inspector) + rename_team = "CLIP Minutemen GOLD Inspector" + polldesc = "a CLIP Minutemen inspector" + +/datum/ert/minutemen/inspector/guarded + teamsize = 3 + roles = list(/datum/antagonist/ert/minutemen/military_police) + +/datum/ert/minutemen/bard + teamsize = 4 + leader_role = /datum/antagonist/ert/minutemen/bard + roles = list(/datum/antagonist/ert/minutemen/bard) + rename_team = "BARD Biohazard Squadron" + polldesc = "a CLIP BARD biohazard team" + +/datum/ert/minutemen/bard/emergency + leader_role = /datum/antagonist/ert/minutemen/bard/emergency/leader + roles = list(/datum/antagonist/ert/minutemen/bard/emergency, /datum/antagonist/ert/minutemen/bard/medic = 1, /datum/antagonist/ert/minutemen/bard/flamer = 1) + rename_team = "BARD Emergency Squadron" + polldesc = "an emergency CLIP BARD team" + +/datum/ert/minutemen/military_police + teamsize = 4 + leader_role = /datum/antagonist/ert/minutemen/military_police/leader + roles = list(/datum/antagonist/ert/minutemen/military_police) + rename_team = "C-MM Military Police" + polldesc = "a C-MM military police team" + +/datum/ert/minutemen/military_police/riot + leader_role = /datum/antagonist/ert/minutemen/military_police/leader/riot + roles = list(/datum/antagonist/ert/minutemen/military_police/riot) + rename_team = "C-MM Riot Control Team" + polldesc = "a C-MM riot control team" + +/datum/ert/minutemen/journalist + teamsize = 3 + leader_role = /datum/antagonist/ert/minutemen/correspondant + roles = list(/datum/antagonist/ert/minutemen/correspondant) + mission = "Inform the public of the frontier's news." + rename_team = "C-MM Correspondants" + polldesc = "a C-MM media team" + ert_template = /datum/map_template/shuttle/subshuttles/kunai diff --git a/code/datums/ert/ert_frontiersmen.dm b/code/datums/ert/ert_frontiersmen.dm new file mode 100644 index 000000000000..58934fa30a1d --- /dev/null +++ b/code/datums/ert/ert_frontiersmen.dm @@ -0,0 +1,36 @@ +/datum/ert/frontier + teamsize = 4 + opendoors = FALSE + leader_role = /datum/antagonist/ert/frontier/leader + roles = list(/datum/antagonist/ert/frontier) + rename_team = "Generic Frontiersmen Team" + mission = "Pillage in the name of the Frontiersmen." + polldesc = "a group of frontiersmen" + random_names = TRUE + leader_experience = FALSE + spawn_at_outpost = FALSE + ert_template = /datum/map_template/shuttle/subshuttles/brawler + +/datum/ert/frontier/unarmed // use for finer control of pirate's armaments + leader_role = /datum/antagonist/ert/frontier/leader/unarmed + roles = list(/datum/antagonist/ert/frontier/unarmed) + rename_team = "Unarmed Frontiersmen Team" + +/datum/ert/frontier/random + teamsize = 8 // the second takes the rifle and shoots + leader_role = /datum/antagonist/ert/frontier/random + roles = list(/datum/antagonist/ert/frontier/random) + rename_team = "Randomly Equipped Frontiersmen Team" + +/datum/ert/frontier/raiders + leader_role = /datum/antagonist/ert/frontier/leader + roles = list(/datum/antagonist/ert/frontier/skm, /datum/antagonist/ert/frontier/medic = 1, /datum/antagonist/ert/frontier/engineer = 1) + rename_team = "Assault Frontiersmen Team" + polldesc = "a well armed squad of pirates" + +/datum/ert/frontier/shock + teamsize = 6 + leader_role = /datum/antagonist/ert/frontier/leader/heavy + roles = list(/datum/antagonist/ert/frontier/skm, /datum/antagonist/ert/frontier/sentry = 1, /datum/antagonist/ert/frontier/flamer = 1, /datum/antagonist/ert/frontier/medic/heavy = 1, /datum/antagonist/ert/frontier/engineer = 1) + rename_team = "Frontiersmen Shock Troops" + polldesc = "a frontiersmen shock troop squadron" diff --git a/code/datums/ert/ert_gezena.dm b/code/datums/ert/ert_gezena.dm new file mode 100644 index 000000000000..4e0057a567cd --- /dev/null +++ b/code/datums/ert/ert_gezena.dm @@ -0,0 +1,21 @@ +/datum/ert/gezena + teamsize = 4 + leader_role = /datum/antagonist/ert/gezena/leader + roles = list(/datum/antagonist/ert/gezena, /datum/antagonist/ert/gezena/gunner, /datum/antagonist/ert/gezena/medic, /datum/antagonist/ert/gezena/engineer) + rename_team = "Gezenan Heavy Response Team" + polldesc = "a PGF response team" + ert_template = /datum/map_template/shuttle/subshuttles/nail + +/datum/ert/gezena/inspector + teamsize = 1 + leader_role = /datum/antagonist/ert/gezena/inspector + roles = list(/datum/antagonist/ert/gezena/inspector) + rename_team = "Gezenan Federation Observer" + polldesc = "a PGF inspector" + +/datum/ert/gezena/inspector/guarded + teamsize = 3 + roles = list(/datum/antagonist/ert/gezena) + +/datum/ert/gezena/inspector/New() + mission = "Conduct a routine review on [station_name()]'s Federation vessels." diff --git a/code/datums/ert/ert_indies.dm b/code/datums/ert/ert_indies.dm new file mode 100644 index 000000000000..a4fc323b9b83 --- /dev/null +++ b/code/datums/ert/ert_indies.dm @@ -0,0 +1,50 @@ +/datum/ert/independent + teamsize = 4 + opendoors = FALSE + leader_role = /datum/antagonist/ert/independent + roles = list(/datum/antagonist/ert/independent) + rename_team = "Security Independent Team" + polldesc = "an independent security team" + +/datum/ert/independent/emt + teamsize = 3 + leader_role = /datum/antagonist/ert/independent/emt + roles = list(/datum/antagonist/ert/independent/emt) + rename_team = "Medical Independent Team" + polldesc = "an independent medical response team" + +/datum/ert/independent/emt/eva + leader_role = /datum/antagonist/ert/independent/emt/eva + roles = list(/datum/antagonist/ert/independent/emt/eva) + +/datum/ert/independent/firefighter + teamsize = 5 + leader_role = /datum/antagonist/ert/independent/firefighter/leader + roles = list(/datum/antagonist/ert/independent/firefighter, /datum/antagonist/ert/independent/firefighter/medic) + rename_team = "Independent Firefighter Team" + polldesc = "an independent firefighting team" + +/datum/ert/independent/engineer + leader_role = /datum/antagonist/ert/independent/technician + roles = list(/datum/antagonist/ert/independent/technician) + rename_team = "Engineering Independent Team" + polldesc = "an independent engineering team" + +/datum/ert/independent/janitor + leader_role = /datum/antagonist/ert/independent/janitor + roles = list(/datum/antagonist/ert/independent/janitor) + rename_team = "Independent Janitorial Team" + polldesc = "an independent clean-up team" + +/datum/ert/independent/pizza + leader_role = /datum/antagonist/ert/independent/pizza + roles = list(/datum/antagonist/ert/independent/pizza) + rename_team = "Independent Pizza Delivery Team" + polldesc = "a pizza delivery job" + +/datum/ert/independent/deathsquad + teamsize = 2 + leader_role = /datum/antagonist/ert/independent/deathsquad + roles = list(/datum/antagonist/ert/independent/deathsquad) + rename_team = "Death Commando Team" + polldesc = "a death squadron team" diff --git a/code/datums/ert/ert_inteq.dm b/code/datums/ert/ert_inteq.dm new file mode 100644 index 000000000000..a1152688ef28 --- /dev/null +++ b/code/datums/ert/ert_inteq.dm @@ -0,0 +1,32 @@ +/datum/ert/inteq + teamsize = 4 + leader_role = /datum/antagonist/ert/inteq/leader + roles = list(/datum/antagonist/ert/inteq, /datum/antagonist/ert/inteq/medic, /datum/antagonist/ert/inteq/engineer) + mission = "Carry out your contract." + rename_team = "Inteq Assault Team" + polldesc = "an Inteq assault team" + ert_template = /datum/map_template/shuttle/subshuttles/anvil + +/datum/ert/inteq/eva + leader_role = /datum/antagonist/ert/inteq/leader/eva + roles = list(/datum/antagonist/ert/inteq/eva, /datum/antagonist/ert/inteq/medic/eva, /datum/antagonist/ert/inteq/engineer/eva) + +/datum/ert/inteq/inspector + teamsize = 1 + leader_role = /datum/antagonist/ert/inteq/inspector + roles = list(/datum/antagonist/ert/inteq/inspector) + mission = "Assure Inteq's quality on the frontier." + rename_team = "Inteq Investigator Team" + polldesc = "an Inteq investigator" + +/datum/ert/inteq/inspector/guarded + teamsize = 3 + leader_role = /datum/antagonist/ert/inteq/inspector + roles = list(/datum/antagonist/ert/inteq/honor_guard) + +/datum/ert/inteq/honor_guard + teamsize = 3 + leader_role = /datum/antagonist/ert/inteq/honor_guard + roles = list(/datum/antagonist/ert/inteq/honor_guard) + rename_team = "Inteq Honor Guard" + polldesc = "an Inteq honor guardsman team" diff --git a/code/datums/ert/ert_nanotrasen.dm b/code/datums/ert/ert_nanotrasen.dm new file mode 100644 index 000000000000..79b2adf4bc8d --- /dev/null +++ b/code/datums/ert/ert_nanotrasen.dm @@ -0,0 +1,26 @@ +/datum/ert/nanotrasen + teamsize = 4 + leader_role = /datum/antagonist/ert/nanotrasen/leader + roles = list(/datum/antagonist/ert/nanotrasen) + mission = "Work for the corporate values of Nanotrasen." + rename_team = "Vigilitas Security Team" + polldesc = "a Vigilitas security team" + +// /datum/ert/nanotrasen/emergency +// leader_role = /datum/antagonist/ert/nanotrasen/leader/emergency +// roles = list(/datum/antagonist/ert/nanotrasen/emergency, /datum/antagonist/ert/nanotrasen/emergency/engineer=1, /datum/antagonist/ert/nanotrasen/emergency/medic=1) +// rename_team = "Vigilitas Distress Response Team" +// polldesc = "a Vigilitas emergency team" + +/datum/ert/nanotrasen/delivery + leader_role = /datum/antagonist/ert/nanotrasen/delivery + roles = list(/datum/antagonist/ert/nanotrasen/delivery) + rename_team = "N+S Delivery Team" + polldesc = "a N+S delivery job" + +/datum/ert/nanotrasen/inspector + teamsize = 1 + leader_role = /datum/antagonist/ert/nanotrasen/inspector + roles = list(/datum/antagonist/ert/nanotrasen/inspector) + rename_team = "Nanotrasen Central Command Liaison" + polldesc = "a NT CentCom inspector" diff --git a/code/datums/ert/ert_roumain.dm b/code/datums/ert/ert_roumain.dm new file mode 100644 index 000000000000..5c33bdd39cb6 --- /dev/null +++ b/code/datums/ert/ert_roumain.dm @@ -0,0 +1,24 @@ +/datum/ert/srm + teamsize = 5 + leader_role = /datum/antagonist/ert/roumain/leader + roles = list(/datum/antagonist/ert/roumain/medic = 1, /datum/antagonist/ert/roumain/engineer = 1, /datum/antagonist/ert/roumain) + mission = "Serve the Church of Saint Roumain." + rename_team = "Roumain Hunting Party" + polldesc = "a Roumain hunting party" + +/datum/ert/srm/battle + teamsize = 7 + leader_role = /datum/antagonist/ert/roumain/leader/twobore // if you haven't heard of the srm you sure fucking will now + roles = list( + /datum/antagonist/ert/roumain/leader/colligne = 1, + /datum/antagonist/ert/roumain/medic = 1, + /datum/antagonist/ert/roumain/engineer = 1, + /datum/antagonist/ert/roumain/firestorm = 1, + /datum/antagonist/ert/roumain/scout = 1, + /datum/antagonist/ert/roumain/vickland + ) + mission = "Defend the Church of Saint Roumain presence in this sector." + rename_team = "Roumain Militia Defense Team" + polldesc = "a Roumain militia defense team" + +// ashhands one day maybes diff --git a/code/datums/ert/ert_solgov.dm b/code/datums/ert/ert_solgov.dm new file mode 100644 index 000000000000..4d0cf8b83011 --- /dev/null +++ b/code/datums/ert/ert_solgov.dm @@ -0,0 +1,19 @@ +/datum/ert/solgov + teamsize = 4 + opendoors = FALSE + leader_role = /datum/antagonist/ert/solgov + roles = list(/datum/antagonist/ert/solgov) + mission = "Intervene in Solarian interests." + rename_team = "SolGov Sonnensoldner Team" + polldesc = "a SolGov mercenary team" + +/datum/ert/solgov/inspector + teamsize = 1 + leader_role = /datum/antagonist/ert/solgov/inspector + roles = list(/datum/antagonist/ert/solgov/inspector) + rename_team = "SolGov Inspector" + polldesc = "a solarian inspector" + spawn_at_outpost = FALSE + +/datum/ert/solgov/inspector/New() + mission = "Conduct a routine review on [station_name()]'s vessels." diff --git a/code/datums/ert/ert_syndicate.dm b/code/datums/ert/ert_syndicate.dm new file mode 100644 index 000000000000..77558a5bc57e --- /dev/null +++ b/code/datums/ert/ert_syndicate.dm @@ -0,0 +1,73 @@ +// stand-ins + +/datum/ert/syndicate + teamsize = 4 + leader_role = /datum/antagonist/ert/syndicate/leader + roles = list(/datum/antagonist/ert/syndicate) + mission = "Serve the interests of the Syndicate." + rename_team = "Generic Syndicate Team" + polldesc = "a Syndicate emergency team" + spawn_at_outpost = FALSE + +/datum/ert/syndicate/inspector + teamsize = 1 + leader_role = /datum/antagonist/ert/syndicate/inspector + roles = list(/datum/antagonist/ert/syndicate/inspector) + rename_team = "Syndicate Inspector" + polldesc = "a syndicate ACLF inspector" + +/datum/ert/syndicate/inspector/New() + mission = "Conduct a routine review on [station_name()]'s Coalition vessels." + +// new gorlex republic + +/datum/ert/syndicate/ngr + teamsize = 5 + leader_role = /datum/antagonist/ert/syndicate/ngr/leader + roles = list(/datum/antagonist/ert/syndicate/ngr, /datum/antagonist/ert/syndicate/ngr/grenadier = 1, /datum/antagonist/ert/syndicate/ngr/medic = 1, /datum/antagonist/ert/syndicate/ngr/sniper = 1) + mission = "Uphold the sovereignty of the New Gorlex Republic." + rename_team = "Gorlex Republic Detachment" + polldesc = "a Gorlex Republic battle squad" + +/datum/ert/syndicate/ngr/inspector + teamsize = 1 + leader_role = /datum/antagonist/ert/syndicate/ngr/inspector + roles = list(/datum/antagonist/ert/syndicate/ngr/inspector) + rename_team = "Gorlex Republic Official" + polldesc = "a Gorlex Republic inspector" + +/datum/ert/syndicate/ngr/inspector/guarded + teamsize = 3 + leader_role = /datum/antagonist/ert/syndicate/ngr/inspector + roles = list(/datum/antagonist/ert/syndicate/ngr) + +// cybersun + +/datum/ert/syndicate/cybersun + leader_role = /datum/antagonist/ert/syndicate/cybersun/leader + roles = list(/datum/antagonist/ert/syndicate/cybersun) + mission = "Serve the interests of CyberSun." + rename_team = "Cybersun Commando Team" + polldesc = "a Cybersun Commando team" + +/datum/ert/syndicate/cybersun/medic + leader_role = /datum/antagonist/ert/syndicate/cybersun/medic/leader + roles = list(/datum/antagonist/ert/syndicate/cybersun/medic) + mission = "Assist CyberSun clients." + rename_team = "Cybersun Medical Intervention Team" + polldesc = "a Cybersun paramedic team" + ert_template = /datum/map_template/shuttle/subshuttles/runner + +/datum/ert/syndicate/hardliners + leader_role = /datum/antagonist/ert/syndicate/hardliner/leader + roles = list(/datum/antagonist/ert/syndicate/hardliner, /datum/antagonist/ert/syndicate/hardliner/medic = 1, /datum/antagonist/ert/syndicate/hardliner/engineer = 1) + mission = "Serve the interests of CyberSun." + rename_team = "Hardliner Element" + polldesc = "a Hardliner attack team" + +/datum/ert/syndicate/ramzi + leader_role = /datum/antagonist/ert/syndicate/ramzi/leader + roles = list(/datum/antagonist/ert/syndicate/ramzi, /datum/antagonist/ert/syndicate/ramzi/medic = 1, /datum/antagonist/ert/syndicate/ramzi/demolitionist = 1) + mission = "Make Ramzi proud." + rename_team = "Ramzi Cell" + polldesc = "a Ramzi pirate team" diff --git a/code/game/objects/items/grenades/smokebomb.dm b/code/game/objects/items/grenades/smokebomb.dm index dfea3fb87829..c29a00a83901 100644 --- a/code/game/objects/items/grenades/smokebomb.dm +++ b/code/game/objects/items/grenades/smokebomb.dm @@ -1,17 +1,10 @@ /obj/item/grenade/smokebomb name = "smoke grenade" - desc = "Real bruh moment if you ever see this. Probably tell a c*der or something." + desc = "A smoke grenade pattern, used to screen unit movements, and signal landing zones, widely used by military forces on the frontier and beyond." icon = 'icons/obj/grenade.dmi' icon_state = "smokewhite" item_state = "smoke" slot_flags = ITEM_SLOT_BELT - ///It's extremely important to keep this list up to date. It helps to generate the insightful description of the smokebomb. EDIT: honestly fuck you nemvar. go directly to jail and do not collect 200 dollars - var/static/list/bruh_moment = list("Dank", "Hip", "Lit", "Based", "Robust", "Bruh") - -///Here we generate the extremely insightful description. -/obj/item/grenade/smokebomb/Initialize() - . = ..() - desc = "The word '[pick(bruh_moment)]' is scribbled on it in crayon." ///Here we generate some smoke and also damage blobs??? for some reason. Honestly not sure why we do that. /obj/item/grenade/smokebomb/prime() diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index ed5ecc0d2717..7bb42ef321b4 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -259,6 +259,15 @@ new /obj/item/hypospray/mkii(src) update_appearance() +/obj/item/storage/belt/medical/webbing/combat/PopulateContents() + . = ..() + new /obj/item/reagent_containers/hypospray/medipen/stimpack/traitor(src) + new /obj/item/reagent_containers/hypospray/medipen/stimpack/traitor(src) + new /obj/item/reagent_containers/medigel/silver_sulf(src) + new /obj/item/reagent_containers/medigel/styptic(src) + new /obj/item/stack/medical/gauze/twelve(src) + new /obj/item/stack/medical/splint(src) + /obj/item/storage/belt/security name = "security belt" desc = "Can hold security gear like handcuffs and flashes." @@ -323,10 +332,12 @@ var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 6 -/obj/item/storage/belt/security/webbing/bulldog/PopulateContents() +/obj/item/storage/belt/security/webbing/bulldog_mixed/PopulateContents() . = ..() - for(var/i in 1 to 3) - new /obj/item/ammo_box/magazine/m12g_bulldog/drum(src) + new /obj/item/ammo_box/magazine/m12g_bulldog/drum/bioterror(src) // you only get ONE this one is nasty + new /obj/item/ammo_box/magazine/m12g_bulldog/drum/slug(src) + new /obj/item/ammo_box/magazine/m12g_bulldog/drum/slug(src) + new /obj/item/ammo_box/magazine/m12g_bulldog/drum(src) /obj/item/storage/belt/mining name = "explorer's webbing" @@ -453,16 +464,30 @@ var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_w_class = WEIGHT_CLASS_SMALL -/obj/item/storage/belt/military/c20r/PopulateContents() +/obj/item/storage/belt/military/cobra/PopulateContents() . = ..() for(var/i in 1 to 4) new /obj/item/ammo_box/magazine/m45_cobra(src) -/obj/item/storage/belt/military/assault/m90/PopulateContents() +/obj/item/storage/belt/military/hydra/PopulateContents() . = ..() for(var/i in 1 to 4) new /obj/item/ammo_box/magazine/m556_42_hydra(src) +/obj/item/storage/belt/military/boomslang/PopulateContents() + . = ..() + for(var/i in 1 to 4) + new /obj/item/ammo_box/magazine/boomslang(src) + +/obj/item/storage/belt/military/mako/PopulateContents() + . = ..() + new /obj/item/ammo_casing/caseless/rocket/a70mm/hedp(src) + new /obj/item/ammo_casing/caseless/rocket/a70mm/hedp(src) + new /obj/item/ammo_casing/caseless/rocket/a70mm(src) + new /obj/item/ammo_casing/caseless/rocket/a70mm(src) + new /obj/item/ammo_casing/caseless/rocket/a70mm(src) + new /obj/item/ammo_casing/caseless/rocket/a70mm(src) + /obj/item/storage/belt/military/snack name = "tactical snack rig" @@ -546,6 +571,22 @@ var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 6 +/obj/item/storage/belt/military/assault/hydra/PopulateContents() + . = ..() + for(var/i in 1 to 4) + new /obj/item/ammo_box/magazine/m556_42_hydra(src) + +/obj/item/storage/belt/military/assault/sniper/PopulateContents() + . = ..() + new /obj/item/ammo_box/magazine/sniper_rounds(src) + new /obj/item/ammo_box/magazine/sniper_rounds(src) + new /obj/item/ammo_box/magazine/sniper_rounds/penetrator(src) + +/obj/item/storage/belt/military/assault/commander/PopulateContents() + . = ..() + for(var/i in 1 to 4) + new /obj/item/ammo_box/magazine/co9mm(src) + /obj/item/storage/belt/grenade name = "grenadier belt" desc = "A belt for holding grenades." @@ -862,8 +903,18 @@ for(var/i in 1 to 4) new /obj/item/ammo_box/magazine/skm_762_40(src) +/obj/item/storage/belt/security/webbing/inteq/skm_carabine/PopulateContents() + . = ..() + for(var/i in 1 to 4) + new /obj/item/ammo_box/magazine/smgm10mm(src) + /obj/item/storage/belt/security/webbing/inteq/alt name = "inteq drop pouch harness" desc = "A harness with a bunch of pouches attached to them emblazoned in the colors of the IRMG, can hold security gear." icon_state = "inteq_droppouch" item_state = "inteq_droppouch" + +/obj/item/storage/belt/security/webbing/inteq/alt/bulldog/PopulateContents() + . = ..() + for(var/i in 1 to 4) + new /obj/item/ammo_box/magazine/m12g_bulldog(src) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index e30519342ffb..d4b9259a61e9 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -171,7 +171,7 @@ // DEATH SQUADS /datum/admins/proc/makeDeathsquad() - return makeEmergencyresponseteam(/datum/ert/deathsquad) + return makeEmergencyresponseteam(/datum/ert/independent/deathsquad) // CENTCOM RESPONSE TEAM @@ -193,6 +193,7 @@ .["mainsettings"]["spawn_admin"]["value"] = newtemplate.spawn_admin ? "Yes" : "No" .["mainsettings"]["use_custom_shuttle"]["value"] = newtemplate.use_custom_shuttle ? "Yes" : "No" .["mainsettings"]["spawn_at_outpost"]["value"] = newtemplate.spawn_at_outpost ? "Yes" : "No" + .["mainsettings"]["outpost_access"]["value"] = newtemplate.outpost_access ? "Yes" : "No" /datum/admins/proc/equipAntagOnDummy(mob/living/carbon/human/dummy/mannequin, datum/antagonist/antag) @@ -247,7 +248,7 @@ if (ertemplate) ertemplate = new ertemplate else - ertemplate = new /datum/ert/centcom_official + ertemplate = new /datum/ert/independent var/list/settings = list( "preview_callback" = CALLBACK(src, PROC_REF(makeERTPreviewIcon)), @@ -264,6 +265,7 @@ "spawn_admin" = list("desc" = "Spawn yourself as briefing officer", "type" = "boolean", "value" = "[(ertemplate.spawn_admin ? "Yes" : "No")]"), "use_custom_shuttle" = list("desc" = "Use the ERT's custom shuttle (if it has one)", "type" = "boolean", "value" = "[(ertemplate.use_custom_shuttle ? "Yes" : "No")]"), "spawn_at_outpost" = list("desc" = "Spawn the ERT/Dock the ERT at the Outpost", "type" = "boolean", "value" = "[(ertemplate.spawn_at_outpost ? "Yes" : "No")]"), + "outpost_access" = list("desc" = "Give ERT members outpost access", "type" = "boolean", "value" = "[(ertemplate.outpost_access ? "Yes" : "No")]") ) ) @@ -285,7 +287,7 @@ ertemplate.teamsize = prefs["teamsize"]["value"] ertemplate.mission = prefs["mission"]["value"] ertemplate.polldesc = prefs["polldesc"]["value"] - ertemplate.enforce_human = prefs["enforce_human"]["value"] == "Yes" // these next 8 are effectively toggles + ertemplate.enforce_human = prefs["enforce_human"]["value"] == "Yes" // these next 9 are effectively toggles ertemplate.opendoors = prefs["open_armory"]["value"] == "Yes" ertemplate.leader_experience = prefs["leader_experience"]["value"] == "Yes" ertemplate.random_names = prefs["random_names"]["value"] == "Yes" @@ -293,6 +295,7 @@ ertemplate.spawn_admin = prefs["spawn_admin"]["value"] == "Yes" ertemplate.use_custom_shuttle = prefs["use_custom_shuttle"]["value"] == "Yes" ertemplate.spawn_at_outpost = prefs["spawn_at_outpost"]["value"] == "Yes" + ertemplate.outpost_access = prefs["outpost_access"]["value"] == "Yes" var/list/spawnpoints = GLOB.emergencyresponseteamspawn var/index = 0 @@ -461,13 +464,16 @@ if(teamSpawned) // guestbook for(var/datum/mind/member in ert_team.members) - var/member_mob = member.current + var/mob/living/carbon/human/member_mob = member.current for(var/datum/mind/other_member in ert_team.members) // skip yourself if(other_member.name == member.name) continue var/mob/living/carbon/human/other_member_mob = other_member.current member.guestbook.add_guest(member_mob, other_member_mob, other_member_mob.real_name, other_member_mob.real_name, TRUE) + if(ertemplate.outpost_access && istype(member_mob.wear_id, /obj/item/card/id)) + var/obj/item/card/id/id = member_mob.wear_id + id.access += list(ACCESS_CENT_GENERAL) message_admins("[ertemplate.rename_team] has spawned with the mission: [ertemplate.mission]") diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 853d33e1b61b..333b8b828022 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -70,9 +70,9 @@ return switch(sender) if (RADIO_CHANNEL_SYNDICATE) - sender = input("From what branch?", "Syndicate") as null|anything in list("Syndicate High Command", "The Anti-Corporation Liberation Front", "The Gorlex Marauders", "Donk! Corporation", "Cybersun Virtual Solutions", "The Galactic Engineer's Concordat", "The Naturalienwissenschaftlicher Studentenverbindungs-Verband") + sender = input("From what faction?", "Syndicate") as null|anything in list("Liberation Front Leadership", "Gorlex Republic Military Command", "Cybersun Industries", "the Student-Union of Naturalistic Sciences") if (RADIO_CHANNEL_MINUTEMEN) - sender = input("From what division?", "Minutemen") as null|anything in list("CLIP Minutemen Headquarters", "The Galactic Optium Labor Divison", "The Biohazard Assesment and Removal Division") + sender = input("From what division?", "Minutemen") as null|anything in list("the Colonial League Minutemen", "the Galactic Optium Labor Divison", "the Biohazard Assesment and Removal Division") if (RADIO_CHANNEL_INTEQ) sender = "Inteq Risk Management" if ("Outpost") diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index 25b0b4e1f8cc..9b06d144bafd 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -7,7 +7,7 @@ name = "Emergency Response Officer" var/datum/team/ert/ert_team var/leader = FALSE - var/datum/outfit/outfit = /datum/outfit/centcom/ert/security + var/datum/outfit/outfit = /datum/outfit/job/independent/ert var/role = "Security Officer" var/list/name_source var/random_names = TRUE @@ -60,9 +60,9 @@ var/missiondesc = "Your team is being sent to [station_name()].
" if(leader) //If Squad Leader - missiondesc += " Lead your team to ensure the completion of your objectives." + missiondesc += "Lead your team to ensure the completion of your objectives." else - missiondesc += " Follow orders given to you by your squad leader." + missiondesc += "Follow orders given to you by your squad leader." if(deathsquad) missiondesc += "Leave no witnesses." diff --git a/code/modules/antagonists/ert/frontiersmen.dm b/code/modules/antagonists/ert/frontiersmen.dm index d6a1a5182cf0..da1cb0c6812c 100644 --- a/code/modules/antagonists/ert/frontiersmen.dm +++ b/code/modules/antagonists/ert/frontiersmen.dm @@ -18,31 +18,53 @@ missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" to_chat(owner,missiondesc) +/datum/antagonist/ert/frontier/skm + outfit = /datum/outfit/job/frontiersmen/ert/skm + +/datum/antagonist/ert/frontier/unarmed + outfit = /datum/outfit/job/frontiersmen/ert/unarmed + /datum/antagonist/ert/frontier/random outfit = /datum/outfit/job/frontiersmen/ert/random +// officers + /datum/antagonist/ert/frontier/leader name = "Frontiersmen Officer" outfit = /datum/outfit/job/frontiersmen/ert/leader role = "Officer" -/datum/antagonist/ert/frontier/leader/unnarmed - outfit = /datum/outfit/job/frontiersmen/ert/leader/unnarmed +/datum/antagonist/ert/frontier/leader/heavy + outfit = /datum/outfit/job/frontiersmen/ert/leader/heavy + +/datum/antagonist/ert/frontier/leader/unarmed + outfit = /datum/outfit/job/frontiersmen/ert/leader/unarmed + +// doctors /datum/antagonist/ert/frontier/medic name = "Frontiersmen Medic" outfit = /datum/outfit/job/frontiersmen/ert/medic role = "Stretcher-Bearer" +/datum/antagonist/ert/frontier/medic/heavy + outfit = /datum/outfit/job/frontiersmen/ert/medic/heavy + +// engineers + /datum/antagonist/ert/frontier/engineer name = "Frontiersmen Engineer" outfit = /datum/outfit/job/frontiersmen/ert/engineer role = "Sapper" -/datum/antagonist/ert/frontier/better - name = "Frontiersmen Grunt" - outfit = /datum/outfit/job/frontiersmen/ert/grunt/skm +// heavy weapons guy + +/datum/antagonist/ert/frontier/flamer + name = "Frontiersmen Flametrooper" + outfit = /datum/outfit/job/frontiersmen/ert/flamer + role = "Flametrooper" -/datum/antagonist/ert/frontier/unnarmed - name = "Frontiersmen Grunt" - outfit = /datum/outfit/job/frontiersmen/ert/grunt +/datum/antagonist/ert/frontier/sentry + name = "Frontiersmen Sentry" + outfit = /datum/outfit/job/frontiersmen/ert/sentry + role = "Sentinel" diff --git a/code/modules/antagonists/ert/gezena.dm b/code/modules/antagonists/ert/gezena.dm new file mode 100644 index 000000000000..73ac1eb9ddba --- /dev/null +++ b/code/modules/antagonists/ert/gezena.dm @@ -0,0 +1,29 @@ +/datum/antagonist/ert/gezena + name = "PGF Marine" + outfit = /datum/outfit/job/gezena/ert + role = "Rifleman" + +/datum/antagonist/ert/gezena/leader + name = "PGF Sergeant" + outfit = /datum/outfit/job/gezena/ert/leader + role = "Gunnery Sergeant" + +/datum/antagonist/ert/gezena/engineer + name = "PGF Combat Engineer" + outfit = /datum/outfit/job/gezena/ert/engineer + role = "Engineer" + +/datum/antagonist/ert/gezena/gunner + name = "PGF Gunner" + outfit = /datum/outfit/job/gezena/ert/gunner + role = "Machinegunner" + +/datum/antagonist/ert/gezena/medic + name = "PGF Corpsman" + outfit = /datum/outfit/job/gezena/ert/medic + role = "Corpsman" + +/datum/antagonist/ert/gezena/inspector + name = "PGF Naval Observer" + outfit = /datum/outfit/job/gezena/ert/inspector + role = "Observer" diff --git a/code/modules/antagonists/ert/indie.dm b/code/modules/antagonists/ert/indie.dm index 265af27bd2d4..d56a6ea84e78 100644 --- a/code/modules/antagonists/ert/indie.dm +++ b/code/modules/antagonists/ert/indie.dm @@ -8,7 +8,7 @@ role = "Security Officer" /datum/antagonist/ert/independent/greet() - to_chat(owner, "You are the [name].") + to_chat(owner, "You are \a [name].") var/missiondesc = "You are one of the many Independent contractors, workers and students on [station_name()].
" if(leader) //If Squad Leader missiondesc += "Lead your team to complete your objectives." @@ -23,6 +23,9 @@ outfit = /datum/outfit/job/independent/ert/emt role = "Paramedic" +/datum/antagonist/ert/independent/emt/eva + outfit = /datum/outfit/job/independent/ert/emt/eva + /datum/antagonist/ert/independent/firefighter name = "Independent Firefighter" outfit = /datum/outfit/job/independent/ert/firefighter @@ -42,3 +45,18 @@ name = "Independent Technician" outfit = /datum/outfit/job/independent/ert/technician role = "Technician" + +/datum/antagonist/ert/independent/deathsquad + name = "Deathsquad Commando" + outfit = /datum/outfit/job/independent/ert/deathsquad + role = "Commando" + +/datum/antagonist/ert/independent/pizza + name = "Pizza Delivery Worker" + outfit = /datum/outfit/job/independent/ert/pizza + role = "Delivery Worker" + +/datum/antagonist/ert/independent/janitor + name = "Independent Sanitation Technician" + outfit = /datum/outfit/job/independent/ert/janitor + role = "Sanitation Technician" diff --git a/code/modules/antagonists/ert/inteq.dm b/code/modules/antagonists/ert/inteq.dm index f4636487da5f..6666c626c8c0 100644 --- a/code/modules/antagonists/ert/inteq.dm +++ b/code/modules/antagonists/ert/inteq.dm @@ -1,10 +1,9 @@ /datum/antagonist/ert/inteq name = "Inteq Mercenary" - outfit = /datum/outfit/job/inteq/security + outfit = /datum/outfit/job/inteq/ert random_names = TRUE role = "Enforcer" - /datum/antagonist/ert/inteq/greet() to_chat(owner, "You are the [name].") var/missiondesc = "You're one of the many mercenaries under the Inteq Risk Management Group sent to [station_name()].
" @@ -18,7 +17,40 @@ missiondesc += "
Contract Terms: [ert_team.mission.explanation_text]" to_chat(owner,missiondesc) +/datum/antagonist/ert/inteq/eva + outfit = /datum/outfit/job/inteq/ert/eva + /datum/antagonist/ert/inteq/leader name = "Inteq Mercenary Leader" - outfit = /datum/outfit/job/inteq/captain/empty + outfit = /datum/outfit/job/inteq/ert/leader role = "Vanguard" + +/datum/antagonist/ert/inteq/leader/eva + outfit = /datum/outfit/job/inteq/ert/leader/eva + +/datum/antagonist/ert/inteq/medic + name = "Inteq Corpsman" + outfit = /datum/outfit/job/inteq/ert/medic + role = "Corpsman" + +/datum/antagonist/ert/inteq/medic/eva + outfit = /datum/outfit/job/inteq/ert/medic/eva + +/datum/antagonist/ert/inteq/engineer + name = "Inteq Artificer" + outfit = /datum/outfit/job/inteq/ert/engineer + role = "Artificer" + +/datum/antagonist/ert/inteq/engineer/eva + outfit = /datum/outfit/job/inteq/ert/engineer/eva + +/datum/antagonist/ert/inteq/honor_guard + name = "Inteq Honor Guard" + outfit = /datum/outfit/job/inteq/ert/honor_guard + role = "Guardsman" + +/datum/antagonist/ert/inteq/inspector + name = "Mothership Investigator" + outfit = /datum/outfit/job/inteq/ert/inspector + random_names = FALSE + role = "Investigator" diff --git a/code/modules/antagonists/ert/minutemen.dm b/code/modules/antagonists/ert/minutemen.dm index 069ab6625c32..5e772227fd65 100644 --- a/code/modules/antagonists/ert/minutemen.dm +++ b/code/modules/antagonists/ert/minutemen.dm @@ -3,17 +3,20 @@ // ******************************************************************** /datum/antagonist/ert/minutemen - name = "CLIP Minutemen" + name = "C-MM Minuteman" outfit = /datum/outfit/job/clip/minutemen/grunt/dressed/armed role = "Minuteman" +/datum/antagonist/ert/minutemen/eva + outfit = /datum/outfit/job/clip/minutemen/grunt/dressed/hardsuit + /datum/antagonist/ert/minutemen/greet() to_chat(owner, "You are \the [role].") - var/missiondesc = "You serve in the armed forced of the Confederated League of Independent Planets (CLIP), an independent government. You are being deployed to the sector of [station_name()].
" + var/missiondesc = "You serve in the Colonial Minutemen, the armed forces of the Confederated League of Independent Planets. You are being deployed to the sector of [station_name()].
" if(leader) //If Squad Leader missiondesc += "Lead your squad to complete all objectives." else - missiondesc += "Follow orders given to you by your Leader, the Sergent." + missiondesc += "Follow orders given to you by your squadron leader." if(deathsquad) missiondesc += "You have been given the order to fire at will." @@ -21,70 +24,82 @@ to_chat(owner,missiondesc) /datum/antagonist/ert/minutemen/leader - name = "CLIP Minutemen Field Sergeant" + name = "C-MM Sergeant" leader = TRUE outfit = /datum/outfit/job/clip/minutemen/grunt/lead role = "Sergeant" +/datum/antagonist/ert/minutemen/leader/eva + outfit = /datum/outfit/job/clip/minutemen/grunt/lead/armed/hardsuit + /datum/antagonist/ert/minutemen/corpsman + name = "C-MM Field Corpsman" outfit = /datum/outfit/job/clip/minutemen/grunt/dressed/med/armed - role = "Field Corpsman" + role = "Corpsman" /datum/antagonist/ert/minutemen/engi + name = "C-MM Field Engineer" outfit = /datum/outfit/job/clip/minutemen/grunt/dressed/engi/armed - role = "Field Engineer" + role = "Engineer" /datum/antagonist/ert/minutemen/gunner + name = "C-MM Machinegunner" outfit = /datum/outfit/job/clip/minutemen/grunt/dressed/gunner_armed role = "Field Gunner" /datum/antagonist/ert/minutemen/bard - name = "BARD Infantry" - outfit = /datum/outfit/job/clip/minutemen/grunt/dressed/bard - role = "Minuteman" + name = "BARD Field Agent" + outfit = /datum/outfit/job/clip/minutemen/bard + role = "Agent" + +/datum/antagonist/ert/minutemen/bard/emergency + name = "BARD Xenofauna Specialist" + outfit = /datum/outfit/job/clip/minutemen/bard/emergency + role = "Specialist" /datum/antagonist/ert/minutemen/bard/flamer - name = "BARD Flamethrower Infantry" - outfit = /datum/outfit/job/clip/minutemen/grunt/dressed/bard/flamer + name = "BARD Fire Control Specialist" + outfit = /datum/outfit/job/clip/minutemen/bard/emergency/flamer + role = "Fire Specialist" /datum/antagonist/ert/minutemen/bard/medic - name = "BARD Corpsman" - outfit = /datum/outfit/job/clip/minutemen/grunt/dressed/bard/medic - role = "Corpsman" + name = "BARD Medical Aid Specialist" + outfit = /datum/outfit/job/clip/minutemen/bard/emergency/medic + role = "Medical Specialist" -/datum/antagonist/ert/minutemen/bard/leader - name = "BARD Sergeant" +/datum/antagonist/ert/minutemen/bard/emergency/leader + name = "BARD Master Sergeant" leader = TRUE - outfit = /datum/outfit/job/clip/minutemen/grunt/dressed/bard/leader - role = "Sergeant" + outfit = /datum/outfit/job/clip/minutemen/bard/emergency/leader + role = "Master Sergeant" -/datum/antagonist/ert/minutemen/riot - name = "Riot Officer" - outfit = /datum/outfit/job/clip/minutemen/grunt/dressed/riot - role = "Minuteman" +/datum/antagonist/ert/minutemen/military_police + name = "C-MM Military Police" + outfit = /datum/outfit/job/clip/minutemen/military_police + role = "Officer" -/datum/antagonist/ert/minutemen/riot/leader - name = "Riot Sergeant" +/datum/antagonist/ert/minutemen/military_police/riot + outfit = /datum/outfit/job/clip/minutemen/military_police/riot + +/datum/antagonist/ert/minutemen/military_police/leader + name = "C-MM Chief Military Police" leader = TRUE - outfit = /datum/outfit/job/clip/minutemen/grunt/dressed/riot/leader - role = "Sergeant" + outfit = /datum/outfit/job/clip/minutemen/military_police/leader + role = "Chief Officer" + +/datum/antagonist/ert/minutemen/military_police/leader/riot + outfit = /datum/outfit/job/clip/minutemen/military_police/leader/riot -/datum/antagonist/ert/official/minutemen +/datum/antagonist/ert/minutemen/inspector name = "GOLD Inspector" - outfit = /datum/outfit/job/clip/investigator + outfit = /datum/outfit/job/clip/investigator/cm5 role = "Lieutenant" -/datum/antagonist/ert/official/minutemen/greet() - to_chat(owner, "You are the GOLD Inspector.") +/datum/antagonist/ert/minutemen/inspector/greet() + to_chat(owner, "You are a Labor Division Inspector.") to_chat(owner, "You are part of The Galactic Optimum Labor Division, a division of the CLIP Government. Your task: [ert_team.mission.explanation_text]") -/datum/antagonist/ert/minutemen/eva - name = "CLIP Minutemen" - outfit = /datum/outfit/job/clip/minutemen/grunt/dressed/hardsuit - role = "Minuteman" - -/datum/antagonist/ert/minutemen/eva/leader - name = "CLIP Minutemen Field Sergeant" - leader = TRUE - outfit = /datum/outfit/job/clip/minutemen/grunt/lead/armed/hardsuit - role = "Sergeant" +/datum/antagonist/ert/minutemen/correspondant + name = "C-MM War Correspondant" + outfit = /datum/outfit/job/clip/correspondant + role = "Correspondant" diff --git a/code/modules/antagonists/ert/nanotrasen.dm b/code/modules/antagonists/ert/nanotrasen.dm index 11537e4bcea9..9ea1aa422162 100644 --- a/code/modules/antagonists/ert/nanotrasen.dm +++ b/code/modules/antagonists/ert/nanotrasen.dm @@ -1,152 +1,39 @@ -// Official -/datum/antagonist/ert/official - name = "CentCom Official" - show_name_in_check_antagonists = TRUE - var/datum/objective/mission - role = "Inspector" - random_names = FALSE - outfit = /datum/outfit/centcom/centcom_official - -/datum/antagonist/ert/official/greet() - to_chat(owner, "You are a CentCom Official.") - if (ert_team) - to_chat(owner, "Central Command is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]") - else - to_chat(owner, "Central Command is sending you to [station_name()] with the task: [mission.explanation_text]") - -/datum/antagonist/ert/official/forge_objectives() - if (ert_team) - return ..() - if(mission) - return - var/datum/objective/missionobj = new () - missionobj.owner = owner - missionobj.explanation_text = "Conduct a routine performance review of [station_name()]'s vessels." - missionobj.completed = TRUE - mission = missionobj - objectives |= mission - -// Standard ERT - -/datum/antagonist/ert/security // kinda handled by the base template but here for completion - -/datum/antagonist/ert/security/red - outfit = /datum/outfit/centcom/ert/security/alert - -/datum/antagonist/ert/engineer - role = "Engineer" - outfit = /datum/outfit/centcom/ert/engineer - -/datum/antagonist/ert/engineer/red - outfit = /datum/outfit/centcom/ert/engineer/alert - -/datum/antagonist/ert/medic - role = "Medical Officer" - outfit = /datum/outfit/centcom/ert/medic - -/datum/antagonist/ert/medic/red - outfit = /datum/outfit/centcom/ert/medic/alert - -/datum/antagonist/ert/commander - role = "Commander" - outfit = /datum/outfit/centcom/ert/commander - -/datum/antagonist/ert/commander/red - outfit = /datum/outfit/centcom/ert/commander/alert - -// Deathsquad - -/datum/antagonist/ert/deathsquad - name = "Deathsquad Trooper" - outfit = /datum/outfit/centcom/death_commando - role = "Trooper" - deathsquad = TRUE - -/datum/antagonist/ert/deathsquad/leader - name = "Deathsquad Officer" - outfit = /datum/outfit/centcom/death_commando - role = "Officer" - -/datum/antagonist/ert/deathsquad/New() - . = ..() - name_source = GLOB.commando_names - -/datum/antagonist/ert/deathsquad/apply_innate_effects(mob/living/mob_override) - ADD_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT) - -/datum/antagonist/ert/deathsquad/remove_innate_effects(mob/living/mob_override) - REMOVE_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT) - -// Janitor - -/datum/antagonist/ert/janitor - role = "Janitor" - outfit = /datum/outfit/centcom/ert/janitor - -/datum/antagonist/ert/janitor/heavy - role = "Heavy Duty Janitor" - outfit = /datum/outfit/centcom/ert/janitor/heavy - -// Intern - -/datum/antagonist/ert/intern - name = "CentCom Intern" - outfit = /datum/outfit/centcom/centcom_intern - random_names = FALSE - role = "Intern" - -/datum/antagonist/ert/intern/leader - name = "CentCom Head Intern" - outfit = /datum/outfit/centcom/centcom_intern/leader - role = "Head Intern" - -/datum/antagonist/ert/intern/unarmed - outfit = /datum/outfit/centcom/centcom_intern/unarmed - -/datum/antagonist/ert/intern/leader/unarmed - outfit = /datum/outfit/centcom/centcom_intern/leader/unarmed - -// Marine - -/datum/antagonist/ert/marine - name = "Marine Commander" - outfit = /datum/outfit/centcom/ert/marine - role = "Commander" - -/datum/antagonist/ert/marine/security - name = "Marine Heavy" - outfit = /datum/outfit/centcom/ert/marine/security - role = "Trooper" - -/datum/antagonist/ert/marine/engineer - name = "Marine Engineer" - outfit = /datum/outfit/centcom/ert/marine/engineer - role = "Engineer" - -/datum/antagonist/ert/marine/medic - name = "Marine Medic" - outfit = /datum/outfit/centcom/ert/marine/medic - role = "Medical Officer" - -// Loss Prevention - -/datum/antagonist/ert/lp - name = "Loss Prevention Security Specialist" - outfit = /datum/outfit/job/nanotrasen/security/ert/lp - role = "Security Specialist" - -/datum/antagonist/ert/lp/medic - name = "Loss Prevention Medical Specialist" - outfit = /datum/outfit/job/nanotrasen/security/ert/lp/medic - role = "Medical Specialist" - -/datum/antagonist/ert/lp/engineer - name = "Loss Prevention Engineering Specialist" - outfit = /datum/outfit/job/nanotrasen/security/ert/lp/engineer - role = "Engineering Specialist" - -/datum/antagonist/ert/lp/lieutenant - name = "Loss Prevention Lieutenant" - leader = TRUE - outfit = /datum/outfit/job/nanotrasen/security/ert/lp/lieutenant - role = "Lieutenant" +/datum/antagonist/ert/nanotrasen + name = "Vigilitas Security Officer" + outfit = /datum/outfit/job/nanotrasen/ert + role = "Security Officer" + +/datum/antagonist/ert/nanotrasen/delivery + name = "N+S Cargo Technician" + outfit = /datum/outfit/job/nanotrasen/cargo_tech + role = "Cargo Technician" + +/datum/antagonist/ert/nanotrasen/inspector + name = "Nanotrasen Central Command Liaison" + outfit = /datum/outfit/job/nanotrasen/ert/inspector + role = "Liaison" + +// /datum/antagonist/ert/nanotrasen/emergency +// name = "Vigilitas Response Officer" +// outfit = /datum/outfit/job/nanotrasen/ert/emergency +// role = "Response Officer" + +/datum/antagonist/ert/nanotrasen/leader + name = "Vigilitas Security Corporal" + outfit = /datum/outfit/job/nanotrasen/ert/leader + role = "Corporal" + +// /datum/antagonist/ert/nanotrasen/leader/emergency +// name = "Vigilitas Response Lieutenant" +// outfit = /datum/outfit/job/nanotrasen/ert/leader/emergency +// role = "Lieutenant" + +// /datum/antagonist/ert/nanotrasen/medic/emergency +// name = "Vigilitas Medical Response Officer" +// outfit = /datum/outfit/job/nanotrasen/ert/medic/emergency +// role = "Medic" + +// /datum/antagonist/ert/nanotrasen/emergency/engineer +// name = "Vigilitas Engineering Response Officer" +// outfit = /datum/outfit/job/nanotrasen/ert/emergency/engineer +// role = "Engineer" diff --git a/code/modules/antagonists/ert/roumain.dm b/code/modules/antagonists/ert/roumain.dm new file mode 100644 index 000000000000..d27c8f39e5c4 --- /dev/null +++ b/code/modules/antagonists/ert/roumain.dm @@ -0,0 +1,50 @@ +/datum/antagonist/ert/roumain + name = "Saint-Roumain Hunter" + outfit = /datum/outfit/job/roumain/ert + role = "Hunter" + +/datum/antagonist/ert/roumain/greet() + to_chat(owner, "You are the [role].") + var/missiondesc = "You are one of the devoted members of the Saint-Roumain Militia. You are being directed to the sector of [station_name()].
" + if(leader) //If Squad Leader + missiondesc += "Lead your squad to complete all objectives." + else + missiondesc += "Follow orders given to you by your Leader, the Montage." + if(deathsquad) + missiondesc += "You have been given the order to fire at will." + + missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" + to_chat(owner,missiondesc) + +/datum/antagonist/ert/roumain/vickland + outfit = /datum/outfit/job/roumain/ert/vickland + +/datum/antagonist/ert/roumain/firestorm + outfit = /datum/outfit/job/roumain/ert/firestorm + +/datum/antagonist/ert/roumain/scout + outfit = /datum/outfit/job/roumain/ert/scout + +/datum/antagonist/ert/roumain/leader + name = "Saint-Roumain Hunter Montagne" + leader = TRUE + outfit = /datum/outfit/job/roumain/ert/leader + role = "Hunter Montagne" + +/datum/antagonist/ert/roumain/leader/colligne + name = "Saint-Roumain Hunter Colligne" + outfit = /datum/outfit/job/roumain/ert/leader/colligne + role = "Hunter clligne" + +/datum/antagonist/ert/roumain/leader/twobore + outfit = /datum/outfit/job/roumain/ert/leader/twobore + +/datum/antagonist/ert/roumain/medic + name = "Saint-Roumain Hunter Doctor" + outfit = /datum/outfit/job/roumain/ert/medic + role = "Doctor" + +/datum/antagonist/ert/roumain/engineer + name = "Saint-Roumain Machinist" + outfit = /datum/outfit/job/roumain/ert/engineer + role = "Hunter" diff --git a/code/modules/antagonists/ert/solgov.dm b/code/modules/antagonists/ert/solgov.dm index 6868fe9eb9bf..c01f88a00962 100644 --- a/code/modules/antagonists/ert/solgov.dm +++ b/code/modules/antagonists/ert/solgov.dm @@ -7,14 +7,11 @@ random_names = FALSE role = "Sonnensöldner" -/datum/antagonist/ert/official/solgov +/datum/antagonist/ert/solgov/inspector name = "SolGov Inspector" outfit = /datum/outfit/job/solgov/ert/inspector role = "Solarian Inspector" -/datum/antagonist/ert/official/solgov/greet() - to_chat(owner, "You are a Solarian Inspector.") - if (ert_team) - to_chat(owner, "The Department of Administrative Affairs is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]") - else - to_chat(owner, "The Department of Administrative Affairs is sending you to [station_name()] with the task: [mission.explanation_text]") +/datum/antagonist/ert/solgov/inspector/greet() + to_chat(owner, "You are the Solarian Inspector.") + to_chat(owner, "The Department of Administrative Affairs is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]") diff --git a/code/modules/antagonists/ert/syndicate.dm b/code/modules/antagonists/ert/syndicate.dm index ab8fa4abc5f7..7f2de02571b7 100644 --- a/code/modules/antagonists/ert/syndicate.dm +++ b/code/modules/antagonists/ert/syndicate.dm @@ -22,14 +22,23 @@ outfit = /datum/outfit/job/syndicate/ert/leader role = "Sergeant" -/datum/antagonist/ert/syndicate/gorlex - name = "2nd Battlegroup Trooper" - outfit = /datum/outfit/job/syndicate/ert/gorlex - role = "Trooper" +/datum/antagonist/ert/syndicate/inspector + name = "ACLF Inspector" + outfit = /datum/outfit/job/syndicate/ert/inspector + role = "Inspector" + +/datum/antagonist/ert/official/syndicate/greet() + to_chat(owner, "You are a mid-rank official from the Liberation Front.") + to_chat(owner, "The Syndicate Coalition is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]") -/datum/antagonist/ert/syndicate/gorlex/greet() +/datum/antagonist/ert/syndicate/ngr + name = "Gorlex Republic Serviceman" + outfit = /datum/outfit/job/syndicate/ert/ngr + role = "Serviceman" + +/datum/antagonist/ert/syndicate/ngr/greet() to_chat(owner, "You are the [name].") - var/missiondesc = "You're a soldier of the New Gorlex Republic sent to [station_name()].
" + var/missiondesc = "You're an enlistee of the New Gorlex Republic sent to [station_name()].
" if(leader) //If Squad Leader missiondesc += "Lead your team to ensure the completion of your objectives." else @@ -38,26 +47,31 @@ missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" to_chat(owner,missiondesc) -/datum/antagonist/ert/syndicate/gorlex/pointman - name = "Gorlex Republic Shotgunner" - outfit = /datum/outfit/job/syndicate/ert/gorlex/pointman - role = "Pointman" +/datum/antagonist/ert/syndicate/ngr/grenadier + name = "Gorlex Republic Grenadier" + outfit = /datum/outfit/job/syndicate/ert/ngr/grenadier + role = "Grenadier" -/datum/antagonist/ert/syndicate/gorlex/medic - name = "Gorlex Republic Medic" - outfit = /datum/outfit/job/syndicate/ert/gorlex/medic +/datum/antagonist/ert/syndicate/ngr/medic + name = "Gorlex Republic Field Medic" + outfit = /datum/outfit/job/syndicate/ert/ngr/medic role = "Medic" -/datum/antagonist/ert/syndicate/gorlex/sniper - name = "Gorlex Republic Sniper" - outfit = /datum/outfit/job/syndicate/ert/gorlex/sniper +/datum/antagonist/ert/syndicate/ngr/sniper + name = "Gorlex Republic Marksman" + outfit = /datum/outfit/job/syndicate/ert/ngr/sniper role = "Marksman" -/datum/antagonist/ert/syndicate/gorlex/leader +/datum/antagonist/ert/syndicate/ngr/leader name = "Gorlex Republic Sergeant" leader = TRUE - outfit = /datum/outfit/job/syndicate/ert/gorlex/leader - role = "Sergeant" + outfit = /datum/outfit/job/syndicate/ert/ngr/leader + role = "Officer" + +/datum/antagonist/ert/syndicate/ngr/inspector + name = "Gorlex Republic Official" + outfit = /datum/outfit/job/syndicate/ert/ngr/inspector + role = "Official" // cybersun @@ -73,7 +87,7 @@ missiondesc += "Lead your team to ensure the completion of your objectives." else missiondesc += "Follow orders given to you by your Sergeant." - if(prob(50) && !leader) + if(prob(50) && !leader && random_names) missiondesc += "
In addition to your contract with Cybersun, you are also a Gorlex Hardliner. You do not like Cybersun, but you work with them regardless." missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" @@ -107,16 +121,50 @@ outfit = /datum/outfit/job/syndicate/ert/cybersun/medic/leader role = "Lead Medical Technician" -// inspector +/datum/antagonist/ert/syndicate/cybersun/inspector + name = "Cybersun Representative" + outfit = /datum/outfit/job/syndicate/ert/cybersun/inspector + role = "Representative" -/datum/antagonist/ert/official/syndicate - name = "Syndicate Inspector" - outfit = /datum/outfit/job/syndicate/ert/inspector - role = "Syndicate Inspector" +/datum/antagonist/ert/syndicate/hardliner + name = "Hardliner Mercenary" + outfit = /datum/outfit/job/syndicate/ert/hardliner + role = "Mercenary" -/datum/antagonist/ert/official/syndicate/greet() - to_chat(owner, "You are a Syndicate Inspector.") - if (ert_team) - to_chat(owner, "The Syndicate Coalition is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]") - else - to_chat(owner, "The Syndicate Coalition is sending you to [station_name()] with the task: [mission.explanation_text]") +/datum/antagonist/ert/syndicate/hardliner/medic + name = "Hardliner Medic" + outfit = /datum/outfit/job/syndicate/ert/hardliner/medic + role = "Medic" + +/datum/antagonist/ert/syndicate/hardliner/engineer + name = "Hardliner Mechanic" + outfit = /datum/outfit/job/syndicate/ert/hardliner/engineer + role = "Mechanic" + +/datum/antagonist/ert/syndicate/hardliner/leader + name = "Hardliner Sergeant" + leader = TRUE + outfit = /datum/outfit/job/syndicate/ert/hardliner/leader + role = "Sergeant" + +// ramzi + +/datum/antagonist/ert/syndicate/ramzi + name = "Ramzi Clique Cell Member" + outfit = /datum/outfit/job/syndicate/ert/ramzi + role = "Cell Member" + +/datum/antagonist/ert/syndicate/ramzi/medic + name = "Ramzi Clique Medic" + outfit = /datum/outfit/job/syndicate/ert/ramzi/medic + role = "Cell Medic" + +/datum/antagonist/ert/syndicate/ramzi/demolitionist + name = "Ramzi Clique Demolitonist" + outfit = /datum/outfit/job/syndicate/ert/ramzi/demolitionist + role = "Cell Demolitonist" + +/datum/antagonist/ert/syndicate/ramzi/leader + name = "Ramzi Clique Cell Leader" + outfit = /datum/outfit/job/syndicate/ert/ramzi/leader + role = "Cell Leader" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 91eab6d53f0f..9954d785cc74 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -17,7 +17,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/ooccolor = "#c43b23" var/asaycolor = "#ff4500" //This won't change the color for current admins, only incoming ones. /// If we spawn an ERT as an admin and choose to spawn as the briefing officer, we'll be given this outfit - var/brief_outfit = /datum/outfit/centcom/commander + var/brief_outfit = /datum/outfit/job/nanotrasen/captain var/enable_tips = TRUE var/tip_delay = 500 //tip delay in milliseconds diff --git a/code/modules/clothing/factions/clip.dm b/code/modules/clothing/factions/clip.dm index 6371b5c14f12..c0347e4eff8d 100644 --- a/code/modules/clothing/factions/clip.dm +++ b/code/modules/clothing/factions/clip.dm @@ -240,7 +240,7 @@ //hats /obj/item/clothing/head/clip name = "\improper CLIP Minutemen service cap" - desc = "A standard issue soft cap dating back to the original Zohil colonial peroid. While usually given to recruits and volunteers, it's sometimes used by occasionally by some Minutemen." + desc = "A standard issue soft cap dating back to the original Zohil colonial peroid. While usually given to recruits and new volunteers, it's used occasionally by some Minutemen." icon = 'icons/obj/clothing/faction/clip/head.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/clip/head.dmi' vox_override_icon = 'icons/mob/clothing/faction/clip/vox.dmi' @@ -437,16 +437,21 @@ new /obj/item/ammo_box/magazine/cm15_12g(src) new /obj/item/grenade/frag(src) +/obj/item/storage/belt/military/clip/cm15_inc/PopulateContents() + for(var/i in 1 to 5) + new /obj/item/ammo_box/magazine/cm15_12g/incendiary(src) + new /obj/item/grenade/frag(src) + /obj/item/storage/belt/military/clip/e50/ComponentInitialize() . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_w_class = WEIGHT_CLASS_NORMAL /obj/item/storage/belt/military/clip/e50/PopulateContents() - for(var/i in 1 to 5) + for(var/i in 1 to 3) new /obj/item/stock_parts/cell/gun/large(src) new /obj/item/grenade/frag(src) - new /obj/item/screwdriver/nuke(src) + new /obj/item/screwdriver(src) /obj/item/storage/belt/military/clip/engi/PopulateContents() new /obj/item/screwdriver/power(src) @@ -460,7 +465,7 @@ /obj/item/storage/belt/military/clip/flamer/PopulateContents() for(var/i in 1 to 3) new /obj/item/reagent_containers/glass/beaker/large/fuel(src) - new /obj/item/ammo_box/magazine/co9mm(src) + new /obj/item/ammo_box/magazine/cm23(src) /obj/item/storage/belt/medical/webbing/clip name = "medical webbing" diff --git a/code/modules/clothing/factions/frontiersmen.dm b/code/modules/clothing/factions/frontiersmen.dm index 380456f4f8d7..bb0ed8999367 100644 --- a/code/modules/clothing/factions/frontiersmen.dm +++ b/code/modules/clothing/factions/frontiersmen.dm @@ -230,24 +230,11 @@ unique_reskin = null -/obj/item/storage/belt/medical/webbing/frontiersmen - name = "leather medical bandolier" - desc = "A rudimentary leather bandolier, utilized by both independents and frontiersmen alike. This one is painted white, usually to be worn by a medic." - icon_state = "frontiermedicalwebbing" - item_state = "frontiermedicalwebbing" - icon = 'icons/obj/clothing/faction/frontiersmen/belt.dmi' - mob_overlay_icon = 'icons/mob/clothing/faction/frontiersmen/belt.dmi' - -/obj/item/storage/belt/medical/webbing/frontiersmen/surgery/PopulateContents() - new /obj/item/scalpel(src) - new /obj/item/circular_saw(src) - new /obj/item/surgicaldrill(src) - new /obj/item/retractor(src) - new /obj/item/cautery(src) - new /obj/item/hemostat(src) - new /obj/item/hypospray/mkii(src) - update_appearance() - +/obj/item/storage/belt/security/military/frontiersmen/illestren/PopulateContents() + . = ..() + for(var/i in 1 to 4) + new /obj/item/ammo_box/magazine/illestren_a850r(src) + new /obj/item/grenade/frag(src) /obj/item/storage/belt/security/military/frontiersmen/skm_ammo/PopulateContents() for(var/i in 1 to 4) @@ -268,3 +255,30 @@ for(var/i in 1 to 4) new /obj/item/reagent_containers/glass/beaker/large/napalm(src) new /obj/item/grenade/frag(src) + + +/obj/item/storage/belt/medical/webbing/frontiersmen + name = "leather medical bandolier" + desc = "A rudimentary leather bandolier, utilized by both independents and frontiersmen alike. This one is painted white, usually to be worn by a medic." + icon_state = "frontiermedicalwebbing" + item_state = "frontiermedicalwebbing" + icon = 'icons/obj/clothing/faction/frontiersmen/belt.dmi' + mob_overlay_icon = 'icons/mob/clothing/faction/frontiersmen/belt.dmi' + +/obj/item/storage/belt/medical/webbing/frontiersmen/surgery/PopulateContents() + new /obj/item/scalpel(src) + new /obj/item/circular_saw(src) + new /obj/item/surgicaldrill(src) + new /obj/item/retractor(src) + new /obj/item/cautery(src) + new /obj/item/hemostat(src) + new /obj/item/hypospray/mkii(src) + update_appearance() + +/obj/item/storage/belt/medical/webbing/frontiersmen/combat/PopulateContents() + new /obj/item/reagent_containers/hypospray/medipen/stimulants(src) + new /obj/item/reagent_containers/hypospray/medipen/stimulants(src) + new /obj/item/reagent_containers/medigel/silver_sulf(src) + new /obj/item/reagent_containers/medigel/styptic(src) + new /obj/item/stack/medical/gauze/twelve(src) + new /obj/item/stack/medical/splint(src) diff --git a/code/modules/clothing/factions/gezena.dm b/code/modules/clothing/factions/gezena.dm index 7c17b4ca2dcc..c37b02754a38 100644 --- a/code/modules/clothing/factions/gezena.dm +++ b/code/modules/clothing/factions/gezena.dm @@ -245,6 +245,20 @@ item_state = "bluecloth" unique_reskin = null +/obj/item/storage/belt/military/gezena/bg16/PopulateContents() + . = ..() + for(var/i in 1 to 4) + new /obj/item/stock_parts/cell/gun/pgf(src) + new /obj/item/screwdriver(src) + +/obj/item/storage/belt/military/gezena/engineer/PopulateContents() + . = ..() + for(var/i in 1 to 2) + new /obj/item/stock_parts/cell/gun/pgf(src) + new /obj/item/screwdriver(src) + new /obj/item/grenade/c4 + new /obj/item/grenade/c4 + /obj/item/storage/belt/medical/gezena name = "\improper PGF Medical Iho-Usks" desc = "The “iho-usks”, translating to “gear-holder”, is a lightweight harness covered in pouches, supplied to the ground troops of the PGF. This variant is designed for carrying medical supplies." @@ -255,6 +269,17 @@ icon_state = "medpouches" item_state = "whitecloth" +/obj/item/storage/belt/medical/gezena/paramedic/PopulateContents() + new /obj/item/reagent_containers/medigel/styptic(src) + new /obj/item/reagent_containers/medigel/styptic(src) + new /obj/item/reagent_containers/medigel/silver_sulf(src) + new /obj/item/reagent_containers/medigel/silver_sulf(src) + new /obj/item/reagent_containers/medigel/synthflesh(src) + new /obj/item/stack/medical/gauze/twelve(src) + new /obj/item/stack/medical/splint(src) + . = ..() + + //Cloaks /obj/item/clothing/neck/cloak/gezena diff --git a/code/modules/clothing/factions/hardliners.dm b/code/modules/clothing/factions/hardliners.dm index 43faee3ccb19..ae664ed2a7ea 100644 --- a/code/modules/clothing/factions/hardliners.dm +++ b/code/modules/clothing/factions/hardliners.dm @@ -215,3 +215,9 @@ item_state = "hl_webbing" icon = 'icons/obj/clothing/faction/hardliners/belt.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/belt.dmi' + +/obj/item/storage/belt/security/webbing/hardliners/sidewinder/PopulateContents() + . = ..() + new /obj/item/ammo_box/magazine/m57_39_sidewinder(src) + new /obj/item/ammo_box/magazine/m57_39_sidewinder(src) + new /obj/item/ammo_box/magazine/m57_39_sidewinder(src) diff --git a/code/modules/clothing/factions/ngr.dm b/code/modules/clothing/factions/ngr.dm index 401f82795f68..9e3b1a24d9d9 100644 --- a/code/modules/clothing/factions/ngr.dm +++ b/code/modules/clothing/factions/ngr.dm @@ -258,3 +258,14 @@ item_state = "ngr_webbing" icon = 'icons/obj/clothing/faction/ngr/belt.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/ngr/belt.dmi' + +/obj/item/storage/belt/security/webbing/ngr/cobra/PopulateContents() + . = ..() + for(var/i in 1 to 4) + new /obj/item/ammo_box/magazine/m45_cobra(src) + +/obj/item/storage/belt/security/webbing/ngr/hydra_grenadier/PopulateContents() + for(var/i in 1 to 3) + new /obj/item/ammo_box/magazine/m556_42_hydra(src) + new /obj/item/ammo_casing/a40mm(src) + new /obj/item/ammo_casing/a40mm(src) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index cefff9c4c76f..0e9e0143d6ac 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -549,7 +549,7 @@ icon_state = "solgov_envirohelm" item_state = "solgov_envirohelm" -/obj/item/clothing/head/helmet/operator +/obj/item/clothing/head/helmet/syndie name = "\improper operator helmet" desc = "A robust combat helmet commonly employed by Syndicate forces, regardless of alignment." icon_state = "operator" diff --git a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm index b685e0e4b8bb..f5e4ddcdf55b 100644 --- a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm +++ b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm @@ -1,21 +1,23 @@ /datum/outfit/job/frontiersmen/ert //most basic of grunts name = "ERT - Frontiersman Basic" - head = /obj/item/clothing/head/helmet/bulletproof/x11/frontier - suit = /obj/item/clothing/suit/armor/vest/bulletproof/frontier + head = /obj/item/clothing/head/beret/sec/frontier + suit = /obj/item/clothing/suit/armor/vest/bulletproof suit_store = /obj/item/gun/ballistic/rifle/illestren + belt = /obj/item/storage/belt/security/military/frontiersmen/illestren uniform = /obj/item/clothing/under/frontiersmen shoes = /obj/item/clothing/shoes/combat gloves = /obj/item/clothing/gloves/color/black ears = /obj/item/radio/headset/pirate/alt back = /obj/item/storage/backpack - l_pocket = /obj/item/flashlight/seclite - r_pocket = /obj/item/tank/internals/emergency_oxygen/double + id = null // lol + wallet = null box = /obj/item/storage/box/survival/frontier - id = null // lol + l_pocket = /obj/item/flashlight/seclite + r_pocket = /obj/item/tank/internals/emergency_oxygen/double - backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen, /obj/item/ammo_box/magazine/illestren_a850r=5, /obj/item/grenade/frag=1) + backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen) /datum/outfit/job/frontiersmen/ert/random name = "ERT - Frontiersman Randomized" @@ -25,10 +27,20 @@ suit = null suit_store = null back = null + belt = null + gloves = null + l_pocket = null r_pocket = /obj/item/radio + backpack_contents = list() + box = null + backpack = null + courierbag = null + satchel = null + duffelbag = null + /datum/outfit/job/frontiersmen/ert/random/pre_equip(mob/living/carbon/human/H, visualsOnly, client/preference_source) . = ..() if(visualsOnly) @@ -46,12 +58,12 @@ /obj/item/clothing/suit/armor/vest/bulletproof/frontier = 5, /obj/item/clothing/suit/armor/vest/scrap = 1)) - if(prob(30)) + if(prob(50)) mask = pickweight(list( - /obj/item/clothing/mask/gas/frontiersmen = 5, - /obj/item/clothing/mask/gas/sechailer/balaclava = 5, - /obj/item/clothing/mask/breath = 5, - /obj/item/clothing/mask/whistle = 3)) + /obj/item/clothing/mask/gas/frontiersmen = 12, + /obj/item/clothing/mask/gas/sechailer/balaclava = 10, + /obj/item/clothing/mask/breath = 7, + /obj/item/clothing/mask/whistle/trench = 3)) if(prob(90)) back = pickweight(list( @@ -59,9 +71,8 @@ /obj/item/storage/backpack/satchel = 20, /obj/item/storage/backpack/messenger = 20, /obj/item/melee/baton/cattleprod/loaded = 5, - /obj/item/food/baguette = 2, // yes you can put this on your back - /obj/item/deployable_turret_folded = 1, - /obj/item/gun/ballistic/automatic/hmg/skm_lmg/extended = 1, + /obj/item/deployable_turret_folded = 4, + /obj/item/gun/ballistic/automatic/hmg/skm_lmg/extended = 3, )) if(prob(90)) @@ -73,17 +84,17 @@ var/extra_class = pick(list("Doctor", "Breacher", "Ammo Carrier")) switch(extra_class) if("Doctor") - backpack_contents += list(/obj/item/storage/firstaid/regular = 1) + backpack_contents += list(/obj/item/storage/firstaid/medical = 1) gloves = /obj/item/clothing/gloves/color/latex suit = /obj/item/clothing/suit/frontiersmen head = /obj/item/clothing/head/frontier if(prob(50)) - belt = /obj/item/storage/belt/medical/surgery + belt = /obj/item/storage/belt/medical/webbing/frontiersmen/combat if(prob(30)) glasses = /obj/item/clothing/glasses/hud/health if("Breacher") - backpack_contents += list(/obj/item/grenade/c4 = 2) - if(prob(10)) + backpack_contents += list(/obj/item/grenade/c4 = 2, /obj/item/grenade/smokebomb = 3) + if(prob(60)) belt = /obj/item/storage/belt/grenade/full if("Ammo Carrier") var/loops = rand(1,3) @@ -95,7 +106,10 @@ /obj/item/storage/box/ammo/c45, /obj/item/storage/box/ammo/a4570, /obj/item/stock_parts/cell/gun/mini)) - backpack_contents += ammotype + if(istype(back, /obj/item/storage/backpack)) + backpack_contents += ammotype + else + H.put_in_hands(ammotype, FALSE) var/weapon = pick(list("Bolt-Action", "Pistol", "Melee")) switch(weapon) @@ -113,7 +127,7 @@ /obj/item/gun/ballistic/revolver/shadow, /obj/item/gun/ballistic/shotgun/doublebarrel/beacon/presawn, /obj/item/gun/energy/e_gun/mini)) - if(prob(30)) + if(prob(80)) l_hand = pick(list( /obj/item/gun/ballistic/automatic/pistol/disposable, /obj/item/gun/ballistic/automatic/pistol/candor, @@ -130,7 +144,7 @@ /obj/item/melee/flyswatter = 1, )) -/datum/outfit/job/frontiersmen/ert/grunt //better armed, use for quick creating pirate ships +/datum/outfit/job/frontiersmen/ert/unarmed //better armed, use for quick creating pirate ships name = "ERT - Frontiersman Grunt (Unarmed)" suit_store = null @@ -138,25 +152,25 @@ backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen) -/datum/outfit/job/frontiersmen/ert/grunt/skm +/datum/outfit/job/frontiersmen/ert/skm name = "ERT - Frontiersman Grunt (SKM-24 AR)" suit_store = /obj/item/gun/ballistic/automatic/assault/skm belt = /obj/item/storage/belt/security/military/frontiersmen/skm_ammo -/datum/outfit/job/frontiersmen/ert/grunt/mauler_mp +/datum/outfit/job/frontiersmen/ert/mauler_mp name = "ERT - Frontiersman Grunt (Mauler MP)" suit_store = /obj/item/gun/ballistic/automatic/pistol/mauler belt = /obj/item/storage/belt/security/military/frontiersmen/mauler_mp_ammo -/datum/outfit/job/frontiersmen/ert/grunt/spitter_mp +/datum/outfit/job/frontiersmen/ert/spitter_mp name = "ERT - Frontiersman Grunt (Spitter MP)" suit_store = /obj/item/gun/ballistic/automatic/pistol/spitter belt = /obj/item/storage/belt/security/military/frontiersmen/spitter_ammo -/datum/outfit/job/frontiersmen/ert/grunt/pounder_smg +/datum/outfit/job/frontiersmen/ert/pounder_smg name = "ERT - Frontiersman Grunt (Pounder SMG)" suit_store = /obj/item/gun/ballistic/automatic/smg/pounder @@ -171,12 +185,29 @@ ears = /obj/item/radio/headset/pirate/alt/captain back = /obj/item/storage/backpack/satchel/leather suit = /obj/item/clothing/suit/armor/frontier - suit_store = /obj/item/gun/ballistic/automatic/pistol/deagle + suit_store = null + belt = /obj/item/gun/ballistic/automatic/pistol/deagle backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen, /obj/item/ammo_box/magazine/m50=2, /obj/item/binoculars=1, /obj/item/melee/knife/survival) -/datum/outfit/job/frontiersmen/ert/leader/unnarmed - name = "ERT - Frontiersman Officer (Unnarmed)" +/datum/outfit/job/frontiersmen/ert/leader/heavy + name = "ERT - Frontiersman Officer (Shock Troop)" + + suit = /obj/item/clothing/suit/armor/vest/marine/frontier + head = /obj/item/clothing/head/helmet/bulletproof/x11/frontier + mask = /obj/item/clothing/mask/gas/sechailer + belt = /obj/item/gun/ballistic/automatic/pistol/deagle/gold // daring today aren't we + + backpack = /obj/item/minigunpack + satchel = /obj/item/minigunpack + courierbag = /obj/item/minigunpack + duffelbag = /obj/item/minigunpack + + backpack_contents = null + box = null + +/datum/outfit/job/frontiersmen/ert/leader/unarmed + name = "ERT - Frontiersman Officer (Unarmed)" suit_store = null @@ -190,10 +221,22 @@ mask = /obj/item/clothing/mask/surgical gloves = /obj/item/clothing/gloves/color/latex/nitrile belt = /obj/item/storage/belt/medical/webbing/frontiersmen/surgery - suit_store = /obj/item/gun/ballistic/automatic/pistol/mauler + suit = /obj/item/clothing/suit/frontiersmen + suit_store = null + + backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen, /obj/item/storage/firstaid/regular, /obj/item/ammo_box/magazine/m9mm_mauler = 2, /obj/item/gun/ballistic/automatic/pistol/mauler) - backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen, /obj/item/storage/firstaid/medical=1, /obj/item/reagent_containers/hypospray/medipen/stimpack=3, /obj/item/ammo_box/magazine/m9mm_mauler=2) +/datum/outfit/job/frontiersmen/ert/medic/heavy + name = "ERT - Frontiersman Medic (Shock Troop)" + head = /obj/item/clothing/head/helmet/bulletproof/x11/frontier + mask = /obj/item/clothing/mask/gas/syndicate/ngr + suit = /obj/item/clothing/suit/armor/vest/bulletproof/frontier + suit_store = /obj/item/gun/ballistic/automatic/pistol/mauler + belt = /obj/item/storage/belt/medical/webbing/frontiersmen/combat + glasses = /obj/item/clothing/glasses/hud/health + + backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen, /obj/item/storage/firstaid/medical=1, /obj/item/reagent_containers/hypospray/medipen/stimpack/traitor = 3, /obj/item/ammo_box/magazine/m9mm_mauler=2) /datum/outfit/job/frontiersmen/ert/engineer name = "ERT - Frontiersman Engineer" @@ -215,7 +258,7 @@ suit_store = /obj/item/tank/internals/oxygen/red uniform = /obj/item/clothing/under/frontiersmen/fireproof gloves = /obj/item/clothing/gloves/combat - back = /obj/item/storage/backpack + back = /obj/item/storage/backpack/fireproof belt = /obj/item/storage/belt/security/military/frontiersmen/flamer l_hand = /obj/item/flamethrower/full/tank @@ -227,7 +270,7 @@ /obj/item/radio=1) -/datum/outfit/job/frontiersmen/ert/sentry_lmg +/datum/outfit/job/frontiersmen/ert/sentry name = "ERT - Frontiersman Sentry (SKM-24v LMG)" head = /obj/item/clothing/head/helmet/marine/frontier @@ -240,17 +283,10 @@ backpack_contents = list(/obj/item/ammo_box/magazine/skm_762_40/drum=2,/obj/item/ammo_box/a357=2,/obj/item/grenade/frag=1,/obj/item/radio=1) -/datum/outfit/job/frontiersmen/ert/sentry_shredder +/datum/outfit/job/frontiersmen/ert/sentry/shredder name = "ERT - Frontiersman Sentry (Shredder LMG)" - head = /obj/item/clothing/head/helmet/marine/frontier - mask = /obj/item/clothing/mask/gas/sechailer/balaclava - suit = /obj/item/clothing/suit/armor/vest/marine/frontier - gloves = /obj/item/clothing/gloves/combat - - belt = /obj/item/gun/ballistic/revolver/mateba - - + suit_store = null l_hand = /obj/item/gun/ballistic/automatic/hmg/shredder // this doesnt even fit on the suit storage slot backpack_contents = list(/obj/item/ammo_box/magazine/m12_shredder=2,/obj/item/ammo_box/a357=2,/obj/item/grenade/frag=1,/obj/item/radio=1) diff --git a/code/modules/clothing/outfits/ert/gezena_ert.dm b/code/modules/clothing/outfits/ert/gezena_ert.dm new file mode 100644 index 000000000000..436b7379599e --- /dev/null +++ b/code/modules/clothing/outfits/ert/gezena_ert.dm @@ -0,0 +1,87 @@ +/datum/outfit/job/gezena/ert + name = "ERT - PGF Marine Rifleman" + id_assignment = "Marine Rifleman" + jobtype = /datum/job/officer + job_icon = "securityofficer" + + uniform = /obj/item/clothing/under/gezena/marine + suit = /obj/item/clothing/suit/armor/gezena/marine + head = /obj/item/clothing/head/helmet/gezena + belt = /obj/item/storage/belt/military/gezena/bg16 + gloves = /obj/item/clothing/gloves/gezena/marine + shoes = /obj/item/clothing/shoes/combat/gezena + neck = /obj/item/clothing/neck/cloak/gezena + suit_store = /obj/item/gun/energy/kalix/pgf + + l_pocket = /obj/item/melee/knife/combat + r_pocket = /obj/item/flashlight/seclite + + backpack_contents = list(/obj/item/gun/energy/kalix/pistol, /obj/item/stock_parts/cell/gun/kalix = 2, /obj/item/grenade/frag=2) + + +/datum/outfit/job/gezena/ert/gunner + name = "ERT - PGF Marine Gunner" + + suit_store = /obj/item/gun/energy/kalix/pgf/heavy // yea there's not much else to put in. sorry + +/datum/outfit/job/gezena/ert/engineer + name = "ERT - PGF Marine Combat Engineer" + id_assignment = "Marine Combat Engineer" + + belt = /obj/item/storage/belt/military/gezena/engineer + +/datum/outfit/job/gezena/ert/medic + name = "ERT - PGF Marine Medic" + id_assignment = "Marine Medic" + jobtype = /datum/job/paramedic + job_icon = "paramedic" + + belt = /obj/item/storage/belt/medical/gezena/paramedic + gloves = /obj/item/clothing/gloves/gezena/marine + neck = /obj/item/clothing/neck/cloak/gezena/med + + backpack = /obj/item/storage/backpack/medic + satchel = /obj/item/storage/backpack/satchel/med + duffelbag = /obj/item/storage/backpack/duffelbag/med + courierbag = /obj/item/storage/backpack/messenger/para + box = /obj/item/storage/box/survival/medical + + backpack_contents = list(/obj/item/gun/energy/kalix/pistol, /obj/item/stock_parts/cell/gun/kalix = 2, /obj/item/screwdriver) + + +/datum/outfit/job/gezena/ert/leader + name = "ERT - PGF Marine Sergeant" + id_assignment = "Marine Sergeant" + jobtype = /datum/job/hos + job_icon = "headofsecurity" + + suit = /obj/item/clothing/suit/armor/gezena/marinecoat + head = /obj/item/clothing/head/helmet/gezena + gloves = /obj/item/clothing/gloves/gezena/marine + shoes = /obj/item/clothing/shoes/combat/gezena + neck = /obj/item/clothing/neck/cloak/gezena/lead + suit_store = /obj/item/gun/energy/kalix/pgf/heavy + + backpack_contents = list(/obj/item/gun/energy/kalix/pistol, /obj/item/stock_parts/cell/gun/kalix = 2, /obj/item/grenade/smokebomb = 3, /obj/item/binoculars) + + +/datum/outfit/job/gezena/ert/inspector + name = "ERT - PGF Naval Observer" + id_assignment = "Naval Observer" + jobtype = /datum/job/head_of_personnel + job_icon = "headofpersonnel" + + head = /obj/item/clothing/head/gezena + neck = /obj/item/clothing/neck/cloak/gezena/command + uniform = /obj/item/clothing/under/gezena + suit = /obj/item/clothing/suit/armor/gezena + suit_store = null + belt = null + gloves = /obj/item/clothing/gloves/gezena + + backpack = /obj/item/storage/backpack/satchel + satchel = /obj/item/storage/backpack/satchel + duffelbag = /obj/item/storage/backpack/satchel + courierbag = /obj/item/storage/backpack/satchel + + backpack_contents = list(/obj/item/folder, /obj/item/paper_bin/bundlenatural, /obj/item/hand_labeler) diff --git a/code/modules/clothing/outfits/ert/indie_ert.dm b/code/modules/clothing/outfits/ert/indie_ert.dm index 236f9ee75c57..15ac8f718802 100644 --- a/code/modules/clothing/outfits/ert/indie_ert.dm +++ b/code/modules/clothing/outfits/ert/indie_ert.dm @@ -3,25 +3,18 @@ jobtype = /datum/job/officer job_icon = "securityofficer" + wallet = null + head = /obj/item/clothing/head/helmet/sec ears = /obj/item/radio/headset/alt - mask = null uniform = /obj/item/clothing/under/rank/security/officer - shoes = /obj/item/clothing/shoes/combat/swat + shoes = /obj/item/clothing/shoes/combat gloves = /obj/item/clothing/gloves/color/black suit = /obj/item/clothing/suit/armor/vest back = /obj/item/storage/backpack/security belt = /obj/item/storage/belt/security/full id = /obj/item/card/id -/datum/outfit/job/independent/ert/post_equip(mob/living/carbon/human/H, visualsOnly, client/preference_source) - . = ..() - if(visualsOnly) - return - - var/obj/item/card/id/W = H.wear_id - W.access += list(ACCESS_CENT_GENERAL) - /datum/outfit/job/independent/ert/emt name = "ERT - Independent Paramedic" jobtype = /datum/job/paramedic @@ -37,6 +30,15 @@ back = /obj/item/storage/backpack/medic belt = /obj/item/storage/belt/medical/webbing/paramedic + backpack_contents = list(/obj/item/storage/firstaid/medical) + +/datum/outfit/job/independent/ert/emt/eva + name = "ERT - Independent Paramedic (EVA)" + + head = null + suit = /obj/item/clothing/suit/space/hardsuit/medical + suit_store = /obj/item/tank/internals/oxygen + /datum/outfit/job/independent/ert/firefighter name = "ERT - Independent Firefighter (Standard)" jobtype = /datum/job/atmos @@ -44,14 +46,20 @@ head = /obj/item/clothing/head/hardhat/red uniform = /obj/item/clothing/under/utility - suit = /obj/item/clothing/suit/fire/firefighter + suit = /obj/item/clothing/suit/fire/atmos suit_store = /obj/item/extinguisher glasses = /obj/item/clothing/glasses/heat - mask = /obj/item/clothing/mask/breath + belt = null + mask = /obj/item/clothing/mask/gas/atmos shoes = /obj/item/clothing/shoes/workboots gloves = /obj/item/clothing/gloves/color/black back = /obj/item/tank/internals/oxygen/red + backpack = /obj/item/storage/backpack/fireproof + courierbag = /obj/item/storage/backpack/fireproof + duffelbag = /obj/item/storage/backpack/fireproof + satchel = /obj/item/storage/backpack/fireproof + l_pocket = /obj/item/crowbar/red r_pocket = /obj/item/radio @@ -61,27 +69,33 @@ job_icon = "paramedic" mask = /obj/item/clothing/mask/breath/medical - back = /obj/item/storage/backpack/fireproof gloves = /obj/item/clothing/gloves/color/latex/nitrile/evil glasses = /obj/item/clothing/glasses/hud/health suit_store = /obj/item/tank/internals/emergency_oxygen l_pocket = /obj/item/extinguisher/mini - backpack_contents = list(/obj/item/storage/firstaid/fire=1, /obj/item/storage/firstaid/o2=1, /obj/item/radio=1) + backpack_contents = list(/obj/item/storage/firstaid/fire=1, /obj/item/storage/firstaid/o2=1) /datum/outfit/job/independent/ert/firefighter/leader name = "ERT - Independent Firefighter (Group Captain)" jobtype = /datum/job/chief_engineer job_icon = "chiefengineer" - back = /obj/item/melee/axe/fire suit = /obj/item/clothing/suit/space/hardsuit/engine suit_store = /obj/item/tank/internals/oxygen/red head = null belt = /obj/item/storage/belt/utility/atmostech gloves = /obj/item/clothing/gloves/color/yellow + backpack_contents = null + box = null + + backpack = /obj/item/melee/axe/fire + courierbag = /obj/item/melee/axe/fire + duffelbag = /obj/item/melee/axe/fire + satchel = /obj/item/melee/axe/fire + /datum/outfit/job/independent/ert/technician name = "ERT - Independent Technician" jobtype = /datum/job/engineer @@ -90,6 +104,7 @@ head = /obj/item/clothing/head/hardhat uniform = /obj/item/clothing/under/rank/engineering/engineer belt = /obj/item/storage/belt/utility/full/engi + gloves = /obj/item/clothing/gloves/color/yellow suit = /obj/item/clothing/suit/toggle/hazard shoes = /obj/item/clothing/shoes/workboots back = /obj/item/storage/backpack/industrial @@ -97,3 +112,61 @@ r_pocket = /obj/item/analyzer box = /obj/item/storage/box/survival/engineer + +/datum/outfit/job/independent/ert/pizza + name = "ERT - Independent Pizza Delivery Worker" + + uniform = /obj/item/clothing/under/suit/burgundy + neck = /obj/item/clothing/neck/tie/red + shoes = /obj/item/clothing/shoes/sneakers/black + head = /obj/item/clothing/head/soft/mime + suit = null + ears = null + belt = null + gloves = null + + +/datum/outfit/job/independent/ert/janitor + name = "ERT - Independent Sanitation Technician" + jobtype = /datum/job/janitor + job_icon = "janitor" + + uniform = /obj/item/clothing/under/rank/civilian/janitor + head = /obj/item/clothing/head/soft/purple + ears = /obj/item/radio/headset + mask = null + shoes = /obj/item/clothing/shoes/combat/swat + gloves = /obj/item/clothing/gloves/color/purple + suit = null + belt = /obj/item/storage/belt/janitor/full + +/datum/outfit/job/independent/ert/deathsquad + name = "ERT - Death Commando" + job_icon = "deathsquad" + faction_icon = null + id_assignment = "Commando" // i mean. if you have enough time to look at a dsquaddie's id card. why not + + head = null + uniform = /obj/item/clothing/under/rank/security/officer/military + id = /obj/item/card/id/ert/deathsquad + suit = /obj/item/clothing/suit/space/hardsuit/deathsquad + shoes = /obj/item/clothing/shoes/combat/swat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated + mask = /obj/item/clothing/mask/gas/sechailer/swat + glasses = /obj/item/clothing/glasses/hud/toggle/thermal + back = /obj/item/storage/backpack/security + suit_store = /obj/item/tank/internals/emergency_oxygen/double + belt = /obj/item/gun/ballistic/revolver/mateba + ears = /obj/item/radio/headset/alt + r_hand = /obj/item/gun/energy/pulse + + l_pocket = /obj/item/melee/transforming/energy/sword/saber + r_pocket = /obj/item/shield/energy + + + backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ + /obj/item/ammo_box/a357=1,\ + /obj/item/storage/firstaid/regular=1,\ + /obj/item/storage/box/flashbangs=1,\ + /obj/item/flashlight=1,\ + /obj/item/grenade/c4/x4=1) diff --git a/code/modules/clothing/outfits/ert/inteq_ert.dm b/code/modules/clothing/outfits/ert/inteq_ert.dm index 9fd796d04516..715a0352e3b1 100644 --- a/code/modules/clothing/outfits/ert/inteq_ert.dm +++ b/code/modules/clothing/outfits/ert/inteq_ert.dm @@ -4,31 +4,64 @@ jobtype = /datum/job/officer job_icon = "securityofficer" + wallet = null + + head = /obj/item/clothing/head/helmet/inteq mask = /obj/item/clothing/mask/gas/sechailer/balaclava/inteq glasses = /obj/item/clothing/glasses/hud/security/sunglasses/inteq uniform = /obj/item/clothing/under/syndicate/inteq - suit = /obj/item/clothing/suit/space/hardsuit/syndi/inteq + suit = /obj/item/clothing/suit/armor/vest suit_store = /obj/item/gun/ballistic/automatic/assault/skm/inteq gloves = /obj/item/clothing/gloves/combat + shoes = /obj/item/clothing/shoes/combat ears = /obj/item/radio/headset/inteq/alt id = /obj/item/card/id belt = /obj/item/storage/belt/security/webbing/inteq/skm - back = /obj/item/storage/backpack/fireproof l_pocket = /obj/item/melee/knife/combat r_pocket = /obj/item/flashlight/seclite - backpack_contents = list(/obj/item/radio=1) +/datum/outfit/job/inteq/ert/eva + name = "ERT - Inteq Rifleman (EVA)" + + head = null + suit = /obj/item/clothing/suit/space/hardsuit/syndi/inteq + r_pocket = /obj/item/tank/internals/emergency_oxygen/engi /datum/outfit/job/inteq/ert/shotgun name = "ERT - Inteq Shotgunner" - id_assignment = "Enforcer" - suit_store = /obj/item/gun/ballistic/shotgun/automatic/combat/compact - belt = /obj/item/storage/belt/security/webbing/inteq/alt + suit_store = /obj/item/gun/ballistic/shotgun/automatic/bulldog/inteq + belt = /obj/item/storage/belt/security/webbing/inteq/alt/bulldog + +/datum/outfit/job/inteq/ert/shotgun/eva + name = "ERT - Inteq Shotgunner (EVA)" + + head = null + suit = /obj/item/clothing/suit/space/hardsuit/syndi/inteq + r_pocket = /obj/item/tank/internals/emergency_oxygen/engi + - backpack_contents = list(/obj/item/storage/box/lethalshot=2, /obj/item/radio=1) +/datum/outfit/job/inteq/ert/engineer + name = "ERT - Inteq Artificer" + id_assignment = "Artificer" + jobtype = /datum/job/engineer + job_icon = "stationengineer" + + head = /obj/item/clothing/head/soft/inteq + uniform = /obj/item/clothing/under/syndicate/inteq/artificer + belt = /obj/item/storage/belt/utility/full/engi + gloves = /obj/item/clothing/gloves/color/yellow + suit_store = /obj/item/gun/ballistic/automatic/pistol/commander/inteq + + backpack_contents = list(/obj/item/ammo_box/magazine/co9mm=2) + +/datum/outfit/job/inteq/ert/engineer/eva + name = "ERT - Inteq Artificer (EVA)" + head = null + suit = /obj/item/clothing/suit/space/hardsuit/syndi/inteq + r_pocket = /obj/item/tank/internals/emergency_oxygen/engi /datum/outfit/job/inteq/ert/medic name = "ERT - Inteq Corpsman" @@ -36,13 +69,21 @@ jobtype = /datum/job/paramedic job_icon = "paramedic" + head = /obj/item/clothing/head/soft/inteq/corpsman uniform = /obj/item/clothing/under/syndicate/inteq/corpsman belt = /obj/item/storage/belt/medical/webbing/paramedic - suit_store = null + suit = /obj/item/clothing/suit/armor/inteq/corpsman + suit_store = /obj/item/healthanalyzer + + backpack_contents = list(/obj/item/storage/firstaid/medical=1) - l_pocket = /obj/item/healthanalyzer +/datum/outfit/job/inteq/ert/medic/eva + name = "ERT - Inteq Corpsman (EVA)" - backpack_contents = list(/obj/item/storage/firstaid/medical=1, /obj/item/radio=1) + head = null + suit = /obj/item/clothing/suit/space/hardsuit/syndi/inteq + suit_store = null + r_pocket = /obj/item/tank/internals/emergency_oxygen/engi /datum/outfit/job/inteq/ert/leader name = "ERT - Inteq Vanguard" @@ -50,7 +91,62 @@ jobtype = /datum/job/hos job_icon = "headofsecurity" + head = /obj/item/clothing/head/helmet/inteq ears = /obj/item/radio/headset/inteq/alt/captain back = /obj/item/storage/backpack/messenger/inteq + belt = /obj/item/storage/belt/security/webbing/inteq/skm_carabine + suit = /obj/item/clothing/suit/armor/hos/inteq + suit_store = /obj/item/gun/ballistic/automatic/smg/skm_carbine/inteq + id = /obj/item/card/id/gold + + backpack_contents = list(/obj/item/megaphone/sec) + +/datum/outfit/job/inteq/ert/leader/eva + name = "ERT - Inteq Vanguard (EVA)" + + head = null + suit = /obj/item/clothing/suit/space/hardsuit/syndi/inteq + r_pocket = /obj/item/tank/internals/emergency_oxygen/engi + +/datum/outfit/job/inteq/ert/honor_guard + name = "ERT - Inteq Honor Guard" + id_assignment = "Guardsman" + jobtype = /datum/job/officer + job_icon = "inteq" + + uniform = /obj/item/clothing/under/syndicate/inteq + suit = /obj/item/clothing/suit/armor/vest/marine + belt = /obj/item/storage/belt/military/assault/commander + gloves = /obj/item/clothing/gloves/color/white + shoes = /obj/item/clothing/shoes/combat + head = /obj/item/clothing/head/beret/sec/hos/inteq/honorable + mask = /obj/item/clothing/mask/gas/sechailer/balaclava/inteq + ears = /obj/item/radio/headset/inteq/captain + glasses = /obj/item/clothing/glasses/hud/security/sunglasses/inteq + r_pocket = /obj/item/restraints/handcuffs suit_store = /obj/item/gun/ballistic/automatic/pistol/commander/inteq - id = /obj/item/card/id/silver + + backpack_contents = list(/obj/item/gun/energy/taser) + + +/datum/outfit/job/inteq/ert/inspector + name = "ERT - Inteq Mothership Investigator" + id_assignment = "Investigator" + jobtype = /datum/job/head_of_personnel + job_icon = "inteq" + + uniform = /obj/item/clothing/under/syndicate/inteq + suit = null + suit_store = null + belt = /obj/item/clipboard + gloves = /obj/item/clothing/gloves/color/black + shoes = /obj/item/clothing/shoes/laceup + head = /obj/item/clothing/head/beret/sec/inteq + mask = null + ears = /obj/item/radio/headset/inteq/captain + glasses = null + + r_pocket = /obj/item/pen/fourcolor + l_pocket = /obj/item/taperecorder + + backpack_contents = list(/obj/item/stamp/inteq, /obj/item/folder, /obj/item/paper_bin/bundlenatural, /obj/item/hand_labeler) diff --git a/code/modules/clothing/outfits/ert/minutemen_ert.dm b/code/modules/clothing/outfits/ert/minutemen_ert.dm index d5a3ec72e94c..891ea1efe313 100644 --- a/code/modules/clothing/outfits/ert/minutemen_ert.dm +++ b/code/modules/clothing/outfits/ert/minutemen_ert.dm @@ -1,26 +1,61 @@ -/datum/outfit/job/clip/minutemen/grunt/dressed/bard - name = "ERT - CLIP Minuteman BARD Specialist" - id_assignment = "Biohazard Assessment Specialist" +/datum/outfit/job/clip/minutemen/bard + name = "ERT - C-MM BARD Field Agent" + id_assignment = "Biohazard Assessment Field Agent" + jobtype = /datum/job/virologist + job_icon = "virologist" // can someone resprite the biosuits already + + wallet = null + + uniform = /obj/item/clothing/under/clip/formal/with_shirt + head = /obj/item/clothing/head/clip + mask = /obj/item/clothing/mask/surgical + gloves = /obj/item/clothing/gloves/color/latex + + backpack = /obj/item/storage/backpack/satchel/sec/clip + satchel = /obj/item/storage/backpack/satchel/sec/clip + courierbag = /obj/item/storage/backpack/satchel/sec/clip + duffelbag = /obj/item/storage/backpack/satchel/sec/clip + + l_pocket = /obj/item/taperecorder + r_pocket = /obj/item/flashlight + + backpack_contents = list(/obj/item/clothing/mask/gas/clip, + /obj/item/evidencebag = 2, + /obj/item/camera, + /obj/item/storage/firstaid/toxin, + ) + +/datum/outfit/job/clip/minutemen/bard/emergency + name = "ERT - C-MM BARD Xenofauna Specialist" + id_assignment = "Biohazard Assessment Xenofauna Specialist" job_icon = "clip_cmm2" + uniform = /obj/item/clothing/under/clip/minutemen suit = /obj/item/clothing/suit/armor/vest/marine/heavy - suit_store = /obj/item/gun/ballistic/shotgun/cm15 + suit_store = /obj/item/gun/ballistic/shotgun/cm15/incendiary mask = /obj/item/clothing/mask/gas/clip head = /obj/item/clothing/head/helmet/riot/clip - belt = /obj/item/storage/belt/military/clip/cm15 + belt = /obj/item/storage/belt/military/clip/cm15_inc glasses = /obj/item/clothing/glasses/hud/health/night r_pocket = /obj/item/melee/knife/combat l_pocket = /obj/item/extinguisher/mini + shoes = /obj/item/clothing/shoes/combat + + backpack = /obj/item/storage/backpack/ert + satchel = /obj/item/storage/backpack/ert + courierbag = /obj/item/storage/backpack/ert + duffelbag = /obj/item/storage/backpack/ert backpack_contents = list( /obj/item/flashlight/seclite = 1, /obj/item/storage/box/flares = 1 ) -/datum/outfit/job/clip/minutemen/grunt/dressed/bard/medic - name = "ERT - CLIP Minuteman BARD Medical Specialist" - id_assignment = "Corpsman" +/datum/outfit/job/clip/minutemen/bard/emergency/medic + name = "ERT - C-MM BARD Medical Specialist" + id_assignment = "Biohazard Assessment Medical Aid Specialist" + uniform = /obj/item/clothing/under/clip/medic suit = /obj/item/clothing/suit/armor/vest/marine suit_store = /obj/item/gun/ballistic/automatic/smg/cm5 belt = /obj/item/storage/belt/medical/webbing/clip/prefilled @@ -31,11 +66,17 @@ /obj/item/flashlight/seclite = 1, /obj/item/defibrillator/compact/loaded = 1, /obj/item/storage/firstaid/advanced = 1, - /obj/item/ammo_box/magazine/smgm9mm = 2 + /obj/item/ammo_box/magazine/cm5_9mm = 2 ) -/datum/outfit/job/clip/minutemen/grunt/dressed/bard/flamer - name = "ERT - CLIP Minuteman BARD Flamethrower Specialist" + backpack = /obj/item/storage/backpack/ert/medical + satchel = /obj/item/storage/backpack/ert/medical + courierbag = /obj/item/storage/backpack/ert/medical + duffelbag = /obj/item/storage/backpack/ert/medical + +/datum/outfit/job/clip/minutemen/bard/emergency/flamer + name = "ERT - C-MM BARD Flamethrower Specialist" + id_assignment = "Biohazard Assessment Fire Control Specialist" suit = /obj/item/clothing/suit/armor/vest/marine/medium suit_store = /obj/item/flamethrower/full/tank @@ -46,17 +87,15 @@ backpack_contents = list( /obj/item/flashlight/seclite = 1, /obj/item/extinguisher = 1, - /obj/item/gun/ballistic/automatic/pistol/commander = 1 // replace commander with the cm23 when it is implemented + /obj/item/gun/ballistic/automatic/pistol/cm23 = 1 ) - -/datum/outfit/job/clip/minutemen/grunt/dressed/bard/leader - name = "ERT - CLIP Minuteman BARD Specialist Sergeant" - id_assignment = "Biohazard Assessment Sergeant" - job_icon = "clip_cmm3" +/datum/outfit/job/clip/minutemen/bard/emergency/leader + name = "ERT - C-MM BARD Master Sergeant" + id_assignment = "Master Sergeant" + job_icon = "clip_cmm4" belt = /obj/item/storage/belt/military/clip/e50 - uniform = /obj/item/clothing/under/clip/officer suit = /obj/item/clothing/suit/armor/vest/marine suit_store = /obj/item/gun/energy/laser/e50/clip r_pocket = /obj/item/grenade/c4 @@ -65,36 +104,79 @@ backpack_contents = list( /obj/item/storage/box/flares = 1, /obj/item/grenade/c4 = 2, + /obj/item/grenade/smokebomb = 2, /obj/item/flashlight/seclite = 1 ) -/datum/outfit/job/clip/minutemen/grunt/dressed/riot - name = "ERT - CLIP Minuteman Riot Officer" - job_icon = "securityofficerOld" +/datum/outfit/job/clip/minutemen/military_police + name = "ERT - C-MM Military Police" + id_assignment = "Military Police" + job_icon = "clip_cmm3" + + ears = /obj/item/radio/headset/clip/alt + suit = /obj/item/clothing/suit/armor/vest/bulletproof + head = /obj/item/clothing/head/clip/slouch + glasses = /obj/item/clothing/glasses/sunglasses + belt = /obj/item/storage/belt/security/full + shoes = /obj/item/clothing/shoes/jackboots + gloves = /obj/item/clothing/gloves/color/white + + l_pocket = /obj/item/flashlight/seclite + r_pocket = /obj/item/melee/knife/combat + +/datum/outfit/job/clip/minutemen/military_police/riot + name = "ERT - C-MM Military Police (Riot Control)" suit = /obj/item/clothing/suit/armor/riot/clip + mask = /obj/item/clothing/mask/gas/sechailer/balaclava + glasses = /obj/item/clothing/glasses/sunglasses/big + gloves = /obj/item/clothing/gloves/combat head = /obj/item/clothing/head/helmet/riot/clip l_hand = /obj/item/melee/baton/loaded - back = /obj/item/shield/riot - belt = /obj/item/gun/ballistic/automatic/smg/cm5/no_mag - r_pocket = /obj/item/ammo_box/magazine/smgm9mm/rubber - l_pocket = /obj/item/ammo_box/magazine/smgm9mm/rubber + belt = /obj/item/gun/ballistic/automatic/smg/cm5/rubber + + r_pocket = /obj/item/ammo_box/magazine/cm5_9mm/rubber + l_pocket = /obj/item/reagent_containers/spray/pepper backpack_contents = null box = null - backpack = null - duffelbag = null - courierbag = null - satchel = null + backpack = /obj/item/shield/riot + duffelbag = /obj/item/shield/riot + courierbag = /obj/item/shield/riot + satchel = /obj/item/shield/riot -/datum/outfit/job/clip/minutemen/grunt/dressed/riot/leader - name = "ERT - CLIP Minutemen Riot Officer Sergeant" - id_assignment = "Security Sergeant" - job_icon = "lieutenant" +/datum/outfit/job/clip/minutemen/military_police/leader + name = "ERT - C-MM Chief Military Police" + id_assignment = "Chief Military Police" + job_icon = "clip_cmm4" + head = /obj/item/clothing/head/clip/slouch/officer + uniform = /obj/item/clothing/under/clip/officer ears = /obj/item/radio/headset/clip/alt/captain - back = /obj/item/shield/riot/flash + +/datum/outfit/job/clip/minutemen/military_police/leader/riot + name = "ERT - C-MM Chief Military Police (Riot Control)" + + suit = /obj/item/clothing/suit/armor/riot/clip + mask = /obj/item/clothing/mask/gas/sechailer/balaclava + glasses = /obj/item/clothing/glasses/sunglasses/big + gloves = /obj/item/clothing/gloves/tackler/combat + head = /obj/item/clothing/head/helmet/riot/clip + suit_store = /obj/item/melee/baton/loaded + l_hand = /obj/item/megaphone/command + belt = /obj/item/gun/ballistic/automatic/smg/cm5/rubber + + r_pocket = /obj/item/assembly/flash/handheld + l_pocket = /obj/item/ammo_box/magazine/cm5_9mm/rubber + + backpack_contents = null + box = null + + backpack = /obj/item/shield/riot/flash + duffelbag = /obj/item/shield/riot/flash + courierbag = /obj/item/shield/riot/flash + satchel = /obj/item/shield/riot/flash /datum/outfit/job/clip/minutemen/grunt/dressed/hardsuit name = "CLIP Minutemen - Minuteman (Spotter Hardsuit)" diff --git a/code/modules/clothing/outfits/ert/nanotrasen_ert.dm b/code/modules/clothing/outfits/ert/nanotrasen_ert.dm index 1ca40cd640e3..0e6d3070a482 100644 --- a/code/modules/clothing/outfits/ert/nanotrasen_ert.dm +++ b/code/modules/clothing/outfits/ert/nanotrasen_ert.dm @@ -1,464 +1,72 @@ -// this is where the base ERT outfit goes -/datum/outfit/centcom/ert - name = "ERT Common" - - mask = /obj/item/clothing/mask/gas/sechailer - uniform = /obj/item/clothing/under/rank/centcom/official - shoes = /obj/item/clothing/shoes/combat/swat - gloves = /obj/item/clothing/gloves/combat - ears = /obj/item/radio/headset/headset_cent/alt - -/datum/outfit/centcom/ert/post_equip(mob/living/carbon/human/human, visualsOnly = FALSE) - if(visualsOnly) - return - - var/obj/item/card/id/id = human.wear_id - if(id) - id.registered_name = human.real_name - id.update_label() - ..() - -/datum/outfit/centcom/ert/commander - name = "ERT Commander" - - id = /obj/item/card/id/ert - suit = /obj/item/clothing/suit/space/hardsuit/ert - suit_store = /obj/item/gun/energy/e_gun/hades - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - back = /obj/item/storage/backpack/ert - belt = /obj/item/storage/belt/security/full - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/melee/baton/loaded=1) - l_pocket = /obj/item/melee/knife/switchblade - -/datum/outfit/centcom/ert/commander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - - if(visualsOnly) - return - var/obj/item/radio/R = H.ears - R.keyslot = new /obj/item/encryptionkey/heads/captain - R.recalculateChannels() - -/datum/outfit/centcom/ert/commander/alert - name = "ERT Commander - High Alert" - - mask = /obj/item/clothing/mask/gas/sechailer/swat - glasses = /obj/item/clothing/glasses/thermal/eyepatch - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/melee/baton/loaded=1,\ - /obj/item/gun/energy/pulse/pistol=1) - l_pocket = /obj/item/melee/transforming/energy/sword/saber - -/datum/outfit/centcom/ert/security - name = "ERT Security" - - id = /obj/item/card/id/ert/security - suit = /obj/item/clothing/suit/space/hardsuit/ert/sec - suit_store = /obj/item/gun/energy/e_gun/hades - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - gloves = /obj/item/clothing/gloves/tackler/combat/insulated - back = /obj/item/storage/backpack/ert/security - belt = /obj/item/storage/belt/security/full - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/storage/box/handcuffs=1, - /obj/item/melee/baton/loaded=1) - -/datum/outfit/centcom/ert/security/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - - if(visualsOnly) - return - - var/obj/item/radio/R = H.ears - R.keyslot = new /obj/item/encryptionkey/headset_com - R.recalculateChannels() - -/datum/outfit/centcom/ert/security/alert - name = "ERT Security - High Alert" - - suit_store = /obj/item/gun/energy/pulse/carbine - mask = /obj/item/clothing/mask/gas/sechailer/swat - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/storage/box/handcuffs=1,\ - /obj/item/melee/baton/loaded=1) - -/datum/outfit/centcom/ert/medic - name = "ERT Medic" - - id = /obj/item/card/id/ert/medical - suit = /obj/item/clothing/suit/space/hardsuit/ert/med - suit_store = /obj/item/gun/energy/e_gun/hades - glasses = /obj/item/clothing/glasses/hud/health - back = /obj/item/storage/backpack/ert/medical - belt = /obj/item/storage/belt/medical - r_hand = /obj/item/storage/firstaid/regular - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/melee/baton/loaded=1,\ - /obj/item/reagent_containers/hypospray/combat=1,\ - /obj/item/gun/medbeam=1) - -/datum/outfit/centcom/ert/medic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - - if(visualsOnly) - return - - var/obj/item/radio/R = H.ears - R.keyslot = new /obj/item/encryptionkey/headset_com - R.recalculateChannels() - -/datum/outfit/centcom/ert/medic/alert - name = "ERT Medic - High Alert" - - mask = /obj/item/clothing/mask/gas/sechailer/swat - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/melee/baton/loaded=1,\ - /obj/item/gun/energy/pulse/pistol=1,\ - /obj/item/reagent_containers/hypospray/combat/nanites=1,\ - /obj/item/gun/medbeam=1) - -/datum/outfit/centcom/ert/engineer - name = "ERT Engineer" - - id = /obj/item/card/id/ert/engineer - suit = /obj/item/clothing/suit/space/hardsuit/ert/engi - suit_store = /obj/item/gun/energy/e_gun/hades - glasses = /obj/item/clothing/glasses/meson/engine - back = /obj/item/storage/backpack/ert/engineer - belt = /obj/item/storage/belt/utility/full - l_pocket = /obj/item/rcd_ammo/large - r_hand = /obj/item/storage/firstaid/regular - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/melee/baton/loaded=1,\ - /obj/item/construction/rcd/loaded=1) - - -/datum/outfit/centcom/ert/engineer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() +/datum/outfit/job/nanotrasen/ert + name = "ERT - Nanotrasen Vigilitas Security Officer" + jobtype = /datum/job/officer + job_icon = "securityofficer" - if(visualsOnly) - return + wallet = null - var/obj/item/radio/R = H.ears - R.keyslot = new /obj/item/encryptionkey/headset_com - R.recalculateChannels() + ears = /obj/item/radio/headset/headset_sec/alt + uniform = /obj/item/clothing/under/nanotrasen/security + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/nanotrasen/cap/security + suit = /obj/item/clothing/suit/armor/nanotrasen + suit_store = /obj/item/gun/ballistic/automatic/pistol/commander + dcoat = /obj/item/clothing/suit/hooded/wintercoat/security + shoes = /obj/item/clothing/shoes/jackboots -/datum/outfit/centcom/ert/engineer/alert - name = "ERT Engineer - High Alert" + backpack = /obj/item/storage/backpack/security + satchel = /obj/item/storage/backpack/satchel/sec + duffelbag = /obj/item/storage/backpack/duffelbag/sec + courierbag = /obj/item/storage/backpack/messenger/sec + box = /obj/item/storage/box/survival/security - mask = /obj/item/clothing/mask/gas/sechailer/swat - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/melee/baton/loaded=1,\ - /obj/item/gun/energy/pulse/pistol=1,\ - /obj/item/construction/rcd/combat=1) + backpack_contents = list(/obj/item/ammo_box/magazine/co9mm = 3) -// official + implants = list(/obj/item/implant/weapons_auth) -/datum/outfit/centcom/centcom_official - name = "CentCom Official" +/datum/outfit/job/nanotrasen/ert/inspector + name = "ERT - Nanotrasen CentCom Inspector" + id_assignment = "Inspector" + job_icon = "centcom" + head = null uniform = /obj/item/clothing/under/rank/centcom/official shoes = /obj/item/clothing/shoes/sneakers/black gloves = /obj/item/clothing/gloves/color/black + suit = null + suit_store = null ears = /obj/item/radio/headset/headset_cent glasses = /obj/item/clothing/glasses/sunglasses - belt = /obj/item/gun/energy/e_gun - l_pocket = /obj/item/pen - back = /obj/item/storage/backpack/satchel - r_pocket = /obj/item/pda/heads - l_hand = /obj/item/clipboard + belt = /obj/item/clipboard id = /obj/item/card/id/centcom - backpack_contents = list(/obj/item/stamp/centcom=1) - -/datum/outfit/centcom/centcom_official/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - var/obj/item/pda/heads/pda = H.r_store - pda.owner = H.real_name - pda.ownjob = "CentCom Official" - pda.update_label() - - var/obj/item/card/id/W = H.wear_id - W.access = get_centcom_access("CentCom Official") - W.access += ACCESS_WEAPONS - W.assignment = "CentCom Official" - W.registered_name = H.real_name - W.update_label() - ..() - -/datum/outfit/centcom/ert/janitor - name = "ERT Janitor" - - id = /obj/item/card/id/ert/janitor - suit = /obj/item/clothing/suit/space/hardsuit/ert/jani - glasses = /obj/item/clothing/glasses/night - back = /obj/item/storage/backpack/ert/janitor - belt = /obj/item/storage/belt/janitor/full - r_pocket = /obj/item/grenade/chem_grenade/cleaner - l_pocket = /obj/item/grenade/chem_grenade/cleaner - l_hand = /obj/item/storage/bag/trash/bluespace - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/storage/box/lights/mixed=1,\ - /obj/item/melee/baton/loaded=1,\ - /obj/item/mop/advanced=1,\ - /obj/item/reagent_containers/glass/bucket=1,\ - /obj/item/grenade/clusterbuster/cleaner=1) - -/datum/outfit/centcom/ert/janitor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - - if(visualsOnly) - return - - var/obj/item/radio/R = H.ears - R.keyslot = new /obj/item/encryptionkey/headset_com - R.recalculateChannels() + l_pocket = /obj/item/pen + r_pocket = /obj/item/pda/heads -/datum/outfit/centcom/ert/janitor/heavy - name = "ERT Janitor - Heavy Duty" + backpack_contents = list(/obj/item/stamp/centcom, /obj/item/paper_bin/bundlenatural, /obj/item/hand_labeler) - mask = /obj/item/clothing/mask/gas/sechailer/swat - r_hand = /obj/item/reagent_containers/spray/chemsprayer/janitor - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/storage/box/lights/mixed=1,\ - /obj/item/melee/baton/loaded=1,\ - /obj/item/grenade/clusterbuster/cleaner=3) +// /datum/outfit/job/nanotrasen/ert/emergency +// name = "ERT - Vigilitas Emergency Response Officer" -/datum/outfit/centcom/centcom_intern - name = "CentCom Intern" +/datum/outfit/job/nanotrasen/ert/leader + name = "ERT - Nanotrasen Vigilitas Security Corporal" + jobtype = /datum/job/hos + job_icon = "lieutenant" - uniform = /obj/item/clothing/under/rank/centcom/intern - shoes = /obj/item/clothing/shoes/sneakers/black + ears = /obj/item/radio/headset/headset_sec/alt + uniform = /obj/item/clothing/under/nanotrasen/security gloves = /obj/item/clothing/gloves/color/black - ears = /obj/item/radio/headset/headset_cent - glasses = /obj/item/clothing/glasses/sunglasses - belt = /obj/item/melee/classic_baton - r_hand = /obj/item/gun/ballistic/rifle/illestren - back = /obj/item/storage/backpack/satchel - l_pocket = /obj/item/ammo_box/magazine/illestren_a850r - r_pocket = /obj/item/ammo_box/magazine/illestren_a850r - id = /obj/item/card/id/centcom - backpack_contents = list(/obj/item/storage/box/survival = 1) -/datum/outfit/centcom/centcom_intern/unarmed - name = "CentCom Intern (Unarmed)" - belt = null - l_hand = null - l_pocket = null - r_pocket = null - -/datum/outfit/centcom/centcom_intern/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - - var/obj/item/card/id/W = H.wear_id - W.access = get_centcom_access(name) - W.access += ACCESS_WEAPONS - W.assignment = name - W.registered_name = H.real_name - W.update_label() - -/datum/outfit/centcom/centcom_intern/leader - name = "CentCom Head Intern" - belt = /obj/item/melee/baton/loaded - suit = /obj/item/clothing/suit/armor/vest - suit_store = /obj/item/gun/ballistic/rifle/illestren - r_hand = /obj/item/megaphone - head = /obj/item/clothing/head/intern - -/datum/outfit/centcom/centcom_intern/leader/unarmed // i'll be nice and let the leader keep their baton and vest - name = "CentCom Head Intern (Unarmed)" - suit_store = null - l_pocket = null - r_pocket = null - -// Marine - -/datum/outfit/centcom/ert/marine - name = "Marine Commander" - - id = /obj/item/card/id/ert - suit = /obj/item/clothing/suit/armor/vest/marine - back = /obj/item/storage/backpack/ert - backpack_contents = list( - /obj/item/storage/box/survival/engineer = 1, - /obj/item/gun_voucher/nanotrasen = 1 -) - belt = /obj/item/storage/belt/military/assault - glasses = /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch - l_pocket = /obj/item/melee/knife/combat - r_pocket = /obj/item/tank/internals/emergency_oxygen/double - uniform = /obj/item/clothing/under/rank/security/officer/military - accessory = /obj/item/clothing/accessory/holster/marine - mask = /obj/item/clothing/mask/gas/sechailer - head = /obj/item/clothing/head/helmet/marine - -/datum/outfit/centcom/ert/marine/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - - if(visualsOnly) - return - var/obj/item/radio/headset = H.ears - headset.keyslot = new /obj/item/encryptionkey/heads/captain - headset.recalculateChannels() - -/datum/outfit/centcom/ert/marine/security - name = "Marine Heavy" - - id = /obj/item/card/id/ert/security - suit = /obj/item/clothing/suit/armor/vest/marine/heavy - back = /obj/item/storage/backpack/ert/security - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - head = /obj/item/clothing/head/helmet/marine/security - -/datum/outfit/centcom/ert/marine/security/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - - if(visualsOnly) - return - - var/obj/item/radio/headset = H.ears - headset.keyslot = new /obj/item/encryptionkey/headset_com - headset.recalculateChannels() - -/datum/outfit/centcom/ert/marine/medic - name = "Marine Medic" - - id = /obj/item/card/id/ert/medical - suit = /obj/item/clothing/suit/armor/vest/marine - accessory = /obj/item/clothing/accessory/holster/marine - back = /obj/item/storage/backpack/ert/medical - l_pocket = /obj/item/healthanalyzer - head = /obj/item/clothing/head/helmet/marine/medic - backpack_contents = list( - /obj/item/storage/box/survival/engineer = 1, - /obj/item/gun_voucher/nanotrasen = 1, - /obj/item/reagent_containers/hypospray/combat = 1, - /obj/item/storage/firstaid/regular = 1, - /obj/item/storage/firstaid/advanced = 1 -) - belt = /obj/item/storage/belt/medical/paramedic - glasses = /obj/item/clothing/glasses/hud/health/sunglasses - -/datum/outfit/centcom/ert/marine/medic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - - if(visualsOnly) - return - - var/obj/item/radio/headset = H.ears - headset.keyslot = new /obj/item/encryptionkey/headset_com - headset.recalculateChannels() - -/datum/outfit/centcom/ert/marine/engineer - name = "Marine Engineer" - - id = /obj/item/card/id/ert/engineer - suit = /obj/item/clothing/suit/armor/vest/marine/medium - head = /obj/item/clothing/head/helmet/marine/engineer - back = /obj/item/storage/backpack/ert/engineer - backpack_contents = list( - /obj/item/storage/box/survival/engineer = 1, - /obj/item/gun_voucher/nanotrasen = 1, - /obj/item/rcd_ammo/large = 2, - ) - r_hand = /obj/item/deployable_turret_folded - uniform = /obj/item/clothing/under/rank/security/officer/military/eng - belt = /obj/item/storage/belt/utility/full/ert - glasses = /obj/item/clothing/glasses/hud/diagnostic/sunglasses - -/datum/outfit/centcom/ert/marine/engineer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - - if(visualsOnly) - return - - var/obj/item/radio/headset = H.ears - headset.keyslot = new /obj/item/encryptionkey/headset_com - headset.recalculateChannels() - -// Loss Prevention -/datum/outfit/job/nanotrasen/security/ert/lp - name = "ERT - Loss Prevention Security Specialist" - jobtype = /datum/job/officer - job_icon = "securityresponseofficer" - - head = null - implants = list(/obj/item/implant/mindshield) - ears = /obj/item/radio/headset/nanotrasen/alt - id = /obj/item/card/id/lpsec - suit_store = /obj/item/gun/energy/laser/scatter/shotty - belt = /obj/item/storage/belt/security/full - glasses = /obj/item/clothing/glasses/sunglasses - gloves = /obj/item/clothing/gloves/tackler/combat - suit = /obj/item/clothing/suit/space/hardsuit/ert/lp/sec - uniform = /obj/item/clothing/under/rank/security/head_of_security/nt/lp - shoes = /obj/item/clothing/shoes/jackboots - back = /obj/item/storage/backpack/ert/security - - box = /obj/item/storage/box/survival/security + head = /obj/item/clothing/head/nanotrasen/beret/security + suit = /obj/item/clothing/suit/armor/nanotrasen/slim l_pocket = /obj/item/restraints/handcuffs - r_pocket = /obj/item/melee/knife/combat - - backpack_contents = list(/obj/item/radio=1, /obj/item/stock_parts/cell/gun/upgraded=2, /obj/item/screwdriver=1) - - -/datum/outfit/job/nanotrasen/security/ert/lp/medic - name = "ERT - Loss Prevention Medical Specialist" - jobtype = /datum/job/doctor - job_icon = "medicalresponseofficer" + r_pocket = /obj/item/assembly/flash/handheld + backpack_contents = null - head = null - uniform = /obj/item/clothing/under/rank/medical/paramedic/lp - suit = /obj/item/clothing/suit/space/hardsuit/ert/lp/med - id = /obj/item/card/id/lpmed - gloves = /obj/item/clothing/gloves/color/latex/nitrile - back = /obj/item/storage/backpack/ert/medical - belt = /obj/item/storage/belt/medical/surgery - - box = /obj/item/storage/box/survival/medical - l_pocket = /obj/item/healthanalyzer - r_pocket = /obj/item/reagent_containers/hypospray/medipen/atropine - - backpack_contents = list(/obj/item/storage/firstaid/medical=1, /obj/item/radio=1) - - -/datum/outfit/job/nanotrasen/security/ert/lp/engineer - name = "ERT - Loss Prevention Engineering Specialist" - jobtype = /datum/job/engineer - job_icon = "engineeringresponseofficer" - - head = null - uniform = /obj/item/clothing/under/rank/engineering/engineer/nt/lp - suit = /obj/item/clothing/suit/space/hardsuit/ert/lp/engi - id = /obj/item/card/id/lpengie - belt = /obj/item/storage/belt/utility/full - gloves = /obj/item/clothing/gloves/color/yellow - glasses = /obj/item/clothing/glasses/welding - back = /obj/item/storage/backpack/ert/engineer - - box = /obj/item/storage/box/survival/engineer - l_pocket = /obj/item/extinguisher/mini - r_pocket = /obj/item/wrench/combat - - backpack_contents = list(/obj/item/stack/sheet/metal/fifty=1, /obj/item/stack/sheet/glass/fifty=1, /obj/item/radio=1) +// /datum/outfit/job/nanotrasen/ert/leader/emergency +// name = "ERT - Vigilitas Emergency Response Lieutenant" -/datum/outfit/job/nanotrasen/security/ert/lp/lieutenant - name = "ERT - Loss Prevention Lieutenant" - jobtype = /datum/job/captain - job_icon = "emergencyresponseteamcommander" - - head = null - ears = /obj/item/radio/headset/nanotrasen/alt/captain - id = /obj/item/card/id/lplieu - belt = /obj/item/storage/belt/military/army - gloves = /obj/item/clothing/gloves/color/black - uniform = /obj/item/clothing/under/rank/security/warden/lp - suit = /obj/item/clothing/suit/space/hardsuit/ert/lp - shoes = /obj/item/clothing/shoes/combat - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - back = /obj/item/storage/backpack/ert +// /datum/outfit/job/nanotrasen/ert/emergency/medic +// name = "ERT - Vigilitas Emergency Response Medic" - l_pocket = /obj/item/megaphone/command - r_pocket = /obj/item/binoculars +// /datum/outfit/job/nanotrasen/ert/emergency/engineer +// name = "ERT - Vigilitas Emergency Response Engineer" diff --git a/code/modules/clothing/outfits/ert/roumain_ert.dm b/code/modules/clothing/outfits/ert/roumain_ert.dm new file mode 100644 index 000000000000..efe7828173be --- /dev/null +++ b/code/modules/clothing/outfits/ert/roumain_ert.dm @@ -0,0 +1,131 @@ +/datum/outfit/job/roumain/ert + name = "ERT - Saint-Roumain Hunter" // flaming arrow and shadow + id_assignment = "Hunter" + jobtype = /datum/job/officer + job_icon = "srm_hunter" + + wallet = null + + uniform = /obj/item/clothing/under/suit/roumain + shoes = /obj/item/clothing/shoes/workboots/mining + suit = /obj/item/clothing/suit/armor/roumain + head = /obj/item/clothing/head/cowboy/sec/roumain + belt = /obj/item/gun/ballistic/revolver/shadow + suit_store = /obj/item/gun/ballistic/shotgun/flamingarrow/factory + + l_pocket = /obj/item/ammo_box/a44roum_speedloader + r_pocket = /obj/item/flashlight/lantern + + duffelbag = /obj/item/storage/backpack/satchel/leather + courierbag = /obj/item/storage/backpack/satchel/leather + backpack = /obj/item/storage/backpack/satchel/leather + satchel = /obj/item/storage/backpack/satchel/leather + box = null + + backpack_contents = list(/obj/item/ammo_box/a44roum_speedloader = 2, /obj/item/storage/box/ammo/c38) + +/datum/outfit/job/roumain/ert/firestorm + name = "ERT - Saint-Roumain Hunter (Firestorm)" // firestorm and shadow + + belt = /obj/item/gun/ballistic/revolver/shadow + suit_store = /obj/item/gun/ballistic/automatic/smg/firestorm/pan + + l_pocket = /obj/item/ammo_box/a44roum_speedloader + + backpack_contents = list(/obj/item/ammo_box/magazine/c45_firestorm_mag/pan = 3, /obj/item/ammo_box/a44roum_speedloader = 2, /obj/item/storage/box/ammo/a44roum) + +/datum/outfit/job/roumain/ert/vickland + name = "ERT - Saint-Roumain Hunter (Vickland)" // vickland and candor + + belt = /obj/item/gun/ballistic/automatic/pistol/candor/factory + suit_store = /obj/item/gun/ballistic/automatic/marksman/vickland + + l_pocket = /obj/item/ammo_box/magazine/m45 + + backpack_contents = list(/obj/item/ammo_box/vickland_a308 = 6, /obj/item/storage/box/ammo/a308, /obj/item/ammo_box/magazine/m45 = 2) + +/datum/outfit/job/roumain/ert/scout + name = "ERT - Saint-Roumain Hunter (Scout)" // scout and detective special + + belt = /obj/item/gun/ballistic/revolver/detective + suit_store = /obj/item/gun/ballistic/rifle/scout + + backpack_contents = list(/obj/item/ammo_box/a300 = 5) + +/datum/outfit/job/roumain/ert/medic + name = "ERT - Saint-Roumain Hunter Doctor" + id_assignment = "Hunter Doctor" + job_icon = "srm_doctor" + jobtype = /datum/job/doctor + + uniform = /obj/item/clothing/under/suit/roumain + shoes = /obj/item/clothing/shoes/workboots/mining + suit = /obj/item/clothing/suit/toggle/labcoat/roumain_med + suit_store = null + head = /obj/item/clothing/head/cowboy/sec/roumain/med + mask = /obj/item/clothing/mask/gas/plaguedoctor + gloves = null + +/datum/outfit/job/roumain/ert/engineer + name = "ERT - Saint-Roumain Machinist" + id_assignment = "Machinist" + job_icon = "srm_machinist" + jobtype = /datum/job/engineer + + uniform = /obj/item/clothing/under/suit/roumain + alt_uniform = null + shoes = /obj/item/clothing/shoes/workboots/mining + belt = /obj/item/storage/belt/utility/full/engi + suit = /obj/item/clothing/suit/hazardvest/roumain + suit_store = null + head = /obj/item/clothing/head/cowboy/sec/roumain/machinist + glasses = /obj/item/clothing/glasses/welding + accessory = /obj/item/clothing/accessory/waistcoat/roumain + gloves = /obj/item/clothing/gloves/color/yellow + + +/datum/outfit/job/roumain/ert/leader + name = "ERT - Saint-Roumain Hunter Montagne" // flaming bolt and montagne + id_assignment = "Hunter Montagne" + job_icon = "srm_montagne" + jobtype = /datum/job/captain + + ears = /obj/item/radio/headset/headset_com/alt + uniform = /obj/item/clothing/under/suit/roumain + shoes = /obj/item/clothing/shoes/cowboy + suit = /obj/item/clothing/suit/armor/roumain/montagne + suit_store = /obj/item/gun/ballistic/shotgun/flamingarrow/bolt + belt = /obj/item/gun/ballistic/revolver/montagne + head = /obj/item/clothing/head/cowboy/sec/roumain/montagne + id = /obj/item/card/id/gold + + duffelbag = /obj/item/storage/backpack/cultpack + courierbag = /obj/item/storage/backpack/cultpack + backpack = /obj/item/storage/backpack/cultpack + satchel = /obj/item/storage/backpack/cultpack + +/datum/outfit/job/roumain/ert/leader/twobore + name = "ERT - Saint-Roumain Hunter Montagne (Huntsman)" // huntsman (twobore) and montagne + + suit_store = /obj/item/gun/ballistic/shotgun/doublebarrel/twobore + + l_pocket = /obj/item/ammo_box/a357 + + backpack_contents = list(/obj/item/ammo_casing/shotgun/buckshot/twobore = 8) + +/datum/outfit/job/roumain/ert/leader/colligne + name = "ERT - Saint-Roumain Hunter Colligne" // double barrel and ashhand + id_assignment = "Hunter Colligne" + job_icon = "srm_colligne" + jobtype = /datum/job/head_of_personnel + + ears = /obj/item/radio/headset/headset_com + uniform = /obj/item/clothing/under/suit/roumain + shoes = /obj/item/clothing/shoes/workboots/mining + suit = /obj/item/clothing/suit/armor/roumain/colligne + suit_store = /obj/item/gun/ballistic/shotgun/doublebarrel/roumain + head = /obj/item/clothing/head/cowboy/sec/roumain/colligne + belt = /obj/item/gun/ballistic/revolver/ashhand + id = /obj/item/card/id/silver + + backpack_contents = list(/obj/item/storage/box/ammo/a12g_buckshot, /obj/item/storage/box/ammo/a4570) diff --git a/code/modules/clothing/outfits/ert/solgov_ert.dm b/code/modules/clothing/outfits/ert/solgov_ert.dm index d6830b751498..5fbc808397b1 100644 --- a/code/modules/clothing/outfits/ert/solgov_ert.dm +++ b/code/modules/clothing/outfits/ert/solgov_ert.dm @@ -4,6 +4,8 @@ jobtype = /datum/job/officer job_icon = "sonnensoldner" + wallet = null + id = /obj/item/card/id/solgov uniform = /obj/item/clothing/under/solgov suit = /obj/item/clothing/suit/armor/vest/solgov @@ -11,20 +13,20 @@ ears = /obj/item/radio/headset/solgov/alt gloves = /obj/item/clothing/gloves/combat head = /obj/item/clothing/head/solgov/sonnensoldner - shoes = /obj/item/clothing/shoes/workboots - back = /obj/item/storage/backpack + shoes = /obj/item/clothing/shoes/combat box = /obj/item/storage/box/survival l_hand = /obj/item/energyhalberd /datum/outfit/job/solgov/ert/inspector - name = "ERT - Inspector (SolGov)" + name = "ERT - SolGov Inspector" id_assignment = "Inspector" jobtype = /datum/job/head_of_personnel job_icon = "solgovrepresentative" uniform = /obj/item/clothing/under/solgov/formal + neck = /obj/item/clothing/neck/cloak/solgov belt = /obj/item/clipboard ears = /obj/item/radio/headset/solgov/captain back = /obj/item/storage/backpack/satchel/leather @@ -35,7 +37,9 @@ suit_store = null mask = null glasses = null - l_hand = null - backpack_contents = list(/obj/item/stamp/solgov=1) + r_pocket = /obj/item/pen/fourcolor + l_pocket = /obj/item/taperecorder + + backpack_contents = list(/obj/item/folder/solgov, /obj/item/paper_bin/bundlenatural, /obj/item/hand_labeler) diff --git a/code/modules/clothing/outfits/ert/syndicate_ert.dm b/code/modules/clothing/outfits/ert/syndicate_ert.dm index c37dab500091..9f6dfc0aca33 100644 --- a/code/modules/clothing/outfits/ert/syndicate_ert.dm +++ b/code/modules/clothing/outfits/ert/syndicate_ert.dm @@ -1,114 +1,186 @@ +// unaligned. they're basically stand-ins + /datum/outfit/job/syndicate/ert name = "ERT - Syndicate Basic" jobtype = /datum/job/officer job_icon = "securityofficer" + wallet = null + + uniform = /obj/item/clothing/under/syndicate/combat suit = /obj/item/clothing/suit/armor/vest/syndie - suit_store = /obj/item/gun/ballistic/automatic/smg/cobra + suit_store = /obj/item/gun/ballistic/automatic/assault/hydra shoes = /obj/item/clothing/shoes/combat - ears = /obj/item/radio/headset/syndicate/alt + ears = /obj/item/radio/headset/headset_sec/alt gloves = /obj/item/clothing/gloves/color/black id = /obj/item/card/id/syndicate_command/crew_id mask = /obj/item/clothing/mask/gas/sechailer/balaclava - head = /obj/item/clothing/head/helmet/operator - back = /obj/item/storage/backpack/security - belt = /obj/item/storage/belt/military/c20r + head = /obj/item/clothing/head/helmet/syndie + belt = /obj/item/storage/belt/military/hydra + glasses = /obj/item/clothing/glasses/hud/security r_pocket = /obj/item/melee/knife/combat l_pocket = /obj/item/grenade/frag implants = list(/obj/item/implant/weapons_auth) - backpack_contents = list(/obj/item/radio=1) + backpack_contents = list(/obj/item/gun/ballistic/automatic/pistol/ringneck=1, /obj/item/ammo_box/magazine/m10mm_ringneck=2) /datum/outfit/job/syndicate/ert/leader name = "ERT - Syndicate Basic Leader" job_icon = "lieutenant" head = /obj/item/clothing/head/HoS/beret/syndicate + mask = /obj/item/clothing/mask/gas/sechailer/balaclava + ears = /obj/item/radio/headset/syndicate/alt/leader + +// inspector + +/datum/outfit/job/syndicate/ert/inspector + name = "ERT - ACLF Inspector" + id_assignment = "Inspector" + jobtype = /datum/job/head_of_personnel + job_icon = "syndicate" + + uniform = /obj/item/clothing/under/syndicate + head = /obj/item/clothing/head/HoS/beret/syndicate + mask = null + belt = /obj/item/clipboard + back = /obj/item/storage/backpack/satchel/leather ears = /obj/item/radio/headset/syndicate/captain + shoes = /obj/item/clothing/shoes/laceup + gloves = /obj/item/clothing/gloves/color/white + suit = /obj/item/clothing/suit/armor/hos + suit_store = null - backpack_contents = list(/obj/item/gun/ballistic/automatic/pistol/ringneck=1, /obj/item/ammo_box/magazine/m10mm_ringneck=2, /obj/item/radio=1) + backpack = /obj/item/storage/backpack/satchel/sec + duffelbag = /obj/item/storage/backpack/satchel/sec + satchel = /obj/item/storage/backpack/satchel/sec + courierbag = /obj/item/storage/backpack/satchel/sec -// gorlex loyalist/2nd battlegroup + l_pocket = /obj/item/pen/fourcolor + r_pocket = /obj/item/taperecorder -/datum/outfit/job/syndicate/ert/gorlex - name = "ERT - New Gorlex Republic Trooper" + backpack_contents = list(/obj/item/stamp/syndicate, /obj/item/paper_bin, /obj/item/folder/syndicate, /obj/item/tape) - head = /obj/item/clothing/head/helmet/swat - uniform = /obj/item/clothing/under/syndicate/combat - suit = /obj/item/clothing/suit/armor/vest/bulletproof - belt = /obj/item/storage/belt/military/assault/m90 - back = /obj/item/storage/backpack/security - suit_store = /obj/item/gun/ballistic/automatic/assault/hydra +// new gorlex republic + +/datum/outfit/job/syndicate/ert/ngr + name = "ERT - New Gorlex Republic Serviceman" + id_assignment = "Serviceman" + + head = /obj/item/clothing/head/helmet/ngr + mask = /obj/item/clothing/mask/gas/sechailer/balaclava/ngr + ears = /obj/item/radio/headset/headset_sec/alt + uniform = /obj/item/clothing/under/syndicate/ngr + glasses = /obj/item/clothing/glasses/hud/security/sunglasses/ngr + suit = /obj/item/clothing/suit/armor/ngr + belt = /obj/item/storage/belt/security/webbing/ngr/cobra + suit_store = /obj/item/gun/ballistic/automatic/smg/cobra + +/datum/outfit/job/syndicate/ert/ngr/grenadier + name = "ERT - New Gorlex Republic Grenadier" -/datum/outfit/job/syndicate/ert/gorlex/pointman - name = "ERT - New Gorlex Republic Pointman" + belt = /obj/item/storage/belt/security/webbing/ngr/hydra_grenadier + suit_store = /obj/item/gun/ballistic/automatic/assault/hydra/underbarrel_gl - suit_store = /obj/item/gun/ballistic/shotgun/automatic/bulldog - belt = /obj/item/storage/belt/security/webbing/bulldog + backpack_contents = list(/obj/item/grenade/c4 = 3) -/datum/outfit/job/syndicate/ert/gorlex/medic - name = "ERT - New Gorlex Republic Medic" +/datum/outfit/job/syndicate/ert/ngr/medic + name = "ERT - New Gorlex Republic Field Medic" jobtype = /datum/job/paramedic job_icon = "paramedic" + id_assignment = "Field Medic" - head = /obj/item/clothing/head/soft/black - mask = null - suit = /obj/item/clothing/suit/armor/vest/alt + head = /obj/item/clothing/head/ngr/surgical + mask = /obj/item/clothing/mask/gas/syndicate/ngr belt = /obj/item/storage/belt/medical/webbing/paramedic - glasses = /obj/item/clothing/glasses/hud/health/sunglasses + glasses = /obj/item/clothing/glasses/hud/health gloves = /obj/item/clothing/gloves/color/latex/nitrile/evil - suit_store = /obj/item/gun/ballistic/automatic/pistol/ringneck + suit_store = /obj/item/gun/ballistic/automatic/pistol/asp l_pocket = /obj/item/radio - backpack_contents = list(/obj/item/ammo_box/magazine/m10mm_ringneck=2, /obj/item/storage/firstaid/medical=1, /obj/item/defibrillator/compact/combat/loaded=1) + backpack_contents = list(/obj/item/ammo_box/magazine/m57_39_asp = 2, /obj/item/storage/firstaid/medical=1, /obj/item/defibrillator/compact/combat/loaded=1) -/datum/outfit/job/syndicate/ert/gorlex/sniper - name = "ERT - New Gorlex Republic Sniper" +/datum/outfit/job/syndicate/ert/ngr/sniper + name = "ERT - New Gorlex Republic Marksman" head = /obj/item/clothing/head/beret/black - back = /obj/item/storage/backpack/messenger/sec - glasses = /obj/item/clothing/glasses/night + neck = /obj/item/clothing/neck/shemagh/ngr gloves = /obj/item/clothing/gloves/fingerless - suit = /obj/item/clothing/suit/armor/vest - belt = /obj/item/storage/belt/security + suit = /obj/item/clothing/suit/armor/vest/alt + belt = /obj/item/storage/belt/military/assault/sniper suit_store = /obj/item/gun/ballistic/automatic/marksman/taipan r_pocket = /obj/item/melee/knife/survival l_pocket = /obj/item/binoculars - backpack_contents = list(/obj/item/ammo_box/magazine/sniper_rounds=2, /obj/item/radio=1) + backpack = /obj/item/storage/backpack/messenger/sec + duffelbag = /obj/item/storage/backpack/messenger/sec + satchel = /obj/item/storage/backpack/messenger/sec + courierbag = /obj/item/storage/backpack/messenger/sec + + backpack_contents = list(/obj/item/gun/ballistic/automatic/pistol/asp, /obj/item/ammo_box/magazine/m57_39_asp = 2) -/datum/outfit/job/syndicate/ert/gorlex/leader +/datum/outfit/job/syndicate/ert/ngr/leader name = "ERT - New Gorlex Republic Sergeant" job_icon = "lieutenant" - uniform = /obj/item/clothing/under/syndicate/gorlex - head = /obj/item/clothing/head/HoS/beret/syndicate + uniform = /obj/item/clothing/under/syndicate/ngr/officer + neck = /obj/item/clothing/mask/whistle/trench // funny + head = /obj/item/clothing/head/ngr/peaked back = /obj/item/storage/backpack/satchel/sec - mask = /obj/item/clothing/mask/gas/sechailer - glasses = /obj/item/clothing/glasses/hud/security/night gloves = /obj/item/clothing/gloves/tackler/combat + belt = /obj/item/storage/belt/security/webbing/ngr/cobra + suit_store = /obj/item/gun/ballistic/automatic/smg/cobra l_pocket = /obj/item/megaphone/sec -// commandos + backpack_contents = list(/obj/item/gun/ballistic/automatic/pistol/asp, /obj/item/ammo_box/magazine/m57_39_asp = 2, /obj/item/grenade/smokebomb) + +/datum/outfit/job/syndicate/ert/ngr/inspector + name = "ERT - New Gorlex Republic Official" + id_assignment = "Official" + job_icon = "syndicate" + + head = /obj/item/clothing/head/ngr + ears = /obj/item/radio/headset/syndicate/captain + gloves = /obj/item/clothing/gloves/color/white + mask = null + uniform = /obj/item/clothing/under/syndicate/ngr/officer + glasses = null + suit = /obj/item/clothing/suit/armor/ngr/lieutenant + belt = /obj/item/clipboard + shoes = /obj/item/clothing/shoes/jackboots + suit_store = null + + backpack = /obj/item/storage/backpack/satchel/leather + duffelbag = /obj/item/storage/backpack/satchel/leather + satchel = /obj/item/storage/backpack/satchel/leather + courierbag = /obj/item/storage/backpack/satchel/leather + + r_pocket = /obj/item/pen/fourcolor + l_pocket = /obj/item/taperecorder + + backpack_contents = list(/obj/item/folder/red, /obj/item/paper_bin/bundlenatural, /obj/item/hand_labeler) + +// cybersun /datum/outfit/job/syndicate/ert/cybersun name = "ERT - Syndicate Cybersun Commando" job_icon = "syndicate" head = null - uniform = /obj/item/clothing/under/syndicate/combat - belt = /obj/item/storage/belt/military/c20r + mask = /obj/item/clothing/mask/breath + uniform = /obj/item/clothing/under/syndicate/cybersun + belt = /obj/item/storage/belt/military/boomslang suit = /obj/item/clothing/suit/space/hardsuit/syndi/cybersun - suit_store = /obj/item/gun/ballistic/automatic/smg/cobra + suit_store = /obj/item/gun/ballistic/automatic/marksman/boomslang ears = /obj/item/radio/headset/syndicate/alt - glasses = /obj/item/clothing/glasses/hud/security/sunglasses + glasses = /obj/item/clothing/glasses/hud/security/sunglasses/hardliners implants = list(/obj/item/implant/adrenalin) - backpack_contents = list(/obj/item/autosurgeon/syndicate/laser_arm, /obj/item/radio=1) + backpack_contents = list(/obj/item/autosurgeon/syndicate/laser_arm, /obj/item/grenade/smokebomb) /datum/outfit/job/syndicate/ert/cybersun/leader name = "ERT - Syndicate Cybersun Commando Leader" @@ -116,15 +188,36 @@ ears = /obj/item/radio/headset/syndicate/alt/captain glasses = /obj/item/clothing/glasses/hud/security/night - backpack_contents = list(/obj/item/autosurgeon/syndicate/laser_arm=1, /obj/item/antag_spawner/nuke_ops/borg_tele/medical/unlocked=1, /obj/item/radio=1) + backpack_contents = list(/obj/item/autosurgeon/syndicate/laser_arm=1, /obj/item/antag_spawner/nuke_ops/borg_tele/medical/unlocked=1, /obj/item/grenade/smokebomb) -// paramedics +/datum/outfit/job/syndicate/ert/cybersun/inspector + name = "ERT - Syndicate Cybersun Representative" + + uniform = /obj/item/clothing/under/syndicate/cybersun/officer + head = /obj/item/clothing/head/HoS/cybersun + shoes = /obj/item/clothing/shoes/laceup + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + suit = null + suit_store = null + belt = /obj/item/clipboard + glasses = null + mask = null + ears = /obj/item/radio/headset/syndicate + + r_pocket = /obj/item/pen/fourcolor + l_pocket = /obj/item/taperecorder + + backpack_contents = list(/obj/item/stamp/cybersun, /obj/item/folder/red, /obj/item/paper_bin/bundlenatural, /obj/item/hand_labeler) + +// cybersun paramedics /datum/outfit/job/syndicate/ert/cybersun/medic name = "ERT - Syndicate Cybersun Paramedic" job_icon = "paramedic" + jobtype = /datum/job/paramedic uniform = /obj/item/clothing/under/syndicate/medic + accessory = /obj/item/clothing/accessory/holster/marine suit = /obj/item/clothing/suit/space/hardsuit/syndi/cybersun/paramed suit_store = /obj/item/tank/internals/oxygen mask = /obj/item/clothing/mask/breath/medical @@ -135,13 +228,9 @@ back = /obj/item/storage/backpack/ert/medical l_pocket = /obj/item/melee/knife/survival r_pocket = /obj/item/pinpointer/crew - accessory = /obj/item/clothing/accessory/holster/marine backpack_contents = list(/obj/item/storage/firstaid/tactical=1, /obj/item/holosign_creator/medical=1, /obj/item/radio=1) - jobtype = /datum/job/paramedic - job_icon = "paramedic" - /datum/outfit/job/syndicate/ert/cybersun/medic/leader name = "ERT - Syndicate Cybersun Lead Paramedic" id_assignment = "Lead Paramedic" @@ -154,25 +243,89 @@ backpack_contents = list(/obj/item/storage/firstaid/tactical=1, /obj/item/holosign_creator/medical=1, /obj/item/autosurgeon/cmo=1, /obj/item/radio=1, /obj/item/antag_spawner/nuke_ops/borg_tele/medical/unlocked=1) -// inspector -/datum/outfit/job/syndicate/ert/inspector - name = "ERT - Inspector (Syndicate)" - id_assignment = "Inspector" - jobtype = /datum/job/head_of_personnel - job_icon = "syndicate" +// hardliners - uniform = /obj/item/clothing/under/syndicate/ngr/officer - head = /obj/item/clothing/head/HoS/beret/syndicate - mask = null - belt = /obj/item/clipboard - back = /obj/item/storage/backpack/satchel/leather - ears = /obj/item/radio/headset/syndicate/captain - shoes = /obj/item/clothing/shoes/laceup - gloves = /obj/item/clothing/gloves/color/white - suit = /obj/item/clothing/suit/armor/hos - l_pocket = null - r_pocket = null - suit_store = null +/datum/outfit/job/syndicate/ert/hardliner + name = "ERT - Syndicate Hardliner Mercenary" + + uniform = /obj/item/clothing/under/syndicate/hardliners + suit = /obj/item/clothing/suit/armor/hardliners + glasses = /obj/item/clothing/glasses/hud/security/sunglasses/hardliners + suit_store = /obj/item/gun/ballistic/automatic/smg/sidewinder + belt = /obj/item/storage/belt/security/webbing/hardliners/sidewinder + gloves = /obj/item/clothing/gloves/color/black + mask = /obj/item/clothing/mask/gas/sechailer/balaclava + head = /obj/item/clothing/head/helmet/hardliners + +/datum/outfit/job/syndicate/ert/hardliner/engineer + name = "ERT - Syndicate Hardliner Mechanic" + + head = /obj/item/clothing/head/hardhat/hardliners + belt = /obj/item/storage/belt/utility/full + suit_store = /obj/item/gun/ballistic/automatic/smg/cobra + + backpack_contents = list(/obj/item/ammo_box/magazine/m45_cobra = 2) + +/datum/outfit/job/syndicate/ert/hardliner/medic + name = "ERT - Syndicate Hardliner Medic" + + head = /obj/item/clothing/head/hardliners + belt = /obj/item/storage/belt/medical/webbing/paramedic + +/datum/outfit/job/syndicate/ert/hardliner/leader + name = "ERT - Syndicate Hardliner Sergeant" + + uniform = /obj/item/clothing/under/syndicate/hardliners/officer + suit = /obj/item/clothing/suit/armor/hardliners/sergeant + head = /obj/item/clothing/head/hardliners/peaked + +// ramzi clique + +/datum/outfit/job/syndicate/ert/ramzi + name = "ERT - Ramzi Clique Cell Rifleman" + + head = null + mask = /obj/item/clothing/mask/gas/syndicate + uniform = /obj/item/clothing/under/syndicate + suit = /obj/item/clothing/suit/space/hardsuit/syndi/ramzi + suit_store = /obj/item/gun/ballistic/automatic/smg/cobra + belt = /obj/item/storage/belt/military/cobra + glasses = /obj/item/clothing/glasses/thermal + gloves = /obj/item/clothing/gloves/combat + id = null // no identification for you + + l_pocket = /obj/item/tank/internals/emergency_oxygen/double + + implants = list(/obj/item/implant/explosive) + backpack_contents = list(/obj/item/grenade/frag = 3, /obj/item/grenade/smokebomb = 3) + +/datum/outfit/job/syndicate/ert/ramzi/demolitionist + name = "ERT - Ramzi Clique Cell Demolitionist" + + belt = /obj/item/storage/belt/military/mako + suit_store = /obj/item/gun/ballistic/rocketlauncher/mako + glasses = /obj/item/clothing/glasses/meson/night + + r_pocket = /obj/item/gun/ballistic/automatic/pistol/himehabu + + backpack_contents = list(/obj/item/ammo_box/magazine/m22lr_himehabu = 2, /obj/item/grenade/c4/x4 = 3, /obj/item/grenade/syndieminibomb = 3, /obj/item/ammo_casing/caseless/rocket/a70mm = 4) + +/datum/outfit/job/syndicate/ert/ramzi/medic + name = "ERT - Ramzi Clique Cell Medic" + + belt = /obj/item/storage/belt/medical/webbing/combat + glasses = /obj/item/clothing/glasses/hud/health/night + + backpack_contents = list(/obj/item/ammo_box/magazine/m45_cobra = 3, /obj/item/defibrillator/compact/combat/loaded, /obj/item/reagent_containers/hypospray/combat) + +/datum/outfit/job/syndicate/ert/ramzi/leader + name = "ERT - Ramzi Clique Cell Leader" + + uniform = /obj/item/clothing/under/syndicate/gorlex + gloves = /obj/item/clothing/gloves/tackler/combat/insulated // funny + + belt = /obj/item/storage/belt/security/webbing/bulldog_mixed + suit_store = /obj/item/gun/ballistic/shotgun/automatic/bulldog/drum - backpack_contents = list(/obj/item/stamp/syndicate) + backpack_contents = list(/obj/item/grenade/smokebomb = 4, /obj/item/grenade/stingbang = 2, /obj/item/grenade/empgrenade = 2) diff --git a/code/modules/clothing/outfits/factions/minutemen.dm b/code/modules/clothing/outfits/factions/minutemen.dm index 4507d46ea958..3f99cc85087f 100644 --- a/code/modules/clothing/outfits/factions/minutemen.dm +++ b/code/modules/clothing/outfits/factions/minutemen.dm @@ -3,7 +3,6 @@ /datum/outfit/job/clip name = "CLIP - Base Outfit" - jobtype = /datum/job/assistant uniform = /obj/item/clothing/under/clip alt_uniform = null @@ -223,6 +222,8 @@ shoes = /obj/item/clothing/shoes/jackboots gloves = /obj/item/clothing/gloves/color/black + l_hand = /obj/item/storage/briefcase + backpack = /obj/item/storage/backpack/satchel/leather satchel = /obj/item/storage/backpack/satchel/leather @@ -233,6 +234,16 @@ /obj/item/detective_scanner=1,\ /obj/item/melee/classic_baton=1) +/datum/outfit/job/clip/investigator/cm5 + name = "CLIP GOLD - Investigator (CM-5c)" + + backpack_contents = list(/obj/item/storage/box/evidence=1,\ + /obj/item/detective_scanner=1,\ + /obj/item/melee/classic_baton=1,\ + /obj/item/ammo_box/magazine/cm5_9mm = 2, \ + /obj/item/gun/ballistic/automatic/smg/cm5/compact + ) + /datum/outfit/job/clip/bureaucrat name = "CLIP GOLD - Bureaucrat" job_icon = "scribe" @@ -534,6 +545,11 @@ backpack_contents = list(/obj/item/clothing/mask/gas/clip=1, /obj/item/storage/ration/chicken_wings_hot_sauce=1) +/datum/outfit/job/clip/minutemen/grunt/dressed/hardsuit + name = "CLIP Minutemen - Minuteman (Spotter Hardsuit)" + head = null + suit = /obj/item/clothing/suit/space/hardsuit/clip_spotter + /datum/outfit/job/clip/minutemen/grunt/dressed/armed name = "CLIP Minutemen - Minuteman (Armed - CM-82)" @@ -629,7 +645,8 @@ suit_store = /obj/item/gun/ballistic/automatic/assault/cm82 belt = /obj/item/storage/belt/military/clip/cm82 - backpack_contents = list(/obj/item/clothing/mask/gas/clip=1, /obj/item/storage/ration/shredded_beef=1, /obj/item/gun/ballistic/automatic/pistol/cm23=1) + //replace commander with the cm23 when its impemented, see the cm-f4 above + backpack_contents = list(/obj/item/clothing/mask/gas/clip=1, /obj/item/storage/ration/shredded_beef=1, /obj/item/gun/ballistic/automatic/pistol/commander=1) /datum/outfit/job/clip/minutemen/grunt/commander name = "CLIP Minutemen - Field Commander" diff --git a/code/modules/clothing/outfits/factions/roumain.dm b/code/modules/clothing/outfits/factions/roumain.dm index fe31fddd9041..e7cc57a33a96 100644 --- a/code/modules/clothing/outfits/factions/roumain.dm +++ b/code/modules/clothing/outfits/factions/roumain.dm @@ -84,7 +84,7 @@ name = "Saint-Roumain Militia - Hunter" id_assignment = "Hunter" jobtype = /datum/job/officer - job_icon = "hsrm_hunter" + job_icon = "srm_hunter" uniform = /obj/item/clothing/under/suit/roumain alt_uniform = null diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 108475c982b9..18e220c3f664 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -1,13 +1,3 @@ -/datum/outfit/centcom - name = "CentCom Base" - -/datum/outfit/centcom/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - - var/obj/item/implant/mindshield/L = new/obj/item/implant/mindshield(H)//hmm lets have centcom officials become revs - L.implant(H, null, 1) - /datum/outfit/laser_tag name = "Laser Tag Red" @@ -67,35 +57,6 @@ W.registered_name = H.real_name W.update_label() -/datum/outfit/centcom/commander - name = "CentCom Commander" - - uniform = /obj/item/clothing/under/rank/centcom/commander - suit = /obj/item/clothing/suit/armor/vest/bulletproof - shoes = /obj/item/clothing/shoes/combat/swat - gloves = /obj/item/clothing/gloves/tackler/combat/insulated - ears = /obj/item/radio/headset/headset_cent/commander - glasses = /obj/item/clothing/glasses/eyepatch - mask = /obj/item/clothing/mask/cigarette/cigar/cohiba - head = /obj/item/clothing/head/centcom_cap - belt = /obj/item/gun/ballistic/revolver/mateba - r_pocket = /obj/item/lighter - l_pocket = /obj/item/ammo_box/a357 - back = /obj/item/storage/backpack/satchel/leather - id = /obj/item/card/id/centcom - -/datum/outfit/centcom/commander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - - var/obj/item/card/id/W = H.wear_id - W.access = get_all_accesses() - W.access += get_centcom_access("CentCom Commander") - W.assignment = "CentCom Commander" - W.registered_name = H.real_name - W.update_label() - ..() - /datum/outfit/wizard name = "Blue Wizard" @@ -127,51 +88,6 @@ mask = /obj/item/clothing/mask/breath gloves = /obj/item/clothing/gloves/color/plasmaman - -/datum/outfit/centcom/death_commando - name = "Death Commando" - - uniform = /obj/item/clothing/under/rank/centcom/commander - suit = /obj/item/clothing/suit/space/hardsuit/deathsquad - shoes = /obj/item/clothing/shoes/combat/swat - gloves = /obj/item/clothing/gloves/tackler/combat/insulated - mask = /obj/item/clothing/mask/gas/sechailer/swat - glasses = /obj/item/clothing/glasses/hud/toggle/thermal - back = /obj/item/storage/backpack/security - l_pocket = /obj/item/melee/transforming/energy/sword/saber - r_pocket = /obj/item/shield/energy - suit_store = /obj/item/tank/internals/emergency_oxygen/double - belt = /obj/item/gun/ballistic/revolver/mateba - r_hand = /obj/item/gun/energy/pulse - id = /obj/item/card/id/ert/deathsquad - ears = /obj/item/radio/headset/headset_cent/alt - - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/ammo_box/a357=1,\ - /obj/item/storage/firstaid/regular=1,\ - /obj/item/storage/box/flashbangs=1,\ - /obj/item/flashlight=1,\ - /obj/item/grenade/c4/x4=1) - -/datum/outfit/centcom/death_commando/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - - var/obj/item/radio/R = H.ears - R.set_frequency(FREQ_CENTCOM) - R.freqlock = TRUE - var/obj/item/card/id/W = H.wear_id - W.access = get_all_accesses()//They get full station access. - W.access += get_centcom_access("Death Commando")//Let's add their alloted CentCom access. - W.assignment = "Death Commando" - W.registered_name = H.real_name - W.update_label() - ..() - -/datum/outfit/centcom/death_commando/officer - name = "Death Commando Officer" - head = /obj/item/clothing/head/helmet/space/beret - /datum/outfit/chrono_agent name = "Timeline Eradication Agent" uniform = /obj/item/clothing/under/color/white diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm index def184966c93..c57db3fe3a85 100644 --- a/code/modules/mob/living/simple_animal/corpse.dm +++ b/code/modules/mob/living/simple_animal/corpse.dm @@ -55,15 +55,15 @@ /datum/outfit/syndicateramzicorpse name = "Ramzi Clique Commando Corpse" - uniform = /obj/item/clothing/under/syndicate/gorlex + uniform = /obj/item/clothing/under/syndicate/combat suit = /obj/item/clothing/suit/space/hardsuit/syndi/ramzi shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/tackler/combat/insulated + gloves = /obj/item/clothing/gloves/color/black ears = /obj/item/radio/headset mask = /obj/item/clothing/mask/gas/syndicate back = /obj/item/tank/jetpack/oxygen r_pocket = /obj/item/tank/internals/emergency_oxygen - id = /obj/item/card/id/syndicate + id = /obj/item/card/id/syndicate_command/crew_id /obj/effect/mob_spawn/human/corpse/syndicatestormtrooper diff --git a/code/modules/projectiles/boxes_magazines/external/shotgun.dm b/code/modules/projectiles/boxes_magazines/external/shotgun.dm index 9803b0feb084..c5c0fd9b7c1f 100644 --- a/code/modules/projectiles/boxes_magazines/external/shotgun.dm +++ b/code/modules/projectiles/boxes_magazines/external/shotgun.dm @@ -7,3 +7,9 @@ caliber = "12ga" max_ammo = 8 multiple_sprites = AMMO_BOX_FULL_EMPTY + +/obj/item/ammo_box/magazine/cm15_12g/incendiary + name = "CM-15 magazine (12g incendiary)" + desc = "An almost straight, 8-round magazine designed for the CM-15 shotgun. This one was loaded with incendiary slugs. Be careful!" + ammo_type = /obj/item/ammo_casing/shotgun/incendiary + caliber = "12ga incendiary" diff --git a/code/modules/projectiles/guns/manufacturer/clip_lanchester/ballistics.dm b/code/modules/projectiles/guns/manufacturer/clip_lanchester/ballistics.dm index 507eb705f5d6..ee5d32f0ba46 100644 --- a/code/modules/projectiles/guns/manufacturer/clip_lanchester/ballistics.dm +++ b/code/modules/projectiles/guns/manufacturer/clip_lanchester/ballistics.dm @@ -104,6 +104,7 @@ default_ammo_type = /obj/item/ammo_box/magazine/cm5_9mm allowed_ammo_types = list( /obj/item/ammo_box/magazine/cm5_9mm, + /obj/item/ammo_box/magazine/cm5_9mm/rubber, ) bolt_type = BOLT_TYPE_CLIP weapon_weight = WEAPON_LIGHT @@ -136,9 +137,12 @@ NO_MAG_GUN_HELPER(automatic/smg/cm5) +/obj/item/gun/ballistic/automatic/smg/cm5/rubber + default_ammo_type = /obj/item/ammo_box/magazine/cm5_9mm/rubber + /obj/item/ammo_box/magazine/cm5_9mm name = "CM-5 magazine (9mm)" - desc = "A 30-round magazine for 9mm submachine guns. These rounds do okay damage, but struggle against armor." + desc = "A 30-round magazine for the CM-5 submachine gun. These rounds do okay damage, but struggle against armor." icon_state = "cm5_mag-1" base_icon_state = "cm5_mag" ammo_type = /obj/item/ammo_casing/c9mm @@ -146,6 +150,11 @@ NO_MAG_GUN_HELPER(automatic/smg/cm5) max_ammo = 30 multiple_sprites = AMMO_BOX_FULL_EMPTY +/obj/item/ammo_box/magazine/cm5_9mm/rubber + desc = "A 30-round magazine for the CM-5 submachine gun. These rubber rounds trade lethality for a heavy impact which can incapacitate targets. Performs even worse against armor." + caliber = "9mm rubber" + ammo_type = /obj/item/ammo_casing/c9mm/rubber + /obj/item/gun/ballistic/automatic/smg/cm5/compact name = "\improper CM-5c" desc = "A modification of the CM-5 featuring a dramatically shortened barrel and removed stock. Designed for CLIP-GOLD covert enforcement agents to maximize portability without sacrificing firepower, though accuracy at range is abysmal at best. Chambered in 9mm." @@ -208,7 +217,7 @@ NO_MAG_GUN_HELPER(automatic/smg/cm5) /obj/item/gun/ballistic/automatic/smg/cm5/compact/AltClick(mob/user) if(!current_case) return ..() - current_case.forceMove(get_turf(src)) + user.put_in_hands(current_case) icon = src::icon base_icon_state = src::icon_state item_state = src::item_state @@ -478,6 +487,7 @@ NO_MAG_GUN_HELPER(automatic/smg/cm5) default_ammo_type = /obj/item/ammo_box/magazine/cm15_12g allowed_ammo_types = list( /obj/item/ammo_box/magazine/cm15_12g, + /obj/item/ammo_box/magazine/cm15_12g/incendiary ) empty_indicator = FALSE @@ -505,3 +515,6 @@ NO_MAG_GUN_HELPER(automatic/smg/cm5) wield_slowdown = 0.6 wield_delay = 0.65 SECONDS + +/obj/item/gun/ballistic/shotgun/cm15/incendiary + default_ammo_type = /obj/item/ammo_box/magazine/cm15_12g/incendiary diff --git a/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm b/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm index fe34236cdd79..6d1dff192407 100644 --- a/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm +++ b/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm @@ -608,7 +608,7 @@ NO_MAG_GUN_HELPER(automatic/marksman/boomslang/indie) /obj/item/ammo_box/magazine/boomslang name = "\improper Boomslang Magazine (6.5x57mm CLIP)" - desc = "A large 10-round box magazine for Boomslang sniper rifles. These rounds deal amazing damage and bypass half of their protective equipment, though it isn't a high enough caliber to pierce armored vehicles." + desc = "A large 10-round box magazine for Boomslang sniper rifles. These rounds deal amazing damage and can pierce protective equipment, excluding armored vehicles." base_icon_state = "boomslang" icon_state = "boomslang-10" ammo_type = /obj/item/ammo_casing/a65clip @@ -618,7 +618,7 @@ NO_MAG_GUN_HELPER(automatic/marksman/boomslang/indie) /obj/item/ammo_box/magazine/boomslang/short name = "\improper Boomslang Magazine (6.5x57mm CLIP)" - desc = "A 5-round box magazine for Boomslang sniper rifles. These rounds deal amazing damage and bypass half of their protective equipment, though it isn't a high enough caliber to pierce armored vehicles." + desc = "A 5-round box magazine for Boomslang sniper rifles. These rounds deal amazing damage and can pierce protective equipment, excluding armored vehicles." base_icon_state = "boomslang_short" icon_state = "boomslang_short-5" ammo_type = /obj/item/ammo_casing/a65clip @@ -1012,6 +1012,9 @@ NO_MAG_GUN_HELPER(automatic/assault/hydra/dmr) ) ) +/obj/item/gun/ballistic/shotgun/automatic/bulldog/drum + default_ammo_type = /obj/item/ammo_box/magazine/m12g_bulldog/drum + NO_MAG_GUN_HELPER(shotgun/automatic/bulldog) /obj/item/ammo_box/magazine/m12g_bulldog @@ -1095,7 +1098,7 @@ NO_MAG_GUN_HELPER(shotgun/automatic/bulldog) /obj/item/ammo_casing/caseless/rocket/a70mm name = "\improper M-KO-9HE" - desc = "An 70mm High Explosive rocket. Fire at mech and pray." + desc = "A 70mm High Explosive rocket. Fire at mech and pray." icon_state = "srm-8" caliber = "70mm" projectile_type = /obj/projectile/bullet/a84mm_he @@ -1103,7 +1106,7 @@ NO_MAG_GUN_HELPER(shotgun/automatic/bulldog) /obj/item/ammo_casing/caseless/rocket/a70mm/hedp name = "\improper M-KO-9HEDP" - desc = "An 84mm High Explosive Dual Purpose rocket. Pointy end toward armor." + desc = "A 70mm High Explosive Dual Purpose rocket. Pointy end toward armor." caliber = "70mm" icon_state = "84mm-hedp" projectile_type = /obj/projectile/bullet/a84mm diff --git a/shiptest.dme b/shiptest.dme index 529ab2cfb100..2cba7a81ed2d 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -429,7 +429,6 @@ #include "code\datums\dog_fashion.dm" #include "code\datums\ductnet.dm" #include "code\datums\emotes.dm" -#include "code\datums\ert.dm" #include "code\datums\forced_movement.dm" #include "code\datums\guestbook.dm" #include "code\datums\holocall.dm" @@ -687,6 +686,16 @@ #include "code\datums\elements\food\dunkable.dm" #include "code\datums\elements\food\food_trash.dm" #include "code\datums\elements\food\processable.dm" +#include "code\datums\ert\_ert.dm" +#include "code\datums\ert\ert_clip.dm" +#include "code\datums\ert\ert_frontiersmen.dm" +#include "code\datums\ert\ert_gezena.dm" +#include "code\datums\ert\ert_indies.dm" +#include "code\datums\ert\ert_inteq.dm" +#include "code\datums\ert\ert_nanotrasen.dm" +#include "code\datums\ert\ert_roumain.dm" +#include "code\datums\ert\ert_solgov.dm" +#include "code\datums\ert\ert_syndicate.dm" #include "code\datums\helper_datums\events.dm" #include "code\datums\helper_datums\getrev.dm" #include "code\datums\helper_datums\icon_snapshot.dm" @@ -1695,10 +1704,12 @@ #include "code\modules\antagonists\disease\disease_mob.dm" #include "code\modules\antagonists\ert\ert.dm" #include "code\modules\antagonists\ert\frontiersmen.dm" +#include "code\modules\antagonists\ert\gezena.dm" #include "code\modules\antagonists\ert\indie.dm" #include "code\modules\antagonists\ert\inteq.dm" #include "code\modules\antagonists\ert\minutemen.dm" #include "code\modules\antagonists\ert\nanotrasen.dm" +#include "code\modules\antagonists\ert\roumain.dm" #include "code\modules\antagonists\ert\solgov.dm" #include "code\modules\antagonists\ert\syndicate.dm" #include "code\modules\antagonists\gang\outfits.dm" @@ -1992,10 +2003,12 @@ #include "code\modules\clothing\outfits\standard.dm" #include "code\modules\clothing\outfits\vv_outfit.dm" #include "code\modules\clothing\outfits\ert\frontiersmen_ert.dm" +#include "code\modules\clothing\outfits\ert\gezena_ert.dm" #include "code\modules\clothing\outfits\ert\indie_ert.dm" #include "code\modules\clothing\outfits\ert\inteq_ert.dm" #include "code\modules\clothing\outfits\ert\minutemen_ert.dm" #include "code\modules\clothing\outfits\ert\nanotrasen_ert.dm" +#include "code\modules\clothing\outfits\ert\roumain_ert.dm" #include "code\modules\clothing\outfits\ert\solgov_ert.dm" #include "code\modules\clothing\outfits\ert\syndicate_ert.dm" #include "code\modules\clothing\outfits\factions\frontiersmen.dm" From 625a53603e32151e0e3636abd0adc374cad06ce4 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 22 Oct 2024 15:13:19 -0500 Subject: [PATCH 079/274] Automatic changelog generation for PR #3383 [ci skip] --- html/changelogs/AutoChangeLog-pr-3383.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3383.yml diff --git a/html/changelogs/AutoChangeLog-pr-3383.yml b/html/changelogs/AutoChangeLog-pr-3383.yml new file mode 100644 index 000000000000..3ada89781e24 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3383.yml @@ -0,0 +1,7 @@ +author: meemofcourse +changes: + - {rscadd: 'A lot of ERTs and ERT remasters, including Fronties, Ramzi, PGF, NGR, + Indies and whatnot'} + - {rscdel: Most Nanotrasen ERTs have been shelved pending assets} + - {rscdel: Smokebomb randomized descriptions} +delete-after: true From eb94f92a5e398c082f8c8f7877f91440dcd775c5 Mon Sep 17 00:00:00 2001 From: Feenie <62373791+FeenieRU@users.noreply.github.com> Date: Wed, 23 Oct 2024 01:15:25 +0300 Subject: [PATCH 080/274] qdel optimize (#3558) ## About The Pull Request That PR optimizes qdel and SSgarbage procs. Based on: https://github.com/tgstation/tgstation/pull/79568 https://github.com/tgstation/tgstation/pull/76956 https://github.com/tgstation/tgstation/pull/80443 https://github.com/tgstation/tgstation/pull/80628 ## Why It's Good For The Game Better performance. Tested on downstream: https://github.com/CeladonSS13/Shiptest/pull/1025 ## Changelog :cl: code: Changing qdel() and SSgarbage procs code: rewrite /Destroy(force, silent) to /Destroy(force) /:cl: --------- Signed-off-by: Feenie <62373791+FeenieRU@users.noreply.github.com> --- code/__DEFINES/dcs/signals/signals.dm | 1 + code/controllers/master.dm | 4 + code/controllers/subsystem.dm | 27 +- code/controllers/subsystem/garbage.dm | 243 ++++++++++-------- code/datums/aquarium.dm | 2 +- code/datums/components/admin_popup.dm | 2 +- code/datums/components/aquarium.dm | 2 +- code/datums/components/attachment.dm | 2 +- code/datums/components/attachment_holder.dm | 2 +- code/datums/components/creamed.dm | 2 +- code/datums/components/deadchat_control.dm | 2 +- code/datums/components/food/edible.dm | 2 +- code/datums/components/food/food_storage.dm | 2 +- code/datums/components/gunpoint.dm | 2 +- code/datums/components/manual_blinking.dm | 2 +- code/datums/components/manual_breathing.dm | 2 +- code/datums/components/pellet_cloud.dm | 2 +- code/datums/components/shielded.dm | 2 +- code/datums/components/weatherannouncer.dm | 2 +- code/datums/datum.dm | 22 +- code/datums/elements/food/edible.dm | 2 +- code/datums/progressbar.dm | 8 +- code/game/machinery/camera/camera.dm | 5 + code/modules/admin/verbs/debug.dm | 3 + .../view_variables/reference_tracking.dm | 224 +++++++++------- code/modules/clothing/chameleon.dm | 92 +++---- code/modules/unit_tests/create_and_destroy.dm | 3 + .../unit_tests/find_reference_sanity.dm | 46 ++-- 28 files changed, 426 insertions(+), 284 deletions(-) diff --git a/code/__DEFINES/dcs/signals/signals.dm b/code/__DEFINES/dcs/signals/signals.dm index f68655a7a3a4..2293c5bf8fd5 100644 --- a/code/__DEFINES/dcs/signals/signals.dm +++ b/code/__DEFINES/dcs/signals/signals.dm @@ -42,6 +42,7 @@ #define COMSIG_COMPONENT_REMOVING "component_removing" /// before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation #define COMSIG_PARENT_PREQDELETED "parent_preqdeleted" +#define COMSIG_PREQDELETED "parent_preqdeleted" /// just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called #define COMSIG_PARENT_QDELETING "parent_qdeleting" /// generic topic handler (usr, href_list) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 302c0de4a427..46090ebb48c5 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -489,6 +489,10 @@ GLOBAL_REAL(Master, /datum/controller/master) = new continue if ((SS_flags & (SS_TICKER|SS_KEEP_TIMING)) == SS_KEEP_TIMING && SS.last_fire + (SS.wait * 0.75) > world.time) continue + if (SS.postponed_fires >= 1) + SS.postponed_fires-- + SS.update_nextfire() + continue SS.enqueue() . = 1 diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index f6e35bec6e59..332fcef0787c 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -75,6 +75,9 @@ /// Tracks the amount of completed runs for the subsystem var/times_fired = 0 + /// How many fires have we been requested to postpone + var/postponed_fires = 0 + /// Time the subsystem entered the queue, (for timing and priority reasons) var/queued_time = 0 @@ -132,6 +135,26 @@ Master.subsystems -= src return ..() +/datum/controller/subsystem/proc/update_nextfire(reset_time = FALSE) + var/queue_node_flags = flags + + if (reset_time) + postponed_fires = 0 + if (queue_node_flags & SS_TICKER) + next_fire = world.time + (world.tick_lag * wait) + else + next_fire = world.time + wait + return + + if (queue_node_flags & SS_TICKER) + next_fire = world.time + (world.tick_lag * wait) + else if (queue_node_flags & SS_POST_FIRE_TIMING) + next_fire = world.time + wait + (world.tick_lag * (tick_overrun/100)) + else if (queue_node_flags & SS_KEEP_TIMING) + next_fire += wait + else + next_fire = queued_time + wait + (world.tick_lag * (tick_overrun/100)) + //Queue it to run. // (we loop thru a linked list until we get to the end or find the right point) // (this lets us sort our run order correctly without having to re-sort the entire already sorted list) @@ -251,8 +274,8 @@ //could be used to postpone a costly subsystem for (default one) var/cycles, cycles //for instance, during cpu intensive operations like explosions /datum/controller/subsystem/proc/postpone(cycles = 1) - if(next_fire - world.time < wait) - next_fire += (wait*cycles) + if (can_fire && cycles >= 1) + postponed_fires += cycles //usually called via datum/controller/subsystem/New() when replacing a subsystem (i.e. due to a recurring crash) //should attempt to salvage what it can from the old instance of subsystem diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index da58d4764516..60372d39d95b 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -94,32 +94,38 @@ SUBSYSTEM_DEF(garbage) /datum/controller/subsystem/garbage/Shutdown() //Adds the del() log to the qdel log file - var/list/dellog = list() + var/list/del_log = list() //sort by how long it's wasted hard deleting sortTim(items, cmp=/proc/cmp_qdel_item_time, associative = TRUE) for(var/path in items) var/datum/qdel_item/I = items[path] - dellog += "Path: [path]" + var/list/entry = list() + del_log[path] = entry + if (I.qdel_flags & QDEL_ITEM_SUSPENDED_FOR_LAG) - dellog += "\tSUSPENDED FOR LAG" + entry["SUSPENDED FOR LAG"] = TRUE if (I.failures) - dellog += "\tFailures: [I.failures]" - dellog += "\tqdel() Count: [I.qdels]" - dellog += "\tDestroy() Cost: [I.destroy_time]ms" + entry["Failures"] = I.failures + entry["qdel() Count"] = I.qdels + entry["Destroy() Cost (ms)"] = I.destroy_time + if (I.hard_deletes) - dellog += "\tTotal Hard Deletes: [I.hard_deletes]" - dellog += "\tTime Spent Hard Deleting: [I.hard_delete_time]ms" - dellog += "\tHighest Time Spent Hard Deleting: [I.hard_delete_max]ms" + entry["Total Hard Deletes"] = I.hard_deletes + entry["Time Spend Hard Deleting (ms)"] = I.hard_delete_time + entry["Highest Time Spend Hard Deleting (ms)"] = I.hard_delete_max if (I.hard_deletes_over_threshold) - dellog += "\tHard Deletes Over Threshold: [I.hard_deletes_over_threshold]" + entry["Hard Deletes Over Threshold"] = I.hard_deletes_over_threshold if (I.slept_destroy) - dellog += "\tSleeps: [I.slept_destroy]" + entry["Total Sleeps"] = I.slept_destroy if (I.no_respect_force) - dellog += "\tIgnored force: [I.no_respect_force] times" + entry["Total Ignored Force"] = I.no_respect_force if (I.no_hint) - dellog += "\tNo hint: [I.no_hint] times" - log_qdel(dellog.Join("\n")) + entry["Total No Hint"] = I.no_hint + if(LAZYLEN(I.extra_details)) + entry["Deleted Metadata"] = I.extra_details + + log_qdel("", del_log) /datum/controller/subsystem/garbage/fire() //the fact that this resets its processing each fire (rather then resume where it left off) is intentional. @@ -139,8 +145,6 @@ SUBSYSTEM_DEF(garbage) state = SS_RUNNING break - - /datum/controller/subsystem/garbage/proc/InitQueues() if (isnull(queues)) // Only init the queues if they don't already exist, prevents overriding of recovered lists queues = new(GC_QUEUE_COUNT) @@ -167,7 +171,10 @@ SUBSYSTEM_DEF(garbage) lastlevel = level - //We do this rather then for(var/refID in queue) because that sort of for loop copies the whole list. +// 1 from the hard reference in the queue, and 1 from the variable used before this +#define REFS_WE_EXPECT 2 + + //We do this rather then for(var/list/ref_info in queue) because that sort of for loop copies the whole list. //Normally this isn't expensive, but the gc queue can grow to 40k items, and that gets costly/causes overrun. for (var/i in 1 to length(queue)) var/list/L = queue[i] @@ -178,21 +185,19 @@ SUBSYSTEM_DEF(garbage) continue var/queued_at_time = L[GC_QUEUE_ITEM_QUEUE_TIME] - var/GCd_at_time = L[GC_QUEUE_ITEM_GCD_DESTROYED] if(queued_at_time > cut_off_time) break // Everything else is newer, skip them count++ - var/refID = L[GC_QUEUE_ITEM_REF] - var/datum/D - D = locate(refID) + var/datum/D = L[GC_QUEUE_ITEM_REF] - if (!D || D.gc_destroyed != GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake + // If that's all we've got, send er off + if (refcount(D) == REFS_WE_EXPECT) ++gcedlasttick ++totalgcs pass_counts[level]++ #ifdef REFERENCE_TRACKING - reference_find_on_fail -= refID //It's deleted we don't care anymore. + reference_find_on_fail -= text_ref(D) //It's deleted we don't care anymore. #endif if (MC_TICK_CHECK) return @@ -208,20 +213,30 @@ SUBSYSTEM_DEF(garbage) switch (level) if (GC_QUEUE_CHECK) #ifdef REFERENCE_TRACKING - if(reference_find_on_fail[refID]) - INVOKE_ASYNC(D, TYPE_PROC_REF(/datum, find_references)) + // Decides how many refs to look for (potentially) + // Based off the remaining and the ones we can account for + var/remaining_refs = refcount(D) - REFS_WE_EXPECT + if(reference_find_on_fail[text_ref(D)]) + INVOKE_ASYNC(D, TYPE_PROC_REF(/datum,find_references), remaining_refs) ref_searching = TRUE #ifdef GC_FAILURE_HARD_LOOKUP else - INVOKE_ASYNC(D, TYPE_PROC_REF(/datum, find_references)) + INVOKE_ASYNC(D, TYPE_PROC_REF(/datum,find_references), remaining_refs) ref_searching = TRUE #endif - reference_find_on_fail -= refID + reference_find_on_fail -= text_ref(D) #endif var/type = D.type var/datum/qdel_item/I = items[type] - log_world("## TESTING: GC: -- [text_ref(D)] | [type] was unable to be GC'd --") + var/message = "## TESTING: GC: -- [text_ref(D)] | [type] was unable to be GC'd --" + message = "[message] (ref count of [refcount(D)])" + log_world(message) + + var/detail = D.dump_harddel_info() + if(detail) + LAZYADD(I.extra_details, detail) + #ifdef TESTING for(var/c in GLOB.admins) //Using testing() here would fill the logs with ADMIN_VV garbage var/client/admin = c @@ -231,6 +246,12 @@ SUBSYSTEM_DEF(garbage) #endif I.failures++ + if (I.qdel_flags & QDEL_ITEM_SUSPENDED_FOR_LAG) + #ifdef REFERENCE_TRACKING + if(ref_searching) + return //ref searching intentionally cancels all further fires while running so things that hold references don't end up getting deleted, so we want to return here instead of continue + #endif + continue if (GC_QUEUE_HARDDELETE) HardDelete(D) if (MC_TICK_CHECK) @@ -250,41 +271,41 @@ SUBSYSTEM_DEF(garbage) queue.Cut(1,count+1) count = 0 +#undef REFS_WE_EXPECT + /datum/controller/subsystem/garbage/proc/Queue(datum/D, level = GC_QUEUE_FILTER) if (isnull(D)) return if (level > GC_QUEUE_COUNT) - HardDelete(D, TRUE) + HardDelete(D) return var/queue_time = world.time - var/refid = text_ref(D) if (D.gc_destroyed <= 0) D.gc_destroyed = queue_time var/list/queue = queues[level] - - queue[++queue.len] = list(queue_time, refid, D.gc_destroyed) // not += for byond reasons + queue[++queue.len] = list(queue_time, D, D.gc_destroyed) // not += for byond reasons //this is mainly to separate things profile wise. -/datum/controller/subsystem/garbage/proc/HardDelete(datum/D, force) +/datum/controller/subsystem/garbage/proc/HardDelete(datum/D) ++delslasttick ++totaldels var/type = D.type var/refID = text_ref(D) - var/datum/qdel_item/I = items[type] - - if (!force && I.qdel_flags & QDEL_ITEM_SUSPENDED_FOR_LAG) - return + var/datum/qdel_item/type_info = items[type] + var/detail = D.dump_harddel_info() + if(detail) + LAZYADD(type_info.extra_details, detail) var/tick_usage = TICK_USAGE del(D) tick_usage = TICK_USAGE_TO_MS(tick_usage) - I.hard_deletes++ - I.hard_delete_time += tick_usage - if (tick_usage > I.hard_delete_max) - I.hard_delete_max = tick_usage + type_info.hard_deletes++ + type_info.hard_delete_time += tick_usage + if (tick_usage > type_info.hard_delete_max) + type_info.hard_delete_max = tick_usage if (tick_usage > highest_del_ms) highest_del_ms = tick_usage highest_del_type_string = "[type]" @@ -295,14 +316,14 @@ SUBSYSTEM_DEF(garbage) postpone(time) var/threshold = CONFIG_GET(number/hard_deletes_overrun_threshold) if (threshold && (time > threshold SECONDS)) - if (!(I.qdel_flags & QDEL_ITEM_ADMINS_WARNED)) + if (!(type_info.qdel_flags & QDEL_ITEM_ADMINS_WARNED)) log_game("Error: [type]([refID]) took longer than [threshold] seconds to delete (took [round(time/10, 0.1)] seconds to delete)") message_admins("Error: [type]([refID]) took longer than [threshold] seconds to delete (took [round(time/10, 0.1)] seconds to delete).") - I.qdel_flags |= QDEL_ITEM_ADMINS_WARNED - I.hard_deletes_over_threshold++ + type_info.qdel_flags |= QDEL_ITEM_ADMINS_WARNED + type_info.hard_deletes_over_threshold++ var/overrun_limit = CONFIG_GET(number/hard_deletes_overrun_limit) - if (overrun_limit && I.hard_deletes_over_threshold >= overrun_limit) - I.qdel_flags |= QDEL_ITEM_SUSPENDED_FOR_LAG + if (overrun_limit && type_info.hard_deletes_over_threshold >= overrun_limit) + type_info.qdel_flags |= QDEL_ITEM_SUSPENDED_FOR_LAG /datum/controller/subsystem/garbage/Recover() InitQueues() //We first need to create the queues before recovering data @@ -324,79 +345,85 @@ SUBSYSTEM_DEF(garbage) var/no_hint = 0 //!Number of times it's not even bother to give a qdel hint var/slept_destroy = 0 //!Number of times it's slept in its destroy var/qdel_flags = 0 //!Flags related to this type's trip thru qdel. + var/list/extra_details //!Lazylist of string metadata about the deleted objects /datum/qdel_item/New(mytype) name = "[mytype]" - /// Should be treated as a replacement for the 'del' keyword. /// /// Datums passed to this will be given a chance to clean up references to allow the GC to collect them. -/proc/qdel(datum/D, force=FALSE, ...) - if(!istype(D)) - del(D) +/proc/qdel(datum/to_delete, force = FALSE) + if(!istype(to_delete)) + del(to_delete) return - var/datum/qdel_item/I = SSgarbage.items[D.type] - if (!I) - I = SSgarbage.items[D.type] = new /datum/qdel_item(D.type) - I.qdels++ + var/datum/qdel_item/trash = SSgarbage.items[to_delete.type] + if (isnull(trash)) + trash = SSgarbage.items[to_delete.type] = new /datum/qdel_item(to_delete.type) + trash.qdels++ - if(isnull(D.gc_destroyed)) - if (SEND_SIGNAL(D, COMSIG_PARENT_PREQDELETED, force)) // Give the components a chance to prevent their parent from being deleted - return - D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED - var/start_time = world.time - var/start_tick = world.tick_usage - SEND_SIGNAL(D, COMSIG_PARENT_QDELETING, force) // Let the (remaining) components know about the result of Destroy - var/hint = D.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up. - if(world.time != start_time) - I.slept_destroy++ - else - I.destroy_time += TICK_USAGE_TO_MS(start_tick) - if(!D) + if(!isnull(to_delete.gc_destroyed)) + if(to_delete.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) + CRASH("[to_delete.type] destroy proc was called multiple times, likely due to a qdel loop in the Destroy logic") + return + + if (SEND_SIGNAL(to_delete, COMSIG_PREQDELETED, force)) // Give the components a chance to prevent their parent from being deleted + return + + to_delete.gc_destroyed = GC_CURRENTLY_BEING_QDELETED + var/start_time = world.time + var/start_tick = world.tick_usage + SEND_SIGNAL(to_delete, COMSIG_PARENT_QDELETING, force) // Let the (remaining) components know about the result of Destroy + var/hint = to_delete.Destroy(force) // Let our friend know they're about to get fucked up. + + if(world.time != start_time) + trash.slept_destroy++ + else + trash.destroy_time += TICK_USAGE_TO_MS(start_tick) + + if(isnull(to_delete)) + return + + switch(hint) + if (QDEL_HINT_QUEUE) //qdel should queue the object for deletion. + SSgarbage.Queue(to_delete) + if (QDEL_HINT_IWILLGC) + to_delete.gc_destroyed = world.time return - switch(hint) - if (QDEL_HINT_QUEUE) //qdel should queue the object for deletion. - SSgarbage.Queue(D) - if (QDEL_HINT_IWILLGC) - D.gc_destroyed = world.time + if (QDEL_HINT_LETMELIVE) //qdel should let the object live after calling destory. + if(!force) + to_delete.gc_destroyed = null //clear the gc variable (important!) return - if (QDEL_HINT_LETMELIVE) //qdel should let the object live after calling destory. - if(!force) - D.gc_destroyed = null //clear the gc variable (important!) - return - // Returning LETMELIVE after being told to force destroy - // indicates the objects Destroy() does not respect force - #ifdef TESTING - if(!I.no_respect_force) - testing("WARNING: [D.type] has been force deleted, but is \ - returning an immortal QDEL_HINT, indicating it does \ - not respect the force flag for qdel(). It has been \ - placed in the queue, further instances of this type \ - will also be queued.") - #endif - I.no_respect_force++ + // Returning LETMELIVE after being told to force destroy + // indicates the objects Destroy() does not respect force + #ifdef TESTING + if(!trash.no_respect_force) + testing("WARNING: [to_delete.type] has been force deleted, but is \ + returning an immortal QDEL_HINT, indicating it does \ + not respect the force flag for qdel(). It has been \ + placed in the queue, further instances of this type \ + will also be queued.") + #endif + trash.no_respect_force++ - SSgarbage.Queue(D) - if (QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete - SSgarbage.Queue(D, GC_QUEUE_HARDDELETE) - if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste. - SSgarbage.HardDelete(D, TRUE) - #ifdef REFERENCE_TRACKING - if (QDEL_HINT_FINDREFERENCE) //qdel will, if REFERENCE_TRACKING is enabled, display all references to this object, then queue the object for deletion. - SSgarbage.Queue(D) - D.find_references() - if (QDEL_HINT_IFFAIL_FINDREFERENCE) //qdel will, if REFERENCE_TRACKING is enabled and the object fails to collect, display all references to this object. - SSgarbage.Queue(D) - SSgarbage.reference_find_on_fail[text_ref(D)] = TRUE + SSgarbage.Queue(to_delete) + if (QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete + SSgarbage.Queue(to_delete, GC_QUEUE_HARDDELETE) + if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste. + SSgarbage.HardDelete(to_delete) + #ifdef REFERENCE_TRACKING + if (QDEL_HINT_FINDREFERENCE) //qdel will, if REFERENCE_TRACKING is enabled, display all references to this object, then queue the object for deletion. + SSgarbage.Queue(to_delete) + INVOKE_ASYNC(to_delete, TYPE_PROC_REF(/datum, find_references)) + if (QDEL_HINT_IFFAIL_FINDREFERENCE) //qdel will, if REFERENCE_TRACKING is enabled and the object fails to collect, display all references to this object. + SSgarbage.Queue(to_delete) + SSgarbage.reference_find_on_fail[text_ref(to_delete)] = TRUE + #endif + else + #ifdef TESTING + if(!trash.no_hint) + testing("WARNING: [to_delete.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.") #endif - else - #ifdef TESTING - if(!I.no_hint) - testing("WARNING: [D.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.") - #endif - I.no_hint++ - SSgarbage.Queue(D) - else if(D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) - CRASH("[D.type] destroy proc was called multiple times, likely due to a qdel loop in the Destroy logic") + trash.no_hint++ + SSgarbage.Queue(to_delete) diff --git a/code/datums/aquarium.dm b/code/datums/aquarium.dm index da8c3afeb531..37a38f7849e6 100644 --- a/code/datums/aquarium.dm +++ b/code/datums/aquarium.dm @@ -136,7 +136,7 @@ . = ..() REMOVE_TRAIT(parent, TRAIT_FISH_CASE_COMPATIBILE, REF(src)) -/datum/component/aquarium_content/Destroy(force, silent) +/datum/component/aquarium_content/Destroy(force) if(current_aquarium) remove_from_aquarium() QDEL_NULL(vc_obj) diff --git a/code/datums/components/admin_popup.dm b/code/datums/components/admin_popup.dm index 88ef0d97fabf..98d0eccfbf2a 100644 --- a/code/datums/components/admin_popup.dm +++ b/code/datums/components/admin_popup.dm @@ -26,7 +26,7 @@ PROC_REF(delete_self), ) -/datum/component/admin_popup/Destroy(force, silent) +/datum/component/admin_popup/Destroy(force) var/client/parent_client = parent parent_client?.screen -= admin_popup diff --git a/code/datums/components/aquarium.dm b/code/datums/components/aquarium.dm index da8c3afeb531..37a38f7849e6 100644 --- a/code/datums/components/aquarium.dm +++ b/code/datums/components/aquarium.dm @@ -136,7 +136,7 @@ . = ..() REMOVE_TRAIT(parent, TRAIT_FISH_CASE_COMPATIBILE, REF(src)) -/datum/component/aquarium_content/Destroy(force, silent) +/datum/component/aquarium_content/Destroy(force) if(current_aquarium) remove_from_aquarium() QDEL_NULL(vc_obj) diff --git a/code/datums/components/attachment.dm b/code/datums/components/attachment.dm index 01e3abedd80b..1d1edcd44545 100644 --- a/code/datums/components/attachment.dm +++ b/code/datums/components/attachment.dm @@ -52,7 +52,7 @@ for(var/signal in signals) RegisterSignal(parent, signal, signals[signal]) -/datum/component/attachment/Destroy(force, silent) +/datum/component/attachment/Destroy(force) REMOVE_TRAIT(parent, TRAIT_ATTACHABLE, "attachable") if(actions && length(actions)) var/obj/item/gun/parent = src.parent diff --git a/code/datums/components/attachment_holder.dm b/code/datums/components/attachment_holder.dm index 82968a17604b..f83a55eb201a 100644 --- a/code/datums/components/attachment_holder.dm +++ b/code/datums/components/attachment_holder.dm @@ -57,7 +57,7 @@ SIGNAL_HANDLER qdel(src) -/datum/component/attachment_holder/Destroy(force, silent) +/datum/component/attachment_holder/Destroy(force) QDEL_LIST(attachments) attachments = null return ..() diff --git a/code/datums/components/creamed.dm b/code/datums/components/creamed.dm index 019bb7362bd2..c2cf5d07a28e 100644 --- a/code/datums/components/creamed.dm +++ b/code/datums/components/creamed.dm @@ -39,7 +39,7 @@ GLOBAL_LIST_INIT(creamable, typecacheof(list( var/atom/A = parent A.add_overlay(creamface) -/datum/component/creamed/Destroy(force, silent) +/datum/component/creamed/Destroy(force) var/atom/A = parent A.cut_overlay(creamface) qdel(creamface) diff --git a/code/datums/components/deadchat_control.dm b/code/datums/components/deadchat_control.dm index f34960db1072..6030214bf8b7 100644 --- a/code/datums/components/deadchat_control.dm +++ b/code/datums/components/deadchat_control.dm @@ -24,7 +24,7 @@ notify_ghosts("[parent] is now deadchat controllable!", source = parent, action = NOTIFY_ORBIT, header="Something Interesting!") -/datum/component/deadchat_control/Destroy(force, silent) +/datum/component/deadchat_control/Destroy(force) inputs = null orbiters = null ckey_to_cooldown = null diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index cde77f969911..729c50f2349f 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -142,7 +142,7 @@ Behavior that's still missing from this component that original food items had t src.after_eat = after_eat src.on_consume = on_consume -/datum/component/edible/Destroy(force, silent) +/datum/component/edible/Destroy(force) QDEL_NULL(pre_eat) QDEL_NULL(on_compost) QDEL_NULL(after_eat) diff --git a/code/datums/components/food/food_storage.dm b/code/datums/components/food/food_storage.dm index 259ef4a8b6c6..6bc3641711b3 100644 --- a/code/datums/components/food/food_storage.dm +++ b/code/datums/components/food/food_storage.dm @@ -29,7 +29,7 @@ bad_chance_of_discovery = _bad_chance good_chance_of_discovery = _good_chance -/datum/component/food_storage/Destroy(force, silent) +/datum/component/food_storage/Destroy(force) if(stored_item) stored_item.forceMove(stored_item.drop_location()) stored_item.dropped() diff --git a/code/datums/components/gunpoint.dm b/code/datums/components/gunpoint.dm index 85701e9c7626..ab7b1e641410 100644 --- a/code/datums/components/gunpoint.dm +++ b/code/datums/components/gunpoint.dm @@ -46,7 +46,7 @@ addtimer(CALLBACK(src, PROC_REF(update_stage), 2), GUNPOINT_DELAY_STAGE_2) -/datum/component/gunpoint/Destroy(force, silent) +/datum/component/gunpoint/Destroy(force) var/mob/living/shooter = parent shooter.remove_status_effect(STATUS_EFFECT_HOLDUP) target.remove_status_effect(STATUS_EFFECT_HELDUP) diff --git a/code/datums/components/manual_blinking.dm b/code/datums/components/manual_blinking.dm index d97e88ca8fe9..e33d5f558d81 100644 --- a/code/datums/components/manual_blinking.dm +++ b/code/datums/components/manual_blinking.dm @@ -22,7 +22,7 @@ last_blink = world.time to_chat(C, "You suddenly realize you're blinking manually.") -/datum/component/manual_blinking/Destroy(force, silent) +/datum/component/manual_blinking/Destroy(force) E = null STOP_PROCESSING(SSdcs, src) to_chat(parent, "You revert back to automatic blinking.") diff --git a/code/datums/components/manual_breathing.dm b/code/datums/components/manual_breathing.dm index bcae15536ca7..882887f0ccc5 100644 --- a/code/datums/components/manual_breathing.dm +++ b/code/datums/components/manual_breathing.dm @@ -22,7 +22,7 @@ last_breath = world.time to_chat(C, "You suddenly realize you're breathing manually.") -/datum/component/manual_breathing/Destroy(force, silent) +/datum/component/manual_breathing/Destroy(force) L = null STOP_PROCESSING(SSdcs, src) to_chat(parent, "You revert back to automatic breathing.") diff --git a/code/datums/components/pellet_cloud.dm b/code/datums/components/pellet_cloud.dm index 3bc86ad2e53b..d18bdc7d8cbc 100644 --- a/code/datums/components/pellet_cloud.dm +++ b/code/datums/components/pellet_cloud.dm @@ -60,7 +60,7 @@ else if(isgrenade(parent) || islandmine(parent) || issupplypod(parent)) radius = magnitude -/datum/component/pellet_cloud/Destroy(force, silent) +/datum/component/pellet_cloud/Destroy(force) purple_hearts = null pellets = null targets_hit = null diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm index 81cb0c2b4d40..7c2c3473e2d0 100644 --- a/code/datums/components/shielded.dm +++ b/code/datums/components/shielded.dm @@ -50,7 +50,7 @@ if(recharge_start_delay) START_PROCESSING(SSdcs, src) -/datum/component/shielded/Destroy(force, silent) +/datum/component/shielded/Destroy(force) if(wearer) shield_icon = "broken" UnregisterSignal(wearer, COMSIG_ATOM_UPDATE_OVERLAYS) diff --git a/code/datums/components/weatherannouncer.dm b/code/datums/components/weatherannouncer.dm index a5e622d8669e..7da27dcbba2f 100644 --- a/code/datums/components/weatherannouncer.dm +++ b/code/datums/components/weatherannouncer.dm @@ -38,7 +38,7 @@ speaker.update_appearance(UPDATE_ICON) update_light_color() -/datum/component/weather_announcer/Destroy(force, silent) +/datum/component/weather_announcer/Destroy(force) STOP_PROCESSING(SSprocessing, src) return ..() diff --git a/code/datums/datum.dm b/code/datums/datum.dm index e2f478ba7834..97da48745fae 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -44,8 +44,12 @@ var/datum/weakref/weak_reference #ifdef REFERENCE_TRACKING - var/running_find_references + /// When was this datum last touched by a reftracker? + /// If this value doesn't match with the start of the search + /// We know this datum has never been seen before, and we should check it var/last_find_references = 0 + /// How many references we're trying to find when searching + var/references_to_clear = 0 #ifdef REFERENCE_TRACKING_DEBUG ///Stores info about where refs are found, used for sanity checks and testing var/list/found_refs @@ -226,3 +230,19 @@ qdel(D) else return returned + +/// Return text from this proc to provide extra context to hard deletes that happen to it +/// Optional, you should use this for cases where replication is difficult and extra context is required +/// Can be called more then once per object, use harddel_deets_dumped to avoid duplicate calls (I am so sorry) +/datum/proc/dump_harddel_info() + return + +/image + var/harddel_deets_dumped = FALSE + +///images are pretty generic, this should help a bit with tracking harddels related to them +/image/dump_harddel_info() + if(harddel_deets_dumped) + return + harddel_deets_dumped = TRUE + return "Image icon: [icon] - icon_state: [icon_state] [loc ? "loc: [loc] ([loc.x],[loc.y],[loc.z])" : ""]" diff --git a/code/datums/elements/food/edible.dm b/code/datums/elements/food/edible.dm index a06a5ec28b79..615422198d88 100644 --- a/code/datums/elements/food/edible.dm +++ b/code/datums/elements/food/edible.dm @@ -143,7 +143,7 @@ Behavior that's still missing from this component that original food items had t src.after_eat = after_eat src.on_consume = on_consume -/datum/component/edible/Destroy(force, silent) +/datum/component/edible/Destroy(force) QDEL_NULL(pre_eat) QDEL_NULL(on_compost) QDEL_NULL(after_eat) diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm index 7134d2e8ecef..9dea05393577 100644 --- a/code/datums/progressbar.dm +++ b/code/datums/progressbar.dm @@ -16,7 +16,8 @@ var/last_progress = 0 ///Variable to ensure smooth visual stacking on multiple progress bars. var/listindex = 0 - + ///The type of our last value for bar_loc, for debugging + var/location_type /datum/progressbar/New(mob/User, goal_number, atom/target) . = ..() @@ -32,6 +33,7 @@ return goal = goal_number bar_loc = target + location_type = bar_loc.type bar = image('icons/effects/progressbar.dmi', bar_loc, "prog_bar_0", HUD_LAYER) bar.plane = ABOVE_HUD_PLANE bar.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA @@ -135,6 +137,10 @@ QDEL_IN(src, PROGRESSBAR_ANIMATION_TIME) +///Progress bars are very generic, and what hangs a ref to them depends heavily on the context in which they're used +///So let's make hunting harddels easier yeah? +/datum/progressbar/dump_harddel_info() + return "Owner's type: [location_type]" #undef PROGRESSBAR_ANIMATION_TIME #undef PROGRESSBAR_HEIGHT diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index fda41eab7789..21eb3cc362b7 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -99,6 +99,11 @@ /obj/machinery/camera/proc/create_prox_monitor() if(!proximity_monitor) proximity_monitor = new(src, 1) + RegisterSignal(proximity_monitor, COMSIG_PARENT_QDELETING, PROC_REF(proximity_deleted)) + +/obj/machinery/camera/proc/proximity_deleted() + SIGNAL_HANDLER + proximity_monitor = null /obj/machinery/camera/proc/set_area_motion(area/A) area_motion = A diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 2c269ce1ee9a..61d8b2757836 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -614,6 +614,9 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that dellog += "
  • Ignored force: [I.no_respect_force]
  • " if (I.no_hint) dellog += "
  • No hint: [I.no_hint]
  • " + if(LAZYLEN(I.extra_details)) + var/details = I.extra_details.Join("
  • ") + dellog += "
  • Extra Info:
    • [details]
    " dellog += "
  • " dellog += "" diff --git a/code/modules/admin/view_variables/reference_tracking.dm b/code/modules/admin/view_variables/reference_tracking.dm index a9a84986416d..b9fd0e6d2ad6 100644 --- a/code/modules/admin/view_variables/reference_tracking.dm +++ b/code/modules/admin/view_variables/reference_tracking.dm @@ -1,36 +1,29 @@ #ifdef REFERENCE_TRACKING +#define REFSEARCH_RECURSE_LIMIT 64 -/datum/proc/find_references(skip_alert) - running_find_references = type +/datum/proc/find_references(references_to_clear = INFINITY) if(usr?.client) - if(usr.client.running_find_references) - log_reftracker("CANCELLED search for references to a [usr.client.running_find_references].") - usr.client.running_find_references = null - running_find_references = null - //restart the garbage collector - SSgarbage.can_fire = TRUE - SSgarbage.next_fire = world.time + world.tick_lag + if(tgui_alert(usr,"Running this will lock everything up for about 5 minutes. Would you like to begin the search?", "Find References", list("Yes", "No")) != "Yes") return - #ifndef FIND_REF_NO_CHECK_TICK - if(!skip_alert && alert("Running this will lock everything up for about 5 minutes. Would you like to begin the search?", "Find References", "Yes", "No") != "Yes") - running_find_references = null - return - #endif - + src.references_to_clear = references_to_clear //this keeps the garbage collector from failing to collect objects being searched for in here SSgarbage.can_fire = FALSE - if(usr?.client) - usr.client.running_find_references = type + _search_references() + //restart the garbage collector + SSgarbage.can_fire = TRUE + SSgarbage.update_nextfire(reset_time = TRUE) - log_reftracker("Beginning search for references to a [type].") +/datum/proc/_search_references() + log_reftracker("Beginning search for references to a [type], looking for [references_to_clear] refs.") var/starting_time = world.time - //Time to search the whole game for our ref - DoSearchVar(GLOB, "GLOB", search_time = starting_time) //globals + DoSearchVar(GLOB, "GLOB", starting_time) //globals log_reftracker("Finished searching globals") + if(src.references_to_clear == 0) + return //Yes we do actually need to do this. The searcher refuses to read weird lists //And global.vars is a really weird list @@ -38,45 +31,46 @@ for(var/key in global.vars) global_vars[key] = global.vars[key] - DoSearchVar(global_vars, "Native Global", search_time = starting_time) + DoSearchVar(global_vars, "Native Global", starting_time) log_reftracker("Finished searching native globals") + if(src.references_to_clear == 0) + return for(var/datum/thing in world) //atoms (don't beleive its lies) - DoSearchVar(thing, "World -> [thing.type]", search_time = starting_time) + DoSearchVar(thing, "World -> [thing.type]", starting_time) + if(src.references_to_clear == 0) + break log_reftracker("Finished searching atoms") + if(src.references_to_clear == 0) + return for(var/datum/thing) //datums - DoSearchVar(thing, "Datums -> [thing.type]", search_time = starting_time) + DoSearchVar(thing, "Datums -> [thing.type]", starting_time) + if(src.references_to_clear == 0) + break log_reftracker("Finished searching datums") + if(src.references_to_clear == 0) + return -#ifndef REFERENCE_DOING_IT_LIVE //Warning, attempting to search clients like this will cause crashes if done on live. Watch yourself +#ifndef REFERENCE_DOING_IT_LIVE for(var/client/thing) //clients - DoSearchVar(thing, "Clients -> [thing.type]", search_time = starting_time) + DoSearchVar(thing, "Clients -> [thing.type]", starting_time) + if(src.references_to_clear == 0) + break log_reftracker("Finished searching clients") - - log_reftracker("Completed search for references to a [type].") + if(src.references_to_clear == 0) + return #endif - if(usr?.client) - usr.client.running_find_references = null - running_find_references = null - - //restart the garbage collector - SSgarbage.can_fire = TRUE - SSgarbage.next_fire = world.time + world.tick_lag - -/datum/proc/DoSearchVar(potential_container, container_name, recursive_limit = 64, search_time = world.time) - #ifdef REFERENCE_TRACKING_DEBUG - if(SSgarbage.should_save_refs && !found_refs) - found_refs = list() - #endif + log_reftracker("Completed search for references to a [type].") - if(usr?.client && !usr.client.running_find_references) +/datum/proc/DoSearchVar(potential_container, container_name, search_time, recursion_count, is_special_list) + if(recursion_count >= REFSEARCH_RECURSE_LIMIT) + log_reftracker("Recursion limit reached. [container_name]") return - if(!recursive_limit) - log_reftracker("Recursion limit reached. [container_name]") + if(references_to_clear == 0) return //Check each time you go down a layer. This makes it a bit slow, but it won't effect the rest of the game at all @@ -84,7 +78,7 @@ CHECK_TICK #endif - if(istype(potential_container, /datum)) + if(isdatum(potential_container)) var/datum/datum_container = potential_container if(datum_container.last_find_references == search_time) return @@ -92,68 +86,122 @@ datum_container.last_find_references = search_time var/list/vars_list = datum_container.vars + var/is_atom = FALSE + var/is_area = FALSE + if(isatom(datum_container)) + is_atom = TRUE + if(isarea(datum_container)) + is_area = TRUE for(var/varname in vars_list) - #ifndef FIND_REF_NO_CHECK_TICK - CHECK_TICK - #endif - if (varname == "vars" || varname == "vis_locs") //Fun fact, vis_locs don't count for references - continue var/variable = vars_list[varname] - - if(variable == src) + if(islist(variable)) + //Fun fact, vis_locs don't count for references + if(varname == "vars" || (is_atom && (varname == "vis_locs" || varname == "overlays" || varname == "underlays" || varname == "filters" || varname == "verbs" || (is_area && varname == "contents")))) + continue + // We do this after the varname check to avoid area contents (reading it incures a world loop's worth of cost) + if(!length(variable)) + continue + DoSearchVar(variable,\ + "[container_name] [datum_container.ref_search_details()] -> [varname] (list)",\ + search_time,\ + recursion_count + 1,\ + /*is_special_list = */ is_atom && (varname == "contents" || varname == "vis_contents" || varname == "locs")) + else if(variable == src) #ifdef REFERENCE_TRACKING_DEBUG if(SSgarbage.should_save_refs) + if(!found_refs) + found_refs = list() found_refs[varname] = TRUE continue //End early, don't want these logging + else + log_reftracker("Found [type] [text_ref(src)] in [datum_container.type]'s [datum_container.ref_search_details()] [varname] var. [container_name]") + #else + log_reftracker("Found [type] [text_ref(src)] in [datum_container.type]'s [datum_container.ref_search_details()] [varname] var. [container_name]") #endif - log_reftracker("Found [type] [text_ref(src)] in [datum_container.type]'s [text_ref(datum_container)] [varname] var. [container_name]") + references_to_clear -= 1 + if(references_to_clear == 0) + log_reftracker("All references to [type] [text_ref(src)] found, exiting.") + return continue - if(islist(variable)) - DoSearchVar(variable, "[container_name] [text_ref(datum_container)] -> [varname] (list)", recursive_limit - 1, search_time) - else if(islist(potential_container)) - var/normal = IS_NORMAL_LIST(potential_container) var/list/potential_cache = potential_container for(var/element_in_list in potential_cache) - #ifndef FIND_REF_NO_CHECK_TICK - CHECK_TICK - #endif + //Check normal sublists + if(islist(element_in_list)) + if(length(element_in_list)) + DoSearchVar(element_in_list, "[container_name] -> [element_in_list] (list)", search_time, recursion_count + 1) //Check normal entrys - if(element_in_list == src) + else if(element_in_list == src) #ifdef REFERENCE_TRACKING_DEBUG if(SSgarbage.should_save_refs) + if(!found_refs) + found_refs = list() found_refs[potential_cache] = TRUE - continue //End early, don't want these logging - #endif + continue + else + log_reftracker("Found [type] [text_ref(src)] in list [container_name].") + #else log_reftracker("Found [type] [text_ref(src)] in list [container_name].") - continue - - var/assoc_val = null - if(!isnum(element_in_list) && normal) - assoc_val = potential_cache[element_in_list] - //Check assoc entrys - if(assoc_val == src) - #ifdef REFERENCE_TRACKING_DEBUG - if(SSgarbage.should_save_refs) - found_refs[potential_cache] = TRUE - continue //End early, don't want these logging #endif - log_reftracker("Found [type] [text_ref(src)] in list [container_name]\[[element_in_list]\]") - continue - //We need to run both of these checks, since our object could be hiding in either of them - //Check normal sublists - if(islist(element_in_list)) - DoSearchVar(element_in_list, "[container_name] -> [element_in_list] (list)", recursive_limit - 1, search_time) - //Check assoc sublists - if(islist(assoc_val)) - DoSearchVar(potential_container[element_in_list], "[container_name]\[[element_in_list]\] -> [assoc_val] (list)", recursive_limit - 1, search_time) -/proc/qdel_and_find_ref_if_fail(datum/thing_to_del, force = FALSE) - thing_to_del.qdel_and_find_ref_if_fail(force) + // This is dumb as hell I'm sorry + // I don't want the garbage subsystem to count as a ref for the purposes of this number + // If we find all other refs before it I want to early exit, and if we don't I want to keep searching past it + var/ignore_ref = FALSE + var/list/queues = SSgarbage.queues + for(var/list/queue in queues) + if(potential_cache in queue) + ignore_ref = TRUE + break + if(ignore_ref) + log_reftracker("[container_name] does not count as a ref for our count") + else + references_to_clear -= 1 + if(references_to_clear == 0) + log_reftracker("All references to [type] [text_ref(src)] found, exiting.") + return + + if(!isnum(element_in_list) && !is_special_list) + // This exists to catch an error that throws when we access a special list + // is_special_list is a hint, it can be wrong + try + var/assoc_val = potential_cache[element_in_list] + //Check assoc sublists + if(islist(assoc_val)) + if(length(assoc_val)) + DoSearchVar(potential_container[element_in_list], "[container_name]\[[element_in_list]\] -> [assoc_val] (list)", search_time, recursion_count + 1) + //Check assoc entry + else if(assoc_val == src) + #ifdef REFERENCE_TRACKING_DEBUG + if(SSgarbage.should_save_refs) + if(!found_refs) + found_refs = list() + found_refs[potential_cache] = TRUE + continue + else + log_reftracker("Found [type] [text_ref(src)] in list [container_name]\[[element_in_list]\]") + #else + log_reftracker("Found [type] [text_ref(src)] in list [container_name]\[[element_in_list]\]") + #endif + references_to_clear -= 1 + if(references_to_clear == 0) + log_reftracker("All references to [type] [text_ref(src)] found, exiting.") + return + catch + // So if it goes wrong we kill it + is_special_list = TRUE + log_reftracker("Curiosity: [container_name] lead to an error when acessing [element_in_list], what is it?") + +#undef REFSEARCH_RECURSE_LIMIT +#endif -/datum/proc/qdel_and_find_ref_if_fail(force = FALSE) - SSgarbage.reference_find_on_fail[text_ref(src)] = TRUE - qdel(src, force) +// Kept outside the ifdef so overrides are easy to implement -#endif +/// Return info about us for reference searching purposes +/// Will be logged as a representation of this datum if it's a part of a search chain +/datum/proc/ref_search_details() + return text_ref(src) + +/datum/callback/ref_search_details() + return "[text_ref(src)] (obj: [object] proc: [delegate] args: [json_encode(arguments)] user: [user?.resolve() || "null"])" diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index f5c37b18997d..7fb618f34ddb 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -12,10 +12,12 @@ // Damn our lack of abstract interfeces if (istype(target, /obj/item/clothing/head/chameleon/drone)) var/obj/item/clothing/head/chameleon/drone/X = target - X.chameleon_action.random_look(owner) + var/datum/action/item_action/chameleon/change/chameleon_action_x = locate() in X.actions + chameleon_action_x.random_look(owner) if (istype(target, /obj/item/clothing/mask/chameleon/drone)) var/obj/item/clothing/mask/chameleon/drone/Z = target - Z.chameleon_action.random_look(owner) + var/datum/action/item_action/chameleon/change/chameleon_action_z = locate() in Z.actions + chameleon_action_z.random_look(owner) return 1 @@ -133,7 +135,8 @@ if(helmet_type) var/obj/item/clothing/head/chameleon/hat = H.head - hat.chameleon_action.update_look(user, helmet_type) + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in hat.actions + chameleon_action.update_look(user, helmet_type) // ID card sechud if(outfit.job_icon) @@ -320,11 +323,9 @@ can_adjust = FALSE armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - var/datum/action/item_action/chameleon/change/chameleon_action - /obj/item/clothing/under/chameleon/Initialize() . = ..() - chameleon_action = new(src) + var/datum/action/item_action/chameleon/change/chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/clothing/under chameleon_action.chameleon_name = "Jumpsuit" chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/clothing/under, /obj/item/clothing/under/color, /obj/item/clothing/under/rank, /obj/item/clothing/under/changeling), only_root_path = TRUE) @@ -334,10 +335,12 @@ . = ..() if(. & EMP_PROTECT_SELF) return + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise() /obj/item/clothing/under/chameleon/broken/Initialize() . = ..() + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise(INFINITY) /obj/item/clothing/suit/chameleon @@ -351,11 +354,9 @@ resistance_flags = NONE armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - var/datum/action/item_action/chameleon/change/chameleon_action - /obj/item/clothing/suit/chameleon/Initialize() . = ..() - chameleon_action = new(src) + var/datum/action/item_action/chameleon/change/chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/clothing/suit chameleon_action.chameleon_name = "Suit" chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/clothing/suit/armor/abductor, /obj/item/clothing/suit/changeling), only_root_path = TRUE) @@ -365,10 +366,12 @@ . = ..() if(. & EMP_PROTECT_SELF) return + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise() /obj/item/clothing/suit/chameleon/broken/Initialize() . = ..() + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise(INFINITY) /obj/item/clothing/glasses/chameleon @@ -379,11 +382,9 @@ resistance_flags = NONE armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - var/datum/action/item_action/chameleon/change/chameleon_action - /obj/item/clothing/glasses/chameleon/Initialize() . = ..() - chameleon_action = new(src) + var/datum/action/item_action/chameleon/change/chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/clothing/glasses chameleon_action.chameleon_name = "Glasses" chameleon_action.chameleon_blacklist = typecacheof(/obj/item/clothing/glasses/changeling, only_root_path = TRUE) @@ -393,10 +394,12 @@ . = ..() if(. & EMP_PROTECT_SELF) return + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise() /obj/item/clothing/glasses/chameleon/broken/Initialize() . = ..() + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise(INFINITY) /obj/item/clothing/gloves/chameleon @@ -408,11 +411,9 @@ resistance_flags = NONE armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - var/datum/action/item_action/chameleon/change/chameleon_action - /obj/item/clothing/gloves/chameleon/Initialize() . = ..() - chameleon_action = new(src) + var/datum/action/item_action/chameleon/change/chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/clothing/gloves chameleon_action.chameleon_name = "Gloves" chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/clothing/gloves, /obj/item/clothing/gloves/color, /obj/item/clothing/gloves/changeling), only_root_path = TRUE) @@ -422,10 +423,12 @@ . = ..() if(. & EMP_PROTECT_SELF) return + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise() /obj/item/clothing/gloves/chameleon/broken/Initialize() . = ..() + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise(INFINITY) /obj/item/clothing/head/chameleon @@ -436,11 +439,9 @@ resistance_flags = NONE armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - var/datum/action/item_action/chameleon/change/chameleon_action - /obj/item/clothing/head/chameleon/Initialize() . = ..() - chameleon_action = new(src) + var/datum/action/item_action/chameleon/change/chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/clothing/head chameleon_action.chameleon_name = "Hat" chameleon_action.chameleon_blacklist = typecacheof(/obj/item/clothing/head/changeling, only_root_path = TRUE) @@ -450,10 +451,12 @@ . = ..() if(. & EMP_PROTECT_SELF) return + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise() /obj/item/clothing/head/chameleon/broken/Initialize() . = ..() + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise(INFINITY) /obj/item/clothing/head/chameleon/drone @@ -465,6 +468,7 @@ /obj/item/clothing/head/chameleon/drone/Initialize() . = ..() ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.random_look() var/datum/action/item_action/chameleon/drone/togglehatmask/togglehatmask_action = new(src) togglehatmask_action.UpdateButtonIcon() @@ -486,11 +490,9 @@ var/voice_change = 1 ///This determines if the voice changer is on or off. - var/datum/action/item_action/chameleon/change/chameleon_action - /obj/item/clothing/mask/chameleon/Initialize() . = ..() - chameleon_action = new(src) + var/datum/action/item_action/chameleon/change/chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/clothing/mask chameleon_action.chameleon_name = "Mask" chameleon_action.chameleon_blacklist = typecacheof(/obj/item/clothing/mask/changeling, only_root_path = TRUE) @@ -500,10 +502,12 @@ . = ..() if(. & EMP_PROTECT_SELF) return + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise() /obj/item/clothing/mask/chameleon/broken/Initialize() . = ..() + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise(INFINITY) /obj/item/clothing/mask/chameleon/attack_self(mob/user) @@ -519,6 +523,7 @@ /obj/item/clothing/mask/chameleon/drone/Initialize() . = ..() ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.random_look() var/datum/action/item_action/chameleon/drone/togglehatmask/togglehatmask_action = new(src) togglehatmask_action.UpdateButtonIcon() @@ -537,11 +542,9 @@ armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - var/datum/action/item_action/chameleon/change/chameleon_action - /obj/item/clothing/shoes/chameleon/Initialize() . = ..() - chameleon_action = new(src) + var/datum/action/item_action/chameleon/change/chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/clothing/shoes chameleon_action.chameleon_name = "Shoes" chameleon_action.chameleon_blacklist = typecacheof(/obj/item/clothing/shoes/changeling, only_root_path = TRUE) @@ -551,6 +554,7 @@ . = ..() if(. & EMP_PROTECT_SELF) return + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise() /obj/item/clothing/shoes/chameleon/noslip @@ -562,15 +566,15 @@ /obj/item/clothing/shoes/chameleon/noslip/broken/Initialize() . = ..() + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise(INFINITY) /obj/item/storage/backpack/chameleon name = "backpack" - var/datum/action/item_action/chameleon/change/chameleon_action /obj/item/storage/backpack/chameleon/Initialize() . = ..() - chameleon_action = new(src) + var/datum/action/item_action/chameleon/change/chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/storage/backpack chameleon_action.chameleon_name = "Backpack" chameleon_action.initialize_disguises() @@ -579,21 +583,22 @@ . = ..() if(. & EMP_PROTECT_SELF) return + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise() /obj/item/storage/backpack/chameleon/broken/Initialize() . = ..() + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise(INFINITY) /obj/item/storage/belt/chameleon name = "toolbelt" desc = "Holds tools." - var/datum/action/item_action/chameleon/change/chameleon_action /obj/item/storage/belt/chameleon/Initialize() . = ..() - chameleon_action = new(src) + var/datum/action/item_action/chameleon/change/chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/storage/belt chameleon_action.chameleon_name = "Belt" chameleon_action.initialize_disguises() @@ -607,19 +612,17 @@ . = ..() if(. & EMP_PROTECT_SELF) return + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise() /obj/item/storage/belt/chameleon/broken/Initialize() . = ..() + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise(INFINITY) -/obj/item/radio/headset/chameleon - name = "radio headset" - var/datum/action/item_action/chameleon/change/chameleon_action - /obj/item/radio/headset/chameleon/Initialize() . = ..() - chameleon_action = new(src) + var/datum/action/item_action/chameleon/change/chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/radio/headset chameleon_action.chameleon_name = "Headset" chameleon_action.initialize_disguises() @@ -628,19 +631,17 @@ . = ..() if(. & EMP_PROTECT_SELF) return + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise() /obj/item/radio/headset/chameleon/broken/Initialize() . = ..() + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise(INFINITY) -/obj/item/pda/chameleon - name = "PDA" - var/datum/action/item_action/chameleon/change/pda/chameleon_action - /obj/item/pda/chameleon/Initialize() . = ..() - chameleon_action = new(src) + var/datum/action/item_action/chameleon/change/chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/pda chameleon_action.chameleon_name = "PDA" chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/pda/heads, /obj/item/pda/ai, /obj/item/pda/ai/pai), only_root_path = TRUE) @@ -650,24 +651,24 @@ . = ..() if(. & EMP_PROTECT_SELF) return + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise() /obj/item/pda/chameleon/broken/Initialize() . = ..() + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise(INFINITY) -/obj/item/stamp/chameleon - var/datum/action/item_action/chameleon/change/chameleon_action - /obj/item/stamp/chameleon/Initialize() . = ..() - chameleon_action = new(src) + var/datum/action/item_action/chameleon/change/chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/stamp chameleon_action.chameleon_name = "Stamp" chameleon_action.initialize_disguises() /obj/item/stamp/chameleon/broken/Initialize() . = ..() + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise(INFINITY) /obj/item/clothing/neck/chameleon @@ -677,12 +678,9 @@ resistance_flags = NONE armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) -/obj/item/clothing/neck/chameleon - var/datum/action/item_action/chameleon/change/chameleon_action - /obj/item/clothing/neck/chameleon/Initialize() . = ..() - chameleon_action = new(src) + var/datum/action/item_action/chameleon/change/chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/clothing/neck chameleon_action.chameleon_name = "Neck Accessory" chameleon_action.initialize_disguises() @@ -691,8 +689,10 @@ . = ..() if(. & EMP_PROTECT_SELF) return + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise() /obj/item/clothing/neck/chameleon/broken/Initialize() . = ..() + var/datum/action/item_action/chameleon/change/chameleon_action = locate() in actions chameleon_action.emp_randomise(INFINITY) diff --git a/code/modules/unit_tests/create_and_destroy.dm b/code/modules/unit_tests/create_and_destroy.dm index f16ad0055056..b7c1b924fd53 100644 --- a/code/modules/unit_tests/create_and_destroy.dm +++ b/code/modules/unit_tests/create_and_destroy.dm @@ -198,6 +198,9 @@ TEST_FAIL("[item.name] failed to respect force deletion [item.no_respect_force] times out of a total del count of [item.qdels]") if(item.no_hint) TEST_FAIL("[item.name] failed to return a qdel hint [item.no_hint] times out of a total del count of [item.qdels]") + if(LAZYLEN(item.extra_details)) + var/details = item.extra_details.Join("\n") + TEST_FAIL("[item.name] failed with extra info: \n[details]") cache_for_sonic_speed = SSatoms.BadInitializeCalls for(var/path in cache_for_sonic_speed) diff --git a/code/modules/unit_tests/find_reference_sanity.dm b/code/modules/unit_tests/find_reference_sanity.dm index 67b6072d3b96..f6736ccb1d58 100644 --- a/code/modules/unit_tests/find_reference_sanity.dm +++ b/code/modules/unit_tests/find_reference_sanity.dm @@ -15,6 +15,8 @@ return ..() /atom/movable/ref_test + // Gotta make sure we do a full check + references_to_clear = INFINITY var/atom/movable/ref_test/self_ref /atom/movable/ref_test/Destroy(force) @@ -27,8 +29,8 @@ SSgarbage.should_save_refs = TRUE //Sanity check - victim.DoSearchVar(testbed, "Sanity Check", search_time = 1) //We increment search time to get around an optimization - TEST_ASSERT(!victim.found_refs.len, "The ref-tracking tool found a ref where none existed") + victim.DoSearchVar(testbed, "Sanity Check") //We increment search time to get around an optimization + TEST_ASSERT(!LAZYLEN(victim.found_refs), "The ref-tracking tool found a ref where none existed") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_baseline/Run() @@ -41,11 +43,11 @@ testbed.test_list += victim testbed.test_assoc_list["baseline"] = victim - victim.DoSearchVar(testbed, "First Run", search_time = 2) + victim.DoSearchVar(testbed, "First Run") - TEST_ASSERT(victim.found_refs["test"], "The ref-tracking tool failed to find a regular value") - TEST_ASSERT(victim.found_refs[testbed.test_list], "The ref-tracking tool failed to find a list entry") - TEST_ASSERT(victim.found_refs[testbed.test_assoc_list], "The ref-tracking tool failed to find an assoc list value") + TEST_ASSERT(LAZYACCESS(victim.found_refs, "test"), "The ref-tracking tool failed to find a regular value") + TEST_ASSERT(LAZYACCESS(victim.found_refs, testbed.test_list), "The ref-tracking tool failed to find a list entry") + TEST_ASSERT(LAZYACCESS(victim.found_refs, testbed.test_assoc_list), "The ref-tracking tool failed to find an assoc list value") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_exotic/Run() @@ -58,12 +60,12 @@ testbed.vis_contents += victim testbed.test_assoc_list[victim] = TRUE - victim.DoSearchVar(testbed, "Second Run", search_time = 3) + victim.DoSearchVar(testbed, "Second Run") //This is another sanity check - TEST_ASSERT(!victim.found_refs[testbed.overlays], "The ref-tracking tool found an overlays entry? That shouldn't be possible") - TEST_ASSERT(victim.found_refs[testbed.vis_contents], "The ref-tracking tool failed to find a vis_contents entry") - TEST_ASSERT(victim.found_refs[testbed.test_assoc_list], "The ref-tracking tool failed to find an assoc list key") + TEST_ASSERT(!LAZYACCESS(victim.found_refs, testbed.overlays), "The ref-tracking tool found an overlays entry? That shouldn't be possible") + TEST_ASSERT(LAZYACCESS(victim.found_refs, testbed.vis_contents), "The ref-tracking tool failed to find a vis_contents entry") + TEST_ASSERT(LAZYACCESS(victim.found_refs, testbed.test_assoc_list), "The ref-tracking tool failed to find an assoc list key") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_esoteric/Run() @@ -78,11 +80,11 @@ var/list/to_find_assoc = list(victim) testbed.test_assoc_list["Nesting"] = to_find_assoc - victim.DoSearchVar(victim, "Third Run Self", search_time = 4) - victim.DoSearchVar(testbed, "Third Run Testbed", search_time = 4) - TEST_ASSERT(victim.found_refs["self_ref"], "The ref-tracking tool failed to find a self reference") - TEST_ASSERT(victim.found_refs[to_find], "The ref-tracking tool failed to find a nested list entry") - TEST_ASSERT(victim.found_refs[to_find_assoc], "The ref-tracking tool failed to find a nested assoc list entry") + victim.DoSearchVar(victim, "Third Run Self") + victim.DoSearchVar(testbed, "Third Run Testbed") + TEST_ASSERT(LAZYACCESS(victim.found_refs, "self_ref"), "The ref-tracking tool failed to find a self reference") + TEST_ASSERT(LAZYACCESS(victim.found_refs, to_find), "The ref-tracking tool failed to find a nested list entry") + TEST_ASSERT(LAZYACCESS(victim.found_refs, to_find_assoc), "The ref-tracking tool failed to find a nested assoc list entry") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_null_key_entry/Run() @@ -93,8 +95,8 @@ //Calm before the storm testbed.test_assoc_list = list(null = victim) - victim.DoSearchVar(testbed, "Fourth Run", search_time = 5) - TEST_ASSERT(testbed.test_assoc_list, "The ref-tracking tool failed to find a null key'd assoc list entry") + victim.DoSearchVar(testbed, "Fourth Run") + TEST_ASSERT(LAZYACCESS(victim.found_refs, testbed.test_assoc_list), "The ref-tracking tool failed to find a null key'd assoc list entry") /datum/unit_test/find_reference_assoc_investigation/Run() var/atom/movable/ref_test/victim = allocate(/atom/movable/ref_test) @@ -107,9 +109,9 @@ var/list/to_find_null_assoc_nested = list(victim) testbed.test_assoc_list[null] = to_find_null_assoc_nested - victim.DoSearchVar(testbed, "Fifth Run", search_time = 6) - TEST_ASSERT(victim.found_refs[to_find_in_key], "The ref-tracking tool failed to find a nested assoc list key") - TEST_ASSERT(victim.found_refs[to_find_null_assoc_nested], "The ref-tracking tool failed to find a null key'd nested assoc list entry") + victim.DoSearchVar(testbed, "Fifth Run") + TEST_ASSERT(LAZYACCESS(victim.found_refs, to_find_in_key), "The ref-tracking tool failed to find a nested assoc list key") + TEST_ASSERT(LAZYACCESS(victim.found_refs, to_find_null_assoc_nested), "The ref-tracking tool failed to find a null key'd nested assoc list entry") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_static_investigation/Run() @@ -126,7 +128,7 @@ for(var/key in global.vars) global_vars[key] = global.vars[key] - victim.DoSearchVar(global_vars, "Sixth Run", search_time = 7) + victim.DoSearchVar(global_vars, "Sixth Run") - TEST_ASSERT(victim.found_refs[global_vars], "The ref-tracking tool failed to find a natively global variable") + TEST_ASSERT(LAZYACCESS(victim.found_refs, global_vars), "The ref-tracking tool failed to find a natively global variable") SSgarbage.should_save_refs = FALSE From 68d118a3544f0963c8e3f8c83057d757dc901201 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 22 Oct 2024 17:25:54 -0500 Subject: [PATCH 081/274] Automatic changelog generation for PR #3558 [ci skip] --- html/changelogs/AutoChangeLog-pr-3558.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3558.yml diff --git a/html/changelogs/AutoChangeLog-pr-3558.yml b/html/changelogs/AutoChangeLog-pr-3558.yml new file mode 100644 index 000000000000..c2fd2d14e43b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3558.yml @@ -0,0 +1,5 @@ +author: FeenieRU +changes: + - {code_imp: Changing qdel() and SSgarbage procs} + - {code_imp: 'rewrite /Destroy(force, silent) to /Destroy(force)'} +delete-after: true From a57f1f3b39908f1f2798106efc690e71674e1f05 Mon Sep 17 00:00:00 2001 From: Sun-Soaked <45698967+Sun-Soaked@users.noreply.github.com> Date: Tue, 22 Oct 2024 18:21:33 -0400 Subject: [PATCH 082/274] Mine Harddel emergency fix (#3621) ## About The Pull Request REFERENCE OBLITERATION SUTRA(FIVE PALM STRIKE) (UNAVOIDABLE TECHNIQUE) ## Oops I should be demoted ## Changelog :cl: fix: cleans up mine wire datums on mine deletion /:cl: --- code/game/objects/items/devices/mines.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/game/objects/items/devices/mines.dm b/code/game/objects/items/devices/mines.dm index 6547fde77ada..9f0896f946bf 100644 --- a/code/game/objects/items/devices/mines.dm +++ b/code/game/objects/items/devices/mines.dm @@ -203,6 +203,11 @@ AddElement(/datum/element/connect_loc, loc_connections) wires = new /datum/wires/mine(src) +/obj/item/mine/pressure/Destroy() + if(wires) + QDEL_NULL(wires) + . = ..() + /obj/item/mine/pressure/examine(mob/user) . = ..() if(hair_trigger) From 709d5b83dbca105e4d1dbd24644463d3ca5425cd Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 22 Oct 2024 17:38:35 -0500 Subject: [PATCH 083/274] Automatic changelog generation for PR #3621 [ci skip] --- html/changelogs/AutoChangeLog-pr-3621.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3621.yml diff --git a/html/changelogs/AutoChangeLog-pr-3621.yml b/html/changelogs/AutoChangeLog-pr-3621.yml new file mode 100644 index 000000000000..6dd3e834ffc3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3621.yml @@ -0,0 +1,4 @@ +author: Sun-Soaked +changes: + - {bugfix: cleans up mine wire datums on mine deletion} +delete-after: true From 05330de6e34ca8a5b2a7939d73d15c109fb9b46c Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 23 Oct 2024 01:02:19 +0000 Subject: [PATCH 084/274] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-2988.yml | 11 --------- html/changelogs/AutoChangeLog-pr-3383.yml | 7 ------ html/changelogs/AutoChangeLog-pr-3429.yml | 6 ----- html/changelogs/AutoChangeLog-pr-3558.yml | 5 ---- html/changelogs/AutoChangeLog-pr-3583.yml | 5 ---- html/changelogs/AutoChangeLog-pr-3584.yml | 4 --- html/changelogs/AutoChangeLog-pr-3606.yml | 4 --- html/changelogs/AutoChangeLog-pr-3614.yml | 4 --- html/changelogs/AutoChangeLog-pr-3621.yml | 4 --- html/changelogs/archive/2024-10.yml | 30 +++++++++++++++++++++++ 10 files changed, 30 insertions(+), 50 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2988.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3383.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3429.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3558.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3583.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3584.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3606.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3614.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3621.yml diff --git a/html/changelogs/AutoChangeLog-pr-2988.yml b/html/changelogs/AutoChangeLog-pr-2988.yml deleted file mode 100644 index de93fd889fcb..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2988.yml +++ /dev/null @@ -1,11 +0,0 @@ -author: Sun-Soaked -changes: - - {rscadd: 'Directional Mines, implemented as Claymores.'} - - {rscadd: Mines now have World Icons} - - {balance: explosions now only strip to space when a tile is already damaged} - - {bugfix: Prox mines explode from slightly further away & no longer activate through - walls.} - - {bugfix: Multiple mines can no longer be stacked on a tile} - - {code_imp: 'fire_casing() can now be called by non-mobs, allowing objects to shoot - casings.'} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3383.yml b/html/changelogs/AutoChangeLog-pr-3383.yml deleted file mode 100644 index 3ada89781e24..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3383.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: meemofcourse -changes: - - {rscadd: 'A lot of ERTs and ERT remasters, including Fronties, Ramzi, PGF, NGR, - Indies and whatnot'} - - {rscdel: Most Nanotrasen ERTs have been shelved pending assets} - - {rscdel: Smokebomb randomized descriptions} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3429.yml b/html/changelogs/AutoChangeLog-pr-3429.yml deleted file mode 100644 index b44dfe339e77..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3429.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: FalloutFalcon -changes: - - {bugfix: ammo} - - {refactor: refactored ammo types to not be snowflaked when handling spawning subtyped - guns} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3558.yml b/html/changelogs/AutoChangeLog-pr-3558.yml deleted file mode 100644 index c2fd2d14e43b..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3558.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: FeenieRU -changes: - - {code_imp: Changing qdel() and SSgarbage procs} - - {code_imp: 'rewrite /Destroy(force, silent) to /Destroy(force)'} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3583.yml b/html/changelogs/AutoChangeLog-pr-3583.yml deleted file mode 100644 index 932d150c5bb6..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3583.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Erikafox -changes: - - {bugfix: Analgesia can no longer be taken with self-aware} - - {bugfix: Few edge cases for analgesiacs getting pain} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3584.yml b/html/changelogs/AutoChangeLog-pr-3584.yml deleted file mode 100644 index 12e3350793e1..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3584.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: generalthrax -changes: - - {rscadd: 'Added Stamped Steel Machetes, 5 for 500'} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3606.yml b/html/changelogs/AutoChangeLog-pr-3606.yml deleted file mode 100644 index 747ad59533f5..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3606.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Erikafox -changes: - - {rscadd: You can now fax credit holochips} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3614.yml b/html/changelogs/AutoChangeLog-pr-3614.yml deleted file mode 100644 index 527edaa1080c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3614.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Erikafox -changes: - - {bugfix: Hallucination Anomalies will stay on their tile now.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3621.yml b/html/changelogs/AutoChangeLog-pr-3621.yml deleted file mode 100644 index 6dd3e834ffc3..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3621.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Sun-Soaked -changes: - - {bugfix: cleans up mine wire datums on mine deletion} -delete-after: true diff --git a/html/changelogs/archive/2024-10.yml b/html/changelogs/archive/2024-10.yml index 9366ccc7125a..9ce5e59b372c 100644 --- a/html/changelogs/archive/2024-10.yml +++ b/html/changelogs/archive/2024-10.yml @@ -292,3 +292,33 @@ to the Frontier. Expect cool doohickeys on your friendly neighborhood PGF Vessel - imageadd: 'Imaginos: PGF sord sprites' - code_imp: sabres now take up less space in code +2024-10-23: + Erikafox: + - bugfix: Hallucination Anomalies will stay on their tile now. + - rscadd: You can now fax credit holochips + - bugfix: Analgesia can no longer be taken with self-aware + - bugfix: Few edge cases for analgesiacs getting pain + FalloutFalcon: + - bugfix: ammo + - refactor: refactored ammo types to not be snowflaked when handling spawning subtyped + guns + FeenieRU: + - code_imp: Changing qdel() and SSgarbage procs + - code_imp: rewrite /Destroy(force, silent) to /Destroy(force) + Sun-Soaked: + - rscadd: Directional Mines, implemented as Claymores. + - rscadd: Mines now have World Icons + - balance: explosions now only strip to space when a tile is already damaged + - bugfix: Prox mines explode from slightly further away & no longer activate through + walls. + - bugfix: Multiple mines can no longer be stacked on a tile + - code_imp: fire_casing() can now be called by non-mobs, allowing objects to shoot + casings. + - bugfix: cleans up mine wire datums on mine deletion + generalthrax: + - rscadd: Added Stamped Steel Machetes, 5 for 500 + meemofcourse: + - rscadd: A lot of ERTs and ERT remasters, including Fronties, Ramzi, PGF, NGR, + Indies and whatnot + - rscdel: Most Nanotrasen ERTs have been shelved pending assets + - rscdel: Smokebomb randomized descriptions From dcf4e56ec11ab7057396b7ba31a5d5bb9c3d91dd Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Erikafox@users.noreply.github.com> Date: Wed, 23 Oct 2024 11:24:56 -0400 Subject: [PATCH 085/274] Fireaxe Black Market Adjustments (#3590) ## About The Pull Request Fireaxe now cheaper Fireaxe can be sold in greater amounts ## Why It's Good For The Game It's stupid that a melee weapon/tool is sold for nearly as much as Actual Rapid Fire Weaponry ## Changelog :cl: balance: Fireaxes on the black market now cost less. Thanks Kiirv-Waha! /:cl: Co-authored-by: Erika Fox <94164348+Bjarl@users.noreply.github.com> --- .../cargo/blackmarket/blackmarket_items/weapons.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm index 21a0786d9812..c3f3116f324b 100644 --- a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm +++ b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm @@ -352,12 +352,12 @@ /datum/blackmarket_item/weapon/fireaxe name = "Fire Axe" - desc = "An incredibly sharp axe of dubious make used by various engineers throughout the years to settle arguments while hammered. Sold to us by a very friendly man in a suit." + desc = "An incredibly sharp axe of reputable make, used by various engineers to settle arguments while hammered. Sold to us by a very friendly man in a suit." item = /obj/item/melee/axe/fire - price_min = 2500 - price_max = 3500 - stock = 2 + price_min = 1200 + price_max = 2300 + stock_max = 3 availability_prob = 40 /datum/blackmarket_item/weapon/oneshot From ffd8717a538209dd45c2e100dcc3ffdb54e01e3c Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 23 Oct 2024 10:45:46 -0500 Subject: [PATCH 086/274] Automatic changelog generation for PR #3590 [ci skip] --- html/changelogs/AutoChangeLog-pr-3590.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3590.yml diff --git a/html/changelogs/AutoChangeLog-pr-3590.yml b/html/changelogs/AutoChangeLog-pr-3590.yml new file mode 100644 index 000000000000..b91d7074e93c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3590.yml @@ -0,0 +1,4 @@ +author: Erikafox +changes: + - {balance: Fireaxes on the black market now cost less. Thanks Kiirv-Waha!} +delete-after: true From bbb3972fa8d38f3d486152e1c90aaac4a73be812 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:53:57 -0500 Subject: [PATCH 087/274] Label ship and ruins! (#3620) ## About The Pull Request requsted by thgvr ## Why It's Good For The Game ## Changelog :cl: code: better pr labeling for ships and ruins /:cl: --- .github/labeler.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/labeler.yml b/.github/labeler.yml index 5b585de45322..fe3c756cca78 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -42,6 +42,18 @@ Map Change: - "**/*.dmm" - "_maps/**" +Ship: +- changed-files: + - any-glob-to-any-file: + - "_maps/shuttles/**" + - "_maps/configs/**" + +Ruin: +- changed-files: + - any-glob-to-any-file: + - "_maps/RandomRuins/**" + - "code/datums/ruins/**" + # Any changes to .ogg files are marked as sound Sound: - changed-files: From d373c4689c35a3745edc34cb29b65a7efc6687c2 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 23 Oct 2024 18:04:22 -0500 Subject: [PATCH 088/274] Automatic changelog generation for PR #3620 [ci skip] --- html/changelogs/AutoChangeLog-pr-3620.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3620.yml diff --git a/html/changelogs/AutoChangeLog-pr-3620.yml b/html/changelogs/AutoChangeLog-pr-3620.yml new file mode 100644 index 000000000000..a200fa593b23 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3620.yml @@ -0,0 +1,4 @@ +author: FalloutFalcon +changes: + - {code_imp: better pr labeling for ships and ruins} +delete-after: true From 0bf287a1b63ce9c2f9316c834d2476bf7a4c3870 Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Erikafox@users.noreply.github.com> Date: Wed, 23 Oct 2024 19:51:12 -0400 Subject: [PATCH 089/274] Raleigh-Class Mercenary Corvette (#3458) ## About The Pull Request ![StrongDMM-2024-10-06 19 02 02](https://github.com/user-attachments/assets/f44a57a7-ef44-4696-8c08-c00a2ba63367) ![StrongDMM-2024-10-06 19 02 03](https://github.com/user-attachments/assets/4b862d9e-13b7-486f-83ca-c5de470dc7ca) ![dreamseeker_qhkyYgbpdx](https://github.com/user-attachments/assets/2f4dd01a-527e-4e9f-bd70-ec9ad8653d73) ![dreamseeker_8jf3u0ZlwA](https://github.com/user-attachments/assets/d7e3b7ac-1e96-4b32-b3bc-a6e213c648db) ![dreamseeker_jJx71tKdzb](https://github.com/user-attachments/assets/16b5a426-d622-4059-926c-151ce0a41e61) Adds the Raleigh Class Corvette - a century old design manufactured by Kasagi-Fischer for yuppie solarians, and now retooled for usage as a mercenary vessel. Originally sold as a 'Safari Ship', or a 'Yacht' in some markets, the strange shape and relative quality of the design made it very appealing for usage by unaligned mercenaries forces, with the vessel capable of carrying a small complement of supposedly professional soldiers. The Raleigh supports a crew of: 1 - Captain 1 - Lieutenant 1 - Engineer 3 - Troopers 1 - Recruit (random guy we found) The Raleigh's gear includes: 1 - E40 1 - Cobra-20 2 - Ringnecks Assorted Machetes The Yuri Room The Gambling Room The Emergency Medical Hologram ## Why It's Good For The Game Adds a combat/rp focused ship for mercenaries that's |not| inteq. Think of all the possibilities. ## Changelog :cl: add: Kasagi-Fischer has begun a new production run of the venerable Raleigh-class Corvette. See your purchaser's manual for more information! /:cl: --------- Co-authored-by: Erika Fox <94164348+Bjarl@users.noreply.github.com> --- _maps/configs/independent_raleigh.json | 45 + .../independent/independent_raleigh.dmm | 6334 +++++++++++++++++ code/game/objects/structures/cabinet_types.dm | 10 +- .../clothing/outfits/factions/independent.dm | 41 + icons/obj/wallmounts.dmi | Bin 11992 -> 14767 bytes 5 files changed, 6428 insertions(+), 2 deletions(-) create mode 100644 _maps/configs/independent_raleigh.json create mode 100644 _maps/shuttles/independent/independent_raleigh.dmm diff --git a/_maps/configs/independent_raleigh.json b/_maps/configs/independent_raleigh.json new file mode 100644 index 000000000000..2f818addbd67 --- /dev/null +++ b/_maps/configs/independent_raleigh.json @@ -0,0 +1,45 @@ +{ + "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", + "map_name": "Raleigh-class Corvette", + "faction": "/datum/faction/independent", + "prefix": "ISV", + "namelists": [ + "SPACE", + "BEASTS", + "NATURAL_AGGRESSIVE" + ], + "map_short_name": "Raleigh-class", + "description": "The Raleigh-class is a Kasagi-Fischer Partnership design created in the late 390s for a then growing 'exploratory' market. While it's original designation was 'Safari Ship' or in some cases, 'Yacht'. Recently manufactured ones are proudly labelled as corvettes, and sold off to PDFs looking to stay fiscally sound, mercenaries, and the odd Rich, Bored, Solarian buyer. In the frontier, you're most likely to see a Raleigh serving as the command vessel for a small group of mercenaries.", + "tags": [ + "Combat", + "RP Focus" + ], + "map_path": "_maps/shuttles/independent/independent_raleigh.dmm", + "limit": 1, + "starting_funds": 1500, + "job_slots": { + "Captain": { + "outfit": "/datum/outfit/job/independent/captain/merc", + "officer": true, + "slots": 1 + }, + "Lieutenant": { + "outfit": "/datum/outfit/job/independent/hos/merc", + "officer": true, + "slots": 1 + }, + "Engineer": { + "outfit": "/datum/outfit/job/independent/engineer", + "slots": 1 + }, + "Mercenary": { + "outfit": "/datum/outfit/job/independent/security/merc", + "slots": 3 + }, + "Recruit": { + "outfit": "/datum/outfit/job/independent/assistant", + "slots": 1 + } + }, + "enabled": true +} diff --git a/_maps/shuttles/independent/independent_raleigh.dmm b/_maps/shuttles/independent/independent_raleigh.dmm new file mode 100644 index 000000000000..a6bff35f8dc7 --- /dev/null +++ b/_maps/shuttles/independent/independent_raleigh.dmm @@ -0,0 +1,6334 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"af" = ( +/obj/effect/turf_decal/industrial/stand_clear{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/button/door{ + pixel_y = -22; + pixel_x = -6; + name = "bay doors"; + id = "ra_cargo"; + dir = 1 + }, +/obj/machinery/button/shieldwallgen{ + pixel_x = 3; + pixel_y = -20; + id = "ra_door"; + dir = 1 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/cargo) +"aq" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/steeldecal/steel_decals_central7, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"at" = ( +/obj/machinery/autolathe, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/structure/sign/poster/contraband/hacking_guide{ + pixel_x = -28 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/electrical) +"av" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/structure/tank_dispenser/oxygen, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"aB" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/effect/turf_decal/steeldecal/steel_decals_central2, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"aQ" = ( +/obj/effect/turf_decal/corner/opaque/yellow/diagonal, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"aU" = ( +/obj/effect/turf_decal/corner/opaque/red/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"be" = ( +/obj/machinery/holopad/secure, +/turf/open/floor/carpet/blue, +/area/ship/bridge) +"bm" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/carpet/green, +/area/ship/crew/dorm) +"bo" = ( +/obj/structure/chair/stool/bar{ + dir = 8; + pixel_x = -10 + }, +/obj/item/radio/intercom/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"bz" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/machinery/door/window/eastleft{ + dir = 1; + req_access_txt = "3" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"bA" = ( +/obj/structure/table/wood, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/carpet/green, +/area/ship/crew/dorm) +"bF" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters{ + id = "ra_arms"; + dir = 2 + }, +/turf/open/floor/plating, +/area/ship/security/armory) +"bG" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light/dim/directional/north, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"bP" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/security/armory) +"cb" = ( +/obj/effect/turf_decal/corner/opaque/yellow/diagonal, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/reagent_containers/condiment/hotsauce{ + pixel_y = 7 + }, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"ci" = ( +/obj/structure/sign/number/random{ + dir = 4 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/cargo) +"cn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/button/door{ + pixel_x = -10; + pixel_y = -22; + dir = 1; + name = "privacy lock"; + id = "ra_gay"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/turf/open/floor/carpet/green, +/area/ship/crew/dorm) +"cu" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/airlock/engineering{ + name = "Port Thrusters" + }, +/obj/structure/catwalk/over, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, +/area/ship/engineering/engines/port) +"cv" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/engineering/engines/starboard) +"cC" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 4 + }, +/obj/structure/sign/warning/electricshock{ + pixel_x = -8; + pixel_y = 24 + }, +/obj/machinery/button/door{ + dir = 2; + pixel_y = 22; + pixel_x = 5; + id = "ra_peng"; + name = "engine shutters" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"cG" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/electrical) +"cO" = ( +/obj/item/soap, +/obj/structure/closet/wall/directional/east, +/obj/item/towel, +/obj/item/towel, +/obj/item/towel, +/obj/item/towel, +/obj/item/storage/cans/sixbeer, +/obj/structure/sign/poster/official/no_erp{ + pixel_y = 30 + }, +/obj/effect/turf_decal/spline/fancy/opaque/grey, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/dorm) +"di" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/cryo) +"dn" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/structure/cable/yellow, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"dB" = ( +/obj/effect/turf_decal/corner/opaque/red/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"dD" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light_switch{ + pixel_x = -10; + pixel_y = 22 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"dL" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/structure/closet/wall/orange/directional/north{ + name = "fuel supply" + }, +/obj/item/stack/sheet/mineral/plasma/twenty, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/electrical) +"ec" = ( +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "ra_fore" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/ccommons) +"ef" = ( +/obj/effect/turf_decal/corner/opaque/yellow/diagonal, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"ej" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/security) +"em" = ( +/obj/effect/turf_decal/corner/opaque/yellow/diagonal, +/obj/structure/closet/crate/bin, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"ev" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/catwalk/over, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"eI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"eR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/item/mop, +/obj/item/reagent_containers/glass/bucket, +/obj/item/pushbroom, +/obj/item/reagent_containers/glass/rag, +/obj/structure/closet/wall/directional/south, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"fo" = ( +/obj/structure/chair/office, +/turf/open/floor/carpet/blue, +/area/ship/bridge) +"fx" = ( +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 1 + }, +/obj/effect/turf_decal/corner_techfloor_gray{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering/electrical) +"fE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/structure/table, +/obj/machinery/light/directional/north, +/obj/item/storage/crayons{ + pixel_y = 6; + pixel_x = -4 + }, +/obj/item/taperecorder{ + pixel_x = 10; + pixel_y = 5 + }, +/obj/item/tape/random, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/ccommons) +"fM" = ( +/turf/open/floor/plasteel/grimy, +/area/ship/security/armory) +"fN" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/security{ + dir = 4; + name = "XO's Quarters"; + id_tag = "ra_lt"; + req_access_txt = "3" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"go" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/electrical) +"gq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"gC" = ( +/turf/open/floor/plasteel/grimy, +/area/ship/crew/ccommons) +"gJ" = ( +/obj/structure/catwalk/over, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/steeldecal/steel_decals9{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"gL" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/cryo) +"gN" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"hb" = ( +/turf/open/floor/carpet/green, +/area/ship/crew/dorm) +"hk" = ( +/obj/effect/turf_decal/corner/opaque/brown/border{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"hl" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/ccommons) +"hm" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/ale{ + pixel_y = 7; + pixel_x = 8 + }, +/obj/item/reagent_containers/food/drinks/ale{ + pixel_x = -7; + pixel_y = -5 + }, +/obj/machinery/newscaster/directional/north, +/obj/item/reagent_containers/condiment/hotsauce{ + pixel_y = 7 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"hr" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/ccommons) +"hs" = ( +/obj/structure/table, +/obj/machinery/jukebox/boombox, +/turf/open/floor/carpet, +/area/ship/crew/ccommons) +"hw" = ( +/obj/structure/table, +/obj/item/storage/box/cups{ + pixel_x = -1; + pixel_y = 7 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"hz" = ( +/obj/machinery/door/airlock/atmos{ + dir = 4; + name = "Atmospherics" + }, +/obj/machinery/atmospherics/pipe/simple/supply/visible/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"hI" = ( +/obj/item/storage/box/zipties, +/obj/structure/chair/handrail{ + dir = 1 + }, +/obj/structure/closet/wall/red/directional/west{ + name = "specialist tools"; + req_access_txt = "3" + }, +/obj/item/razor{ + name = "uniform compliance tool" + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"hN" = ( +/obj/machinery/light/floor, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"hU" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/crew/canteen) +"ic" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/security/armory) +"ie" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"ig" = ( +/obj/structure/table/wood, +/obj/machinery/light/small/directional/north, +/obj/machinery/button/door{ + pixel_y = 23; + pixel_x = 9; + name = "window shutters"; + id = "ra_capt" + }, +/obj/item/modular_computer/laptop/preset/civilian, +/turf/open/floor/carpet/royalblue, +/area/ship/crew/dorm/captain) +"iq" = ( +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 9 + }, +/obj/item/kirbyplants{ + icon_state = "plant-09"; + pixel_y = 14; + pixel_x = -5 + }, +/turf/open/floor/plasteel/mono, +/area/ship/cargo) +"is" = ( +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 1 + }, +/obj/effect/turf_decal/corner_techfloor_gray{ + dir = 10 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/light_switch{ + pixel_y = 22; + pixel_x = -12 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering/electrical) +"iu" = ( +/obj/effect/turf_decal/corner/opaque/orange/border{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"iw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"iD" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/cargo) +"iE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/visible/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 4 + }, +/obj/machinery/button/door{ + pixel_y = 22; + pixel_x = -6; + name = "window shutter"; + id = "ra_at" + }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"iL" = ( +/obj/structure/closet/secure_closet/wall/directional/south{ + icon_state = "solgov_wall"; + name = "Captain's Locker"; + req_access_txt = "20" + }, +/obj/item/ammo_box/a357, +/obj/item/ammo_box/a357, +/obj/item/clothing/under/rank/command/captain, +/obj/item/clothing/head/caphat, +/obj/item/clothing/under/syndicate/camo{ + pixel_x = 6; + pixel_y = -6 + }, +/obj/item/clothing/suit/armor/hos/trenchcoat, +/obj/item/clothing/glasses/hud/security{ + pixel_y = 10; + pixel_x = -4 + }, +/obj/item/melee/knife/switchblade, +/obj/item/storage/backpack/security, +/obj/item/clothing/shoes/combat, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/item/clothing/gloves/fingerless, +/obj/item/reagent_containers/food/drinks/flask, +/obj/item/clothing/glasses/sunglasses/ballistic, +/obj/item/storage/guncase/pistol/viper, +/turf/open/floor/wood, +/area/ship/crew/dorm/captain) +"iN" = ( +/obj/effect/turf_decal/corner/opaque/blue/border, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"iY" = ( +/obj/structure/table, +/obj/effect/turf_decal/corner/opaque/yellow/mono, +/obj/structure/closet/wall/white/directional/east, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration{ + pixel_y = 1 + }, +/obj/item/storage/cans/sixbeer, +/obj/item/storage/cans/sixbeer, +/obj/effect/decal/cleanable/food/flour, +/obj/effect/spawner/lootdrop/ration{ + pixel_y = 1 + }, +/turf/open/floor/plasteel/mono/white, +/area/ship/crew/canteen) +"jc" = ( +/obj/structure/chair/sofa/brown/right/directional/south, +/obj/machinery/button/door{ + pixel_x = -22; + pixel_y = 8; + dir = 4; + name = "window shutters"; + id = "ra_obvs" + }, +/turf/open/floor/carpet/green, +/area/ship/crew/dorm) +"je" = ( +/obj/structure/cable{ + icon_state = "5-9" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"jf" = ( +/obj/structure/crate_shelf, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"jj" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/ccommons) +"jt" = ( +/obj/structure/table/reinforced, +/obj/machinery/fax/indie, +/obj/item/storage/box/matches{ + pixel_y = 23; + pixel_x = 1 + }, +/obj/item/radio/intercom/directional/south{ + pixel_x = -2 + }, +/turf/open/floor/carpet/blue, +/area/ship/bridge) +"jv" = ( +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/structure/reagent_dispensers/watertank, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"jx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"jB" = ( +/obj/machinery/washing_machine, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 1 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/dorm) +"jC" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"jE" = ( +/obj/machinery/light/floor, +/turf/open/floor/engine/hull, +/area/ship/external/dark) +"jF" = ( +/obj/effect/turf_decal/corner/opaque/yellow/diagonal, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"jJ" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "ra_bridge" + }, +/turf/open/floor/plating, +/area/ship/bridge) +"kb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/structure/sign/warning/electricshock{ + pixel_x = -24; + pixel_y = 10 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/light/small/directional/west{ + pixel_y = -2 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light_switch{ + pixel_y = -18; + pixel_x = 10; + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engines/port) +"kc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/ccommons) +"kl" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/engineering/atmospherics) +"kI" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/engineering/electrical) +"kJ" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/beer{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/reagent_containers/food/snacks/chocolatebar{ + pixel_y = 11; + pixel_x = 8 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"kO" = ( +/obj/structure/sign/warning/securearea{ + pixel_x = -24; + pixel_y = -8 + }, +/obj/effect/turf_decal/corner/opaque/red/border, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"lb" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/stairs/old{ + dir = 8 + }, +/area/ship/crew/dorm) +"ls" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet, +/area/ship/crew/ccommons) +"lv" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/cryo) +"lC" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"lF" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/airlock/mining{ + dir = 4; + name = "Cargo Bay" + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"lM" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over, +/obj/structure/sign/warning/nosmoking{ + pixel_x = 26 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"lN" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/dorm/captain) +"lO" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"md" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 4 + }, +/obj/structure/sign/warning/electricshock{ + pixel_x = -8; + pixel_y = -22 + }, +/obj/machinery/button/door{ + dir = 1; + pixel_y = -22; + pixel_x = 5; + id = "ra_seng"; + name = "engine shutters" + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"mh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/ccommons) +"mm" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock{ + name = "Observatory"; + id_tag = "ra_gay" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, +/area/ship/crew/dorm) +"mq" = ( +/obj/docking_port/stationary{ + dwidth = 3; + width = 7; + height = 15; + dir = 8 + }, +/turf/template_noop, +/area/template_noop) +"ms" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/ccommons) +"my" = ( +/obj/structure/bed, +/obj/item/bedsheet/random, +/obj/structure/curtain/bounty, +/obj/item/toy/plush/flushed, +/turf/open/floor/carpet/green, +/area/ship/crew/dorm) +"mA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"mE" = ( +/obj/structure/bed, +/obj/item/bedsheet/random, +/obj/structure/curtain/bounty, +/obj/item/toy/plush/carpplushie, +/turf/open/floor/carpet/green, +/area/ship/crew/dorm) +"mV" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"mX" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock, +/turf/open/floor/plasteel/dark, +/area/ship/crew/ccommons) +"nc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"ng" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/port_gen/pacman, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/electrical) +"nn" = ( +/obj/machinery/atmospherics/components/binary/pressure_valve{ + pixel_y = 0; + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pressure_valve/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 6 + }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"nt" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/airlock{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/cryo) +"nP" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table/wood, +/obj/item/folder/blue{ + pixel_x = 7; + pixel_y = 5 + }, +/obj/item/paper_bin{ + pixel_y = 1; + pixel_x = -6 + }, +/obj/item/pen/fourcolor{ + pixel_y = 5; + pixel_x = -7 + }, +/obj/item/storage/pill_bottle/stimulant{ + pixel_y = 13; + pixel_x = -2 + }, +/obj/machinery/airalarm/directional/south, +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood, +/area/ship/security) +"nT" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 10 + }, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/corner/opaque/brown/border, +/turf/open/floor/plasteel/mono, +/area/ship/cargo) +"nV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/visible{ + dir = 6 + }, +/obj/machinery/light/dim/directional/west, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"nX" = ( +/obj/structure/table/reinforced, +/obj/structure/closet/wall/red/directional/north{ + name = "uniform closet"; + req_access_txt = "1" + }, +/obj/item/clothing/shoes/combat{ + pixel_y = -7; + pixel_x = -2 + }, +/obj/item/clothing/shoes/combat{ + pixel_y = -7; + pixel_x = -2 + }, +/obj/item/clothing/shoes/combat{ + pixel_y = -7; + pixel_x = -2 + }, +/obj/item/clothing/under/syndicate/camo{ + pixel_x = 5 + }, +/obj/item/clothing/under/syndicate/camo{ + pixel_x = 5 + }, +/obj/item/clothing/under/syndicate/camo{ + pixel_x = 5 + }, +/obj/item/clothing/head/helmet/bulletproof/m10{ + pixel_y = 11; + pixel_x = -4 + }, +/obj/item/clothing/head/helmet/bulletproof/m10{ + pixel_y = 11; + pixel_x = -4 + }, +/obj/item/clothing/head/helmet/bulletproof/m10{ + pixel_y = 11; + pixel_x = -4 + }, +/obj/item/clothing/suit/armor/vest/bulletproof{ + pixel_y = 2; + pixel_x = -4 + }, +/obj/item/clothing/suit/armor/vest/bulletproof{ + pixel_y = 2; + pixel_x = -4 + }, +/obj/item/clothing/suit/armor/vest/bulletproof{ + pixel_y = 2; + pixel_x = -4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 6 + }, +/obj/item/clothing/gloves/fingerless, +/obj/item/clothing/gloves/fingerless, +/obj/item/clothing/gloves/fingerless, +/obj/item/clothing/glasses/sunglasses/ballistic{ + pixel_y = 5; + pixel_x = -3 + }, +/obj/item/clothing/glasses/sunglasses/ballistic{ + pixel_y = 5; + pixel_x = -3 + }, +/obj/item/clothing/glasses/sunglasses/ballistic{ + pixel_y = 5; + pixel_x = -3 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"op" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 8 + }, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + name = "Window Shutters"; + id = "ra_at" + }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"oz" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/door/poddoor{ + id = "ra_cargo"; + dir = 4 + }, +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + id = "ra_door" + }, +/turf/open/floor/engine/hull/interior, +/area/ship/cargo) +"oJ" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/crew/ccommons) +"oP" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/structure/rack, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 4 + }, +/obj/item/storage/toolbox/electrical{ + pixel_y = -4 + }, +/obj/item/multitool{ + pixel_x = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/electrical) +"pf" = ( +/obj/structure/curtain, +/obj/machinery/shower{ + pixel_y = 16 + }, +/obj/structure/chair/plastic{ + dir = 4; + name = "shower chair"; + desc = "Now you just need a shower beer" + }, +/obj/structure/mirror{ + pixel_x = -24 + }, +/obj/effect/turf_decal/spline/fancy/opaque/grey, +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/steeldecal/steel_decals9, +/obj/effect/turf_decal/steeldecal/steel_decals9{ + dir = 4 + }, +/obj/machinery/button/door{ + pixel_x = 9; + pixel_y = -22; + dir = 1; + name = "privacy lock"; + id = "ra_shower"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/dorm) +"pk" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/item/radio/intercom/directional/west, +/obj/effect/decal/cleanable/plastic, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"pn" = ( +/obj/item/radio/intercom/wideband/directional/north, +/obj/effect/turf_decal/corner/opaque/blue/border{ + dir = 5 + }, +/obj/machinery/button/door{ + pixel_y = 20; + pixel_x = 16; + name = "bridge shutters"; + id = "ra_bridge_ext" + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"pt" = ( +/obj/machinery/photocopier, +/turf/open/floor/carpet/blue, +/area/ship/bridge) +"pM" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/electrical) +"pS" = ( +/obj/structure/chair/sofa/brown/directional/east, +/obj/machinery/light/directional/west, +/turf/open/floor/carpet, +/area/ship/crew/ccommons) +"ql" = ( +/obj/machinery/computer/cargo{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"qn" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/steeldecal/steel_decals_central2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"qy" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/cargo) +"qL" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"qP" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engines/starboard) +"qT" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "ra_bridge_ext" + }, +/turf/open/floor/plating, +/area/ship/bridge) +"rd" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/ccommons) +"rl" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/structure/curtain/cloth/fancy, +/obj/machinery/light/small/directional/south, +/obj/item/bedsheet/black{ + dir = 4 + }, +/turf/open/floor/carpet/red_gold, +/area/ship/security) +"rn" = ( +/obj/machinery/power/shuttle/engine/electric, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/engine/hull, +/area/ship/engineering/engines/starboard) +"rA" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/corner/opaque/red/border{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ship/cargo) +"rV" = ( +/obj/effect/turf_decal/corner/opaque/blue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/item/radio/intercom/directional/north{ + pixel_x = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"rY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/visible/layer2{ + dir = 4 + }, +/obj/machinery/meter/atmos/layer4, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"sa" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/engineering/engines/port) +"se" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/catwalk/over, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"sf" = ( +/obj/effect/turf_decal/corner/opaque/lightgrey/bordercorner{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/light_switch{ + pixel_x = -10; + pixel_y = -20; + dir = 1 + }, +/obj/effect/decal/cleanable/generic, +/obj/item/kirbyplants{ + icon_state = "plant-05"; + pixel_x = 7 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"sm" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"sq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/visible/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"sH" = ( +/obj/machinery/power/smes/shuttle/precharged, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters{ + id = "ra_peng"; + dir = 4 + }, +/turf/open/floor/engine/hull/interior, +/area/ship/engineering/engines/port) +"sI" = ( +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 1 + }, +/obj/effect/turf_decal/corner_techfloor_gray{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering/electrical) +"sR" = ( +/obj/structure/filingcabinet/double{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/item/camera{ + pixel_y = 4; + pixel_x = -2 + }, +/obj/structure/cabinet/oneshot{ + dir = 1; + pixel_y = -22 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"sS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/structure/chair/comfy/red/old/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/security) +"sV" = ( +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 8; + layer = 2.040 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/mono, +/area/ship/cargo) +"tg" = ( +/obj/machinery/vending/cola/random, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/hallway/central) +"th" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"tk" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/hallway/central) +"tS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/button/door{ + pixel_x = 10; + pixel_y = 22; + dir = 2; + name = "privacy lock"; + id = "ra_lt"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/turf/open/floor/wood, +/area/ship/security) +"tU" = ( +/obj/item/clothing/head/papersack/smiley, +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 8 + }, +/obj/structure/rack, +/obj/item/wrench{ + pixel_x = 6; + pixel_y = 3 + }, +/obj/machinery/firealarm/directional/south, +/obj/item/toy/eightball{ + name = "problem prioritizer"; + pixel_x = -3; + pixel_y = -5 + }, +/obj/item/storage/fancy/cigarettes/cigpack_cannabis{ + pixel_x = -5; + pixel_y = 2 + }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"tZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/brown/border{ + dir = 4 + }, +/turf/open/floor/plasteel/mono, +/area/ship/cargo) +"ug" = ( +/obj/effect/turf_decal/corner/opaque/blue/border{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/steeldecal/steel_decals_central7, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"uv" = ( +/obj/structure/table, +/obj/item/reagent_containers/glass/rag{ + pixel_y = 10; + pixel_x = 1 + }, +/obj/item/reagent_containers/food/drinks/beer{ + pixel_x = 9 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"uw" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/airlock/command{ + dir = 4; + name = "Bridge"; + req_access_txt = "19" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"uy" = ( +/obj/machinery/door/poddoor{ + id = "ra_cargo"; + dir = 4 + }, +/turf/open/floor/engine/hull/interior, +/area/ship/cargo) +"uS" = ( +/obj/structure/guncloset{ + anchored = 1 + }, +/obj/item/gun/ballistic/automatic/smg/cobra/indie/no_mag, +/obj/item/gun/ballistic/automatic/assault/e40, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"uU" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/item/storage/box/flares, +/obj/item/storage/box/flares, +/obj/item/storage/box/flares, +/obj/item/storage/box/flares, +/obj/item/storage/box/flares, +/obj/item/storage/box/flares, +/obj/structure/closet/crate{ + name = "Dr. Flare's Magnificent Lighting Solution" + }, +/obj/item/storage/box/sparklers, +/obj/structure/chair/handrail, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"uW" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/dorm) +"vr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/light_switch{ + pixel_x = 10; + pixel_y = -22; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"vw" = ( +/obj/structure/chair/stool/bar{ + dir = 8; + pixel_x = -10 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"vy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners, +/obj/structure/chair/handrail{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"wb" = ( +/obj/effect/turf_decal/corner/opaque/blue/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"wc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"ws" = ( +/obj/structure/curtain/bounty, +/obj/structure/bed, +/obj/item/bedsheet/random, +/turf/open/floor/carpet/green, +/area/ship/crew/dorm) +"wS" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/button/door{ + dir = 8; + pixel_x = 22; + pixel_y = 9; + id = "ra_fore"; + name = "fore airlock shutters" + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/ccommons) +"wX" = ( +/obj/structure/table/wood, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/item/newspaper{ + pixel_y = 7; + pixel_x = -2 + }, +/obj/item/reagent_containers/food/drinks/mug/tea{ + pixel_y = -1; + pixel_x = -6 + }, +/obj/item/desk_flag/trans{ + pixel_x = 8; + pixel_y = -1 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"xb" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/machinery/door/window/eastright{ + dir = 1; + req_access_txt = "3" + }, +/obj/item/folder/blue{ + pixel_x = 4; + pixel_y = 2 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"xk" = ( +/obj/structure/rack, +/obj/item/melee/sword/mass, +/obj/item/melee/sword/mass{ + pixel_x = 5 + }, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"xx" = ( +/obj/structure/chair/sofa/brown/left/directional/south, +/turf/open/floor/carpet/green, +/area/ship/crew/dorm) +"xy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = -11 + }, +/obj/machinery/button/door{ + pixel_x = -20; + pixel_y = 15; + dir = 4; + name = "privacy lock"; + id = "ra_capt2"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/turf/open/floor/wood, +/area/ship/crew/dorm/captain) +"xB" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/under/utility/skirt, +/obj/item/clothing/under/utility{ + pixel_x = 7 + }, +/obj/item/clothing/under/pants/khaki{ + pixel_x = 4; + pixel_y = -14 + }, +/obj/item/clothing/under/pants/khaki{ + pixel_x = 4; + pixel_y = -14 + }, +/obj/item/clothing/under/pants/camo{ + pixel_x = -5; + pixel_y = -10 + }, +/obj/item/clothing/under/pants/camo{ + pixel_x = -5; + pixel_y = -10 + }, +/obj/item/clothing/head/soft/black{ + pixel_x = 8; + pixel_y = 14 + }, +/obj/item/clothing/head/soft/black{ + pixel_x = 8; + pixel_y = 14 + }, +/obj/item/clothing/head/cowboy{ + pixel_y = 5; + pixel_x = -3 + }, +/obj/item/clothing/head/cowboy{ + pixel_y = 5; + pixel_x = -3 + }, +/obj/item/clothing/shoes/workboots/mining{ + pixel_x = 7; + pixel_y = -8 + }, +/obj/item/clothing/shoes/workboots/mining{ + pixel_x = 7; + pixel_y = -8 + }, +/obj/item/clothing/shoes/workboots/mining{ + pixel_x = 7; + pixel_y = -8 + }, +/obj/item/clothing/under/pants/jeans{ + pixel_x = -6; + pixel_y = -8 + }, +/obj/item/clothing/under/pants/jeans{ + pixel_x = -6; + pixel_y = -8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/carpet/green, +/area/ship/crew/dorm) +"xD" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"yj" = ( +/obj/effect/turf_decal/corner/opaque/blue/border{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"yk" = ( +/obj/effect/turf_decal/corner/opaque/blue/bordercorner, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"yF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/item/radio/intercom/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/security) +"yR" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/effect/turf_decal/steeldecal/steel_decals_central2, +/obj/structure/sign/poster/contraband/cardinal_port_starboard{ + pixel_x = -27 + }, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"yT" = ( +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck, +/obj/item/storage/pill_bottle/dice{ + pixel_x = 5; + pixel_y = 6 + }, +/obj/item/storage/fancy/cigarettes/cigpack_robust{ + pixel_y = 5; + pixel_x = -3 + }, +/obj/item/spacecash/bundle/pocketchange, +/turf/open/floor/carpet, +/area/ship/crew/ccommons) +"yZ" = ( +/obj/docking_port/mobile{ + dir = 4; + name = "hunter shuttle"; + port_direction = 2; + preferred_direction = 4 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/atmospherics) +"zV" = ( +/obj/machinery/firealarm/directional/south, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/cargo) +"Ae" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/structure/closet/crate, +/obj/item/target, +/obj/item/target, +/obj/item/target, +/obj/item/target, +/obj/item/target, +/obj/item/target, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/cargo) +"Aj" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/bridge) +"Ap" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/ccommons) +"Aw" = ( +/obj/machinery/modular_computer/console/preset/command{ + dir = 8 + }, +/obj/item/radio/intercom/directional/east{ + pixel_y = 5 + }, +/obj/machinery/button/door{ + dir = 8; + pixel_x = 22; + pixel_y = -11; + name = "window shutters"; + id = "ra_arms" + }, +/turf/open/floor/plasteel/grimy, +/area/ship/security/armory) +"AC" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/mono, +/area/ship/cargo) +"AD" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/cryo) +"AF" = ( +/obj/machinery/airalarm/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/cargo) +"AM" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/catwalk/over, +/obj/machinery/door/airlock/engineering{ + name = "Engineering" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/dark, +/area/ship/engineering/electrical) +"AQ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"AS" = ( +/obj/structure/chair/stool/bar{ + dir = 8; + pixel_x = -10 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"AU" = ( +/obj/effect/turf_decal/corner/opaque/lightgrey/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"AX" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over, +/obj/structure/sign/warning/nosmoking{ + pixel_x = 26 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"By" = ( +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"BE" = ( +/obj/machinery/firealarm/directional/north, +/obj/structure/table, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/ccommons) +"BF" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters{ + id = "ra_obvs"; + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/crew/dorm) +"BH" = ( +/turf/open/floor/engine/hull, +/area/ship/external/dark) +"Ch" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 4 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"Cl" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/atmospherics) +"CG" = ( +/obj/effect/turf_decal/corner/opaque/yellow/diagonal, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"CN" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable{ + icon_state = "0-10" + }, +/obj/structure/sign/poster/contraband/missing_gloves{ + pixel_y = 30 + }, +/obj/structure/catwalk/over, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/electrical) +"CO" = ( +/obj/structure/closet/crate/bin, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 10 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/ccommons) +"CY" = ( +/obj/structure/sign/poster/official/wtf_is_co2{ + pixel_y = 30 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/suit_storage_unit/inherit/industrial, +/obj/item/clothing/suit/space/engineer, +/obj/item/clothing/head/helmet/space/light/engineer, +/obj/item/tank/internals/oxygen, +/obj/effect/turf_decal/box, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"Dd" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/electrical) +"Dg" = ( +/obj/effect/turf_decal/corner/opaque/yellow/diagonal, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"Dw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/machinery/light/floor, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"Dy" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = 5; + pixel_y = 2 + }, +/obj/item/pen{ + pixel_y = 3; + pixel_x = 5 + }, +/obj/machinery/light/directional/east, +/obj/item/toy/cards/deck{ + pixel_x = -10; + pixel_y = 6 + }, +/obj/item/desk_flag{ + pixel_y = 13; + pixel_x = 13 + }, +/turf/open/floor/carpet, +/area/ship/crew/ccommons) +"DH" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/cargo) +"DL" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/mono, +/area/ship/cargo) +"DO" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 5 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/cargo) +"DR" = ( +/obj/structure/chair/stool/bar{ + dir = 4; + pixel_x = 10 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"Ej" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Em" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/stairs/old, +/area/ship/cargo) +"Eo" = ( +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"Eq" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/electrical) +"Ew" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf{ + dry = 1; + pixel_x = -10; + pixel_y = 1; + name = "dried mushroom leaves" + }, +/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf{ + dry = 1; + pixel_x = 3; + pixel_y = 8; + name = "dried mushroom leaves" + }, +/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf{ + dry = 1; + pixel_x = -7; + pixel_y = 8; + name = "dried mushroom leaves" + }, +/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf{ + dry = 1; + pixel_x = -2; + pixel_y = 1; + name = "dried mushroom leaves" + }, +/obj/item/clothing/mask/cigarette/pipe{ + pixel_x = 5 + }, +/turf/open/floor/carpet/blue, +/area/ship/bridge) +"EE" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/catwalk/over, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"EQ" = ( +/obj/machinery/door/window/survival_pod{ + dir = 1 + }, +/obj/machinery/blackbox_recorder, +/obj/structure/sign/warning/securearea{ + pixel_y = -22 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"EX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"EZ" = ( +/obj/effect/turf_decal/corner/opaque/lightgrey/border{ + dir = 4 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Fr" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "ra_capt" + }, +/turf/open/floor/plating, +/area/ship/crew/dorm/captain) +"Fu" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = -13; + pixel_y = 7 + }, +/obj/structure/mirror{ + pixel_x = -24; + pixel_y = 8 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/button/door{ + pixel_x = 10; + pixel_y = 22; + dir = 2; + name = "privacy lock"; + id = "ra_piss"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/canteen) +"Fv" = ( +/obj/structure/table/wood, +/obj/item/ammo_casing/a357/hp{ + name = ".357 execution round casing"; + desc = "Put it right to their head, and pull the trigger. No witnesses."; + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/ammo_casing/a357/hp{ + name = ".357 execution round casing"; + desc = "Put it right to their head, and pull the trigger. No witnesses."; + pixel_x = 8; + pixel_y = 1 + }, +/obj/item/ammo_casing/a357/hp{ + name = ".357 execution round casing"; + desc = "Put it right to their head, and pull the trigger. No witnesses."; + pixel_x = 11; + pixel_y = 5 + }, +/obj/item/storage/fancy/cigarettes/cigars{ + pixel_y = 14; + pixel_x = -5 + }, +/obj/item/storage/box/matches{ + pixel_y = 10; + pixel_x = -9 + }, +/obj/item/spacecash/bundle/pocketchange{ + pixel_x = -6; + pixel_y = -5 + }, +/turf/open/floor/carpet/royalblue, +/area/ship/crew/dorm/captain) +"FA" = ( +/obj/effect/turf_decal/corner/opaque/yellow/diagonal, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/item/kirbyplants{ + icon_state = "plant-17"; + pixel_x = -7 + }, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"FE" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters{ + id = "ra_obvs" + }, +/turf/open/floor/plating, +/area/ship/crew/dorm) +"FH" = ( +/obj/effect/turf_decal/corner/opaque/blue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/closet/secure_closet/wall/directional/north{ + icon_state = "solgov_wall"; + name = "bridge locker"; + req_access_txt = "19" + }, +/obj/item/gps{ + pixel_y = 8; + pixel_x = 2 + }, +/obj/item/binoculars, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"FJ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood, +/area/ship/crew/dorm/captain) +"FK" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/crew/cryo) +"FM" = ( +/obj/effect/turf_decal/corner/opaque/orange/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"FO" = ( +/obj/item/melee/knife/switchblade, +/obj/structure/closet/cabinet, +/obj/item/clothing/under/syndicate/camo{ + pixel_x = 6; + pixel_y = -6 + }, +/obj/item/clothing/glasses/hud/security{ + pixel_y = 10; + pixel_x = -4 + }, +/obj/item/storage/backpack/security, +/obj/item/clothing/suit/armor/vest/duster, +/obj/item/clothing/shoes/combat, +/obj/item/storage/backpack/security, +/obj/item/clothing/gloves/fingerless, +/obj/item/reagent_containers/food/drinks/rilenacup, +/obj/item/clothing/glasses/sunglasses/ballistic, +/turf/open/floor/carpet/red_gold, +/area/ship/security) +"Gm" = ( +/obj/effect/turf_decal/kfp_small, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"Gp" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/canteen) +"Gq" = ( +/obj/effect/turf_decal/corner/opaque/blue/bordercorner{ + dir = 4 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Gt" = ( +/obj/structure/sign/warning/incident{ + pixel_x = 30 + }, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/structure/rack, +/obj/item/stack/sheet/metal/twenty{ + pixel_x = 4; + pixel_y = -1 + }, +/obj/item/stack/sheet/glass/twenty{ + pixel_y = 2; + pixel_x = -3 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/electrical) +"Gu" = ( +/obj/item/kirbyplants{ + icon_state = "plant-18"; + pixel_y = 20; + pixel_x = 8 + }, +/obj/effect/turf_decal/corner/opaque/lightgrey/border{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/lightgrey/bordercorner{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north{ + pixel_x = 3 + }, +/obj/machinery/light_switch{ + pixel_y = 22; + pixel_x = -10 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Gy" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/airlock/engineering{ + name = "Starboard Thrusters" + }, +/obj/structure/catwalk/over, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, +/area/ship/engineering/engines/starboard) +"GD" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner/opaque/lightgrey/border, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"GH" = ( +/obj/effect/turf_decal/corner/opaque/blue/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"GI" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/airlock{ + dir = 4; + name = "Bathroom"; + id_tag = "ra_piss" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"GO" = ( +/obj/effect/turf_decal/corner/opaque/orange/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"GP" = ( +/obj/structure/table, +/obj/effect/turf_decal/corner/opaque/yellow/mono, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/plasteel/mono/white, +/area/ship/crew/canteen) +"Hb" = ( +/obj/structure/table, +/obj/structure/bedsheetbin, +/obj/structure/railing{ + dir = 5 + }, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/dorm) +"He" = ( +/obj/structure/closet/wall/orange/directional/north{ + name = "tool closet" + }, +/obj/item/assembly/signaler, +/obj/item/assembly/signaler, +/obj/item/weldingtool/largetank, +/obj/item/gear_pack/anglegrinder, +/obj/item/radio/headset/alt, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"Hu" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/engines/starboard) +"HD" = ( +/obj/effect/turf_decal/corner/opaque/blue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"HI" = ( +/obj/structure/chair/sofa/brown/corner/directional/east, +/obj/structure/sign/painting/library{ + pixel_x = -28 + }, +/turf/open/floor/carpet, +/area/ship/crew/ccommons) +"HS" = ( +/obj/structure/sign/poster/contraband/c20r{ + pixel_x = 30 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner{ + dir = 1 + }, +/obj/item/paper_bin{ + pixel_y = 5; + pixel_x = 4 + }, +/obj/item/pen/fourcolor{ + pixel_y = 5; + pixel_x = 3 + }, +/obj/item/stamp{ + pixel_x = -6; + pixel_y = 9 + }, +/obj/item/stamp/denied{ + pixel_x = -7; + pixel_y = 3 + }, +/obj/item/toy/figure/secofficer{ + pixel_x = 12; + pixel_y = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Ih" = ( +/obj/effect/turf_decal/corner/opaque/yellow/diagonal, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/light_switch{ + pixel_x = 22; + pixel_y = -21; + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"Ii" = ( +/obj/item/clothing/glasses/welding, +/obj/item/clothing/shoes/workboots{ + pixel_x = 5; + pixel_y = -6 + }, +/obj/structure/closet/wall/orange/directional/north{ + name = "Engineer's locker"; + req_access_txt = "11" + }, +/obj/item/clothing/head/hardhat{ + pixel_y = 9 + }, +/obj/item/clothing/under/utility{ + pixel_x = 7 + }, +/obj/item/clothing/suit/hazardvest, +/obj/item/storage/toolbox/electrical, +/obj/item/clothing/gloves/color/yellow{ + pixel_y = 9 + }, +/obj/item/storage/backpack/industrial, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"Il" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/layer4{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/industrial/hatch/yellow, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"In" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel, +/area/ship/cargo) +"Is" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/security{ + dir = 4; + name = "Armory"; + req_access_txt = "1" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"IB" = ( +/obj/structure/railing, +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + pixel_y = 22; + pixel_x = -1; + name = "bay doors"; + id = "ra_cargo"; + dir = 2 + }, +/obj/machinery/button/shieldwallgen{ + pixel_x = 9; + pixel_y = 21; + id = "ra_door"; + dir = 2 + }, +/obj/item/clipboard{ + pixel_x = 8; + pixel_y = -6 + }, +/obj/item/paper_bin{ + pixel_x = -4; + pixel_y = 7 + }, +/obj/item/pen/fourcolor{ + pixel_y = 9; + pixel_x = -5 + }, +/obj/item/reagent_containers/food/drinks/mug/tea{ + pixel_y = 7; + pixel_x = 7 + }, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ship/cargo) +"IT" = ( +/obj/effect/turf_decal/corner/opaque/orange/border{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/traffic{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/visible/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"Ji" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/security/armory) +"Jj" = ( +/obj/structure/chair, +/obj/structure/sign/poster/retro/lasergun_new{ + pixel_x = 31 + }, +/turf/open/floor/carpet, +/area/ship/crew/ccommons) +"JO" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable{ + icon_state = "0-9" + }, +/obj/structure/catwalk/over, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/electrical) +"JS" = ( +/obj/structure/table/wood, +/obj/item/spacecash/bundle/pocketchange{ + pixel_y = 3; + pixel_x = 2 + }, +/turf/open/floor/carpet, +/area/ship/crew/ccommons) +"JV" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"JW" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/carpet/royalblue, +/area/ship/crew/dorm/captain) +"JY" = ( +/obj/structure/table, +/obj/effect/turf_decal/corner/opaque/yellow/mono, +/obj/item/cutting_board{ + anchored = 1 + }, +/obj/item/melee/knife/kitchen, +/obj/item/kitchen/rollingpin{ + pixel_x = 7; + pixel_y = -2 + }, +/turf/open/floor/plasteel/mono/white, +/area/ship/crew/canteen) +"Kh" = ( +/obj/effect/turf_decal/kfp_small/right, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"KK" = ( +/obj/machinery/atmospherics/components/unary/tank/air{ + dir = 1; + initialize_directions = 1 + }, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"KQ" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/crew/dorm/captain) +"KZ" = ( +/obj/machinery/power/shuttle/engine/electric, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/engine/hull, +/area/ship/engineering/engines/port) +"Lr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"LB" = ( +/obj/structure/sign/warning/vacuum{ + pixel_y = -22 + }, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/on/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning/cee, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/crew/ccommons) +"LD" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/dorm) +"LJ" = ( +/obj/effect/turf_decal/corner/opaque/blue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light_switch{ + pixel_y = 22; + pixel_x = -10 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"LM" = ( +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/item/radio/intercom/directional/east, +/obj/machinery/light/small/directional/north{ + pixel_x = 6 + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"LO" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/ccommons) +"LR" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/stand_clear{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/cargo) +"LU" = ( +/obj/machinery/power/smes/shuttle/precharged, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters{ + id = "ra_seng"; + dir = 4 + }, +/turf/open/floor/engine/hull/interior, +/area/ship/engineering/engines/starboard) +"LV" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/door/poddoor{ + id = "ra_cargo"; + dir = 4 + }, +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + id = "ra_door"; + dir = 1 + }, +/turf/open/floor/engine/hull/interior, +/area/ship/cargo) +"LY" = ( +/obj/structure/catwalk/over, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"Md" = ( +/obj/structure/table, +/obj/effect/turf_decal/corner/opaque/yellow/diagonal, +/obj/machinery/newscaster/directional/west, +/obj/machinery/light/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/storage/ration/crayons, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"Me" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/carpet/green, +/area/ship/crew/dorm) +"Mi" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Mj" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/catwalk/over, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering" + }, +/turf/open/floor/plasteel/dark, +/area/ship/engineering/electrical) +"Ml" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/airlock{ + name = "Shower"; + id_tag = "ra_shower" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/dorm) +"Mq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/cryo) +"Mx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/structure/sign/warning/electricshock{ + pixel_x = -24; + pixel_y = -7 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/light/small/directional/west{ + pixel_y = 0 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light_switch{ + pixel_y = 22; + pixel_x = 10 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engines/starboard) +"MA" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engines/port) +"MG" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters{ + id = "ra_arms"; + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/security/armory) +"No" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/ccommons) +"Nr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Nx" = ( +/obj/item/kirbyplants{ + icon_state = "plant-16"; + pixel_x = 8; + pixel_y = 15 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"NC" = ( +/obj/structure/cable{ + icon_state = "6-10" + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/effect/turf_decal/steeldecal/steel_decals_central2, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"NE" = ( +/obj/structure/chair/sofa/brown/right/directional/north, +/turf/open/floor/carpet, +/area/ship/crew/ccommons) +"NF" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/catwalk/over, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"NW" = ( +/obj/effect/turf_decal/corner/opaque/blue/border{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Oa" = ( +/obj/effect/turf_decal/corner/opaque/yellow/diagonal, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_y = 12; + pixel_x = -20 + }, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"Ob" = ( +/obj/effect/turf_decal/corner/opaque/yellow/diagonal, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"Oe" = ( +/obj/item/kirbyplants{ + icon_state = "plant-13"; + pixel_y = 0; + pixel_x = 9 + }, +/obj/effect/turf_decal/corner/opaque/red/bordercorner{ + dir = 4 + }, +/obj/machinery/light_switch{ + dir = 8; + pixel_y = 10; + pixel_x = 20 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"Of" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"Oy" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"OL" = ( +/turf/open/floor/carpet, +/area/ship/crew/ccommons) +"OO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/structure/chair/handrail, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"OQ" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/machinery/suit_storage_unit/inherit/industrial, +/obj/item/clothing/suit/space/hardsuit/security/independent, +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"OV" = ( +/turf/template_noop, +/area/template_noop) +"OX" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"Pa" = ( +/obj/structure/table, +/obj/item/radio{ + pixel_x = -12; + pixel_y = 9 + }, +/obj/item/radio{ + pixel_x = -4; + pixel_y = 9 + }, +/obj/item/radio{ + pixel_x = 3; + pixel_y = 9 + }, +/obj/item/radio{ + pixel_x = 11; + pixel_y = 9 + }, +/obj/item/radio{ + pixel_x = -12; + pixel_y = 2 + }, +/obj/item/radio{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/radio{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/radio{ + pixel_x = 12; + pixel_y = 2 + }, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/corner_techfloor_gray{ + dir = 5 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/cryo) +"Pj" = ( +/obj/effect/turf_decal/corner/opaque/orange/border{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/traffic{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"Pt" = ( +/obj/machinery/computer/helm{ + icon_state = "computer-middle"; + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"PC" = ( +/obj/effect/turf_decal/corner/opaque/yellow/diagonal, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"PD" = ( +/obj/machinery/computer/cargo{ + icon_state = "computer-right"; + dir = 8 + }, +/obj/effect/turf_decal/box/corners, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"PH" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/dorm) +"PM" = ( +/obj/effect/turf_decal/corner/opaque/red/border, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"PN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"PS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"PV" = ( +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/structure/closet/emcloset, +/obj/structure/sign/poster/official/walk{ + pixel_y = 30 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/hallway/central) +"PW" = ( +/obj/structure/toilet{ + dir = 8; + pixel_x = 4 + }, +/obj/structure/curtain, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/canteen) +"PZ" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 5; + pixel_y = 2 + }, +/obj/item/pen/fountain/captain{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/folder/blue{ + pixel_x = -9; + pixel_y = -6 + }, +/obj/item/folder/red{ + pixel_x = -7; + pixel_y = 3 + }, +/obj/item/pen{ + pixel_y = 3; + pixel_x = -5 + }, +/obj/machinery/light/directional/south, +/obj/machinery/button/door{ + dir = 1; + pixel_y = -20; + pixel_x = -19; + id = "ra_bridge"; + name = "privacy shutters" + }, +/turf/open/floor/carpet/blue, +/area/ship/bridge) +"QU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "ra_fore" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/ccommons) +"QZ" = ( +/obj/effect/turf_decal/corner/opaque/blue/border{ + dir = 4 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 4; + name = "Helm" + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Rp" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/ship/crew/ccommons) +"Rq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Rt" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters{ + dir = 2; + id = "ra_bridge_ext" + }, +/turf/open/floor/plating, +/area/ship/bridge) +"Rz" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/crew/dorm) +"RB" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/carpet, +/area/ship/crew/ccommons) +"RD" = ( +/obj/machinery/holopad/emergency/medical, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/ccommons) +"Sb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/cargo) +"Se" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_y = 12; + pixel_x = -20 + }, +/obj/effect/turf_decal/corner_techfloor_gray{ + dir = 5 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/cryo) +"Sj" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table/wood, +/obj/item/storage/fancy/cigarettes/cigars{ + pixel_y = 4; + pixel_x = 2 + }, +/obj/item/storage/box/matches{ + pixel_y = 10; + pixel_x = -9 + }, +/obj/item/spacecash/bundle/pocketchange{ + pixel_y = 10; + pixel_x = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/security) +"Sy" = ( +/obj/effect/turf_decal/corner/opaque/brown/border{ + dir = 4 + }, +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch{ + pixel_y = 23; + pixel_x = 11 + }, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 1 + }, +/turf/open/floor/plasteel/mono, +/area/ship/cargo) +"SJ" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/plasma, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/electrical) +"SL" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/yellow/diagonal, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"SO" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters{ + dir = 2; + id = "ra_capt" + }, +/turf/open/floor/plating, +/area/ship/crew/dorm/captain) +"SQ" = ( +/obj/effect/turf_decal/corner/opaque/blue/border, +/obj/item/kirbyplants{ + icon_state = "plant-21"; + pixel_x = -6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"SS" = ( +/obj/structure/rack, +/obj/item/attachment/bayonet, +/obj/item/attachment/bayonet{ + pixel_x = -5 + }, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/item/screwdriver{ + pixel_x = 6 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"SZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/visible/layer2{ + dir = 4 + }, +/obj/machinery/meter/atmos/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"Te" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/spline/fancy/opaque/grey, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/airalarm/directional/east, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/corner/opaque/brown/border, +/turf/open/floor/plasteel/mono, +/area/ship/cargo) +"Tk" = ( +/obj/structure/table, +/obj/effect/turf_decal/corner/opaque/yellow/mono, +/obj/structure/sink/chem{ + name = "kitchen sink"; + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/mono/white, +/area/ship/crew/canteen) +"Tm" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/steeldecal/steel_decals_central7, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/chair/plastic{ + dir = 2 + }, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 1 + }, +/obj/item/target{ + layer = 3.001 + }, +/turf/open/floor/plasteel, +/area/ship/cargo) +"Tp" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/cargo) +"TB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/machinery/computer/cryopod/directional/south, +/obj/structure/noticeboard{ + dir = 8; + pixel_y = 0; + pixel_x = 25 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/cryo) +"TH" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"TR" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/mug/tea{ + pixel_y = 3; + pixel_x = -6 + }, +/obj/item/storage/lockbox/medal/sec{ + pixel_x = 8; + pixel_y = 15 + }, +/turf/open/floor/carpet/royalblue, +/area/ship/crew/dorm/captain) +"Un" = ( +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners, +/obj/structure/crate_shelf, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"Uq" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/head/cowboy{ + pixel_y = 5; + pixel_x = -3 + }, +/obj/item/clothing/head/soft/black{ + pixel_x = 8; + pixel_y = 14 + }, +/obj/item/clothing/head/beret{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/item/clothing/shoes/cowboy/black{ + pixel_x = -6; + pixel_y = -10 + }, +/obj/item/clothing/shoes/workboots{ + pixel_x = 6; + pixel_y = -6 + }, +/obj/item/clothing/head/flatcap{ + pixel_y = 9; + pixel_x = -4 + }, +/obj/item/clothing/head/beret/puce{ + pixel_y = 12; + pixel_x = -2 + }, +/obj/item/clothing/head/soft/red{ + pixel_x = 3 + }, +/obj/item/clothing/shoes/jackboots{ + pixel_x = 2; + pixel_y = -3 + }, +/obj/item/clothing/shoes/combat{ + pixel_x = -7 + }, +/obj/item/clothing/shoes/cowboy{ + pixel_y = -9; + pixel_x = -6 + }, +/turf/open/floor/carpet/green, +/area/ship/crew/dorm) +"UA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/light_switch{ + pixel_y = -16; + pixel_x = 11; + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"UL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/cargo) +"UM" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/structure/chair/handrail{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"UV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/visible/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ship/engineering/electrical) +"UY" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/airlock/security{ + dir = 4; + name = "Secure Storage"; + req_access_txt = "3" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"Vd" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/port_gen/pacman, +/obj/structure/sign/warning/nosmoking{ + pixel_x = 26 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/electrical) +"Ve" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"Vv" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/airlock{ + dir = 4; + name = "Dormitory" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/dorm) +"Vy" = ( +/obj/structure/chair/comfy/blue/old/directional/east, +/turf/open/floor/carpet/royalblue, +/area/ship/crew/dorm/captain) +"VP" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/light_switch{ + pixel_y = 22; + pixel_x = -10 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/ccommons) +"VR" = ( +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"VV" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/railing/corner, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel, +/area/ship/cargo) +"VX" = ( +/obj/structure/chair/sofa/brown/corner/directional/north, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/carpet, +/area/ship/crew/ccommons) +"Wf" = ( +/obj/effect/turf_decal/kfp_small/left{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"Wm" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/cargo) +"Wn" = ( +/obj/item/toy/plush/moth{ + pixel_y = 9 + }, +/obj/structure/dresser{ + dir = 8 + }, +/turf/open/floor/carpet/green, +/area/ship/crew/dorm) +"Ws" = ( +/obj/machinery/computer/crew{ + dir = 8; + icon_state = "computer-left" + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"Wv" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/electrical) +"WD" = ( +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"WF" = ( +/obj/effect/turf_decal/corner/opaque/red/border{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/sign/poster/contraband/eoehoma{ + pixel_x = -31 + }, +/obj/effect/turf_decal/steeldecal/steel_decals_central7, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"WI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"WJ" = ( +/obj/structure/closet/crate/bin{ + pixel_y = 6 + }, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/item/broken_bottle, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/hallway/central) +"WK" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/engineering/engines/port) +"WU" = ( +/obj/structure/guncloset{ + anchored = 1 + }, +/obj/item/gun/ballistic/automatic/pistol/ringneck/indie/no_mag, +/obj/item/gun/ballistic/automatic/pistol/ringneck/indie/no_mag, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/structure/sign/poster/contraband/bulldog{ + pixel_y = 28 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/tech, +/area/ship/security/armory) +"Xc" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/electrical) +"Xg" = ( +/obj/structure/table/reinforced, +/obj/structure/closet/wall/red/directional/north{ + name = "ammo locker"; + req_access_txt = "1" + }, +/obj/item/ammo_box/magazine/m45_cobra, +/obj/item/ammo_box/magazine/m45_cobra, +/obj/item/ammo_box/magazine/m45_cobra, +/obj/item/ammo_box/magazine/e40, +/obj/item/ammo_box/magazine/e40, +/obj/item/ammo_box/magazine/e40, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/item/stock_parts/cell/gun, +/obj/item/storage/box/ammo/c299, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"Xm" = ( +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/hallway/central) +"Xr" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/light_switch{ + dir = 8; + pixel_y = 11; + pixel_x = 20 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table/wood, +/obj/item/modular_computer/laptop/preset/civilian, +/turf/open/floor/wood, +/area/ship/security) +"Xu" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/hallway/central) +"Xx" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Xy" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/structure/cable/yellow, +/obj/machinery/power/port_gen/pacman, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering/electrical) +"XF" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock{ + name = "Canteen" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/dark, +/area/ship/crew/canteen) +"XG" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/cargo) +"XJ" = ( +/obj/item/radio/intercom/directional/west, +/obj/machinery/advanced_airlock_controller{ + pixel_x = 25 + }, +/obj/effect/turf_decal/industrial/warning/cee{ + dir = 1 + }, +/obj/structure/chair/handrail, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/crew/ccommons) +"XN" = ( +/obj/structure/cable{ + icon_state = "2-6" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/electrical) +"XY" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/structure/curtain/cloth/fancy, +/obj/item/toy/plush/snakeplushie, +/obj/structure/sign/poster/rilena/run{ + pixel_y = 30 + }, +/obj/item/storage/secure/safe{ + dir = 8; + pixel_x = -30 + }, +/obj/item/bedsheet/black{ + dir = 4 + }, +/turf/open/floor/carpet/royalblue, +/area/ship/crew/dorm/captain) +"Yz" = ( +/obj/structure/chair/sofa/brown/left/directional/south, +/turf/open/floor/carpet, +/area/ship/crew/ccommons) +"YB" = ( +/obj/structure/table/reinforced, +/obj/structure/closet/wall/red/directional/north{ + name = "ammo locker"; + req_access_txt = "1" + }, +/obj/item/ammo_box/magazine/m10mm_ringneck, +/obj/item/ammo_box/magazine/m10mm_ringneck, +/obj/item/ammo_box/magazine/m10mm_ringneck, +/obj/item/ammo_box/magazine/m10mm_ringneck, +/obj/item/ammo_box/magazine/m10mm_ringneck, +/obj/item/ammo_box/magazine/m10mm_ringneck, +/obj/machinery/cell_charger{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/item/screwdriver{ + pixel_x = 6 + }, +/obj/item/storage/box/ammo/c10mm, +/obj/item/storage/box/ammo/c10mm, +/turf/open/floor/plasteel/dark, +/area/ship/security/armory) +"YC" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/tech/grid, +/area/ship/crew/cryo) +"YD" = ( +/obj/effect/turf_decal/box/corners, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/structure/closet/crate/medical, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/regular, +/obj/item/reagent_containers/glass/bottle/morphine, +/obj/item/reagent_containers/glass/bottle/morphine, +/obj/item/reagent_containers/glass/bottle/morphine, +/obj/item/reagent_containers/glass/bottle/morphine, +/obj/item/reagent_containers/syringe, +/obj/item/reagent_containers/syringe, +/obj/item/storage/box/gloves, +/obj/structure/chair/handrail, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"YH" = ( +/obj/effect/turf_decal/corner/opaque/orange/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"YI" = ( +/obj/effect/turf_decal/corner/opaque/yellow/diagonal, +/obj/item/kirbyplants{ + icon_state = "plant-14"; + pixel_y = 8; + pixel_x = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) +"YQ" = ( +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) +"YV" = ( +/obj/structure/sign/poster/contraband/gec{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/supply/visible/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"YZ" = ( +/obj/effect/turf_decal/corner/opaque/lightgrey/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Za" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/security) +"Zc" = ( +/obj/structure/closet/cardboard/metal, +/obj/item/storage/box/emptysandbags, +/obj/item/storage/box/emptysandbags, +/obj/item/shovel, +/obj/item/shovel, +/obj/item/pickaxe, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"Zi" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/bridge) +"Zp" = ( +/obj/effect/turf_decal/corner/opaque/brown/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Zu" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/airlock/mining{ + dir = 4; + name = "Cargo Bay" + }, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"Zx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/ccommons) +"Zy" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = -7; + pixel_y = 4 + }, +/obj/item/paper_bin{ + pixel_x = 8; + pixel_y = 7 + }, +/obj/item/pen/fourcolor{ + pixel_x = 7; + pixel_y = 5 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/carpet/green, +/area/ship/crew/dorm) +"ZE" = ( +/obj/structure/closet/crate, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/effect/spawner/lootdrop/maintenance/three, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) +"ZM" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/airlock/command{ + name = "Captain's Quarters"; + id_tag = "ra_capt2"; + req_access_txt = "20" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/dorm/captain) +"ZQ" = ( +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 1 + }, +/obj/effect/turf_decal/corner_techfloor_gray{ + dir = 10 + }, +/obj/machinery/airalarm/directional/north, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/item/clothing/head/cone{ + pixel_x = 6; + pixel_y = 3 + }, +/obj/item/clothing/head/cone{ + pixel_x = 6; + pixel_y = 3 + }, +/obj/item/clothing/head/cone{ + pixel_x = -5; + pixel_y = -8 + }, +/obj/item/clothing/head/cone{ + pixel_x = -5; + pixel_y = -8 + }, +/obj/item/clothing/head/cone{ + pixel_x = 6; + pixel_y = -8 + }, +/obj/item/clothing/head/cone{ + pixel_x = 6; + pixel_y = -8 + }, +/obj/item/clothing/head/cone{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/clothing/head/cone{ + pixel_x = -5; + pixel_y = 3 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering/electrical) +"ZR" = ( +/obj/effect/turf_decal/corner/opaque/yellow/diagonal, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) + +(1,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(2,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(3,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(4,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(5,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(6,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(7,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +ci +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +yZ +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(8,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +XG +OV +ci +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +Cl +OV +Cl +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(9,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +XG +OV +ci +hN +WD +OV +OV +OV +OV +OV +mq +OV +OV +OV +OV +Ch +hN +Cl +OV +Cl +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(10,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +Wm +XG +XG +WD +WD +hN +XG +BH +OV +BH +BH +OV +BH +Cl +Dw +PS +WD +Cl +Cl +kl +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(11,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +Wm +XG +XG +XG +XG +XG +jE +BH +BH +BH +BH +jE +Cl +op +Cl +Cl +Cl +kl +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(12,1,1) = {" +OV +OV +OV +OV +FK +OV +OV +FK +OV +OV +OV +OV +XG +OQ +av +OQ +XG +XG +XG +oz +uy +LV +XG +Cl +iE +nV +KK +Cl +OV +OV +OV +OV +ej +OV +OV +ej +OV +OV +OV +OV +"} +(13,1,1) = {" +OV +OV +OV +OV +AD +AD +AD +AD +OV +OV +OV +OV +XG +Tm +VV +In +Em +rA +LR +DH +iD +af +XG +Wf +rY +nn +Il +Cl +OV +OV +OV +OV +Za +Za +Za +Za +OV +OV +OV +OV +"} +(14,1,1) = {" +OV +OV +FK +AD +AD +di +YC +AD +OV +OV +OV +OV +Wm +XG +IB +iq +sV +nT +Tp +UM +uU +AF +XG +Gm +SZ +tU +Cl +kl +OV +OV +OV +OV +Za +FO +rl +Za +Za +Za +OV +OV +"} +(15,1,1) = {" +OV +OV +WD +AD +Se +lv +gL +AD +OV +OV +OV +OV +OV +Wm +XG +DL +AC +Te +UL +vy +YD +zV +XG +Kh +YV +Cl +kl +OV +OV +OV +OV +OV +Za +yF +sS +Sj +Za +WD +OV +OV +"} +(16,1,1) = {" +OV +OV +WD +AD +Pa +Mq +TB +AD +FK +OV +OV +OV +OV +OV +XG +Sy +tZ +XG +DO +qy +Sb +Ae +XG +CY +UA +Cl +OV +OV +OV +OV +OV +ej +Za +tS +Xr +nP +Za +WD +OV +OV +"} +(17,1,1) = {" +OV +Rz +uW +uW +uW +nt +uW +uW +uW +Rz +OV +OV +OV +sa +XG +lF +Zu +XG +xD +jf +Zc +Un +XG +Cl +hz +Cl +cv +OV +OV +OV +cv +bP +bP +fN +bP +bP +bP +bP +bP +OV +"} +(18,1,1) = {" +OV +WD +uW +pf +uW +dD +mE +jB +PH +uW +KZ +KZ +KZ +WK +PV +hk +Zp +tk +XG +XG +XG +XG +XG +Ii +UV +EQ +Hu +rn +rn +rn +Hu +bP +WF +dB +bP +uS +hI +bP +WD +OV +"} +(19,1,1) = {" +OV +WD +uW +cO +Ml +nc +Uq +Hb +LD +uW +sH +sH +sH +WK +WK +Mi +qL +go +ZQ +yR +pk +at +go +He +sq +Hu +Hu +LU +LU +LU +Hu +YB +wc +Lr +bP +WU +By +bP +WD +OV +"} +(20,1,1) = {" +Rz +uW +uW +uW +uW +bG +ws +Wn +lb +uW +cC +sm +sm +kb +WK +iu +GO +go +sI +qn +TH +Eq +go +Pj +IT +Hu +Mx +jC +Of +md +Hu +Xg +JV +iw +bP +bP +UY +bP +bP +ic +"} +(21,1,1) = {" +OV +FE +jc +Me +mm +mV +th +th +lC +uW +ev +OX +se +lM +cu +gN +Oy +AM +Wv +XN +cG +pM +Mj +gJ +LY +Gy +AX +EE +Ve +NF +Hu +nX +EX +Eo +kO +bz +fM +sR +bP +OV +"} +(22,1,1) = {" +OV +FE +xx +cn +uW +Zy +bm +hb +ie +uW +MA +YQ +jv +WK +WK +YH +FM +go +fx +aB +je +oP +dn +Dd +Xc +Hu +Hu +LM +qP +ZE +Hu +eI +WI +jx +PM +xb +Ji +ql +bF +OV +"} +(23,1,1) = {" +OV +BF +FE +wX +uW +bA +my +xB +vr +uW +Gp +Gp +Gp +Gp +Gp +OO +eR +go +is +NC +lO +Gt +go +dL +SJ +Xy +Hu +Hu +Hu +Hu +Hu +aU +Oe +xk +SS +HS +Aw +bF +MG +OV +"} +(24,1,1) = {" +OV +OV +BF +uW +uW +uW +Gp +Gp +Vv +Gp +Gp +Gp +Fu +PW +Gp +Nx +mA +kI +go +CN +JO +go +go +Vd +ng +go +hl +HI +pS +VX +hl +Is +bP +bP +bP +bP +bP +MG +OV +OV +"} +(25,1,1) = {" +OV +OV +OV +Rz +WD +WD +Gp +Md +ZR +Oa +em +Gp +GI +Gp +Gp +WJ +mA +VR +kI +go +go +go +go +go +go +hl +hs +Yz +yT +NE +OL +kc +CO +hl +WD +WD +ic +OV +OV +OV +"} +(26,1,1) = {" +OV +OV +OV +OV +OV +OV +Gp +SL +PC +Dg +cb +jF +Ob +FA +hU +hU +AU +Xx +Rq +PN +aq +Ej +Nr +GD +mX +Zx +No +mh +mh +mh +Zx +rd +hr +hl +OV +OV +OV +OV +OV +OV +"} +(27,1,1) = {" +OV +OV +OV +OV +OV +OV +hU +Gp +YI +DR +DR +DR +DR +ef +Ih +XF +YZ +AQ +VR +yk +wb +Gq +gq +sf +hl +VP +kc +gC +jj +OL +ls +RB +hl +oJ +OV +OV +OV +OV +OV +OV +"} +(28,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +hU +Gp +hm +hw +uv +kJ +CG +JY +Gp +Gu +EZ +EZ +Aj +uw +jJ +jJ +jJ +hl +fE +ms +gC +RD +OL +JS +Rp +hl +OV +OV +OV +OV +OV +OV +OV +"} +(29,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +hU +vw +bo +AS +vw +aQ +Tk +Gp +Xu +tg +Xm +Aj +LJ +SQ +Ew +jt +hl +BE +Ap +wS +LO +Jj +Dy +Rp +oJ +OV +OV +OV +OV +OV +OV +OV +"} +(30,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +hU +Gp +Gp +Gp +hU +iY +GP +lN +lN +lN +lN +Aj +FH +iN +fo +PZ +Aj +hl +QU +oJ +hl +hl +hl +hl +oJ +OV +OV +OV +OV +OV +OV +OV +"} +(31,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +hU +WD +WD +Gp +Gp +Gp +lN +XY +JW +xy +ZM +HD +iN +be +pt +Aj +XJ +LB +hl +WD +WD +oJ +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(32,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +hU +OV +lN +lN +ig +Vy +iL +Aj +rV +GH +yj +ug +Aj +Aj +ec +oJ +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(33,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +KQ +SO +Fv +TR +FJ +Aj +pn +QZ +NW +NW +Rt +Zi +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(34,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +Fr +Fr +Fr +lN +Aj +Ws +Pt +PD +Rt +qT +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(35,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +lN +qT +qT +qT +qT +qT +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(36,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(37,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(38,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(39,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(40,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} +(41,1,1) = {" +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +OV +"} diff --git a/code/game/objects/structures/cabinet_types.dm b/code/game/objects/structures/cabinet_types.dm index 347e1954ded4..c64356ac4db1 100644 --- a/code/game/objects/structures/cabinet_types.dm +++ b/code/game/objects/structures/cabinet_types.dm @@ -3,8 +3,14 @@ desc = "There is a small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if." icon = 'icons/obj/wallmounts.dmi' icon_state = "fireaxe" - anchored = TRUE - density = FALSE stored_sprite = "axe" allowed_type = /obj/item/melee/axe/fire req_one_access_txt = "24" + +/obj/structure/cabinet/oneshot + name = "\improper rocket launcher cabinet" + desc = "There is a small label that reads \"For Emergency use only\" along with a small drawing of how to operate the launcher." + icon_state = "rpg" + stored_sprite = "launcher" + allowed_type = /obj/item/gun/ballistic/rocketlauncher/oneshot + req_one_access_txt = "3" diff --git a/code/modules/clothing/outfits/factions/independent.dm b/code/modules/clothing/outfits/factions/independent.dm index 30017e9eb545..1fb5b15006ff 100644 --- a/code/modules/clothing/outfits/factions/independent.dm +++ b/code/modules/clothing/outfits/factions/independent.dm @@ -107,6 +107,22 @@ gloves = /obj/item/clothing/gloves/color/white //poverty gloves shoes = /obj/item/clothing/shoes/sneakers/brown +/datum/outfit/job/independent/captain/merc + name = "Independent - Captain (Mercenary)" + + uniform = /obj/item/clothing/under/syndicate + head = /obj/item/clothing/head/beret + gloves = /obj/item/clothing/gloves/combat + shoes = /obj/item/clothing/shoes/combat + suit = /obj/item/clothing/suit/armor/vest + + accessory = null + + backpack = /obj/item/storage/backpack/security + satchel = /obj/item/storage/backpack/satchel/sec + duffelbag = /obj/item/storage/backpack/duffelbag/sec + courierbag = /obj/item/storage/backpack/messenger/sec + /datum/outfit/job/independent/captain/western name = "Independent - Captain (Western)" head = /obj/item/clothing/head/caphat/cowboy @@ -231,6 +247,20 @@ chameleon_extras = list(/obj/item/gun/energy/e_gun/hos, /obj/item/stamp/hos) +/datum/outfit/job/independent/hos/merc + name = "Independent - Mercenary XO" + id_assignment = "Lieutenant" + + ears = /obj/item/radio/headset/headset_com + uniform = /obj/item/clothing/under/syndicate + shoes = /obj/item/clothing/shoes/combat + suit = /obj/item/clothing/suit/armor/vest + alt_suit = null + gloves = /obj/item/clothing/gloves/combat + head = /obj/item/clothing/head/beret + glasses = null + l_pocket = null + // Roboticist /datum/outfit/job/independent/roboticist @@ -282,6 +312,17 @@ shoes = /obj/item/clothing/shoes/jackboots head = /obj/item/clothing/head/cowboy/sec +/datum/outfit/job/independent/security/merc + name = "Independent - Security Officer (Mercenary)" + id_assignment = "Trooper" + + uniform = /obj/item/clothing/under/syndicate/camo + gloves = /obj/item/clothing/gloves/fingerless + head = null + suit = null + dcoat = null + + /datum/outfit/job/independent/security/pirate name = "Independent - Security Officer (Pirate)" diff --git a/icons/obj/wallmounts.dmi b/icons/obj/wallmounts.dmi index 96e0c28e715cdaf252239a34fc3c61bdb71c72c2..236d94fbfb52f0aa628ebcd1d68cbf0b3eda5014 100644 GIT binary patch literal 14767 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 literal 11992 zcma)ibx<6^x9%*u1Y00Lf?EOvcXta376=gBg1c*Ak>HX9cL)iP;O=fgf&_xw;=!H8 z?{Ht$yH&U9_v-zzJF{KeJw2zt@0{8quj{pF`ReUL{4ge7F76L#qz>B_1 zp#^wp^LhKuP1fAi%*EQt&Dzlc0K761N826+bHe(LW<+~(eSZW@vi7J`oDwsn@CcE` zf9am=I~dJ%W9mIxKKV$k-M;R#gJE?YD>jDdLL$gpz%yvbkcWZi-oqX9&FzMQHZr`O zHoHG>n$t3sff_E;RXG!dj_SnJ#@sC!2?-0bTO5}67$WX?`2(n)v3==xzKv#n;1(ldXQ*n7QD{vyMxHYs zWgL!1y9>Gt7nu%j0e~4#YP*91{34#eACW>lD5X8-0N<%15n5)Hb zs?dp3%E9&7@iW(rA@|bMg9h=biz~yahSvGJ+iNM9tTEx*&LbEaLImTg5#??u|C;+U z8;>mLpv>US?F^&DQjfI(X-&3?`&1*l?0sM!Eu6Qr*NB9O-g|iKmzA4`2MQo9Ej{|j zt@k{u!)~$|Vc*CRZ|VMo@@Y)GrUC(RJp47KeXX$mw$;vwQ1FZroupt$D8SxHW*Xc; zg1e!cQ7jxe_Ib>(;W@yYV#~$qmQaG%C9U9nIva8@b8o;*P3%f^-y?(V1t8ZFKl+^_ zNRbuK29bG=tZ(;dQFzgu2AEo#Mz|&qn`PY z9WzE?#W`O~K#g3WeZR(Ve(ax&v|7N~m#?mUjH+QFnex`j%{Wx+swy5@^sZ_sD=kC!t z&USCb<}9qi(Txg)!-Ciyd`q<~a|}y%c>hAbO=>vZ&Q3kgt7gw^-7C>hY(wZ$?f-je2Z=QhXlyF|4<(|oATC6v`8agW)R&|lgriIrh zo8!9p9lr;8c&>BQ3lm`XV814J+V2!e*OSn3e;g-%2W@4)Y#pijHlU)S(izgPh-_T* zZ90Hd%^=(-Tq?JjP~9tYjT|AFnxh`KwA`CFxBr)AhK2qe1@9%i0YQT)2W>+?{gge&BTI^-nb1BYi*}iCba?xddHfvzCU( z!-CBC!02?RiW;!0Nzo_hX9Pn zqkfN~Vev!P%CnoyI=PN{uQzWfzbYJ0H|ISDO=Ptx5 zzyMzbZQ4$3SE~}GiD}doT`E=U(j;>ID1ih-&GHRHOhZ6V(>yi5Xz%8HCOlJ&R6kZ` z8Vg<}e>$=H`eo-dp0iWakV z[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 From 062a15488a99fff52af3a1912aee11975195d4f5 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 23 Oct 2024 19:11:49 -0500 Subject: [PATCH 090/274] Automatic changelog generation for PR #3458 [ci skip] --- html/changelogs/AutoChangeLog-pr-3458.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3458.yml diff --git a/html/changelogs/AutoChangeLog-pr-3458.yml b/html/changelogs/AutoChangeLog-pr-3458.yml new file mode 100644 index 000000000000..b07f4c9600a7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3458.yml @@ -0,0 +1,5 @@ +author: Erikafox +changes: + - {rscadd: Kasagi-Fischer has begun a new production run of the venerable Raleigh-class + Corvette. See your purchaser's manual for more information!} +delete-after: true From 03545533ddad01baa39402d92d93f69d519019a1 Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Erikafox@users.noreply.github.com> Date: Wed, 23 Oct 2024 20:01:02 -0400 Subject: [PATCH 091/274] Trade Post Remake troi (#3367) ## About The Pull Request Remasters the currently removed and unpersoned wasteplanet tradepost map. You have never seen this pr before. ![dreamseeker_aqYq8vThLj](https://github.com/user-attachments/assets/2b3ae689-252a-474a-abe2-bf5a8afbce15) ![StrongDMM-2024-10-17 17 39 28](https://github.com/user-attachments/assets/940321b0-c2b4-4f5c-af96-e093230e679f) ![StrongDMM-2024-10-17 17 40 03](https://github.com/user-attachments/assets/f52f8596-e3b0-4930-bce0-994147f0a1ca) ## Why It's Good For The Game A 'new' ruin of decent quality and some more mapgen options should enrich the experience. ## Changelog :cl: Erika Fox add: An abandoned tradepost has been located in the system. Investigate nearby waste worlds for more information. add: preburnt flares /:cl: --------- Signed-off-by: Erika Fox <94164348+Bjarl@users.noreply.github.com> Signed-off-by: Erika Fox <94164348+Erikafox@users.noreply.github.com> Co-authored-by: Erika Fox <94164348+Bjarl@users.noreply.github.com> --- .../WasteRuins/wasteplanet_tradepost.dmm | 8003 +++++++++++++++++ code/datums/ruins/wasteplanet.dm | 7 + code/game/area/areas/ruins/wasteplanet.dm | 14 + .../game/objects/effects/spawners/lootdrop.dm | 3 + code/game/objects/items/devices/flashlight.dm | 11 +- .../turfs/open/floor/plating/wasteplanet.dm | 72 +- .../mining/equipment/marker_beacons.dm | 6 + .../mob/living/simple_animal/corpse.dm | 32 + .../ruins/wasteplanet_ruin_code/tradepost.dm | 61 + shiptest.dme | 1 + 10 files changed, 8198 insertions(+), 12 deletions(-) create mode 100644 _maps/RandomRuins/WasteRuins/wasteplanet_tradepost.dmm create mode 100644 code/modules/ruins/wasteplanet_ruin_code/tradepost.dm diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_tradepost.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_tradepost.dmm new file mode 100644 index 000000000000..c865138fb568 --- /dev/null +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_tradepost.dmm @@ -0,0 +1,8003 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ag" = ( +/obj/structure/barricade/sandbags, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"aj" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "wtpw1" + }, +/obj/machinery/power/shieldwallgen/atmos{ + id = "tradehouse"; + dir = 1; + anchored = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/warehouse) +"as" = ( +/turf/closed/wall/yesdiag, +/area/ruin/wasteplanet/tradepost/center) +"aB" = ( +/obj/effect/turf_decal/industrial/caution, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"aF" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ + dir = 8 + }, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost/center) +"aI" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/barracks) +"aM" = ( +/mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged/rapid, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"aQ" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2, +/obj/structure/closet/crate/bin, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"aR" = ( +/obj/item/flashlight/flare/burnt, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"aS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 1 + }, +/turf/open/floor/carpet/blue, +/area/ruin/wasteplanet/tradepost/center) +"ba" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/flora/ash/glowshroom, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"bj" = ( +/obj/item/stack/sheet/mineral/sandbags{ + amount = 3 + }, +/obj/effect/turf_decal/industrial/caution{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/mob/living/simple_animal/hostile/hivebot/wasteplanet/strong, +/obj/structure/foamedmetal/iron, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"bm" = ( +/turf/closed/wall/yesdiag, +/area/ruin/wasteplanet/tradepost/barracks) +"br" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/floodlight_frame, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"bz" = ( +/obj/effect/turf_decal/industrial/warning/full, +/obj/machinery/portable_atmospherics/scrubber/huge/movable, +/turf/open/floor/pod/dark, +/area/ruin/wasteplanet/tradepost/warehouse) +"bH" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 1 + }, +/mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 1 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"bJ" = ( +/obj/item/reagent_containers/glass/concrete_bag, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"bM" = ( +/obj/item/stack/sheet/mineral/sandbags, +/obj/structure/door_assembly/door_assembly_com, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"bW" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"bY" = ( +/obj/structure/girder/displaced, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"bZ" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/carpet/black, +/area/ruin/wasteplanet/tradepost/barracks) +"ch" = ( +/obj/effect/turf_decal/industrial/warning/full, +/obj/structure/closet/crate, +/obj/item/stack/sheet/mineral/plasma/five, +/obj/item/stack/sheet/mineral/plasma/five, +/obj/item/stack/sheet/mineral/plasma/five, +/obj/machinery/button/door{ + dir = 4; + pixel_x = -24; + pixel_y = -8; + id = "wtpw1" + }, +/obj/machinery/button/shieldwallgen{ + id = "tradehouse"; + dir = 4; + pixel_y = 2; + pixel_x = -22 + }, +/turf/open/floor/pod/dark, +/area/ruin/wasteplanet/tradepost/warehouse) +"cq" = ( +/obj/machinery/atmospherics/pipe/layer_manifold, +/turf/open/floor/plating, +/area/ruin/wasteplanet/tradepost) +"cs" = ( +/turf/closed/wall/rust/yesdiag, +/area/ruin/wasteplanet/tradepost) +"cC" = ( +/obj/effect/turf_decal/industrial/warning/full, +/turf/open/floor/pod/dark, +/area/ruin/wasteplanet/tradepost/warehouse) +"cD" = ( +/obj/item/cigbutt{ + pixel_y = 6 + }, +/obj/item/cigbutt{ + pixel_y = 4; + pixel_x = -11 + }, +/obj/item/cigbutt{ + pixel_y = -7; + pixel_x = -7 + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"cH" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"cJ" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 9 + }, +/obj/effect/turf_decal/industrial/warning/corner, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"cL" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"cW" = ( +/obj/structure/barricade/sandbags, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"cZ" = ( +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost) +"dd" = ( +/obj/effect/turf_decal/industrial/warning/full, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/pod/dark, +/area/ruin/wasteplanet/tradepost/warehouse) +"do" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"dr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/directional/east, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 9 + }, +/obj/structure/foamedmetal/iron, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"ds" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"dw" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/foamedmetal/iron, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"dB" = ( +/obj/effect/turf_decal/industrial/traffic, +/obj/effect/turf_decal/industrial/stand_clear{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"dD" = ( +/obj/structure/flippedtable, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"dE" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/turf/closed/wall, +/area/ruin/wasteplanet/tradepost) +"dF" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 6 + }, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"dN" = ( +/obj/structure/door_assembly/door_assembly_sec, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/barracks) +"dS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"ed" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/cable, +/obj/structure/grille, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"ef" = ( +/obj/effect/turf_decal/industrial/caution{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"ei" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"em" = ( +/turf/open/floor/plating/asteroid/wasteplanet/lit, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"en" = ( +/turf/closed/wall/rust, +/area/overmap_encounter/planetoid/cave/explored) +"ep" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"eq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 9 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"et" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/paper_bin, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 6 + }, +/mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged/rapid, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/item/trash/plate, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"ew" = ( +/mob/living/simple_animal/hostile/hivebot/wasteplanet/strong, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"ez" = ( +/turf/closed/wall/rust, +/area/ruin/wasteplanet/tradepost/center) +"eF" = ( +/obj/effect/decal/cleanable/oil/streak{ + icon_state = "streak4" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"eH" = ( +/obj/structure/bed/pod, +/obj/machinery/light/small/broken/directional/north, +/obj/structure/curtain/cloth/grey, +/obj/item/bedsheet/brown, +/turf/open/floor/carpet/black, +/area/ruin/wasteplanet/tradepost/barracks) +"eS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 5 + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"fd" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 5 + }, +/obj/item/ammo_casing/spent, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"fe" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/stand_clear{ + dir = 4 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"fr" = ( +/obj/structure/barricade/sandbags, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"fs" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"ft" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"fU" = ( +/turf/closed/wall/rust/yesdiag, +/area/ruin/wasteplanet/tradepost/center) +"fY" = ( +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost/center) +"gf" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"gh" = ( +/turf/closed/wall/rust/yesdiag, +/area/ruin/wasteplanet/tradepost/warehouse) +"gj" = ( +/obj/machinery/door/airlock/mining{ + name = "Warehouse" + }, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/layer_manifold, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/warehouse) +"gl" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 10 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"gw" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"gy" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/wasteplanet/rust/lit, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"gA" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip2" + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"gC" = ( +/obj/structure/bookcase/random, +/turf/open/floor/wood, +/area/ruin/wasteplanet/tradepost/center) +"gI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/spawner/hivebot, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"gP" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/obj/item/paper/crumpled, +/obj/item/trash/plate, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"gZ" = ( +/turf/closed/wall/yesdiag, +/area/ruin/wasteplanet/tradepost/warehouse) +"hg" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/stack/ore/salvage/scrapgold, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"hn" = ( +/obj/effect/turf_decal/industrial/warning/full, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/pod/dark, +/area/ruin/wasteplanet/tradepost/warehouse) +"ho" = ( +/obj/machinery/atmospherics/components/unary/passive_vent, +/obj/effect/turf_decal/techfloor, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"ht" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/barricade/sandbags, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ + dir = 1 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"hD" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/center) +"hE" = ( +/obj/machinery/light/directional/west, +/obj/effect/decal/cleanable/blood/tracks, +/obj/item/paper_bin, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/mob/living/simple_animal/hostile/hivebot/wasteplanet/strong, +/obj/item/trash/plate, +/obj/item/ammo_casing/spent, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"hH" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_y = 4; + pixel_x = -2 + }, +/obj/item/reagent_containers/food/drinks/coffee{ + pixel_x = -10; + pixel_y = -7 + }, +/obj/item/paper/crumpled{ + pixel_x = 5; + pixel_y = -1 + }, +/obj/item/tape/random/preset/tradepost/one{ + pixel_y = 7; + pixel_x = -6 + }, +/turf/open/floor/wood, +/area/ruin/wasteplanet/tradepost/center) +"hJ" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/ruin/wasteplanet/tradepost/barracks) +"hN" = ( +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/pen/fountain, +/obj/machinery/newscaster/directional/west, +/obj/item/paper/crumpled{ + pixel_x = -5; + pixel_y = -9 + }, +/obj/item/paper/crumpled{ + pixel_x = 7; + pixel_y = -16 + }, +/obj/item/spacecash/bundle/mediumrand{ + pixel_y = 8; + pixel_x = 4 + }, +/turf/open/floor/wood, +/area/ruin/wasteplanet/tradepost/center) +"hO" = ( +/turf/closed/wall, +/area/ruin/wasteplanet/tradepost/barracks) +"hU" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/stand_clear{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"hV" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/item/stack/ore/salvage/scrapmetal/five, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"hW" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip4" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/effect/decal/cleanable/glass, +/obj/structure/foamedmetal/iron, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/center) +"hX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/structure/catwalk, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"ib" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/flashlight/flare/burnt, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"ig" = ( +/obj/structure/table, +/obj/machinery/airalarm/directional/south, +/obj/item/reagent_containers/food/drinks/mug/tea{ + pixel_y = 6; + pixel_x = 2 + }, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost/center) +"ip" = ( +/obj/item/bedsheet/hos{ + name = "vanguard's bedsheet" + }, +/obj/structure/bed/pod, +/obj/structure/curtain/cloth/grey, +/obj/machinery/light/small/broken/directional/north, +/turf/open/floor/carpet/orange, +/area/ruin/wasteplanet/tradepost/barracks) +"iq" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/concrete/pavement/wasteplanet/lit, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"ir" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"it" = ( +/obj/item/cigbutt{ + pixel_x = 8; + pixel_y = 5 + }, +/obj/item/cigbutt{ + pixel_y = 6; + pixel_x = -8 + }, +/obj/item/cigbutt, +/obj/structure/sign/warning/nosmoking/burnt{ + pixel_y = 28 + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"iy" = ( +/obj/machinery/computer/mech_bay_power_console/retro{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plasteel/tech/grid, +/area/ruin/wasteplanet/tradepost/warehouse) +"iI" = ( +/obj/effect/decal/cleanable/molten_object{ + pixel_x = 4; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/molten_object{ + pixel_x = 1; + pixel_y = -12 + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip1" + }, +/obj/effect/mob_spawn/human/corpse/inteq/enforcer{ + head = null; + husk = 1 + }, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"iX" = ( +/obj/item/radio/intercom/directional/north, +/obj/structure/closet/crate, +/obj/effect/turf_decal/industrial/warning/full, +/obj/item/circuitboard/machine/space_heater, +/obj/item/circuitboard/machine/space_heater, +/obj/item/circuitboard/machine/space_heater, +/turf/open/floor/pod/dark, +/area/ruin/wasteplanet/tradepost/warehouse) +"jb" = ( +/obj/structure/sign/poster/contraband/c20r{ + pixel_y = 28 + }, +/obj/structure/foamedmetal/iron, +/turf/open/floor/carpet/black, +/area/ruin/wasteplanet/tradepost/barracks) +"je" = ( +/obj/machinery/firealarm/directional/east, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost/center) +"jk" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 9 + }, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"jn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"jy" = ( +/obj/structure/foamedmetal/iron, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"jD" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/oil/streak{ + icon_state = "streak2" + }, +/mob/living/simple_animal/hostile/hivebot/wasteplanet/strong, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 4 + }, +/obj/item/ammo_casing/spent, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"jT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/advanced_airlock_controller{ + pixel_y = 26 + }, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/layer4{ + dir = 1 + }, +/obj/structure/sign/warning/gasmask{ + pixel_x = -28 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/turf/open/floor/plasteel/tech/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"kd" = ( +/turf/closed/wall, +/area/overmap_encounter/planetoid/cave/explored) +"kf" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"km" = ( +/obj/effect/gibspawner/robot, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"kr" = ( +/obj/effect/decal/cleanable/dirt/dust, +/mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"ks" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost) +"kt" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"kx" = ( +/obj/structure/table_frame, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"kM" = ( +/obj/structure/floodlight_frame, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"kP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"kU" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/wasteplanet/lit, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"la" = ( +/obj/structure/filingcabinet/double, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/wood, +/area/ruin/wasteplanet/tradepost/center) +"lf" = ( +/obj/effect/decal/cleanable/blood/tracks, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent{ + pixel_y = -11; + pixel_x = -3 + }, +/obj/item/ammo_casing/spent{ + pixel_y = -4 + }, +/obj/item/paper/crumpled, +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"lj" = ( +/obj/item/radio/intercom/wideband/directional/north, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner, +/turf/open/floor/carpet/blue, +/area/ruin/wasteplanet/tradepost/center) +"lp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/light/small/broken/directional/south, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost) +"lq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/gibspawner/robot, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"lv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/structure/catwalk, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"lw" = ( +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"lx" = ( +/obj/machinery/stasis{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost/barracks) +"ly" = ( +/obj/structure/table, +/obj/item/storage/fancy/cigarettes/cigpack_robust{ + pixel_y = 6; + pixel_x = -4 + }, +/obj/item/storage/fancy/cigarettes/cigpack_robust{ + pixel_x = 3; + pixel_y = -4 + }, +/obj/item/storage/fancy/cigarettes/cigpack_mindbreaker{ + pixel_y = 8; + pixel_x = 9 + }, +/obj/item/storage/fancy/cigarettes/cigpack_cannabis{ + pixel_x = -8; + pixel_y = -4 + }, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"lB" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"lE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/thinplating/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"lF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_pump/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/barracks) +"lI" = ( +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"lM" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/line{ + dir = 5 + }, +/obj/machinery/light/small/broken/directional/east, +/obj/structure/foamedmetal/iron, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"lQ" = ( +/obj/effect/turf_decal/industrial/warning/full, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/pod/dark, +/area/ruin/wasteplanet/tradepost/warehouse) +"lX" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/spawner/hivebot, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"lY" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor3-old" + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor2-old" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"mo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"mr" = ( +/obj/structure/sign/warning/gasmask{ + pixel_x = -28 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/barracks) +"mt" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/effect/turf_decal/industrial/warning/corner, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost) +"mA" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 10 + }, +/turf/open/floor/plating, +/area/ruin/wasteplanet/tradepost) +"mC" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"mI" = ( +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/sign/poster/rilena/tali{ + pixel_x = 29 + }, +/obj/item/reagent_containers/food/drinks/rilenacup{ + pixel_x = 7; + pixel_y = -2 + }, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"mK" = ( +/obj/effect/mob_spawn/human/corpse/inteq/medic/tradepost, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost/barracks) +"mN" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip2" + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"nb" = ( +/turf/closed/wall/rust, +/area/ruin/wasteplanet/tradepost) +"nn" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/clipboard, +/obj/item/paper/crumpled, +/obj/item/paper/crumpled, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/structure/table_frame, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"nr" = ( +/obj/structure/rack, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/trimline/opaque/yellow/line{ + dir = 6 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"nt" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2, +/turf/open/floor/carpet/black, +/area/ruin/wasteplanet/tradepost/barracks) +"nv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil/streak{ + icon_state = "streak2" + }, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"nJ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_pump/layer4{ + dir = 8 + }, +/obj/structure/table_frame, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/center) +"nL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"nN" = ( +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 4 + }, +/turf/open/floor/carpet/blue, +/area/ruin/wasteplanet/tradepost/center) +"nO" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/computer/operating, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost/barracks) +"nU" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/clothing/head/beret/sec/hos/inteq, +/obj/machinery/light/small/broken/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/layer4, +/obj/item/clipboard, +/obj/machinery/button/door{ + pixel_y = -9; + pixel_x = -22; + dir = 4; + name = "privacy lock" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/barracks) +"ox" = ( +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/layer4, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"oz" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor2-old" + }, +/obj/item/gun/ballistic/automatic/pistol/commander/inteq/no_mag, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/center) +"oC" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/stack/sheet/mineral/sandbags, +/turf/open/floor/concrete/pavement/wasteplanet/lit, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"oQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/layer4{ + dir = 1 + }, +/turf/open/floor/carpet/blue, +/area/ruin/wasteplanet/tradepost/center) +"pb" = ( +/obj/structure/chair/plastic{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"pc" = ( +/obj/item/stack/sheet/mineral/sandbags{ + amount = 2 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"pe" = ( +/obj/structure/flippedtable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"pj" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"pk" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"pl" = ( +/turf/closed/wall, +/area/ruin/wasteplanet/tradepost/warehouse) +"pm" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "wtpw2" + }, +/obj/machinery/power/shieldwallgen/atmos{ + id = "tradehouse2"; + anchored = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/warehouse) +"pD" = ( +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"pL" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "tradepost_vanguard" + }, +/turf/open/floor/plating, +/area/ruin/wasteplanet/tradepost/barracks) +"pQ" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/caution{ + dir = 4 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"pT" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/structure/closet/crate/bin, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/center) +"qb" = ( +/turf/closed/wall, +/area/ruin/wasteplanet/tradepost) +"qg" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"qi" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"qk" = ( +/obj/machinery/door/airlock/command/glass{ + name = "Holopad Access" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/center) +"qp" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 9 + }, +/obj/effect/turf_decal/industrial/warning/corner, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost) +"qr" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"qw" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/layer_manifold, +/obj/effect/decal/cleanable/glass, +/obj/machinery/door/airlock/command/glass{ + name = "Central Dome" + }, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/center) +"qy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"qJ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/brown, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/barracks) +"qM" = ( +/obj/structure/cable{ + icon_state = "1-10" + }, +/obj/structure/cable{ + icon_state = "1-6" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"qR" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"qV" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/closet/secure_closet/engineering_welding{ + populate = 0 + }, +/obj/item/clothing/glasses/welding, +/obj/item/weldingtool/largetank, +/obj/item/weldingtool/largetank, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost) +"ra" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"rb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/bed/dogbed{ + name = "cat bed"; + desc = "A comfy-looking cat bed. You can even strap your pet in, in case the gravity turns off." + }, +/mob/living/simple_animal/pet/cat/kitten{ + name = "Biggles"; + desc = "That's Mr. Biggles to you." + }, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"rl" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/structure/catwalk, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"ro" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 9 + }, +/turf/open/floor/carpet/blue, +/area/ruin/wasteplanet/tradepost/center) +"ru" = ( +/obj/structure/flippedtable, +/obj/item/clothing/shoes/laceup{ + pixel_x = 1; + pixel_y = -5 + }, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"rB" = ( +/obj/machinery/door/airlock{ + dir = 4; + name = "Showers" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/center) +"rN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/holopad/secure, +/mob/living/simple_animal/hostile/hivebot/wasteplanet/strong, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/corner/opaque/yellow/full, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"rQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"rY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/table/wood, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"sb" = ( +/obj/structure/table, +/obj/machinery/fax/ruin{ + pixel_y = 7 + }, +/turf/open/floor/carpet/black, +/area/ruin/wasteplanet/tradepost/barracks) +"sf" = ( +/obj/effect/decal/cleanable/molten_object{ + pixel_x = -10; + pixel_y = 9 + }, +/obj/effect/decal/cleanable/molten_object{ + pixel_x = 9; + pixel_y = -4 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"su" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"sv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"sx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering{ + dir = 4; + name = "Engineering" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost) +"sy" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip1" + }, +/obj/structure/foamedmetal/iron, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"sA" = ( +/obj/machinery/firealarm/directional/south, +/obj/structure/bookcase/random, +/turf/open/floor/wood, +/area/ruin/wasteplanet/tradepost/center) +"sH" = ( +/obj/effect/gibspawner/robot, +/turf/open/floor/plating/asteroid/wasteplanet/lit, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"sL" = ( +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"sN" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor3-old" + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor2-old" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/obj/item/stack/ore/salvage/scrapmetal/five, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/layer4{ + dir = 1 + }, +/obj/machinery/light/small/broken/directional/west, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"sS" = ( +/obj/structure/filingcabinet/double, +/obj/item/radio/intercom/directional/east, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/wood, +/area/ruin/wasteplanet/tradepost/center) +"sT" = ( +/obj/effect/turf_decal/industrial/warning/full, +/obj/structure/ore_box, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/pod/dark, +/area/ruin/wasteplanet/tradepost/warehouse) +"sZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"ta" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"te" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil/streak{ + icon_state = "streak2" + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"tf" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/barracks) +"tn" = ( +/obj/structure/barricade/sandbags, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"tp" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"ts" = ( +/obj/machinery/holopad/secure, +/obj/effect/turf_decal/box, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"ty" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/cable, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"tz" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ruin/wasteplanet/tradepost/center) +"tL" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/decal/cleanable/robot_debris, +/obj/effect/gibspawner/robot, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 6 + }, +/obj/structure/table_frame, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"tU" = ( +/obj/mecha/working/ripley/cargo{ + name = "\improper APLU \"Forklift Certified\"" + }, +/obj/effect/turf_decal/rechargefloor, +/obj/structure/sign/warning/nosmoking{ + pixel_x = 28 + }, +/obj/machinery/light/small/broken/directional/south, +/turf/open/floor/plasteel/tech/grid, +/area/ruin/wasteplanet/tradepost/warehouse) +"tV" = ( +/obj/item/stack/ore/salvage/scrapgold, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"ua" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"ub" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/turf/open/floor/plating, +/area/ruin/wasteplanet/tradepost) +"uf" = ( +/obj/effect/turf_decal/industrial/warning/full, +/obj/structure/closet/crate, +/obj/machinery/light/small/broken/directional/south, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/turf/open/floor/pod/dark, +/area/ruin/wasteplanet/tradepost/warehouse) +"ug" = ( +/obj/structure/barricade/sandbags, +/obj/effect/turf_decal/industrial/warning/cee{ + dir = 4 + }, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"um" = ( +/obj/structure/table, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/item/radio/intercom/table{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/barracks) +"uo" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet/blue, +/area/ruin/wasteplanet/tradepost/center) +"uw" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ + dir = 8 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"uy" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 8 + }, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"uA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/ash/glowshroom, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"uC" = ( +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"uG" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 6 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"uN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"uS" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost/center) +"uU" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/grille, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"uV" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"uW" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/marker_beacon, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"vi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"vr" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"vu" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/layer4{ + dir = 8 + }, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost) +"vy" = ( +/obj/structure/foamedmetal/iron, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"vz" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 10 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"vG" = ( +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"vK" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 8 + }, +/obj/structure/table, +/obj/item/radio/intercom/table, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost) +"vL" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"vQ" = ( +/obj/effect/decal/cleanable/molten_object/large, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"vR" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip3" + }, +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall, +/area/ruin/wasteplanet/tradepost/barracks) +"vS" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ + dir = 4 + }, +/obj/machinery/door/window/brigdoor/eastright{ + req_access_txt = "3" + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/barracks) +"wi" = ( +/obj/item/storage/box/flares{ + pixel_x = 8; + pixel_y = -2 + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"wl" = ( +/obj/effect/turf_decal/techfloor, +/obj/effect/turf_decal/techfloor, +/obj/structure/closet/wall{ + dir = 8; + pixel_x = 29 + }, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"wm" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/machinery/light/small/broken/directional/east, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/machinery/advanced_airlock_controller{ + pixel_x = -26; + pixel_y = 0 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"wA" = ( +/obj/effect/decal/cleanable/oil/streak{ + icon_state = "streak5" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"wB" = ( +/obj/machinery/modular_computer/console/preset/civilian{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/ruin/wasteplanet/tradepost/barracks) +"wG" = ( +/obj/machinery/door/airlock/medical{ + name = "Medbay"; + welded = 1 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/barracks) +"wL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/layer_manifold, +/turf/closed/wall, +/area/ruin/wasteplanet/tradepost/barracks) +"wM" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/carpet/blue, +/area/ruin/wasteplanet/tradepost/center) +"wW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/structure/foamedmetal/iron, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/barracks) +"xm" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/item/radio/intercom/directional/south, +/obj/structure/foamedmetal/iron, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/barracks) +"xu" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/flora/ash/glowshroom, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"xv" = ( +/obj/effect/decal/cleanable/oil/streak{ + icon_state = "streak2" + }, +/obj/effect/decal/cleanable/oil/streak{ + icon_state = "streak5" + }, +/obj/item/paper/crumpled, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 6 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"xw" = ( +/obj/item/paper/crumpled, +/obj/structure/filingcabinet/double, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"xx" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"xA" = ( +/obj/item/stack/ore/salvage/scraptitanium/five, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"xF" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip3" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall, +/area/ruin/wasteplanet/tradepost/barracks) +"xM" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/structure/flippedtable, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_box/magazine/m9mm_rattlesnake{ + start_empty = 1; + pixel_x = -9; + pixel_y = -3; + icon_state = "rattlesnake_mag_0" + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"xP" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 9 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"xQ" = ( +/obj/item/stack/sheet/mineral/sandbags{ + pixel_y = 7 + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip2" + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip3" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"xV" = ( +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/grille, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"xX" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/center) +"ya" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/item/bot_assembly/medbot, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost/barracks) +"yb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"yd" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 10 + }, +/obj/machinery/meter, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 6 + }, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost) +"yf" = ( +/obj/structure/grille, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"yt" = ( +/obj/effect/decal/cleanable/oil/streak{ + icon_state = "streak2" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/item/stack/ore/salvage/scrapmetal/five, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"yF" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"yI" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"yJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/marker_beacon, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"yZ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 5 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"ze" = ( +/obj/machinery/mech_bay_recharge_port, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/plasteel/tech/grid, +/area/ruin/wasteplanet/tradepost/warehouse) +"zn" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/structure/floodlight_frame, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"zo" = ( +/obj/effect/turf_decal/industrial/traffic, +/obj/effect/turf_decal/industrial/caution{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"zq" = ( +/obj/effect/turf_decal/industrial/warning/full, +/obj/structure/closet/crate, +/obj/structure/sign/warning/gasmask{ + pixel_y = 30 + }, +/obj/machinery/light/small/directional/west, +/obj/item/circuitboard/machine/tesla_ground, +/obj/item/circuitboard/machine/tesla_ground, +/obj/item/circuitboard/machine/tesla_ground, +/turf/open/floor/pod/dark, +/area/ruin/wasteplanet/tradepost/warehouse) +"zA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering{ + dir = 4; + name = "Engineering" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost) +"zD" = ( +/turf/closed/wall/rust, +/area/ruin/wasteplanet/tradepost/warehouse) +"zM" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil/streak{ + icon_state = "streak2" + }, +/mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged/rapid, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"zO" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2, +/obj/structure/foamedmetal/iron, +/turf/open/floor/carpet/black, +/area/ruin/wasteplanet/tradepost/barracks) +"zS" = ( +/obj/effect/turf_decal/siding/thinplating, +/obj/effect/turf_decal/trimline/opaque/yellow/line, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"zT" = ( +/obj/effect/turf_decal/industrial/caution{ + dir = 1 + }, +/obj/machinery/firealarm/directional/east, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/item/clothing/head/soft/inteq/corpsman, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost/barracks) +"zY" = ( +/obj/item/stack/sheet/mineral/sandbags, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/asteroid/wasteplanet/lit, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"Aa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Ac" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/closed/wall/yesdiag, +/area/ruin/wasteplanet/tradepost/barracks) +"Ae" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Ah" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Ak" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 8 + }, +/obj/effect/gibspawner/robot, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"AH" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/layer4, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"AI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 5 + }, +/obj/effect/turf_decal/siding/thinplating, +/obj/effect/turf_decal/trimline/opaque/yellow/line, +/obj/item/radio/intercom/directional/south, +/obj/item/stack/ore/salvage/scrapmetal, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"AP" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip2" + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip5" + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"AQ" = ( +/obj/machinery/light/small/broken/directional/south, +/obj/machinery/holopad/secure, +/turf/open/floor/carpet/orange, +/area/ruin/wasteplanet/tradepost/barracks) +"AT" = ( +/obj/effect/gibspawner/robot, +/turf/open/floor/concrete/pavement/wasteplanet/lit, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"AV" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Ba" = ( +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"Bk" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Bu" = ( +/obj/structure/foamedmetal/iron, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"BK" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/turf/open/floor/pod/dark, +/area/ruin/wasteplanet/tradepost/center) +"BN" = ( +/mob/living/simple_animal/hostile/hivebot/wasteplanet/strong, +/turf/open/floor/plating/asteroid/wasteplanet/lit, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"Cb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/catwalk, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"Cc" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost) +"Cf" = ( +/obj/structure/bed, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/item/bedsheet/red, +/obj/structure/curtain/cloth/fancy, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"Cg" = ( +/obj/effect/turf_decal/techfloor/corner, +/obj/effect/turf_decal/techfloor, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"Cj" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/item/ammo_casing/spent, +/obj/item/gun/ballistic/automatic/pistol/rattlesnake/inteq{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/effect/mob_spawn/human/corpse/inteq/vanguard/tradepost, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"Cq" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Cx" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip3" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"CA" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 4 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"CB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/techfloor/corner{ + dir = 1 + }, +/obj/item/stack/ore/salvage/scrapmetal/five, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"CC" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "wtpw1" + }, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/warehouse) +"CD" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"CE" = ( +/obj/structure/rack, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10; + layer = 2.030 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/line{ + dir = 10 + }, +/obj/item/storage/box/flares{ + pixel_y = 3; + pixel_x = -3 + }, +/obj/item/storage/box/flares{ + pixel_x = 8; + pixel_y = -2 + }, +/obj/item/storage/box/flares{ + pixel_x = 12; + pixel_y = 11 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"CG" = ( +/obj/machinery/power/floodlight{ + anchored = 1; + setting = 3 + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"CI" = ( +/obj/structure/catwalk, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"CK" = ( +/obj/structure/spawner/hivebot, +/obj/structure/cable, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"CV" = ( +/obj/structure/cable{ + icon_state = "0-9" + }, +/obj/effect/turf_decal/industrial/warning/full, +/obj/machinery/power/rtg/geothermal, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Dk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil/streak{ + icon_state = "streak2" + }, +/obj/effect/decal/cleanable/oil/streak{ + icon_state = "streak5" + }, +/obj/effect/decal/cleanable/oil/streak{ + icon_state = "streak4" + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Dl" = ( +/obj/machinery/door/airlock{ + dir = 4; + name = "Trader's Quarters" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/center) +"Du" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Dw" = ( +/obj/machinery/light/small/broken/directional/east, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost) +"DB" = ( +/obj/machinery/door/airlock/security{ + name = "Armory" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/barracks) +"DE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/corner{ + dir = 4 + }, +/obj/item/stack/ore/salvage/scrapmetal, +/obj/item/stack/ore/salvage/scrapgold, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"DG" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "wtpw1" + }, +/obj/machinery/power/shieldwallgen/atmos{ + id = "tradehouse"; + anchored = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/warehouse) +"DI" = ( +/obj/item/ammo_casing/spent, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"DL" = ( +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/techfloor, +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ + dir = 1 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/barracks) +"DQ" = ( +/obj/structure/girder/displaced, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"DR" = ( +/obj/structure/foamedmetal/iron, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"DS" = ( +/obj/structure/barricade/sandbags, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/item/paper/crumpled, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"Ea" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil/streak, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Ei" = ( +/obj/structure/cable{ + icon_state = "0-5" + }, +/obj/effect/turf_decal/industrial/warning/full, +/obj/structure/frame/machine, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"El" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/foamedmetal/iron, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"Eu" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 6 + }, +/turf/open/floor/carpet/blue, +/area/ruin/wasteplanet/tradepost/center) +"Ex" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall/rust, +/area/ruin/wasteplanet/tradepost/barracks) +"ED" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"EF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/opaque/yellow/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"EJ" = ( +/obj/structure/marker_beacon, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"EM" = ( +/obj/item/reagent_containers/glass/concrete_bag{ + pixel_x = 5; + pixel_y = 4 + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"EW" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 5 + }, +/obj/effect/turf_decal/siding/thinplating, +/obj/effect/turf_decal/trimline/opaque/yellow/line, +/obj/machinery/light/small/directional/south, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/item/chair, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"Fb" = ( +/obj/machinery/door/airlock/command/glass{ + dir = 4; + name = "Holopad Access" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"Fc" = ( +/turf/open/floor/plating/wasteplanet/lit, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"Fd" = ( +/obj/structure/chair, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost) +"Fe" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/grille, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Fn" = ( +/obj/structure/barricade/sandbags, +/obj/effect/turf_decal/industrial/warning/cee, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Ft" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip2" + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip5" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Fx" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/industrial/caution{ + dir = 1 + }, +/obj/structure/sign/warning/gasmask{ + pixel_x = -28 + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip1" + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip2" + }, +/obj/item/paper/crumpled, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"Fy" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"FG" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/turf/open/floor/plating, +/area/ruin/wasteplanet/tradepost) +"FI" = ( +/obj/machinery/door/airlock/command{ + dir = 4; + name = "Vanguard's Quarters" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "tradepost_vanguard"; + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/barracks) +"FK" = ( +/mob/living/simple_animal/hostile/hivebot/wasteplanet/strong, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"FP" = ( +/obj/structure/flora/ash/glowshroom, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"FV" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/stack/sheet/cardboard, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"FZ" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Ga" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 5 + }, +/obj/effect/turf_decal/siding/thinplating/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"Gc" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/ammo_box/magazine/co9mm{ + pixel_x = 5 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/trimline/opaque/yellow/line, +/turf/open/floor/plasteel/tech/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"Gf" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/machinery/light/small/directional/north, +/turf/open/floor/carpet/blue, +/area/ruin/wasteplanet/tradepost/center) +"Gl" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Gp" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/caution{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"Gt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flippedtable, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"GB" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip5" + }, +/obj/structure/catwalk, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"GF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"GQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"GS" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip3" + }, +/obj/structure/foamedmetal/iron, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Hb" = ( +/obj/effect/decal/cleanable/oil/streak{ + icon_state = "streak2" + }, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"Hc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Hn" = ( +/obj/machinery/light/directional/south, +/obj/structure/bookcase/random, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"Ho" = ( +/obj/structure/table, +/obj/machinery/light/small/broken/directional/east, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/item/paper_bin{ + pixel_y = 3; + pixel_x = 2 + }, +/obj/item/pen{ + pixel_y = 2; + pixel_x = 2 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/barracks) +"Hv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall/yesdiag, +/area/ruin/wasteplanet/tradepost/center) +"Hy" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"HE" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/grille, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"HH" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip3" + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip2" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"HK" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost/center) +"HO" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/o2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/wasteplanet/tradepost) +"HV" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/asteroid/wasteplanet/lit, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"Ie" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"If" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Ig" = ( +/obj/structure/rack, +/obj/machinery/door/window/southright, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/item/towel, +/obj/item/towel{ + pixel_x = -1; + pixel_y = 10 + }, +/obj/item/towel{ + pixel_x = 6; + pixel_y = 5 + }, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost/center) +"Ij" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/pet_carrier, +/obj/item/clothing/suit/toggle/lawyer/navy, +/obj/item/clothing/under/misc/pj/red, +/obj/item/clothing/under/rank/civilian/lawyer/black, +/obj/item/clothing/mask/gas/atmos, +/obj/item/clothing/under/shorts/blue{ + name = "jorts"; + desc = "potentially the most horrific thing you've ever seen." + }, +/turf/open/floor/wood, +/area/ruin/wasteplanet/tradepost/center) +"Il" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"In" = ( +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"Iq" = ( +/obj/structure/sign/poster/contraband/inteq{ + pixel_y = 28 + }, +/obj/structure/foamedmetal/iron, +/turf/open/floor/carpet/black, +/area/ruin/wasteplanet/tradepost/barracks) +"IA" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"IF" = ( +/obj/structure/door_assembly/door_assembly_com, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/layer_manifold, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/center) +"IH" = ( +/obj/structure/table, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 1 + }, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"IM" = ( +/mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged/rapid, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"IN" = ( +/obj/item/chair{ + pixel_y = -4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/item/gun/ballistic/automatic/pistol/commander/no_mag{ + pixel_y = 8; + pixel_x = 10 + }, +/obj/effect/mob_spawn/human/corpse/indie/manager, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"IY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/spent, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Jb" = ( +/obj/machinery/door/airlock/mining{ + name = "Warehouse" + }, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/warehouse) +"Jf" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/clothing/head/cone, +/obj/item/light/tube/broken, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Jh" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip3" + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Ji" = ( +/obj/machinery/light/small/broken/directional/south, +/obj/machinery/shower{ + dir = 8 + }, +/obj/structure/toilet{ + dir = 4; + pixel_x = -6 + }, +/obj/machinery/button/door{ + dir = 4; + pixel_y = 11; + pixel_x = -22; + normaldoorcontrol = 1; + specialfunctions = 3; + id = "but" + }, +/obj/structure/sink{ + pixel_y = -2; + pixel_x = 14; + dir = 8 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/barracks) +"Jk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Jm" = ( +/obj/machinery/light/small/broken/directional/west, +/obj/machinery/portable_atmospherics/scrubber/huge/movable, +/obj/effect/turf_decal/industrial/warning/full, +/turf/open/floor/pod/dark, +/area/ruin/wasteplanet/tradepost/warehouse) +"Jn" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor2-old" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Jp" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Jt" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/item/pen/fourcolor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"Ju" = ( +/obj/item/flashlight/flare/burnt, +/turf/open/floor/plating/wasteplanet/rust/lit, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"Jv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"JB" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/line{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2, +/obj/machinery/firealarm/directional/north, +/obj/item/chair, +/obj/structure/closet/crate/bin, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"JG" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/flashlight/flare/burnt, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"JL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost/center) +"JR" = ( +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Kf" = ( +/turf/template_noop, +/area/overmap_encounter/planetoid/cave/explored) +"Ki" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor7-old" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil/streak, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Kk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/office/purple{ + dir = 1 + }, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"Kl" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/grille, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"Ko" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 9 + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip3" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil/streak{ + icon_state = "streak2" + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Kp" = ( +/obj/structure/girder/displaced, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"Kr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/kirbyplants/random, +/obj/item/paper/crumpled, +/obj/effect/mob_spawn/human/corpse/inteq/enforcer{ + head = null; + husk = 1 + }, +/obj/machinery/light/directional/south, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/center) +"Kt" = ( +/obj/item/stack/ore/salvage/scraptitanium/five, +/obj/item/clothing/head/cone, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Kw" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/wasteplanet/tradepost) +"Kx" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"KA" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 1 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"KF" = ( +/obj/machinery/atmospherics/pipe/manifold4w/green/visible, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost) +"KG" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "wtpw2" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/power/shieldwallgen/atmos{ + id = "tradehouse2"; + dir = 1; + anchored = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/warehouse) +"KZ" = ( +/obj/machinery/button/door{ + dir = 8; + pixel_y = 8; + pixel_x = 24; + id = "wtpw2" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ + dir = 8 + }, +/obj/machinery/button/shieldwallgen{ + id = "tradehouse2"; + dir = 8; + pixel_y = -2; + pixel_x = 22 + }, +/obj/item/circuitboard/machine/rad_collector, +/obj/item/circuitboard/machine/rad_collector, +/obj/structure/closet/crate, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"Le" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Lm" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/structure/sign/poster/clip/lunatown{ + pixel_x = -28 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/center) +"LD" = ( +/obj/item/decal_painter{ + pixel_x = 7; + pixel_y = 3 + }, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"LK" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/cable, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"LM" = ( +/obj/structure/marker_beacon, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"LO" = ( +/obj/effect/decal/cleanable/oil, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"LR" = ( +/obj/item/clothing/head/cone, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"LV" = ( +/obj/structure/grille, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"LW" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"LY" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4, +/obj/machinery/light/small/broken/directional/south, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost) +"Ma" = ( +/turf/template_noop, +/area/template_noop) +"Mb" = ( +/obj/structure/table, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost/center) +"Ml" = ( +/turf/open/floor/plating/wasteplanet/rust/lit, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"Mm" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/visible, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost) +"Mr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_pump/layer4, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"Mt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil/streak, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 9 + }, +/obj/effect/turf_decal/siding/thinplating/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"MA" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/layer4, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"MF" = ( +/obj/item/light/tube/broken, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"ML" = ( +/obj/machinery/airalarm/directional/west, +/obj/item/ammo_casing/spent, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/splatter{ + icon_state = "floor2" + }, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_box/magazine/m9mm_rattlesnake{ + start_empty = 1; + pixel_x = -9; + pixel_y = -3; + icon_state = "rattlesnake_mag_0" + }, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"MQ" = ( +/obj/item/flashlight/flare/burnt, +/turf/open/floor/plating/asteroid/wasteplanet/lit, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"MS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"MU" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/turf/open/floor/plating, +/area/ruin/wasteplanet/tradepost/center) +"Nh" = ( +/obj/item/clothing/head/cone, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Ni" = ( +/obj/item/ammo_casing/spent{ + pixel_y = -4; + pixel_x = -2 + }, +/obj/item/ammo_casing/spent{ + pixel_y = -7; + pixel_x = -9 + }, +/obj/item/ammo_casing/spent{ + pixel_y = -11; + pixel_x = -3 + }, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent{ + pixel_y = -8; + pixel_x = -7 + }, +/obj/item/ammo_casing/spent{ + pixel_y = -4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/center) +"Nl" = ( +/turf/closed/wall/rust/yesdiag, +/area/overmap_encounter/planetoid/cave/explored) +"No" = ( +/obj/machinery/power/floodlight{ + anchored = 1; + setting = 3 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"Np" = ( +/obj/machinery/button/door{ + dir = 4; + pixel_x = -24; + pixel_y = 8; + id = "wtpw1" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ + dir = 4 + }, +/obj/machinery/button/shieldwallgen{ + id = "tradehouse"; + dir = 4; + pixel_y = -2; + pixel_x = -22 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"Nq" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/barracks) +"Nu" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 6 + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip3" + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Nw" = ( +/obj/effect/turf_decal/industrial/caution, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Ny" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip3" + }, +/obj/effect/decal/cleanable/oil/streak{ + icon_state = "streak2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"NC" = ( +/obj/effect/decal/cleanable/molten_object{ + pixel_x = 1; + pixel_y = -12 + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"ND" = ( +/obj/item/stack/sheet/mineral/sandbags{ + amount = 2 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/flippedtable{ + dir = 8 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"NK" = ( +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/spline/fancy/opaque/black/corner{ + dir = 8 + }, +/turf/open/floor/carpet/blue, +/area/ruin/wasteplanet/tradepost/center) +"NR" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/carpet/black, +/area/ruin/wasteplanet/tradepost/barracks) +"Of" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/trash/plate, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"Oi" = ( +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/grille, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"Oy" = ( +/obj/effect/decal/cleanable/oil/streak{ + icon_state = "streak2" + }, +/obj/effect/decal/cleanable/oil/streak{ + icon_state = "streak4" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer4, +/obj/item/ammo_casing/spent, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"OB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning, +/obj/item/stack/ore/salvage/scrapmetal/five, +/obj/machinery/door/airlock/command/glass{ + name = "Central Dome" + }, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/center) +"OI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/closed/wall, +/area/ruin/wasteplanet/tradepost/center) +"OJ" = ( +/obj/item/stack/ore/salvage/scrapmetal/five, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/security{ + name = "Barracks" + }, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/barracks) +"OQ" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/brown, +/obj/item/radio/intercom/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/barracks) +"OV" = ( +/obj/item/stack/sheet/mineral/sandbags, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Pc" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Po" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/effect/gibspawner/robot, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Ps" = ( +/turf/closed/wall/rust/yesdiag, +/area/ruin/wasteplanet/tradepost/barracks) +"Pt" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"PI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/layer4{ + dir = 8 + }, +/obj/structure/closet/crate, +/obj/item/circuitboard/machine/shieldwallgen/atmos/strong, +/obj/item/circuitboard/machine/shieldwallgen/atmos/strong, +/obj/item/circuitboard/machine/shieldwallgen/atmos/strong, +/obj/item/circuitboard/machine/shieldwallgen/atmos/strong, +/obj/item/circuitboard/machine/shieldwallgen/atmos/strong, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"PV" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/barracks) +"PY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"PZ" = ( +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Qb" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/closet/secure_closet/engineering_electrical{ + populate = 0 + }, +/obj/item/storage/toolbox/electrical, +/obj/item/multitool, +/obj/item/stack/tape/industrial/electrical, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost) +"Qe" = ( +/obj/effect/decal/cleanable/blood/tracks, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent{ + pixel_y = -8; + pixel_x = -7 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 10 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"Qn" = ( +/mob/living/simple_animal/hostile/hivebot/wasteplanet/strong, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"QB" = ( +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"QE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"QK" = ( +/obj/item/clipboard, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 6 + }, +/obj/item/radio/intercom/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/layer4{ + dir = 4 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"QL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"QR" = ( +/obj/item/clothing/head/helmet/inteq{ + pixel_y = 4; + pixel_x = 3 + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"QT" = ( +/obj/structure/flora/ash/glowshroom, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"QZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Ra" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Re" = ( +/obj/effect/gibspawner/robot, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/layer4{ + dir = 1 + }, +/obj/machinery/light/small/broken/directional/east, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/structure/foamedmetal/iron, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"Rg" = ( +/obj/machinery/atmospherics/pipe/manifold/green/visible{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/engis_unite{ + pixel_y = 28 + }, +/obj/machinery/light/small/broken/directional/west, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost) +"Ri" = ( +/obj/structure/filingcabinet/double, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"Rj" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Rk" = ( +/obj/structure/barricade/sandbags, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 9 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"Rr" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/north, +/obj/item/storage/toolbox/ammo/c9mm{ + pixel_y = 2 + }, +/obj/item/storage/toolbox/ammo/c10mm{ + pixel_x = 2; + pixel_y = 7 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"Rt" = ( +/turf/closed/wall/rust, +/area/ruin/wasteplanet/tradepost/barracks) +"Ry" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip2" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"RA" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost) +"RB" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/grille, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"RD" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 6 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/barracks) +"RI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/corner, +/obj/effect/turf_decal/trimline/opaque/yellow/warning, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"RK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/pen/fourcolor, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/item/ammo_casing/spent, +/obj/item/ammo_box/magazine/m9mm_rattlesnake{ + start_empty = 1; + pixel_x = -9; + pixel_y = -3; + icon_state = "rattlesnake_mag_0" + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"RR" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/line{ + dir = 9 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/layer4{ + dir = 4 + }, +/obj/structure/table, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"RV" = ( +/obj/machinery/light/small/broken/directional/north, +/obj/item/radio/intercom/directional/west, +/obj/structure/closet/cabinet, +/obj/item/clothing/head/soft/inteq, +/obj/item/clothing/head/soft/inteq, +/obj/item/clothing/head/soft/inteq, +/obj/item/clothing/head/beret/sec/inteq, +/obj/item/clothing/head/beret/sec/inteq, +/obj/item/clothing/head/beret/sec/inteq, +/obj/item/clothing/under/syndicate/inteq/skirt, +/obj/item/clothing/under/syndicate/inteq, +/obj/item/clothing/under/syndicate/inteq, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/shoes/combat, +/turf/open/floor/carpet/black, +/area/ruin/wasteplanet/tradepost/barracks) +"Sd" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost) +"Se" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor6-old" + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor5-old" + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor2-old" + }, +/obj/effect/mob_spawn/human/corpse/inteq/enforcer{ + head = null; + husk = 1 + }, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/gun/ballistic/automatic/pistol/commander/inteq/no_mag{ + pixel_y = 4 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Si" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/flashlight/flare/burnt, +/turf/open/floor/concrete/pavement/wasteplanet/lit, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"Sw" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost) +"SE" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"SF" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor4-old" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"SI" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"SP" = ( +/obj/machinery/light/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/modular_computer/console/preset/civilian{ + name = "high powered gaming PC"; + desc = "Looks pretty premium. Probably made by Cybersun though." + }, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"Tg" = ( +/obj/machinery/atmospherics/pipe/layer_manifold, +/turf/closed/wall, +/area/ruin/wasteplanet/tradepost) +"Th" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/ore/salvage/scrapgold, +/obj/machinery/atmospherics/pipe/layer_manifold, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/security{ + name = "Barracks" + }, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/barracks) +"Tk" = ( +/obj/machinery/button/door{ + dir = 8; + pixel_y = -8; + pixel_x = 24; + id = "wtpw2" + }, +/obj/machinery/button/shieldwallgen{ + id = "tradehouse2"; + dir = 8; + pixel_y = 2; + pixel_x = 22 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"Tn" = ( +/obj/structure/spawner/hivebot, +/obj/structure/cable, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"To" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/flashlight/flare/burnt, +/turf/open/floor/plating/wasteplanet/lit, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"Tt" = ( +/obj/effect/decal/cleanable/molten_object/large, +/obj/effect/decal/cleanable/blood/old, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/radio/weather_monitor, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Ty" = ( +/obj/machinery/atmospherics/components/trinary/mixer/airmix, +/turf/open/floor/plating, +/area/ruin/wasteplanet/tradepost) +"Tz" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"TB" = ( +/obj/structure/barricade/sandbags, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"TC" = ( +/obj/structure/cable{ + icon_state = "1-10" + }, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"TD" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 9 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"TJ" = ( +/obj/structure/table/wood, +/obj/machinery/fax/ruin{ + pixel_y = 7 + }, +/turf/open/floor/wood, +/area/ruin/wasteplanet/tradepost/center) +"TS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/closed/wall/rust, +/area/ruin/wasteplanet/tradepost/barracks) +"TT" = ( +/obj/effect/decal/cleanable/oil/streak{ + icon_state = "streak4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/item/trash/plate, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/center) +"Ud" = ( +/turf/closed/mineral/random/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Um" = ( +/obj/item/radio/intercom/directional/north{ + freerange = 1; + freqlock = 1; + frequency = 1347; + name = "IRMG shortwave intercom" + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/ruin/wasteplanet/tradepost/barracks) +"Uo" = ( +/obj/structure/girder/displaced, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"Uu" = ( +/obj/effect/turf_decal/industrial/warning/full, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/pod/dark, +/area/ruin/wasteplanet/tradepost/warehouse) +"UE" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"UG" = ( +/obj/effect/turf_decal/industrial/traffic, +/obj/effect/turf_decal/industrial/caution{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"UQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"US" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ruin/wasteplanet/tradepost/center) +"Vh" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Vi" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/carpet/blue, +/area/ruin/wasteplanet/tradepost/center) +"Vl" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/rack, +/obj/machinery/door/window/southleft, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/item/soap, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost/center) +"Vr" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Vw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/gibspawner/robot, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Vy" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/siding/thinplating{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/line{ + dir = 10 + }, +/obj/structure/table, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"VS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"VT" = ( +/obj/item/stack/ore/salvage/scraptitanium/five, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"VY" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/stack/ore/salvage/scrapgold, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"Wg" = ( +/turf/open/floor/concrete/pavement/wasteplanet/lit, +/area/overmap_encounter/planetoid/wasteplanet/explored) +"Wk" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/closed/wall, +/area/ruin/wasteplanet/tradepost/barracks) +"Wl" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/ruin/wasteplanet/tradepost/center) +"Wr" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Wx" = ( +/obj/machinery/meter/atmos/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost) +"Wy" = ( +/turf/closed/wall, +/area/ruin/wasteplanet/tradepost/center) +"WD" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip2" + }, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"WE" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"WF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 9 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"WG" = ( +/obj/effect/turf_decal/industrial/caution{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/mob_spawn/human/corpse/indie/engineer, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"WK" = ( +/obj/effect/decal/cleanable/molten_object{ + pixel_x = -10; + pixel_y = -1 + }, +/obj/effect/decal/cleanable/molten_object{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip4" + }, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"WL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mob_spawn/human/corpse/indie/engineer, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"WO" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip2" + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip1" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/advanced_airlock_controller{ + pixel_x = -26; + pixel_y = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 8 + }, +/mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged/rapid, +/obj/structure/door_assembly/door_assembly_com, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"WR" = ( +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"WU" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"Xc" = ( +/obj/effect/turf_decal/industrial/warning/full, +/obj/structure/crate_shelf, +/turf/open/floor/pod/dark, +/area/ruin/wasteplanet/tradepost/warehouse) +"Xd" = ( +/obj/structure/catwalk, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"Xf" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "drip2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Xg" = ( +/obj/structure/sign/warning/gasmask{ + pixel_x = -28 + }, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/advanced_airlock_controller{ + pixel_y = 26 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost) +"Xh" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Xo" = ( +/obj/machinery/door/airlock{ + name = "Bathroom"; + id_tag = "but" + }, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/barracks) +"Xq" = ( +/obj/item/radio/weather_monitor, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Xw" = ( +/obj/structure/barricade/sandbags, +/obj/effect/turf_decal/industrial/warning{ + dir = 10 + }, +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Xz" = ( +/obj/structure/barricade/sandbags, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"XB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"XQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating, +/obj/effect/turf_decal/trimline/opaque/yellow/line, +/obj/structure/foamedmetal/iron, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/wasteplanet/tradepost/barracks) +"XS" = ( +/obj/effect/decal/cleanable/oil/streak, +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"XY" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/center) +"Ya" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ + dir = 4 + }, +/turf/open/floor/carpet/blue, +/area/ruin/wasteplanet/tradepost/center) +"Yd" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/pipe_dispenser, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"Yf" = ( +/turf/open/floor/carpet/black, +/area/ruin/wasteplanet/tradepost/barracks) +"Yj" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/structure/sign/poster/contraband/eoehoma{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/wasteplanet/tradepost/barracks) +"Yl" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/walnut, +/area/ruin/wasteplanet/tradepost/center) +"Yt" = ( +/turf/open/floor/concrete/pavement/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Yw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/barracks) +"YC" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/table, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/item/watertank/anti_rad{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/item/clothing/mask/gas/atmos, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost) +"YO" = ( +/obj/structure/cable{ + icon_state = "0-5" + }, +/obj/effect/turf_decal/industrial/warning/full, +/obj/machinery/power/rtg/geothermal, +/turf/open/floor/plating/wasteplanet/rust, +/area/overmap_encounter/planetoid/cave/explored) +"YV" = ( +/obj/item/flashlight/flare/burnt, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Zb" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/wasteplanet/tradepost/barracks) +"Zc" = ( +/obj/effect/turf_decal/industrial/warning/full, +/obj/structure/reagent_dispensers/foamtank/antirad, +/turf/open/floor/pod/dark, +/area/ruin/wasteplanet/tradepost/warehouse) +"Zh" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/marker_beacon, +/turf/open/floor/plating/wasteplanet, +/area/overmap_encounter/planetoid/cave/explored) +"Zj" = ( +/obj/machinery/atmospherics/components/binary/pump/layer2{ + dir = 1; + name = "Waste to Recycling" + }, +/obj/machinery/atmospherics/components/binary/pump/layer4{ + dir = 1; + name = "Distro to Filtration" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light/small/broken/directional/west, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost) +"Zw" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/caution{ + dir = 8 + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/warehouse) +"ZK" = ( +/obj/structure/bed/pod, +/obj/structure/curtain/cloth/grey, +/obj/item/radio/intercom/directional/east, +/obj/item/bedsheet/brown, +/turf/open/floor/carpet/black, +/area/ruin/wasteplanet/tradepost/barracks) +"ZN" = ( +/obj/structure/foamedmetal/iron, +/turf/open/floor/carpet/black, +/area/ruin/wasteplanet/tradepost/barracks) +"ZO" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/door/window/westleft, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/pod, +/area/ruin/wasteplanet/tradepost/center) +"ZT" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/closet/wall/white{ + dir = 8; + pixel_x = 28 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2, +/obj/item/storage/backpack/duffelbag/med/surgery, +/obj/item/storage/firstaid/radiation, +/obj/item/storage/firstaid/radiation, +/obj/item/reagent_containers/hypospray/medipen/anti_rad, +/obj/item/reagent_containers/hypospray/medipen/anti_rad, +/obj/item/reagent_containers/hypospray/medipen/anti_rad, +/obj/item/reagent_containers/hypospray/medipen/anti_rad, +/turf/open/floor/pod/light, +/area/ruin/wasteplanet/tradepost/barracks) + +(1,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Wg +Wg +Wg +em +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +"} +(2,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +em +Wg +Ju +Wg +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +"} +(3,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +Ud +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ml +Wg +Wg +em +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +"} +(4,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +en +Ud +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +em +Wg +Ml +Wg +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +"} +(5,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +en +Ud +Ud +Ma +Ma +Ud +Ud +Ud +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +em +HV +HV +iq +Ml +em +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +"} +(6,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +en +Ud +en +Ud +Ud +Ma +Ud +Ud +Ud +en +Ma +Ma +Ma +Ma +Ma +Ma +Ma +HV +JG +Fc +iq +HV +em +em +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +"} +(7,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +Ud +Ud +Ud +Ud +Ud +en +Ma +Ud +Ud +Ud +Ud +Ma +Ma +Ma +Ma +Ma +sH +em +em +Qn +Wg +kU +em +kU +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +"} +(8,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +en +Ud +Ud +Ud +Ud +Ud +en +Ud +Ud +Ud +Ud +Ud +Ud +Ma +Ma +Ma +Ma +HV +To +em +Ba +Wg +Ml +HV +HV +HV +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +"} +(9,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +en +Ud +Ud +Ud +en +en +en +Ud +Ud +Ud +Ud +Ud +en +Ud +Ud +Ud +Ma +Ma +em +em +gy +HV +em +Wg +Ml +iq +MQ +sH +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +"} +(10,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +Ud +Ud +en +kd +kd +Nl +QB +Nl +en +en +Ud +Ud +en +Ud +Ud +Ud +Ud +QB +QB +Ml +BN +sH +HV +iq +Wg +AT +HV +Fc +em +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +"} +(11,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +en +Ud +Ud +kd +QB +QB +sL +QB +QB +QB +en +en +en +en +en +en +en +en +TB +TB +Xw +QB +Ml +em +iq +Si +Wg +zY +em +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ma +Ma +Ma +Ma +Ma +Ma +"} +(12,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +en +Ud +Ud +Ud +Ud +kd +sL +QB +QB +QB +QB +FP +QB +QB +NC +QB +jy +jy +jy +Xq +WR +Se +cW +QB +QB +IM +OV +AV +oC +HV +Ud +Ud +Ud +Ud +Ud +en +Ud +Ud +Ud +Ma +Ma +Ma +Ma +Ma +"} +(13,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +Ud +Ud +Ud +Ud +en +Rt +Rt +Rt +Rt +Ps +QB +sL +QB +QB +QB +jy +jy +jy +wi +sf +FV +ug +QB +Yt +AV +AV +cJ +cL +Fn +kd +kd +en +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ma +Ma +Ma +Ma +"} +(14,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +en +Ud +Ud +en +Ud +hO +hO +hO +Rt +nO +mK +Rt +Rt +hO +Rt +hO +hO +bm +jy +jy +QR +QB +Ry +QZ +GF +AV +Il +pc +tn +sy +GS +jy +jy +Nl +en +en +Ud +Ud +en +Ud +Ud +Ud +Ma +Ma +Ma +"} +(15,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +Ud +Ud +Rt +hO +sb +wB +Rt +lx +ya +Rt +RR +Vy +hO +Rr +CE +hO +QB +QB +QB +FP +HH +AV +AV +Wr +QZ +QB +ug +Tt +iI +QT +jy +jy +jy +kd +Ud +Ud +Ud +Ud +Ud +Ud +Ma +Ma +Ma +"} +(16,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ud +en +Ud +Ud +Ud +Rt +RV +Yf +hJ +Rt +ZT +zT +wG +Ga +zS +hO +Yj +Gc +hO +QB +br +FZ +QB +qg +Po +ep +nv +ei +QB +QB +WD +WK +lI +QB +sL +QB +kd +Ud +Ud +Ud +Ud +Ud +en +Ud +Ma +Ma +"} +(17,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ud +Ud +Ud +Ud +Ud +Rt +bZ +nt +xm +hO +hO +hO +Rt +su +XQ +hO +vS +nr +hO +QB +QB +Le +Ko +Nu +QZ +uC +IY +uA +ei +Yt +uC +FK +DI +sL +QB +QB +Nl +en +en +en +Ud +Ud +Ud +Ud +Ud +Ma +"} +(18,1,1) = {" +Ma +Ma +Ma +Ma +Ud +Ud +Ud +en +en +en +hO +eH +ZN +wW +Xo +Ji +hO +JB +EF +RI +DB +Yw +DL +hO +QB +QB +Le +Xf +vQ +uC +Yt +QZ +QZ +Jk +Yt +te +Yt +QB +QB +QB +QB +QB +QB +QB +en +Ud +Ud +Ud +Ud +Ud +Ma +"} +(19,1,1) = {" +Ma +Ma +Ma +Ma +en +Ud +Ud +Ud +en +QB +hO +Iq +ZN +wW +Rt +Rt +hO +lB +xx +AI +Ex +vR +Rt +Rt +Yt +XS +vL +Jn +LW +Il +Il +GQ +Wr +Aa +sZ +Jk +Yt +QB +FP +PZ +QB +QB +sL +QB +Nl +en +Ud +Ud +Ud +Ud +Ma +"} +(20,1,1) = {" +Ma +Ma +Ma +Ud +Ud +Ud +en +en +Nl +QB +hO +eH +ZN +dN +RD +mr +PV +DE +rN +EW +wL +jT +Cg +OJ +Nw +ua +fd +Ea +Vh +Il +MS +MS +MS +QB +QB +QB +jy +QB +QB +QB +PZ +QB +sL +QB +QB +Nl +en +Ud +Ud +en +Ud +"} +(21,1,1) = {" +Ma +Ma +Ma +Ud +Ud +Ud +Ud +en +it +FP +Rt +jb +zO +tf +lF +Zb +Rt +lM +Mt +lE +Th +CB +wl +Rt +Um +Il +pk +Cx +Il +MS +UQ +Kp +El +vy +DR +Uo +jy +sL +QB +QB +FP +QB +QB +QB +QB +QB +Nl +en +Ud +Ud +Ud +"} +(22,1,1) = {" +Ma +Ma +Ma +en +Ud +Ud +en +Nl +cD +pb +Rt +ZK +NR +aI +Ho +um +Rt +hO +FI +hO +TS +xF +hO +Ps +QB +uC +pk +GQ +hg +xA +Jf +UQ +QB +QB +vy +jy +jy +QB +QB +QB +QB +QB +QB +QB +sL +QB +FP +Nl +en +Ud +Ud +"} +(23,1,1) = {" +Ma +Ma +Ud +en +Ud +Ud +en +QB +QB +ly +Ps +Rt +hO +hO +hO +Rt +Rt +nU +Nq +pL +Ny +Gl +Pc +QB +Yt +Yt +uV +Ra +xu +zn +VY +vG +Tn +QB +sL +jy +QB +uW +PZ +Zh +Hc +UQ +Zh +sL +uW +QB +QB +QB +en +Ud +Ud +"} +(24,1,1) = {" +Ma +Ma +Ud +Ud +en +en +Nl +QB +sL +QB +QB +QB +QB +QB +QB +QB +hO +qJ +OQ +Wk +yb +QB +Pc +Yt +Yt +uG +xP +Il +MF +tV +Kt +ei +ei +QB +LR +jy +FP +sv +yF +PZ +PZ +PZ +PZ +PZ +sL +QB +QB +Nl +en +Ud +Ud +"} +(25,1,1) = {" +Ma +Ma +Ud +Ud +Ud +kd +QB +QB +FP +QB +QB +QB +ba +UQ +MS +MS +Wk +ip +AQ +Wk +yb +Jh +QB +IM +uG +xP +Yt +VT +QB +LD +bY +WL +yF +PZ +DQ +jy +QB +yJ +sL +PZ +sL +PZ +PZ +sL +EJ +QB +QB +en +Ud +Ud +en +"} +(26,1,1) = {" +Ma +Ud +Ud +Ud +Ud +kd +QB +QB +PZ +QB +sL +QB +QB +QB +QB +QB +Ac +Wk +Wk +Ac +dS +gA +Yt +Yt +pk +Xd +pD +QB +QB +QB +QB +QB +QB +jy +jy +jy +jy +yF +PZ +PZ +sL +PZ +sL +PZ +PZ +PZ +sL +kd +en +Ud +Ud +"} +(27,1,1) = {" +Ma +Ud +en +Ud +ez +ez +ez +Wy +Wy +Wy +Wy +Wy +ez +fU +QB +sL +QB +MS +MS +MS +Ie +km +Yt +GQ +do +Xd +Yt +Yt +Yt +zo +Il +Yt +Hb +vy +Bu +Yt +QZ +QZ +PZ +PZ +sL +sL +sL +PZ +LM +sL +QB +kd +Ud +Ud +Ud +"} +(28,1,1) = {" +Ma +Ud +Ud +ez +fU +Ij +hN +hH +TJ +ez +lj +Vi +nN +ez +fU +QB +QB +QB +QB +Yt +gf +Dk +dF +ua +xP +Yt +Yt +QZ +QZ +dB +lq +AV +AV +wA +eF +LO +sv +Yt +PZ +sL +sL +PZ +sL +sL +PZ +QB +QB +kd +Ud +Ud +Ud +"} +(29,1,1) = {" +Ma +Ud +Ud +Wy +rY +Yl +VS +rb +gC +ez +Gf +ts +Ya +ig +Wy +QB +CG +PZ +Yt +mN +KA +ua +jk +Yt +uC +Yt +Yt +kr +Yt +UG +QZ +QZ +AV +Il +Il +sL +sv +Yt +PZ +sL +sL +PZ +PZ +sL +PZ +FP +QB +en +Ud +Ud +Ud +"} +(30,1,1) = {" +Ud +en +Ud +Wy +SP +Kk +Mr +Fy +Hn +Wy +NK +wM +aS +Mb +Wy +QB +QB +QB +Yt +GB +gw +Il +Yt +QB +QB +Yt +QB +Hc +QB +QB +CA +CA +CA +MS +ba +QB +QB +LM +PZ +PZ +sL +PZ +sL +PZ +EJ +sL +QB +en +Ud +en +Ud +"} +(31,1,1) = {" +Ud +Ud +Ud +Wy +vr +vi +vi +QL +sA +Wy +Wy +Wy +Fb +tz +Wy +as +PZ +QB +km +AP +ra +Il +QB +QB +FP +QB +QB +gh +zD +pl +DG +CC +aj +zD +zD +gh +QB +sL +sL +sL +PZ +sL +sL +PZ +sL +QB +QB +en +Ud +Ud +Ud +"} +(32,1,1) = {" +Ud +Ud +Ud +ez +Cf +mI +aQ +qy +fU +ez +Kx +Wy +Eu +oQ +Lm +Wy +QB +FP +Yt +Ft +Ae +Yt +Yt +Yt +gh +zD +zD +zD +zq +ch +pQ +fe +Gp +Np +uf +zD +QB +EJ +PZ +sL +PZ +sL +sL +sL +EJ +QB +QB +en +Ud +Ud +Ud +"} +(33,1,1) = {" +en +Ud +Ud +Wy +Wy +OI +Wy +Dl +ez +QK +xv +qk +ro +uo +xX +Wy +QB +QB +Yt +lY +bH +hX +lv +ef +Jb +wm +AH +gj +aB +Pt +Hy +Hy +uN +ED +Zc +pl +QB +sL +sL +PZ +PZ +sL +sL +PZ +sL +sL +sL +kd +Ud +Ud +Ud +"} +(34,1,1) = {" +Ud +Ud +Ud +Wy +Cj +ML +lf +Qe +hE +Oy +Rk +fU +ez +ez +Wy +Wy +Wy +Hv +Ki +QZ +hV +Yt +Yt +Yt +gZ +zD +pl +zD +hn +uw +lQ +dd +Uu +bW +tp +zD +QB +uW +sL +uW +SE +Hc +uW +sL +EJ +QB +QB +kd +Ud +Ud +Ud +"} +(35,1,1) = {" +Ud +Ud +Ud +ez +la +ta +pe +RK +kx +SF +fr +bM +tL +Fx +qw +sN +WO +hW +Ak +PY +jn +QB +QB +QB +QB +zD +Jm +bz +In +In +Xc +Xc +Xc +kf +iy +zD +QB +QB +QB +QB +QB +FP +QB +QB +QB +sL +QB +kd +Ud +en +Ud +"} +(36,1,1) = {" +Ud +Ud +Ud +ez +sS +IN +dD +gI +Gt +ds +DS +zM +xQ +bj +IF +Re +dr +OB +kP +nL +XB +QB +QB +FP +QB +zD +iX +In +MA +Jv +IA +qr +CD +TD +ze +pl +FP +QB +jy +DR +jy +jy +jy +QB +QB +QB +Nl +en +Ud +Ud +Ud +"} +(37,1,1) = {" +Ud +Ud +Ud +ez +ez +IH +ru +Of +xM +Jt +Xz +ND +ag +ht +Wy +Wy +Wy +as +kP +AV +Vw +CI +QB +QB +QB +zD +cC +sT +Tk +Zw +hU +KZ +PI +kt +tU +pl +QB +jy +bY +QB +QB +QB +sL +bY +QB +QB +en +Ud +Ud +Ud +Ud +"} +(38,1,1) = {" +Ma +Ud +Ud +Ud +ez +ox +QE +et +nn +jD +TT +XY +hD +oz +MU +If +If +If +eq +AV +yt +Yt +QB +QB +EM +gZ +zD +zD +pl +pm +KG +zD +zD +pl +zD +gh +QB +DR +sL +Ei +QB +YO +QB +jy +QB +Nl +en +Ud +Ud +Ud +Ma +"} +(39,1,1) = {" +Ma +Ud +Ud +Ud +Wy +Ri +xw +gP +mC +ir +pT +nJ +Ni +Kr +Wy +QB +sL +FP +aM +cH +gl +yZ +IM +CI +Xd +Xd +CI +CI +Yt +SI +WE +Ah +Vr +yI +yI +Tz +ft +Tz +qM +Tz +TC +sL +QB +jy +QB +kd +Ud +Ud +Ud +Ud +Ma +"} +(40,1,1) = {" +Ma +Ud +Ud +Ud +Wy +ez +Wy +Wy +rB +Wy +Wy +Wy +ZO +Wy +as +QB +QB +Nh +QB +Bk +Yt +vz +ua +ua +ua +Rj +ua +rl +Jp +Cq +WF +pj +CI +Xd +CI +QB +PZ +QB +QB +CV +sL +QB +QB +Nl +kd +en +Ud +en +Ud +Ud +Ma +"} +(41,1,1) = {" +Ma +Ud +Ud +Ud +Ud +Ud +ez +Vl +JL +HK +BK +Wy +ez +as +RB +xV +Oi +xV +ed +UE +QB +Yt +sL +UQ +Il +mo +Yt +Yt +rQ +Cb +Yt +pj +CI +CI +CI +QB +sL +QB +sL +sL +QB +FP +Nl +en +Ud +Ud +Ud +Ud +Ud +Ud +Ma +"} +(42,1,1) = {" +Ma +Ma +Ud +Ud +Ud +Ud +ez +Ig +aF +fY +US +ez +QB +jy +QB +ib +Yd +QB +Kl +No +LR +sL +QB +QB +ew +WG +Yt +Yt +qi +Yt +QB +Le +bJ +PZ +PZ +Uo +QB +bY +QB +QB +jy +jy +en +Ud +Ud +Ud +Ud +Ud +Ud +Ma +Ma +"} +(43,1,1) = {" +Ma +Ma +Ud +Ud +Ud +Ud +fU +ez +je +uS +Wl +ez +QB +vy +sL +dw +jy +jy +Kl +sL +PZ +sL +PZ +cs +qb +zA +nb +ew +yb +QB +QB +fs +sL +PZ +QB +sL +sL +QB +QB +jy +jy +Nl +en +Ud +en +Ud +Ud +Ud +Ud +Ma +Ma +"} +(44,1,1) = {" +Ma +Ma +Ma +Ud +Ud +Ud +Ud +ez +ez +ez +ez +fU +QB +PZ +UQ +DR +Uo +jy +Kl +vy +DR +sL +QB +Tg +Xg +lp +qb +QB +yb +sL +QB +Du +kM +QB +QB +QB +PZ +QB +QB +jy +Nl +en +Ud +Ud +Ud +Ud +en +Ud +Ud +Ma +Ma +"} +(45,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ud +Ud +Nl +en +QB +QB +QB +YV +DQ +MS +QB +PZ +FP +Fe +en +qb +qb +qb +nb +sx +qb +qb +qb +yb +LD +bY +WU +QB +yf +LV +FP +sL +PZ +QB +Nl +en +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ma +Ma +Ma +"} +(46,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ud +en +Ud +en +Nl +QB +FP +QB +QB +sL +Xh +lw +vG +JR +ho +dE +Rg +Mm +Zj +ks +Wx +vK +FG +eS +QB +QB +qR +yf +yf +QB +QB +QB +Uo +Nl +en +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ma +Ma +Ma +"} +(47,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +Ud +en +QB +QB +YV +sL +FP +lX +PZ +QB +aR +ho +dE +KF +mt +Sw +RA +Fd +YC +qb +uy +QB +QB +HE +yf +QB +QB +QB +jy +Nl +en +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ma +Ma +Ma +Ma +"} +(48,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +Ud +en +Nl +QB +QB +QB +sL +QB +PZ +QB +sL +ho +dE +qp +yd +Kw +HO +ub +Sd +qb +QB +PZ +QB +uU +LK +ty +CK +QB +jy +en +Ud +Ud +Ud +Ud +Kf +Ud +en +Ud +Ud +Ma +Ma +Ma +Ma +"} +(49,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +Ud +kd +kd +QB +QB +Uo +FP +PZ +QB +sL +kd +qb +nb +qV +mA +Ty +cq +LY +qb +QB +QB +QB +QB +QB +sL +QB +jy +jy +en +Ud +en +Ud +Ud +Ma +Ud +Ud +Ud +Ma +Ma +Ma +Ma +Ma +"} +(50,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +Ud +Ud +kd +Nl +sL +QB +PZ +Uo +QB +QB +QB +QB +nb +Qb +Cc +Dw +cZ +vu +qb +bY +QB +FP +PZ +sL +jy +jy +jy +Nl +en +Ud +Ud +Ud +Ma +Ma +Ma +Ud +Ud +Ma +Ma +Ma +Ma +Ma +"} +(51,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +Ud +Ud +en +Nl +QB +QB +sL +YV +QB +QB +QB +cs +nb +nb +nb +qb +qb +cs +QB +QB +QB +jy +jy +jy +Nl +en +en +Ud +Ud +Ud +Ud +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +"} +(52,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +en +Ud +en +QB +Nl +en +en +en +en +en +en +Ud +Ud +Ud +Ud +Ud +kd +kd +kd +kd +kd +kd +kd +en +Ud +Ud +Ud +Ud +Ud +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +"} +(53,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +Ud +en +en +en +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +en +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +en +Ud +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +"} +(54,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +Ud +Ud +Ud +Ud +Ud +en +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +en +Ud +Ud +en +Ud +Ud +Ud +Ud +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +"} +(55,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +Ud +Ud +Ud +Ud +Ud +en +Ud +Ud +Ud +Ud +Ud +Ud +Ud +en +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +"} +(56,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +Ud +en +Ud +Ud +Ud +Ud +Ud +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +"} +(57,1,1) = {" +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ud +Ud +Ud +Ud +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +"} diff --git a/code/datums/ruins/wasteplanet.dm b/code/datums/ruins/wasteplanet.dm index a4a054a7f1a2..66bd3841ec6b 100644 --- a/code/datums/ruins/wasteplanet.dm +++ b/code/datums/ruins/wasteplanet.dm @@ -32,9 +32,16 @@ suffix = "wasteplanet_abandoned_mechbay.dmm" ruin_tags = list(RUIN_TAG_BOSS_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_SHELTER, RUIN_TAG_HAZARDOUS) +/datum/map_template/ruin/wasteplanet/tradepost + name = "Ruined Tradepost" + description = "Formerly a functioning, if not thriving tradepost. Now a graveyard of Inteq soldiers and hivebots." + id = "wasteplanet_tradepost" + suffix = "wasteplanet_tradepost.dmm" + /datum/map_template/ruin/wasteplanet/yard name = "Abandoned Miskilamo salvage yard" description = "An abandonded shipbreaking yard." id = "wasteplanet_yard" suffix = "wasteplanet_yard.dmm" + ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_SHELTER, RUIN_TAG_HAZARDOUS) diff --git a/code/game/area/areas/ruins/wasteplanet.dm b/code/game/area/areas/ruins/wasteplanet.dm index 5f069d3e055b..6744e36f20c7 100644 --- a/code/game/area/areas/ruins/wasteplanet.dm +++ b/code/game/area/areas/ruins/wasteplanet.dm @@ -44,6 +44,20 @@ name = "Abandoned Waste Containment Vault" icon_state = "disposal" +//Wasteplanet_Tradepost + +/area/ruin/wasteplanet/tradepost/barracks + name = "Abandoned Barracks" + icon_state = "red" + +/area/ruin/wasteplanet/tradepost/center + name = "Abandoned Dome" + icon_state = "bridge" + +/area/ruin/wasteplanet/tradepost/warehouse + name = "Abandoned Warehouse" + icon_state = "dk_yellow" + //Abandonded shipbreaking yard /area/ruin/wasteplanet/wasteplanet_shipbreaking diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 161fc819b4a6..b0239c8f5fdd 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -124,6 +124,7 @@ /obj/effect/spawner/lootdrop/grille_or_trash name = "maint grille or trash spawner" loot = list(/obj/structure/grille = 5, + /obj/item/flashlight/flare/burnt = 1, /obj/item/cigbutt = 1, /obj/item/trash/cheesie = 1, /obj/item/trash/candy = 1, @@ -1016,6 +1017,7 @@ loot = list( /obj/structure/grille/broken = 5, /obj/structure/grille = 5, + /obj/item/flashlight/flare/burnt = 1, /obj/item/cigbutt = 1, /obj/item/trash/cheesie = 1, /obj/item/trash/candy = 1, @@ -1048,6 +1050,7 @@ /obj/effect/spawner/lootdrop/waste/trash //debatable if this is actually loot loot = list( + /obj/item/flashlight/flare/burnt = 30, /obj/effect/decal/cleanable/greenglow/filled = 30, /obj/effect/decal/cleanable/greenglow/ecto = 1, /obj/effect/decal/cleanable/glass = 30, diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index a9f28d88caed..26b23c509838 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -259,13 +259,13 @@ /obj/item/flashlight/flare name = "flare" - desc = "A red Nanotrasen issued flare. There are instructions on the side, it reads 'pull cord, make light'." + desc = "A generic red flare. There are instructions on the side, it reads 'pull cord, make light'." w_class = WEIGHT_CLASS_SMALL light_range = 7 // Pretty bright. icon_state = "flare" item_state = "flare" actions_types = list() - var/fuel = 0 + var/fuel = 900 var/on_damage = 7 var/produce_heat = 1500 heat = 1000 @@ -275,9 +275,14 @@ light_color = "#FA421A" //Cit lighting light_power = 0.8 //Cit lighting +/obj/item/flashlight/flare/burnt + desc = "A burnt out red flare." + icon_state = "flare-empty" + fuel = 0 + grind_results = list(/datum/reagent/sulfur = 2) + /obj/item/flashlight/flare/Initialize() . = ..() - fuel = rand(800, 1000) // Sorry for changing this so much but I keep under-estimating how long X number of ticks last in seconds. /obj/item/flashlight/flare/process() open_flame(heat) diff --git a/code/game/turfs/open/floor/plating/wasteplanet.dm b/code/game/turfs/open/floor/plating/wasteplanet.dm index 7d839b66932d..d47a1fbfc6cb 100644 --- a/code/game/turfs/open/floor/plating/wasteplanet.dm +++ b/code/game/turfs/open/floor/plating/wasteplanet.dm @@ -32,31 +32,56 @@ desc = "Corrupted steel." icon_state = "plating_rust" -/turf/open/floor/wood/waste - initial_gas_mix = WASTEPLANET_DEFAULT_ATMOS - planetary_atmos = TRUE - /turf/open/indestructible/hierophant/waste initial_gas_mix = WASTEPLANET_DEFAULT_ATMOS planetary_atmos = TRUE + light_color = LIGHT_COLOR_FLARE /turf/open/indestructible/hierophant/two/waste initial_gas_mix = WASTEPLANET_DEFAULT_ATMOS planetary_atmos = TRUE light_color = LIGHT_COLOR_FLARE -/turf/open/water/waste +/turf/open/floor/wood/waste initial_gas_mix = WASTEPLANET_DEFAULT_ATMOS planetary_atmos = TRUE -/turf/open/floor/plating/grass/wasteplanet - icon_state = "junglegrass" +///Cement Turfs + +/turf/open/floor/concrete/wasteplanet initial_gas_mix = WASTEPLANET_DEFAULT_ATMOS planetary_atmos = TRUE + baseturfs = /turf/open/floor/plating/asteroid/wasteplanet -/turf/open/floor/plating/dirt/old/waste +/turf/open/floor/concrete/wasteplanet/Initialize() + . = ..() + icon_state = pick(list( + "conc_smooth", + "conc_slab_1", + "conc_slab_2", + "conc_slab_3", + "conc_slab_4", + "conc_tiles" + )) + +/turf/open/floor/concrete/wasteplanet/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) + return + +/turf/open/floor/concrete/reinforced/wasteplanet initial_gas_mix = WASTEPLANET_DEFAULT_ATMOS planetary_atmos = TRUE + baseturfs = /turf/open/floor/plating/asteroid/wasteplanet + +/turf/open/floor/concrete/reinforced/wasteplanet/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) + return + +/turf/open/floor/concrete/pavement/wasteplanet + initial_gas_mix = WASTEPLANET_DEFAULT_ATMOS + planetary_atmos = TRUE + baseturfs = /turf/open/floor/plating/asteroid/wasteplanet + +/turf/open/floor/concrete/pavement/wasteplanet/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) + return /turf/open/floor/plasteel/wasteplanet initial_gas_mix = WASTEPLANET_DEFAULT_ATMOS @@ -128,11 +153,33 @@ light_power = 0.2 light_color = LIGHT_COLOR_FLARE -/turf/open/water/waste/lit //do not drink +/turf/open/floor/concrete/wasteplanet/lit light_range = 2 light_power = 0.2 light_color = LIGHT_COLOR_FLARE +/turf/open/floor/concrete/reinforced/wasteplanet/lit + light_range = 2 + light_power = 0.2 + light_color = LIGHT_COLOR_FLARE + +/turf/open/floor/concrete/pavement/wasteplanet/lit + light_range = 2 + light_power = 0.2 + light_color = LIGHT_COLOR_FLARE + +///Biological Turfs + +/turf/open/floor/plating/grass/wasteplanet + icon_state = "junglegrass" + initial_gas_mix = WASTEPLANET_DEFAULT_ATMOS + planetary_atmos = TRUE + +/turf/open/floor/plating/dirt/old/waste + initial_gas_mix = WASTEPLANET_DEFAULT_ATMOS + planetary_atmos = TRUE + baseturfs = /turf/open/floor/plating/asteroid/wasteplanet + /turf/open/floor/plating/dirt/old/waste/lit light_range = 2 light_power = 0.2 @@ -143,6 +190,13 @@ light_power = 0.2 light_color = LIGHT_COLOR_FLARE +/turf/open/water/waste/lit //do not drink + light_range = 2 + light_power = 0.2 + light_color = LIGHT_COLOR_FLARE + +//cement + /turf/open/floor/concrete/wasteplanet/lit light_range = 2 light_power = 0.2 diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index 74ed8ce30fbd..c4ea06ac3e03 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -32,6 +32,12 @@ GLOBAL_LIST_INIT(marker_beacon_colors, sortList(list( /obj/item/stack/marker_beacon/thirty //and they're bought in stacks of 1, 10, or 30 amount = 30 +/obj/item/stack/marker_beacon/ten + amount = 10 + +/obj/item/stack/marker_beacon/thirty + amount = 30 + /obj/item/stack/marker_beacon/Initialize(mapload) . = ..() update_appearance() diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm index c57db3fe3a85..7779c09e8bf9 100644 --- a/code/modules/mob/living/simple_animal/corpse.dm +++ b/code/modules/mob/living/simple_animal/corpse.dm @@ -270,6 +270,38 @@ outfit = /datum/outfit/job/solgov/sonnensoldner id_access_list = list(ACCESS_SOLGOV) +//inteq + +/obj/effect/mob_spawn/human/corpse/inteq + name = "Avery Inteq" + +/obj/effect/mob_spawn/human/corpse/inteq/recruit + name = "IRMG Recruit" + id_job = "Recruit" + outfit = /datum/outfit/job/inteq/assistant + +/obj/effect/mob_spawn/human/corpse/inteq/medic + name = "IRMG Corpsman" + id_job = "Corpsman" + outfit = /datum/outfit/job/inteq/paramedic + +/obj/effect/mob_spawn/human/corpse/inteq/enforcer + name = "IRMG Enforcer" + id_job = "Enforcer" + outfit = /datum/outfit/job/inteq/security + +/obj/effect/mob_spawn/human/corpse/inteq/vanguard + name = "IRMG Vanguard" + id_job = "Vanguard" + outfit = /datum/outfit/job/inteq/captain + +/obj/effect/mob_spawn/human/corpse/inteq/artificer + name = "IRMG Artificer" + id_job = "Artificer" + outfit = /datum/outfit/job/inteq/engineer + +/* SRM */ + /obj/effect/mob_spawn/human/corpse/srm/hunter name = "SRM Hunter" id_job = "Hunter" diff --git a/code/modules/ruins/wasteplanet_ruin_code/tradepost.dm b/code/modules/ruins/wasteplanet_ruin_code/tradepost.dm new file mode 100644 index 000000000000..5369d0e2f2d1 --- /dev/null +++ b/code/modules/ruins/wasteplanet_ruin_code/tradepost.dm @@ -0,0 +1,61 @@ +/obj/item/tape/random/preset/tradepost/one + ruined = 1 + used_capacity = 120 + +/obj/item/tape/random/preset/tradepost/one/Initialize() + . = ..() + storedinfo = list( + "\[00:00\] Recording started.", + "\[00:06\] [span_name("firm elzousa")] drawls \"Now I figure that... give or take a few months a' tradin out here, I'll 'ave enough money t' pay you boys forra 'nother year.\"", + "\[00:14\] [span_name("muffled rachnid woman")] declares \"Caelum. If you don't have payment rendered soon we this contract is called.\"", + "\[00:23\] [span_name("firm elzousa")] drawls \"I know. I know. I gotcha few more weeks of pay annif I don' make any trades, then 's done.\"", + "\[00:32\] [span_name("firm elzousa")] drawls \"Don'tcha wave those things at me.\"", + "\[00:37\] [span_name("muffled rachnid woman")] declares \"You have two weeks. My enforcers are reporting that the area is drawing the attention of scrapbots.\"", + "\[00:46\] [span_name("muffled rachnid woman")] declares \"If we don't have the money to buy more ammo, I don't need to tell you what'll happen.\"", + "\[00:50\] [span_name("firm elzousa")] lets out a sigh.", + "\[00:53\] [span_name("firm elzousa")] drawls \" Cour ma'am. Cour. \"", + ) + timestamp = list( + 0, + 6, + 14, + 23, + 32, + 37, + 46, + 50, + 53 + ) + +/obj/effect/mob_spawn/human/corpse/inteq/medic/tradepost + mob_name = "Jenny Amasatsu" + brute_damage = 140 + burn_damage = 78 + mob_gender = FEMALE + outfit = /datum/outfit/job/inteq/paramedic/tradepost + +/obj/effect/mob_spawn/human/corpse/inteq/vanguard/tradepost + outfit = /datum/outfit/job/inteq/captain/tradepost + mob_species = /datum/species/spider + gender = FEMALE + +/obj/effect/mob_spawn/human/corpse/indie/engineer + outfit = /datum/outfit/job/independent/engineer + +/obj/effect/mob_spawn/human/corpse/indie/manager + outfit = /datum/outfit/job/independent/captain/manager + mob_species = /datum/species/elzuose + backpack_contents = null + + +/datum/outfit/job/inteq/paramedic/tradepost + name = "Trade Post Corpsman" + belt = /obj/item/storage/belt/medical/webbing + +/datum/outfit/job/inteq/captain/tradepost + name = "Trade Post Vanguard" + + r_pocket = null + l_pocket = null + + backpack_contents = null diff --git a/shiptest.dme b/shiptest.dme index 2cba7a81ed2d..6198fe0b1146 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -3261,6 +3261,7 @@ #include "code\modules\ruins\objects_and_mobs\sin_ruins.dm" #include "code\modules\ruins\spaceruin_code\bigderelict1.dm" #include "code\modules\ruins\spaceruin_code\TheDerelict.dm" +#include "code\modules\ruins\wasteplanet_ruin_code\tradepost.dm" #include "code\modules\screen_alerts\_screen_alerts.dm" #include "code\modules\security_levels\keycard_authentication.dm" #include "code\modules\security_levels\security_levels.dm" From 71980b415a12ea930ee08e5afe0cd0306a1d69d9 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 23 Oct 2024 19:30:58 -0500 Subject: [PATCH 092/274] Automatic changelog generation for PR #3367 [ci skip] --- html/changelogs/AutoChangeLog-pr-3367.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3367.yml diff --git a/html/changelogs/AutoChangeLog-pr-3367.yml b/html/changelogs/AutoChangeLog-pr-3367.yml new file mode 100644 index 000000000000..b6e6ba25d3c7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3367.yml @@ -0,0 +1,6 @@ +author: Erika Fox +changes: + - {rscadd: An abandoned tradepost has been located in the system. Investigate nearby + waste worlds for more information.} + - {rscadd: preburnt flares} +delete-after: true From 90546d96d957cdd2c5b203e66da5144204fc5c5c Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 24 Oct 2024 01:02:30 +0000 Subject: [PATCH 093/274] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-3367.yml | 6 ------ html/changelogs/AutoChangeLog-pr-3458.yml | 5 ----- html/changelogs/AutoChangeLog-pr-3590.yml | 4 ---- html/changelogs/AutoChangeLog-pr-3620.yml | 4 ---- html/changelogs/archive/2024-10.yml | 11 +++++++++++ 5 files changed, 11 insertions(+), 19 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-3367.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3458.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3590.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3620.yml diff --git a/html/changelogs/AutoChangeLog-pr-3367.yml b/html/changelogs/AutoChangeLog-pr-3367.yml deleted file mode 100644 index b6e6ba25d3c7..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3367.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Erika Fox -changes: - - {rscadd: An abandoned tradepost has been located in the system. Investigate nearby - waste worlds for more information.} - - {rscadd: preburnt flares} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3458.yml b/html/changelogs/AutoChangeLog-pr-3458.yml deleted file mode 100644 index b07f4c9600a7..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3458.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Erikafox -changes: - - {rscadd: Kasagi-Fischer has begun a new production run of the venerable Raleigh-class - Corvette. See your purchaser's manual for more information!} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3590.yml b/html/changelogs/AutoChangeLog-pr-3590.yml deleted file mode 100644 index b91d7074e93c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3590.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Erikafox -changes: - - {balance: Fireaxes on the black market now cost less. Thanks Kiirv-Waha!} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3620.yml b/html/changelogs/AutoChangeLog-pr-3620.yml deleted file mode 100644 index a200fa593b23..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3620.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: FalloutFalcon -changes: - - {code_imp: better pr labeling for ships and ruins} -delete-after: true diff --git a/html/changelogs/archive/2024-10.yml b/html/changelogs/archive/2024-10.yml index 9ce5e59b372c..2e75ce1afc4e 100644 --- a/html/changelogs/archive/2024-10.yml +++ b/html/changelogs/archive/2024-10.yml @@ -322,3 +322,14 @@ Indies and whatnot - rscdel: Most Nanotrasen ERTs have been shelved pending assets - rscdel: Smokebomb randomized descriptions +2024-10-24: + Erika Fox: + - rscadd: An abandoned tradepost has been located in the system. Investigate nearby + waste worlds for more information. + - rscadd: preburnt flares + Erikafox: + - rscadd: Kasagi-Fischer has begun a new production run of the venerable Raleigh-class + Corvette. See your purchaser's manual for more information! + - balance: Fireaxes on the black market now cost less. Thanks Kiirv-Waha! + FalloutFalcon: + - code_imp: better pr labeling for ships and ruins From 102b175467a2650f8a1507eddd37d57684b3c673 Mon Sep 17 00:00:00 2001 From: Theos Date: Thu, 24 Oct 2024 06:15:06 -0400 Subject: [PATCH 094/274] Simple human armor now draws its values from real armor (#3592) ## About The Pull Request Simple humans now pull armor values from armor, currently set as whatever they appear to be wearing The armor_base variable has a vv intercept to update armor values automatically for bus ## Why It's Good For The Game Intuitive that the guy wearing super heavy armor dies to AP rounds and not 3 shotgun shells ## Changelog :cl: balance: simple humans now have as much health as normal humans! This makes them weaker! balance: simple humans now also benefit from their armor as much as normal humans! This makes them stronger! /:cl: --------- Signed-off-by: Theos Signed-off-by: rye-rice <58402542+rye-rice@users.noreply.github.com> Co-authored-by: Mark Suckerberg Co-authored-by: rye-rice <58402542+rye-rice@users.noreply.github.com> --- .../hostile/human/frontiersman.dm | 13 ++++--- .../simple_animal/hostile/human/human.dm | 23 +++++++++++ .../simple_animal/hostile/human/nanotrasen.dm | 4 +- .../simple_animal/hostile/human/pirate.dm | 2 + .../simple_animal/hostile/human/survivors.dm | 1 + .../simple_animal/hostile/human/syndicate.dm | 38 +++++++------------ .../simple_animal/hostile/human/zombie.dm | 3 +- .../hostile/mining_mobs/mining_mobs.dm | 13 ------- .../mob/living/simple_animal/simple_animal.dm | 15 ++++++++ 9 files changed, 64 insertions(+), 48 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm b/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm index 8fd800b83f83..593c33642b5f 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm @@ -66,6 +66,7 @@ casingtype = null ranged_message = "fires the syringe gun at" ranged_cooldown_time = 30 + armor_base = /obj/item/clothing/suit/frontiersmen /mob/living/simple_animal/hostile/human/frontier/ranged/surgeon/neuter loot = list(/obj/effect/mob_spawn/human/corpse/frontier/surgeon) @@ -115,12 +116,11 @@ /mob/living/simple_animal/hostile/human/frontier/ranged/trooper icon_state = "frontiersmanrangedelite" icon_living = "frontiersmanrangedelite" - maxHealth = 170 - health = 170 projectilesound = 'sound/weapons/gun/shotgun/shot.ogg' casingtype = /obj/item/ammo_casing/shotgun/buckshot loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper, /obj/item/gun/ballistic/shotgun/brimstone) + armor_base = /obj/item/clothing/suit/armor/vest/bulletproof/frontier /mob/living/simple_animal/hostile/human/frontier/ranged/trooper/internals icon_state = "frontiersmanrangedelite_mask" @@ -155,6 +155,7 @@ projectiletype = null projectilesound = 'sound/weapons/gun/flamethrower/flamethrower1.ogg' casingtype = null + armor_base = /obj/item/clothing/suit/armor/frontier/fireproof /mob/living/simple_animal/hostile/human/frontier/ranged/trooper/flame/OpenFire() var/turf/T = get_ranged_target_turf_direct(src, target, 4) @@ -176,6 +177,7 @@ casingtype = /obj/item/ammo_casing/a762_40 loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper, /obj/item/gun/ballistic/automatic/assault/skm) + armor_base = /obj/item/clothing/suit/armor/vest/bulletproof/frontier /mob/living/simple_animal/hostile/human/frontier/ranged/trooper/skm/internals icon_state = "frontiersmanrangedak47_mask" @@ -203,6 +205,7 @@ /obj/item/gun/ballistic/rifle/illestren) casingtype = /obj/item/ammo_casing/a8_50r projectilesound = 'sound/weapons/gun/rifle/mosin.ogg' + armor_base = /obj/item/clothing/suit/armor/vest/bulletproof/frontier /mob/living/simple_animal/hostile/human/frontier/ranged/trooper/rifle/internals icon_state = "frontiersmanrangedmosin_mask" @@ -226,13 +229,12 @@ icon_state = "frontiersmanrangedminigun" icon_living = "frontiersmanrangedminigun" projectilesound = 'sound/weapons/laser4.ogg' - maxHealth = 260 - health = 260 rapid = 6 rapid_fire_delay = 1.5 casingtype = null projectiletype = /obj/projectile/beam/weak/penetrator loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper/heavy) + armor_base = /obj/item/clothing/suit/space/hardsuit/security/independent/frontier /mob/living/simple_animal/hostile/human/frontier/ranged/trooper/heavy/internals icon_state = "frontiersmanrangedminigun_mask" @@ -256,13 +258,12 @@ name = "Frontiersman Officer" icon_state = "frontiersmanofficer" icon_living = "frontiersmanofficer" - maxHealth = 65 - health = 65 rapid = 4 projectilesound = 'sound/weapons/gun/pistol/mauler.ogg' casingtype = /obj/item/ammo_casing/c9mm loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/officer, /obj/item/gun/ballistic/automatic/pistol/mauler) + armor_base = /obj/item/clothing/suit/armor/frontier /mob/living/simple_animal/hostile/human/frontier/ranged/officer/internals icon_state = "frontiersmanofficer_mask" diff --git a/code/modules/mob/living/simple_animal/hostile/human/human.dm b/code/modules/mob/living/simple_animal/hostile/human/human.dm index fe90db49e618..1efe7c02b261 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/human.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/human.dm @@ -38,3 +38,26 @@ footstep_type = FOOTSTEP_MOB_SHOE faction = list("hermit") + + ///Steals the armor datum from this type of armor + var/obj/item/clothing/armor_base + +/mob/living/simple_animal/hostile/human/Initialize() + . = ..() + if(ispath(armor_base, /obj/item/clothing)) + //sigh. if only we could get the initial() value of list vars + var/obj/item/clothing/instance = new armor_base() + armor = instance.armor + qdel(instance) + +/mob/living/simple_animal/hostile/human/vv_edit_var(var_name, var_value) + switch(var_name) + if (NAMEOF(src, armor_base)) + if(ispath(var_value, /obj/item/clothing)) + var/obj/item/clothing/temp = new var_value + armor = temp.armor + qdel(temp) + datum_flags |= DF_VAR_EDITED + return TRUE + return FALSE + . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/human/nanotrasen.dm b/code/modules/mob/living/simple_animal/hostile/human/nanotrasen.dm index 96b7c3f3a4e0..5898a9c75ea7 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/nanotrasen.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/nanotrasen.dm @@ -10,6 +10,7 @@ faction = list(ROLE_DEATHSQUAD) check_friendly_fire = TRUE dodging = TRUE + armor_base = /obj/item/clothing/suit/armor/vest /mob/living/simple_animal/hostile/human/nanotrasen/screaming icon_state = "nanotrasen" @@ -61,8 +62,6 @@ icon = 'icons/mob/simple_human.dmi' icon_state = "nanotrasen_ert" icon_living = "nanotrasen_ert" - maxHealth = 150 - health = 150 melee_damage_lower = 13 melee_damage_upper = 18 ranged = TRUE @@ -77,3 +76,4 @@ projectilesound = 'sound/weapons/laser.ogg' loot = list(/obj/effect/gibspawner/human) faction = list(ROLE_DEATHSQUAD) + armor_base = /obj/item/clothing/suit/space/hardsuit/ert/sec diff --git a/code/modules/mob/living/simple_animal/hostile/human/pirate.dm b/code/modules/mob/living/simple_animal/hostile/human/pirate.dm index b5cdd48e7788..1a30b46f263e 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/pirate.dm @@ -33,6 +33,7 @@ atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 speed = 1 + armor_base = /obj/item/clothing/suit/space /mob/living/simple_animal/hostile/human/pirate/melee/space/Initialize() . = ..() @@ -73,6 +74,7 @@ atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 speed = 1 + armor_base = /obj/item/clothing/suit/space /mob/living/simple_animal/hostile/human/pirate/ranged/space/Initialize() . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/human/survivors.dm b/code/modules/mob/living/simple_animal/hostile/human/survivors.dm index d03f0be88083..8cfeeff0695a 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/survivors.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/survivors.dm @@ -7,6 +7,7 @@ loot = list( /obj/effect/mob_spawn/human/corpse/damaged/whitesands ) + armor_base = /obj/item/clothing/suit/hooded/survivor /mob/living/simple_animal/hostile/human/hermit/survivor/death(gibbed) move_force = MOVE_FORCE_DEFAULT diff --git a/code/modules/mob/living/simple_animal/hostile/human/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/human/syndicate.dm index 3f81cd145dcd..8ef8d1ef510f 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/syndicate.dm @@ -19,6 +19,7 @@ check_friendly_fire = TRUE dodging = TRUE rapid_melee = 2 + armor_base = /obj/item/clothing/suit/armor/vest ///////////////Melee//////////// @@ -26,12 +27,11 @@ icon_state = "syndicate_space" icon_living = "syndicate_space" name = "Ramzi Clique Commando" - maxHealth = 170 - health = 170 atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1000 speed = 1 + armor_base = /obj/item/clothing/suit/space/hardsuit/syndi /mob/living/simple_animal/hostile/human/syndicate/space/Initialize() . = ..() @@ -42,8 +42,7 @@ icon_state = "syndicate_stormtrooper" icon_living = "syndicate_stormtrooper" name = "Ramzi Clique Assault Trooper" - maxHealth = 250 - health = 250 + armor_base = /obj/item/clothing/suit/space/hardsuit/syndi/elite /mob/living/simple_animal/hostile/human/syndicate/melee //dude with a knife and no shields melee_damage_lower = 15 @@ -61,13 +60,11 @@ icon_state = "syndicate_space_knife" icon_living = "syndicate_space_knife" name = "Ramzi Clique Commando" - maxHealth = 170 - health = 170 - atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1000 speed = 1 projectile_deflect_chance = 50 + armor_base = /obj/item/clothing/suit/space/hardsuit/syndi /mob/living/simple_animal/hostile/human/syndicate/melee/space/Initialize() . = ..() @@ -78,9 +75,8 @@ icon_state = "syndicate_stormtrooper_knife" icon_living = "syndicate_stormtrooper_knife" name = "Ramzi Clique Stormtrooper" - maxHealth = 250 - health = 250 projectile_deflect_chance = 50 + armor_base = /obj/item/clothing/suit/space/hardsuit/syndi/elite /mob/living/simple_animal/hostile/human/syndicate/melee/sword melee_damage_lower = 30 @@ -114,13 +110,12 @@ icon_state = "syndicate_space_sword" icon_living = "syndicate_space_sword" name = "Ramzi Clique Commando" - maxHealth = 170 - health = 170 atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1000 speed = 1 projectile_deflect_chance = 50 + armor_base = /obj/item/clothing/suit/space/hardsuit/syndi /mob/living/simple_animal/hostile/human/syndicate/melee/sword/space/Initialize() . = ..() @@ -136,9 +131,8 @@ icon_state = "syndicate_stormtrooper_sword" icon_living = "syndicate_stormtrooper_sword" name = "Ramzi Clique Stormtrooper" - maxHealth = 250 - health = 250 projectile_deflect_chance = 50 + armor_base = /obj/item/clothing/suit/space/hardsuit/syndi/elite ///////////////Guns//////////// @@ -162,12 +156,11 @@ icon_state = "syndicate_space_pistol" icon_living = "syndicate_space_pistol" name = "Ramzi Clique Commando" - maxHealth = 170 - health = 170 atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1000 speed = 1 + armor_base = /obj/item/clothing/suit/space/hardsuit/syndi /mob/living/simple_animal/hostile/human/syndicate/ranged/space/Initialize() . = ..() @@ -178,8 +171,7 @@ icon_state = "syndicate_stormtrooper_pistol" icon_living = "syndicate_stormtrooper_pistol" name = "Ramzi Clique Stormtrooper" - maxHealth = 250 - health = 250 + armor_base = /obj/item/clothing/suit/space/hardsuit/syndi/elite /mob/living/simple_animal/hostile/human/syndicate/ranged/smg rapid = 2 @@ -192,12 +184,11 @@ icon_state = "syndicate_space_smg" icon_living = "syndicate_space_smg" name = "Ramzi Clique Commando" - maxHealth = 170 - health = 170 atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1000 speed = 1 + armor_base = /obj/item/clothing/suit/space/hardsuit/syndi /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space/Initialize() . = ..() @@ -208,8 +199,7 @@ icon_state = "syndicate_stormtrooper_smg" icon_living = "syndicate_stormtrooper_smg" name = "Ramzi Clique Stormtrooper" - maxHealth = 250 - health = 250 + armor_base = /obj/item/clothing/suit/space/hardsuit/syndi/elite /mob/living/simple_animal/hostile/human/syndicate/ranged/shotgun rapid = 2 @@ -223,12 +213,11 @@ icon_state = "syndicate_space_shotgun" icon_living = "syndicate_space_shotgun" name = "Ramzi Clique Commando" - maxHealth = 170 - health = 170 atmos_requirements = IMMUNE_ATMOS_REQS minbodytemp = 0 maxbodytemp = 1000 speed = 1 + armor_base = /obj/item/clothing/suit/space/hardsuit/syndi /mob/living/simple_animal/hostile/human/syndicate/ranged/shotgun/space/Initialize() . = ..() @@ -239,8 +228,7 @@ icon_state = "syndicate_stormtrooper_shotgun" icon_living = "syndicate_stormtrooper_shotgun" name = "Ramzi Clique Stormtrooper" - maxHealth = 250 - health = 250 + armor_base = /obj/item/clothing/suit/space/hardsuit/syndi/elite ///////////////Misc//////////// diff --git a/code/modules/mob/living/simple_animal/hostile/human/zombie.dm b/code/modules/mob/living/simple_animal/hostile/human/zombie.dm index e13461a49568..c70b459fb7b2 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/zombie.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/zombie.dm @@ -7,8 +7,6 @@ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID speak_chance = 0 stat_attack = HARD_CRIT //braains - maxHealth = 100 - health = 100 harm_intent_damage = 5 melee_damage_lower = 21 melee_damage_upper = 21 @@ -41,6 +39,7 @@ //They have claws now. O.r_hand = null O.l_hand = null + armor_base = O.suit var/icon/P = get_flat_human_icon("zombie_[zombiejob]", J , dummy_prefs, "zombie", outfit_override = O) icon = P diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm index b5781a200e61..18be354c2652 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm @@ -21,16 +21,8 @@ mob_size = MOB_SIZE_LARGE var/icon_aggro = null var/trophy_drop_mod = 25 - var/datum/armor/armor //WS edit - Whitesands /mob/living/simple_animal/hostile/asteroid/Initialize(mapload) - if (islist(armor)) //WS edit begin - Whitesands - armor = getArmor(arglist(armor)) - else if (!armor) - armor = getArmor() - else if (!istype(armor, /datum/armor)) - stack_trace("Invalid type [armor.type] found in .armor during [src.type] Initialize()") //WS edit begin - Whitesands - . = ..() apply_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING) @@ -45,11 +37,6 @@ return icon_state = icon_living -/mob/living/simple_animal/hostile/asteroid/getarmor(def_zone, type) //WS edit begin - Whitesands - if(armor) - return armor.getRating(type) - return 0 // If no armor //WS edit end - /mob/living/simple_animal/hostile/asteroid/bullet_act(obj/projectile/P)//Reduces damage from most projectiles to curb off-screen kills if(!stat) Aggro() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 5ee1d8f102be..f6dff0f23bb8 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -141,8 +141,18 @@ ///What kind of footstep this mob should have. Null if it shouldn't have any. var/footstep_type + /// Base armor value on this mob for running armor checks + var/datum/armor/armor + + /mob/living/simple_animal/Initialize(mapload) . = ..() + if (islist(armor)) + armor = getArmor(arglist(armor)) + else if (!armor) + armor = getArmor() + else if (!istype(armor, /datum/armor)) + stack_trace("Invalid type [armor.type] found in .armor during [src.type] Initialize()") GLOB.simple_animals[AIStatus] += src if(gender == PLURAL) gender = pick(MALE,FEMALE) @@ -171,6 +181,11 @@ return ..() +/mob/living/simple_animal/getarmor(def_zone, type) + if(armor) + return armor.getRating(type) + return FALSE + /mob/living/simple_animal/attackby(obj/item/O, mob/user, params) if(!is_type_in_list(O, food_type)) ..() From eca2d7cfcd817acb3d335a0da2f70a3a38c09779 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 24 Oct 2024 05:25:58 -0500 Subject: [PATCH 095/274] Automatic changelog generation for PR #3592 [ci skip] --- html/changelogs/AutoChangeLog-pr-3592.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3592.yml diff --git a/html/changelogs/AutoChangeLog-pr-3592.yml b/html/changelogs/AutoChangeLog-pr-3592.yml new file mode 100644 index 000000000000..8bd7da1fe492 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3592.yml @@ -0,0 +1,7 @@ +author: SomeguyManperson +changes: + - {balance: simple humans now have as much health as normal humans! This makes them + weaker!} + - {balance: simple humans now also benefit from their armor as much as normal humans! + This makes them stronger!} +delete-after: true From 0f50ea90657b96a5484a2c5daa3de6134bbf8c59 Mon Sep 17 00:00:00 2001 From: zimon9 <122945887+zimon9@users.noreply.github.com> Date: Thu, 24 Oct 2024 06:17:03 -0400 Subject: [PATCH 096/274] Fixes searching with the orbit menu (#3629) ## About The Pull Request This PR modifies the search algorithm for points of interests so that the real name of a character, e.g. "Kristina Dryden" is what gets passed to the search function, instead of a character's "full name", e.g. "calm human woman". ![vf7sJJ034D](https://github.com/user-attachments/assets/59b9381b-f49d-4564-a8b7-e33653706693) The sorting algorithm seems to take jobs as the sorting parameter, instead of real names. As of right now, the portion of code that causes this to occur still eludes me. ## Why It's Good For The Game This felt like a minor oversight to me. It feels clunky to search for a character's name and have the search return no results because the search function had been looking for a character's _attributes_ instead. ## Changelog :cl: fix: fixed the orbit menu search function so that names work again /:cl: --- tgui/packages/tgui/interfaces/Orbit/helpers.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tgui/packages/tgui/interfaces/Orbit/helpers.ts b/tgui/packages/tgui/interfaces/Orbit/helpers.ts index 7046f784cd6c..4a90b96eb2b6 100644 --- a/tgui/packages/tgui/interfaces/Orbit/helpers.ts +++ b/tgui/packages/tgui/interfaces/Orbit/helpers.ts @@ -81,10 +81,10 @@ export const isJobOrNameMatch = ( ): boolean => { if (!searchQuery) return true; - const { full_name, job } = observable; + const { name, job } = observable; return ( - full_name?.toLowerCase().includes(searchQuery?.toLowerCase()) || + name?.toLowerCase().includes(searchQuery?.toLowerCase()) || job?.toLowerCase().includes(searchQuery?.toLowerCase()) || false ); From 9a3ad86cb2fde2f7164a8b8f0f57cc92be4597a9 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 24 Oct 2024 05:39:04 -0500 Subject: [PATCH 097/274] Automatic changelog generation for PR #3629 [ci skip] --- html/changelogs/AutoChangeLog-pr-3629.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3629.yml diff --git a/html/changelogs/AutoChangeLog-pr-3629.yml b/html/changelogs/AutoChangeLog-pr-3629.yml new file mode 100644 index 000000000000..3f1925061720 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3629.yml @@ -0,0 +1,4 @@ +author: zimon9 +changes: + - {bugfix: fixed the orbit menu search function so that names work again} +delete-after: true From f05a16a00d1c1dd4e95a9692dec26054316afca1 Mon Sep 17 00:00:00 2001 From: MemeSnorfer <116136632+MemeSnorfer@users.noreply.github.com> Date: Thu, 24 Oct 2024 03:17:13 -0700 Subject: [PATCH 098/274] Balaclava Snout Sprites + Elzu Snouts (#3618) ## About The Pull Request Adds sprites for snouted balaclava variations (all sprites by moffball). Also adds a short snout variant, for Elzuose (coded with the help of @rye-rice). Comes with balaclava sprites for Elzuose as well (sprites also by moffball). (Top to bottom: Combat Balaclava, Inteq Balaclava, NGR Balaclava, NGR Facemask, Balaclava) ![image](https://github.com/user-attachments/assets/f6b5cb36-c2d1-4c25-9b40-34c5cb2ea0f8) ## Why It's Good For The Game Sarathi and Elzuose would no longer have weird clipping while wearing these masks :) ## Changelog :cl: MemeSnorfer and Moffball imageadd: Snouted balaclava sprites for both Sarathi and Elzuose code: Elzuose snout type, for use with mask sprites /:cl: --- code/__DEFINES/inventory.dm | 5 +++-- code/__DEFINES/mobs.dm | 9 +++++---- code/modules/clothing/factions/ngr.dm | 1 + code/modules/clothing/masks/boxing.dm | 1 + code/modules/clothing/masks/hailer.dm | 1 + .../mob/living/carbon/human/update_icons.dm | 3 +++ .../species_parts/ethereal_bodyparts.dm | 2 +- icons/mob/clothing/faction/ngr/mask.dmi | Bin 472 -> 1992 bytes icons/mob/clothing/mask.dmi | Bin 55254 -> 52850 bytes 9 files changed, 15 insertions(+), 7 deletions(-) diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 5b99546fed97..8a121f8eae6f 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -82,8 +82,9 @@ #define DIGITIGRADE_VARIATION_NO_NEW_ICON (1<<2) #define DIGITIGRADE_VARIATION_SAME_ICON_FILE (1<<3) //intended for use with factional icon files for organization purposes, otherwise use either above. Ex of naming: a state called "nameof_thing" can be named "nameof_thing_digi" #define SNOUTED_VARIATION (1<<4) //Ex of naming: a state called "nameof_thing" can be named "nameof_thing_snouted" -#define VOX_VARIATION (1<<5) -#define KEPORI_VARIATION (1<<6) +#define SNOUTED_SMALL_VARIATION (1<<5) //For Elzuose snouts +#define VOX_VARIATION (1<<6) +#define KEPORI_VARIATION (1<<7) #define NOT_DIGITIGRADE 0 #define FULL_DIGITIGRADE 1 diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 0bda789b98d4..e9a806203b79 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -135,10 +135,11 @@ #define BODYTYPE_ROBOTIC (1<<1) #define BODYTYPE_HUMANOID (1<<2) //Everything #define BODYTYPE_SNOUT (1<<3) //Snouts -#define BODYTYPE_BOXHEAD (1<<4) //TV Head -#define BODYTYPE_DIGITIGRADE (1<<5) //Lizard legs -#define BODYTYPE_KEPORI (1<<6) //Just Kepori -#define BODYTYPE_VOX (1<<7) //Big Vox +#define BODYTYPE_SNOUT_SMALL (1<<4) //Elzuose snouts +#define BODYTYPE_BOXHEAD (1<<5) //TV Head +#define BODYTYPE_DIGITIGRADE (1<<6) //Lizard legs +#define BODYTYPE_KEPORI (1<<7) //Just Kepori +#define BODYTYPE_VOX (1<<8) //Big Vox // Health/damage defines #define MAX_LIVING_HEALTH 100 diff --git a/code/modules/clothing/factions/ngr.dm b/code/modules/clothing/factions/ngr.dm index 9e3b1a24d9d9..f67e79a6f2e9 100644 --- a/code/modules/clothing/factions/ngr.dm +++ b/code/modules/clothing/factions/ngr.dm @@ -234,6 +234,7 @@ item_state = "ngr_facemask" icon = 'icons/obj/clothing/faction/ngr/mask.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/ngr/mask.dmi' + supports_variations = SNOUTED_VARIATION | SNOUTED_SMALL_VARIATION ////////// //Neck// diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm index 6bb58bb2b4e5..2790359d0b7c 100644 --- a/code/modules/clothing/masks/boxing.dm +++ b/code/modules/clothing/masks/boxing.dm @@ -7,6 +7,7 @@ visor_flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR w_class = WEIGHT_CLASS_SMALL actions_types = list(/datum/action/item_action/adjust) + supports_variations = SNOUTED_VARIATION | SNOUTED_SMALL_VARIATION /obj/item/clothing/mask/balaclava/attack_self(mob/user) adjustmask(user) diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm index 78bbc032e861..db12fff06885 100644 --- a/code/modules/clothing/masks/hailer.dm +++ b/code/modules/clothing/masks/hailer.dm @@ -75,6 +75,7 @@ strip_delay = 60 alternate_worn_layer = BODY_LAYER flags_inv = HIDEFACIALHAIR|HIDEFACE|HIDEEARS|HIDEHAIR + supports_variations = SNOUTED_VARIATION | SNOUTED_SMALL_VARIATION /obj/item/clothing/mask/gas/sechailer/balaclava/inteq desc = "A surprisingly advanced balaclava. while it doesn't muffle your voice it has a miniature rebreather for internals. Comfy to boot! This one is a variataion commonly used by the IRMG to protect it's members idenites." diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 1400d2c641ca..56ee24b22213 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -687,6 +687,9 @@ There are several things that need to be remembered: if((head_bodypart.bodytype & BODYTYPE_SNOUT) && (I.supports_variations & SNOUTED_VARIATION)) target_overlay = "[target_overlay]_snouted" + if((head_bodypart.bodytype & BODYTYPE_SNOUT_SMALL) && (I.supports_variations & SNOUTED_SMALL_VARIATION)) + target_overlay = "[target_overlay]_snouted_small" + if(dna.species.bodytype & BODYTYPE_VOX) if(I.supports_variations & VOX_VARIATION) icon_file = VOX_MASK_PATH diff --git a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm index 0794602de953..ebf294a3cccf 100644 --- a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm @@ -4,7 +4,7 @@ limb_id = SPECIES_ELZUOSE is_dimorphic = FALSE uses_mutcolor = TRUE - bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_SNOUT + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_SNOUT_SMALL /obj/item/bodypart/chest/ethereal icon = 'icons/mob/species/ethereal/bodyparts.dmi' diff --git a/icons/mob/clothing/faction/ngr/mask.dmi b/icons/mob/clothing/faction/ngr/mask.dmi index 0baead0a39b192dcd5716fb804cc289ee799b1ed..ef0c2bb56311c68fe5af75ee3e560efa047fa28b 100644 GIT binary patch literal 1992 zcmbW1c{CgN7RPBzQA%EoEtV8L#W0qLtt50ZcG^L#GsDz21fevxSjLRj9;MHIYOPX= zirq+tQY9*s#ArIAir6xFA(luYkLh{my+7U`^WN{Ad+)jD-19rUj= z!ptu_7kmxZq|i{B3x2L;X!_Zx$!MDy-b|m+r3uN@bzzP5XPcYD!(1Gv9Gs^ebe%L^ zAP&5G8 z`&*%m`0V?Dl=C-sMRc!2)2|SH#|w6V%Rpy%Mj_}b=$tqpo!PO2OC-kjBWs?uEWvPl zDQ}yoR=d3RmXo$;3{OGj?@{rhPl@Qkzi$z)BOVlAJf9&eDduJXvL8+dtu;v|2!>x0 zAvEmr^zX@~2j$P_CTl7C{=d+U)mn?IEmOM|dttd=X+su+eF?siL0sr1)8xcyFtwJ) z$h*|G+R{$w=Y8NZO}GbszjZBL>}uH|>O<4$M_3pibFjj}HH*ga{nXxDaF6Px+p+wU z@#^+BrB9e#&j$cx`QqhZDm4+v8bOkyhNO=so>n8cf?of$a+I}31qioSkB@vVio#^# z7XrNfg1-4VY6P$jPKtt8iW5(mhSjr{BETh9>h6-b4}2(s;WkJ8wMVhL?7m`3bBS)r zv0yU&TLKw!PAP_On9PXJI-az!4L^Y9;2_n^!&ZJ()cKJ&>7m2XZv(6gGlXpj%4fRt@C(jgy#MAsaLmprmnG$ zb-Tk{LL8dc01^8Bse{@CT%@PThYbu~E`*&HJ8W1%^a0M2pE0?HiaL})_BxqtOmw!y z+JWmhA-%(=bE^D@d>W#o612V-T!m?7Ld?MVH8bzMh)o#$cPZ3@4MCfr%XopLdV)Nj z6{3J}+Xkn?OoadRM9G7}WN*dGTj{7p>E&2l{_vg*Y1;qS3ZEAFceWm%AUJnY8S~ew zj5QlF9yR`O`KXjDt@<6Ibbd^$Q*^a~RiGlJ z6gmJ%Udcz(uVDq4#}DU_H&4XEjxt)O>HGGd*VI+?H)0=lObP4zT&+VE>k|Wx-I|QBR1=}V8@f-)eAre(GEF{?<@-YY zOYqEvW5SaH1SdThfR`%|v!+%E+m?|w`T;5~g^Qf8X+1IXh>c{a`-f>rm2VG)OV25# zBvmMqgGF(hCSME$>Uq&fMX8sV39!S~Zm)U&cU~K%eA;9Me_iq5G49{oMz6!!Nj`7d{jEX*YETYdmE6>i-vMB9+@a%GesvF z)P_Ccqq^CT(-vfvV|`>_$QsINsFHHl4Hycqi_0Am=q`0Y3q|1RhlJk32?z3SDzl7~ zM%tir%~h-0n*kw~S=$S{oRIAWEl7%{GQx>BbX2Kf%Wu@~n@T0B@_*TjWB{;K!UR3} zr|wKLxKmDzMMSI33S2a5KD!&kVyi5KLU=F@+L~M7j-uj&v&)R!13$9m7lLstG#318 z#R&=zUB;68DNpa>b7C zDx(3i-<-baK`3dWV8szRN-LaDLK&>64KPy=;?=*VyKmX;X@_UgQLWi_?sE~=_n=Ex zH^v__Wp+7vfspU#WOwrYiS)rbbG0@Et*0AoBHcjqtLdwXTo$E z-I**PeIp?6a%AO4#3~w>J3oAU^d*!A3~_zAhEn5hgc|$zqscy@rQUZuU$N!u7ptbS zdY+VZdK0J6TGUi+^>&0`idsiY?Q6Q9N$oi0jd4vRl9OjOU>9ahazwXYFar&b-FqD_3~i I&47%50>BBXN&o-= delta 380 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

    )} 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 From def61973d101f5e8def819f44f2bf0f5c178197c Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 24 Oct 2024 05:52:02 -0500 Subject: [PATCH 099/274] Automatic changelog generation for PR #3618 [ci skip] --- html/changelogs/AutoChangeLog-pr-3618.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3618.yml diff --git a/html/changelogs/AutoChangeLog-pr-3618.yml b/html/changelogs/AutoChangeLog-pr-3618.yml new file mode 100644 index 000000000000..75cf1806ad47 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3618.yml @@ -0,0 +1,5 @@ +author: MemeSnorfer and Moffball +changes: + - {imageadd: Snouted balaclava sprites for both Sarathi and Elzuose} + - {code_imp: 'Elzuose snout type, for use with mask sprites'} +delete-after: true From de5b708b3073da18a179bf3594d972d61efd23c7 Mon Sep 17 00:00:00 2001 From: thgvr <81882910+thgvr@users.noreply.github.com> Date: Thu, 24 Oct 2024 03:17:58 -0700 Subject: [PATCH 100/274] Un-nerfs Kepori (#3482) ## About The Pull Request Gonna try this out to see if it improves how Kepori actually feel. I don't really think straight up taking more damage is an interesting downside, considering their only upside was being a little faster. This also greatly lowers the movespeed modifier. Personally I don't really think it's a good idea to have a straight numbers modifier as a nerf like this, considering we balance things without even thinking about this. Projectiles and mob attacks do a high amount of damage, and it's all but guaranteed to break or completely disable a limb in one hit. With limb armor being fairly rare to come by, and the area a projectile/melee targets having RNG on where they actually hit, it's not actually that interesting. ## Changelog :cl: balance: Removed Kepori damage modifiers. balance: Decreased Kepori move speed modifier. (They are still a bit faster than average) /:cl: --- .../modules/mob/living/carbon/human/species_types/kepori.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/kepori.dm b/code/modules/mob/living/carbon/human/species_types/kepori.dm index e4677fbc19f5..1191d41968d1 100644 --- a/code/modules/mob/living/carbon/human/species_types/kepori.dm +++ b/code/modules/mob/living/carbon/human/species_types/kepori.dm @@ -18,9 +18,9 @@ species_eye_path = 'icons/mob/species/kepori/kepori_eyes.dmi' heatmod = 0.67 coldmod = 1.5 - brutemod = 1.5 - burnmod = 1.5 - speedmod = -0.25 + // brutemod = 1.5 + // burnmod = 1.5 + speedmod = -0.10 bodytemp_normal = HUMAN_BODYTEMP_NORMAL + 30 bodytemp_heat_damage_limit = HUMAN_BODYTEMP_HEAT_DAMAGE_LIMIT + 30 bodytemp_cold_damage_limit = HUMAN_BODYTEMP_COLD_DAMAGE_LIMIT + 30 From ac2252d8879cfed019445023be4c846167ec9e36 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 24 Oct 2024 06:05:39 -0500 Subject: [PATCH 101/274] Automatic changelog generation for PR #3482 [ci skip] --- html/changelogs/AutoChangeLog-pr-3482.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3482.yml diff --git a/html/changelogs/AutoChangeLog-pr-3482.yml b/html/changelogs/AutoChangeLog-pr-3482.yml new file mode 100644 index 000000000000..32a1e2cc7499 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3482.yml @@ -0,0 +1,6 @@ +author: thgvr +changes: + - {balance: Removed Kepori damage modifiers.} + - {balance: Decreased Kepori move speed modifier. (They are still a bit faster than + average)} +delete-after: true From c3c233da6eabe3463436fb37a91a45eb84fa19c6 Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Erikafox@users.noreply.github.com> Date: Thu, 24 Oct 2024 06:19:23 -0400 Subject: [PATCH 102/274] Minor Newscaster Fix (#3613) ## About The Pull Request Newscasters can now check your ID through a wallet. Newscasters no longer display your job. ## Why It's Good For The Game functionality ## Changelog :cl: fix: Newscasters can now read IDs through a wallet. /:cl: --------- Co-authored-by: Bjarl <94164348+Bjarl@users.noreply.github.com> --- code/game/machinery/newscaster.dm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index c53b256b04de..55f16a8c1f7b 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -814,12 +814,17 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster/security_unit, 30) if(istype(human_user.wear_id, /obj/item/pda)) var/obj/item/pda/P = human_user.wear_id if(P.id) - scanned_user = "[P.id.registered_name] ([P.id.assignment])" + scanned_user = "[P.id.registered_name])" else scanned_user = "Unknown" else if(istype(human_user.wear_id, /obj/item/card/id)) var/obj/item/card/id/ID = human_user.wear_id - scanned_user ="[ID.registered_name] ([ID.assignment])" + scanned_user ="[ID.registered_name])" + else if(istype(human_user.wear_id, /obj/item/storage/wallet)) + var/obj/item/storage/wallet/our_wallet = human_user.wear_id + if(our_wallet.front_id) + var/obj/item/card/id/ID = our_wallet.GetID() + scanned_user = "[ID.registered_name]" else scanned_user ="Unknown" else From d5921035aef9a4c2c1a3876ce066dfd5bea42c28 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 24 Oct 2024 06:18:40 -0500 Subject: [PATCH 103/274] Automatic changelog generation for PR #3613 [ci skip] --- html/changelogs/AutoChangeLog-pr-3613.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3613.yml diff --git a/html/changelogs/AutoChangeLog-pr-3613.yml b/html/changelogs/AutoChangeLog-pr-3613.yml new file mode 100644 index 000000000000..faa1257caa79 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3613.yml @@ -0,0 +1,4 @@ +author: Erikafox +changes: + - {bugfix: Newscasters can now read IDs through a wallet.} +delete-after: true From 1b9436e70cba8afb3149412848e1b5b63592cfcd Mon Sep 17 00:00:00 2001 From: Gristlebee <56049844+Gristlebee@users.noreply.github.com> Date: Thu, 24 Oct 2024 03:19:31 -0700 Subject: [PATCH 104/274] Changes the vote sound to announce_dig (#3615) ## About The Pull Request Changes the vote sound to announce_dig.ogg ## Why It's Good For The Game The current vote sound is easy to miss, and I think this one might be better as it's a longer and louder tone. ## Changelog :cl: add: Vote sound changed to announce_dig.ogg /:cl: --- code/datums/votes/_vote_datum.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/votes/_vote_datum.dm b/code/datums/votes/_vote_datum.dm index c34d4600d2b0..8c7b7234b516 100644 --- a/code/datums/votes/_vote_datum.dm +++ b/code/datums/votes/_vote_datum.dm @@ -10,7 +10,7 @@ /// If supplied, an override question will be displayed instead of the name of the vote. var/override_question /// The sound effect played to everyone when this vote is initiated. - var/vote_sound = 'sound/misc/compiler-stage2.ogg' + var/vote_sound = 'sound/misc/announce_dig.ogg' /// A list of default choices we have for this vote. var/list/default_choices /// What message do we want to pass to the player-side vote panel as a tooltip? From 14ff71876a33f6599c460af89af7a3eb59f72585 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 24 Oct 2024 06:31:43 -0500 Subject: [PATCH 105/274] Automatic changelog generation for PR #3615 [ci skip] --- html/changelogs/AutoChangeLog-pr-3615.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3615.yml diff --git a/html/changelogs/AutoChangeLog-pr-3615.yml b/html/changelogs/AutoChangeLog-pr-3615.yml new file mode 100644 index 000000000000..de17ffbc1571 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3615.yml @@ -0,0 +1,4 @@ +author: Gristlebee +changes: + - {rscadd: Vote sound changed to announce_dig.ogg} +delete-after: true From 1afeda3d0897d9d9af1b79c1260ae089dc0cec37 Mon Sep 17 00:00:00 2001 From: Sadhorizon <108196626+Sadhorizon@users.noreply.github.com> Date: Thu, 24 Oct 2024 12:20:03 +0200 Subject: [PATCH 106/274] Medical stacks can now heal corpses. (#3608) ## About The Pull Request Title. ## Why It's Good For The Game A magical power is stopping you from bandaging that moth because they already died. Kinda goofy I'd say? ## Changelog :cl: tweak: Medical stacks now work on corpses. /:cl: --- code/game/objects/items/stacks/medical.dm | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 10eb8c1e2cf8..bac0935782e7 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -117,9 +117,6 @@ grind_results = list(/datum/reagent/medicine/styptic_powder = 10) /obj/item/stack/medical/bruise_pack/heal(mob/living/target, mob/user) - if(target.stat == DEAD) - to_chat(user, "[target] is dead! You can not help [target.p_them()].") - return if(isanimal(target)) var/mob/living/simple_animal/critter = target if (!(critter.healable)) @@ -204,9 +201,6 @@ grind_results = list(/datum/reagent/medicine/silver_sulfadiazine = 10) /obj/item/stack/medical/ointment/heal(mob/living/target, mob/user) - if(target.stat == DEAD) - to_chat(user, "[target] is dead! You can not help [target.p_them()].") - return if(iscarbon(target)) return heal_carbon(target, user, 0, heal_burn) to_chat(user, "You can't heal [target] with the \the [src]!") @@ -234,9 +228,6 @@ /obj/item/stack/medical/suture/heal(mob/living/target, mob/user) . = ..() - if(target.stat == DEAD) - to_chat(user, "[target] is dead! You can not help [target.p_them()].") - return if(iscarbon(target)) return heal_carbon(target, user, heal_brute, 0) if(isanimal(target)) @@ -281,9 +272,6 @@ /obj/item/stack/medical/mesh/heal(mob/living/target, mob/user) . = ..() - if(target.stat == DEAD) - to_chat(user, "[target] is dead! You can not help [target.p_them()].") - return if(iscarbon(target)) return heal_carbon(target, user, 0, heal_burn) to_chat(user, "You can't heal [target] with the \the [src]!") @@ -347,9 +335,6 @@ /obj/item/stack/medical/aloe/heal(mob/living/target, mob/user) . = ..() - if(target.stat == DEAD) - to_chat(user, "[target] is dead! You can not help [target.p_them()].") - return FALSE if(iscarbon(target)) return heal_carbon(target, user, heal, heal) if(isanimal(target)) From 1d325a72b17d5f95b44c5a5b505e37f211cd7bcd Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 24 Oct 2024 06:44:59 -0500 Subject: [PATCH 107/274] Automatic changelog generation for PR #3608 [ci skip] --- html/changelogs/AutoChangeLog-pr-3608.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3608.yml diff --git a/html/changelogs/AutoChangeLog-pr-3608.yml b/html/changelogs/AutoChangeLog-pr-3608.yml new file mode 100644 index 000000000000..3f69cc679412 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3608.yml @@ -0,0 +1,4 @@ +author: Sadhorizon +changes: + - {tweak: Medical stacks now work on corpses.} +delete-after: true From a0d6356626c17059d9674aeb94bbcb0f4d8f8381 Mon Sep 17 00:00:00 2001 From: zimon9 <122945887+zimon9@users.noreply.github.com> Date: Thu, 24 Oct 2024 06:20:57 -0400 Subject: [PATCH 108/274] Adds plastitanium shards, and slightly modifies plasma shards (#3600) ## About The Pull Request Credit: Naksu, octareenroon91, and vuonojenmustaturska for the original plasma shard sprites. Original PR is here: [https://github.com/tgstation/tgstation/pull/40327](https://github.com/tgstation/tgstation/pull/40327) This change adds plastitanium shards and lightly modifies plasma shards. **Plastitanium shards** | plastitaniumlarge | plastitaniummedium | plastitaniumsmall | plastitaniumtiny | |-------------------|--------------------|-------------------|------------------| |![image](https://github.com/user-attachments/assets/2196d5be-b8f5-4879-bc00-20b92a25de5c)|![image](https://github.com/user-attachments/assets/341a3a00-1213-4d7e-9792-5ac47ba70539)|![image](https://github.com/user-attachments/assets/91ac24fb-b9bd-415d-804c-07bbb3a54546)|![image](https://github.com/user-attachments/assets/9424b468-fbd9-4507-8db3-94becfe45272)| **Plasma shards** | before |![image](https://github.com/user-attachments/assets/553d1c11-9ecc-401e-869c-0cd9701ca015)| |--------|---| | after |![image](https://github.com/user-attachments/assets/e4f02d01-628d-443c-8765-4e457ab1a13c)| ## Why It's Good For The Game Plasma shards were modified because it seemed to me like there were a few artifacts that remained in the sprite. These have been cleaned up. As for the plastitanium shards, they have been added in order to make things a little more consistent. Currently, if a plastitanium window is broken, plasma shards are dropped. This change should fix that and make it so that if a plastitanium window is broken, a _plastitanium_ shard is dropped. ![image](https://github.com/user-attachments/assets/512dc9a9-9b17-4a49-bece-dd583bacd977) All of the glass shard sprites will likely need to be touched up in the near future, but this may serve as an okayish backbone for future work. My spritework here may not be the best, so please critique it if it can be improved. ## Changelog :cl: add: Added plastitanium shards fix: fixed some artifacts in the plasma glass shard sprites /:cl: --- .../objects/effects/decals/cleanable/misc.dm | 3 +++ .../game/objects/items/stacks/sheets/glass.dm | 10 ++++++++++ code/game/objects/structures/window.dm | 9 +++++++++ icons/obj/shards.dmi | Bin 5412 -> 6523 bytes 4 files changed, 22 insertions(+) diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index 5610e6a19efa..b04e83d6f5f6 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -49,6 +49,9 @@ /obj/effect/decal/cleanable/glass/plasma icon_state = "plasmatiny" +/obj/effect/decal/cleanable/glass/plastitanium + icon_state = "plastitaniumtiny" + /obj/effect/decal/cleanable/glass/strange icon_state = "strangetiny" diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 08dd06b690d5..40de06d6f9cb 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -379,3 +379,13 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( custom_materials = list(/datum/material/plasma=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT) icon_prefix = "plasma" weld_material = /obj/item/stack/sheet/plasmaglass + +/obj/item/shard/plastitanium + name = "beige shard" + desc = "A nasty looking shard of plastitanium glass." + force = 6 + throwforce = 11 + icon_state = "plastitaniumlarge" + custom_materials = list(/datum/material/titanium=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/plasma=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT) + icon_prefix = "plastitanium" + weld_material = /obj/item/stack/sheet/plastitaniumglass diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 5064883c5de9..3873a48423d2 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -764,6 +764,15 @@ anchored = FALSE state = WINDOW_OUT_OF_FRAME +/obj/structure/window/plasma/reinforced/plastitanium/spawnDebris(location) + . = list() + . += new /obj/item/shard/plastitanium(location) + . += new /obj/effect/decal/cleanable/glass/plastitanium(location) + if (reinf) + . += new /obj/item/stack/rods(location, (fulltile ? 2 : 1)) + if (fulltile) + . += new /obj/item/shard/plastitanium(location) + /obj/structure/window/paperframe name = "paper frame" desc = "A fragile separator made of thin wood and paper." diff --git a/icons/obj/shards.dmi b/icons/obj/shards.dmi index bdf8bc6e883979d3948ecc890c4ad6f448539df5..1632e2a0836864d11f416b73935cc9f90877e6ce 100644 GIT binary patch literal 6523 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 Date: Thu, 24 Oct 2024 06:57:59 -0500 Subject: [PATCH 109/274] Automatic changelog generation for PR #3600 [ci skip] --- html/changelogs/AutoChangeLog-pr-3600.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3600.yml diff --git a/html/changelogs/AutoChangeLog-pr-3600.yml b/html/changelogs/AutoChangeLog-pr-3600.yml new file mode 100644 index 000000000000..4213f8bb5ba9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3600.yml @@ -0,0 +1,5 @@ +author: zimon9 +changes: + - {rscadd: Added plastitanium shards} + - {bugfix: fixed some artifacts in the plasma glass shard sprites} +delete-after: true From c9cefc0ac4f74a77a65a964f7bb9eb29cc7196bc Mon Sep 17 00:00:00 2001 From: generalthrax <139387950+generalthrax@users.noreply.github.com> Date: Thu, 24 Oct 2024 05:21:37 -0500 Subject: [PATCH 110/274] Fix Design Disks (#3622) ## About The Pull Request Design disks work again ## Why It's Good For The Game This is probably going to die before Christmas but we should have features that work ## Changelog :cl: fix: Design disks work again /:cl: --- code/modules/research/rdconsole.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index c21e3b1e6fcc..e0ba10ce4aff 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -633,10 +633,10 @@ Nothing else in the console has ID requirements. RDSCREEN_UI_DDISK_CHECK var/list/l = list() l += "Disk Operations: Clear DiskUpload AllEject Disk" - for(var/i in 1 to d_disk.max_blueprints) + for(var/i in d_disk.blueprints) l += "

    " - if(d_disk.blueprints[i]) - var/datum/design/D = d_disk.blueprints[i] + if(istype(i, /datum/design)) + var/datum/design/D = i l += "[D.icon_html(usr)] [D.name]" l += "Operations: Upload to database Clear Slot" else From 4d7cdcd52123748faa454d16f39b2905e4eb1cf7 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 24 Oct 2024 07:11:19 -0500 Subject: [PATCH 111/274] Automatic changelog generation for PR #3622 [ci skip] --- html/changelogs/AutoChangeLog-pr-3622.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3622.yml diff --git a/html/changelogs/AutoChangeLog-pr-3622.yml b/html/changelogs/AutoChangeLog-pr-3622.yml new file mode 100644 index 000000000000..5d7609e22c05 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3622.yml @@ -0,0 +1,4 @@ +author: generalthrax +changes: + - {bugfix: Design disks work again} +delete-after: true From 94cb62b6626cd2b0d6fb5324b5c27f1eccffde27 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Date: Thu, 24 Oct 2024 15:15:09 -0500 Subject: [PATCH 112/274] Refactors lootdroppers (#3526) ## About The Pull Request Refactors lootdroppers, giving them a fresh coat of paint from https://github.com/tgstation/tgstation/pull/60522 Ports docking port sprites from https://github.com/tgstation/tgstation/pull/82729 I also tweaked some of the mapping helper's icons. ## Why It's Good For The Game ## Changelog :cl: refactor: refactored some mapping stuff including random spawners! /:cl: --- .../BeachRuins/beach_ancient_ruin.dmm | 2 +- .../BeachRuins/beach_float_resort.dmm | 2 +- .../BeachRuins/beach_ocean_town.dmm | 56 +- .../BeachRuins/beach_pirate_crash.dmm | 10 +- .../BeachRuins/beach_treasure_cove.dmm | 6 +- .../IceRuins/icemoon_crashed_holemaker.dmm | 12 +- .../IceRuins/icemoon_ice_lodge.dmm | 22 +- .../icemoon_underground_abandoned_village.dmm | 8 +- .../icemoon_underground_brazillianlab.dmm | 8 +- .../JungleRuins/jungle_bombed_starport.dmm | 10 +- .../JungleRuins/jungle_cavecrew.dmm | 12 +- .../JungleRuins/jungle_medtech_outbreak.dmm | 2 +- .../JungleRuins/jungle_paradise.dmm | 28 +- .../JungleRuins/jungle_syndicate.dmm | 2 +- .../lavaland_abandonedlisteningpost.dmm | 10 +- .../LavaRuins/lavaland_crashed_starwalker.dmm | 4 +- .../lavaland_surface_wrecked_factory.dmm | 50 +- .../RockRuins/rockplanet_budgetcuts.dmm | 10 +- .../RockRuins/rockplanet_distillery.dmm | 36 +- .../RockRuins/rockplanet_nomadcrash.dmm | 6 +- .../RockRuins/rockplanet_shippingdock.dmm | 22 +- .../whitesands_surface_camp_combination.dmm | 16 +- .../whitesands_surface_camp_saloon.dmm | 18 +- .../whitesands_surface_medipen_plant.dmm | 8 +- .../whitesands_surface_pubbyslopcrash.dmm | 28 +- _maps/RandomRuins/SpaceRuins/astraeus.dmm | 24 +- .../SpaceRuins/corporate_mining.dmm | 12 +- _maps/RandomRuins/SpaceRuins/power_puzzle.dmm | 36 +- _maps/RandomRuins/SpaceRuins/spacemall.dmm | 108 +- .../wasteplanet_abandoned_mechbay.dmm | 30 +- .../WasteRuins/wasteplanet_lab.dmm | 2 +- .../WasteRuins/wasteplanet_tradepost.dmm | 8 +- .../WasteRuins/wasteplanet_yard.dmm | 22 +- _maps/outpost/hangar/nt_asteroid_40x20.dmm | 6 +- _maps/outpost/hangar/nt_asteroid_40x40.dmm | 7 +- _maps/outpost/hangar/nt_asteroid_56x20.dmm | 11 +- _maps/outpost/hangar/nt_asteroid_56x40.dmm | 11 +- _maps/outpost/indie_space.dmm | 122 +- _maps/outpost/nanotrasen_asteroid.dmm | 48 +- _maps/outpost/nanotrasen_ice.dmm | 26 +- .../independent/independent_beluga.dmm | 12 +- .../shuttles/independent/independent_box.dmm | 18 +- .../independent/independent_bubble.dmm | 6 +- .../independent/independent_dwayne.dmm | 65 +- .../independent/independent_junker.dmm | 28 +- .../shuttles/independent/independent_kilo.dmm | 12 +- .../independent/independent_lagoon.dmm | 4 +- .../independent/independent_mudskipper.dmm | 14 +- .../independent/independent_raleigh.dmm | 22 +- .../independent/independent_rigger.dmm | 40 +- .../independent/independent_schmiedeberg.dmm | 26 +- .../independent/independent_shetland.dmm | 18 +- .../independent/independent_sunskipper.dmm | 4 +- .../independent/independent_tranquility.dmm | 16 +- _maps/shuttles/inteq/inteq_colossus.dmm | 32 +- _maps/shuttles/inteq/inteq_hound.dmm | 14 +- _maps/shuttles/inteq/inteq_talos.dmm | 70 +- _maps/shuttles/inteq/inteq_valor.dmm | 18 +- _maps/shuttles/inteq/inteq_vaquero.dmm | 26 +- _maps/shuttles/minutemen/minutemen_atlas.dmm | 10 +- .../shuttles/nanotrasen/nanotrasen_delta.dmm | 16 +- .../shuttles/nanotrasen/nanotrasen_gecko.dmm | 146 +- .../nanotrasen/nanotrasen_harrier.dmm | 14 +- .../shuttles/nanotrasen/nanotrasen_heron.dmm | 41 +- _maps/shuttles/nanotrasen/nanotrasen_meta.dmm | 30 +- .../shuttles/nanotrasen/nanotrasen_mimir.dmm | 56 +- .../shuttles/nanotrasen/nanotrasen_ranger.dmm | 10 +- _maps/shuttles/pgf/pgf_crying_sun.dmm | 12 +- _maps/shuttles/pirate/pirate_libertatia.dmm | 20 +- _maps/shuttles/pirate/pirate_tortuga.dmm | 54 +- _maps/shuttles/solgov/solgov_inkwell.dmm | 16 +- .../subshuttles/independent_sugarcube.dmm | 8 +- .../syndicate/syndicate_cybersun_kansatsu.dmm | 6 +- .../syndicate/syndicate_gorlex_hyena.dmm | 16 +- .../syndicate/syndicate_gorlex_komodo.dmm | 48 +- .../syndicate/syndicate_litieguai.dmm | 8 +- .../shuttles/syndicate/syndicate_panacea.dmm | 6 +- .../syndicate/syndicate_twinkleshine.dmm | 22 +- _maps/templates/shelter_2.dmm | 2 +- _maps/templates/shelter_3.dmm | 2 +- code/__HELPERS/_lists.dm | 102 +- code/__HELPERS/_string_lists.dm | 2 +- code/_globalvars/lists/maintenance_loot.dm | 6 +- .../configuration/entries/game_options.dm | 10 + code/controllers/subsystem/overmap.dm | 2 +- code/controllers/subsystem/ticker.dm | 2 +- code/datums/ai_laws.dm | 4 +- code/datums/components/fantasy/_fantasy.dm | 2 +- code/datums/components/fantasy/suffixes.dm | 2 +- code/datums/components/squeak.dm | 4 +- code/datums/looping_sounds/_looping_sound.dm | 2 +- .../mapgen/planetary/JungleGenerator.dm | 6 +- code/datums/mapgen/planetary/LavaGenerator.dm | 6 +- code/datums/mapgen/planetary/RockGenerator.dm | 6 +- code/datums/mapgen/planetary/SandGenerator.dm | 6 +- code/datums/mapgen/planetary/SnowGenerator.dm | 10 +- .../datums/mapgen/planetary/WasteGenerator.dm | 248 ++-- .../mapgen/single_biome/WasteplanetCaves.dm | 2 +- code/datums/votes/_vote_datum.dm | 2 +- code/datums/weather/weather_controller.dm | 2 +- .../MapData/shuttles/nanotrasen_ranger.dm | 12 +- code/game/gamemodes/dynamic/dynamic.dm | 14 +- code/game/gamemodes/game_mode.dm | 4 +- code/game/gamemodes/meteor/meteors.dm | 2 +- code/game/machinery/computer/arcade.dm | 12 +- code/game/objects/effects/landmarks.dm | 10 +- code/game/objects/effects/misc.dm | 20 - code/game/objects/effects/spawners/bundle.dm | 104 +- .../game/objects/effects/spawners/lootdrop.dm | 1314 ----------------- .../objects/effects/spawners/mobspawner.dm | 32 +- .../effects/spawners/random.dm/ai_module.dm | 41 + .../effects/spawners/random.dm/anomaly.dm | 222 +++ .../effects/spawners/random.dm/bedsheet.dm | 33 + .../effects/spawners/random.dm/boards.dm | 245 +++ .../effects/spawners/random.dm/bureaucracy.dm | 68 + .../effects/spawners/random.dm/clothing.dm | 67 + .../effects/spawners/random.dm/decoration.dm | 118 ++ .../effects/spawners/random.dm/engineering.dm | 138 ++ .../spawners/random.dm/entertainment.dm | 282 ++++ .../effects/spawners/random.dm/exotic.dm | 69 + .../spawners/random.dm/food_or_drink.dm | 284 ++++ .../effects/spawners/random.dm/maintenance.dm | 57 + .../effects/spawners/random.dm/medical.dm | 145 ++ .../effects/spawners/random.dm/random.dm | 175 +++ .../effects/spawners/random.dm/readme.md | 425 ++++++ .../effects/spawners/random.dm/salvaging.dm | 207 +++ .../effects/spawners/random.dm/structure.dm | 91 ++ .../effects/spawners/random.dm/trash.dm | 282 ++++ .../effects/spawners/random.dm/vending.dm | 17 + .../spawners/random.dm/waste_planet.dm | 101 ++ code/game/objects/effects/spawners/spawner.dm | 23 + code/game/objects/effects/spawners/traps.dm | 9 - .../objects/effects/spawners/vaultspawner.dm | 28 - .../effects/spawners/xeno_egg_delivery.dm | 18 - code/game/objects/items/chromosome.dm | 2 +- code/game/objects/items/devices/flashlight.dm | 9 - code/game/objects/items/devices/mines.dm | 8 +- .../game/objects/items/grenades/ghettobomb.dm | 2 +- code/game/objects/items/plushes.dm | 40 - .../game/objects/items/storage/uplink_kits.dm | 6 +- code/game/objects/items/toys.dm | 2 +- code/game/objects/structures/bedsheet_bin.dm | 4 +- .../crates_lockers/closets/gimmick.dm | 1 - .../crates_lockers/closets/utility_closets.dm | 2 +- code/game/objects/structures/geyser.dm | 2 +- code/game/objects/structures/salvaging.dm | 316 +--- code/game/turfs/closed/minerals.dm | 2 +- code/modules/admin/verbs/randomverbs.dm | 2 +- .../changeling/powers/pheromone_receptors.dm | 2 +- code/modules/awaymissions/away_props.dm | 6 +- code/modules/awaymissions/corpse.dm | 12 +- .../awaymissions/mission_code/snowdin.dm | 77 - .../blackmarket_items/consumables.dm | 4 +- code/modules/cargo/packs/costumes_toys.dm | 4 +- code/modules/cargo/packs/food.dm | 12 +- code/modules/clothing/gloves/color.dm | 18 - .../clothing/outfits/ert/frontiersmen_ert.dm | 12 +- code/modules/events/brain_trauma.dm | 2 +- code/modules/events/heart_attack.dm | 2 +- code/modules/events/holiday/xmas.dm | 2 +- code/modules/fishing/fish/_fish.dm | 2 +- code/modules/fishing/sources/_fish_source.dm | 2 +- code/modules/flufftext/Hallucination.dm | 2 +- code/modules/food_and_drinks/pizzabox.dm | 4 +- code/modules/mapping/mapping_helpers.dm | 8 +- code/modules/mining/lavaland/ash_flora.dm | 121 +- code/modules/mining/ore_veins.dm | 2 +- .../hostile/abandoned_minebot.dm | 4 +- .../living/simple_animal/hostile/hivebot.dm | 2 +- .../simple_animal/hostile/human/survivors.dm | 32 +- .../hostile/mining_mobs/hivelord.dm | 4 +- .../hostile/mining_mobs/hivelord_outfits.dm | 56 +- .../mob/living/simple_animal/simple_animal.dm | 2 +- code/modules/mob/mob_helpers.dm | 2 +- code/modules/mob_spawner/hivebot.dm | 2 +- code/modules/mob_spawner/spawner_componet.dm | 2 +- code/modules/overmap/objects/dynamic_datum.dm | 4 +- code/modules/overmap/objects/event_datum.dm | 2 +- .../chemistry/reagents/other_reagents.dm | 4 +- .../research/designs/biogenerator_designs.dm | 2 +- code/modules/research/experimentor.dm | 4 +- code/modules/shuttle/shuttle.dm | 8 +- code/modules/vending/cola.dm | 11 - code/modules/vending/snack.dm | 11 - config/game_options.txt | 5 + html/changelogs/archive/2019-03.yml | 2 +- icons/effects/landmarks_static.dmi | Bin 19814 -> 0 bytes icons/effects/mapping/docking_ports.dmi | Bin 0 -> 697 bytes icons/effects/mapping/landmarks_static.dmi | Bin 0 -> 19106 bytes icons/effects/mapping/mapping_helpers.dmi | Bin 0 -> 12739 bytes icons/effects/mapping/random_spawners.dmi | Bin 0 -> 97084 bytes icons/effects/mapping_helpers.dmi | Bin 16864 -> 0 bytes icons/obj/clothing/gloves.dmi | Bin 24290 -> 21845 bytes icons/obj/lighting.dmi | Bin 80208 -> 76435 bytes shiptest.dme | 24 +- .../Scripts/17256_NEWFOOD_cakebreadnoodle.txt | 22 - ...spawners.txt => 3526_replace_spawners.txt} | 128 +- .../Scripts/55614_replacemonkeys.txt | 5 - .../Scripts/55658_apc_pixel_offsets.txt | 4 - .../UpdatePaths/Scripts/55658_cornersfix.txt | 30 - .../Scripts/56644_turfs2decals.txt | 467 ------ .../Scripts/59820_replaceplasteelturf.txt | 50 - .../Scripts/60619_toxins_to_plasma.txt | 38 - .../Scripts/61694_reinforcedwindows.txt | 35 - .../Scripts/62601_wallitems_f2w.txt | 94 -- .../Scripts/62789_camera_diag_f2w.txt | 5 - .../Scripts/65236_clothingunderrepath.txt | 196 --- .../Scripts/65326_lib_computers.txt | 1 - .../Scripts/65504_floor_repathing.txt | 53 - .../Scripts/65656_windoor_replacement.txt | 39 - .../Scripts/65755_pdas_to_tabs.txt | 56 - .../65906_replace_wayfinding_beacons.txt | 1 - .../66210_replace_tiered_canisters.txt | 9 - .../Scripts/66406_turf_updates.txt | 344 ----- .../Scripts/66411_thermomachines.txt | 6 - .../Scripts/66505_tablet_cartridges.txt | 24 - .../Scripts/66754_replace_sign_names.txt | 17 - .../Scripts/66860_replace_masks.txt | 16 - .../Scripts/67083_action_granters.txt | 1 - .../Scripts/67107_turf_updates_2.txt | 118 -- .../Scripts/67324_misc_space_fix.txt | 4 - .../67512_mail_sorting_to_shipping.txt | 2 - .../67761_floorvaredits_to_mappinghelpers.txt | 66 - ...aredited_signs_to_subtype_directionals.txt | 452 ------ 224 files changed, 4584 insertions(+), 5518 deletions(-) delete mode 100644 code/game/objects/effects/spawners/lootdrop.dm create mode 100644 code/game/objects/effects/spawners/random.dm/ai_module.dm create mode 100644 code/game/objects/effects/spawners/random.dm/anomaly.dm create mode 100644 code/game/objects/effects/spawners/random.dm/bedsheet.dm create mode 100644 code/game/objects/effects/spawners/random.dm/boards.dm create mode 100644 code/game/objects/effects/spawners/random.dm/bureaucracy.dm create mode 100644 code/game/objects/effects/spawners/random.dm/clothing.dm create mode 100644 code/game/objects/effects/spawners/random.dm/decoration.dm create mode 100644 code/game/objects/effects/spawners/random.dm/engineering.dm create mode 100644 code/game/objects/effects/spawners/random.dm/entertainment.dm create mode 100644 code/game/objects/effects/spawners/random.dm/exotic.dm create mode 100644 code/game/objects/effects/spawners/random.dm/food_or_drink.dm create mode 100644 code/game/objects/effects/spawners/random.dm/maintenance.dm create mode 100644 code/game/objects/effects/spawners/random.dm/medical.dm create mode 100644 code/game/objects/effects/spawners/random.dm/random.dm create mode 100644 code/game/objects/effects/spawners/random.dm/readme.md create mode 100644 code/game/objects/effects/spawners/random.dm/salvaging.dm create mode 100644 code/game/objects/effects/spawners/random.dm/structure.dm create mode 100644 code/game/objects/effects/spawners/random.dm/trash.dm create mode 100644 code/game/objects/effects/spawners/random.dm/vending.dm create mode 100644 code/game/objects/effects/spawners/random.dm/waste_planet.dm create mode 100644 code/game/objects/effects/spawners/spawner.dm delete mode 100644 code/game/objects/effects/spawners/traps.dm delete mode 100644 code/game/objects/effects/spawners/vaultspawner.dm delete mode 100644 code/game/objects/effects/spawners/xeno_egg_delivery.dm delete mode 100644 icons/effects/landmarks_static.dmi create mode 100644 icons/effects/mapping/docking_ports.dmi create mode 100644 icons/effects/mapping/landmarks_static.dmi create mode 100644 icons/effects/mapping/mapping_helpers.dmi create mode 100644 icons/effects/mapping/random_spawners.dmi delete mode 100644 icons/effects/mapping_helpers.dmi delete mode 100644 tools/UpdatePaths/Scripts/17256_NEWFOOD_cakebreadnoodle.txt rename tools/UpdatePaths/Scripts/{60522_replace_spawners.txt => 3526_replace_spawners.txt} (62%) delete mode 100644 tools/UpdatePaths/Scripts/55614_replacemonkeys.txt delete mode 100644 tools/UpdatePaths/Scripts/55658_apc_pixel_offsets.txt delete mode 100644 tools/UpdatePaths/Scripts/55658_cornersfix.txt delete mode 100644 tools/UpdatePaths/Scripts/56644_turfs2decals.txt delete mode 100644 tools/UpdatePaths/Scripts/59820_replaceplasteelturf.txt delete mode 100644 tools/UpdatePaths/Scripts/60619_toxins_to_plasma.txt delete mode 100644 tools/UpdatePaths/Scripts/61694_reinforcedwindows.txt delete mode 100644 tools/UpdatePaths/Scripts/62601_wallitems_f2w.txt delete mode 100644 tools/UpdatePaths/Scripts/62789_camera_diag_f2w.txt delete mode 100644 tools/UpdatePaths/Scripts/65236_clothingunderrepath.txt delete mode 100644 tools/UpdatePaths/Scripts/65326_lib_computers.txt delete mode 100644 tools/UpdatePaths/Scripts/65504_floor_repathing.txt delete mode 100644 tools/UpdatePaths/Scripts/65656_windoor_replacement.txt delete mode 100644 tools/UpdatePaths/Scripts/65755_pdas_to_tabs.txt delete mode 100644 tools/UpdatePaths/Scripts/65906_replace_wayfinding_beacons.txt delete mode 100644 tools/UpdatePaths/Scripts/66210_replace_tiered_canisters.txt delete mode 100644 tools/UpdatePaths/Scripts/66406_turf_updates.txt delete mode 100644 tools/UpdatePaths/Scripts/66411_thermomachines.txt delete mode 100644 tools/UpdatePaths/Scripts/66505_tablet_cartridges.txt delete mode 100644 tools/UpdatePaths/Scripts/66754_replace_sign_names.txt delete mode 100644 tools/UpdatePaths/Scripts/66860_replace_masks.txt delete mode 100644 tools/UpdatePaths/Scripts/67083_action_granters.txt delete mode 100644 tools/UpdatePaths/Scripts/67107_turf_updates_2.txt delete mode 100644 tools/UpdatePaths/Scripts/67324_misc_space_fix.txt delete mode 100644 tools/UpdatePaths/Scripts/67512_mail_sorting_to_shipping.txt delete mode 100644 tools/UpdatePaths/Scripts/67761_floorvaredits_to_mappinghelpers.txt delete mode 100644 tools/UpdatePaths/Scripts/68004_varedited_signs_to_subtype_directionals.txt diff --git a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm index bda6fb742d53..dad43ef34082 100644 --- a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm @@ -1144,7 +1144,7 @@ /turf/open/floor/concrete/slab_1, /area/ruin/beach/complex/wall) "sa" = ( -/obj/effect/spawner/lootdrop/garden/seaweed, +/obj/effect/spawner/random/food_or_drink/garden/seaweed, /turf/open/water/beach, /area/overmap_encounter/planetoid/beachplanet/explored) "so" = ( diff --git a/_maps/RandomRuins/BeachRuins/beach_float_resort.dmm b/_maps/RandomRuins/BeachRuins/beach_float_resort.dmm index b2c39404d641..8c8097e2c794 100644 --- a/_maps/RandomRuins/BeachRuins/beach_float_resort.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_float_resort.dmm @@ -825,7 +825,7 @@ dir = 1 }, /obj/item/candle, -/obj/effect/spawner/lootdrop/donut, +/obj/effect/spawner/random/food_or_drink/donut, /turf/open/floor/wood{ light_range = 2 }, diff --git a/_maps/RandomRuins/BeachRuins/beach_ocean_town.dmm b/_maps/RandomRuins/BeachRuins/beach_ocean_town.dmm index 312e11abe0f4..39bebb15982e 100644 --- a/_maps/RandomRuins/BeachRuins/beach_ocean_town.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_ocean_town.dmm @@ -113,7 +113,7 @@ }, /area/overmap_encounter/planetoid/beachplanet/explored) "bs" = ( -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /turf/open/floor/plasteel/patterned/grid, /area/ruin/beach/oceantown/shop) "bu" = ( @@ -412,9 +412,9 @@ /area/ruin/beach/oceantown) "fn" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/donut/slimejelly, -/obj/effect/spawner/lootdrop/donut, -/obj/effect/spawner/lootdrop/donut, +/obj/effect/spawner/random/food_or_drink/donut/slimejelly, +/obj/effect/spawner/random/food_or_drink/donut, +/obj/effect/spawner/random/food_or_drink/donut, /turf/open/floor/plasteel/patterned/grid, /area/ruin/beach/oceantown/shop) "fp" = ( @@ -711,8 +711,8 @@ /area/overmap_encounter/planetoid/beachplanet/explored) "ix" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/donut/slimejelly, -/obj/effect/spawner/lootdrop/donut, +/obj/effect/spawner/random/food_or_drink/donut/slimejelly, +/obj/effect/spawner/random/food_or_drink/donut, /turf/open/floor/plasteel/patterned/grid, /area/ruin/beach/oceantown/shop) "iz" = ( @@ -1560,11 +1560,11 @@ /area/ruin/beach/oceantown/bar) "un" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/donut, -/obj/effect/spawner/lootdrop/donut, -/obj/effect/spawner/lootdrop/donut, -/obj/effect/spawner/lootdrop/donut, -/obj/effect/spawner/lootdrop/donut/slimejelly, +/obj/effect/spawner/random/food_or_drink/donut, +/obj/effect/spawner/random/food_or_drink/donut, +/obj/effect/spawner/random/food_or_drink/donut, +/obj/effect/spawner/random/food_or_drink/donut, +/obj/effect/spawner/random/food_or_drink/donut/slimejelly, /turf/open/floor/plasteel/patterned/grid, /area/ruin/beach/oceantown/shop) "ur" = ( @@ -3367,8 +3367,8 @@ /area/overmap_encounter/planetoid/beachplanet/explored) "NX" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/donut/jelly, -/obj/effect/spawner/lootdrop/donut/jelly, +/obj/effect/spawner/random/food_or_drink/donut/jelly, +/obj/effect/spawner/random/food_or_drink/donut/jelly, /turf/open/floor/plasteel/patterned/grid, /area/ruin/beach/oceantown/shop) "Oe" = ( @@ -3541,7 +3541,7 @@ /area/ruin/beach/oceantown) "PF" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/donut/slimejelly, +/obj/effect/spawner/random/food_or_drink/donut/slimejelly, /turf/open/floor/plasteel/patterned/grid, /area/ruin/beach/oceantown/shop) "PH" = ( @@ -3569,7 +3569,7 @@ /turf/open/water/beach, /area/overmap_encounter/planetoid/beachplanet/explored) "Qf" = ( -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /turf/open/floor/plasteel/patterned/grid, /area/ruin/beach/oceantown/shop) "Qm" = ( @@ -3733,10 +3733,10 @@ /area/overmap_encounter/planetoid/beachplanet/explored) "SS" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/donut, -/obj/effect/spawner/lootdrop/donut, -/obj/effect/spawner/lootdrop/donut/slimejelly, -/obj/effect/spawner/lootdrop/donut/jelly, +/obj/effect/spawner/random/food_or_drink/donut, +/obj/effect/spawner/random/food_or_drink/donut, +/obj/effect/spawner/random/food_or_drink/donut/slimejelly, +/obj/effect/spawner/random/food_or_drink/donut/jelly, /turf/open/floor/plasteel/patterned/grid, /area/ruin/beach/oceantown/shop) "SY" = ( @@ -3906,7 +3906,7 @@ /area/ruin/beach/oceantown/bar) "Vr" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/carpet, /area/ruin/beach/oceantown) "VI" = ( @@ -3945,9 +3945,9 @@ /area/ruin/beach/oceantown/shop) "VQ" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/donut/jelly, -/obj/effect/spawner/lootdrop/donut/jelly, -/obj/effect/spawner/lootdrop/donut/jelly, +/obj/effect/spawner/random/food_or_drink/donut/jelly, +/obj/effect/spawner/random/food_or_drink/donut/jelly, +/obj/effect/spawner/random/food_or_drink/donut/jelly, /turf/open/floor/plasteel/patterned/grid, /area/ruin/beach/oceantown/shop) "VS" = ( @@ -4112,11 +4112,11 @@ /area/overmap_encounter/planetoid/beachplanet/explored) "XQ" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/donut/jelly, -/obj/effect/spawner/lootdrop/donut/jelly, -/obj/effect/spawner/lootdrop/donut/jelly, -/obj/effect/spawner/lootdrop/donut/slimejelly, -/obj/effect/spawner/lootdrop/donut/jelly, +/obj/effect/spawner/random/food_or_drink/donut/jelly, +/obj/effect/spawner/random/food_or_drink/donut/jelly, +/obj/effect/spawner/random/food_or_drink/donut/jelly, +/obj/effect/spawner/random/food_or_drink/donut/slimejelly, +/obj/effect/spawner/random/food_or_drink/donut/jelly, /turf/open/floor/plasteel/patterned/grid, /area/ruin/beach/oceantown/shop) "XS" = ( diff --git a/_maps/RandomRuins/BeachRuins/beach_pirate_crash.dmm b/_maps/RandomRuins/BeachRuins/beach_pirate_crash.dmm index 67ac69292603..fddfa5bdc00f 100644 --- a/_maps/RandomRuins/BeachRuins/beach_pirate_crash.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_pirate_crash.dmm @@ -1111,7 +1111,7 @@ /obj/structure/closet/crate, /obj/effect/turf_decal/box, /obj/item/stack/cable_coil/red, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ruin/beach/piratecrash/shuttle) @@ -1350,7 +1350,7 @@ "Pf" = ( /obj/effect/turf_decal/box, /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/item/stack/sheet/mineral/gold/five, /obj/item/stack/sheet/mineral/silver/five, /obj/item/stack/sheet/mineral/silver/five, @@ -1433,9 +1433,9 @@ "QG" = ( /obj/effect/turf_decal/box, /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/random_machine_circuit_rare, -/obj/effect/spawner/lootdrop/maintenance/four, -/obj/effect/spawner/lootdrop/random_machine_circuit_common, +/obj/effect/spawner/random/circuit/machine/rare, +/obj/effect/spawner/random/maintenance/four, +/obj/effect/spawner/random/circuit/machine/common, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/rust, diff --git a/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm b/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm index 839e87815f93..fbf9bf8ed4eb 100644 --- a/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm @@ -35,7 +35,7 @@ "bI" = ( /obj/effect/turf_decal/industrial/hatch/yellow, /obj/machinery/light/small/directional/north, -/obj/effect/spawner/lootdrop/glowstick, +/obj/effect/spawner/random/decoration/glowstick, /turf/open/floor/concrete/slab_1, /area/ruin/beach/treasure_cove) "bN" = ( @@ -53,7 +53,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/glowstick, +/obj/effect/spawner/random/decoration/glowstick, /turf/open/floor/plating/dirt/jungle, /area/ruin/unpowered) "cJ" = ( @@ -543,7 +543,7 @@ pixel_x = -10; pixel_y = 4 }, -/obj/effect/spawner/lootdrop/glowstick, +/obj/effect/spawner/random/decoration/glowstick, /turf/open/floor/wood, /area/ruin/beach/treasure_cove) "rA" = ( diff --git a/_maps/RandomRuins/IceRuins/icemoon_crashed_holemaker.dmm b/_maps/RandomRuins/IceRuins/icemoon_crashed_holemaker.dmm index 707be4573d13..294dd1056431 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_crashed_holemaker.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_crashed_holemaker.dmm @@ -473,9 +473,7 @@ /obj/structure/bed/double{ dir = 1 }, -/obj/item/bedsheet/dorms/double{ - dir = 1 - }, +/obj/effect/spawner/random/bedsheet/double, /turf/open/floor/plasteel/dark, /area/ruin/unpowered/crashed_holemaker) "iN" = ( @@ -674,7 +672,7 @@ /area/ruin/unpowered/crashed_holemaker) "lt" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/crate_spawner, +/obj/effect/spawner/random/structure/crate_abandoned, /turf/open/floor/plating, /area/ruin/unpowered/crashed_holemaker) "lu" = ( @@ -743,7 +741,7 @@ }, /obj/item/radio/intercom/directional/north, /obj/structure/closet/cabinet, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/dark, /area/ruin/unpowered/crashed_holemaker) @@ -1441,7 +1439,7 @@ /turf/open/floor/carpet, /area/ruin/unpowered/crashed_holemaker) "ze" = ( -/obj/effect/spawner/lootdrop/crate_spawner, +/obj/effect/spawner/random/structure/crate_abandoned, /turf/open/floor/plating, /area/ruin/unpowered/crashed_holemaker) "zh" = ( @@ -2389,7 +2387,7 @@ /turf/open/floor/plasteel/icemoon, /area/ruin/unpowered/crashed_holemaker) "RL" = ( -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /obj/effect/turf_decal/spline/fancy/transparent/neutral/corner{ dir = 4 }, diff --git a/_maps/RandomRuins/IceRuins/icemoon_ice_lodge.dmm b/_maps/RandomRuins/IceRuins/icemoon_ice_lodge.dmm index 92b840e05aa0..a698cf49ea18 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_ice_lodge.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_ice_lodge.dmm @@ -337,7 +337,7 @@ /turf/open/floor/concrete/slab_3/icemoon, /area/overmap_encounter/planetoid/cave/explored) "fe" = ( -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet, /obj/effect/turf_decal/siding/wood, /obj/structure/bed{ icon_state = "dirty_mattress" @@ -1256,10 +1256,10 @@ /obj/item/clothing/head/frontier, /obj/item/clothing/gloves/color/latex, /obj/item/clothing/mask/surgical, -/obj/effect/spawner/lootdrop/chem_jug, -/obj/effect/spawner/lootdrop/chem_jug, -/obj/effect/spawner/lootdrop/chem_jug, -/obj/effect/spawner/lootdrop/chem_jug, +/obj/effect/spawner/random/medical/chem_jug, +/obj/effect/spawner/random/medical/chem_jug, +/obj/effect/spawner/random/medical/chem_jug, +/obj/effect/spawner/random/medical/chem_jug, /obj/effect/turf_decal/corner/opaque/blue, /obj/effect/turf_decal/corner/opaque/neutral{ dir = 4 @@ -1659,7 +1659,7 @@ /area/ruin/powered/icemoon/lodge/mainhall) "wD" = ( /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet, /obj/effect/turf_decal/siding/wood{ dir = 10 }, @@ -1771,7 +1771,7 @@ /turf/open/floor/wood/maple, /area/ruin/powered/icemoon/lodge/mainhall) "yi" = ( -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet, /obj/effect/turf_decal/siding/wood{ dir = 6 }, @@ -1968,9 +1968,9 @@ /obj/effect/turf_decal/spline/fancy/wood{ dir = 8 }, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /turf/open/floor/wood/mahogany{ icon_state = "wood-broken6" }, @@ -2677,7 +2677,7 @@ /turf/closed/wall/mineral/wood, /area/ruin/powered/icemoon/lodge/residential) "Nq" = ( -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet, /obj/effect/turf_decal/siding/wood, /obj/effect/decal/cleanable/dirt, /obj/structure/bed{ diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm index 42aa6b288469..f4db9fa9d9f7 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm @@ -40,7 +40,7 @@ "fD" = ( /obj/structure/bed, /obj/effect/decal/cleanable/blood/bubblegum, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/wood, /area/ruin/powered) "fQ" = ( @@ -459,7 +459,7 @@ /area/overmap_encounter/planetoid/cave/explored) "LZ" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/wood, /area/ruin/powered) "Nq" = ( @@ -477,7 +477,7 @@ /turf/open/floor/carpet, /area/ruin/powered) "Pp" = ( -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /turf/open/floor/holofloor/wood, /area/ruin/powered) "PQ" = ( @@ -554,7 +554,7 @@ "WH" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/wood, /area/ruin/powered) "Ze" = ( diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_brazillianlab.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_brazillianlab.dmm index d560e98b2f20..1a52405a3ec0 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_brazillianlab.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_brazillianlab.dmm @@ -478,7 +478,7 @@ /area/overmap_encounter/planetoid/cave/explored) "xN" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/ruin/unpowered) "xQ" = ( @@ -1028,7 +1028,7 @@ /obj/structure/rack, /obj/item/hatchet, /obj/item/hatchet, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/ruin/unpowered) "Ul" = ( @@ -1086,7 +1086,7 @@ /obj/item/ammo_casing/shotgun/improvised, /obj/item/ammo_casing/shotgun/improvised, /obj/item/ammo_casing/shotgun/improvised, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/ruin/unpowered) "WH" = ( @@ -1181,7 +1181,7 @@ "Yx" = ( /obj/effect/decal/cleanable/dirt, /obj/item/rack_parts, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/wood{ icon_state = "wood-broken3"; initial_gas_mix = "ICEMOON_ATMOS" diff --git a/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm b/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm index 77c280d07e90..1afed51826aa 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm @@ -811,10 +811,10 @@ /area/overmap_encounter/planetoid/jungle/explored) "fJ" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, /turf/open/floor/plasteel/dark, /area/overmap_encounter/planetoid/jungle/explored) "fL" = ( @@ -2699,7 +2699,7 @@ /area/overmap_encounter/planetoid/jungle/explored) "sK" = ( /obj/structure/table, -/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, /turf/open/floor/plasteel/grimy, /area/ruin/jungle/starport) "sN" = ( diff --git a/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm b/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm index 923e58b4cb05..1159123d30f1 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm @@ -167,7 +167,7 @@ /area/overmap_encounter/planetoid/cave/explored) "bH" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/cloth/grey, /obj/effect/decal/cleanable/shreds, /turf/open/floor/carpet/nanoweave/beige, @@ -1028,10 +1028,10 @@ pixel_y = 32 }, /obj/structure/closet/secure_closet/freezer/wall/directional/west, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/reagent_containers/condiment/enzyme{ pixel_x = -8; pixel_y = 5 @@ -2221,7 +2221,7 @@ /area/ruin/jungle/cavecrew/bridge) "Be" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/cloth/grey, /turf/open/floor/carpet/red_gold, /area/ruin/jungle/cavecrew/dormitories) diff --git a/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm b/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm index 75b7e390c540..467dd8e8abd7 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm @@ -2108,7 +2108,7 @@ /obj/effect/turf_decal/corner/opaque/mauve{ dir = 1 }, -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /turf/open/floor/plasteel/dark, /area/ship/crew/office) "Ie" = ( diff --git a/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm b/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm index 47455933ec16..4429e0b8779a 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm @@ -685,7 +685,7 @@ /turf/open/floor/plating/grass/jungle, /area/overmap_encounter/planetoid/cave/explored) "ei" = ( -/obj/effect/spawner/lootdrop/glowstick, +/obj/effect/spawner/random/decoration/glowstick, /turf/open/floor/plating/dirt/jungle/dark, /area/overmap_encounter/planetoid/cave/explored) "el" = ( @@ -989,7 +989,7 @@ /obj/structure/bed{ icon_state = "dirty_mattress" }, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/decal/cleanable/dirt, /obj/structure/railing{ color = "#A47449"; @@ -1446,7 +1446,7 @@ dir = 4; layer = 3.9 }, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/cable/yellow{ icon_state = "1-9" }, @@ -3204,7 +3204,7 @@ /obj/structure/bed{ icon_state = "dirty_mattress" }, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/cable/yellow{ icon_state = "0-5" }, @@ -4344,11 +4344,11 @@ /obj/effect/turf_decal/techfloor/corner{ dir = 1 }, -/obj/effect/spawner/lootdrop/three_course_meal, -/obj/effect/spawner/lootdrop/three_course_meal, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/random/food_or_drink/three_course_meal, +/obj/effect/spawner/random/food_or_drink/three_course_meal, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, /turf/open/floor/plasteel/tech/grid, /area/ruin/jungle/paradise/cargo) "AT" = ( @@ -5764,9 +5764,9 @@ /obj/structure/cable/yellow{ icon_state = "1-6" }, -/obj/effect/spawner/lootdrop/three_course_meal, -/obj/effect/spawner/lootdrop/three_course_meal, -/obj/effect/spawner/lootdrop/three_course_meal, +/obj/effect/spawner/random/food_or_drink/three_course_meal, +/obj/effect/spawner/random/food_or_drink/three_course_meal, +/obj/effect/spawner/random/food_or_drink/three_course_meal, /obj/item/reagent_containers/food/snacks/meat/slab, /obj/item/reagent_containers/food/snacks/meat/slab, /obj/item/reagent_containers/food/snacks/meat/slab, @@ -7185,7 +7185,7 @@ /obj/structure/bed{ icon_state = "dirty_mattress" }, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/wood/walnut, /area/ruin/jungle/paradise/dorms) "UC" = ( @@ -7411,7 +7411,7 @@ }, /area/overmap_encounter/planetoid/cave/explored) "VV" = ( -/obj/effect/spawner/lootdrop/glowstick, +/obj/effect/spawner/random/decoration/glowstick, /turf/open/floor/plating/dirt/jungle, /area/overmap_encounter/planetoid/cave/explored) "VW" = ( diff --git a/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm b/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm index 2eba13537777..60d24171ad0f 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm @@ -662,7 +662,7 @@ /obj/item/storage/box/donkpockets/donkpocketteriyaki, /obj/item/storage/box/donkpockets, /obj/item/storage/box/donkpockets/donkpocketberry, -/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, /turf/open/floor/plating, /area/ruin/jungle/syndifort) "ve" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm b/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm index 24fea81ce05c..dd98807a4958 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm @@ -77,7 +77,7 @@ /obj/effect/turf_decal/spline/fancy/opaque/syndiered/corner{ dir = 4 }, -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /turf/open/floor/plasteel/white, /area/ruin/unpowered/listening_post) "cm" = ( @@ -2039,7 +2039,7 @@ /area/ruin/unpowered/listening_post/engineering) "MZ" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/structure/sign/poster/official/high_class_martini{ pixel_y = 32 }, @@ -2124,8 +2124,8 @@ /area/ruin/unpowered/listening_post/commons) "Om" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /turf/open/floor/plasteel/dark, /area/ruin/unpowered/listening_post/canteen) "On" = ( @@ -2246,7 +2246,7 @@ icon_state = "trimline"; dir = 8 }, -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /obj/effect/turf_decal/siding/thinplating/dark{ dir = 10 }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm b/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm index 336588e2d807..e0a98de791fc 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm @@ -2415,7 +2415,7 @@ pixel_x = -26 }, /obj/structure/spider/stickyweb, -/obj/effect/spawner/lootdrop/glowstick, +/obj/effect/spawner/random/decoration/glowstick, /turf/open/floor/pod/light, /area/ruin/unpowered/crashed_starwalker) "MO" = ( @@ -2447,7 +2447,7 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, /area/ruin/unpowered/crashed_starwalker) "MX" = ( -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /obj/structure/railing{ dir = 4 }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_wrecked_factory.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_wrecked_factory.dmm index 768c6275cf56..3a6b545859b7 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_wrecked_factory.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_wrecked_factory.dmm @@ -164,8 +164,8 @@ /area/ruin/lavaland/factory/manager_office) "bE" = ( /obj/structure/closet/crate/trashcart, -/obj/effect/spawner/lootdrop/waste/trash, -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, +/obj/effect/spawner/random/trash/decal, /obj/item/storage/bag/trash, /obj/item/reagent_containers/glass/bucket, /obj/item/mop, @@ -216,7 +216,7 @@ "cm" = ( /obj/structure/table/wood, /obj/machinery/light/directional/east, -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /turf/open/floor/wood, /area/ruin/lavaland/factory/adminstrative) "co" = ( @@ -341,7 +341,7 @@ /area/ruin/lavaland/factory/warehouse) "dc" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/cloth, /obj/effect/turf_decal/corner/opaque/ntblue, /obj/effect/turf_decal/corner/opaque/ntblue{ @@ -641,7 +641,7 @@ }, /obj/item/modular_computer/laptop, /obj/item/stack/arcadeticket, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel/white, /area/ruin/lavaland/factory/dorms) "go" = ( @@ -1506,7 +1506,7 @@ }, /obj/item/storage/wallet/random, /obj/item/instrument/guitar, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel/white, /area/ruin/lavaland/factory/dorms) "oh" = ( @@ -1887,7 +1887,7 @@ /obj/item/poster/random_contraband, /obj/item/toy/eightball, /obj/item/toy/cards/deck/tarot, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel/white, /area/ruin/lavaland/factory/dorms) "rh" = ( @@ -2287,7 +2287,7 @@ /obj/item/storage/fancy/cigarettes/cigpack_cannabis, /obj/item/lighter/greyscale, /obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel/white, /area/ruin/lavaland/factory/dorms) "ve" = ( @@ -2985,7 +2985,7 @@ /obj/machinery/light/directional/west, /obj/item/melee/knife/hunting, /obj/item/clothing/suit/hooded/cloak/goliath, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel/white, /area/ruin/lavaland/factory/dorms) "CW" = ( @@ -3149,18 +3149,18 @@ /obj/effect/turf_decal/corner/opaque/ntblue{ dir = 1 }, -/obj/effect/spawner/lootdrop/waste/trash, -/obj/effect/spawner/lootdrop/waste/trash, -/obj/effect/spawner/lootdrop/waste/trash, -/obj/effect/spawner/lootdrop/waste/trash, -/obj/effect/spawner/lootdrop/waste/trash, -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, +/obj/effect/spawner/random/trash/decal, +/obj/effect/spawner/random/trash/decal, +/obj/effect/spawner/random/trash/decal, +/obj/effect/spawner/random/trash/decal, +/obj/effect/spawner/random/trash/decal, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/white, /area/ruin/lavaland/factory/dorms) "EP" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/cloth, /obj/effect/turf_decal/corner/opaque/ntblue, /obj/effect/turf_decal/corner/opaque/ntblue{ @@ -4062,11 +4062,11 @@ /area/overmap_encounter/planetoid/cave/explored) "Or" = ( /obj/structure/closet/crate/freezer, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, @@ -4945,9 +4945,9 @@ /obj/effect/turf_decal/corner/opaque/bar, /obj/structure/closet/crate/bin, /obj/machinery/light/directional/west, -/obj/effect/spawner/lootdrop/waste/trash, -/obj/effect/spawner/lootdrop/waste/trash, -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, +/obj/effect/spawner/random/trash/decal, +/obj/effect/spawner/random/trash/decal, /turf/open/floor/plasteel, /area/ruin/lavaland/factory/dorms) "Xn" = ( @@ -5078,7 +5078,7 @@ /area/overmap_encounter/planetoid/lava/explored) "YJ" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/cloth, /obj/effect/turf_decal/corner/opaque/ntblue, /obj/effect/turf_decal/corner/opaque/ntblue{ diff --git a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm index 3b2b995fd979..c9c7ea2501f3 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm @@ -109,7 +109,7 @@ /turf/open/floor/wood, /area/ruin/rockplanet/nanotrasen) "by" = ( -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /obj/effect/turf_decal/industrial/warning, /obj/machinery/light/dim/directional/north, /turf/open/floor/plasteel, @@ -214,7 +214,7 @@ /area/ruin/rockplanet/nanotrasen) "db" = ( /obj/structure/bed/pod, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/ruin/rockplanet/nanotrasen) @@ -1551,7 +1551,7 @@ /obj/structure/railing{ dir = 4 }, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/wood, /area/ruin/rockplanet/nanotrasen) "Ap" = ( @@ -1699,7 +1699,7 @@ /area/overmap_encounter/planetoid/rockplanet/explored) "Cx" = ( /obj/structure/bed/pod, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/light/dim/directional/east, /turf/open/floor/wood, /area/ruin/rockplanet/nanotrasen) @@ -2493,7 +2493,7 @@ /area/ruin/rockplanet/nanotrasen) "Rm" = ( /obj/structure/bed/pod, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/light/dim/directional/east, /turf/open/floor/carpet/black, /area/ruin/rockplanet/nanotrasen) diff --git a/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm b/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm index 3926cffbbf81..6d6f81ffd5a0 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm @@ -401,7 +401,7 @@ /turf/open/floor/plating/asteroid/rockplanet/lit, /area/overmap_encounter/planetoid/rockplanet/explored) "dZ" = ( -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /obj/effect/turf_decal/spline/fancy/opaque/white, /turf/open/floor/plasteel/patterned/brushed, /area/ruin/rockplanet/distillery/crew) @@ -859,7 +859,7 @@ dir = 8; icon_state = "dirty_mattress" }, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/wood, /area/ruin/rockplanet/distillery/crew) "kn" = ( @@ -1613,12 +1613,12 @@ "sQ" = ( /obj/effect/turf_decal/industrial/outline/red, /obj/structure/closet/crate/freezer, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /turf/open/floor/plasteel/patterned/brushed/rockplanet, /area/ruin/rockplanet/distillery/crew) "tc" = ( @@ -2187,7 +2187,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/pod, /area/ruin/rockplanet/distillery/office) "yO" = ( @@ -3032,10 +3032,10 @@ "Iz" = ( /obj/structure/closet/crate, /obj/effect/turf_decal/industrial/outline/red, -/obj/effect/spawner/lootdrop/random_computer_circuit_common, -/obj/effect/spawner/lootdrop/maintenance/four, -/obj/effect/spawner/lootdrop/random_machine_circuit_common, -/obj/effect/spawner/lootdrop/random_machine_circuit_common, +/obj/effect/spawner/random/circuit/computer/common, +/obj/effect/spawner/random/maintenance/four, +/obj/effect/spawner/random/circuit/machine/common, +/obj/effect/spawner/random/circuit/machine/common, /turf/open/floor/plasteel/patterned/brushed/rockplanet, /area/ruin/rockplanet/distillery/crew) "IA" = ( @@ -3419,7 +3419,7 @@ icon_state = "1-5" }, /obj/machinery/light/small/directional/west, -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/maintenance/four, /turf/open/floor/wood/rockplanet{ icon_state = "wood-broken6" }, @@ -3582,9 +3582,7 @@ }, /area/overmap_encounter/planetoid/rockplanet/explored) "Os" = ( -/obj/machinery/vending/snack/random{ - tilted = 1 - }, +/obj/effect/spawner/random/vending/snack, /obj/effect/turf_decal/spline/fancy/opaque/white, /turf/open/floor/plasteel/patterned/brushed, /area/ruin/rockplanet/distillery/crew) @@ -4185,7 +4183,7 @@ /obj/structure/fluff/glowshroom, /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate/bin, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/wood, /area/ruin/rockplanet/distillery/crew) "Vg" = ( @@ -4199,7 +4197,7 @@ widenet = 1 }, /obj/machinery/light/small/broken/directional/east, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plasteel/patterned/brushed, /area/ruin/rockplanet/distillery/crew) "Vj" = ( diff --git a/_maps/RandomRuins/RockRuins/rockplanet_nomadcrash.dmm b/_maps/RandomRuins/RockRuins/rockplanet_nomadcrash.dmm index ff58248ffc4e..6db4bf5240a2 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_nomadcrash.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_nomadcrash.dmm @@ -408,7 +408,7 @@ icon_state = "1-8" }, /obj/structure/frame/machine, -/obj/effect/spawner/lootdrop/salvage_matter_bin, +/obj/effect/spawner/random/salvage_matter_bin, /turf/open/floor/plasteel/rockplanet, /area/ruin/rockplanet/nomad) "oz" = ( @@ -558,7 +558,7 @@ }, /obj/structure/frame/machine, /obj/machinery/light/small/directional/north, -/obj/effect/spawner/lootdrop/salvage_matter_bin, +/obj/effect/spawner/random/salvage_matter_bin, /turf/open/floor/plating, /area/ruin/rockplanet/nomad) "sn" = ( @@ -1272,7 +1272,7 @@ icon_state = "spline_plain_cee" }, /obj/structure/frame/machine, -/obj/effect/spawner/lootdrop/salvage_matter_bin, +/obj/effect/spawner/random/salvage_matter_bin, /turf/open/floor/plasteel/tech/grid, /area/ruin/rockplanet/nomad) "Lk" = ( diff --git a/_maps/RandomRuins/RockRuins/rockplanet_shippingdock.dmm b/_maps/RandomRuins/RockRuins/rockplanet_shippingdock.dmm index f18742a8aadb..1c518cceabca 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_shippingdock.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_shippingdock.dmm @@ -288,7 +288,7 @@ /turf/open/floor/wood, /area/ruin/rockplanet/shippingdockoffice) "cz" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ruin/rockplanet/shippingdock) @@ -2068,7 +2068,7 @@ "sa" = ( /obj/effect/turf_decal/rechargefloor, /obj/effect/turf_decal/industrial/warning/dust, -/obj/effect/spawner/lootdrop/ripley, +/obj/effect/spawner/random/exotic/ripley, /turf/open/floor/plasteel/mono/dark, /area/ruin/rockplanet/shippingdockwarehouse) "sc" = ( @@ -2132,7 +2132,7 @@ /area/overmap_encounter/planetoid/rockplanet/explored) "su" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/concrete/pavement{ light_power = 0.6; light_range = 2 @@ -2426,7 +2426,7 @@ /area/ruin/rockplanet/shippingdockoffice) "uo" = ( /obj/structure/closet/crate/trashcart, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/item/trash/can, /obj/item/trash/can/food/peaches, /obj/item/trash/tray, @@ -4044,7 +4044,7 @@ }, /area/overmap_encounter/planetoid/rockplanet/explored) "HL" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/concrete/pavement{ light_power = 0.6; light_range = 2 @@ -4208,7 +4208,7 @@ /turf/open/floor/concrete/pavement, /area/ruin/rockplanet/shippingdockwarehouse) "Ju" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/ruin/rockplanet/shippingdock) "Jz" = ( @@ -5282,9 +5282,9 @@ "SJ" = ( /obj/structure/rack, /obj/structure/window/reinforced, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, /turf/open/floor/plasteel/mono/white, /area/ruin/rockplanet/shippingdockwarehouse) "SM" = ( @@ -5968,7 +5968,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/obj/effect/spawner/lootdrop/maintenance/eight, +/obj/effect/spawner/random/maintenance/eight, /turf/open/floor/plasteel/mono/white, /area/ruin/rockplanet/shippingdockwarehouse) "XU" = ( @@ -6020,7 +6020,7 @@ "Yf" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/concrete/pavement{ light_power = 0.6; light_range = 2 diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm index c7b060634951..c19dd9de68a1 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm @@ -115,7 +115,7 @@ /area/ruin) "fb" = ( /obj/structure/flora/ash/cap_shroom, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/asteroid/whitesands{ light_range = 2 }, @@ -269,7 +269,7 @@ /area/overmap_encounter/planetoid/sand/explored) "ko" = ( /obj/structure/closet/crate/bin, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/item/chair/stool/bar, /turf/open/floor/wood, /area/ruin) @@ -290,7 +290,7 @@ }, /area/overmap_encounter/planetoid/sand/explored) "kO" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/asteroid/whitesands{ light_range = 2 }, @@ -699,7 +699,7 @@ /area/ruin) "AI" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/wood, /area/ruin) "AR" = ( @@ -915,7 +915,7 @@ /turf/open/floor/wood, /area/ruin) "HX" = ( -/obj/effect/spawner/lootdrop/armory_contraband/metastation, +/obj/effect/spawner/random/exotic/armory, /turf/open/floor/plating/asteroid/whitesands/dried{ light_range = 2 }, @@ -964,7 +964,7 @@ }, /area/overmap_encounter/planetoid/sand/explored) "JE" = ( -/obj/effect/spawner/lootdrop/tool_engie_sydnie, +/obj/effect/spawner/random/engineering/tool/sydnie, /turf/open/floor/plating/asteroid/whitesands{ light_range = 2 }, @@ -1164,7 +1164,7 @@ }, /area/overmap_encounter/planetoid/sand/explored) "SV" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/asteroid/whitesands/dried{ light_range = 2 }, @@ -1273,7 +1273,7 @@ /area/ruin) "Xa" = ( /obj/structure/closet/crate/bin, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/wood, /area/ruin) "Xb" = ( diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm index 219fc7a6b6b6..17a16c3fffc6 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm @@ -133,7 +133,7 @@ /area/ruin/whitesands/saloon) "eq" = ( /obj/structure/closet/crate/bin, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/directional/west, /turf/open/floor/wood, @@ -220,7 +220,7 @@ /area/ruin/whitesands/saloon) "ge" = ( /obj/structure/closet/cabinet, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ icon_state = "wood-broken5" @@ -426,7 +426,7 @@ /area/ruin/whitesands/saloon) "lg" = ( /obj/structure/closet/crate/bin, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/wood, /area/ruin/whitesands/saloon) "lB" = ( @@ -444,7 +444,7 @@ /area/ruin/whitesands/saloon) "lI" = ( /obj/structure/table/wood/poker, -/obj/effect/spawner/lootdrop/gambling, +/obj/effect/spawner/random/entertainment/gambling, /turf/open/floor/carpet, /area/ruin/whitesands/saloon) "lV" = ( @@ -645,7 +645,7 @@ /area/ruin/whitesands/saloon) "sj" = ( /obj/structure/closet/crate/bin, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/item/chair/stool/bar, /turf/open/floor/wood, /area/ruin/whitesands/saloon) @@ -848,7 +848,7 @@ /area/ruin/whitesands/saloon) "zv" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/wood{ icon_state = "wood-broken5" }, @@ -1025,7 +1025,7 @@ /area/ruin/whitesands/saloon) "EV" = ( /obj/structure/closet/cabinet, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/dirt, /obj/item/gun/energy/plasmacutter{ icon_state = "pulse_carbine"; @@ -1355,7 +1355,7 @@ /area/ruin/whitesands/saloon) "Pi" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/wood, /area/ruin/whitesands/saloon) "Px" = ( @@ -1590,7 +1590,7 @@ /area/ruin/whitesands/saloon) "Wl" = ( /obj/structure/closet/cabinet, -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/maintenance/four, /turf/open/floor/wood, /area/ruin/whitesands/saloon) "WP" = ( diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_medipen_plant.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_medipen_plant.dmm index 7ae333dcd541..60dfc9186132 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_medipen_plant.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_medipen_plant.dmm @@ -751,7 +751,7 @@ /turf/open/floor/plasteel/dark, /area/ruin/powered) "uu" = ( -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 }, @@ -760,7 +760,7 @@ /turf/open/floor/plasteel/dark, /area/ruin/powered) "uz" = ( -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 }, @@ -848,7 +848,7 @@ }, /obj/effect/turf_decal/corner/transparent/neutral, /obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /turf/open/floor/plasteel/dark, /area/ruin/powered) "xd" = ( @@ -1210,7 +1210,7 @@ /area/ruin/powered) "KU" = ( /obj/structure/table, -/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 }, diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_pubbyslopcrash.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_pubbyslopcrash.dmm index 6906e1dd2bed..5cfb5e8eb771 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_pubbyslopcrash.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_pubbyslopcrash.dmm @@ -225,8 +225,8 @@ /obj/effect/turf_decal/industrial/warning{ dir = 1 }, -/obj/effect/spawner/lootdrop/maintenance/five, -/obj/effect/spawner/lootdrop/maintenance/five, +/obj/effect/spawner/random/maintenance/five, +/obj/effect/spawner/random/maintenance/five, /turf/open/floor/plasteel, /area/ruin/whitesands/pubbycrash) "fO" = ( @@ -405,7 +405,7 @@ dir = 8; name = "engine fuel pump" }, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plasteel/tech, /area/ruin/whitesands/pubbycrash/engine_room) "jt" = ( @@ -502,7 +502,7 @@ "ln" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/emcloset/wall/directional/south, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plasteel/tech/grid, /area/ruin/whitesands/pubbycrash/engine_room) "ly" = ( @@ -530,7 +530,7 @@ name = "engine fuel pump" }, /obj/machinery/light/small/directional/north, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/item/stack/sheet/mineral/wood/fifty, /obj/structure/closet/crate, /turf/open/floor/plasteel/tech, @@ -622,7 +622,7 @@ /area/ruin/whitesands/pubbycrash) "nP" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/engine, /area/ruin/whitesands/pubbycrash) "nQ" = ( @@ -780,7 +780,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plasteel/tech, /area/ruin/whitesands/pubbycrash/engine_room) "rT" = ( @@ -931,7 +931,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/engine, /area/ruin/whitesands/pubbycrash) "vL" = ( @@ -972,7 +972,7 @@ /obj/structure/sign/poster/official/random{ pixel_x = 32 }, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, /area/ruin/whitesands/pubbycrash) @@ -1063,7 +1063,7 @@ /obj/structure/table, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/industrial/warning/corner, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plasteel/tech, /area/ruin/whitesands/pubbycrash/engine_room) "xX" = ( @@ -1792,7 +1792,7 @@ /obj/structure/sign/poster/retro/nanotrasen_logo_70s{ pixel_x = -32 }, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/ruin/whitesands/pubbycrash/engine_room) "KT" = ( @@ -2003,7 +2003,7 @@ }, /obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable/yellow, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plasteel/tech, /area/ruin/whitesands/pubbycrash/engine_room) "PA" = ( @@ -2118,7 +2118,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ruin/whitesands/pubbycrash/engine_room) "RC" = ( -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/item/stack/ore/salvage/scraptitanium, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, @@ -2292,7 +2292,7 @@ /obj/structure/sign/number/two, /obj/item/stack/ore/salvage/scrapmetal, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/engine, /area/ruin/whitesands/pubbycrash) "Wo" = ( diff --git a/_maps/RandomRuins/SpaceRuins/astraeus.dmm b/_maps/RandomRuins/SpaceRuins/astraeus.dmm index 2c62420cef30..e790766a2a94 100644 --- a/_maps/RandomRuins/SpaceRuins/astraeus.dmm +++ b/_maps/RandomRuins/SpaceRuins/astraeus.dmm @@ -101,7 +101,7 @@ /turf/open/space, /area/space/nearstation) "dx" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel/airless, /area/ruin/space/has_grav/astraeus/hallway) "dA" = ( @@ -326,7 +326,7 @@ /turf/open/space, /area/space/nearstation) "jd" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/airless, /area/ruin/space/has_grav/astraeus/disposals) "je" = ( @@ -349,7 +349,7 @@ /obj/machinery/conveyor{ dir = 6 }, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/airless, /area/ruin/space/has_grav/astraeus/disposals) "jT" = ( @@ -556,7 +556,7 @@ /area/ruin/space/has_grav/astraeus/bridge) "pT" = ( /obj/item/stack/conveyor, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/airless, /area/ruin/space/has_grav/astraeus/disposals) "pU" = ( @@ -621,7 +621,7 @@ dir = 5 }, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel/dark/airless, /area/ruin/space/has_grav/astraeus/bridge) "rk" = ( @@ -675,7 +675,7 @@ /turf/open/floor/plasteel/airless, /area/ruin/space/has_grav/astraeus/hallway) "sL" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel/airless, /area/ruin/space/has_grav/astraeus/dorms_med) "sR" = ( @@ -731,8 +731,8 @@ "uH" = ( /obj/effect/turf_decal/industrial/hatch/yellow, /obj/structure/closet, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; +/obj/effect/spawner/random/maintenance{ + spawn_loot_count = 2; name = "2maintenance loot spawner" }, /turf/open/floor/plasteel/airless, @@ -800,7 +800,7 @@ /obj/machinery/conveyor{ dir = 4 }, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel/airless, /area/ruin/space/has_grav/astraeus/munitions) "wl" = ( @@ -1374,7 +1374,7 @@ /obj/machinery/conveyor/inverted{ dir = 9 }, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/airless, /area/ruin/space/has_grav/astraeus/disposals) "KD" = ( @@ -1560,7 +1560,7 @@ /obj/machinery/power/apc/auto_name/directional/east{ start_charge = 0 }, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel/airless, /area/ruin/space/has_grav/astraeus/munitions) "Pd" = ( @@ -1734,7 +1734,7 @@ /turf/open/floor/plating/asteroid/airless, /area/ruin/unpowered) "UK" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/airless, /area/ruin/space/has_grav/astraeus/hallway) "UU" = ( diff --git a/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm index a2cb21cd1c1c..956466fc4be0 100644 --- a/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm +++ b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm @@ -462,7 +462,7 @@ /area/ruin/space/has_grav/corporatemine/bridge) "kZ" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/turf_decal/spline/fancy/opaque/lightgrey{ dir = 4 }, @@ -812,7 +812,7 @@ /obj/effect/decal/cleanable/oil/slippery, /obj/structure/closet/crate, /obj/effect/turf_decal/industrial/outline, -/obj/effect/spawner/lootdrop/materials, +/obj/effect/spawner/random/materials, /turf/open/floor/plasteel/tech/grid, /area/ruin/space/has_grav/corporatemine/hall) "sb" = ( @@ -1590,8 +1590,8 @@ "IF" = ( /obj/structure/closet/crate, /obj/effect/turf_decal/industrial/outline, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, /turf/open/floor/plasteel/tech/grid, /area/ruin/space/has_grav/corporatemine/hall) "IS" = ( @@ -1774,7 +1774,7 @@ "NH" = ( /obj/structure/closet/crate, /obj/effect/turf_decal/industrial/outline, -/obj/effect/spawner/lootdrop/materials, +/obj/effect/spawner/random/materials, /turf/open/floor/plasteel/tech/grid, /area/ruin/space/has_grav/corporatemine/hall) "NO" = ( @@ -2293,7 +2293,7 @@ /area/ruin/space/has_grav/corporatemine/crewquarters) "ZU" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/turf_decal/spline/fancy/opaque/lightgrey{ dir = 8 }, diff --git a/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm b/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm index e02a7e328b28..c052a6f0cd04 100644 --- a/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm +++ b/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm @@ -3,7 +3,7 @@ /obj/structure/bed, /obj/structure/curtain/cloth/grey, /obj/effect/turf_decal/corner/transparent/grey/diagonal, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/powerpuzzle) "ae" = ( @@ -365,9 +365,9 @@ /area/ruin/space/has_grav/powerpuzzle) "br" = ( /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/cobweb, -/obj/effect/spawner/lootdrop/minor/kittyears_or_rabbitears, +/obj/effect/spawner/random/clothing/kittyears_or_rabbitears, /obj/effect/turf_decal/corner/transparent/grey/diagonal, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/powerpuzzle) @@ -695,14 +695,14 @@ /turf/open/floor/plasteel, /area/ruin/space/has_grav/powerpuzzle) "cB" = ( -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/generic, /obj/effect/turf_decal/corner/transparent/grey/diagonal, /obj/structure/closet/crate/secure, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/powerpuzzle) "cD" = ( -/obj/effect/spawner/lootdrop/glowstick, +/obj/effect/spawner/random/decoration/glowstick, /obj/effect/decal/cleanable/glass, /obj/effect/turf_decal/industrial/warning{ dir = 8 @@ -797,7 +797,7 @@ /obj/effect/decal/cleanable/greenglow, /obj/item/stack/ore/salvage/scrapuranium, /obj/item/bodypart/l_arm/robot, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/item/assembly/prox_sensor, /obj/item/stack/ore/salvage/scrapuranium{ pixel_x = -4; @@ -1116,7 +1116,7 @@ /area/ruin/space/has_grav/powerpuzzle) "gM" = ( /obj/effect/turf_decal/corner/transparent/grey/diagonal, -/obj/effect/spawner/lootdrop/maintenance/six, +/obj/effect/spawner/random/maintenance/six, /obj/structure/closet/crate/secure, /obj/machinery/light/dim/directional/north, /turf/open/floor/plasteel/dark, @@ -1478,7 +1478,7 @@ pixel_x = 2; pixel_y = 4 }, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/machinery/light/broken/directional/south, /obj/item/poster/random_official, /obj/item/poster/random_official, @@ -1677,7 +1677,7 @@ /obj/structure/railing/corner{ dir = 1 }, -/obj/effect/spawner/lootdrop/glowstick, +/obj/effect/spawner/random/decoration/glowstick, /turf/open/floor/plasteel, /area/ruin/space/has_grav/powerpuzzle) "rI" = ( @@ -1838,7 +1838,7 @@ /obj/structure/railing, /obj/effect/turf_decal/corner/transparent/grey/diagonal, /obj/item/stack/ore/salvage/scrapuranium/five, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/structure/closet/crate/engineering, /obj/effect/turf_decal/box, /turf/open/floor/plasteel/dark, @@ -1850,8 +1850,8 @@ /obj/item/reagent_containers/food/drinks/waterbottle/empty, /obj/item/reagent_containers/food/drinks/waterbottle/empty, /obj/item/reagent_containers/food/drinks/waterbottle, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/reagent_containers/food/snacks/sosjerky, /obj/item/reagent_containers/food/snacks/sosjerky, /obj/item/stack/medical/gauze/improvised, @@ -2446,7 +2446,7 @@ /obj/structure/bed, /obj/structure/curtain/cloth/grey, /obj/effect/turf_decal/corner/transparent/grey/diagonal, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/light/small/broken/directional/north, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/powerpuzzle) @@ -3273,7 +3273,7 @@ /obj/structure/bed, /obj/structure/curtain/cloth/grey, /obj/effect/turf_decal/corner/transparent/grey/diagonal, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/light/small/broken/directional/south, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/powerpuzzle) @@ -3546,7 +3546,7 @@ dir = 4 }, /obj/structure/closet/crate/secure, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/powerpuzzle) "VV" = ( @@ -3589,7 +3589,7 @@ dir = 6 }, /obj/structure/table, -/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, /obj/structure/noticeboard{ pixel_x = -15; pixel_y = 32 @@ -3647,7 +3647,7 @@ /obj/structure/railing{ dir = 6 }, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/powerpuzzle/engineering) "Xj" = ( @@ -3692,7 +3692,7 @@ dir = 5 }, /obj/structure/closet/crate/secure, -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/maintenance/four, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/powerpuzzle) "Yr" = ( diff --git a/_maps/RandomRuins/SpaceRuins/spacemall.dmm b/_maps/RandomRuins/SpaceRuins/spacemall.dmm index 6b75031ae8ba..c5acb2629e09 100644 --- a/_maps/RandomRuins/SpaceRuins/spacemall.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacemall.dmm @@ -708,7 +708,7 @@ /area/ruin/space/has_grav/spacemall/dorms) "cO" = ( /obj/effect/turf_decal/box, -/obj/effect/spawner/lootdrop/salvage_machine, +/obj/effect/spawner/random/salvage_machine, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/shuttle) "cP" = ( @@ -1296,9 +1296,9 @@ "eS" = ( /obj/structure/rack, /obj/effect/turf_decal/corner/transparent/black/diagonal, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/shop) "eU" = ( @@ -1306,7 +1306,7 @@ pixel_y = -30 }, /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/wood, /area/ruin/space/has_grav/spacemall/dorms) "eV" = ( @@ -1323,7 +1323,7 @@ /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/shop) "eX" = ( -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /obj/effect/turf_decal/corner/transparent/green/diagonal, /obj/effect/turf_decal/siding/wideplating/dark{ dir = 8 @@ -1391,7 +1391,7 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/decal/cleanable/dirt/dust, /obj/item/stack/cable_coil/random/five, -/obj/effect/spawner/lootdrop/techstorage/engineering, +/obj/effect/spawner/random/techstorage/engineering, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/maint) "fi" = ( @@ -1399,8 +1399,8 @@ dir = 2 }, /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/ruin/space/has_grav/spacemall/maint) "fl" = ( @@ -1655,7 +1655,7 @@ /area/ruin/space/has_grav/spacemall/dorms) "gu" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, /obj/effect/turf_decal/corner/transparent/black/diagonal, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/shop) @@ -2516,9 +2516,9 @@ "jD" = ( /obj/effect/turf_decal/box, /obj/structure/closet/crate/secure, -/obj/effect/spawner/lootdrop/costume, -/obj/effect/spawner/lootdrop/costume, -/obj/effect/spawner/lootdrop/costume, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/spawner/random/clothing/costume, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/shuttle) "jE" = ( @@ -3111,7 +3111,7 @@ /obj/effect/decal/cleanable/cobweb, /obj/effect/turf_decal/box, /obj/structure/closet/crate/wooden, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/maint) "lR" = ( @@ -3255,7 +3255,7 @@ "mJ" = ( /obj/structure/rack, /obj/machinery/light/small/directional/north, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/ruin/space/has_grav/spacemall/maint) "mK" = ( @@ -3638,7 +3638,7 @@ /area/ruin/space/has_grav/spacemall/dorms) "ob" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/ruin/space/has_grav/spacemall/maint) "od" = ( @@ -4048,7 +4048,7 @@ /area/ruin/space/has_grav/spacemall) "pB" = ( /obj/effect/decal/cleanable/ash, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, /obj/structure/closet/crate, /obj/structure/railing, @@ -5749,7 +5749,7 @@ "vp" = ( /obj/structure/rack, /obj/effect/turf_decal/corner/transparent/black/diagonal, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/shop) "vs" = ( @@ -5866,7 +5866,7 @@ /area/ruin/space/has_grav/spacemall/shop2) "vS" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/beaker_loot_spawner, +/obj/effect/spawner/random/medical/beaker, /obj/effect/turf_decal/corner/opaque/blue/diagonal, /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/spacemall/shop2) @@ -6451,8 +6451,8 @@ /obj/structure/closet/crate/secure, /obj/effect/turf_decal/box, /obj/structure/railing, -/obj/effect/spawner/lootdrop/prison_contraband, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/exotic/prison_contraband, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/maint) "yk" = ( @@ -6524,7 +6524,7 @@ /obj/structure/closet/crate/trashcart, /obj/item/trash/popcorn, /obj/item/trash/candy, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/shuttle) "yF" = ( @@ -6666,7 +6666,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/shuttle) "yZ" = ( @@ -6964,9 +6964,9 @@ "Ag" = ( /obj/structure/rack, /obj/effect/turf_decal/corner/transparent/black/diagonal, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/spawner/lootdrop/random_computer_circuit_common, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/circuit/computer/common, /obj/item/research_notes/loot, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/shop) @@ -7269,9 +7269,9 @@ "Bq" = ( /obj/effect/turf_decal/box, /obj/structure/closet/crate/secure, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/shuttle) "Bu" = ( @@ -7469,7 +7469,7 @@ dir = 10 }, /obj/structure/spider/stickyweb, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/maint) "Cv" = ( @@ -7631,7 +7631,7 @@ /area/ruin/space/has_grav/spacemall) "CR" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/decal/cleanable/blood, /obj/item/reagent_containers/food/snacks/spiderling{ pixel_y = 5; @@ -8230,9 +8230,9 @@ /turf/open/floor/eighties, /area/ruin/space/has_grav/spacemall/shop2) "EI" = ( -/obj/effect/spawner/lootdrop/glowstick, +/obj/effect/spawner/random/decoration/glowstick, /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/ruin/space/has_grav/spacemall/maint) "EJ" = ( @@ -9438,7 +9438,7 @@ /area/ruin/space/has_grav/spacemall) "JE" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/wood, /area/ruin/space/has_grav/spacemall/dorms) "JF" = ( @@ -9569,7 +9569,7 @@ "Kl" = ( /obj/effect/decal/cleanable/robot_debris/old, /obj/structure/closet/crate/wooden, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/maint) "Kn" = ( @@ -9999,9 +9999,9 @@ "LS" = ( /obj/structure/rack, /obj/effect/turf_decal/corner/transparent/black/diagonal, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/spawner/lootdrop/random_computer_circuit_common, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/circuit/computer/common, /obj/machinery/firealarm/directional/north, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/shop) @@ -10056,9 +10056,9 @@ /area/ruin/space/has_grav/spacemall/dorms) "Mb" = ( /obj/effect/decal/cleanable/greenglow, -/obj/effect/spawner/lootdrop/random_prosthetic, -/obj/effect/spawner/lootdrop/memeorgans, -/obj/effect/spawner/lootdrop/memeorgans, +/obj/effect/spawner/random/medical/prosthetic, +/obj/effect/spawner/random/medical/memeorgans, +/obj/effect/spawner/random/medical/memeorgans, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 4 }, @@ -11266,7 +11266,7 @@ /area/ruin/space/has_grav/spacemall) "Qf" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/tool_engie_common, +/obj/effect/spawner/random/engineering/tool/common, /obj/effect/turf_decal/corner/transparent/black/diagonal, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/shop) @@ -11297,7 +11297,7 @@ /turf/open/floor/plating, /area/ruin/space/has_grav/spacemall/maint) "Qn" = ( -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /obj/effect/turf_decal/corner/transparent/green/diagonal, /obj/effect/turf_decal/siding/wideplating/dark{ dir = 8 @@ -11311,7 +11311,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/maint) "Qu" = ( @@ -11865,7 +11865,7 @@ /area/ruin/space/has_grav/spacemall/maint) "SD" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/item/toy/plush/slimeplushie{ pixel_y = -4; pixel_x = 4 @@ -12218,7 +12218,7 @@ /obj/structure/rack, /obj/effect/turf_decal/corner/transparent/black/diagonal, /obj/machinery/light/directional/east, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/shop) "TZ" = ( @@ -12290,10 +12290,10 @@ "Ul" = ( /obj/effect/turf_decal/box, /obj/structure/closet/crate/engineering/electrical, -/obj/effect/spawner/lootdrop/techstorage, -/obj/effect/spawner/lootdrop/techstorage, -/obj/effect/spawner/lootdrop/stockparts, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/techstorage, +/obj/effect/spawner/random/techstorage, +/obj/effect/spawner/random/stockparts, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/shuttle) "Um" = ( @@ -12606,7 +12606,7 @@ }, /obj/structure/closet/crate, /obj/structure/catwalk/over/plated_catwalk, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/ruin/space/has_grav/spacemall/maint) "Vr" = ( @@ -12655,8 +12655,8 @@ "VA" = ( /obj/structure/rack, /obj/structure/window/reinforced/spawner, -/obj/effect/spawner/lootdrop/beaker_loot_spawner, -/obj/effect/spawner/lootdrop/beaker_loot_spawner, +/obj/effect/spawner/random/medical/beaker, +/obj/effect/spawner/random/medical/beaker, /obj/effect/turf_decal/corner/opaque/blue/diagonal, /obj/item/clothing/neck/stethoscope, /turf/open/floor/plasteel/white, @@ -13459,7 +13459,7 @@ dir = 2 }, /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/effect/turf_decal/box, /turf/open/floor/plating, /area/ruin/space/has_grav/spacemall/maint) diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm index e1a64004decb..50d9986ea756 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm @@ -612,7 +612,7 @@ /area/ruin/wasteplanet/abandoned_mechbay/mainhall) "fX" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/maintenance/four, /obj/machinery/light/dim/directional/south, /turf/open/floor/plasteel/dark, /area/ruin/wasteplanet/abandoned_mechbay/bay2) @@ -1084,8 +1084,8 @@ /obj/effect/turf_decal/industrial/outline/yellow, /obj/item/mop, /obj/item/reagent_containers/glass/bucket, -/obj/effect/spawner/lootdrop/maintenance/two, -/obj/effect/spawner/lootdrop/costume, +/obj/effect/spawner/random/maintenance/two, +/obj/effect/spawner/random/clothing/costume, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/tech/grid, /area/ruin/wasteplanet/abandoned_mechbay/crewquarters) @@ -1445,7 +1445,7 @@ "qH" = ( /obj/structure/rack, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/maintenance/six, +/obj/effect/spawner/random/maintenance/six, /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill, /turf/open/floor/plasteel/dark, /area/ruin/wasteplanet/abandoned_mechbay/bay2) @@ -2278,7 +2278,7 @@ /area/ruin/wasteplanet/abandoned_mechbay/mainhall) "Bg" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/maintenance/four, /obj/effect/turf_decal/box/white, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel/tech/grid, @@ -2360,13 +2360,13 @@ /area/ruin/wasteplanet/abandoned_mechbay/bay2) "BF" = ( /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, /obj/effect/turf_decal/industrial/outline/yellow, /obj/machinery/light/small/directional/north, /obj/effect/decal/cleanable/food/salt, @@ -2411,7 +2411,7 @@ "Cp" = ( /obj/structure/table, /obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/spawner/lootdrop/materials, +/obj/effect/spawner/random/materials, /obj/item/stack/sheet/metal/fifty, /obj/item/stack/sheet/glass/twenty, /turf/open/floor/plasteel/tech/grid, @@ -3424,7 +3424,7 @@ /area/overmap_encounter/planetoid/cave/explored) "Oj" = ( /obj/structure/table, -/obj/effect/spawner/lootdrop/minor/pirate_or_bandana, +/obj/effect/spawner/random/clothing/pirate_or_bandana, /turf/open/floor/plasteel, /area/ruin/wasteplanet/abandoned_mechbay/crewquarters) "Om" = ( @@ -3933,7 +3933,7 @@ "Vx" = ( /obj/structure/rack, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill, /turf/open/floor/plasteel/dark, /area/ruin/wasteplanet/abandoned_mechbay/bay2) diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm index dba9f5e3c3c9..bdfc9c75a4a1 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm @@ -699,7 +699,7 @@ /turf/open/floor/plating/rust, /area/ruin/powered) "HW" = ( -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /turf/open/floor/plating, /area/ruin/powered) "Ie" = ( diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_tradepost.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_tradepost.dmm index c865138fb568..83c587268b34 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_tradepost.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_tradepost.dmm @@ -1806,10 +1806,10 @@ /obj/effect/turf_decal/industrial/warning/full, /obj/structure/closet/crate, /obj/machinery/light/small/broken/directional/south, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /turf/open/floor/pod/dark, /area/ruin/wasteplanet/tradepost/warehouse) "ug" = ( diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_yard.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_yard.dmm index a53934c91013..e3e0c20ef75f 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_yard.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_yard.dmm @@ -152,10 +152,10 @@ /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/effect/turf_decal/industrial/hatch/yellow, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /turf/open/floor/plasteel/wasteplanet, /area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) "bB" = ( @@ -1542,10 +1542,10 @@ /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/machinery/light/small/broken/directional/south, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /turf/open/floor/plasteel/wasteplanet, /area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) "rd" = ( @@ -1965,8 +1965,8 @@ /area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) "wc" = ( /obj/structure/closet/secure_closet/freezer/fridge, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/machinery/light/small/directional/west, /obj/effect/turf_decal/corner/transparent/neutral/mono, /obj/effect/turf_decal/corner/transparent/blue/border{ @@ -4045,7 +4045,7 @@ /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/effect/turf_decal/industrial/hatch/yellow, /obj/machinery/light/small/broken/directional/west, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, /turf/open/floor/plasteel/wasteplanet, /area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) "Zy" = ( diff --git a/_maps/outpost/hangar/nt_asteroid_40x20.dmm b/_maps/outpost/hangar/nt_asteroid_40x20.dmm index 312e0443aeea..ab49a101ee1e 100644 --- a/_maps/outpost/hangar/nt_asteroid_40x20.dmm +++ b/_maps/outpost/hangar/nt_asteroid_40x20.dmm @@ -383,7 +383,7 @@ }, /area/hangar) "kU" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/item/stack/sheet/mineral/wood{ pixel_x = -6 }, @@ -392,7 +392,7 @@ pixel_y = 7 }, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/item/stack/sheet/mineral/wood{ pixel_x = -6 }, @@ -861,7 +861,7 @@ }, /area/hangar) "vh" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating{ planetary_atmos = 1 diff --git a/_maps/outpost/hangar/nt_asteroid_40x40.dmm b/_maps/outpost/hangar/nt_asteroid_40x40.dmm index 005b657e38ee..eab944babc1c 100644 --- a/_maps/outpost/hangar/nt_asteroid_40x40.dmm +++ b/_maps/outpost/hangar/nt_asteroid_40x40.dmm @@ -1070,10 +1070,7 @@ /area/hangar) "NE" = ( /obj/structure/catwalk/over/plated_catwalk, -/obj/effect/spawner/lootdrop/glowstick{ - pixel_x = 5; - pixel_y = 9 - }, +/obj/effect/spawner/random/decoration/glowstick, /turf/open/floor/plating{ planetary_atmos = 1 }, @@ -1333,7 +1330,7 @@ /obj/structure/catwalk/over/plated_catwalk, /obj/item/stack/cable_coil/cut/yellow, /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating{ icon_state = "panelscorched"; planetary_atmos = 1 diff --git a/_maps/outpost/hangar/nt_asteroid_56x20.dmm b/_maps/outpost/hangar/nt_asteroid_56x20.dmm index 11ba5baac070..070f2a949044 100644 --- a/_maps/outpost/hangar/nt_asteroid_56x20.dmm +++ b/_maps/outpost/hangar/nt_asteroid_56x20.dmm @@ -106,7 +106,7 @@ /area/hangar) "cz" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating{ planetary_atmos = 1 }, @@ -1024,8 +1024,8 @@ /area/hangar) "MI" = ( /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, /obj/machinery/light/directional/east, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark{ @@ -1254,10 +1254,7 @@ /area/hangar) "Wp" = ( /obj/structure/catwalk/over/plated_catwalk, -/obj/effect/spawner/lootdrop/glowstick{ - pixel_x = 5; - pixel_y = 9 - }, +/obj/effect/spawner/random/decoration/glowstick, /turf/open/floor/plating{ icon_state = "panelscorched"; planetary_atmos = 1 diff --git a/_maps/outpost/hangar/nt_asteroid_56x40.dmm b/_maps/outpost/hangar/nt_asteroid_56x40.dmm index 5d66d8966d0b..020ab48b8d9f 100644 --- a/_maps/outpost/hangar/nt_asteroid_56x40.dmm +++ b/_maps/outpost/hangar/nt_asteroid_56x40.dmm @@ -277,8 +277,8 @@ /area/hangar) "lZ" = ( /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, /obj/machinery/light/directional/east, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark{ @@ -806,7 +806,7 @@ /area/hangar) "Hs" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating{ planetary_atmos = 1 }, @@ -963,10 +963,7 @@ /area/hangar) "KT" = ( /obj/structure/catwalk/over/plated_catwalk, -/obj/effect/spawner/lootdrop/glowstick{ - pixel_x = 5; - pixel_y = 9 - }, +/obj/effect/spawner/random/decoration/glowstick, /turf/open/floor/plating{ icon_state = "panelscorched"; planetary_atmos = 1 diff --git a/_maps/outpost/indie_space.dmm b/_maps/outpost/indie_space.dmm index 86a2a8d102b1..b10b86822c8c 100644 --- a/_maps/outpost/indie_space.dmm +++ b/_maps/outpost/indie_space.dmm @@ -113,7 +113,7 @@ /obj/effect/turf_decal/spline/fancy/opaque/lightgrey{ dir = 8 }, -/obj/effect/spawner/lootdrop/plushie{ +/obj/effect/spawner/random/entertainment/plushie{ pixel_x = 16; pixel_y = 4 }, @@ -270,7 +270,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 10 }, -/obj/effect/spawner/lootdrop/salvage/metal, +/obj/effect/spawner/random/salvage/metal, /turf/open/floor/plasteel/tech/techmaint, /area/outpost/maintenance/central) "bL" = ( @@ -287,7 +287,7 @@ /turf/open/floor/plasteel, /area/outpost/hallway/port) "bS" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/turf_decal/corner_techfloor_grid{ dir = 8 }, @@ -346,7 +346,7 @@ /turf/open/floor/plasteel, /area/outpost/hallway/central) "ci" = ( -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, @@ -481,7 +481,7 @@ /turf/open/floor/plasteel, /area/outpost/vacant_rooms) "dl" = ( -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /obj/effect/turf_decal/steeldecal/steel_decals7{ dir = 9 }, @@ -958,7 +958,7 @@ /turf/open/floor/plasteel/mono, /area/outpost/vacant_rooms) "gz" = ( -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /obj/item/radio/intercom/directional/east, /obj/effect/turf_decal/spline/fancy/opaque/lightgrey{ dir = 1 @@ -1001,7 +1001,7 @@ /turf/open/floor/plating, /area/outpost/maintenance/central) "gS" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, /area/outpost/maintenance/fore) "gT" = ( @@ -1078,7 +1078,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 }, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/outpost/maintenance/central) "hz" = ( @@ -1126,8 +1126,8 @@ /area/outpost/hallway/port) "hK" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/salvage_laser, -/obj/effect/spawner/lootdrop/salvage_capacitor, +/obj/effect/spawner/random/salvage_laser, +/obj/effect/spawner/random/salvage_capacitor, /turf/open/floor/plating, /area/outpost/maintenance/fore) "hM" = ( @@ -1188,7 +1188,7 @@ /area/outpost/maintenance/central) "hZ" = ( /obj/structure/table/wood, -/obj/effect/spawner/lootdrop/donut, +/obj/effect/spawner/random/food_or_drink/donut, /turf/open/floor/wood, /area/outpost/crew/bar) "ib" = ( @@ -1269,7 +1269,7 @@ /turf/open/floor/wood, /area/outpost/crew/library) "iD" = ( -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /turf/open/floor/plating, /area/outpost/maintenance/fore) "iG" = ( @@ -1350,7 +1350,7 @@ /area/outpost/crew/bar) "jn" = ( /obj/structure/table, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/outpost/maintenance/central) @@ -1430,7 +1430,7 @@ /turf/open/floor/plasteel/tech, /area/outpost/hallway/central) "jM" = ( -/obj/effect/spawner/lootdrop/chicken, +/obj/effect/spawner/random/chicken, /turf/open/floor/ship/dirt, /area/outpost/hallway/port) "jO" = ( @@ -1703,7 +1703,7 @@ /area/outpost/maintenance/central) "lA" = ( /obj/structure/flora/grass/jungle, -/obj/effect/spawner/lootdrop/chicken, +/obj/effect/spawner/random/chicken, /turf/open/floor/grass/ship/jungle, /area/outpost/hallway/central) "lB" = ( @@ -1858,7 +1858,7 @@ /area/outpost/hallway/central) "mv" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/minor/kittyears_or_rabbitears, +/obj/effect/spawner/random/clothing/kittyears_or_rabbitears, /obj/effect/decal/cleanable/wrapping, /turf/open/floor/plasteel/mono, /area/outpost/vacant_rooms) @@ -2597,8 +2597,8 @@ /area/outpost/maintenance/fore) "rp" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/maintenance/seven, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/maintenance/seven, /turf/open/floor/plasteel/mono, /area/outpost/vacant_rooms) "rr" = ( @@ -2670,7 +2670,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, @@ -2782,7 +2782,7 @@ /obj/structure/cable/yellow{ icon_state = "1-4" }, -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 5 }, @@ -2988,9 +2988,9 @@ /area/outpost/crew/library) "ta" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/minor/twentyfive_percent_cyborg_mask, +/obj/effect/spawner/random/clothing/twentyfive_percent_cyborg_mask, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/gloves, +/obj/effect/spawner/random/clothing/gloves, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/mono, /area/outpost/storage) @@ -3160,7 +3160,7 @@ /area/outpost/cargo) "tS" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/maintenance/four, /turf/open/floor/plating, /area/outpost/maintenance/fore) "tT" = ( @@ -3324,7 +3324,7 @@ /turf/open/floor/ship/dirt, /area/outpost/hallway/central) "uE" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/outpost/maintenance/fore) @@ -3791,7 +3791,7 @@ /turf/open/floor/plasteel, /area/outpost/hallway/port) "xu" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/outpost/maintenance/fore) @@ -3884,7 +3884,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /turf/open/floor/plating, /area/outpost/maintenance/fore) "xZ" = ( @@ -3968,7 +3968,7 @@ /area/outpost/crew/bar) "yN" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, /turf/open/floor/plasteel/mono, /area/outpost/vacant_rooms) "yQ" = ( @@ -4155,7 +4155,7 @@ /turf/open/floor/plating/asteroid, /area/outpost/external) "zS" = ( -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /turf/open/floor/plating, /area/outpost/maintenance/central) "zY" = ( @@ -4208,7 +4208,7 @@ /turf/open/floor/plasteel/tech, /area/outpost/maintenance/fore) "Am" = ( -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /obj/effect/turf_decal/spline/fancy/opaque/lightgrey{ dir = 8 }, @@ -4858,8 +4858,8 @@ /area/outpost/hallway/port) "DH" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/minor/bowler_or_that, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/clothing/bowler_or_that, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plasteel/mono, /area/outpost/storage) "DI" = ( @@ -4912,7 +4912,7 @@ /obj/effect/turf_decal/corner_techfloor_gray{ dir = 9 }, -/obj/effect/spawner/lootdrop/salvage/metal, +/obj/effect/spawner/random/salvage/metal, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/tech/techmaint, /area/outpost/maintenance/fore) @@ -4984,7 +4984,7 @@ /turf/open/floor/plating, /area/outpost/maintenance/fore) "ER" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, /area/outpost/maintenance/central) "EV" = ( @@ -4995,7 +4995,7 @@ /area/outpost/crew/bar) "EX" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/outpost/maintenance/fore) "Fa" = ( @@ -5189,7 +5189,7 @@ /turf/open/floor/plasteel/patterned/cargo_one, /area/outpost/vacant_rooms/office) "Gj" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -5222,7 +5222,7 @@ /area/outpost/external) "Gn" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/minor/bowler_or_that, +/obj/effect/spawner/random/clothing/bowler_or_that, /turf/open/floor/plating, /area/outpost/maintenance/fore) "Gu" = ( @@ -5394,7 +5394,7 @@ /area/outpost/hallway/central) "Hk" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/minor/beret_or_rabbitears, +/obj/effect/spawner/random/clothing/beret_or_rabbitears, /obj/machinery/light/dim/directional/west, /turf/open/floor/plasteel/mono, /area/outpost/storage) @@ -5853,7 +5853,7 @@ /area/outpost/cargo/office) "JV" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/minor/pirate_or_bandana, +/obj/effect/spawner/random/clothing/pirate_or_bandana, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/mono, @@ -6213,8 +6213,8 @@ /turf/open/floor/wood, /area/outpost/crew/library) "LR" = ( -/obj/effect/spawner/lootdrop/tool_engie_common, -/obj/effect/spawner/lootdrop/tool_engie_common, +/obj/effect/spawner/random/engineering/tool/common, +/obj/effect/spawner/random/engineering/tool/common, /obj/structure/rack, /turf/open/floor/plating, /area/outpost/maintenance/fore) @@ -6454,7 +6454,7 @@ /area/outpost/cargo/office) "No" = ( /obj/structure/table, -/obj/effect/spawner/lootdrop/donut/jelly, +/obj/effect/spawner/random/food_or_drink/donut/jelly, /obj/effect/turf_decal/floordetail/tiled, /turf/open/floor/plasteel/patterned/cargo_one, /area/outpost/security) @@ -6531,7 +6531,7 @@ /obj/structure/table/wood, /obj/effect/decal/cleanable/dirt, /obj/item/reagent_containers/food/snacks/grown/citrus/orange, -/obj/effect/spawner/lootdrop/salvage_capacitor, +/obj/effect/spawner/random/salvage_capacitor, /turf/open/floor/plating, /area/outpost/maintenance/fore) "NV" = ( @@ -6718,7 +6718,7 @@ /area/outpost/crew/cryo) "Pw" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/maintenance/four, /turf/open/floor/plasteel/patterned/cargo_one, /area/outpost/vacant_rooms/office) "Px" = ( @@ -6914,8 +6914,8 @@ /area/outpost/maintenance/fore) "Qx" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/minor/bowler_or_that, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/clothing/bowler_or_that, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plasteel/mono, /area/outpost/storage) "QA" = ( @@ -7079,7 +7079,7 @@ /obj/structure/cable/yellow{ icon_state = "4-6" }, -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /obj/effect/turf_decal/corner_techfloor_gray{ dir = 10 }, @@ -7166,7 +7166,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /turf/open/floor/plating, /area/outpost/maintenance/fore) "RJ" = ( @@ -7390,8 +7390,8 @@ /area/outpost/hallway/port) "SW" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plasteel/mono, /area/outpost/vacant_rooms) "SY" = ( @@ -7400,7 +7400,7 @@ /turf/open/floor/plating, /area/outpost/maintenance/fore) "Ta" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/oil, /obj/effect/turf_decal/steeldecal/steel_decals9, /turf/open/floor/plating, @@ -7556,7 +7556,7 @@ /obj/effect/turf_decal/corner_techfloor_gray{ dir = 9 }, -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/tech/techmaint, /area/outpost/maintenance/fore) @@ -7608,7 +7608,7 @@ /turf/open/floor/plating, /area/outpost/maintenance/central) "Uq" = ( -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /turf/open/floor/plasteel/tech/techmaint, /area/outpost/hallway/port) "Us" = ( @@ -7618,7 +7618,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -7789,7 +7789,7 @@ }, /obj/item/bedsheet/double/captain, /obj/effect/decal/cleanable/greenglow, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt, /obj/item/clothing/head/papersack/smiley{ pixel_x = 7 @@ -7897,7 +7897,7 @@ /turf/open/floor/carpet/green, /area/outpost/crew/bar) "Wa" = ( -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/mouse/brown, /turf/open/floor/plating, @@ -8004,7 +8004,7 @@ /turf/open/floor/plasteel, /area/outpost/hallway/central) "WO" = ( -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/outpost/maintenance/fore) "WR" = ( @@ -8029,7 +8029,7 @@ /turf/open/floor/plating, /area/outpost/maintenance/fore) "WV" = ( -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /obj/effect/turf_decal/spline/fancy/opaque/lightgrey{ dir = 1 }, @@ -8161,7 +8161,7 @@ /area/outpost/hallway/port) "XA" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/five, +/obj/effect/spawner/random/maintenance/five, /turf/open/floor/plasteel/mono, /area/outpost/vacant_rooms) "XD" = ( @@ -8332,7 +8332,7 @@ /turf/open/floor/plasteel/patterned, /area/outpost/cargo) "YC" = ( -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /obj/structure/rack, /obj/effect/turf_decal/steeldecal/steel_decals_central2{ dir = 4 @@ -8528,8 +8528,8 @@ /area/outpost/hallway/central) "ZP" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/tool_surgery_common, -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/medical/surgery_tool/common, +/obj/effect/spawner/random/maintenance/four, /turf/open/floor/plasteel/patterned/cargo_one, /area/outpost/vacant_rooms/office) "ZU" = ( diff --git a/_maps/outpost/nanotrasen_asteroid.dmm b/_maps/outpost/nanotrasen_asteroid.dmm index d5af45bfef2d..179aa234e780 100644 --- a/_maps/outpost/nanotrasen_asteroid.dmm +++ b/_maps/outpost/nanotrasen_asteroid.dmm @@ -63,7 +63,7 @@ /area/outpost/hallway/starboard) "aw" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /obj/machinery/light/small/broken/directional/south, /turf/open/floor/plating/rust, /area/outpost/maintenance/aft) @@ -951,7 +951,7 @@ dir = 8 }, /obj/effect/turf_decal/box/corners, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/concrete/slab_1, /area/outpost/hallway/central) "dF" = ( @@ -1678,7 +1678,7 @@ dir = 8 }, /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/item/paper/crumpled, /turf/open/floor/concrete/slab_1, /area/outpost/hallway/central) @@ -1911,7 +1911,7 @@ /turf/closed/mineral/random/snow, /area/outpost/crew/cryo) "hd" = ( -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/outpost/maintenance/aft) "he" = ( @@ -2178,7 +2178,7 @@ /area/outpost/crew/bar) "im" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/structure/grille/broken, /turf/open/floor/plating{ icon_state = "foam_plating" @@ -2337,7 +2337,7 @@ /area/outpost/vacant_rooms) "iW" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/structure/sign/poster/contraband/random{ pixel_x = 32; pixel_y = -32 @@ -5481,7 +5481,7 @@ /turf/open/floor/plasteel/dark, /area/outpost/operations) "tD" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating{ icon_state = "panelscorched" @@ -6814,7 +6814,7 @@ "xV" = ( /obj/machinery/light/dim/directional/south, /obj/structure/closet/cardboard, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/outpost/maintenance/fore) "xW" = ( @@ -6990,7 +6990,7 @@ }, /area/outpost/maintenance/fore) "yE" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating{ icon_state = "platingdmg1" }, @@ -7386,7 +7386,7 @@ /area/outpost/engineering/atmospherics) "zY" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/rust, /area/outpost/maintenance/aft) "zZ" = ( @@ -7614,7 +7614,7 @@ icon_state = "box_corners"; dir = 8 }, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/machinery/airalarm/directional/west, /turf/open/floor/concrete/slab_1, /area/outpost/hallway/central) @@ -7899,7 +7899,7 @@ "BI" = ( /obj/machinery/door/window/brigdoor/southright, /obj/structure/rack, -/obj/effect/spawner/lootdrop/glowstick, +/obj/effect/spawner/random/decoration/glowstick, /turf/open/floor/concrete/tiles, /area/outpost/hallway/central) "BJ" = ( @@ -10357,7 +10357,7 @@ /obj/effect/turf_decal/box/corners{ dir = 4 }, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/concrete/slab_1, /area/outpost/hallway/central) "Kj" = ( @@ -10560,7 +10560,7 @@ /area/outpost/hallway/starboard) "KW" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, /area/outpost/maintenance/aft) "KX" = ( @@ -11767,7 +11767,7 @@ "Pb" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/item/stack/sheet/mineral/wood{ pixel_x = -6 }, @@ -12080,7 +12080,7 @@ /obj/effect/turf_decal/box/corners{ dir = 4 }, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/item/paperplane, /obj/item/radio/intercom/directional/south, /obj/machinery/firealarm/directional/south, @@ -12344,7 +12344,7 @@ "Ra" = ( /obj/structure/table/wood, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/outpost/maintenance/fore) "Rc" = ( @@ -12447,7 +12447,7 @@ /area/outpost/maintenance/aft) "Ru" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating{ icon_state = "panelscorched" }, @@ -12633,7 +12633,7 @@ "RZ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/item/stack/rods/ten{ pixel_x = 9 }, @@ -12648,7 +12648,7 @@ /area/outpost/crew/canteen) "Sd" = ( /obj/structure/grille/broken, -/obj/effect/spawner/lootdrop/minor/pirate_or_bandana, +/obj/effect/spawner/random/clothing/pirate_or_bandana, /turf/open/floor/plating, /area/outpost/maintenance/fore) "Se" = ( @@ -12868,8 +12868,8 @@ "Tc" = ( /obj/structure/closet/crate/trashcart/laundry, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/maintenance/two, -/obj/effect/spawner/lootdrop/minor/kittyears_or_rabbitears, +/obj/effect/spawner/random/maintenance/two, +/obj/effect/spawner/random/clothing/kittyears_or_rabbitears, /obj/structure/grille/broken, /obj/effect/turf_decal/box/white, /turf/open/floor/plating{ @@ -13743,7 +13743,7 @@ /area/outpost/hallway/central) "Wj" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/concrete/slab_1, /area/outpost/hallway/central) "Wn" = ( @@ -14038,7 +14038,7 @@ /obj/structure/railing{ layer = 3.1 }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/item/trash/can{ pixel_x = -8; pixel_y = -6 diff --git a/_maps/outpost/nanotrasen_ice.dmm b/_maps/outpost/nanotrasen_ice.dmm index 70fb809c4c95..cfd32ad951ae 100644 --- a/_maps/outpost/nanotrasen_ice.dmm +++ b/_maps/outpost/nanotrasen_ice.dmm @@ -943,7 +943,7 @@ "gO" = ( /obj/effect/turf_decal/industrial/outline/yellow, /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /obj/structure/sign/poster/retro/random{ pixel_x = -32 }, @@ -1168,7 +1168,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/structure/rack, /obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/maintenance/four, /turf/open/floor/plasteel/tech, /area/outpost/vacant_rooms/shop) "iH" = ( @@ -1809,7 +1809,7 @@ "mV" = ( /obj/structure/rack, /obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plasteel/tech, /area/outpost/vacant_rooms/shop) "na" = ( @@ -2177,7 +2177,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/rack, /obj/structure/grille/broken, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/outpost/maintenance/starboard) "oF" = ( @@ -3267,7 +3267,7 @@ /area/outpost/maintenance/fore) "vn" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/small/directional/south, /turf/open/floor/plating{ @@ -3476,7 +3476,7 @@ /area/outpost/engineering/atmospherics) "wD" = ( /obj/structure/grille/broken, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/structure/spider/stickyweb, /obj/machinery/light/small/directional/east, /turf/open/floor/plating/rust, @@ -4002,7 +4002,7 @@ /obj/structure/flora/grass/both{ layer = 3.1 }, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/asteroid/snow/temperatre{ light_color = "#1B1D2E"; light_range = 2 @@ -4396,7 +4396,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate/bin, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/item/trash/sosjerky, /obj/item/trash/can, /turf/open/floor/plasteel/patterned/brushed{ @@ -4552,7 +4552,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate/trashcart, -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/maintenance/four, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 8 }, @@ -4840,7 +4840,7 @@ dir = 5 }, /obj/item/trash/chips, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/item/trash/candy, /turf/open/floor/wood/walnut, /area/outpost/crew/bar) @@ -6062,7 +6062,7 @@ "PN" = ( /obj/structure/rack, /obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel/tech, /area/outpost/vacant_rooms/shop) "PT" = ( @@ -7551,7 +7551,7 @@ /obj/structure/flora/grass/green{ layer = 3.1 }, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/asteroid/snow/temperatre{ light_color = "#1B1D2E"; light_range = 2 @@ -7688,7 +7688,7 @@ layer = 3.1 }, /obj/item/shard, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/asteroid/snow/temperatre{ light_color = "#1B1D2E"; light_range = 2 diff --git a/_maps/shuttles/independent/independent_beluga.dmm b/_maps/shuttles/independent/independent_beluga.dmm index c283c0d21584..ddbcfba512b3 100644 --- a/_maps/shuttles/independent/independent_beluga.dmm +++ b/_maps/shuttles/independent/independent_beluga.dmm @@ -1090,7 +1090,7 @@ pixel_y = -32 }, /obj/item/storage/bag/tray, -/obj/effect/spawner/lootdrop/ration{ +/obj/effect/spawner/random/food_or_drink/ration{ pixel_x = 6; pixel_y = 6 }, @@ -2631,7 +2631,7 @@ "zh" = ( /obj/structure/bed, /obj/structure/curtain/cloth/grey, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/light/directional/south, /turf/open/floor/wood, /area/ship/crew/dorm) @@ -3425,7 +3425,7 @@ /area/ship/crew/canteen) "Hq" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/bounty, /obj/structure/sign/poster/official/ian{ pixel_x = 32 @@ -3803,7 +3803,7 @@ "Kc" = ( /obj/structure/bed, /obj/structure/curtain/cloth/grey, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/light_switch{ pixel_x = -8; pixel_y = -20; @@ -3827,7 +3827,7 @@ /area/ship/crew) "Ko" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/bounty, /turf/open/floor/carpet/red, /area/ship/crew) @@ -4118,7 +4118,7 @@ "Nv" = ( /obj/structure/bed, /obj/structure/curtain/cloth/grey, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/wood, /area/ship/crew/dorm) "Nw" = ( diff --git a/_maps/shuttles/independent/independent_box.dmm b/_maps/shuttles/independent/independent_box.dmm index 31891a371d8c..f64c84ca5b33 100644 --- a/_maps/shuttles/independent/independent_box.dmm +++ b/_maps/shuttles/independent/independent_box.dmm @@ -711,7 +711,7 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/crew/toilet) "cG" = ( -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /obj/structure/closet/emcloset/anchored, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 @@ -968,7 +968,7 @@ dir = 8 }, /obj/structure/bed/pod, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/carpet/blue, /area/ship/crew) "dr" = ( @@ -1162,7 +1162,7 @@ /obj/structure/sign/poster/official/help_others{ pixel_x = -32 }, -/obj/effect/spawner/lootdrop/tool_surgery_adv, +/obj/effect/spawner/random/medical/surgery_tool/adv, /obj/item/megaphone/command, /obj/effect/turf_decal/spline/fancy/opaque/black{ dir = 4 @@ -1421,7 +1421,7 @@ /turf/open/floor/plasteel/tech, /area/ship/medical) "mx" = ( -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/bounty, /obj/effect/turf_decal/siding/wood/corner{ dir = 4 @@ -1460,10 +1460,10 @@ /area/ship/medical) "nA" = ( /obj/structure/table, -/obj/effect/spawner/lootdrop/ration{ +/obj/effect/spawner/random/food_or_drink/ration{ pixel_y = 3 }, -/obj/effect/spawner/lootdrop/ration{ +/obj/effect/spawner/random/food_or_drink/ration{ pixel_x = -5; pixel_y = 3 }, @@ -2022,7 +2022,7 @@ /obj/item/circuitboard/machine/chem_master, /obj/item/reagent_containers/glass/beaker/large, /obj/item/stack/sheet/glass/two, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/item/trash/can/food/beans, /turf/open/floor/plasteel/white, /area/ship/medical) @@ -2165,7 +2165,7 @@ /obj/item/vending_refill/medical, /obj/item/screwdriver, /obj/machinery/airalarm/directional/south, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plasteel/white, /area/ship/cargo) "Cn" = ( @@ -2808,7 +2808,7 @@ /obj/structure/cable/yellow{ icon_state = "0-10" }, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /obj/structure/rack, /obj/item/areaeditor/shuttle, /obj/item/flashlight{ diff --git a/_maps/shuttles/independent/independent_bubble.dmm b/_maps/shuttles/independent/independent_bubble.dmm index 08fd116f2536..298a919bbaa7 100644 --- a/_maps/shuttles/independent/independent_bubble.dmm +++ b/_maps/shuttles/independent/independent_bubble.dmm @@ -248,7 +248,7 @@ /turf/open/floor/plasteel/mono, /area/ship/hallway/central) "jr" = ( -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/bed, /obj/structure/curtain/bounty, /obj/effect/turf_decal/siding/wood{ @@ -905,7 +905,7 @@ /turf/open/floor/plating, /area/ship/engineering) "LK" = ( -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/bed, /obj/structure/curtain/bounty, /obj/effect/turf_decal/siding/wood{ @@ -1228,7 +1228,7 @@ /turf/open/floor/plasteel, /area/ship/engineering) "Yi" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/structure/closet/firecloset/full, /turf/open/floor/plating, /area/ship/maintenance/port) diff --git a/_maps/shuttles/independent/independent_dwayne.dmm b/_maps/shuttles/independent/independent_dwayne.dmm index 7f8e7b569c68..9d36cb61c748 100644 --- a/_maps/shuttles/independent/independent_dwayne.dmm +++ b/_maps/shuttles/independent/independent_dwayne.dmm @@ -257,7 +257,7 @@ /obj/structure/closet/crate, /obj/machinery/firealarm/directional/north, /obj/item/circuitboard/machine/pipedispenser, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "dh" = ( @@ -1442,7 +1442,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 }, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "vj" = ( @@ -1584,7 +1584,7 @@ }, /obj/machinery/light/directional/west, /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "yu" = ( @@ -1889,7 +1889,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate/large, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "Ds" = ( @@ -2083,7 +2083,7 @@ /area/ship/external/dark) "Gl" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/airalarm/directional/east, /obj/item/radio/intercom/directional/south, /turf/open/floor/carpet, @@ -2213,7 +2213,7 @@ "Is" = ( /obj/structure/closet/crate/science, /obj/item/paicard, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/ship/cargo) "IF" = ( @@ -2301,7 +2301,7 @@ /area/ship/storage/eva) "JH" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/cable/yellow{ icon_state = "4-10" }, @@ -2433,10 +2433,10 @@ /obj/structure/closet/secure_closet/freezer/wall/directional/south{ name = "kitchen cabinet" }, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/storage/cans/sixbeer, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, @@ -2617,28 +2617,13 @@ /area/ship/storage/eva) "NT" = ( /obj/structure/closet/cardboard, -/obj/effect/spawner/lootdrop/glowstick, -/obj/effect/spawner/lootdrop/glowstick{ - pixel_y = 2 - }, -/obj/effect/spawner/lootdrop/glowstick{ - pixel_y = -3; - pixel_x = 7 - }, -/obj/effect/spawner/lootdrop/glowstick{ - pixel_x = -6 - }, -/obj/effect/spawner/lootdrop/glowstick{ - pixel_y = -3 - }, -/obj/effect/spawner/lootdrop/glowstick{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/effect/spawner/lootdrop/glowstick{ - pixel_x = -4; - pixel_y = -4 - }, +/obj/effect/spawner/random/decoration/glowstick, +/obj/effect/spawner/random/decoration/glowstick, +/obj/effect/spawner/random/decoration/glowstick, +/obj/effect/spawner/random/decoration/glowstick, +/obj/effect/spawner/random/decoration/glowstick, +/obj/effect/spawner/random/decoration/glowstick, +/obj/effect/spawner/random/decoration/glowstick, /turf/open/floor/plating, /area/ship/storage/eva) "NW" = ( @@ -2751,11 +2736,11 @@ /obj/effect/turf_decal/corner/opaque/yellow/half, /obj/structure/closet/crate/large, /obj/effect/turf_decal/industrial/warning, -/obj/effect/spawner/lootdrop/plushie, -/obj/effect/spawner/lootdrop/plushie, -/obj/effect/spawner/lootdrop/plushie, -/obj/effect/spawner/lootdrop/plushie, -/obj/effect/spawner/lootdrop/plushie, +/obj/effect/spawner/random/entertainment/plushie, +/obj/effect/spawner/random/entertainment/plushie, +/obj/effect/spawner/random/entertainment/plushie, +/obj/effect/spawner/random/entertainment/plushie, +/obj/effect/spawner/random/entertainment/plushie, /obj/structure/cable/cyan{ icon_state = "1-2" }, @@ -3405,7 +3390,7 @@ /obj/item/trash/candy, /obj/item/trash/sosjerky, /obj/item/trash/can/food/beans, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/structure/cable/cyan{ icon_state = "2-5" }, @@ -3473,7 +3458,7 @@ /area/ship/engineering) "ZQ" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/carpet, /area/ship/crew/dorm) "ZR" = ( diff --git a/_maps/shuttles/independent/independent_junker.dmm b/_maps/shuttles/independent/independent_junker.dmm index 0ae98ef37fe2..c7b7eb4ae673 100644 --- a/_maps/shuttles/independent/independent_junker.dmm +++ b/_maps/shuttles/independent/independent_junker.dmm @@ -48,7 +48,7 @@ /area/ship/maintenance/port) "aq" = ( /obj/item/trash/sosjerky, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/item/areaeditor/shuttle{ pixel_y = 7 }, @@ -67,7 +67,7 @@ /obj/item/storage/backpack/explorer, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/item/pickaxe/rusted, /turf/open/floor/plating, /area/ship/engineering/electrical) @@ -75,7 +75,7 @@ /obj/structure/rack, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/broken/directional/north, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /obj/item/flashlight/pen, /turf/open/floor/wood/walnut{ icon_state = "wood-broken" @@ -399,7 +399,7 @@ }, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/ship/engineering/electrical) "hb" = ( @@ -857,7 +857,7 @@ "qm" = ( /obj/structure/rack, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /obj/item/reagent_containers/food/snacks/canned/peaches/maint, /turf/open/floor/plating, /area/ship/construction) @@ -1232,7 +1232,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/spawner/lootdrop/maintenance/eight, +/obj/effect/spawner/random/maintenance/eight, /obj/structure/safe/floor{ number_of_tumblers = 5 }, @@ -1610,7 +1610,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 6 }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, /area/ship/maintenance/port) "Df" = ( @@ -1735,7 +1735,7 @@ /obj/item/reagent_containers/glass/bottle/welding_fuel, /obj/machinery/power/apc/auto_name/directional/west, /obj/effect/decal/cleanable/cobweb, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/ship/storage/eva) "Fz" = ( @@ -1808,7 +1808,7 @@ /area/ship/storage/eva) "Hj" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/item/decal_painter, /obj/item/storage/box/mousetraps, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ @@ -2034,7 +2034,7 @@ "JZ" = ( /obj/structure/rack, /obj/machinery/light/small/broken/directional/west, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /obj/item/toner, /obj/item/clothing/neck/stethoscope, /turf/open/floor/plating, @@ -2085,7 +2085,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/light/small/directional/north, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/wood/walnut{ icon_state = "wood-broken3" }, @@ -2231,7 +2231,7 @@ dir = 1 }, /mob/living/simple_animal/hostile/cockroach/glockroach, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/machinery/light_switch{ dir = 8; pixel_x = 20; @@ -2487,7 +2487,7 @@ }, /obj/effect/decal/cleanable/sprayweb, /obj/effect/decal/cleanable/cobweb, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /turf/open/floor/pod/light, /area/ship/maintenance/aft) "Wv" = ( @@ -2730,7 +2730,7 @@ /obj/structure/cable{ icon_state = "0-2" }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/machinery/door/firedoor, /turf/open/floor/plating, /area/ship/maintenance/port) diff --git a/_maps/shuttles/independent/independent_kilo.dmm b/_maps/shuttles/independent/independent_kilo.dmm index 43941169b66a..7783dff02df5 100644 --- a/_maps/shuttles/independent/independent_kilo.dmm +++ b/_maps/shuttles/independent/independent_kilo.dmm @@ -123,7 +123,7 @@ /turf/open/floor/plating, /area/ship/hallway/port) "bm" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/ship/maintenance/fore) "bn" = ( @@ -905,7 +905,7 @@ /area/ship/cargo) "mz" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/light_switch{ pixel_x = 7; pixel_y = 20 @@ -1212,9 +1212,9 @@ /obj/item/reagent_containers/food/drinks/soda_cans/cola, /obj/item/reagent_containers/food/drinks/soda_cans/cola, /obj/item/reagent_containers/food/drinks/soda_cans/cola, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/reagent_containers/food/snacks/icecreamsandwich, /obj/item/reagent_containers/food/snacks/icecreamsandwich, /obj/effect/turf_decal/corner/transparent/beige/full, @@ -1789,7 +1789,7 @@ /obj/structure/cable/pink{ icon_state = "1-6" }, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/light/directional/west, /turf/open/floor/carpet, /area/ship/crew/dorm) diff --git a/_maps/shuttles/independent/independent_lagoon.dmm b/_maps/shuttles/independent/independent_lagoon.dmm index 5130aed76be3..2855c6e0d686 100644 --- a/_maps/shuttles/independent/independent_lagoon.dmm +++ b/_maps/shuttles/independent/independent_lagoon.dmm @@ -4873,7 +4873,7 @@ /area/ship/hallway/aft) "GN" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/turf_decal/siding/wood{ dir = 4 }, @@ -6155,7 +6155,7 @@ /area/ship/hallway/port) "QI" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/turf_decal/siding/wood{ dir = 6 }, diff --git a/_maps/shuttles/independent/independent_mudskipper.dmm b/_maps/shuttles/independent/independent_mudskipper.dmm index 11d98b3c1475..676301c8271e 100644 --- a/_maps/shuttles/independent/independent_mudskipper.dmm +++ b/_maps/shuttles/independent/independent_mudskipper.dmm @@ -1412,7 +1412,7 @@ /area/ship/hallway/aft) "Ft" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/bounty, /obj/machinery/light_switch{ dir = 1; @@ -1727,10 +1727,10 @@ /obj/structure/closet/crate{ name = "ration crate" }, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/reagent_containers/food/snacks/canned/beans, /obj/item/reagent_containers/food/snacks/canned/beans, /obj/item/reagent_containers/food/snacks/canned/beans, @@ -1990,7 +1990,7 @@ /area/ship/crew/toilet) "ST" = ( /obj/item/storage/cans/sixbeer, -/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, /obj/structure/closet/secure_closet/freezer{ anchored = 1; name = "fridge" @@ -2140,7 +2140,7 @@ /area/ship/engineering/engine) "Vy" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/bounty, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/dim/directional/north, diff --git a/_maps/shuttles/independent/independent_raleigh.dmm b/_maps/shuttles/independent/independent_raleigh.dmm index a6bff35f8dc7..906af974bfe5 100644 --- a/_maps/shuttles/independent/independent_raleigh.dmm +++ b/_maps/shuttles/independent/independent_raleigh.dmm @@ -714,16 +714,12 @@ /obj/structure/table, /obj/effect/turf_decal/corner/opaque/yellow/mono, /obj/structure/closet/wall/white/directional/east, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration{ - pixel_y = 1 - }, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/storage/cans/sixbeer, /obj/item/storage/cans/sixbeer, /obj/effect/decal/cleanable/food/flour, -/obj/effect/spawner/lootdrop/ration{ - pixel_y = 1 - }, +/obj/effect/spawner/random/food_or_drink/ration, /turf/open/floor/plasteel/mono/white, /area/ship/crew/canteen) "jc" = ( @@ -1036,7 +1032,7 @@ /area/ship/crew/ccommons) "my" = ( /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/bounty, /obj/item/toy/plush/flushed, /turf/open/floor/carpet/green, @@ -1055,7 +1051,7 @@ /area/ship/hallway/central) "mE" = ( /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/bounty, /obj/item/toy/plush/carpplushie, /turf/open/floor/carpet/green, @@ -1625,7 +1621,7 @@ /turf/open/floor/plasteel/mono, /area/ship/cargo) "tg" = ( -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /obj/effect/turf_decal/corner_steel_grid{ dir = 9 }, @@ -1851,7 +1847,7 @@ "ws" = ( /obj/structure/curtain/bounty, /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/carpet/green, /area/ship/crew/dorm) "wS" = ( @@ -4082,7 +4078,7 @@ dir = 8 }, /obj/structure/extinguisher_cabinet/directional/west, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/ship/engineering/atmospherics) "Wm" = ( @@ -4531,7 +4527,7 @@ "ZE" = ( /obj/structure/closet/crate, /obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/ship/engineering/engines/starboard) diff --git a/_maps/shuttles/independent/independent_rigger.dmm b/_maps/shuttles/independent/independent_rigger.dmm index d87ae083832b..78053b7e5e8c 100644 --- a/_maps/shuttles/independent/independent_rigger.dmm +++ b/_maps/shuttles/independent/independent_rigger.dmm @@ -62,7 +62,7 @@ "bc" = ( /obj/structure/closet/cardboard, /obj/item/paicard, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/ship/maintenance/fore) "bi" = ( @@ -239,8 +239,8 @@ populate = 0 }, /obj/item/storage/cans/sixbeer, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/reagent_containers/condiment/flour, /obj/item/reagent_containers/condiment/sugar, /obj/item/radio/intercom/directional/north, @@ -283,7 +283,7 @@ "eu" = ( /obj/structure/closet/crate, /obj/machinery/airalarm/directional/north, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/ship/maintenance/fore) "eF" = ( @@ -430,7 +430,7 @@ dir = 1 }, /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/bounty, /turf/open/floor/plasteel/grimy, /area/ship/crew/dorm) @@ -1102,7 +1102,7 @@ "nU" = ( /obj/machinery/light/directional/west, /obj/effect/turf_decal/corner/opaque/yellow/diagonal, -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /turf/open/floor/plasteel/white, /area/ship/crew/canteen) "od" = ( @@ -1160,7 +1160,7 @@ /turf/open/floor/plasteel/white, /area/ship/crew/canteen) "oX" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/ship/maintenance/fore) "ph" = ( @@ -2463,7 +2463,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel/tech, /area/ship/engineering/engine) "DG" = ( @@ -2616,7 +2616,7 @@ }, /obj/structure/closet/crate, /obj/machinery/firealarm/directional/west, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/ship/maintenance/port) "Fu" = ( @@ -3240,7 +3240,7 @@ /area/ship/medical) "Ne" = ( /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/bounty, /turf/open/floor/plasteel/grimy, /area/ship/crew/dorm) @@ -3552,7 +3552,7 @@ /area/ship/maintenance/central) "Qv" = ( /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plasteel, /area/ship/construction) "QB" = ( @@ -3680,7 +3680,7 @@ }, /obj/structure/bed, /obj/structure/curtain/bounty, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/plasteel/grimy, /area/ship/crew/dorm) "Sj" = ( @@ -3791,13 +3791,13 @@ dir = 1 }, /obj/structure/crate_shelf, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/reagent_containers/food/drinks/waterbottle/large{ pixel_x = 1; pixel_y = -3 @@ -3903,7 +3903,7 @@ /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, /obj/structure/closet/crate/bin, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plasteel/grimy, /area/ship/crew) "Ug" = ( diff --git a/_maps/shuttles/independent/independent_schmiedeberg.dmm b/_maps/shuttles/independent/independent_schmiedeberg.dmm index 3ae3915db4d3..bf97b9b1a44b 100644 --- a/_maps/shuttles/independent/independent_schmiedeberg.dmm +++ b/_maps/shuttles/independent/independent_schmiedeberg.dmm @@ -167,7 +167,7 @@ /obj/machinery/door/window/brigdoor/northright{ dir = 2 }, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/turf_decal/siding/wood{ dir = 10 }, @@ -440,7 +440,7 @@ /area/ship/cargo) "fq" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/greenglow/filled, /obj/effect/turf_decal/siding/wood{ color = "#543C30"; @@ -462,7 +462,7 @@ /area/ship/engineering) "fM" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/turf_decal/siding/wood/corner{ dir = 4 }, @@ -1176,8 +1176,8 @@ /obj/machinery/door/poddoor/shutters/preopen{ id = "pharmlobby" }, -/obj/effect/spawner/lootdrop/maintenance/two, -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/maintenance/two, +/obj/effect/spawner/random/maintenance/four, /turf/open/floor/mineral/titanium, /area/ship/cargo) "qj" = ( @@ -1222,7 +1222,7 @@ /area/ship/medical) "qU" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/turf_decal/siding/wood{ color = "#543C30"; dir = 9 @@ -2360,7 +2360,7 @@ /obj/structure/rack, /obj/structure/window/reinforced/spawner/east, /obj/structure/window/reinforced/spawner/north, -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/maintenance/four, /obj/machinery/door/window/brigdoor/northright{ dir = 8 }, @@ -2728,14 +2728,14 @@ /obj/structure/rack, /obj/structure/window/reinforced/spawner/east, /obj/structure/window/reinforced/spawner/north, -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/maintenance/four, /obj/machinery/door/window/brigdoor/northright{ dir = 8 }, /obj/machinery/door/poddoor/shutters/preopen{ id = "pharmlobby" }, -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/maintenance/four, /turf/open/floor/wood/walnut, /area/ship/cargo) "OO" = ( @@ -2977,7 +2977,7 @@ pixel_y = -32 }, /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/bounty, /obj/effect/turf_decal/siding/wood/corner{ dir = 1 @@ -3050,7 +3050,7 @@ /obj/item/flashlight/glowstick/blue, /obj/item/flashlight/glowstick/cyan, /obj/item/storage/pill_bottle/floorpill, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/turf_decal/siding/wood{ color = "#543C30"; dir = 1 @@ -3097,7 +3097,7 @@ dir = 8 }, /obj/item/storage/pill_bottle/zoom, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/machinery/door/poddoor/shutters/preopen{ id = "pharmlobby" }, @@ -3205,7 +3205,7 @@ /obj/machinery/door/window/brigdoor/northright{ dir = 2 }, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/turf_decal/siding/wood{ dir = 6 }, diff --git a/_maps/shuttles/independent/independent_shetland.dmm b/_maps/shuttles/independent/independent_shetland.dmm index 75784c301eda..8cdb3dfae61a 100644 --- a/_maps/shuttles/independent/independent_shetland.dmm +++ b/_maps/shuttles/independent/independent_shetland.dmm @@ -735,7 +735,7 @@ /turf/open/floor/plasteel/patterned, /area/ship/crew/janitor) "gd" = ( -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /obj/effect/turf_decal/corner/opaque/neutral/half{ dir = 4 }, @@ -3100,7 +3100,7 @@ /turf/open/floor/plating, /area/ship/hallway/port) "zr" = ( -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /obj/effect/turf_decal/corner/opaque/neutral/three_quarters{ dir = 8 }, @@ -4361,7 +4361,7 @@ "Li" = ( /obj/structure/bed, /obj/structure/curtain/bounty, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/random{ pixel_x = -32; @@ -4647,7 +4647,7 @@ "MS" = ( /obj/structure/bed, /obj/structure/curtain/bounty, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/plasteel/grimy, /area/ship/crew/dorm) "MT" = ( @@ -4676,7 +4676,7 @@ "Ni" = ( /obj/structure/bed, /obj/structure/curtain/bounty, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/random{ pixel_y = 32 @@ -4768,7 +4768,7 @@ "Ok" = ( /obj/structure/bed, /obj/structure/curtain/bounty, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 }, @@ -5423,9 +5423,9 @@ pixel_x = -5; pixel_y = 3 }, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/storage/cans/sixbeer, /obj/item/reagent_containers/food/drinks/waterbottle/large{ pixel_x = 1; diff --git a/_maps/shuttles/independent/independent_sunskipper.dmm b/_maps/shuttles/independent/independent_sunskipper.dmm index 3edffc72acbc..12f34a8991ac 100644 --- a/_maps/shuttles/independent/independent_sunskipper.dmm +++ b/_maps/shuttles/independent/independent_sunskipper.dmm @@ -1182,9 +1182,7 @@ /obj/structure/bed{ dir = 1 }, -/obj/item/bedsheet/dorms{ - dir = 1 - }, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/cloth/grey, /obj/structure/cable/green{ icon_state = "1-2" diff --git a/_maps/shuttles/independent/independent_tranquility.dmm b/_maps/shuttles/independent/independent_tranquility.dmm index 35b3044df741..0ecbfbe09e90 100644 --- a/_maps/shuttles/independent/independent_tranquility.dmm +++ b/_maps/shuttles/independent/independent_tranquility.dmm @@ -1721,7 +1721,7 @@ /area/ship/hallway/starboard) "nr" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/cloth/grey, /obj/machinery/light/dim/directional/east, /obj/structure/sign/poster/contraband/gec{ @@ -4731,7 +4731,7 @@ "LT" = ( /obj/structure/bed, /obj/structure/curtain/cloth/grey, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/turf_decal/siding/wood{ dir = 4 }, @@ -5755,7 +5755,7 @@ /area/ship/crew/hydroponics) "Tl" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/cloth/grey, /obj/machinery/light/dim/directional/east, /obj/structure/sign/poster/contraband/hacking_guide{ @@ -5891,7 +5891,7 @@ /obj/structure/bed, /obj/structure/curtain/cloth/grey, /obj/machinery/light/dim/directional/north, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/carpet/black, /area/ship/crew/dorm/dormthree) "Up" = ( @@ -6197,10 +6197,10 @@ "WS" = ( /obj/machinery/light/dim/directional/north, /obj/structure/closet/crate/hydroponics, -/obj/effect/spawner/lootdrop/seeded, -/obj/effect/spawner/lootdrop/seeded, -/obj/effect/spawner/lootdrop/seeded, -/obj/effect/spawner/lootdrop/seeded, +/obj/effect/spawner/random/food_or_drink/seed, +/obj/effect/spawner/random/food_or_drink/seed, +/obj/effect/spawner/random/food_or_drink/seed, +/obj/effect/spawner/random/food_or_drink/seed, /obj/item/seeds/random, /turf/open/floor/grass, /area/ship/crew/hydroponics) diff --git a/_maps/shuttles/inteq/inteq_colossus.dmm b/_maps/shuttles/inteq/inteq_colossus.dmm index 70f32bfb60f2..e6542ff6a355 100644 --- a/_maps/shuttles/inteq/inteq_colossus.dmm +++ b/_maps/shuttles/inteq/inteq_colossus.dmm @@ -228,8 +228,8 @@ locked = 0; name = "fridge" }, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/storage/cans/sixbeer, /obj/effect/turf_decal/corner/opaque/yellow{ dir = 1 @@ -856,7 +856,7 @@ /turf/open/floor/plating, /area/ship/maintenance/port) "iT" = ( -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /obj/effect/turf_decal/trimline/opaque/yellow/line, /obj/effect/turf_decal/siding/thinplating, /obj/structure/cable, @@ -1632,16 +1632,16 @@ dir = 1 }, /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, @@ -2537,7 +2537,7 @@ }, /obj/structure/closet/cardboard, /obj/item/radio/intercom/directional/south, -/obj/effect/spawner/lootdrop/maintenance/seven, +/obj/effect/spawner/random/maintenance/seven, /obj/effect/turf_decal/corner_techfloor_gray{ dir = 4 }, @@ -3652,7 +3652,7 @@ /obj/structure/closet/crate/trashcart, /obj/machinery/airalarm/directional/east, /obj/machinery/firealarm/directional/south, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/effect/turf_decal/corner_techfloor_gray{ dir = 4 }, @@ -4494,7 +4494,7 @@ /turf/open/floor/carpet/black, /area/ship/crew) "XS" = ( -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /obj/effect/turf_decal/trimline/opaque/yellow/line, /obj/effect/turf_decal/siding/thinplating, /obj/machinery/airalarm/directional/south, diff --git a/_maps/shuttles/inteq/inteq_hound.dmm b/_maps/shuttles/inteq/inteq_hound.dmm index c6f9e34a653d..b0c1bdfb8171 100644 --- a/_maps/shuttles/inteq/inteq_hound.dmm +++ b/_maps/shuttles/inteq/inteq_hound.dmm @@ -27,8 +27,8 @@ locked = 0; name = "fridge" }, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/storage/cans/sixbeer, /obj/item/reagent_containers/food/snacks/icecreamsandwich, /obj/machinery/light/directional/south, @@ -2043,11 +2043,11 @@ dir = 4 }, /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, /turf/open/floor/plasteel/patterned/cargo_one, diff --git a/_maps/shuttles/inteq/inteq_talos.dmm b/_maps/shuttles/inteq/inteq_talos.dmm index 5df5060f6f06..b322c45ea99b 100644 --- a/_maps/shuttles/inteq/inteq_talos.dmm +++ b/_maps/shuttles/inteq/inteq_talos.dmm @@ -888,12 +888,12 @@ /area/ship/maintenance/starboard) "fN" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/airless, /area/ship/maintenance/port) "fU" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/airless, /area/ship/storage/port) "fX" = ( @@ -948,7 +948,7 @@ "gm" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/airless, /area/ship/storage/starboard) "go" = ( @@ -1262,7 +1262,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/item/cigbutt, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/airless, /area/ship/storage/starboard) "im" = ( @@ -1640,7 +1640,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating/airless, /area/ship/maintenance/starboard) "kD" = ( @@ -2132,7 +2132,7 @@ /area/ship/storage) "nF" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating/airless, /area/ship/storage/port) "nH" = ( @@ -2345,7 +2345,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/closet/cardboard, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating/airless, /area/ship/maintenance/starboard) "oR" = ( @@ -2484,8 +2484,8 @@ name = "fridge" }, /obj/item/storage/cans/sixbeer, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/reagent_containers/food/snacks/popsicle/creamsicle_orange, /obj/item/reagent_containers/food/snacks/popsicle/creamsicle_orange, /obj/item/radio/intercom/directional/north, @@ -2636,7 +2636,7 @@ "qp" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/cobweb, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating/airless, /area/ship/maintenance/port) "qr" = ( @@ -2879,7 +2879,7 @@ /area/ship/security) "rN" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating/airless, /area/ship/maintenance/starboard) "rP" = ( @@ -3028,7 +3028,7 @@ /area/ship/maintenance/port) "sD" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/turf_decal/industrial/warning{ dir = 4 }, @@ -3041,7 +3041,7 @@ /obj/effect/turf_decal/corner/opaque/brown{ dir = 4 }, -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /obj/machinery/camera/autoname, /obj/machinery/status_display/shuttle{ pixel_y = 32 @@ -4081,7 +4081,7 @@ /area/ship/maintenance/port) "zg" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating/airless, /area/ship/maintenance/port) "zh" = ( @@ -4159,7 +4159,7 @@ "zB" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate/trashcart, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/airless, /area/ship/storage/port) "zE" = ( @@ -4237,7 +4237,7 @@ "Aa" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating/airless, /area/ship/storage/port) "Ag" = ( @@ -4499,7 +4499,7 @@ /area/ship/crew/canteen) "BN" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating/airless, /area/ship/storage/starboard) "BP" = ( @@ -4545,7 +4545,7 @@ /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) "Cp" = ( -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /obj/structure/sign/poster/contraband/inteq{ pixel_x = 32 }, @@ -5212,7 +5212,7 @@ icon_state = "1-8" }, /obj/effect/decal/cleanable/blood/old, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating/airless, /area/ship/maintenance/starboard) "GR" = ( @@ -5286,7 +5286,7 @@ "Ho" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating/airless, /area/ship/storage/starboard) "Hp" = ( @@ -5522,7 +5522,7 @@ /turf/open/floor/engine/vacuum, /area/ship/engineering/engine) "Jk" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/airless, /area/ship/maintenance/starboard) "Jo" = ( @@ -6161,7 +6161,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating/airless, /area/ship/storage/port) "NK" = ( @@ -6308,7 +6308,7 @@ "OP" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating/airless, /area/ship/maintenance/port) "Pf" = ( @@ -6360,7 +6360,7 @@ /obj/machinery/light/small/directional/west, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /obj/structure/closet/crate, /turf/open/floor/plating/airless, /area/ship/storage/starboard) @@ -6635,7 +6635,7 @@ /area/ship/hallway/central) "Ri" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating/airless, /area/ship/maintenance/port) "Rp" = ( @@ -6717,7 +6717,7 @@ /obj/machinery/light/small/directional/north, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/plasma, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/ship/maintenance/port) "RY" = ( @@ -6888,7 +6888,7 @@ /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) "SS" = ( -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /obj/machinery/airalarm/directional/east, /turf/open/floor/plasteel/grimy, /area/ship/crew) @@ -7105,11 +7105,11 @@ /obj/structure/closet/crate{ name = "food crate" }, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, @@ -7146,7 +7146,7 @@ /area/ship/storage/starboard) "Uy" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating/airless, /area/ship/storage/port) "UD" = ( @@ -7684,7 +7684,7 @@ /area/ship/maintenance/starboard) "YZ" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating/airless, /area/ship/maintenance/starboard) "Zb" = ( @@ -7883,7 +7883,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/cardboard, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating/airless, /area/ship/storage/port) "ZY" = ( diff --git a/_maps/shuttles/inteq/inteq_valor.dmm b/_maps/shuttles/inteq/inteq_valor.dmm index 00b25f936eab..994041639613 100644 --- a/_maps/shuttles/inteq/inteq_valor.dmm +++ b/_maps/shuttles/inteq/inteq_valor.dmm @@ -92,7 +92,7 @@ }, /obj/effect/turf_decal/box/corners, /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/five, +/obj/effect/spawner/random/maintenance/five, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) "bv" = ( @@ -586,9 +586,9 @@ /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/storage/ration/crayons, /obj/effect/turf_decal/box/corners{ dir = 8 @@ -1491,7 +1491,7 @@ /obj/effect/turf_decal/trimline/opaque/yellow/line{ dir = 5 }, -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) @@ -2691,8 +2691,8 @@ dir = 1 }, /obj/item/reagent_containers/food/snacks/hotdog, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) "yu" = ( @@ -4647,7 +4647,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/donut, +/obj/effect/spawner/random/food_or_drink/donut, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) "Qn" = ( @@ -5393,7 +5393,7 @@ /obj/effect/turf_decal/trimline/opaque/yellow/line{ dir = 4 }, -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/directional/east, /turf/open/floor/plasteel/patterned/grid, diff --git a/_maps/shuttles/inteq/inteq_vaquero.dmm b/_maps/shuttles/inteq/inteq_vaquero.dmm index 9ea8b60d9b89..cd79d41cc9cc 100644 --- a/_maps/shuttles/inteq/inteq_vaquero.dmm +++ b/_maps/shuttles/inteq/inteq_vaquero.dmm @@ -1520,16 +1520,16 @@ dir = 1 }, /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, @@ -3217,7 +3217,7 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) "XG" = ( @@ -3252,8 +3252,8 @@ name = "fridge" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, /obj/item/storage/cans/sixbeer, /obj/item/reagent_containers/food/snacks/carneburrito, /obj/effect/turf_decal/corner/opaque/yellow{ diff --git a/_maps/shuttles/minutemen/minutemen_atlas.dmm b/_maps/shuttles/minutemen/minutemen_atlas.dmm index 325069e91a6e..1b9d5dc2dffb 100644 --- a/_maps/shuttles/minutemen/minutemen_atlas.dmm +++ b/_maps/shuttles/minutemen/minutemen_atlas.dmm @@ -3749,11 +3749,11 @@ /obj/structure/closet/secure_closet/freezer/fridge/open{ populate = 0 }, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, diff --git a/_maps/shuttles/nanotrasen/nanotrasen_delta.dmm b/_maps/shuttles/nanotrasen/nanotrasen_delta.dmm index 0d57e0ca165a..f4643679b3d0 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_delta.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_delta.dmm @@ -252,11 +252,11 @@ }, /obj/structure/closet/crate, /obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) "bd" = ( @@ -497,7 +497,7 @@ /turf/open/floor/plating, /area/ship/engineering) "cm" = ( -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /obj/machinery/light/small/directional/east, /turf/open/floor/plasteel/dark, /area/ship/hallway/central) @@ -1089,8 +1089,8 @@ dir = 1; pixel_y = -32 }, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/storage/cans/sixbeer, /turf/open/floor/plasteel, /area/ship/crew) diff --git a/_maps/shuttles/nanotrasen/nanotrasen_gecko.dmm b/_maps/shuttles/nanotrasen/nanotrasen_gecko.dmm index 2cb4e641cd53..1e65ca7f3773 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_gecko.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_gecko.dmm @@ -130,7 +130,7 @@ /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/aft) "bh" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/ship/maintenance/fore) @@ -246,7 +246,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, /area/ship/maintenance/fore) "cj" = ( @@ -319,7 +319,7 @@ /turf/open/floor/plating, /area/ship/maintenance/fore) "cP" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, @@ -357,7 +357,7 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/maintenance/fore) "dp" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/maintenance/starboard) @@ -435,7 +435,7 @@ /turf/open/floor/plasteel, /area/ship/cargo/starboard) "ej" = ( -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/borderfloor, /obj/structure/extinguisher_cabinet/directional/west, @@ -559,7 +559,7 @@ /turf/open/floor/engine/hull, /area/ship/external) "eQ" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -658,7 +658,7 @@ /area/ship/engineering/atmospherics) "ga" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/bounty, /obj/structure/window/reinforced{ dir = 4 @@ -676,7 +676,7 @@ /turf/open/floor/plating, /area/ship/engineering/engine) "gf" = ( -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, @@ -696,7 +696,7 @@ /turf/open/floor/plasteel/patterned, /area/ship/cargo/port) "gh" = ( -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/structure/cable{ icon_state = "1-2" }, @@ -712,7 +712,7 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 1 @@ -776,7 +776,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/turf_decal/industrial/warning, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, @@ -815,7 +815,7 @@ /area/ship/crew) "hA" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /turf/open/floor/plasteel/patterned, /area/ship/cargo/port) "hL" = ( @@ -907,7 +907,7 @@ /turf/open/floor/engine/airless, /area/ship/engineering/engine) "iJ" = ( -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /turf/open/floor/plasteel/patterned, /area/ship/cargo/starboard) "iK" = ( @@ -931,7 +931,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/maintenance/port) @@ -944,9 +944,9 @@ /area/ship/bridge) "jc" = ( /obj/structure/table/reinforced, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/radio/intercom/directional/east, /turf/open/floor/plasteel/grimy, /area/ship/crew) @@ -1144,13 +1144,13 @@ /area/ship/engineering/engine) "lb" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/bounty, /turf/open/floor/plasteel/grimy, /area/ship/crew) "lE" = ( /obj/effect/turf_decal/box/corners, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo/starboard) "lM" = ( @@ -1176,7 +1176,7 @@ /area/ship/hallway/central) "lT" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/structure/cable{ icon_state = "1-2" }, @@ -1219,7 +1219,7 @@ /area/ship/cargo/port) "mb" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo/starboard) "mm" = ( @@ -1402,7 +1402,7 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, @@ -1418,10 +1418,10 @@ /obj/item/reagent_containers/food/snacks/canned/beans, /obj/item/reagent_containers/food/snacks/canned/beans, /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /turf/open/floor/plasteel/patterned, /area/ship/storage) "oR" = ( @@ -1579,7 +1579,7 @@ /area/ship/storage) "qn" = ( /obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ icon_state = "0-4" @@ -1604,7 +1604,7 @@ /turf/open/floor/plating, /area/ship/maintenance/port) "qu" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/maintenance/fore) @@ -1684,12 +1684,12 @@ /obj/effect/turf_decal/box/corners{ dir = 1 }, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo/port) "qY" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 6 @@ -1955,7 +1955,7 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 10 }, @@ -2078,7 +2078,7 @@ icon_state = "1-8" }, /obj/machinery/light/small/directional/south, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/maintenance/starboard) @@ -2113,7 +2113,7 @@ /turf/open/floor/plasteel/patterned, /area/ship/storage) "vi" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/ship/maintenance/fore) "vl" = ( @@ -2158,7 +2158,7 @@ /turf/open/floor/plastic, /area/ship/crew/toilet) "vG" = ( -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/effect/turf_decal/borderfloor{ dir = 1 }, @@ -2267,7 +2267,7 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering/communications) "wP" = ( -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/effect/turf_decal/industrial/outline/yellow, /turf/open/floor/plasteel, /area/ship/cargo/port) @@ -2294,7 +2294,7 @@ /turf/open/floor/plating, /area/ship/engineering/engine) "xd" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, @@ -2336,7 +2336,7 @@ /area/ship/cargo/port) "xG" = ( /obj/item/radio/intercom/directional/north, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/effect/turf_decal/industrial/outline/yellow, /turf/open/floor/plasteel, /area/ship/cargo/port) @@ -2397,7 +2397,7 @@ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plasteel/stairs{ dir = 1 }, @@ -2453,7 +2453,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plasteel/stairs, /area/ship/maintenance/port) "yG" = ( @@ -2524,7 +2524,7 @@ /turf/open/floor/plasteel/telecomms_floor, /area/ship/engineering/communications) "zv" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/ntspaceworks_big/six{ dir = 4 @@ -2637,7 +2637,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering/engine) "AD" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/ship/maintenance/starboard) @@ -2684,7 +2684,7 @@ "AN" = ( /obj/item/radio/intercom/directional/south, /obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /turf/open/floor/plasteel, /area/ship/cargo/starboard) "AW" = ( @@ -2729,7 +2729,7 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/crew) "BM" = ( -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/effect/turf_decal/trimline/transparent/white/filled/warning{ dir = 4 }, @@ -2752,7 +2752,7 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/structure/cable{ icon_state = "4-8" }, @@ -2761,7 +2761,7 @@ "Cc" = ( /obj/machinery/light/directional/west, /obj/effect/turf_decal/industrial/warning, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, @@ -3080,7 +3080,7 @@ /obj/effect/turf_decal/box/corners{ dir = 8 }, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo/starboard) @@ -3345,14 +3345,14 @@ /area/ship/bridge) "HK" = ( /obj/machinery/light/directional/north, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/effect/turf_decal/borderfloor{ dir = 1 }, /turf/open/floor/plasteel, /area/ship/hallway/aft) "HN" = ( -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo/port) "HT" = ( @@ -3437,7 +3437,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, /area/ship/maintenance/starboard) "Is" = ( @@ -3543,7 +3543,7 @@ "Jk" = ( /obj/effect/turf_decal/industrial/outline/yellow, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /turf/open/floor/plasteel, /area/ship/cargo/starboard) "Jn" = ( @@ -3568,7 +3568,7 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, /area/ship/maintenance/fore) "JL" = ( @@ -3739,7 +3739,7 @@ /obj/machinery/atmospherics/pipe/simple/purple/hidden/layer1{ dir = 9 }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, /area/ship/engineering/engine) "LK" = ( @@ -3771,7 +3771,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt/dust, /obj/structure/sign/warning/electricshock{ pixel_y = 32 @@ -3875,7 +3875,7 @@ /area/ship/hallway/aft) "Nz" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo/port) "NC" = ( @@ -3944,7 +3944,7 @@ /obj/effect/turf_decal/arrows{ dir = 1 }, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/structure/cable{ icon_state = "4-8" }, @@ -3970,7 +3970,7 @@ /area/ship/external) "OZ" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, /area/ship/engineering/engine) "Pc" = ( @@ -4080,7 +4080,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/maintenance/fore) @@ -4160,7 +4160,7 @@ /obj/effect/turf_decal/box/corners{ dir = 4 }, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo/starboard) "Qz" = ( @@ -4243,7 +4243,7 @@ /obj/effect/turf_decal/box/corners{ dir = 8 }, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo/starboard) @@ -4318,7 +4318,7 @@ "Sa" = ( /obj/machinery/light/directional/east, /obj/effect/turf_decal/industrial/warning, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/structure/cable{ icon_state = "2-8" }, @@ -4340,7 +4340,7 @@ /obj/effect/turf_decal/borderfloor{ dir = 1 }, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /turf/open/floor/plasteel, /area/ship/hallway/aft) "Sl" = ( @@ -4382,7 +4382,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/maintenance/starboard) @@ -4401,7 +4401,7 @@ /area/ship/cargo/port) "SK" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/machinery/airalarm/directional/south, /obj/effect/turf_decal/trimline/transparent/white/filled/warning{ dir = 4 @@ -4416,7 +4416,7 @@ /turf/open/floor/plating, /area/ship/maintenance/fore) "SQ" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, /area/ship/engineering/engine) "SV" = ( @@ -4482,7 +4482,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 1 }, @@ -4527,7 +4527,7 @@ /obj/effect/turf_decal/box/corners{ dir = 1 }, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo/port) @@ -4571,7 +4571,7 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/hallway/central) "UC" = ( -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, @@ -4642,7 +4642,7 @@ /obj/structure/cable{ icon_state = "2-4" }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/ship/maintenance/port) @@ -4704,7 +4704,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo/port) "Vz" = ( @@ -4845,7 +4845,7 @@ /area/ship/cargo/port) "Wo" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, /area/ship/maintenance/port) "Wq" = ( @@ -5106,7 +5106,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt/dust, /obj/structure/sign/warning/electricshock{ pixel_y = -32 @@ -5248,7 +5248,7 @@ /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/fore) "ZS" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/effect/turf_decal/industrial/outline/yellow, /obj/machinery/button/ignition/incinerator/atmos{ dir = 4; @@ -5265,7 +5265,7 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/crew) "ZY" = ( -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/machinery/firealarm/directional/north, /turf/open/floor/plasteel/patterned, /area/ship/cargo/starboard) diff --git a/_maps/shuttles/nanotrasen/nanotrasen_harrier.dmm b/_maps/shuttles/nanotrasen/nanotrasen_harrier.dmm index 72bd430d743b..3ddabcf1253c 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_harrier.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_harrier.dmm @@ -1370,11 +1370,11 @@ /obj/structure/closet/crate{ name = "food crate" }, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/storage/cans/sixbeer, /obj/machinery/light/directional/west, /turf/open/floor/plasteel/patterned, @@ -5012,7 +5012,7 @@ /turf/open/floor/plasteel/white, /area/ship/medical) "BO" = ( -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /obj/effect/turf_decal/trimline/opaque/ntblue/filled/line, /turf/open/floor/plasteel, /area/ship/hallway/central) @@ -7448,7 +7448,7 @@ /turf/open/floor/plasteel/mono, /area/ship/hallway/central) "OD" = ( -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /obj/machinery/light/directional/south, /obj/effect/turf_decal/trimline/opaque/ntblue/filled/line, /turf/open/floor/plasteel, diff --git a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm index a02ec78fc9e6..1a07763671e5 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 }, @@ -807,7 +807,7 @@ /area/ship/science/robotics) "dq" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/turf_decal/siding/wood{ dir = 10 }, @@ -1740,10 +1740,7 @@ /turf/open/floor/plasteel/dark, /area/ship/bridge) "hn" = ( -/obj/effect/spawner/lootdrop/glowstick{ - pixel_x = 5; - pixel_y = 9 - }, +/obj/effect/spawner/random/decoration/glowstick, /obj/effect/decal/cleanable/plastic, /obj/machinery/atmospherics/pipe/simple/purple/hidden, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ @@ -1889,7 +1886,7 @@ /area/ship/crew/dorm/dormtwo) "hM" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/turf_decal/siding/wood{ dir = 6 }, @@ -2452,7 +2449,7 @@ /obj/effect/turf_decal/trimline/opaque/blue/line{ dir = 9 }, -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /obj/machinery/light/directional/west, /obj/machinery/light_switch{ pixel_y = 22; @@ -4835,7 +4832,7 @@ /area/ship/medical) "sr" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/turf_decal/siding/wood{ dir = 9 }, @@ -6163,14 +6160,14 @@ /area/ship/bridge) "wq" = ( /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/turf_decal/corner_techfloor_gray/diagonal{ dir = 8 }, /obj/effect/turf_decal/industrial/warning{ dir = 4 }, -/obj/effect/spawner/lootdrop/maintenance/five, +/obj/effect/spawner/random/maintenance/five, /obj/item/radio/intercom/directional/east, /turf/open/floor/plasteel/dark, /area/ship/storage) @@ -6916,9 +6913,9 @@ dir = 10 }, /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/spawner/lootdrop/gloves, -/obj/effect/spawner/lootdrop/minor/beret_or_rabbitears, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/clothing/gloves, +/obj/effect/spawner/random/clothing/beret_or_rabbitears, /obj/effect/decal/cleanable/vomit/old, /turf/open/floor/plasteel/dark, /area/ship/storage) @@ -7722,7 +7719,7 @@ /area/ship/crew/canteen) "CP" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/turf_decal/siding/wood{ dir = 4 }, @@ -8993,7 +8990,7 @@ /obj/effect/turf_decal/trimline/opaque/beige/filled/line{ dir = 10 }, -/obj/effect/spawner/lootdrop/salvage_50, +/obj/effect/spawner/random/salvage/half, /obj/structure/cable{ icon_state = "1-2" }, @@ -10464,7 +10461,7 @@ /obj/effect/turf_decal/industrial/warning{ dir = 8 }, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/machinery/light/small/directional/west, /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/official/get_your_legs{ @@ -10963,7 +10960,7 @@ /area/ship/engineering/atmospherics) "OR" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/turf_decal/siding/wood{ dir = 8 }, @@ -11575,8 +11572,8 @@ dir = 9 }, /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, /area/ship/storage) @@ -11813,7 +11810,7 @@ /area/ship/hangar) "Sz" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/turf_decal/siding/wood{ dir = 5 }, @@ -11889,7 +11886,7 @@ dir = 5 }, /obj/item/toy/plush/beeplushie, -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/maintenance/four, /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable{ icon_state = "0-8" diff --git a/_maps/shuttles/nanotrasen/nanotrasen_meta.dmm b/_maps/shuttles/nanotrasen/nanotrasen_meta.dmm index 95b61c204b54..2f1d3b060077 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_meta.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_meta.dmm @@ -240,9 +240,9 @@ icon_state = "crateopen"; opened = 1 }, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/gloves, +/obj/effect/spawner/random/clothing/gloves, /turf/open/floor/plasteel/dark, /area/ship/cargo) "aF" = ( @@ -576,9 +576,9 @@ dir = 4 }, /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/glowstick, +/obj/effect/spawner/random/decoration/glowstick, /turf/open/floor/plasteel/dark, /area/ship/cargo) "bX" = ( @@ -2000,7 +2000,7 @@ /turf/open/floor/plasteel, /area/ship/crew/canteen/kitchen) "pF" = ( -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /obj/effect/turf_decal/corner/transparent/bar/diagonal, /obj/machinery/light/directional/east, /obj/effect/decal/cleanable/dirt/dust, @@ -2172,8 +2172,8 @@ /obj/effect/turf_decal/ntspaceworks_big/two, /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/tool_surgery_common, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/medical/surgery_tool/common, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plasteel/dark, /area/ship/cargo) "uk" = ( @@ -2520,8 +2520,8 @@ /obj/effect/decal/cleanable/oil, /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance/two, -/obj/effect/spawner/lootdrop/random_prosthetic, +/obj/effect/spawner/random/maintenance/two, +/obj/effect/spawner/random/medical/prosthetic, /turf/open/floor/plasteel/dark, /area/ship/cargo) "Ai" = ( @@ -2683,7 +2683,7 @@ /obj/structure/rack, /obj/effect/decal/cleanable/dirt/dust, /obj/item/radio/intercom/directional/east, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/item/extinguisher/mini, /turf/open/floor/plasteel/dark, /area/ship/cargo) @@ -2846,7 +2846,7 @@ dir = 8 }, /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/maintenance/four, /obj/effect/decal/cleanable/dirt/dust, /obj/item/spacecash/bundle/pocketchange, /turf/open/floor/plasteel/dark, @@ -3064,7 +3064,7 @@ /turf/open/floor/plasteel/dark, /area/ship/cargo) "La" = ( -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /obj/effect/turf_decal/corner/transparent/bar/diagonal, /obj/machinery/light/broken/directional/east, /obj/effect/decal/cleanable/dirt/dust, @@ -3701,11 +3701,11 @@ "Zf" = ( /obj/effect/turf_decal/corner/transparent/bar/diagonal, /obj/structure/table, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration{ +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration{ pixel_x = 7 }, -/obj/effect/spawner/lootdrop/ration{ +/obj/effect/spawner/random/food_or_drink/ration{ pixel_x = -8 }, /obj/machinery/button/door{ diff --git a/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm b/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm index f749f60f7e52..25b3bb0a0c83 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm @@ -50,7 +50,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/techfloor/orange, /turf/open/floor/plasteel/tech/grid, @@ -876,7 +876,7 @@ /area/ship/engineering) "fd" = ( /obj/structure/table/wood/reinforced, -/obj/effect/spawner/lootdrop/ration{ +/obj/effect/spawner/random/food_or_drink/ration{ pixel_x = 5; pixel_y = 5 }, @@ -908,7 +908,7 @@ pixel_x = -5; pixel_y = -7 }, -/obj/effect/spawner/lootdrop/ration{ +/obj/effect/spawner/random/food_or_drink/ration{ pixel_x = 6; pixel_y = 11 }, @@ -1035,7 +1035,7 @@ /obj/structure/railing{ dir = 8 }, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/maintenance/port) @@ -1412,7 +1412,7 @@ /turf/open/floor/plasteel/white, /area/ship/medical) "hZ" = ( -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, @@ -1441,7 +1441,7 @@ /obj/structure/railing/corner{ dir = 1 }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/maintenance/starboard) @@ -2092,7 +2092,7 @@ dir = 6 }, /obj/structure/railing, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, @@ -2117,7 +2117,7 @@ /turf/open/floor/plating, /area/ship/engineering/atmospherics) "lW" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/maintenance/port) @@ -2330,7 +2330,7 @@ /area/ship/security/prison) "nk" = ( /obj/structure/railing, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, @@ -2745,12 +2745,12 @@ /area/ship/engineering/electrical) "pV" = ( /obj/structure/railing, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/maintenance/port) "pY" = ( -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /obj/effect/turf_decal/siding/red{ dir = 4 }, @@ -2956,7 +2956,7 @@ /obj/structure/railing{ dir = 9 }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/maintenance/starboard) @@ -3258,7 +3258,7 @@ /obj/structure/railing{ dir = 1 }, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/tech/grid, /area/ship/maintenance/starboard) @@ -3321,7 +3321,7 @@ icon_state = "5-8" }, /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/techfloor/orange, @@ -4610,7 +4610,7 @@ /obj/structure/railing/corner{ dir = 4 }, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/techfloor/orange{ @@ -4726,7 +4726,7 @@ /obj/structure/window/reinforced/tinted/frosted{ dir = 8 }, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/curtain/cloth/grey, /obj/machinery/light_switch{ dir = 8; @@ -4851,7 +4851,7 @@ /area/ship/crew/canteen) "Dh" = ( /obj/structure/table/wood, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, /turf/open/floor/plasteel, /area/ship/security/prison) "Dj" = ( @@ -5222,7 +5222,7 @@ /obj/item/canvas/twentythreeXtwentythree, /obj/structure/closet/crate/trashcart, /obj/item/paint/anycolor, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/sprayweb, /turf/open/floor/plating, @@ -5644,7 +5644,7 @@ /turf/open/floor/mineral/plastitanium/red/brig, /area/ship/hallway/central) "GZ" = ( -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/maintenance/four, /turf/open/floor/plating, /area/ship/maintenance/fore) "Ha" = ( @@ -5657,7 +5657,7 @@ /obj/structure/railing{ dir = 1 }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/engineering) @@ -5752,7 +5752,7 @@ /obj/structure/railing{ dir = 1 }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/maintenance/starboard) @@ -6434,7 +6434,7 @@ dir = 4 }, /obj/structure/curtain/cloth/grey, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/wood, /area/ship/crew/dorm) "Lt" = ( @@ -6870,7 +6870,7 @@ /obj/structure/railing{ dir = 1 }, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/maintenance/starboard) @@ -7102,7 +7102,7 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/maintenance/starboard) "PC" = ( -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /obj/effect/turf_decal/siding/red{ dir = 4 }, @@ -7467,7 +7467,7 @@ /obj/structure/railing{ dir = 6 }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/maintenance/port) @@ -7713,7 +7713,7 @@ /turf/open/floor/plasteel/patterned/grid, /area/ship/crew/dorm/dormthree) "Ti" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt/dust, /obj/structure/railing{ dir = 9 @@ -7737,7 +7737,7 @@ /obj/structure/railing{ dir = 4 }, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/maintenance/port) @@ -8532,7 +8532,7 @@ /area/ship/engineering/atmospherics) "XY" = ( /obj/structure/table/wood, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/effect/turf_decal/spline/plain/opaque/blue, /turf/open/floor/plasteel, /area/ship/security/prison) diff --git a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm index f50061aaa28f..5d181bcf584c 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm @@ -1137,7 +1137,7 @@ }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /obj/machinery/firealarm/directional/east, -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /obj/effect/decal/cleanable/plasma, /turf/open/floor/plating, /area/ship/maintenance/port) @@ -3923,7 +3923,7 @@ /turf/open/floor/plasteel/dark, /area/ship/hallway/port) "EP" = ( -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "Ff" = ( @@ -4272,7 +4272,7 @@ id = "Ranger_Port_maint_shut"; req_ship_access = 1 }, -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /turf/open/floor/plating, /area/ship/maintenance/port) "Ih" = ( @@ -5558,11 +5558,11 @@ /obj/effect/turf_decal/techfloor{ dir = 5 }, -/obj/effect/spawner/lootdrop/lpaid{ +/obj/effect/spawner/random/lpaid{ pixel_x = 2; pixel_y = -2 }, -/obj/effect/spawner/lootdrop/lpretrieval{ +/obj/effect/spawner/random/lpretrieval{ pixel_x = -10; pixel_y = 10 }, diff --git a/_maps/shuttles/pgf/pgf_crying_sun.dmm b/_maps/shuttles/pgf/pgf_crying_sun.dmm index 933d8f7fbfe0..ca6e86f10345 100644 --- a/_maps/shuttles/pgf/pgf_crying_sun.dmm +++ b/_maps/shuttles/pgf/pgf_crying_sun.dmm @@ -2667,7 +2667,7 @@ /obj/effect/turf_decal/trimline/opaque/bottlegreen/filled/corner{ dir = 8 }, -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /obj/machinery/light/directional/east, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) @@ -2935,7 +2935,7 @@ /obj/effect/turf_decal/trimline/opaque/bottlegreen/filled/line{ dir = 1 }, -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) "zc" = ( @@ -6330,10 +6330,10 @@ /obj/item/storage/ration/vegan_chili, /obj/item/storage/ration/beef_strips, /obj/item/storage/ration/beef_strips, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/storage/cans/sixbeer, /turf/open/floor/plasteel/white, /area/ship/crew/canteen) diff --git a/_maps/shuttles/pirate/pirate_libertatia.dmm b/_maps/shuttles/pirate/pirate_libertatia.dmm index 46d00806edd7..2890fa5ba815 100644 --- a/_maps/shuttles/pirate/pirate_libertatia.dmm +++ b/_maps/shuttles/pirate/pirate_libertatia.dmm @@ -842,8 +842,8 @@ /area/ship/crew) "AL" = ( /obj/structure/table, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /obj/item/radio/intercom/directional/north, /obj/item/lighter{ @@ -876,8 +876,8 @@ /turf/open/floor/plasteel/grimy, /area/ship/crew) "Bw" = ( -/obj/effect/spawner/lootdrop/minor/pirate_or_bandana, -/obj/effect/spawner/lootdrop/minor/pirate_or_bandana, +/obj/effect/spawner/random/clothing/pirate_or_bandana, +/obj/effect/spawner/random/clothing/pirate_or_bandana, /obj/effect/decal/cleanable/dirt/dust, /obj/item/clothing/shoes/jackboots, /obj/item/clothing/shoes/jackboots, @@ -1569,12 +1569,12 @@ name = "food crate" }, /obj/item/storage/cans/sixbeer, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, diff --git a/_maps/shuttles/pirate/pirate_tortuga.dmm b/_maps/shuttles/pirate/pirate_tortuga.dmm index 3e48d25a962c..35387ea53cd5 100644 --- a/_maps/shuttles/pirate/pirate_tortuga.dmm +++ b/_maps/shuttles/pirate/pirate_tortuga.dmm @@ -158,7 +158,7 @@ /turf/open/floor/plating, /area/ship/maintenance/starboard) "bR" = ( -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /turf/open/floor/plating/airless, /area/ship/maintenance) "cb" = ( @@ -555,7 +555,7 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/security/armory) "gG" = ( -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /obj/effect/decal/cleanable/glass, /turf/open/floor/plating/airless, /area/ship/maintenance) @@ -918,7 +918,7 @@ /turf/open/floor/mineral/plastitanium, /area/ship/security/armory) "kp" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -928,7 +928,7 @@ }, /area/ship/maintenance) "kv" = ( -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/airless, /area/ship/maintenance) @@ -942,7 +942,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating/airless, /area/ship/maintenance) "la" = ( @@ -977,7 +977,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/cargo) "li" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/airless, /area/ship/maintenance) @@ -1022,7 +1022,7 @@ /turf/open/floor/mineral/plastitanium, /area/ship/security/armory) "mf" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/structure/cable/yellow{ icon_state = "5-9" }, @@ -1297,8 +1297,8 @@ /turf/open/floor/plasteel, /area/ship/crew/canteen) "oK" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/trash/grille_or_waste, +/obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/airless, /area/ship/maintenance) @@ -1391,7 +1391,7 @@ /turf/closed/wall, /area/ship/crew/canteen) "qi" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/crayon{ icon_state = "med" @@ -1448,7 +1448,7 @@ /obj/structure/cable/yellow{ icon_state = "0-2" }, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/airless{ icon_state = "plating_rust" @@ -1546,7 +1546,7 @@ /turf/open/floor/plasteel, /area/ship/crew/canteen) "ti" = ( -/obj/effect/spawner/lootdrop/donut, +/obj/effect/spawner/random/food_or_drink/donut, /turf/open/floor/plating/airless{ icon_state = "plating_rust" }, @@ -1577,7 +1577,7 @@ dir = 1 }, /obj/structure/curtain/cloth, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/carpet, /area/ship/crew) @@ -1936,7 +1936,7 @@ /turf/open/floor/plasteel, /area/ship/crew/canteen) "yc" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/airless, /area/ship/maintenance) @@ -2051,7 +2051,7 @@ "Ar" = ( /obj/structure/bed, /obj/structure/curtain/cloth, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/carpet, /area/ship/crew) "Av" = ( @@ -2072,7 +2072,7 @@ /turf/open/floor/plasteel, /area/ship/crew) "AG" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating/airless, /area/ship/maintenance) "AQ" = ( @@ -2199,7 +2199,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/airless{ icon_state = "plating_rust" @@ -2233,7 +2233,7 @@ dir = 1 }, /obj/structure/curtain/cloth, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/airalarm/directional/north, /turf/open/floor/carpet, /area/ship/crew) @@ -2255,7 +2255,7 @@ /turf/open/floor/plating/airless, /area/ship/maintenance) "Eb" = ( -/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/spawner/random/trash/decal, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/airless{ icon_state = "plating_rust" @@ -2820,9 +2820,9 @@ /area/ship/crew/canteen) "Lb" = ( /obj/structure/table, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/effect/turf_decal/siding/wideplating{ dir = 5 }, @@ -2998,7 +2998,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/airless{ icon_state = "plating_rust" @@ -3216,7 +3216,7 @@ /turf/open/floor/plasteel/white, /area/ship/crew/canteen) "Pb" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating/airless{ icon_state = "platingdmg1" }, @@ -3309,7 +3309,7 @@ /turf/open/floor/plasteel/mono, /area/ship/cargo) "QM" = ( -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /obj/structure/closet/cardboard, /turf/open/floor/plating/airless, /area/ship/maintenance) @@ -3358,7 +3358,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating/airless{ icon_state = "plating_rust" }, @@ -4044,7 +4044,7 @@ /turf/open/floor/plating, /area/ship/cargo) "YU" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/airless{ icon_state = "plating_rust" diff --git a/_maps/shuttles/solgov/solgov_inkwell.dmm b/_maps/shuttles/solgov/solgov_inkwell.dmm index 0a63ed263799..8ed63dcfac50 100644 --- a/_maps/shuttles/solgov/solgov_inkwell.dmm +++ b/_maps/shuttles/solgov/solgov_inkwell.dmm @@ -2536,7 +2536,7 @@ /obj/effect/turf_decal/industrial/stand_clear{ dir = 1 }, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plasteel/mono, /area/ship/cargo) "qw" = ( @@ -2645,7 +2645,7 @@ /turf/open/floor/plasteel/mono, /area/ship/cargo) "rm" = ( -/obj/effect/spawner/lootdrop/crate_spawner, +/obj/effect/spawner/random/structure/crate_abandoned, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 1 }, @@ -2862,7 +2862,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plasteel/mono, /area/ship/cargo) "sn" = ( @@ -5208,7 +5208,7 @@ /obj/structure/closet/crate, /obj/effect/turf_decal/techfloor, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plasteel/tech/grid, /area/ship/storage) "GN" = ( @@ -5450,7 +5450,7 @@ /turf/open/floor/plasteel/mono, /area/ship/cargo) "IC" = ( -/obj/effect/spawner/lootdrop/crate_spawner, +/obj/effect/spawner/random/structure/crate_abandoned, /obj/machinery/light/small/directional/east, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/tech/grid, @@ -5613,7 +5613,7 @@ dir = 1 }, /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plasteel/mono, /area/ship/cargo) "JN" = ( @@ -6128,7 +6128,7 @@ /area/ship/crew/canteen/kitchen) "Nj" = ( /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plasteel/mono, /area/ship/cargo) "Np" = ( @@ -6776,7 +6776,7 @@ /area/ship/bridge) "RS" = ( /obj/structure/closet/cardboard, -/obj/effect/spawner/lootdrop/maintenance/three, +/obj/effect/spawner/random/maintenance/three, /turf/open/floor/plasteel/mono, /area/ship/cargo) "RX" = ( diff --git a/_maps/shuttles/subshuttles/independent_sugarcube.dmm b/_maps/shuttles/subshuttles/independent_sugarcube.dmm index 0504142f55b3..ad9ef66d3d5d 100644 --- a/_maps/shuttles/subshuttles/independent_sugarcube.dmm +++ b/_maps/shuttles/subshuttles/independent_sugarcube.dmm @@ -56,8 +56,8 @@ /turf/open/floor/plating, /area/ship/engineering) "h" = ( -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/trash/cheesie, /obj/item/trash/cheesie, /obj/item/trash/candy, @@ -259,8 +259,8 @@ /obj/item/circuitboard/machine/autolathe, /obj/item/pickaxe/improvised, /obj/item/pickaxe/improvised, -/obj/effect/spawner/lootdrop/glowstick, -/obj/effect/spawner/lootdrop/glowstick, +/obj/effect/spawner/random/decoration/glowstick, +/obj/effect/spawner/random/decoration/glowstick, /obj/machinery/power/terminal{ dir = 8 }, diff --git a/_maps/shuttles/syndicate/syndicate_cybersun_kansatsu.dmm b/_maps/shuttles/syndicate/syndicate_cybersun_kansatsu.dmm index 253a82277fdf..71019ff4131e 100644 --- a/_maps/shuttles/syndicate/syndicate_cybersun_kansatsu.dmm +++ b/_maps/shuttles/syndicate/syndicate_cybersun_kansatsu.dmm @@ -849,9 +849,9 @@ /obj/structure/railing{ dir = 4 }, -/obj/effect/spawner/lootdrop/maintenance/five, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/random/maintenance/five, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, /obj/item/stack/marker_beacon/thirty, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm index 4aafbcf9dc72..711a9f2033ae 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm @@ -222,12 +222,12 @@ name = "food crate" }, /obj/item/storage/cans/sixbeer, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/effect/turf_decal/industrial/outline, /turf/open/floor/plasteel/mono/dark, /area/ship/cargo) @@ -1284,8 +1284,8 @@ /area/ship/security/armory) "wO" = ( /obj/structure/table, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, /obj/effect/turf_decal/corner/transparent/bar{ dir = 1 }, diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm index fedc993738bd..6b63e3626a88 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm @@ -998,7 +998,7 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "jD" = ( -/obj/effect/spawner/lootdrop/salvage_capacitor, +/obj/effect/spawner/random/salvage_capacitor, /obj/effect/decal/cleanable/shreds, /obj/structure/cable{ icon_state = "4-8" @@ -1461,7 +1461,7 @@ dir = 9 }, /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/effect/turf_decal/box, /obj/machinery/camera/autoname{ dir = 10 @@ -2009,7 +2009,7 @@ dir = 4 }, /obj/machinery/light/dim/directional/north, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) "sV" = ( @@ -2058,9 +2058,9 @@ dir = 10 }, /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/costume, +/obj/effect/spawner/random/clothing/costume, /obj/item/storage/box/emptysandbags, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /obj/machinery/button/door{ dir = 4; id = "syndie_mechbay"; @@ -3151,22 +3151,14 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 }, -/obj/effect/spawner/lootdrop/ration{ - pixel_x = -6 - }, -/obj/effect/spawner/lootdrop/ration{ - pixel_x = -6 - }, -/obj/effect/spawner/lootdrop/ration{ - pixel_x = -6 - }, -/obj/effect/spawner/lootdrop/ration{ - pixel_x = -6 - }, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/machinery/airalarm/directional/south, /turf/open/floor/mineral/plastitanium, /area/ship/hallway/aft) @@ -3257,7 +3249,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "FV" = ( -/obj/effect/spawner/lootdrop/salvage_scanning, +/obj/effect/spawner/random/salvage_scanning, /obj/effect/decal/cleanable/shreds{ pixel_y = 14 }, @@ -3884,10 +3876,10 @@ /obj/structure/table/reinforced, /obj/item/hemostat, /obj/machinery/light/directional/west, -/obj/effect/spawner/lootdrop/random_prosthetic{ +/obj/effect/spawner/random/medical/prosthetic{ pixel_x = 6 }, -/obj/effect/spawner/lootdrop/random_prosthetic{ +/obj/effect/spawner/random/medical/prosthetic{ pixel_x = -6 }, /turf/open/floor/pod/dark, @@ -4460,7 +4452,7 @@ /obj/structure/railing{ dir = 8 }, -/obj/effect/spawner/lootdrop/salvage_manipulator, +/obj/effect/spawner/random/salvage_manipulator, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/industrial/warning{ dir = 1 @@ -5348,7 +5340,7 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering) "YT" = ( -/obj/effect/spawner/lootdrop/salvage_manipulator, +/obj/effect/spawner/random/salvage_manipulator, /obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable{ icon_state = "4-8" @@ -5431,7 +5423,7 @@ }, /area/ship/cargo) "Zf" = ( -/obj/effect/spawner/lootdrop/salvage_matter_bin, +/obj/effect/spawner/random/salvage_matter_bin, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/industrial/warning{ @@ -5447,7 +5439,7 @@ /obj/effect/turf_decal/techfloor{ dir = 8 }, -/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/spawner/random/maintenance/two, /obj/machinery/button/door{ dir = 1; id = "Artillery2shutter"; diff --git a/_maps/shuttles/syndicate/syndicate_litieguai.dmm b/_maps/shuttles/syndicate/syndicate_litieguai.dmm index 2b12f177f57e..750f3016b14e 100644 --- a/_maps/shuttles/syndicate/syndicate_litieguai.dmm +++ b/_maps/shuttles/syndicate/syndicate_litieguai.dmm @@ -266,7 +266,7 @@ /turf/open/floor/plasteel/patterned/brushed, /area/ship/medical) "fX" = ( -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /obj/effect/turf_decal/trimline/opaque/red/filled/line{ dir = 8 }, @@ -397,8 +397,8 @@ /area/ship/crew) "jh" = ( /obj/structure/table, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /obj/item/radio/intercom/directional/west, /turf/open/floor/wood/ebony, /area/ship/crew) @@ -538,7 +538,7 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/maintenance/port) "na" = ( -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /obj/effect/turf_decal/trimline/opaque/red/filled/line{ dir = 8 }, diff --git a/_maps/shuttles/syndicate/syndicate_panacea.dmm b/_maps/shuttles/syndicate/syndicate_panacea.dmm index 3d26ff6512b5..875d5806131c 100644 --- a/_maps/shuttles/syndicate/syndicate_panacea.dmm +++ b/_maps/shuttles/syndicate/syndicate_panacea.dmm @@ -47,7 +47,7 @@ /turf/open/floor/plasteel/sepia, /area/ship/crew/ccommons) "az" = ( -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /turf/open/floor/suns/diagonal{ color = "#543C30" }, @@ -7126,7 +7126,7 @@ /turf/open/floor/carpet/red, /area/ship/crew/dorm/dormtwo) "Qi" = ( -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /turf/open/floor/suns/diagonal{ color = "#543C30" }, @@ -8163,7 +8163,7 @@ /area/ship/engineering) "Wr" = ( /obj/machinery/light/directional/north, -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /turf/open/floor/suns/dark/plain, /area/ship/crew/ccommons) "Wu" = ( diff --git a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm index 9b789add9c3e..f52d41d021c3 100644 --- a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm +++ b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm @@ -272,7 +272,7 @@ "bR" = ( /obj/effect/turf_decal/corner/opaque/syndiered/three_quarters, /obj/machinery/light/directional/south, -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /obj/effect/turf_decal/borderfloorblack{ dir = 1 }, @@ -358,7 +358,7 @@ /area/ship/medical) "cp" = ( /obj/structure/closet/emcloset, -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/maintenance/four, /obj/item/trash/syndi_cakes, /turf/open/floor/plating, /area/ship/engineering/atmospherics) @@ -815,7 +815,7 @@ /turf/open/floor/plasteel/dark, /area/ship/security) "eQ" = ( -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random/maintenance, /turf/open/floor/pod/dark, /area/ship/engineering/atmospherics) "eR" = ( @@ -3005,8 +3005,8 @@ /obj/item/storage/box/ingredients/vegetarian, /obj/item/reagent_containers/condiment/milk, /obj/item/reagent_containers/condiment/milk, -/obj/effect/spawner/lootdrop/donkpockets, -/obj/effect/spawner/lootdrop/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets, /turf/open/floor/carpet/red, /area/ship/crew/canteen) "qQ" = ( @@ -5820,7 +5820,7 @@ dir = 8 }, /obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance/eight, +/obj/effect/spawner/random/maintenance/eight, /obj/item/circuitboard/machine/autolathe, /obj/item/stock_parts/manipulator, /obj/item/stock_parts/matter_bin, @@ -6329,7 +6329,7 @@ dir = 8 }, /obj/machinery/light/directional/north, -/obj/machinery/vending/cola/random, +/obj/effect/spawner/random/vending/cola, /obj/effect/turf_decal/borderfloorblack/corner{ dir = 8 }, @@ -7487,7 +7487,7 @@ icon_state = "2-8" }, /obj/structure/closet/emcloset, -/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/random/maintenance/four, /obj/item/reagent_containers/food/snacks/burger/red{ name = "suspicious red burger"; desc = "A suspicious looking burger."; @@ -8597,9 +8597,9 @@ "Xf" = ( /obj/structure/table/wood, /obj/machinery/door/firedoor/border_only, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, +/obj/effect/spawner/random/food_or_drink/ration, /turf/open/floor/carpet/red, /area/ship/crew/canteen) "Xg" = ( diff --git a/_maps/templates/shelter_2.dmm b/_maps/templates/shelter_2.dmm index c12d8dd837da..6a076e34555b 100644 --- a/_maps/templates/shelter_2.dmm +++ b/_maps/templates/shelter_2.dmm @@ -161,7 +161,7 @@ pixel_x = 7; pixel_y = 2 }, -/obj/effect/spawner/lootdrop/three_course_meal, +/obj/effect/spawner/random/food_or_drink/three_course_meal, /turf/open/floor/carpet/black, /area/survivalpod) "y" = ( diff --git a/_maps/templates/shelter_3.dmm b/_maps/templates/shelter_3.dmm index 570483a06a1d..56743e38b0f7 100644 --- a/_maps/templates/shelter_3.dmm +++ b/_maps/templates/shelter_3.dmm @@ -225,7 +225,7 @@ /turf/open/floor/carpet/black, /area/survivalpod) "L" = ( -/obj/machinery/vending/snack/random, +/obj/effect/spawner/random/vending/snack, /turf/open/floor/carpet/black, /area/survivalpod) "M" = ( diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index b231b4e944c9..776014c4dfb5 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -261,43 +261,99 @@ result = first ^ second return result -//Picks a random element from a list based on a weighting system: -//1. Adds up the total of weights for each element -//2. Gets a number between 1 and that total -//3. For each element in the list, subtracts its weighting from that number -//4. If that makes the number 0 or less, return that element. -/proc/pickweight(list/L) +/** + * Picks a random element from a list based on a weighting system: + * 1. Adds up the total of weights for each element + * 2. Gets a number between 1 and that total + * 3. For each element in the list, subtracts its weighting from that number + * 4. If that makes the number 0 or less, return that element. + * Will output null sometimes if you use decimals (e.g. 0.1 instead of 10) as rand() uses integers, not floats +**/ +/proc/pick_weight(list/list_to_pick) var/total = 0 var/item - for (item in L) - if (!L[item]) - L[item] = 1 - total += L[item] + for(item in list_to_pick) + if(!list_to_pick[item]) + list_to_pick[item] = 1 + total += list_to_pick[item] total = rand(1, total) - for (item in L) - total -=L [item] - if (total <= 0) + for(item in list_to_pick) + total -= list_to_pick[item] + if(total <= 0) return item return null -/proc/pickweightAllowZero(list/L) //The original pickweight proc will sometimes pick entries with zero weight. I'm not sure if changing the original will break anything, so I left it be. +/** + * Picks a random element from a list based on a weighting system. + * For example, given the following list: + * A = 6, B = 3, C = 1, D = 0 + * A would have a 60% chance of being picked, + * B would have a 30% chance of being picked, + * C would have a 10% chance of being picked, + * and D would have a 0% chance of being picked. + * You should only pass integers in. + */ +/proc/pick_weight_allow_zero(list/list_to_pick) //The original pick_weight proc will sometimes pick entries with zero weight. I'm not sure if changing the original will break anything, so I left it be. + if(length(list_to_pick) == 0) + return null + var/total = 0 - var/item - for (item in L) - if (!L[item]) - L[item] = 0 - total += L[item] + for(var/item in list_to_pick) + if(!list_to_pick[item]) + list_to_pick[item] = 0 + total += list_to_pick[item] - total = rand(0, total) - for (item in L) - total -=L [item] - if (total <= 0 && L[item]) + total = rand(1, total) + for(var/item in list_to_pick) + var/item_weight = list_to_pick[item] + if(item_weight == 0) + continue + + total -= item_weight + if(total <= 0) return item return null +/** + * Like pick_weight, but allowing for nested lists. + * + * For example, given the following list: + * list(A = 1, list(B = 1, C = 1)) + * A would have a 50% chance of being picked, + * and list(B, C) would have a 50% chance of being picked. + * If list(B, C) was picked, B and C would then each have a 50% chance of being picked. + * So the final probabilities would be 50% for A, 25% for B, and 25% for C. + * + * Weights should be integers. Entries without weights are assigned weight 1 (so unweighted lists can be used as well) + */ +/proc/pick_weight_recursive(list/list_to_pick) + var/result = pick_weight(fill_with_ones(list_to_pick)) + while(islist(result)) + result = pick_weight(fill_with_ones(result)) + return result + +/** + * Given a list, return a copy where values without defined weights are given weight 1. + * For example, fill_with_ones(list(A, B=2, C)) = list(A=1, B=2, C=1) + * Useful for weighted random choices (loot tables, syllables in languages, etc.) + */ +/proc/fill_with_ones(list/list_to_pad) + if (!islist(list_to_pad)) + return list_to_pad + + var/list/final_list = list() + + for (var/key in list_to_pad) + if (list_to_pad[key]) + final_list[key] = list_to_pad[key] + else + final_list[key] = 1 + + return final_list + /// Takes a weighted list (see above) and expands it into raw entries /// This eats more memory, but saves time when actually picking from it /proc/expand_weights(list/list_to_pick) diff --git a/code/__HELPERS/_string_lists.dm b/code/__HELPERS/_string_lists.dm index cdbee26f9ba7..5dab48761ecc 100644 --- a/code/__HELPERS/_string_lists.dm +++ b/code/__HELPERS/_string_lists.dm @@ -1,5 +1,5 @@ #define pick_list(FILE, KEY) (pick(strings(FILE, KEY))) -#define pick_list_weighted(FILE, KEY) (pickweight(strings(FILE, KEY))) +#define pick_list_weighted(FILE, KEY) (pick_weight(strings(FILE, KEY))) #define pick_list_replacements(FILE, KEY) (strings_replacement(FILE, KEY)) #define json_load(FILE) (json_decode(file2text(FILE))) diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index 15fbf39c6e24..505734d6cd5d 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -92,7 +92,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items /obj/item/clothing/suit/toggle/labcoat = 1, /obj/item/clothing/under/color/grey = 1, /obj/item/clothing/gloves/color/fyellow = 1, - /obj/effect/spawner/lootdrop/gloves = 1, + /obj/effect/spawner/random/clothing/gloves = 1, /obj/item/storage/wallet/random = 1, /obj/item/clothing/glasses/science = 1, /obj/item/clothing/glasses/meson = 1, @@ -148,7 +148,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items //light sources /obj/item/flashlight = 1, - /obj/effect/spawner/lootdrop/glowstick = 1, + /obj/effect/spawner/random/decoration/glowstick = 1, /obj/item/clothing/head/hardhat/red = 1, /obj/item/flashlight/flare = 1, ) = 1, @@ -233,7 +233,7 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items /obj/item/storage/box/donkpockets/donkpockethonk = 1, ) = 1, /obj/item/reagent_containers/food/snacks/monkeycube = 1, - /obj/effect/spawner/lootdrop/ration = 1, + /obj/effect/spawner/random/food_or_drink/ration = 1, ) = 8, list(//fakeout items, keep this list at low relative weight diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index ac7298dc100d..37256f9ce833 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -431,3 +431,13 @@ max_val = 255 config_entry_value = 127 min_val = 127 + +/** + * A config that skews with the random spawners weights + * If the value is lower than 1, it'll tend to even out the odds + * If higher than 1, it'll lean toward common spawns even more. + */ +/datum/config_entry/number/random_loot_weight_modifier + integer = FALSE + default = 1 + min_val = 0.05 diff --git a/code/controllers/subsystem/overmap.dm b/code/controllers/subsystem/overmap.dm index 113bfefa7a52..dd5515397277 100644 --- a/code/controllers/subsystem/overmap.dm +++ b/code/controllers/subsystem/overmap.dm @@ -154,7 +154,7 @@ SUBSYSTEM_DEF(overmap) return if(!length(orbits)) break // Can't fit any more in - var/event_type = pickweight(GLOB.overmap_event_pick_list) + var/event_type = pick_weight(GLOB.overmap_event_pick_list) var/selected_orbit = pick(orbits) var/list/T = get_unused_overmap_square_in_radius(selected_orbit) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 5ca963c53472..7f0e9c8ee627 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -225,7 +225,7 @@ SUBSYSTEM_DEF(ticker) if(!runnable_modes.len) to_chat(world, "Unable to choose playable game mode. Reverting to pre-game lobby.") return 0 - mode = pickweight(runnable_modes) + mode = pick_weight(runnable_modes) if(!mode) //too few roundtypes all run too recently mode = pick(runnable_modes) diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index acaa03d3ff7a..148bf17ed210 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -264,7 +264,7 @@ var/datum/ai_laws/lawtype var/list/law_weights = CONFIG_GET(keyed_list/law_weight) while(!lawtype && law_weights.len) - var/possible_id = pickweightAllowZero(law_weights) + var/possible_id = pick_weight_allow_zero(law_weights) lawtype = lawid_to_type(possible_id) if(!lawtype) law_weights -= possible_id @@ -331,7 +331,7 @@ replaceable_groups[LAW_INHERENT] = inherent.len if(supplied.len && (LAW_SUPPLIED in groups)) replaceable_groups[LAW_SUPPLIED] = supplied.len - var/picked_group = pickweight(replaceable_groups) + var/picked_group = pick_weight(replaceable_groups) switch(picked_group) if(LAW_ZEROTH) . = zeroth diff --git a/code/datums/components/fantasy/_fantasy.dm b/code/datums/components/fantasy/_fantasy.dm index 92bd0868a746..6941f6c169b4 100644 --- a/code/datums/components/fantasy/_fantasy.dm +++ b/code/datums/components/fantasy/_fantasy.dm @@ -75,7 +75,7 @@ var/usedSlots = NONE for(var/i in 1 to max(1, abs(quality))) // We want at least 1 affix applied - var/datum/fantasy_affix/affix = pickweight(affixListing) + var/datum/fantasy_affix/affix = pick_weight(affixListing) if(affix.placement & usedSlots) continue if(!(affix.alignment & alignment)) diff --git a/code/datums/components/fantasy/suffixes.dm b/code/datums/components/fantasy/suffixes.dm index 8cabee42d21c..7035c143ae4f 100644 --- a/code/datums/components/fantasy/suffixes.dm +++ b/code/datums/components/fantasy/suffixes.dm @@ -138,7 +138,7 @@ /obj/projectile/beam/disabler = 15 ) - var/obj/projectile/picked_projectiletype = pickweight(weighted_projectile_types) + var/obj/projectile/picked_projectiletype = pick_weight(weighted_projectile_types) var/obj/item/master = comp.parent comp.appliedComponents += master.AddComponent(/datum/component/mirv, picked_projectiletype) diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm index 1307d5d0ec8e..7f4b8b50229e 100644 --- a/code/datums/components/squeak.dm +++ b/code/datums/components/squeak.dm @@ -67,9 +67,9 @@ if(prob(squeak_chance)) if(!override_squeak_sounds) - playsound(parent, pickweight(default_squeak_sounds), volume, TRUE, sound_extra_range, sound_falloff_exponent, falloff_distance = sound_falloff_distance) + playsound(parent, pick_weight(default_squeak_sounds), volume, TRUE, sound_extra_range, sound_falloff_exponent, falloff_distance = sound_falloff_distance) else - playsound(parent, pickweight(override_squeak_sounds), volume, TRUE, sound_extra_range, sound_falloff_exponent, falloff_distance = sound_falloff_distance) + playsound(parent, pick_weight(override_squeak_sounds), volume, TRUE, sound_extra_range, sound_falloff_exponent, falloff_distance = sound_falloff_distance) /datum/component/squeak/proc/step_squeak() SIGNAL_HANDLER diff --git a/code/datums/looping_sounds/_looping_sound.dm b/code/datums/looping_sounds/_looping_sound.dm index bb7a33846a34..f88e594e3fc7 100644 --- a/code/datums/looping_sounds/_looping_sound.dm +++ b/code/datums/looping_sounds/_looping_sound.dm @@ -100,7 +100,7 @@ /datum/looping_sound/proc/get_sound(starttime, _mid_sounds) . = _mid_sounds || mid_sounds while(!isfile(.) && !isnull(.)) - . = pickweight(.) + . = pick_weight(.) /datum/looping_sound/proc/on_start() var/start_wait = 0 diff --git a/code/datums/mapgen/planetary/JungleGenerator.dm b/code/datums/mapgen/planetary/JungleGenerator.dm index 077065c8e44e..f64e47504957 100644 --- a/code/datums/mapgen/planetary/JungleGenerator.dm +++ b/code/datums/mapgen/planetary/JungleGenerator.dm @@ -100,7 +100,7 @@ mob_spawn_list = list( /mob/living/carbon/monkey = 10, /mob/living/simple_animal/hostile/retaliate/chicken = 10, - /obj/effect/spawner/lootdrop/chicken/jungle/flock = 1 + /obj/effect/spawner/random/chicken/jungle/flock = 1 ) /datum/biome/jungle/dense @@ -123,7 +123,7 @@ /mob/living/simple_animal/hostile/gorilla = 1, /mob/living/carbon/monkey = 6, /mob/living/simple_animal/hostile/retaliate/chicken = 4, - /obj/effect/spawner/lootdrop/chicken/jungle/flock = 1 + /obj/effect/spawner/random/chicken/jungle/flock = 1 ) /datum/biome/jungle/plains @@ -181,7 +181,7 @@ feature_spawn_list = list( /obj/item/pickaxe/rusted = 1, /obj/structure/spawner/burrow/jungle_planet = 1, - /obj/effect/spawner/lootdrop/anomaly/jungle = 1 + /obj/effect/spawner/random/anomaly/jungle = 1 ) /datum/biome/cave/jungle/dirt diff --git a/code/datums/mapgen/planetary/LavaGenerator.dm b/code/datums/mapgen/planetary/LavaGenerator.dm index bca54d019397..846d4145a66c 100644 --- a/code/datums/mapgen/planetary/LavaGenerator.dm +++ b/code/datums/mapgen/planetary/LavaGenerator.dm @@ -100,7 +100,7 @@ /obj/structure/flora/rock/hell = 20, /obj/structure/elite_tumor = 4, /obj/structure/geyser/random = 4, - /obj/effect/spawner/lootdrop/anomaly/lava = 2, + /obj/effect/spawner/random/anomaly/lava = 2, /obj/structure/flora/rock/hell = 14, /obj/structure/vein = 5, /obj/structure/vein/classtwo = 2, @@ -108,7 +108,7 @@ /obj/structure/geyser/random = 2, /obj/structure/vein/classthree = 1, /obj/effect/spawner/minefield = 1, - /obj/effect/spawner/lootdrop/anomaly/lava = 1, + /obj/effect/spawner/random/anomaly/lava = 1, ) mob_spawn_chance = 4 mob_spawn_list = list( @@ -167,7 +167,7 @@ feature_spawn_list = list( /obj/structure/flora/tree/dead/barren = 50, /obj/structure/flora/tree/dead/tall/grey = 45, - /obj/effect/spawner/lootdrop/anomaly/lava = 10, + /obj/effect/spawner/random/anomaly/lava = 10, /obj/structure/vein = 5, /obj/structure/vein/classtwo = 2, /obj/structure/vein/classthree = 1, diff --git a/code/datums/mapgen/planetary/RockGenerator.dm b/code/datums/mapgen/planetary/RockGenerator.dm index 30349a2ea53b..b7ab59f5d843 100644 --- a/code/datums/mapgen/planetary/RockGenerator.dm +++ b/code/datums/mapgen/planetary/RockGenerator.dm @@ -89,10 +89,10 @@ /obj/structure/vein = 60, /obj/structure/elite_tumor = 40, /obj/structure/vein/classtwo = 40, - /obj/effect/spawner/lootdrop/anomaly/rock = 10, + /obj/effect/spawner/random/anomaly/rock = 10, /obj/structure/vein/classthree = 10, /obj/effect/spawner/minefield = 2, - /obj/effect/spawner/lootdrop/anomaly/big = 1 //get out of here stalker + /obj/effect/spawner/random/anomaly/big = 1 //get out of here stalker ) flora_spawn_chance = 5 @@ -162,7 +162,7 @@ /obj/structure/vein/classthree = 1, /obj/structure/spawner/burrow/rock_plant = 4, /obj/effect/spawner/minefield = 1, - /obj/effect/spawner/lootdrop/anomaly/rock/cave = 1, + /obj/effect/spawner/random/anomaly/rock/cave = 1, ) mob_spawn_chance = 6 mob_spawn_list = list( diff --git a/code/datums/mapgen/planetary/SandGenerator.dm b/code/datums/mapgen/planetary/SandGenerator.dm index e285f5b1ac6c..37615a6b961e 100644 --- a/code/datums/mapgen/planetary/SandGenerator.dm +++ b/code/datums/mapgen/planetary/SandGenerator.dm @@ -96,7 +96,7 @@ /obj/structure/vein/classtwo = 4, /obj/structure/elite_tumor = 4, /obj/structure/vein/classthree = 2, - /obj/effect/spawner/lootdrop/anomaly/sand = 1, + /obj/effect/spawner/random/anomaly/sand = 1, ) mob_spawn_chance = 4 mob_spawn_list = list( @@ -120,7 +120,7 @@ /obj/structure/flora/ash/cap_shroom = 4, /obj/structure/flora/ash/stem_shroom = 4, /obj/effect/decal/remains/human = 4, - /obj/effect/spawner/lootdrop/maintenance = 40, + /obj/effect/spawner/random/maintenance = 40, ) /datum/biome/sand/grass @@ -199,7 +199,7 @@ /obj/structure/geyser/random = 4, /obj/structure/vein/classtwo = 4, /obj/structure/elite_tumor = 4, - /obj/effect/spawner/lootdrop/anomaly/sand/cave = 1 + /obj/effect/spawner/random/anomaly/sand/cave = 1 ) mob_spawn_chance = 4 mob_spawn_list = list( diff --git a/code/datums/mapgen/planetary/SnowGenerator.dm b/code/datums/mapgen/planetary/SnowGenerator.dm index 7fddcd176c66..4297f8a50f2c 100644 --- a/code/datums/mapgen/planetary/SnowGenerator.dm +++ b/code/datums/mapgen/planetary/SnowGenerator.dm @@ -112,8 +112,8 @@ ) feature_spawn_chance = 0.1 feature_spawn_list = list( - /obj/effect/spawner/lootdrop/anomaly/ice = 12, - /obj/effect/spawner/lootdrop/anomaly/big = 1, + /obj/effect/spawner/random/anomaly/ice = 12, + /obj/effect/spawner/random/anomaly/big = 1, /obj/structure/spawner/burrow/ice_planet = 80, /obj/structure/vein/ice = 25, /obj/effect/spawner/minefield = 2, @@ -212,8 +212,8 @@ ) feature_spawn_chance = 0.3 feature_spawn_list = list( - /obj/effect/spawner/lootdrop/anomaly/ice = 100, - /obj/effect/spawner/lootdrop/anomaly/big = 1, + /obj/effect/spawner/random/anomaly/ice = 100, + /obj/effect/spawner/random/anomaly/big = 1, /obj/structure/spawner/burrow/ice_planet/hard = 600, /obj/structure/vein/ice = 300, /obj/structure/vein/ice/classtwo = 500, @@ -268,7 +268,7 @@ feature_spawn_list = list( /obj/structure/spawner/burrow/ice_planet = 60, /obj/structure/spawner/burrow/ice_planet = 40, - /obj/effect/spawner/lootdrop/anomaly/ice/cave = 10, + /obj/effect/spawner/random/anomaly/ice/cave = 10, /obj/structure/vein/ice = 30, /obj/structure/vein/ice/classtwo = 50, /obj/structure/vein/ice/classthree = 6, diff --git a/code/datums/mapgen/planetary/WasteGenerator.dm b/code/datums/mapgen/planetary/WasteGenerator.dm index 621d5e3b9c4d..3f87e6879c1b 100644 --- a/code/datums/mapgen/planetary/WasteGenerator.dm +++ b/code/datums/mapgen/planetary/WasteGenerator.dm @@ -96,27 +96,27 @@ flora_spawn_list = list( //mech spawners - /obj/effect/spawner/lootdrop/waste/mechwreck = 100, - /obj/effect/spawner/lootdrop/waste/mechwreck/rare = 20, + /obj/effect/spawner/random/waste/mechwreck = 100, + /obj/effect/spawner/random/waste/mechwreck/rare = 20, //decals and fluff structures - /obj/effect/spawner/lootdrop/waste/trash = 1800, - /obj/effect/spawner/lootdrop/waste/radiation = 80, - /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 10, + /obj/effect/spawner/random/trash/decal = 1800, + /obj/effect/spawner/random/waste/radiation = 80, + /obj/effect/spawner/random/waste/radiation/more_rads = 10, //stuff you can actually use - /obj/effect/spawner/lootdrop/waste/girder = 600, + /obj/effect/spawner/random/waste/girder = 600, /obj/structure/reagent_dispensers/watertank = 200, /obj/item/stack/cable_coil/cut = 500, /obj/structure/closet/crate/secure/loot = 30, - /obj/effect/spawner/lootdrop/waste/atmos_can = 50, - /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 1, - /obj/effect/spawner/lootdrop/waste/salvageable = 300, - /obj/effect/spawner/lootdrop/waste/grille_or_trash = 200, - /obj/effect/spawner/lootdrop/maintenance = 200, - /obj/effect/spawner/lootdrop/maintenance/two = 100, - /obj/effect/spawner/lootdrop/maintenance/three = 50, - /obj/effect/spawner/lootdrop/maintenance/four = 20, + /obj/effect/spawner/random/waste/atmos_can = 50, + /obj/effect/spawner/random/waste/atmos_can/rare = 1, + /obj/effect/spawner/random/waste/salvageable = 300, + /obj/effect/spawner/random/waste/grille_or_trash = 200, + /obj/effect/spawner/random/maintenance = 200, + /obj/effect/spawner/random/maintenance/two = 100, + /obj/effect/spawner/random/maintenance/three = 50, + /obj/effect/spawner/random/maintenance/four = 20, //plants /obj/structure/flora/ash/garden/waste = 70, @@ -125,7 +125,7 @@ //the illusive shrapnel plant /obj/item/mine/pressure/explosive/shrapnel/live = 30, - /obj/effect/spawner/lootdrop/mine = 8, + /obj/effect/spawner/random/mine = 8, /obj/effect/spawner/minefield = 2 ) @@ -133,7 +133,7 @@ /obj/effect/radiation/waste = 30, /obj/effect/radiation/waste/intense = 10, /obj/structure/geyser/random = 1, - /obj/effect/spawner/lootdrop/anomaly/waste = 1 + /obj/effect/spawner/random/anomaly/waste = 1 ) mob_spawn_list = list( @@ -159,23 +159,23 @@ ) flora_spawn_list = list( - /obj/effect/spawner/lootdrop/waste/trash = 180, - /obj/effect/spawner/lootdrop/waste/radiation = 16, - /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 2, - /obj/effect/spawner/lootdrop/waste/atmos_can = 36, - /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 1, - /obj/effect/spawner/lootdrop/waste/salvageable = 60, + /obj/effect/spawner/random/trash/decal = 180, + /obj/effect/spawner/random/waste/radiation = 16, + /obj/effect/spawner/random/waste/radiation/more_rads = 2, + /obj/effect/spawner/random/waste/atmos_can = 36, + /obj/effect/spawner/random/waste/atmos_can/rare = 1, + /obj/effect/spawner/random/waste/salvageable = 60, ) mob_spawn_chance = 1 /datum/biome/waste/crater/rad flora_spawn_list = list( /obj/structure/flora/ash/glowshroom = 180, - /obj/effect/spawner/lootdrop/waste/trash = 90, - /obj/effect/spawner/lootdrop/waste/radiation = 25, - /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 7, - /obj/effect/spawner/lootdrop/waste/atmos_can = 7, - /obj/effect/spawner/lootdrop/waste/salvageable = 15 + /obj/effect/spawner/random/trash/decal = 90, + /obj/effect/spawner/random/waste/radiation = 25, + /obj/effect/spawner/random/waste/radiation/more_rads = 7, + /obj/effect/spawner/random/waste/atmos_can = 7, + /obj/effect/spawner/random/waste/salvageable = 15 ) /datum/biome/waste/clearing @@ -184,26 +184,26 @@ /datum/biome/waste/clearing/mushroom flora_spawn_list = list( - /obj/effect/spawner/lootdrop/waste/mechwreck = 100, - /obj/effect/spawner/lootdrop/waste/trash = 900, - /obj/effect/spawner/lootdrop/waste/radiation = 300, - /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 120, - /obj/effect/spawner/lootdrop/waste/girder = 600, + /obj/effect/spawner/random/waste/mechwreck = 100, + /obj/effect/spawner/random/trash/decal = 900, + /obj/effect/spawner/random/waste/radiation = 300, + /obj/effect/spawner/random/waste/radiation/more_rads = 120, + /obj/effect/spawner/random/waste/girder = 600, /obj/structure/reagent_dispensers/watertank = 200, /obj/item/stack/cable_coil/cut = 500, /obj/structure/closet/crate/secure/loot = 30, - /obj/effect/spawner/lootdrop/waste/atmos_can = 50, - /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 1, - /obj/effect/spawner/lootdrop/waste/salvageable = 300, - /obj/effect/spawner/lootdrop/waste/grille_or_trash = 200, - /obj/effect/spawner/lootdrop/maintenance = 200, - /obj/effect/spawner/lootdrop/maintenance/two = 100, - /obj/effect/spawner/lootdrop/maintenance/three = 50, - /obj/effect/spawner/lootdrop/maintenance/four = 20, + /obj/effect/spawner/random/waste/atmos_can = 50, + /obj/effect/spawner/random/waste/atmos_can/rare = 1, + /obj/effect/spawner/random/waste/salvageable = 300, + /obj/effect/spawner/random/waste/grille_or_trash = 200, + /obj/effect/spawner/random/maintenance = 200, + /obj/effect/spawner/random/maintenance/two = 100, + /obj/effect/spawner/random/maintenance/three = 50, + /obj/effect/spawner/random/maintenance/four = 20, /obj/structure/flora/ash/garden/waste = 300, /obj/structure/flora/ash/glowshroom = 1800, /obj/item/mine/pressure/explosive/shrapnel/live = 30, - /obj/effect/spawner/lootdrop/mine = 8, + /obj/effect/spawner/random/mine = 8, /obj/effect/spawner/minefield = 2 ) @@ -227,29 +227,29 @@ ) flora_spawn_list = list( //there are no plants here - /obj/effect/spawner/lootdrop/waste/mechwreck = 200, - /obj/effect/spawner/lootdrop/waste/mechwreck/rare = 50, - /obj/effect/spawner/lootdrop/waste/trash = 900, - /obj/effect/spawner/lootdrop/waste/radiation = 80, - /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 20, - /obj/effect/spawner/lootdrop/waste/girder = 600, + /obj/effect/spawner/random/waste/mechwreck = 200, + /obj/effect/spawner/random/waste/mechwreck/rare = 50, + /obj/effect/spawner/random/trash/decal = 900, + /obj/effect/spawner/random/waste/radiation = 80, + /obj/effect/spawner/random/waste/radiation/more_rads = 20, + /obj/effect/spawner/random/waste/girder = 600, /obj/structure/reagent_dispensers/watertank = 200, /obj/item/stack/cable_coil/cut = 500, /obj/structure/closet/crate/secure/loot = 30, - /obj/effect/spawner/lootdrop/waste/atmos_can = 50, - /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 1, - /obj/effect/spawner/lootdrop/waste/salvageable = 300, - /obj/effect/spawner/lootdrop/waste/grille_or_trash = 200, - /obj/effect/spawner/lootdrop/maintenance = 200, - /obj/effect/spawner/lootdrop/maintenance/two = 100, - /obj/effect/spawner/lootdrop/maintenance/three = 50, - /obj/effect/spawner/lootdrop/maintenance/four = 20, + /obj/effect/spawner/random/waste/atmos_can = 50, + /obj/effect/spawner/random/waste/atmos_can/rare = 1, + /obj/effect/spawner/random/waste/salvageable = 300, + /obj/effect/spawner/random/waste/grille_or_trash = 200, + /obj/effect/spawner/random/maintenance = 200, + /obj/effect/spawner/random/maintenance/two = 100, + /obj/effect/spawner/random/maintenance/three = 50, + /obj/effect/spawner/random/maintenance/four = 20, /obj/structure/closet/crate/secure/loot = 30, - /obj/effect/spawner/lootdrop/waste/atmos_can = 180, - /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 1, - /obj/effect/spawner/lootdrop/waste/salvageable = 300, + /obj/effect/spawner/random/waste/atmos_can = 180, + /obj/effect/spawner/random/waste/atmos_can/rare = 1, + /obj/effect/spawner/random/waste/salvageable = 300, /obj/item/mine/pressure/explosive/rad/live = 30, - /obj/effect/spawner/lootdrop/mine = 8, + /obj/effect/spawner/random/mine = 8, /obj/effect/spawner/minefield = 2 ) mob_spawn_list = list( //nor organics, more biased towards hivebots though @@ -288,28 +288,28 @@ ) flora_spawn_list = list( - /obj/effect/spawner/lootdrop/waste/mechwreck = 100, - /obj/effect/spawner/lootdrop/waste/mechwreck/rare = 20, - /obj/effect/spawner/lootdrop/waste/trash = 1800, - /obj/effect/spawner/lootdrop/waste/radiation = 80, - /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 10, - /obj/effect/spawner/lootdrop/waste/girder = 600, + /obj/effect/spawner/random/waste/mechwreck = 100, + /obj/effect/spawner/random/waste/mechwreck/rare = 20, + /obj/effect/spawner/random/trash/decal = 1800, + /obj/effect/spawner/random/waste/radiation = 80, + /obj/effect/spawner/random/waste/radiation/more_rads = 10, + /obj/effect/spawner/random/waste/girder = 600, /obj/structure/reagent_dispensers/watertank = 200, /obj/item/stack/cable_coil/cut = 500, /obj/structure/closet/crate/secure/loot = 30, - /obj/effect/spawner/lootdrop/waste/atmos_can = 50, - /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 5, - /obj/effect/spawner/lootdrop/waste/salvageable = 300, - /obj/effect/spawner/lootdrop/waste/grille_or_trash = 200, - /obj/effect/spawner/lootdrop/maintenance = 20, - /obj/effect/spawner/lootdrop/maintenance/two = 50, - /obj/effect/spawner/lootdrop/maintenance/three = 100, - /obj/effect/spawner/lootdrop/maintenance/four = 200, - /obj/effect/spawner/lootdrop/waste/salvageable = 400, + /obj/effect/spawner/random/waste/atmos_can = 50, + /obj/effect/spawner/random/waste/atmos_can/rare = 5, + /obj/effect/spawner/random/waste/salvageable = 300, + /obj/effect/spawner/random/waste/grille_or_trash = 200, + /obj/effect/spawner/random/maintenance = 20, + /obj/effect/spawner/random/maintenance/two = 50, + /obj/effect/spawner/random/maintenance/three = 100, + /obj/effect/spawner/random/maintenance/four = 200, + /obj/effect/spawner/random/waste/salvageable = 400, /obj/structure/flora/ash/garden/waste = 70, /obj/structure/flora/ash/glowshroom = 400, //more common in caves /obj/item/mine/pressure/explosive/rad/live = 10, - /obj/effect/spawner/lootdrop/mine = 8, + /obj/effect/spawner/random/mine = 8, /obj/effect/spawner/minefield = 2 ) @@ -317,7 +317,7 @@ /obj/effect/radiation/waste = 30, /obj/effect/radiation/waste/intense = 10, /obj/structure/geyser/random = 1, - /obj/effect/spawner/lootdrop/anomaly/waste/cave = 1 + /obj/effect/spawner/random/anomaly/waste/cave = 1 ) mob_spawn_list = list( /mob/living/simple_animal/hostile/hivebot/strong/rockplanet = 70, @@ -348,24 +348,24 @@ /datum/biome/cave/waste/rad flora_spawn_list = list( - /obj/effect/spawner/lootdrop/waste/trash = 900, - /obj/effect/spawner/lootdrop/waste/radiation = 250, - /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 70, - /obj/effect/spawner/lootdrop/waste/atmos_can = 50, - /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 5, - /obj/effect/spawner/lootdrop/waste/salvageable = 150, - /obj/effect/spawner/lootdrop/waste/girder = 200, + /obj/effect/spawner/random/trash/decal = 900, + /obj/effect/spawner/random/waste/radiation = 250, + /obj/effect/spawner/random/waste/radiation/more_rads = 70, + /obj/effect/spawner/random/waste/atmos_can = 50, + /obj/effect/spawner/random/waste/atmos_can/rare = 5, + /obj/effect/spawner/random/waste/salvageable = 150, + /obj/effect/spawner/random/waste/girder = 200, /obj/structure/reagent_dispensers/watertank = 10, /obj/item/stack/cable_coil/cut = 500, /obj/structure/closet/crate/secure/loot = 30, - /obj/effect/spawner/lootdrop/waste/grille_or_trash = 200, - /obj/effect/spawner/lootdrop/maintenance = 20, - /obj/effect/spawner/lootdrop/maintenance/two = 50, - /obj/effect/spawner/lootdrop/maintenance/three = 100, - /obj/effect/spawner/lootdrop/maintenance/four = 200, + /obj/effect/spawner/random/waste/grille_or_trash = 200, + /obj/effect/spawner/random/maintenance = 20, + /obj/effect/spawner/random/maintenance/two = 50, + /obj/effect/spawner/random/maintenance/three = 100, + /obj/effect/spawner/random/maintenance/four = 200, /obj/structure/flora/ash/glowshroom = 1800, /obj/item/mine/pressure/explosive/rad/live = 30, - /obj/effect/spawner/lootdrop/mine = 8, + /obj/effect/spawner/random/mine = 8, /obj/effect/spawner/minefield = 2 ) feature_spawn_chance = 12 @@ -382,26 +382,26 @@ /turf/closed/wall/rust/wasteplanet = 10 ) flora_spawn_list = list( - /obj/effect/spawner/lootdrop/waste/mechwreck = 40, - /obj/effect/spawner/lootdrop/waste/mechwreck/rare = 10, - /obj/effect/spawner/lootdrop/waste/trash = 180, - /obj/effect/spawner/lootdrop/waste/radiation = 32, - /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 4, - /obj/effect/spawner/lootdrop/waste/girder = 120, + /obj/effect/spawner/random/waste/mechwreck = 40, + /obj/effect/spawner/random/waste/mechwreck/rare = 10, + /obj/effect/spawner/random/trash/decal = 180, + /obj/effect/spawner/random/waste/radiation = 32, + /obj/effect/spawner/random/waste/radiation/more_rads = 4, + /obj/effect/spawner/random/waste/girder = 120, /obj/structure/reagent_dispensers/watertank = 40, /obj/item/stack/cable_coil/cut = 100, /obj/structure/closet/crate/secure/loot = 6, - /obj/effect/spawner/lootdrop/waste/atmos_can = 10, - /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 1, - /obj/effect/spawner/lootdrop/waste/salvageable = 60, - /obj/effect/spawner/lootdrop/waste/grille_or_trash = 40, - /obj/effect/spawner/lootdrop/maintenance = 4, - /obj/effect/spawner/lootdrop/maintenance/two = 10, - /obj/effect/spawner/lootdrop/maintenance/three = 20, - /obj/effect/spawner/lootdrop/maintenance/four = 40, - /obj/effect/spawner/lootdrop/waste/salvageable = 80, + /obj/effect/spawner/random/waste/atmos_can = 10, + /obj/effect/spawner/random/waste/atmos_can/rare = 1, + /obj/effect/spawner/random/waste/salvageable = 60, + /obj/effect/spawner/random/waste/grille_or_trash = 40, + /obj/effect/spawner/random/maintenance = 4, + /obj/effect/spawner/random/maintenance/two = 10, + /obj/effect/spawner/random/maintenance/three = 20, + /obj/effect/spawner/random/maintenance/four = 40, + /obj/effect/spawner/random/waste/salvageable = 80, /obj/item/mine/proximity/spawner/manhack/live = 40, - /obj/effect/spawner/lootdrop/mine = 8, + /obj/effect/spawner/random/mine = 8, /obj/effect/spawner/minefield/manhack = 2 ) mob_spawn_list = list( //nor organics, more biased towards hivebots though @@ -417,18 +417,18 @@ /datum/biome/cave/waste/metal/hivebot flora_spawn_list = list( - /obj/effect/spawner/lootdrop/waste/trash = 90, - /obj/effect/spawner/lootdrop/waste/radiation = 16, - /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 2, - /obj/effect/spawner/lootdrop/waste/girder = 60, + /obj/effect/spawner/random/trash/decal = 90, + /obj/effect/spawner/random/waste/radiation = 16, + /obj/effect/spawner/random/waste/radiation/more_rads = 2, + /obj/effect/spawner/random/waste/girder = 60, /obj/structure/reagent_dispensers/watertank = 20, /obj/item/stack/cable_coil/cut = 50, /obj/structure/closet/crate/secure/loot = 3, - /obj/effect/spawner/lootdrop/maintenance = 2, - /obj/effect/spawner/lootdrop/maintenance/two = 5, - /obj/effect/spawner/lootdrop/maintenance/three = 10, - /obj/effect/spawner/lootdrop/maintenance/four = 20, - /obj/effect/spawner/lootdrop/waste/salvageable = 40, + /obj/effect/spawner/random/maintenance = 2, + /obj/effect/spawner/random/maintenance/two = 5, + /obj/effect/spawner/random/maintenance/three = 10, + /obj/effect/spawner/random/maintenance/four = 20, + /obj/effect/spawner/random/waste/salvageable = 40, /obj/structure/foamedmetal = 100, /obj/item/mine/proximity/spawner/manhack/live = 20 ) @@ -456,19 +456,19 @@ ) flora_spawn_list = list( - /obj/effect/spawner/lootdrop/waste/mechwreck = 20, - /obj/effect/spawner/lootdrop/waste/trash = 90, - /obj/effect/spawner/lootdrop/waste/radiation = 16, + /obj/effect/spawner/random/waste/mechwreck = 20, + /obj/effect/spawner/random/trash/decal = 90, + /obj/effect/spawner/random/waste/radiation = 16, /obj/structure/reagent_dispensers/watertank = 20, /obj/item/stack/cable_coil/cut = 50, /obj/structure/closet/crate/secure/loot = 3, - /obj/effect/spawner/lootdrop/waste/atmos_can = 5, - /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 1, - /obj/effect/spawner/lootdrop/waste/salvageable = 30, - /obj/effect/spawner/lootdrop/maintenance = 2, - /obj/effect/spawner/lootdrop/maintenance/two = 5, - /obj/effect/spawner/lootdrop/maintenance/three = 10, - /obj/effect/spawner/lootdrop/waste/salvageable = 40, + /obj/effect/spawner/random/waste/atmos_can = 5, + /obj/effect/spawner/random/waste/atmos_can/rare = 1, + /obj/effect/spawner/random/waste/salvageable = 30, + /obj/effect/spawner/random/maintenance = 2, + /obj/effect/spawner/random/maintenance/two = 5, + /obj/effect/spawner/random/maintenance/three = 10, + /obj/effect/spawner/random/waste/salvageable = 40, ) mob_spawn_list = list( /mob/living/simple_animal/hostile/hivebot/wasteplanet/strong = 80, diff --git a/code/datums/mapgen/single_biome/WasteplanetCaves.dm b/code/datums/mapgen/single_biome/WasteplanetCaves.dm index 08f63ba3149a..3caf1c9429ad 100644 --- a/code/datums/mapgen/single_biome/WasteplanetCaves.dm +++ b/code/datums/mapgen/single_biome/WasteplanetCaves.dm @@ -40,7 +40,7 @@ /obj/structure/salvageable/destructive_analyzer = 8, /obj/structure/salvageable/server = 8, /obj/item/mine/pressure/explosive/rusty/live = 30, - /obj/effect/spawner/lootdrop/mine = 8 + /obj/effect/spawner/random/mine = 8 ) feature_spawn_list = list( /obj/structure/geyser/random = 1, diff --git a/code/datums/votes/_vote_datum.dm b/code/datums/votes/_vote_datum.dm index 8c7b7234b516..7118695bf1bb 100644 --- a/code/datums/votes/_vote_datum.dm +++ b/code/datums/votes/_vote_datum.dm @@ -156,7 +156,7 @@ /// Gets the winner of the vote, selecting a random choice from all choices based on their vote count. /datum/vote/proc/get_random_winner() - var/winner = pickweight(choices) + var/winner = pick_weight(choices) return winner ? list(winner) : list() /** diff --git a/code/datums/weather/weather_controller.dm b/code/datums/weather/weather_controller.dm index ad4d5005c049..30be3ebb23c5 100644 --- a/code/datums/weather/weather_controller.dm +++ b/code/datums/weather/weather_controller.dm @@ -60,7 +60,7 @@ if(!possible_weathers) return next_weather = world.time + rand(wait_interval_low, wait_interval_high) - next_weather_type = pickweight(possible_weathers) + next_weather_type = pick_weight(possible_weathers) /datum/weather_controller/proc/run_weather(datum/weather/weather_datum_type, telegraph = TRUE) if(!ispath(weather_datum_type, /datum/weather)) diff --git a/code/game/MapData/shuttles/nanotrasen_ranger.dm b/code/game/MapData/shuttles/nanotrasen_ranger.dm index 08f1a7c670d2..06d988760722 100644 --- a/code/game/MapData/shuttles/nanotrasen_ranger.dm +++ b/code/game/MapData/shuttles/nanotrasen_ranger.dm @@ -283,9 +283,9 @@ //lootdrop -/obj/effect/spawner/lootdrop/lpretrieval +/obj/effect/spawner/random/lpretrieval name = "LP Retrieval Missions" - lootdoubles = FALSE + spawn_loot_double = FALSE loot = list( /obj/item/disk/holodisk/lp/retrieval/phazon = 1, @@ -294,11 +294,11 @@ /obj/item/disk/holodisk/lp/retrieval/materials = 1 ) - lootcount = 2 + spawn_loot_count = 2 -/obj/effect/spawner/lootdrop/lpaid +/obj/effect/spawner/random/lpaid name = "LP Aid Missions" - lootdoubles = FALSE + spawn_loot_double = FALSE loot = list( /obj/item/disk/holodisk/lp/aid/repairs = 1, @@ -306,5 +306,5 @@ /obj/item/disk/holodisk/lp/aid/guard = 1, ) - lootcount = 4 + spawn_loot_count = 4 diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm index b8dcd669d385..f8d681199094 100644 --- a/code/game/gamemodes/dynamic/dynamic.dm +++ b/code/game/gamemodes/dynamic/dynamic.dm @@ -435,7 +435,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) /// Picks a random roundstart rule from the list given as an argument and executes it. /datum/game_mode/dynamic/proc/picking_roundstart_rule(list/drafted_rules = list(), forced = FALSE) - var/datum/dynamic_ruleset/roundstart/starting_rule = pickweight(drafted_rules) + var/datum/dynamic_ruleset/roundstart/starting_rule = pick_weight(drafted_rules) if(!starting_rule) log_game("DYNAMIC: Couldn't pick a starting ruleset. No rulesets available") return FALSE @@ -450,7 +450,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) if(drafted_rules.len <= 0) log_game("DYNAMIC: Picking [starting_rule.name] failed due to blocking_rules and no more rulesets available. Report this.") return FALSE - starting_rule = pickweight(drafted_rules) + starting_rule = pick_weight(drafted_rules) // Check if the ruleset is highlander and if a highlander ruleset has been executed else if(starting_rule.flags & HIGHLANDER_RULESET) // Should already be filtered out, but making sure. Check filtering at end of proc if reported. if(threat_level > GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking) @@ -459,14 +459,14 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) if(drafted_rules.len <= 0) log_game("DYNAMIC: Picking [starting_rule.name] failed due to no highlander stacking and no more rulesets available. Report this.") return FALSE - starting_rule = pickweight(drafted_rules) + starting_rule = pick_weight(drafted_rules) // With low pop and high threat there might be rulesets that get executed with no valid candidates. else if(!starting_rule.ready()) // Should already be filtered out, but making sure. Check filtering at end of proc if reported. drafted_rules -= starting_rule if(drafted_rules.len <= 0) log_game("DYNAMIC: Picking [starting_rule.name] failed because there were not enough candidates and no more rulesets available. Report this.") return FALSE - starting_rule = pickweight(drafted_rules) + starting_rule = pick_weight(drafted_rules) log_game("DYNAMIC: Picked a ruleset: [starting_rule.name]") @@ -512,7 +512,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) /// Picks a random midround OR latejoin rule from the list given as an argument and executes it. /// Also this could be named better. /datum/game_mode/dynamic/proc/picking_midround_latejoin_rule(list/drafted_rules = list(), forced = FALSE) - var/datum/dynamic_ruleset/rule = pickweight(drafted_rules) + var/datum/dynamic_ruleset/rule = pick_weight(drafted_rules) if(!rule) return FALSE @@ -524,7 +524,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) drafted_rules -= rule if(drafted_rules.len <= 0) return FALSE - rule = pickweight(drafted_rules) + rule = pick_weight(drafted_rules) // Check if the ruleset is highlander and if a highlander ruleset has been executed else if(rule.flags & HIGHLANDER_RULESET) if(threat_level > GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking) @@ -532,7 +532,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) drafted_rules -= rule if(drafted_rules.len <= 0) return FALSE - rule = pickweight(drafted_rules) + rule = pick_weight(drafted_rules) if(!rule.repeatable) if(rule.ruletype == "Latejoin") diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 00bc1bc95e13..eca77ba4df5a 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -149,7 +149,7 @@ message_admins("Convert_roundtype failed due to no valid modes to convert to. Please report this error to the Coders.") return null - replacementmode = pickweight(usable_modes) + replacementmode = pick_weight(usable_modes) var/matc = CONFIG_GET(number/midround_antag_time_check) if(world.time >= (matc * 600)) @@ -272,7 +272,7 @@ reports += config.mode_reports[report_type] Count++ for(var/i in Count to rand(3,5)) //Between three and five wrong entries on the list. - var/false_report_type = pickweightAllowZero(report_weights) + var/false_report_type = pick_weight_allow_zero(report_weights) report_weights[false_report_type] = 0 //Make it so the same false report won't be selected twice reports += config.mode_reports[false_report_type] diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 7e9d90bb482f..93f3e5d98a15 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -50,7 +50,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event max_i-- if(max_i<=0) return - var/Me = pickweight(meteortypes) + var/Me = pick_weight(meteortypes) var/obj/effect/meteor/M = new Me(pickedstart, pickedgoal) M.dest = pickedgoal diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 96fbbd8254d1..4caca6b376d3 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -72,7 +72,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( var/list/gameodds = list(/obj/item/circuitboard/computer/arcade/battle = 49, /obj/item/circuitboard/computer/arcade/orion_trail = 49, /obj/item/circuitboard/computer/arcade/amputation = 2) - var/thegame = pickweight(gameodds) + var/thegame = pick_weight(gameodds) var/obj/item/circuitboard/CB = new thegame() new CB.build_path(loc, CB) return INITIALIZE_HINT_QDEL @@ -93,9 +93,9 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( return var/prizeselect if(prize_override) - prizeselect = pickweight(prize_override) + prizeselect = pick_weight(prize_override) else - prizeselect = pickweight(GLOB.arcade_prize_pool) + prizeselect = pick_weight(GLOB.arcade_prize_pool) var/atom/movable/the_prize = new prizeselect(get_turf(src)) playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = -3) visible_message("[src] dispenses [the_prize]!", "You hear a chime and a clunk.") @@ -118,9 +118,9 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( num_of_prizes = rand(0,2) for(var/i = num_of_prizes; i > 0; i--) if(override) - empprize = pickweight(prize_override) + empprize = pick_weight(prize_override) else - empprize = pickweight(GLOB.arcade_prize_pool) + empprize = pick_weight(GLOB.arcade_prize_pool) new empprize(loc) explosion(loc, -1, 0, 1+num_of_prizes, flame_range = 1+num_of_prizes) @@ -635,7 +635,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( event = ORION_TRAIL_COLLISION event() else if(prob(75-gamerSkill)) - event = pickweight(events) + event = pick_weight(events) if(lings_aboard) if(event == ORION_TRAIL_LING || prob(55-gamerSkill)) event = ORION_TRAIL_LING_ATTACK diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index ccc3e4f0286a..495b4c9ab666 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -1,6 +1,6 @@ /obj/effect/landmark name = "landmark" - icon = 'icons/effects/landmarks_static.dmi' + icon = 'icons/effects/mapping/landmarks_static.dmi' icon_state = "x2" anchored = TRUE layer = MID_LANDMARK_LAYER @@ -210,7 +210,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark) return ..() /obj/effect/landmark/start/ai/secondary - icon = 'icons/effects/landmarks_static.dmi' + icon = 'icons/effects/mapping/landmarks_static.dmi' icon_state = "ai_spawn" primary_ai = FALSE latejoin_active = FALSE @@ -249,7 +249,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark) /obj/effect/landmark/start/wizard name = "wizard" - icon = 'icons/effects/landmarks_static.dmi' + icon = 'icons/effects/mapping/landmarks_static.dmi' icon_state = "wiznerd_spawn" /obj/effect/landmark/start/wizard/Initialize() @@ -259,7 +259,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark) /obj/effect/landmark/start/nukeop name = "nukeop" - icon = 'icons/effects/landmarks_static.dmi' + icon = 'icons/effects/mapping/landmarks_static.dmi' icon_state = "snukeop_spawn" /obj/effect/landmark/start/nukeop/Initialize() @@ -269,7 +269,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark) /obj/effect/landmark/start/nukeop_leader name = "nukeop leader" - icon = 'icons/effects/landmarks_static.dmi' + icon = 'icons/effects/mapping/landmarks_static.dmi' icon_state = "snukeop_leader_spawn" /obj/effect/landmark/start/nukeop_leader/Initialize() diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index 73b96c29768c..986ad10eb187 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -9,26 +9,6 @@ /obj/effect/beam/singularity_pull() return -/obj/effect/spawner - name = "object spawner" - -// Brief explanation: -// Rather then setting up and then deleting spawners, we block all atomlike setup -// and do the absolute bare minimum -// This is with the intent of optimizing mapload -/obj/effect/spawner/Initialize(mapload) - SHOULD_CALL_PARENT(FALSE) - if(flags_1 & INITIALIZED_1) - stack_trace("Warning: [src]([type]) initialized multiple times!") - flags_1 |= INITIALIZED_1 - - return INITIALIZE_HINT_QDEL - -/obj/effect/spawner/Destroy(force) - SHOULD_CALL_PARENT(FALSE) - moveToNullspace() - return QDEL_HINT_QUEUE - /obj/effect/list_container name = "list container" diff --git a/code/game/objects/effects/spawners/bundle.dm b/code/game/objects/effects/spawners/bundle.dm index f9f465bf47ab..8ccaf334feae 100644 --- a/code/game/objects/effects/spawners/bundle.dm +++ b/code/game/objects/effects/spawners/bundle.dm @@ -1,134 +1,150 @@ -/obj/effect/spawner/bundle - name = "bundle spawner" +/obj/effect/spawner/costume + name = "costume spawner" icon = 'icons/hud/screen_gen.dmi' icon_state = "x2" - color = "#00FF00" + color = COLOR_VIBRANT_LIME var/list/items -/obj/effect/spawner/bundle/Initialize(mapload) +/obj/effect/spawner/costume/Initialize(mapload) . = ..() - if(items && items.len) + if(items?.len) for(var/path in items) new path(loc) -/obj/effect/spawner/bundle/costume/gladiator +/obj/effect/spawner/costume/gladiator name = "gladiator costume spawner" items = list( /obj/item/clothing/under/costume/gladiator, - /obj/item/clothing/head/helmet/gladiator) + /obj/item/clothing/head/helmet/gladiator + ) -/obj/effect/spawner/bundle/costume/madscientist +/obj/effect/spawner/costume/madscientist name = "mad scientist costume spawner" items = list( /obj/item/clothing/under/rank/command/captain/suit, /obj/item/clothing/head/flatcap, - /obj/item/clothing/suit/toggle/labcoat/mad) + /obj/item/clothing/suit/toggle/labcoat/mad + ) -/obj/effect/spawner/bundle/costume/elpresidente +/obj/effect/spawner/costume/elpresidente name = "el presidente costume spawner" items = list( /obj/item/clothing/under/rank/command/captain/suit, /obj/item/clothing/head/flatcap, /obj/item/clothing/mask/cigarette/cigar/havana, - /obj/item/clothing/shoes/jackboots) + /obj/item/clothing/shoes/jackboots + ) -/obj/effect/spawner/bundle/costume/nyangirl +/obj/effect/spawner/costume/nyangirl name = "nyangirl costume spawner" items = list( /obj/item/clothing/under/costume/schoolgirl, /obj/item/clothing/head/kitty, - /obj/item/clothing/glasses/blindfold) + /obj/item/clothing/glasses/blindfold + ) -/obj/effect/spawner/bundle/costume/maid +/obj/effect/spawner/costume/maid name = "maid costume spawner" items = list( /obj/item/clothing/under/dress/skirt/color, - /obj/effect/spawner/lootdrop/minor/beret_or_rabbitears, - /obj/item/clothing/glasses/blindfold) + /obj/effect/spawner/random/clothing/beret_or_rabbitears, + /obj/item/clothing/glasses/blindfold + ) - -/obj/effect/spawner/bundle/costume/butler +/obj/effect/spawner/costume/butler name = "butler costume spawner" items = list( /obj/item/clothing/accessory/waistcoat, /obj/item/clothing/under/suit/black, - /obj/item/clothing/head/that) + /obj/item/clothing/head/that + ) -/obj/effect/spawner/bundle/costume/highlander +/obj/effect/spawner/costume/highlander name = "highlander costume spawner" items = list( /obj/item/clothing/under/costume/kilt, - /obj/item/clothing/head/beret) + /obj/item/clothing/head/beret + ) -/obj/effect/spawner/bundle/costume/prig +/obj/effect/spawner/costume/prig name = "prig costume spawner" items = list( /obj/item/clothing/accessory/waistcoat, - /obj/effect/spawner/lootdrop/minor/bowler_or_that, + /obj/effect/spawner/random/clothing/bowler_or_that, /obj/item/clothing/shoes/sneakers/black, /obj/item/cane, /obj/item/clothing/under/suit/sl, - /obj/item/clothing/mask/fakemoustache) + /obj/item/clothing/mask/fakemoustache + ) -/obj/effect/spawner/bundle/costume/plaguedoctor +/obj/effect/spawner/costume/plaguedoctor name = "plague doctor costume spawner" items = list( /obj/item/clothing/suit/bio_suit/plaguedoctorsuit, - /obj/item/clothing/mask/gas/plaguedoctor) + /obj/item/clothing/mask/gas/plaguedoctor + ) -/obj/effect/spawner/bundle/costume/nightowl +/obj/effect/spawner/costume/nightowl name = "night owl costume spawner" items = list( /obj/item/clothing/suit/toggle/owlwings, /obj/item/clothing/under/costume/owl, - /obj/item/clothing/mask/gas/owl_mask) + /obj/item/clothing/mask/gas/owl_mask + ) -/obj/effect/spawner/bundle/costume/waiter +/obj/effect/spawner/costume/waiter name = "waiter costume spawner" items = list( /obj/item/clothing/under/suit/waiter, - /obj/effect/spawner/lootdrop/minor/kittyears_or_rabbitears, - /obj/item/clothing/suit/apron) + /obj/effect/spawner/random/clothing/kittyears_or_rabbitears, + /obj/item/clothing/suit/apron + ) -/obj/effect/spawner/bundle/costume/pirate +/obj/effect/spawner/costume/pirate name = "pirate costume spawner" items = list( /obj/item/clothing/under/costume/pirate, /obj/item/clothing/suit/pirate, - /obj/effect/spawner/lootdrop/minor/pirate_or_bandana, - /obj/item/clothing/glasses/eyepatch) + /obj/effect/spawner/random/clothing/pirate_or_bandana, + /obj/item/clothing/glasses/eyepatch + ) -/obj/effect/spawner/bundle/costume/cutewitch +/obj/effect/spawner/costume/cutewitch name = "cute witch costume spawner" items = list( /obj/item/clothing/under/dress/sundress, - /obj/item/staff/broom) + /obj/item/staff/broom + ) -/obj/effect/spawner/bundle/costume/mafia +/obj/effect/spawner/costume/mafia name = "black mafia outfit spawner" items = list( /obj/item/clothing/head/fedora, /obj/item/clothing/under/suit/blacktwopiece, - /obj/item/clothing/shoes/laceup) + /obj/item/clothing/shoes/laceup + ) -/obj/effect/spawner/bundle/costume/mafia/white +/obj/effect/spawner/costume/mafia/white name = "white mafia outfit spawner" items = list( /obj/item/clothing/head/fedora/white, /obj/item/clothing/under/suit/white, - /obj/item/clothing/shoes/laceup) + /obj/item/clothing/shoes/laceup + ) -/obj/effect/spawner/bundle/costume/mafia/checkered +/obj/effect/spawner/costume/mafia/checkered name = "checkered mafia outfit spawner" items = list( /obj/item/clothing/head/fedora, /obj/item/clothing/under/suit/checkered, - /obj/item/clothing/shoes/laceup) + /obj/item/clothing/shoes/laceup + ) -/obj/effect/spawner/bundle/costume/mafia/beige +/obj/effect/spawner/costume/mafia/beige name = "beige mafia outfit spawner" items = list( /obj/item/clothing/head/fedora/beige, /obj/item/clothing/under/suit/beige, - /obj/item/clothing/shoes/laceup) + /obj/item/clothing/shoes/laceup + ) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm deleted file mode 100644 index b0239c8f5fdd..000000000000 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ /dev/null @@ -1,1314 +0,0 @@ -/obj/effect/spawner/lootdrop - icon = 'icons/effects/landmarks_static.dmi' - icon_state = "random_loot" - layer = OBJ_LAYER - var/lootcount = 1 //how many items will be spawned - var/lootdoubles = TRUE //if the same item can be spawned twice - var/list/loot //a list of possible items to spawn e.g. list(/obj/item, /obj/structure, /obj/effect) - var/fan_out_items = FALSE //Whether the items should be distributed to offsets 0,1,-1,2,-2,3,-3.. This overrides pixel_x/y on the spawner itself - -/obj/effect/spawner/lootdrop/Initialize(mapload) - . = ..() - if(loot && loot.len) - var/loot_spawned = 0 - while((lootcount-loot_spawned) && loot.len) - var/lootspawn = pickweight_float(loot) // WS edit - Fix various startup runtimes - while(islist(lootspawn)) - lootspawn = pickweight_float(lootspawn) // WS edit - Fix various startup runtimes - if(!lootdoubles) - loot.Remove(lootspawn) - - if(lootspawn) - var/atom/movable/spawned_loot = new lootspawn(loc) - if (!fan_out_items) - if (pixel_x != 0) - spawned_loot.pixel_x = pixel_x - if (pixel_y != 0) - spawned_loot.pixel_y = pixel_y - else - if (loot_spawned) - spawned_loot.pixel_x = spawned_loot.pixel_y = ((!(loot_spawned%2)*loot_spawned/2)*-1)+((loot_spawned%2)*(loot_spawned+1)/2*1) - else - break // WS edit - Support spawn weights of 0 in loot tables and ruins - loot_spawned++ - -/obj/effect/spawner/lootdrop/donkpockets - name = "donk pocket box spawner" - lootdoubles = FALSE - - loot = list( - /obj/item/storage/box/donkpockets/donkpocketspicy = 1, - /obj/item/storage/box/donkpockets/donkpocketteriyaki = 1, - /obj/item/storage/box/donkpockets/donkpocketpizza = 1, - /obj/item/storage/box/donkpockets/donkpocketberry = 1, - /obj/item/storage/box/donkpockets/donkpockethonk = 1, - ) - - -/obj/effect/spawner/lootdrop/armory_contraband - name = "armory contraband gun spawner" - lootdoubles = FALSE - - loot = list( - /obj/item/gun/ballistic/automatic/pistol/ringneck = 8, - /obj/item/gun/ballistic/shotgun/automatic/combat = 5, - /obj/item/gun/ballistic/automatic/pistol/deagle, - /obj/item/gun/ballistic/revolver/mateba - ) - -/obj/effect/spawner/lootdrop/armory_contraband/metastation - loot = list(/obj/item/gun/ballistic/automatic/pistol/ringneck = 5, - /obj/item/gun/ballistic/shotgun/automatic/combat = 5, - /obj/item/gun/ballistic/automatic/pistol/deagle, - /obj/item/storage/box/syndie_kit/throwing_weapons = 3, - /obj/item/gun/ballistic/revolver/mateba) - -/obj/effect/spawner/lootdrop/armory_contraband/donutstation - loot = list(/obj/item/grenade/clusterbuster/teargas = 5, - /obj/item/gun/ballistic/shotgun/automatic/combat = 5, - /obj/item/bikehorn/golden, - /obj/item/grenade/clusterbuster, - /obj/item/storage/box/syndie_kit/throwing_weapons = 3, - /obj/item/gun/ballistic/revolver/mateba) - -/obj/effect/spawner/lootdrop/prison_contraband - name = "prison contraband loot spawner" - loot = list(/obj/item/clothing/mask/cigarette/space_cigarette = 4, - /obj/item/clothing/mask/cigarette/robust = 2, - /obj/item/clothing/mask/cigarette/carp = 3, - /obj/item/clothing/mask/cigarette/uplift = 2, - /obj/item/clothing/mask/cigarette/dromedary = 3, - /obj/item/clothing/mask/cigarette/robustgold = 1, - /obj/item/storage/fancy/cigarettes/cigpack_uplift = 3, - /obj/item/storage/fancy/cigarettes = 3, - /obj/item/clothing/mask/cigarette/rollie/cannabis = 4, - /obj/item/toy/crayon/spraycan = 2, - /obj/item/crowbar = 1, - /obj/item/assembly/flash/handheld = 1, - /obj/item/restraints/handcuffs/cable/zipties = 1, - /obj/item/restraints/handcuffs = 1, - /obj/item/radio = 1, - /obj/item/lighter = 3, - /obj/item/storage/box/matches = 3, - /obj/item/reagent_containers/syringe/contraband/space_drugs = 1, - /obj/item/reagent_containers/syringe/contraband/krokodil = 1, - /obj/item/reagent_containers/syringe/contraband/crank = 1, - /obj/item/reagent_containers/syringe/contraband/methamphetamine = 1, - /obj/item/reagent_containers/syringe/contraband/bath_salts = 1, - /obj/item/reagent_containers/syringe/contraband/fentanyl = 1, - /obj/item/reagent_containers/syringe/contraband/morphine = 1, - /obj/item/storage/pill_bottle/happy = 1, - /obj/item/storage/pill_bottle/lsd = 1, - /obj/item/storage/pill_bottle/psicodine = 1, - /obj/item/reagent_containers/food/drinks/beer = 4, - /obj/item/reagent_containers/food/drinks/bottle/whiskey = 1, - /obj/item/paper/fluff/jobs/prisoner/letter = 1, - /obj/item/grenade/smokebomb = 1, - /obj/item/flashlight/seclite = 1, - /obj/item/melee/knife/shiv = 4, - /obj/item/melee/knife/shiv/carrot = 1, - /obj/item/melee/knife/kitchen = 1, - /obj/item/storage/wallet/random = 1, - /obj/item/pda = 1 - ) - -/obj/effect/spawner/lootdrop/gambling - name = "gambling valuables spawner" - loot = list( - /obj/item/clothing/head/trapper = 3, - /obj/item/storage/box/syndie_kit/throwing_weapons, - /obj/item/coin/gold, - /obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, - ) - -/obj/effect/spawner/lootdrop/grille_or_trash - name = "maint grille or trash spawner" - loot = list(/obj/structure/grille = 5, - /obj/item/flashlight/flare/burnt = 1, - /obj/item/cigbutt = 1, - /obj/item/trash/cheesie = 1, - /obj/item/trash/candy = 1, - /obj/item/trash/chips = 1, - /obj/item/reagent_containers/food/snacks/deadmouse = 1, - /obj/item/trash/pistachios = 1, - /obj/item/trash/plate = 1, - /obj/item/trash/popcorn = 1, - /obj/item/trash/raisins = 1, - /obj/item/trash/sosjerky = 1, - /obj/item/trash/syndi_cakes = 1) - -/obj/effect/spawner/lootdrop/three_course_meal - name = "three course meal spawner" - lootcount = 3 - lootdoubles = FALSE - var/soups = list( - /obj/item/reagent_containers/food/snacks/soup/beet, - /obj/item/reagent_containers/food/snacks/soup/sweetpotato, - /obj/item/reagent_containers/food/snacks/soup/stew, - /obj/item/reagent_containers/food/snacks/soup/hotchili, - /obj/item/reagent_containers/food/snacks/soup/nettle, - /obj/item/reagent_containers/food/snacks/soup/meatball) - var/salads = list( - /obj/item/reagent_containers/food/snacks/salad/herbsalad, - /obj/item/reagent_containers/food/snacks/salad/validsalad, - /obj/item/reagent_containers/food/snacks/salad/fruit, - /obj/item/reagent_containers/food/snacks/salad/jungle, - /obj/item/reagent_containers/food/snacks/salad/aesirsalad) - var/mains = list( - /obj/item/reagent_containers/food/snacks/bearsteak, - /obj/item/reagent_containers/food/snacks/enchiladas, - /obj/item/reagent_containers/food/snacks/stewedsoymeat, - /obj/item/reagent_containers/food/snacks/burger/bigbite, - /obj/item/reagent_containers/food/snacks/burger/superbite, - /obj/item/reagent_containers/food/snacks/burger/fivealarm) - -/obj/effect/spawner/lootdrop/three_course_meal/Initialize(mapload) - loot = list(pick(soups) = 1,pick(salads) = 1,pick(mains) = 1) - . = ..() - -/obj/effect/spawner/lootdrop/maintenance - name = "maintenance loot spawner" - // see code/_globalvars/lists/maintenance_loot.dm for loot table - -/obj/effect/spawner/lootdrop/maintenance/Initialize(mapload) - loot = GLOB.maintenance_loot - . = ..() - -/obj/effect/spawner/lootdrop/maintenance/two - name = "2 x maintenance loot spawner" - lootcount = 2 - -/obj/effect/spawner/lootdrop/maintenance/three - name = "3 x maintenance loot spawner" - lootcount = 3 - -/obj/effect/spawner/lootdrop/maintenance/four - name = "4 x maintenance loot spawner" - lootcount = 4 - -/obj/effect/spawner/lootdrop/maintenance/five - name = "5 x maintenance loot spawner" - lootcount = 5 - -/obj/effect/spawner/lootdrop/maintenance/six - name = "6 x maintenance loot spawner" - lootcount = 6 - -/obj/effect/spawner/lootdrop/maintenance/seven - name = "7 x maintenance loot spawner" - lootcount = 7 - -/obj/effect/spawner/lootdrop/maintenance/eight - name = "8 x maintenance loot spawner" - lootcount = 8 - -/obj/effect/spawner/lootdrop/crate_spawner - name = "lootcrate spawner" //USE PROMO CODE "SELLOUT" FOR 20% OFF! - lootdoubles = FALSE - - loot = list( - /obj/structure/closet/crate/secure/loot = 20, - "" = 80 - ) - -/obj/effect/spawner/lootdrop/organ_spawner - name = "ayylien organ spawner" - loot = list( - /obj/item/organ/heart/gland/electric = 3, - /obj/item/organ/heart/gland/trauma = 4, - /obj/item/organ/heart/gland/egg = 7, - /obj/item/organ/heart/gland/chem = 5, - /obj/item/organ/heart/gland/mindshock = 5, - /obj/item/organ/heart/gland/plasma = 7, - /obj/item/organ/heart/gland/transform = 5, - /obj/item/organ/heart/gland/slime = 4, - /obj/item/organ/heart/gland/spiderman = 5, - /obj/item/organ/heart/gland/ventcrawling = 1, - /obj/item/organ/body_egg/alien_embryo = 1, - /obj/item/organ/regenerative_core = 2) - lootcount = 3 - -/obj/effect/spawner/lootdrop/memeorgans - name = "meme organ spawner" - loot = list( - /obj/item/organ/ears/penguin, - /obj/item/organ/ears/cat, - /obj/item/organ/eyes/compound, - /obj/item/organ/eyes/snail, - /obj/item/organ/tongue/bone, - /obj/item/organ/tongue/fly, - /obj/item/organ/tongue/snail, - /obj/item/organ/tongue/lizard, - /obj/item/organ/tongue/alien, - /obj/item/organ/tongue/ethereal, - /obj/item/organ/tongue/robot, - /obj/item/organ/tongue/zombie, - /obj/item/organ/appendix, - /obj/item/organ/liver/fly, - /obj/item/organ/lungs/plasmaman, - /obj/item/organ/tail/cat, - /obj/item/organ/tail/lizard) - lootcount = 5 - -/obj/effect/spawner/lootdrop/rnd - name = "random RND spawner" - loot = list( - /obj/item/storage/box/rndmining, - /obj/item/storage/box/rndengi, - /obj/item/storage/box/rndsec, - /obj/item/storage/box/rndciv, - /obj/item/storage/box/rndmed) - lootcount = 1 - -/obj/effect/spawner/lootdrop/two_percent_xeno_egg_spawner - name = "2% chance xeno egg spawner" - loot = list( - /obj/effect/decal/remains/xeno = 49, - /obj/effect/spawner/xeno_egg_delivery = 1) - -/obj/effect/spawner/lootdrop/costume - name = "random costume spawner" - -/obj/effect/spawner/lootdrop/costume/Initialize() - loot = list() - for(var/path in subtypesof(/obj/effect/spawner/bundle/costume)) - loot[path] = TRUE - . = ..() - -// Minor lootdrops follow - -/obj/effect/spawner/lootdrop/minor/beret_or_rabbitears - name = "beret or rabbit ears spawner" - loot = list( - /obj/item/clothing/head/beret = 1) - -/obj/effect/spawner/lootdrop/minor/bowler_or_that - name = "bowler or top hat spawner" - loot = list( - /obj/item/clothing/head/that = 1) - -/obj/effect/spawner/lootdrop/minor/kittyears_or_rabbitears - name = "kitty ears or rabbit ears spawner" - loot = list( - /obj/item/clothing/head/kitty = 1) - -/obj/effect/spawner/lootdrop/minor/pirate_or_bandana - name = "pirate hat or bandana spawner" - loot = list( - /obj/item/clothing/head/pirate = 1, - /obj/item/clothing/head/bandana = 1) - -/obj/effect/spawner/lootdrop/minor/twentyfive_percent_cyborg_mask - name = "25% cyborg mask spawner" - loot = list( - /obj/item/clothing/mask/gas/cyborg = 25, - "" = 75) - -/obj/effect/spawner/lootdrop/aimodule_harmless // These shouldn't allow the AI to start butchering people - name = "harmless AI module spawner" - loot = list( - /obj/item/aiModule/core/full/asimov, - /obj/item/aiModule/core/full/asimovpp, - /obj/item/aiModule/core/full/hippocratic, - /obj/item/aiModule/core/full/paladin_devotion, - /obj/item/aiModule/core/full/paladin - ) - -/obj/effect/spawner/lootdrop/aimodule_neutral // These shouldn't allow the AI to start butchering people without reason - name = "neutral AI module spawner" - loot = list( - /obj/item/aiModule/core/full/corp, - /obj/item/aiModule/core/full/maintain, - /obj/item/aiModule/core/full/drone, - /obj/item/aiModule/core/full/peacekeeper, - /obj/item/aiModule/core/full/reporter, - /obj/item/aiModule/core/full/robocop, - /obj/item/aiModule/core/full/liveandletlive, - /obj/item/aiModule/core/full/hulkamania - ) - -/obj/effect/spawner/lootdrop/aimodule_harmful // These will get the shuttle called - name = "harmful AI module spawner" - loot = list( - /obj/item/aiModule/core/full/antimov, - /obj/item/aiModule/core/full/balance, - /obj/item/aiModule/core/full/tyrant, - /obj/item/aiModule/core/full/thermurderdynamic, - /obj/item/aiModule/core/full/damaged, - /obj/item/aiModule/reset/purge - ) - -// Tech storage circuit board spawners - -/obj/effect/spawner/lootdrop/techstorage - name = "generic circuit board spawner" - lootdoubles = FALSE - fan_out_items = TRUE - lootcount = INFINITY - -/obj/effect/spawner/lootdrop/techstorage/service - name = "service circuit board spawner" - loot = list( - /obj/item/circuitboard/computer/arcade/battle, - /obj/item/circuitboard/computer/arcade/orion_trail, - /obj/item/circuitboard/machine/autolathe, - /obj/item/circuitboard/computer/mining, - /obj/item/circuitboard/machine/ore_redemption, - /obj/item/circuitboard/machine/vending/mining_equipment, - /obj/item/circuitboard/machine/microwave, - /obj/item/circuitboard/machine/chem_dispenser/drinks, - /obj/item/circuitboard/machine/chem_dispenser/drinks/beer, - /obj/item/circuitboard/computer/slot_machine - ) - -/obj/effect/spawner/lootdrop/techstorage/rnd - name = "RnD circuit board spawner" - loot = list( - /obj/item/circuitboard/computer/aifixer, - /obj/item/circuitboard/machine/rdserver, - /obj/item/circuitboard/machine/mechfab, - /obj/item/circuitboard/machine/circuit_imprinter/department, - /obj/item/circuitboard/computer/teleporter, - /obj/item/circuitboard/machine/destructive_analyzer, - /obj/item/circuitboard/computer/rdconsole, - /obj/item/circuitboard/computer/nanite_chamber_control, - /obj/item/circuitboard/computer/nanite_cloud_controller, - /obj/item/circuitboard/machine/nanite_chamber, - /obj/item/circuitboard/machine/nanite_programmer, - /obj/item/circuitboard/machine/nanite_program_hub - ) - -/obj/effect/spawner/lootdrop/techstorage/security - name = "security circuit board spawner" - loot = list( - /obj/item/circuitboard/computer/secure_data, - /obj/item/circuitboard/computer/security, - /obj/item/circuitboard/computer/prisoner - ) - -/obj/effect/spawner/lootdrop/techstorage/engineering - name = "engineering circuit board spawner" - loot = list( - /obj/item/circuitboard/computer/atmos_alert, - /obj/item/circuitboard/computer/stationalert, - /obj/item/circuitboard/computer/powermonitor - ) - -/obj/effect/spawner/lootdrop/techstorage/tcomms - name = "tcomms circuit board spawner" - loot = list( - /obj/item/circuitboard/computer/message_monitor, - /obj/item/circuitboard/machine/telecomms/broadcaster, - /obj/item/circuitboard/machine/telecomms/bus, - /obj/item/circuitboard/machine/telecomms/server, - /obj/item/circuitboard/machine/telecomms/receiver, - /obj/item/circuitboard/machine/telecomms/processor, - /obj/item/circuitboard/machine/announcement_system, - /obj/item/circuitboard/computer/comm_server, - /obj/item/circuitboard/computer/comm_monitor - ) - -/obj/effect/spawner/lootdrop/techstorage/medical - name = "medical circuit board spawner" - loot = list( - /obj/item/circuitboard/machine/chem_dispenser, - /obj/item/circuitboard/computer/scan_consolenew, - /obj/item/circuitboard/computer/med_data, - /obj/item/circuitboard/machine/smoke_machine, - /obj/item/circuitboard/machine/chem_master, - /obj/item/circuitboard/machine/dnascanner, - /obj/item/circuitboard/computer/pandemic - ) - -/obj/effect/spawner/lootdrop/techstorage/AI - name = "secure AI circuit board spawner" - loot = list( - /obj/item/circuitboard/computer/aiupload, - /obj/item/circuitboard/computer/borgupload, - /obj/item/circuitboard/aicore - ) - -/obj/effect/spawner/lootdrop/techstorage/command - name = "secure command circuit board spawner" - loot = list( - /obj/item/circuitboard/computer/crew, - /obj/item/circuitboard/computer/communications, - /obj/item/circuitboard/computer/card - ) - -/obj/effect/spawner/lootdrop/techstorage/RnD_secure - name = "secure RnD circuit board spawner" - loot = list( - /obj/item/circuitboard/computer/mecha_control, - /obj/item/circuitboard/computer/apc_control, - /obj/item/circuitboard/computer/robotics - ) - -/obj/effect/spawner/lootdrop/mafia_outfit - name = "mafia outfit spawner" - loot = list( - /obj/effect/spawner/bundle/costume/mafia = 20, - /obj/effect/spawner/bundle/costume/mafia/white = 5, - /obj/effect/spawner/bundle/costume/mafia/checkered = 2, - /obj/effect/spawner/bundle/costume/mafia/beige = 5 - ) - -/obj/effect/spawner/lootdrop/salvage_machine - name = "salvageable machine spawner" - loot = list( - /obj/structure/salvageable/protolathe, - /obj/structure/salvageable/circuit_imprinter, - /obj/structure/salvageable/server, - /obj/structure/salvageable/machine, - /obj/structure/salvageable/autolathe, - /obj/structure/salvageable/computer, - /obj/structure/salvageable/destructive_analyzer - ) - -/obj/effect/spawner/lootdrop/ripley - name = "25% exosuit 75% wreckage ripley spawner" - loot = list(/obj/mecha/working/ripley/mining = 1, - /obj/structure/mecha_wreckage/ripley = 5) - lootdoubles = FALSE - -/obj/effect/spawner/lootdrop/salvage_50 - name = "50% salvage spawner" - loot = list( - /obj/effect/spawner/lootdrop/maintenance = 13, - /obj/effect/spawner/lootdrop/salvage_machine = 12, - /obj/effect/spawner/lootdrop/ripley = 12, - /obj/structure/closet/crate/secure/loot = 13, - "" = 50 - ) - -//finds the probabilities of items spawning from a loot spawner's loot pool -/obj/item/loot_table_maker - icon = 'icons/effects/landmarks_static.dmi' - icon_state = "random_loot" - var/spawner_to_test = /obj/effect/spawner/lootdrop/maintenance //what lootdrop spawner to use the loot pool of - var/loot_count = 180 //180 is about how much maint loot spawns per map as of 11/14/2019 - //result outputs - var/list/spawned_table //list of all items "spawned" and how many - var/list/stat_table //list of all items "spawned" and their occurrance probability - -/obj/item/loot_table_maker/Initialize() - . = ..() - make_table() - -/obj/item/loot_table_maker/attack_self(mob/user) - to_chat(user, "Loot pool re-rolled.") - make_table() - -/obj/item/loot_table_maker/proc/make_table() - spawned_table = list() - stat_table = list() - var/obj/effect/spawner/lootdrop/spawner_to_table = new spawner_to_test - var/lootpool = spawner_to_table.loot - qdel(spawner_to_table) - for(var/i in 1 to loot_count) - var/loot_spawn = pick_loot(lootpool) - if(!loot_spawn) // WS edit - Support spawn weights of 0 in loot tables and ruins - continue - if(!(loot_spawn in spawned_table)) - spawned_table[loot_spawn] = 1 - else - spawned_table[loot_spawn] += 1 - stat_table += spawned_table - for(var/item in stat_table) - stat_table[item] /= loot_count - -/obj/item/loot_table_maker/proc/pick_loot(lootpool) //selects path from loot table and returns it - var/lootspawn = pickweight_float(lootpool) // WS edit - Fix various startup runtimes - while(islist(lootspawn)) - lootspawn = pickweight_float(lootspawn) // WS edit - Fix various startup runtimes - return lootspawn - -/obj/effect/spawner/lootdrop/stockparts - name = "random good stock parts" - lootcount = 6 - loot = list( - /obj/item/stock_parts/capacitor/adv, - /obj/item/stock_parts/capacitor/quadratic, - /obj/item/stock_parts/capacitor/super, - /obj/item/stock_parts/cell/hyper, - /obj/item/stock_parts/cell/super, - /obj/item/stock_parts/cell/bluespace, - /obj/item/stock_parts/matter_bin/bluespace, - /obj/item/stock_parts/matter_bin/super, - /obj/item/stock_parts/matter_bin/adv, - /obj/item/stock_parts/micro_laser/ultra, - /obj/item/stock_parts/micro_laser/quadultra, - /obj/item/stock_parts/micro_laser/high, - /obj/item/stock_parts/scanning_module/triphasic, - /obj/item/stock_parts/scanning_module/phasic, - /obj/item/stock_parts/scanning_module/adv, - /obj/item/reagent_containers/glass/beaker/bluespace, - /obj/item/reagent_containers/glass/beaker/plastic, - /obj/item/reagent_containers/glass/beaker/large, - /obj/item/stock_parts/manipulator/nano, - /obj/item/stock_parts/manipulator/pico, - /obj/item/stock_parts/manipulator/femto - ) - -/obj/effect/spawner/lootdrop/materials - name = "random bulk materials" - lootcount = 2 - loot = list( - /obj/item/stack/sheet/plastic/fifty, - /obj/item/stack/sheet/bluespace_crystal/twenty, - /obj/item/stack/sheet/cardboard/fifty, - /obj/item/stack/sheet/glass/fifty, - /obj/item/stack/sheet/metal/fifty, - /obj/item/stack/sheet/plasteel/twenty, - /obj/item/stack/sheet/mineral/plasma/fifty, - /obj/item/stack/sheet/mineral/silver/fifty, - /obj/item/stack/sheet/mineral/titanium/fifty, - /obj/item/stack/sheet/mineral/uranium/fifty, - /obj/item/stack/sheet/mineral/wood/fifty, - /obj/item/stack/sheet/mineral/diamond/twenty, - /obj/item/stack/sheet/mineral/gold/fifty, - - /obj/item/stack/cable_coil/red, - /obj/item/stack/rods/fifty - ) - -/obj/effect/spawner/lootdrop/singularitygen - name = "Tesla or Singulo spawner" - lootdoubles = FALSE - - loot = list( - /obj/machinery/the_singularitygen/tesla = 1, - /obj/machinery/the_singularitygen = 1, - ) - -/obj/effect/spawner/lootdrop/stockparts - name = "random good stock parts" - lootcount = 5 - loot = list( - /obj/item/stock_parts/capacitor/adv, - /obj/item/stock_parts/capacitor/quadratic, - /obj/item/stock_parts/capacitor/super, - /obj/item/stock_parts/cell/hyper, - /obj/item/stock_parts/cell/super, - /obj/item/stock_parts/cell/bluespace, - /obj/item/stock_parts/matter_bin/bluespace, - /obj/item/stock_parts/matter_bin/super, - /obj/item/stock_parts/matter_bin/adv, - /obj/item/stock_parts/micro_laser/ultra, - /obj/item/stock_parts/micro_laser/quadultra, - /obj/item/stock_parts/micro_laser/high, - /obj/item/stock_parts/scanning_module/triphasic, - /obj/item/stock_parts/scanning_module/phasic, - /obj/item/stock_parts/scanning_module/adv, - /obj/item/reagent_containers/glass/beaker/bluespace, - /obj/item/reagent_containers/glass/beaker/plastic, - /obj/item/reagent_containers/glass/beaker/large, - /obj/item/stock_parts/manipulator/nano, - /obj/item/stock_parts/manipulator/pico, - /obj/item/stock_parts/manipulator/femto - ) - -/obj/effect/spawner/lootdrop/materials - name = "random materials" - lootcount = 3 - loot = list( - /obj/item/stack/sheet/plastic/fifty, - /obj/item/stack/sheet/plastic/five, - /obj/item/stack/sheet/bluespace_crystal/twenty, - /obj/item/stack/sheet/bluespace_crystal/five, - /obj/item/stack/sheet/cardboard/fifty, - /obj/item/stack/sheet/glass/fifty, - /obj/item/stack/sheet/metal/fifty, - /obj/item/stack/sheet/metal/twenty, - /obj/item/stack/sheet/plasteel/twenty, - /obj/item/stack/sheet/mineral/plasma/fifty, - /obj/item/stack/sheet/mineral/plasma/twenty, - /obj/item/stack/sheet/mineral/silver/fifty, - /obj/item/stack/sheet/mineral/titanium/twenty, - /obj/item/stack/sheet/mineral/uranium/twenty, - /obj/item/stack/sheet/mineral/wood/fifty, - /obj/item/stack/sheet/mineral/diamond/twenty, - /obj/item/stack/sheet/mineral/gold/fifty, - /obj/item/stack/cable_coil/red, - /obj/item/stack/rods/fifty - ) - -/obj/effect/spawner/lootdrop/donut - name = "random donut" //donut :) - lootcount = 1 - loot = list( - /obj/item/reagent_containers/food/snacks/donut/apple = 1, - /obj/item/reagent_containers/food/snacks/donut/berry = 1, - /obj/item/reagent_containers/food/snacks/donut/caramel = 1, - /obj/item/reagent_containers/food/snacks/donut/choco = 1, - /obj/item/reagent_containers/food/snacks/donut/laugh = 1, - /obj/item/reagent_containers/food/snacks/donut/matcha = 1, - /obj/item/reagent_containers/food/snacks/donut/meat = 1, - /obj/item/reagent_containers/food/snacks/donut/plain = 1, - /obj/item/reagent_containers/food/snacks/donut/trumpet = 1, - /obj/item/reagent_containers/food/snacks/donut/blumpkin = 1, - /obj/item/reagent_containers/food/snacks/donut/bungo = 1, - /obj/item/reagent_containers/food/snacks/donut/chaos = 1, - ) - -/obj/effect/spawner/lootdrop/donut/jelly - name = "random jelly donut" - lootcount = 1 - loot = list( - /obj/item/reagent_containers/food/snacks/donut/jelly/berry = 1, - /obj/item/reagent_containers/food/snacks/donut/jelly/apple = 1, - /obj/item/reagent_containers/food/snacks/donut/jelly/blumpkin = 1, - /obj/item/reagent_containers/food/snacks/donut/jelly/bungo = 1, - /obj/item/reagent_containers/food/snacks/donut/jelly/caramel = 1, - /obj/item/reagent_containers/food/snacks/donut/jelly/choco = 1, - /obj/item/reagent_containers/food/snacks/donut/jelly/laugh = 1, - /obj/item/reagent_containers/food/snacks/donut/jelly/matcha = 1, - /obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1, - /obj/item/reagent_containers/food/snacks/donut/jelly/trumpet = 1, - ) - -/obj/effect/spawner/lootdrop/donut/slimejelly - name = "random slimejelly donut" - lootcount = 1 - loot = list( - /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/apple = 1, - /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/berry = 1, - /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/blumpkin = 1, - /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/bungo = 1, - /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/caramel = 1, - /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/choco = 1, - /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/laugh = 1, - /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/matcha = 1, - /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1, - /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/trumpet = 1, - ) - -/obj/effect/spawner/lootdrop/seeded - name = "GO FORTH AND CULTIVATE" - icon = 'icons/obj/hydroponics/seeds.dmi' - icon_state = "seed"//sneed - loot = list( - /obj/item/seeds/aloe, - /obj/item/seeds/ambrosia, - /obj/item/seeds/apple, - /obj/item/seeds/cotton, - /obj/item/seeds/banana, - /obj/item/seeds/berry, - /obj/item/seeds/cabbage, - /obj/item/seeds/carrot, - /obj/item/seeds/cherry, - /obj/item/seeds/chanter, - /obj/item/seeds/chili, - /obj/item/seeds/cocoapod, - /obj/item/seeds/coffee, - /obj/item/seeds/corn, - /obj/item/seeds/eggplant, - /obj/item/seeds/garlic, - /obj/item/seeds/grape, - /obj/item/seeds/grass, - /obj/item/seeds/lemon, - /obj/item/seeds/lime, - /obj/item/seeds/onion, - /obj/item/seeds/orange, - /obj/item/seeds/peas, - /obj/item/seeds/pineapple, - /obj/item/seeds/potato, - /obj/item/seeds/poppy, - /obj/item/seeds/pumpkin, - /obj/item/seeds/wheat/rice, - /obj/item/seeds/soya, - /obj/item/seeds/sugarcane, - /obj/item/seeds/sunflower, - /obj/item/seeds/tea, - /obj/item/seeds/tobacco, - /obj/item/seeds/tomato, - /obj/item/seeds/tower, - /obj/item/seeds/watermelon, - /obj/item/seeds/wheat, - /obj/item/seeds/whitebeet, - /obj/item/seeds/amanita, - /obj/item/seeds/glowshroom, - /obj/item/seeds/liberty, - /obj/item/seeds/nettle, - /obj/item/seeds/plump, - /obj/item/seeds/reishi, - /obj/item/seeds/cannabis, - /obj/item/seeds/starthistle, - /obj/item/seeds/cherry/bomb, - /obj/item/seeds/berry/glow, - /obj/item/seeds/sunflower/moonflower - ) - -/obj/effect/spawner/lootdrop/flora - name = "random flora spawner" - loot = list( - /obj/structure/flora/tree/chapel, - /obj/structure/flora/tree/pine, - /obj/structure/flora/tree/jungle/small, - /obj/structure/flora/tree/jungle, - /obj/structure/flora/ash/puce, - /obj/structure/flora/ash/fireblossom, - /obj/structure/flora/ash/fern, - /obj/structure/flora/ash/tall_shroom, - /obj/structure/flora/ash/stem_shroom, - /obj/structure/flora/ash/space/voidmelon, - /obj/structure/flora/ash/leaf_shroom, - /obj/structure/flora/junglebush/large, - /obj/structure/flora/junglebush/b, - /obj/structure/flora/junglebush/c, - /obj/structure/flora/ausbushes/fernybush, - /obj/structure/flora/ausbushes/genericbush, - /obj/structure/flora/ausbushes/grassybush, - /obj/structure/flora/ausbushes/leafybush, - /obj/structure/flora/ausbushes/palebush, - /obj/structure/flora/ausbushes/pointybush, - /obj/structure/flora/ausbushes/reedbush, - /obj/structure/flora/ausbushes/stalkybush, - /obj/structure/flora/ausbushes/sunnybush, - /obj/structure/flora/bush, - /obj/structure/flora/grass/jungle, - /obj/structure/flora/junglebush, - /obj/structure/flora/junglebush/b, - /obj/structure/flora/junglebush/c, - /obj/structure/flora/ash, - /obj/structure/flora/ash/cacti, - /obj/structure/flora/ash/cap_shroom, - /obj/structure/flora/ash/chilly, - /obj/structure/flora/tree/palm - ) - lootcount = 1 - -/obj/effect/spawner/lootdrop/flower - name = "random flower spawner" - loot = list( - /obj/structure/flora/ausbushes/brflowers, - /obj/structure/flora/ausbushes/ywflowers, - /obj/structure/flora/ausbushes/ppflowers, - /obj/structure/flora/ausbushes/fullgrass, - /obj/structure/flora/ausbushes/sparsegrass - ) - lootcount = 1 - -/obj/effect/spawner/lootdrop/anomaly - name = "random anomaly spawner" - loot = list( - /obj/effect/anomaly/bluespace/planetary, - /obj/effect/anomaly/flux/planetary, - /obj/effect/anomaly/grav/planetary, - /obj/effect/anomaly/hallucination/planetary, - /obj/effect/anomaly/pyro/planetary, - /obj/effect/anomaly/vortex/planetary, - /obj/effect/anomaly/grav/high/planetary, - /obj/effect/anomaly/heartbeat/planetary, - /obj/effect/anomaly/sparkler/planetary, - /obj/effect/anomaly/tvstatic/planetary, - /obj/effect/anomaly/veins/planetary, - /obj/effect/anomaly/plasmasoul/planetary, - /obj/effect/anomaly/phantom/planetary, - /obj/effect/anomaly/melter/planetary, - /obj/effect/anomaly/transfusion/planetary, - ) - -/obj/effect/spawner/lootdrop/anomaly/safe - name = "relatively safe anomaly spawner" - loot = list( - /obj/effect/anomaly/hallucination/planetary, - /obj/effect/anomaly/pyro/planetary, - /obj/effect/anomaly/sparkler/planetary, - /obj/effect/anomaly/veins/planetary, - /obj/effect/anomaly/phantom/planetary, - /obj/effect/anomaly/transfusion/planetary, - ) - -/obj/effect/spawner/lootdrop/anomaly/dangerous - name = "relatively dangerous anomaly spawner" - loot = list( - /obj/effect/anomaly/bluespace/planetary, - /obj/effect/anomaly/flux/planetary, - /obj/effect/anomaly/grav/planetary, - /obj/effect/anomaly/vortex/planetary, - /obj/effect/anomaly/grav/high/planetary, - /obj/effect/anomaly/heartbeat/planetary, - /obj/effect/anomaly/tvstatic/planetary, - /obj/effect/anomaly/plasmasoul/planetary, - /obj/effect/anomaly/melter/planetary, - ) - -/obj/effect/spawner/lootdrop/anomaly/big - name = "random big anomaly spawner" - loot = list( - /obj/effect/anomaly/bluespace/big/planetary, - /obj/effect/anomaly/flux/big/planetary, - /obj/effect/anomaly/grav/high/big/planetary, - /obj/effect/anomaly/pyro/big/planetary - - ) - -//handpicked lists relevant to the planets they're on -// /cave lists are made for spawning in cave biomes. Not every anomaly goes well there. We don't have enough anomalies to really populate them all though - -/obj/effect/spawner/lootdrop/anomaly/jungle - name = "Jungle Anomaly Spawner" - loot = list( - /obj/effect/anomaly/flux/planetary, - /obj/effect/anomaly/hallucination/planetary, - /obj/effect/anomaly/heartbeat/planetary, - /obj/effect/anomaly/tvstatic/planetary, - /obj/effect/anomaly/veins/planetary, - /obj/effect/anomaly/phantom/planetary, - ) - -/obj/effect/spawner/lootdrop/anomaly/jungle/cave - loot = list( - /obj/effect/anomaly/flux/planetary, - /obj/effect/anomaly/hallucination/planetary, - /obj/effect/anomaly/heartbeat/planetary, - /obj/effect/anomaly/tvstatic/planetary, - /obj/effect/anomaly/veins/planetary, - /obj/effect/anomaly/phantom/planetary, - ) - -//beaches don't currently have anomalies, but I don't see a reason why they couldn't have *some* - -/obj/effect/spawner/lootdrop/anomaly/beach - name = "Beach anomaly spawner" - loot = list( - /obj/effect/anomaly/hallucination/planetary, - /obj/effect/anomaly/sparkler/planetary, - /obj/effect/anomaly/veins/planetary, - /obj/effect/anomaly/phantom/planetary, - ) - -/obj/effect/spawner/lootdrop/anomaly/beach/cave - loot = list( - /obj/effect/anomaly/hallucination/planetary, - /obj/effect/anomaly/sparkler/planetary, - /obj/effect/anomaly/veins/planetary, - /obj/effect/anomaly/phantom/planetary, - ) - -/obj/effect/spawner/lootdrop/anomaly/sand - name = "Sand anomaly spawner" - loot = list( - /obj/effect/anomaly/bluespace/planetary, - /obj/effect/anomaly/flux/planetary, - /obj/effect/anomaly/sparkler/planetary, - /obj/effect/anomaly/tvstatic/planetary, - /obj/effect/anomaly/veins/planetary, - /obj/effect/anomaly/phantom/planetary, - /obj/effect/anomaly/melter/planetary, - ) - -/obj/effect/spawner/lootdrop/anomaly/sand/cave - loot = list( - /obj/effect/anomaly/flux/planetary, - /obj/effect/anomaly/pyro/planetary, - /obj/effect/anomaly/sparkler/planetary, - /obj/effect/anomaly/tvstatic/planetary, - /obj/effect/anomaly/veins/planetary, - /obj/effect/anomaly/phantom/planetary, - /obj/effect/anomaly/melter/planetary, - ) - -/obj/effect/spawner/lootdrop/anomaly/rock - name = "Rock anomaly spawner" - loot = list( - /obj/effect/anomaly/bluespace/planetary, - /obj/effect/anomaly/flux/planetary, - /obj/effect/anomaly/grav/planetary, - /obj/effect/anomaly/hallucination/planetary, - /obj/effect/anomaly/pyro/planetary, - /obj/effect/anomaly/vortex/planetary, - /obj/effect/anomaly/grav/high/planetary, - /obj/effect/anomaly/heartbeat/planetary, - /obj/effect/anomaly/sparkler/planetary, - /obj/effect/anomaly/tvstatic/planetary, - /obj/effect/anomaly/veins/planetary, - /obj/effect/anomaly/plasmasoul/planetary, - /obj/effect/anomaly/phantom/planetary, - /obj/effect/anomaly/melter/planetary, - ) - -/obj/effect/spawner/lootdrop/anomaly/rock/cave - loot = list( - /obj/effect/anomaly/flux/planetary, - /obj/effect/anomaly/hallucination/planetary, - /obj/effect/anomaly/pyro/planetary, - /obj/effect/anomaly/heartbeat/planetary, - /obj/effect/anomaly/sparkler/planetary, - /obj/effect/anomaly/veins/planetary, - /obj/effect/anomaly/plasmasoul/planetary, - /obj/effect/anomaly/phantom/planetary, - /obj/effect/anomaly/melter/planetary, - ) - -/obj/effect/spawner/lootdrop/anomaly/lava - name = "Lava anomaly spawner" - loot = list( - /obj/effect/anomaly/bluespace/planetary, - /obj/effect/anomaly/flux/planetary, - /obj/effect/anomaly/grav/planetary, - /obj/effect/anomaly/hallucination/planetary, - /obj/effect/anomaly/pyro/planetary, - /obj/effect/anomaly/vortex/planetary, - /obj/effect/anomaly/plasmasoul/planetary, - ) - -/obj/effect/spawner/lootdrop/anomaly/lava/cave - loot = list( - /obj/effect/anomaly/flux/planetary, - /obj/effect/anomaly/hallucination/planetary, - /obj/effect/anomaly/pyro/planetary, - /obj/effect/anomaly/plasmasoul/planetary, - ) - -/obj/effect/spawner/lootdrop/anomaly/ice - name = "Ice anomaly spawner" - loot = list( - /obj/effect/anomaly/bluespace/planetary, - /obj/effect/anomaly/grav/planetary, - /obj/effect/anomaly/hallucination/planetary, - /obj/effect/anomaly/vortex/planetary, - /obj/effect/anomaly/grav/high/planetary, - /obj/effect/anomaly/plasmasoul/planetary, - /obj/effect/anomaly/phantom/planetary, - ) - -/obj/effect/spawner/lootdrop/anomaly/ice/cave - loot = list( - /obj/effect/anomaly/hallucination/planetary, - /obj/effect/anomaly/grav/high/planetary, - /obj/effect/anomaly/plasmasoul/planetary, - /obj/effect/anomaly/phantom/planetary, - ) - -/obj/effect/spawner/lootdrop/anomaly/waste - name = "Waste anomaly spawner" - loot = list( - /obj/effect/anomaly/vortex/planetary, - /obj/effect/anomaly/heartbeat/planetary, - /obj/effect/anomaly/veins/planetary, - /obj/effect/anomaly/plasmasoul/planetary, - /obj/effect/anomaly/melter/planetary, - ) - -/obj/effect/spawner/lootdrop/anomaly/waste/cave - loot = list( - /obj/effect/anomaly/heartbeat/planetary, - /obj/effect/anomaly/veins/planetary, - /obj/effect/anomaly/plasmasoul/planetary, - /obj/effect/anomaly/melter/planetary, - ) - -/obj/effect/spawner/lootdrop/anomaly/storm - loot = list( - /obj/effect/anomaly/flux/storm, - /obj/effect/anomaly/pyro/storm, - /obj/effect/anomaly/sparkler, - /obj/effect/anomaly/veins, - /obj/effect/anomaly/phantom, - /obj/effect/anomaly/melter, - ) - -//wasteplanet things - -/obj/effect/spawner/lootdrop/waste/grille_or_trash - name = "wasteplanet loot spawner" - loot = list( - /obj/structure/grille/broken = 5, - /obj/structure/grille = 5, - /obj/item/flashlight/flare/burnt = 1, - /obj/item/cigbutt = 1, - /obj/item/trash/cheesie = 1, - /obj/item/trash/candy = 1, - /obj/item/trash/chips = 1, - /obj/item/reagent_containers/food/snacks/deadmouse = 1, - /obj/item/trash/pistachios = 1, - /obj/item/trash/plate = 1, - /obj/item/trash/popcorn = 1, - /obj/item/trash/raisins = 1, - /obj/item/trash/sosjerky = 1, - /obj/item/trash/syndi_cakes = 1 - ) - -/obj/effect/spawner/lootdrop/waste/mechwreck - name = "wasteplanet exosuit wreckage" - loot = list( - /obj/structure/mecha_wreckage/ripley = 15, - /obj/structure/mecha_wreckage/ripley/firefighter = 9, - /obj/structure/mecha_wreckage/ripley/mkii = 9, - /obj/structure/mecha_wreckage/ripley/clip = 9 - ) - -/obj/effect/spawner/lootdrop/waste/mechwreck/rare - loot = list( - /obj/structure/mecha_wreckage/durand = 12.5, - /obj/structure/mecha_wreckage/durand/clip = 12.5, - /obj/structure/mecha_wreckage/odysseus = 25, - /obj/structure/mecha_wreckage/gygax = 25 - ) - -/obj/effect/spawner/lootdrop/waste/trash //debatable if this is actually loot - loot = list( - /obj/item/flashlight/flare/burnt = 30, - /obj/effect/decal/cleanable/greenglow/filled = 30, - /obj/effect/decal/cleanable/greenglow/ecto = 1, - /obj/effect/decal/cleanable/glass = 30, - /obj/effect/decal/cleanable/glass/plasma = 30, - /obj/effect/decal/cleanable/glass/strange = 30, - /obj/effect/decal/cleanable/molten_object = 30, - /obj/effect/decal/cleanable/molten_object/large = 30, - /obj/effect/decal/cleanable/oil = 30, - /obj/effect/decal/cleanable/oil/slippery = 1, // :) - /obj/effect/decal/cleanable/plastic = 30, - /obj/effect/decal/cleanable/ash = 30, - /obj/effect/decal/cleanable/ash/large = 30, - ) - -/obj/effect/spawner/lootdrop/waste/radiation - loot = list( - /obj/structure/radioactive = 6, - /obj/structure/radioactive/stack = 6, - /obj/structure/radioactive/waste = 6 - ) - -/obj/effect/spawner/lootdrop/waste/radiation/more_rads - loot = list( - /obj/structure/radioactive = 3, - /obj/structure/radioactive/stack = 12, - /obj/structure/radioactive/waste = 12 - ) - -/obj/effect/spawner/lootdrop/waste/atmos_can - loot = list( - /obj/machinery/portable_atmospherics/canister/toxins = 3, - /obj/machinery/portable_atmospherics/canister/carbon_dioxide = 3, - /obj/machinery/portable_atmospherics/canister/nitrogen = 3, - /obj/machinery/portable_atmospherics/canister/oxygen = 3, - /obj/machinery/portable_atmospherics/canister/nitrous_oxide = 1, - /obj/machinery/portable_atmospherics/canister/water_vapor = 1 - ) - -/obj/effect/spawner/lootdrop/waste/atmos_can/rare - loot = list( - /obj/machinery/portable_atmospherics/canister/tritium = 3, - /obj/machinery/portable_atmospherics/canister/pluoxium = 3 - ) - -/obj/effect/spawner/lootdrop/waste/salvageable - loot = list( - /obj/structure/salvageable/machine = 20, - /obj/structure/salvageable/autolathe = 15, - /obj/structure/salvageable/computer = 10, - /obj/structure/salvageable/protolathe = 10, - /obj/structure/salvageable/circuit_imprinter = 8, - /obj/structure/salvageable/destructive_analyzer = 8, - /obj/structure/salvageable/server = 8 - ) - -/obj/effect/spawner/lootdrop/waste/girder - loot = list( - /obj/structure/girder, - /obj/structure/girder/displaced, - /obj/structure/girder/reinforced - ) -/obj/effect/spawner/lootdrop/waste/hivebot - loot = list( - /obj/effect/spawner/lootdrop/salvage/metal, - /obj/effect/spawner/lootdrop/salvage/metal, - /obj/effect/spawner/lootdrop/salvage/metal, - /obj/effect/spawner/lootdrop/salvage/gold, - /obj/effect/spawner/lootdrop/salvage/plasma, - /obj/effect/spawner/lootdrop/salvage/silver, - /obj/effect/spawner/lootdrop/salvage/titanium, - /obj/item/stack/ore/salvage/scrapbluespace, - /obj/item/stack/ore/salvage/scrapbluespace, - /obj/item/stack/ore/salvage/scrapuranium - ) - lootcount = 2 - -/obj/effect/spawner/lootdrop/waste/hivebot/beacon - lootcount = 6 - -/obj/effect/spawner/lootdrop/salvage - name = "salvage mats spawner" - loot = list( - /obj/item/stack/ore/salvage/scrapmetal, - /obj/item/stack/ore/salvage/scrapgold, - /obj/item/stack/ore/salvage/scrapplasma, - /obj/item/stack/ore/salvage/scrapsilver, - /obj/item/stack/ore/salvage/scraptitanium, - /obj/item/stack/ore/salvage/scrapbluespace, - /obj/item/stack/ore/salvage/scrapuranium - ) - -/obj/effect/spawner/lootdrop/salvage/metal - loot = list( - /obj/item/stack/ore/salvage/scrapmetal - ) - -/obj/effect/spawner/lootdrop/salvage/metal/Initialize() - lootcount = pick(list( - 1, - 2, - 3, - 4 - )) - return ..() - -/obj/effect/spawner/lootdrop/salvage/gold - loot = list( - /obj/item/stack/ore/salvage/scrapgold - ) - -/obj/effect/spawner/lootdrop/salvage/gold/Initialize() - lootcount = pick(list( - 1, - 2, - 3, - 4 - )) - return ..() - -/obj/effect/spawner/lootdrop/salvage/plasma - loot = list( - /obj/item/stack/ore/salvage/scrapplasma - ) -/obj/effect/spawner/lootdrop/salvage/plasma/Initialize() - lootcount = pick(list( - 1, - 2, - 3, - 4 - )) - return ..() - - -/obj/effect/spawner/lootdrop/salvage/silver - loot = list( - /obj/item/stack/ore/salvage/scrapsilver - ) -/obj/effect/spawner/lootdrop/salvage/silver/Initialize() - lootcount = pick(list( - 1, - 2, - 3, - 4 - )) - return ..() - - -/obj/effect/spawner/lootdrop/salvage/titanium - loot = list( - /obj/item/stack/ore/salvage/scraptitanium - ) -/obj/effect/spawner/lootdrop/salvage/titanium/Initialize() - lootcount = pick(list( - 1, - 2, - 3, - 4 - )) - return ..() - -/obj/effect/spawner/lootdrop/salvage/bluespace - loot = list( - /obj/item/stack/ore/salvage/scrapbluespace - ) -/obj/effect/spawner/lootdrop/salvage/bluespace/Initialize() - lootcount = pick(list( - 1, - 2, - 3, - 4 - )) - return ..() - -/obj/effect/spawner/lootdrop/salvage/uranium - loot = list( - /obj/item/stack/ore/salvage/scrapuranium - ) -/obj/effect/spawner/lootdrop/salvage/uranium/Initialize() - lootcount = pick(list( - 1, - 2, - 3, - 4 - )) - return ..() - - -//random RND imprinter/protolathe board spawners. Do not use on maps without a good reason -/obj/effect/spawner/lootdrop/randomprotolathe - name = "random departmental protolathe" - loot = list( - /obj/item/circuitboard/machine/protolathe/department/cargo, - /obj/item/circuitboard/machine/protolathe/department/engineering, - /obj/item/circuitboard/machine/protolathe/department/service, - /obj/item/circuitboard/machine/protolathe/department/medical, - /obj/item/circuitboard/machine/protolathe/department/science, - /obj/item/circuitboard/machine/protolathe/department/security - ) - -/obj/effect/spawner/lootdrop/randomimprinter - name = "random departmental circuit imprinter" - loot = list( - /obj/item/circuitboard/machine/circuit_imprinter/department/cargo, - /obj/item/circuitboard/machine/circuit_imprinter/department/engi, - /obj/item/circuitboard/machine/circuit_imprinter/department/civ, - /obj/item/circuitboard/machine/circuit_imprinter/department/med, - /obj/item/circuitboard/machine/circuit_imprinter/department/science, - /obj/item/circuitboard/machine/circuit_imprinter/department/sec - ) - -/obj/effect/spawner/lootdrop/randomtechfab - name = "random departmental techfab" - loot = list( - /obj/item/circuitboard/machine/techfab/department/service, - /obj/item/circuitboard/machine/techfab/department/cargo, - /obj/item/circuitboard/machine/techfab/department/engineering, - /obj/item/circuitboard/machine/techfab/department/service, - /obj/item/circuitboard/machine/techfab/department/medical, - /obj/item/circuitboard/machine/techfab/department/science, - /obj/item/circuitboard/machine/techfab/department/security - ) - -/obj/effect/spawner/lootdrop/ration - loot = list ( - /obj/item/storage/ration/vegan_chili = 5, - /obj/item/storage/ration/shredded_beef = 5, - /obj/item/storage/ration/pork_spaghetti = 5, - /obj/item/storage/ration/fried_fish = 5, - /obj/item/storage/ration/beef_strips = 5, - /obj/item/storage/ration/chili_macaroni = 5, - /obj/item/storage/ration/chicken_wings_hot_sauce = 5, - /obj/item/storage/ration/fish_stew = 5, - /obj/item/storage/ration/lemon_pepper_chicken = 5, - /obj/item/storage/ration/sausage_peppers_onions = 5, - /obj/item/storage/ration/pork_dumplings_chili_sauce = 5, - /obj/item/storage/ration/battered_fish_sticks = 5, - /obj/item/storage/ration/assorted_salted_offal = 5, - /obj/item/storage/ration/maple_pork_sausage_patty = 5, - /obj/item/storage/ration/pepper_jack_beef_patty = 5, - /obj/item/storage/ration/beef_goulash = 5, - /obj/item/storage/ration/pepperoni_pizza_slice = 5, - /obj/item/storage/ration/blackened_calamari = 5, - /obj/item/storage/ration/elbow_macaroni = 5, - /obj/item/storage/ration/cheese_pizza_slice = 5, - /obj/item/storage/ration/crayons = 2 // :) - ) - -/obj/effect/spawner/lootdrop/chem_jug - loot = list( - /obj/item/reagent_containers/glass/chem_jug/carbon, - /obj/item/reagent_containers/glass/chem_jug/oxygen, - /obj/item/reagent_containers/glass/chem_jug/nitrogen, - /obj/item/reagent_containers/glass/chem_jug/hydrogen, - /obj/item/reagent_containers/glass/chem_jug/radium, - /obj/item/reagent_containers/glass/chem_jug/aluminium, - /obj/item/reagent_containers/glass/chem_jug/chlorine, - /obj/item/reagent_containers/glass/chem_jug/copper, - /obj/item/reagent_containers/glass/chem_jug/bromine, - /obj/item/reagent_containers/glass/chem_jug/iodine, - /obj/item/reagent_containers/glass/chem_jug/potassium, - /obj/item/reagent_containers/glass/chem_jug/sulfur) diff --git a/code/game/objects/effects/spawners/mobspawner.dm b/code/game/objects/effects/spawners/mobspawner.dm index 187b7c155fe0..2161ebd06bb5 100644 --- a/code/game/objects/effects/spawners/mobspawner.dm +++ b/code/game/objects/effects/spawners/mobspawner.dm @@ -1,11 +1,11 @@ -/obj/effect/spawner/lootdrop/randomthreat +/obj/effect/spawner/random/randomthreat var/static/mob_category = rand(1, 3) -/obj/effect/spawner/lootdrop/randomthreat/Initialize(mapload) +/obj/effect/spawner/random/randomthreat/Initialize(mapload) switch(mob_category) if(1) loot = list( - /obj/effect/spawner/lootdrop/hivebotspawner + /obj/effect/spawner/random/hivebotspawner ) if(2) loot = list( @@ -13,28 +13,28 @@ ) if(3) loot = list( - /obj/effect/spawner/lootdrop/spiderspawner + /obj/effect/spawner/random/spiderspawner ) return ..() -/obj/effect/spawner/lootdrop/xenospawner +/obj/effect/spawner/random/xenospawner name = "Xenomorph spawner" loot = list( /mob/living/simple_animal/hostile/alien = 0.3, /mob/living/simple_animal/hostile/alien/drone = 0.2, /mob/living/simple_animal/hostile/alien/sentinel = 0.3, - /obj/effect/spawner/lootdrop/xenoqueenspawner = 0.1 + /obj/effect/spawner/random/xenoqueenspawner = 0.1 ) -/obj/effect/spawner/lootdrop/xenoqueenspawner +/obj/effect/spawner/random/xenoqueenspawner name = "xenomorph queen spawner" loot = list( /mob/living/simple_animal/hostile/alien/queen = 0.2, //regular queen mob isn't actually that strong /mob/living/simple_animal/hostile/alien/queen/large = 0.8 ) -/obj/effect/spawner/lootdrop/hivebotspawner +/obj/effect/spawner/random/hivebotspawner name = "Hivebot spawner" loot = list( @@ -42,7 +42,7 @@ /mob/living/simple_animal/hostile/hivebot, ) -/obj/effect/spawner/lootdrop/spiderspawner +/obj/effect/spawner/random/spiderspawner name = "Spider spawner" loot = list( @@ -51,29 +51,29 @@ /mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper, ) -/obj/effect/spawner/lootdrop/thirtyfive_percent_borerspawner +/obj/effect/spawner/random/thirtyfive_percent_borerspawner name = "35 percent neutered borer spawner" loot = list( /mob/living/simple_animal/borer/sterile = 0.35, - /obj/effect/spawner/lootdrop/maintenance = 0.65, + /obj/effect/spawner/random/maintenance = 0.65, ) -/obj/effect/spawner/lootdrop/chicken +/obj/effect/spawner/random/chicken name = "chicken spawner" loot = list( /mob/living/simple_animal/chicken ) -/obj/effect/spawner/lootdrop/chicken/jungle +/obj/effect/spawner/random/chicken/jungle name = "jungle chicken spawner" loot = list( /mob/living/simple_animal/hostile/retaliate/chicken ) -/obj/effect/spawner/lootdrop/chicken/jungle/flock +/obj/effect/spawner/random/chicken/jungle/flock loot = list( /mob/living/simple_animal/hostile/retaliate/chicken ) - lootcount = 7 - lootdoubles = TRUE + spawn_loot_count = 7 + spawn_loot_double = TRUE diff --git a/code/game/objects/effects/spawners/random.dm/ai_module.dm b/code/game/objects/effects/spawners/random.dm/ai_module.dm new file mode 100644 index 000000000000..7f5eed59e4a0 --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/ai_module.dm @@ -0,0 +1,41 @@ +/obj/effect/spawner/random/aimodule + name = "AI module spawner" + desc = "State laws human." + icon_state = "circuit" + spawn_loot_double = FALSE + spawn_loot_count = 3 + spawn_loot_split = TRUE + +/obj/effect/spawner/random/aimodule_harmless // These shouldn't allow the AI to start butchering people + name = "harmless AI module spawner" + loot = list( + /obj/item/aiModule/core/full/asimov, + /obj/item/aiModule/core/full/asimovpp, + /obj/item/aiModule/core/full/hippocratic, + /obj/item/aiModule/core/full/paladin_devotion, + /obj/item/aiModule/core/full/paladin + ) + +/obj/effect/spawner/random/aimodule_neutral // These shouldn't allow the AI to start butchering people without reason + name = "neutral AI module spawner" + loot = list( + /obj/item/aiModule/core/full/corp, + /obj/item/aiModule/core/full/maintain, + /obj/item/aiModule/core/full/drone, + /obj/item/aiModule/core/full/peacekeeper, + /obj/item/aiModule/core/full/reporter, + /obj/item/aiModule/core/full/robocop, + /obj/item/aiModule/core/full/liveandletlive, + /obj/item/aiModule/core/full/hulkamania + ) + +/obj/effect/spawner/random/aimodule_harmful // These will get the shuttle called + name = "harmful AI module spawner" + loot = list( + /obj/item/aiModule/core/full/antimov, + /obj/item/aiModule/core/full/balance, + /obj/item/aiModule/core/full/tyrant, + /obj/item/aiModule/core/full/thermurderdynamic, + /obj/item/aiModule/core/full/damaged, + /obj/item/aiModule/reset/purge + ) diff --git a/code/game/objects/effects/spawners/random.dm/anomaly.dm b/code/game/objects/effects/spawners/random.dm/anomaly.dm new file mode 100644 index 000000000000..aa8fa472de2c --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/anomaly.dm @@ -0,0 +1,222 @@ +/obj/effect/spawner/random/anomaly + name = "random anomaly spawner" + icon_state = "anomaly" + loot = list( + /obj/effect/anomaly/bluespace/planetary, + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/grav/planetary, + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/pyro/planetary, + /obj/effect/anomaly/vortex/planetary, + /obj/effect/anomaly/grav/high/planetary, + /obj/effect/anomaly/heartbeat/planetary, + /obj/effect/anomaly/sparkler/planetary, + /obj/effect/anomaly/tvstatic/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + /obj/effect/anomaly/phantom/planetary, + /obj/effect/anomaly/melter/planetary, + /obj/effect/anomaly/transfusion/planetary, + ) + +/obj/effect/spawner/random/anomaly/safe + name = "relatively safe anomaly spawner" + loot = list( + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/pyro/planetary, + /obj/effect/anomaly/sparkler/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/phantom/planetary, + /obj/effect/anomaly/transfusion/planetary, + ) + +/obj/effect/spawner/random/anomaly/dangerous + name = "relatively dangerous anomaly spawner" + loot = list( + /obj/effect/anomaly/bluespace/planetary, + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/grav/planetary, + /obj/effect/anomaly/vortex/planetary, + /obj/effect/anomaly/grav/high/planetary, + /obj/effect/anomaly/heartbeat/planetary, + /obj/effect/anomaly/tvstatic/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + /obj/effect/anomaly/melter/planetary, + ) + +/obj/effect/spawner/random/anomaly/big + name = "random big anomaly spawner" + icon_state = "big_anomaly" + loot = list( + /obj/effect/anomaly/bluespace/big/planetary, + /obj/effect/anomaly/flux/big/planetary, + /obj/effect/anomaly/grav/high/big/planetary, + /obj/effect/anomaly/pyro/big/planetary + + ) + +//handpicked lists relevant to the planets they're on +// /cave lists are made for spawning in cave biomes. Not every anomaly goes well there. We don't have enough anomalies to really populate them all though + +/obj/effect/spawner/random/anomaly/jungle + name = "Jungle Anomaly Spawner" + loot = list( + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/heartbeat/planetary, + /obj/effect/anomaly/tvstatic/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/phantom/planetary, + ) + +/obj/effect/spawner/random/anomaly/jungle/cave + loot = list( + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/heartbeat/planetary, + /obj/effect/anomaly/tvstatic/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/phantom/planetary, + ) + +//beaches don't currently have anomalies, but I don't see a reason why they couldn't have *some* + +/obj/effect/spawner/random/anomaly/beach + name = "Beach anomaly spawner" + loot = list( + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/sparkler/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/phantom/planetary, + ) + +/obj/effect/spawner/random/anomaly/beach/cave + loot = list( + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/sparkler/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/phantom/planetary, + ) + +/obj/effect/spawner/random/anomaly/sand + name = "Sand anomaly spawner" + loot = list( + /obj/effect/anomaly/bluespace/planetary, + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/sparkler/planetary, + /obj/effect/anomaly/tvstatic/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/phantom/planetary, + /obj/effect/anomaly/melter/planetary, + ) + +/obj/effect/spawner/random/anomaly/sand/cave + loot = list( + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/pyro/planetary, + /obj/effect/anomaly/sparkler/planetary, + /obj/effect/anomaly/tvstatic/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/phantom/planetary, + /obj/effect/anomaly/melter/planetary, + ) + +/obj/effect/spawner/random/anomaly/rock + name = "Rock anomaly spawner" + loot = list( + /obj/effect/anomaly/bluespace/planetary, + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/grav/planetary, + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/pyro/planetary, + /obj/effect/anomaly/vortex/planetary, + /obj/effect/anomaly/grav/high/planetary, + /obj/effect/anomaly/heartbeat/planetary, + /obj/effect/anomaly/sparkler/planetary, + /obj/effect/anomaly/tvstatic/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + /obj/effect/anomaly/phantom/planetary, + /obj/effect/anomaly/melter/planetary, + ) + +/obj/effect/spawner/random/anomaly/rock/cave + loot = list( + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/pyro/planetary, + /obj/effect/anomaly/heartbeat/planetary, + /obj/effect/anomaly/sparkler/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + /obj/effect/anomaly/phantom/planetary, + /obj/effect/anomaly/melter/planetary, + ) + +/obj/effect/spawner/random/anomaly/lava + name = "Lava anomaly spawner" + loot = list( + /obj/effect/anomaly/bluespace/planetary, + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/grav/planetary, + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/pyro/planetary, + /obj/effect/anomaly/vortex/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + ) + +/obj/effect/spawner/random/anomaly/lava/cave + loot = list( + /obj/effect/anomaly/flux/planetary, + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/pyro/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + ) + +/obj/effect/spawner/random/anomaly/ice + name = "Ice anomaly spawner" + loot = list( + /obj/effect/anomaly/bluespace/planetary, + /obj/effect/anomaly/grav/planetary, + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/vortex/planetary, + /obj/effect/anomaly/grav/high/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + /obj/effect/anomaly/phantom/planetary, + ) + +/obj/effect/spawner/random/anomaly/ice/cave + loot = list( + /obj/effect/anomaly/hallucination/planetary, + /obj/effect/anomaly/grav/high/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + /obj/effect/anomaly/phantom/planetary, + ) + +/obj/effect/spawner/random/anomaly/waste + name = "Waste anomaly spawner" + loot = list( + /obj/effect/anomaly/vortex/planetary, + /obj/effect/anomaly/heartbeat/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + /obj/effect/anomaly/melter/planetary, + ) + +/obj/effect/spawner/random/anomaly/waste/cave + loot = list( + /obj/effect/anomaly/heartbeat/planetary, + /obj/effect/anomaly/veins/planetary, + /obj/effect/anomaly/plasmasoul/planetary, + /obj/effect/anomaly/melter/planetary, + ) + +/obj/effect/spawner/random/anomaly/storm + loot = list( + /obj/effect/anomaly/flux/storm, + /obj/effect/anomaly/pyro/storm, + /obj/effect/anomaly/sparkler, + /obj/effect/anomaly/veins, + /obj/effect/anomaly/phantom, + /obj/effect/anomaly/melter, + ) diff --git a/code/game/objects/effects/spawners/random.dm/bedsheet.dm b/code/game/objects/effects/spawners/random.dm/bedsheet.dm new file mode 100644 index 000000000000..f8a53fffd2c9 --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/bedsheet.dm @@ -0,0 +1,33 @@ +/obj/effect/spawner/random/bedsheet + name = "random dorm bedsheet" + icon_state = "random_bedsheet" + loot = list( + /obj/item/bedsheet, + /obj/item/bedsheet/blue, + /obj/item/bedsheet/green, + /obj/item/bedsheet/grey, + /obj/item/bedsheet/orange, + /obj/item/bedsheet/purple, + /obj/item/bedsheet/red, + /obj/item/bedsheet/yellow, + /obj/item/bedsheet/brown, + /obj/item/bedsheet/black, + /obj/item/bedsheet/rainbow + ) + +/obj/effect/spawner/random/bedsheet/double + name = "random dorm double bedsheet" + icon_state = "random_doublesheet" + loot = list( + /obj/item/bedsheet/double, + /obj/item/bedsheet/double/blue, + /obj/item/bedsheet/double/green, + /obj/item/bedsheet/double/grey, + /obj/item/bedsheet/double/orange, + /obj/item/bedsheet/double/purple, + /obj/item/bedsheet/double/red, + /obj/item/bedsheet/double/yellow, + /obj/item/bedsheet/double/brown, + /obj/item/bedsheet/double/black, + /obj/item/bedsheet/double/rainbow + ) diff --git a/code/game/objects/effects/spawners/random.dm/boards.dm b/code/game/objects/effects/spawners/random.dm/boards.dm new file mode 100644 index 000000000000..0104d17326d7 --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/boards.dm @@ -0,0 +1,245 @@ +// Tech storage circuit board spawners + +/obj/effect/spawner/random/techstorage + name = "generic circuit board spawner" + icon_state = "circuit" + spawn_loot_split = TRUE + spawn_all_loot = TRUE + +/obj/effect/spawner/random/techstorage/service + name = "service circuit board spawner" + loot = list( + /obj/item/circuitboard/computer/arcade/battle, + /obj/item/circuitboard/computer/arcade/orion_trail, + /obj/item/circuitboard/machine/autolathe, + /obj/item/circuitboard/computer/mining, + /obj/item/circuitboard/machine/ore_redemption, + /obj/item/circuitboard/machine/vending/mining_equipment, + /obj/item/circuitboard/machine/microwave, + /obj/item/circuitboard/machine/chem_dispenser/drinks, + /obj/item/circuitboard/machine/chem_dispenser/drinks/beer, + /obj/item/circuitboard/computer/slot_machine + ) + +/obj/effect/spawner/random/techstorage/rnd + name = "RnD circuit board spawner" + loot = list( + /obj/item/circuitboard/computer/aifixer, + /obj/item/circuitboard/machine/rdserver, + /obj/item/circuitboard/machine/mechfab, + /obj/item/circuitboard/machine/circuit_imprinter/department, + /obj/item/circuitboard/computer/teleporter, + /obj/item/circuitboard/machine/destructive_analyzer, + /obj/item/circuitboard/computer/rdconsole, + /obj/item/circuitboard/computer/nanite_chamber_control, + /obj/item/circuitboard/computer/nanite_cloud_controller, + /obj/item/circuitboard/machine/nanite_chamber, + /obj/item/circuitboard/machine/nanite_programmer, + /obj/item/circuitboard/machine/nanite_program_hub + ) + +/obj/effect/spawner/random/techstorage/security + name = "security circuit board spawner" + loot = list( + /obj/item/circuitboard/computer/secure_data, + /obj/item/circuitboard/computer/security, + /obj/item/circuitboard/computer/prisoner + ) + +/obj/effect/spawner/random/techstorage/engineering + name = "engineering circuit board spawner" + loot = list( + /obj/item/circuitboard/computer/atmos_alert, + /obj/item/circuitboard/computer/stationalert, + /obj/item/circuitboard/computer/powermonitor + ) + +/obj/effect/spawner/random/techstorage/tcomms + name = "tcomms circuit board spawner" + loot = list( + /obj/item/circuitboard/computer/message_monitor, + /obj/item/circuitboard/machine/telecomms/broadcaster, + /obj/item/circuitboard/machine/telecomms/bus, + /obj/item/circuitboard/machine/telecomms/server, + /obj/item/circuitboard/machine/telecomms/receiver, + /obj/item/circuitboard/machine/telecomms/processor, + /obj/item/circuitboard/machine/announcement_system, + /obj/item/circuitboard/computer/comm_server, + /obj/item/circuitboard/computer/comm_monitor + ) + +/obj/effect/spawner/random/techstorage/medical + name = "medical circuit board spawner" + loot = list( + /obj/item/circuitboard/machine/chem_dispenser, + /obj/item/circuitboard/computer/scan_consolenew, + /obj/item/circuitboard/computer/med_data, + /obj/item/circuitboard/machine/smoke_machine, + /obj/item/circuitboard/machine/chem_master, + /obj/item/circuitboard/machine/dnascanner, + /obj/item/circuitboard/computer/pandemic + ) + +/obj/effect/spawner/random/techstorage/ai_all + name = "secure AI circuit board spawner" + loot = list( + /obj/item/circuitboard/computer/aiupload, + /obj/item/circuitboard/computer/borgupload, + /obj/item/circuitboard/aicore + ) + +/obj/effect/spawner/random/techstorage/command + name = "secure command circuit board spawner" + loot = list( + /obj/item/circuitboard/computer/crew, + /obj/item/circuitboard/computer/communications, + /obj/item/circuitboard/computer/card + ) + +/obj/effect/spawner/random/techstorage/rnd_secure + name = "secure RnD circuit board spawner" + loot = list( + /obj/item/circuitboard/computer/mecha_control, + /obj/item/circuitboard/computer/apc_control, + /obj/item/circuitboard/computer/robotics + ) + +//random RND imprinter/protolathe board spawners. Do not use on maps without a good reason +/obj/effect/spawner/random/circuit/protolathe + name = "random departmental protolathe" + icon_state = "circuit" + loot = list( + /obj/item/circuitboard/machine/protolathe/department/cargo, + /obj/item/circuitboard/machine/protolathe/department/engineering, + /obj/item/circuitboard/machine/protolathe/department/service, + /obj/item/circuitboard/machine/protolathe/department/medical, + /obj/item/circuitboard/machine/protolathe/department/science, + /obj/item/circuitboard/machine/protolathe/department/security + ) + +/obj/effect/spawner/random/circuit/imprinter + name = "random departmental circuit imprinter" + icon_state = "circuit" + loot = list( + /obj/item/circuitboard/machine/circuit_imprinter/department/cargo, + /obj/item/circuitboard/machine/circuit_imprinter/department/engi, + /obj/item/circuitboard/machine/circuit_imprinter/department/civ, + /obj/item/circuitboard/machine/circuit_imprinter/department/med, + /obj/item/circuitboard/machine/circuit_imprinter/department/science, + /obj/item/circuitboard/machine/circuit_imprinter/department/sec + ) + +/obj/effect/spawner/random/circuit/techfab + name = "random departmental techfab" + icon_state = "circuit" + loot = list( + /obj/item/circuitboard/machine/techfab/department/service, + /obj/item/circuitboard/machine/techfab/department/cargo, + /obj/item/circuitboard/machine/techfab/department/engineering, + /obj/item/circuitboard/machine/techfab/department/service, + /obj/item/circuitboard/machine/techfab/department/medical, + /obj/item/circuitboard/machine/techfab/department/science, + /obj/item/circuitboard/machine/techfab/department/security + ) + +/obj/effect/spawner/random/rnd + name = "random RND spawner" + icon_state = "circuit" + loot = list( + /obj/item/storage/box/rndmining, + /obj/item/storage/box/rndengi, + /obj/item/storage/box/rndsec, + /obj/item/storage/box/rndciv, + /obj/item/storage/box/rndmed + ) + +/obj/effect/spawner/random/circuit/machine/common + loot = list( + /obj/item/circuitboard/machine/autolathe = 5, + /obj/item/circuitboard/machine/biogenerator = 5, + /obj/item/circuitboard/machine/cell_charger = 5, + /obj/item/circuitboard/machine/chem_heater = 5, + /obj/item/circuitboard/machine/chem_master = 5, + /obj/item/circuitboard/machine/clonescanner = 5, + /obj/item/circuitboard/machine/cryo_tube = 5, + /obj/item/circuitboard/machine/cyborgrecharger = 5, + /obj/item/circuitboard/machine/deep_fryer = 5, + /obj/item/circuitboard/machine/experimentor = 5, + /obj/item/circuitboard/machine/holopad = 5, + /obj/item/circuitboard/machine/hydroponics = 5, + /obj/item/circuitboard/machine/limbgrower = 5, + /obj/item/circuitboard/machine/ltsrbt = 5, + /obj/item/circuitboard/machine/mech_recharger = 5, + /obj/item/circuitboard/machine/mechfab = 5, + /obj/item/circuitboard/machine/medical_kiosk = 5, + /obj/item/circuitboard/machine/medipen_refiller = 5, + /obj/item/circuitboard/machine/microwave = 5, + /obj/item/circuitboard/machine/ore_redemption = 5, + /obj/item/circuitboard/machine/ore_silo = 5, + /obj/item/circuitboard/machine/reagentgrinder = 5, + /obj/item/circuitboard/machine/recharger = 5, + /obj/item/circuitboard/machine/seed_extractor = 5, + /obj/item/circuitboard/machine/selling_pad = 5, + /obj/item/circuitboard/machine/emitter = 5, + ) + +/obj/effect/spawner/random/circuit + icon_state = "circuit" + +/obj/effect/spawner/random/circuit/machine/rare + loot = list( + /obj/item/circuitboard/aicore = 5, + /obj/item/circuitboard/machine/chem_dispenser = 5, + /obj/item/circuitboard/machine/circuit_imprinter = 5, + /obj/item/circuitboard/machine/protolathe = 5, + /obj/item/circuitboard/machine/clonepod/experimental = 5, + /obj/item/circuitboard/machine/rad_collector = 5, + /obj/item/circuitboard/machine/launchpad = 5, + ) + +/obj/effect/spawner/random/circuit/machine/mech + loot = list( + /obj/item/circuitboard/mecha/ripley/main = 100, + /obj/item/circuitboard/mecha/ripley/peripherals = 100, + /obj/item/circuitboard/mecha/honker/main = 5, + /obj/item/circuitboard/mecha/honker/peripherals = 5, + /obj/item/circuitboard/mecha/odysseus/main = 5, + /obj/item/circuitboard/mecha/odysseus/peripherals = 5, + /obj/item/circuitboard/mecha/gygax/main = 1, + /obj/item/circuitboard/mecha/gygax/peripherals = 1, + /obj/item/circuitboard/mecha/gygax/targeting = 1, + /obj/item/circuitboard/mecha/durand/main = 1, + /obj/item/circuitboard/mecha/durand/peripherals = 1, + /obj/item/circuitboard/mecha/durand/targeting = 1, + ) + +//COMPUTER +/obj/effect/spawner/random/circuit/computer/common + loot = list( + /obj/item/circuitboard/computer/aifixer = 5, + /obj/item/circuitboard/computer/arcade/amputation = 5, + /obj/item/circuitboard/computer/arcade/battle = 5, + /obj/item/circuitboard/computer/arcade/orion_trail = 5, + /obj/item/circuitboard/computer/atmos_alert = 5, + /obj/item/circuitboard/computer/card = 5, + /obj/item/circuitboard/computer/cloning = 5, + /obj/item/circuitboard/computer/communications = 5, + /obj/item/circuitboard/computer/launchpad_console = 5, + /obj/item/circuitboard/computer/mech_bay_power_console = 5, + /obj/item/circuitboard/computer/pandemic = 5, + /obj/item/circuitboard/computer/powermonitor/secret = 5, + /obj/item/circuitboard/computer/prototype_cloning = 5, + /obj/item/circuitboard/computer/stationalert = 5, + /obj/item/circuitboard/computer/teleporter = 5, + /obj/item/circuitboard/computer/operating = 5, + /obj/item/circuitboard/computer/crew = 5, + /obj/item/circuitboard/computer/scan_consolenew = 5, + ) + +/obj/effect/spawner/random/circuit/computer/rare + loot = list( + /obj/item/circuitboard/computer/cargo = 5, + /obj/item/circuitboard/computer/communications = 5, + /obj/item/circuitboard/computer/shuttle/helm = 5, + /obj/item/circuitboard/computer/med_data = 5, + ) diff --git a/code/game/objects/effects/spawners/random.dm/bureaucracy.dm b/code/game/objects/effects/spawners/random.dm/bureaucracy.dm new file mode 100644 index 000000000000..b55c9dc7b364 --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/bureaucracy.dm @@ -0,0 +1,68 @@ +/obj/effect/spawner/random/bureaucracy + name = "bureaucracy loot spawner" + desc = "For the exotic art of paper shuffling." + +/obj/effect/spawner/random/bureaucracy/pen + name = "pen spawner" + icon_state = "pen" + loot = list( + /obj/item/pen = 30, + /obj/item/pen/blue = 5, + /obj/item/pen/red = 5, + /obj/item/flashlight/pen = 5, + /obj/item/pen/fourcolor = 2, + /obj/item/pen/fountain = 1, + ) + +/obj/effect/spawner/random/bureaucracy/stamp + name = "stamp spawner" + icon_state = "stamp" + loot = list( + /obj/item/stamp = 3, + /obj/item/stamp/denied = 1, + ) + +/obj/effect/spawner/random/bureaucracy/crayon + name = "crayon spawner" + icon_state = "crayon" + loot = list( + /obj/item/toy/crayon/red, + /obj/item/toy/crayon/orange, + /obj/item/toy/crayon/yellow, + /obj/item/toy/crayon/green, + /obj/item/toy/crayon/blue, + /obj/item/toy/crayon/purple, + /obj/item/toy/crayon/black, + /obj/item/toy/crayon/white, + ) + +/obj/effect/spawner/random/bureaucracy/paper + name = "paper spawner" + icon_state = "paper" + loot = list( + /obj/item/paper = 20, + /obj/item/paper/crumpled = 2, + /obj/item/paper/crumpled/bloody = 2, + /obj/item/paper/crumpled/muddy = 2, + /obj/item/paper/construction = 1, + /obj/item/paper/carbon = 1, + ) + +/obj/effect/spawner/random/bureaucracy/briefcase + name = "briefcase spawner" + icon_state = "briefcase" + loot = list( + /obj/item/storage/briefcase = 3, + /obj/item/storage/briefcase/lawyer = 1, + ) + +/obj/effect/spawner/random/bureaucracy/folder + name = "folder spawner" + icon_state = "folder" + loot = list( + /obj/item/folder/blue, + /obj/item/folder/red, + /obj/item/folder/yellow, + /obj/item/folder/white, + /obj/item/folder, + ) diff --git a/code/game/objects/effects/spawners/random.dm/clothing.dm b/code/game/objects/effects/spawners/random.dm/clothing.dm new file mode 100644 index 000000000000..e5137f9e5078 --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/clothing.dm @@ -0,0 +1,67 @@ +/obj/effect/spawner/random/clothing + name = "clothing loot spawner" + desc = "Time to look pretty." + icon_state = "suit" + +/obj/effect/spawner/random/clothing/gloves + name = "random gloves" + desc = "These gloves are supposed to be a random color..." + icon_state = "gloves" + loot = list( + /obj/item/clothing/gloves/color/orange, + /obj/item/clothing/gloves/color/red, + /obj/item/clothing/gloves/color/blue, + /obj/item/clothing/gloves/color/purple, + /obj/item/clothing/gloves/color/green, + /obj/item/clothing/gloves/color/grey, + /obj/item/clothing/gloves/color/light_brown, + /obj/item/clothing/gloves/color/brown, + /obj/item/clothing/gloves/color/white, + /obj/item/clothing/gloves/color/rainbow + ) + +/obj/effect/spawner/random/clothing/costume + name = "random costume spawner" + icon_state = "costume" + loot_subtype_path = /obj/effect/spawner/costume + loot = list() + +/obj/effect/spawner/random/clothing/beret_or_rabbitears + name = "beret or rabbit ears spawner" + loot = list( + /obj/item/clothing/head/beret + ) + +/obj/effect/spawner/random/clothing/bowler_or_that + name = "bowler or top hat spawner" + loot = list( + /obj/item/clothing/head/that + ) + +/obj/effect/spawner/random/clothing/kittyears_or_rabbitears + name = "kitty ears or rabbit ears spawner" + loot = list( + /obj/item/clothing/head/kitty + ) + +/obj/effect/spawner/random/clothing/pirate_or_bandana + name = "pirate hat or bandana spawner" + loot = list( + /obj/item/clothing/head/pirate, + /obj/item/clothing/head/bandana + ) + +/obj/effect/spawner/random/clothing/twentyfive_percent_cyborg_mask + name = "25% cyborg mask spawner" + spawn_loot_chance = 25 + loot = list(/obj/item/clothing/mask/gas/cyborg) + +/obj/effect/spawner/random/clothing/mafia_outfit + name = "mafia outfit spawner" + icon_state = "costume" + loot = list( + /obj/effect/spawner/costume/mafia = 20, + /obj/effect/spawner/costume/mafia/white = 5, + /obj/effect/spawner/costume/mafia/checkered = 2, + /obj/effect/spawner/costume/mafia/beige = 5 + ) diff --git a/code/game/objects/effects/spawners/random.dm/decoration.dm b/code/game/objects/effects/spawners/random.dm/decoration.dm new file mode 100644 index 000000000000..7af7af7fe85b --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/decoration.dm @@ -0,0 +1,118 @@ +/obj/effect/spawner/random/decoration + name = "decoration loot spawner" + desc = "Time for some bling bling." + icon_state = "lamp" + +/obj/effect/spawner/random/decoration/material + name = "decoration material spawner" + icon_state = "tile" + loot = list( + /obj/item/stack/sheet/sandblock{amount = 30} = 25, + /obj/item/stack/sheet/mineral/wood{amount = 30} = 25, + /obj/item/stack/tile/noslip{amount = 20} = 10, + /obj/item/stack/sheet/plastic{amount = 30} = 10, + /obj/item/stack/tile/pod{amount = 20} = 4, + /obj/item/stack/tile/pod/light{amount = 20} = 3, + /obj/item/stack/tile/pod/dark{amount = 20} = 3, + ) + +/obj/effect/spawner/random/decoration/carpet + name = "carpet spawner" + icon_state = "carpet" + loot = list( + /obj/item/stack/tile/carpet{amount = 30} = 35, + /obj/item/stack/tile/carpet/black{amount = 30} = 20, + ) + +/obj/effect/spawner/random/decoration/ornament + name = "ornament spawner" + icon_state = "lamp" + loot = list( + /obj/item/flashlight/lamp = 35, + /obj/item/flashlight/lamp/green = 35, + /obj/item/flashlight/lantern = 10, + /obj/item/flashlight/lamp/bananalamp = 5, + ) +/obj/effect/spawner/random/decoration/glowstick + name = "random colored glowstick" + icon_state = "glowstick" + loot_type_path = /obj/item/flashlight/glowstick + loot = list() + +/obj/effect/spawner/random/decoration/glowstick/on + name = "random colored glowstick (on)" + icon_state = "glowstick" + +/obj/effect/spawner/random/decoration/glowstick/on/make_item(spawn_loc, type_path_to_make) + . = ..() + + var/obj/item/flashlight/glowstick = . + + glowstick.set_light_on(TRUE) + +/obj/effect/spawner/random/decoration/paint + name = "paint spawner" + icon_state = "paint" + loot_subtype_path = /obj/item/paint + loot = list() + +/obj/effect/spawner/random/decoration/flower + name = "random grown flower spawner" + icon_state = "flower" + loot = list( + /obj/item/reagent_containers/food/snacks/grown/poppy, + /obj/item/reagent_containers/food/snacks/grown/harebell, + /obj/item/reagent_containers/food/snacks/grown/trumpet, + ) + +/obj/effect/spawner/random/flora + name = "random flora spawner" + loot = list( + /obj/structure/flora/tree/chapel, + /obj/structure/flora/tree/pine, + /obj/structure/flora/tree/jungle/small, + /obj/structure/flora/tree/jungle, + /obj/structure/flora/ash/puce, + /obj/structure/flora/ash/fireblossom, + /obj/structure/flora/ash/fern, + /obj/structure/flora/ash/tall_shroom, + /obj/structure/flora/ash/stem_shroom, + /obj/structure/flora/ash/space/voidmelon, + /obj/structure/flora/ash/leaf_shroom, + /obj/structure/flora/junglebush/large, + /obj/structure/flora/junglebush/b, + /obj/structure/flora/junglebush/c, + /obj/structure/flora/ausbushes/fernybush, + /obj/structure/flora/ausbushes/genericbush, + /obj/structure/flora/ausbushes/grassybush, + /obj/structure/flora/ausbushes/leafybush, + /obj/structure/flora/ausbushes/palebush, + /obj/structure/flora/ausbushes/pointybush, + /obj/structure/flora/ausbushes/reedbush, + /obj/structure/flora/ausbushes/stalkybush, + /obj/structure/flora/ausbushes/sunnybush, + /obj/structure/flora/bush, + /obj/structure/flora/grass/jungle, + /obj/structure/flora/junglebush, + /obj/structure/flora/junglebush/b, + /obj/structure/flora/junglebush/c, + /obj/structure/flora/ash, + /obj/structure/flora/ash/cacti, + /obj/structure/flora/ash/cap_shroom, + /obj/structure/flora/ash/chilly, + /obj/structure/flora/tree/palm + ) + spawn_loot_count = 1 + +/obj/effect/spawner/random/flower + name = "random flower spawner" + icon_state = "flower" + loot = list( + /obj/structure/flora/ausbushes/brflowers, + /obj/structure/flora/ausbushes/ywflowers, + /obj/structure/flora/ausbushes/ppflowers, + /obj/structure/flora/ausbushes/fullgrass, + /obj/structure/flora/ausbushes/sparsegrass + ) + spawn_loot_count = 1 + diff --git a/code/game/objects/effects/spawners/random.dm/engineering.dm b/code/game/objects/effects/spawners/random.dm/engineering.dm new file mode 100644 index 000000000000..81f264039feb --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/engineering.dm @@ -0,0 +1,138 @@ +/obj/effect/spawner/random/engineering + name = "engineering loot spawner" + desc = "All engineering related spawners go here" + icon_state = "toolbox" + +/obj/effect/spawner/random/engineering/tool + loot = list( + /obj/effect/spawner/random/engineering/tool/common = 120, + /obj/effect/spawner/random/engineering/tool/sydnie = 20, + /obj/effect/spawner/random/engineering/tool/adv = 5, + ) + +/obj/effect/spawner/random/engineering/tool/common + loot = list( + /obj/item/wrench/crescent = 1, + /obj/item/screwdriver = 1, + /obj/item/weldingtool = 1, + /obj/item/crowbar = 1, + /obj/item/wirecutters = 1, + /obj/item/multitool = 1, + ) + +/obj/effect/spawner/random/engineering/tool/sydnie + loot = list( + /obj/item/wrench/syndie = 1, + /obj/item/screwdriver/nuke = 1, + /obj/item/weldingtool/largetank = 1, + /obj/item/crowbar/syndie = 1, + /obj/item/wirecutters/syndie = 1, + /obj/item/multitool/syndie = 1, + ) + +/obj/effect/spawner/random/engineering/tool/adv + loot = list( + /obj/item/screwdriver/power = 1, + /obj/item/weldingtool/experimental = 1, + /obj/item/crowbar/power = 1, + ) + +/obj/effect/spawner/random/stockparts + name = "random good stock parts" + spawn_loot_count = 6 + loot = list( + /obj/item/stock_parts/capacitor/adv, + /obj/item/stock_parts/capacitor/quadratic, + /obj/item/stock_parts/capacitor/super, + /obj/item/stock_parts/cell/hyper, + /obj/item/stock_parts/cell/super, + /obj/item/stock_parts/cell/bluespace, + /obj/item/stock_parts/matter_bin/bluespace, + /obj/item/stock_parts/matter_bin/super, + /obj/item/stock_parts/matter_bin/adv, + /obj/item/stock_parts/micro_laser/ultra, + /obj/item/stock_parts/micro_laser/quadultra, + /obj/item/stock_parts/micro_laser/high, + /obj/item/stock_parts/scanning_module/triphasic, + /obj/item/stock_parts/scanning_module/phasic, + /obj/item/stock_parts/scanning_module/adv, + /obj/item/reagent_containers/glass/beaker/bluespace, + /obj/item/reagent_containers/glass/beaker/plastic, + /obj/item/reagent_containers/glass/beaker/large, + /obj/item/stock_parts/manipulator/nano, + /obj/item/stock_parts/manipulator/pico, + /obj/item/stock_parts/manipulator/femto + ) + +/obj/effect/spawner/random/materials + name = "random bulk materials" + spawn_loot_count = 2 + loot = list( + /obj/item/stack/sheet/plastic/fifty, + /obj/item/stack/sheet/bluespace_crystal/twenty, + /obj/item/stack/sheet/cardboard/fifty, + /obj/item/stack/sheet/glass/fifty, + /obj/item/stack/sheet/metal/fifty, + /obj/item/stack/sheet/plasteel/twenty, + /obj/item/stack/sheet/mineral/plasma/fifty, + /obj/item/stack/sheet/mineral/silver/fifty, + /obj/item/stack/sheet/mineral/titanium/fifty, + /obj/item/stack/sheet/mineral/uranium/fifty, + /obj/item/stack/sheet/mineral/wood/fifty, + /obj/item/stack/sheet/mineral/diamond/twenty, + /obj/item/stack/sheet/mineral/gold/fifty, + /obj/item/stack/cable_coil/red, + /obj/item/stack/rods/fifty + ) + +/obj/effect/spawner/random/stockparts + name = "random good stock parts" + spawn_loot_count = 5 + loot = list( + /obj/item/stock_parts/capacitor/adv, + /obj/item/stock_parts/capacitor/quadratic, + /obj/item/stock_parts/capacitor/super, + /obj/item/stock_parts/cell/hyper, + /obj/item/stock_parts/cell/super, + /obj/item/stock_parts/cell/bluespace, + /obj/item/stock_parts/matter_bin/bluespace, + /obj/item/stock_parts/matter_bin/super, + /obj/item/stock_parts/matter_bin/adv, + /obj/item/stock_parts/micro_laser/ultra, + /obj/item/stock_parts/micro_laser/quadultra, + /obj/item/stock_parts/micro_laser/high, + /obj/item/stock_parts/scanning_module/triphasic, + /obj/item/stock_parts/scanning_module/phasic, + /obj/item/stock_parts/scanning_module/adv, + /obj/item/reagent_containers/glass/beaker/bluespace, + /obj/item/reagent_containers/glass/beaker/plastic, + /obj/item/reagent_containers/glass/beaker/large, + /obj/item/stock_parts/manipulator/nano, + /obj/item/stock_parts/manipulator/pico, + /obj/item/stock_parts/manipulator/femto + ) + +/obj/effect/spawner/random/materials + name = "random materials" + spawn_loot_count = 3 + loot = list( + /obj/item/stack/sheet/plastic/fifty, + /obj/item/stack/sheet/plastic/five, + /obj/item/stack/sheet/bluespace_crystal/twenty, + /obj/item/stack/sheet/bluespace_crystal/five, + /obj/item/stack/sheet/cardboard/fifty, + /obj/item/stack/sheet/glass/fifty, + /obj/item/stack/sheet/metal/fifty, + /obj/item/stack/sheet/metal/twenty, + /obj/item/stack/sheet/plasteel/twenty, + /obj/item/stack/sheet/mineral/plasma/fifty, + /obj/item/stack/sheet/mineral/plasma/twenty, + /obj/item/stack/sheet/mineral/silver/fifty, + /obj/item/stack/sheet/mineral/titanium/twenty, + /obj/item/stack/sheet/mineral/uranium/twenty, + /obj/item/stack/sheet/mineral/wood/fifty, + /obj/item/stack/sheet/mineral/diamond/twenty, + /obj/item/stack/sheet/mineral/gold/fifty, + /obj/item/stack/cable_coil/red, + /obj/item/stack/rods/fifty + ) diff --git a/code/game/objects/effects/spawners/random.dm/entertainment.dm b/code/game/objects/effects/spawners/random.dm/entertainment.dm new file mode 100644 index 000000000000..8e51ddf384c0 --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/entertainment.dm @@ -0,0 +1,282 @@ +/obj/effect/spawner/random/entertainment + name = "entertainment loot spawner" + desc = "It's time to paaaaaarty!" + +/obj/effect/spawner/random/entertainment/arcade + name = "spawn random arcade machine" + desc = "Automagically transforms into a random arcade machine. If you see this while in a shift, please create a bug report." + icon_state = "arcade" + loot = list( + /obj/machinery/computer/arcade/orion_trail = 49, + /obj/machinery/computer/arcade/battle = 49, + /obj/machinery/computer/arcade/amputation = 2, + ) + +/obj/effect/spawner/random/entertainment/musical_instrument + name = "musical instrument spawner" + icon_state = "eguitar" + loot = list( + /obj/item/instrument/violin = 5, + /obj/item/instrument/banjo = 5, + /obj/item/instrument/guitar = 5, + /obj/item/instrument/eguitar = 5, + /obj/item/instrument/glockenspiel = 5, + /obj/item/instrument/accordion = 5, + /obj/item/instrument/trumpet = 5, + /obj/item/instrument/saxophone = 5, + /obj/item/instrument/trombone = 5, + /obj/item/instrument/recorder = 5, + /obj/item/instrument/harmonica = 5, + /obj/item/instrument/bikehorn = 2, + /obj/item/instrument/violin/golden = 2, + ) + +/obj/effect/spawner/random/entertainment/gambling + name = "gambling valuables spawner" + icon_state = "dice" + loot = list( + /obj/item/clothing/head/trapper = 3, + /obj/effect/spawner/random/entertainment/coin = 3, + /obj/effect/spawner/random/entertainment/money = 3, + /obj/item/dice/d6 = 3, + /obj/item/storage/box/syndie_kit/throwing_weapons = 1, + /obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, + ) + +/obj/effect/spawner/random/entertainment/coin + name = "coin spawner" + icon_state = "coin" + loot = list( + /obj/item/coin/iron = 5, + /obj/item/coin/plastic = 5, + /obj/item/coin/silver = 4, + /obj/item/coin/plasma = 4, + /obj/item/coin/uranium = 3, + /obj/item/coin/titanium = 3, + /obj/item/coin/diamond = 2, + /obj/item/coin/twoheaded = 1, + /obj/item/coin/antagtoken = 1, + ) + +/obj/effect/spawner/random/entertainment/money_small + name = "small money spawner" + icon_state = "cash" + spawn_loot_count = 3 + spawn_loot_split = TRUE + loot = list( + /obj/item/spacecash/bundle/c1 = 5, + /obj/item/spacecash/bundle/c10 = 3, + /obj/item/spacecash/bundle/c20 = 2, + ) + +/obj/effect/spawner/random/entertainment/money + name = "money spawner" + icon_state = "cash" + spawn_loot_count = 3 + spawn_loot_split = TRUE + loot = list( + /obj/item/spacecash/bundle/c1 = 10, + /obj/item/spacecash/bundle/c10 = 5, + /obj/item/spacecash/bundle/c20 = 3, + /obj/item/spacecash/bundle/c50 = 2, + /obj/item/spacecash/bundle/c100 = 1, + ) + +/obj/effect/spawner/random/entertainment/money_medium + name = "money spawner" + icon_state = "cash" + loot = list( + /obj/item/spacecash/bundle/c100 = 25, + /obj/item/spacecash/bundle/c200 = 15, + /obj/item/spacecash/bundle/c50 = 10, + /obj/item/spacecash/bundle/c500 = 5, + /obj/item/spacecash/bundle/c1000 = 1, + ) + +/obj/effect/spawner/random/entertainment/money_large + name = "large money spawner" + icon_state = "cash" + spawn_loot_count = 5 + spawn_loot_split = TRUE + loot = list( + /obj/item/spacecash/bundle/c1 = 100, + /obj/item/spacecash/bundle/c10 = 80, + /obj/item/spacecash/bundle/c20 = 60, + /obj/item/spacecash/bundle/c50 = 40, + /obj/item/spacecash/bundle/c100 = 30, + /obj/item/spacecash/bundle/c200 = 20, + /obj/item/spacecash/bundle/c500 = 10, + /obj/item/spacecash/bundle/c1000 = 5, + /obj/item/spacecash/bundle/c10000 = 1, + ) + +/obj/effect/spawner/random/entertainment/drugs + name = "recreational drugs spawner" + icon_state = "pill" + loot = list( + /obj/item/reagent_containers/food/drinks/bottle/hooch = 50, + /obj/item/clothing/mask/cigarette/rollie/cannabis = 15, + /obj/item/reagent_containers/syringe = 15, + /obj/item/cigbutt/roach = 15, + /obj/item/clothing/mask/cigarette/rollie/mindbreaker = 5, + ) + +/obj/effect/spawner/random/entertainment/dice + name = "dice spawner" + icon_state = "dice_bag" + loot = list( + /obj/item/dice/d4, + /obj/item/dice/d6, + /obj/item/dice/d8, + /obj/item/dice/d10, + /obj/item/dice/d12, + /obj/item/dice/d20, + ) + +/obj/effect/spawner/random/entertainment/cigarette_pack + name = "cigarette pack spawner" + icon_state = "cigarettes" + loot = list( + /obj/item/storage/fancy/cigarettes = 3, + /obj/item/storage/fancy/cigarettes/dromedaryco = 3, + /obj/item/storage/fancy/cigarettes/cigpack_uplift = 3, + /obj/item/storage/fancy/cigarettes/cigpack_robust = 3, + /obj/item/storage/fancy/cigarettes/cigpack_carp = 3, + /obj/item/storage/fancy/cigarettes/cigpack_robustgold = 1, + /obj/item/storage/fancy/cigarettes/cigpack_midori = 1, + /obj/item/storage/fancy/cigarettes/cigpack_candy = 1, + ) + +/obj/effect/spawner/random/entertainment/cigarette + name = "cigarette spawner" + icon_state = "cigarettes" + loot = list( + /obj/item/clothing/mask/cigarette/space_cigarette = 3, + /obj/item/clothing/mask/cigarette/rollie/cannabis = 3, + /obj/item/clothing/mask/cigarette/rollie/nicotine = 3, + /obj/item/clothing/mask/cigarette/dromedary = 2, + /obj/item/clothing/mask/cigarette/uplift = 2, + /obj/item/clothing/mask/cigarette/robust = 2, + /obj/item/clothing/mask/cigarette/carp = 1, + /obj/item/clothing/mask/cigarette/robustgold = 1, + ) + +/obj/effect/spawner/random/entertainment/cigar + name = "cigar spawner" + icon_state = "cigarettes" + loot = list( + /obj/item/clothing/mask/cigarette/cigar = 3, + /obj/item/clothing/mask/cigarette/cigar/havana = 2, + /obj/item/clothing/mask/cigarette/cigar/cohiba = 1, + ) + +/obj/effect/spawner/random/entertainment/wallet_lighter + name = "lighter wallet spawner" + icon_state = "lighter" + loot = list( // these fit inside a wallet + /obj/item/match = 10, + /obj/item/lighter/greyscale = 10, + /obj/item/lighter = 1, + ) + +/obj/effect/spawner/random/entertainment/lighter + name = "lighter spawner" + icon_state = "lighter" + loot = list( + /obj/item/storage/box/matches = 10, + /obj/item/lighter/greyscale = 10, + /obj/item/lighter = 1, + ) + +/obj/effect/spawner/random/entertainment/wallet_storage + name = "wallet contents spawner" + icon_state = "wallet" + spawn_loot_count = 1 + loot = list( // random photos would go here. IF I HAD ONE. :'( + /obj/item/lipstick/random, + /obj/effect/spawner/random/food_or_drink/seed, + /obj/effect/spawner/random/medical/minor_healing, + /obj/effect/spawner/random/entertainment/coin, + /obj/effect/spawner/random/entertainment/dice, + /obj/effect/spawner/random/entertainment/cigarette, + /obj/effect/spawner/random/entertainment/wallet_lighter, + /obj/effect/spawner/random/bureaucracy/paper, + /obj/effect/spawner/random/bureaucracy/crayon, + /obj/effect/spawner/random/bureaucracy/pen, + /obj/effect/spawner/random/bureaucracy/stamp, + ) + +/obj/effect/spawner/random/entertainment/deck + name = "deck spawner" + icon_state = "deck" + loot = list( + /obj/item/toy/cards/deck = 5, + /obj/item/toy/cards/deck/kotahi = 2, + /obj/item/toy/cards/deck/tarot = 1, + ) + +/obj/effect/spawner/random/entertainment/toy_figure + name = "toy figure spawner" + icon_state = "toy" + loot_subtype_path = /obj/item/toy/figure + loot = list() + +/obj/effect/spawner/random/entertainment/toy + name = "toy spawner" + icon_state = "toy" + loot = list() + +/obj/effect/spawner/random/entertainment/toy/Initialize(mapload) + loot += GLOB.arcade_prize_pool + return ..() + +/obj/effect/spawner/random/entertainment/plushie + name = "plushie spawner" + icon_state = "plushie" + loot = list ( + /obj/item/toy/plush/beeplushie, + /obj/item/toy/plush/blahaj, + /obj/item/toy/plush/carpplushie, + /obj/item/toy/plush/flushed, + /obj/item/toy/plush/kari, + /obj/item/toy/plush/lizardplushie, + /obj/item/toy/plush/mora, + /obj/item/toy/plush/realgoat, + /obj/item/toy/plush/rilena, + /obj/item/toy/plush/sharai, + /obj/item/toy/plush/slimeplushie, + /obj/item/toy/plush/snakeplushie, + /obj/item/toy/plush/spider, + /obj/item/toy/plush/tali, + /obj/item/toy/plush/xader, + /obj/effect/spawner/random/entertainment/plushie/moth // fair chances + ) + +/obj/effect/spawner/random/entertainment/plushie/moth + loot = list ( + /obj/item/toy/plush/moth, + /obj/item/toy/plush/moth/monarch, + /obj/item/toy/plush/moth/luna, + /obj/item/toy/plush/moth/atlas, + /obj/item/toy/plush/moth/redish, + /obj/item/toy/plush/moth/royal, + /obj/item/toy/plush/moth/gothic, + /obj/item/toy/plush/moth/lovers, + /obj/item/toy/plush/moth/whitefly, + /obj/item/toy/plush/moth/punished, + /obj/item/toy/plush/moth/firewatch, + /obj/item/toy/plush/moth/deadhead, + /obj/item/toy/plush/moth/poison, + /obj/item/toy/plush/moth/ragged, + /obj/item/toy/plush/moth/snow, + /obj/item/toy/plush/moth/moonfly + ) + +/obj/effect/spawner/random/entertainment/colorful_grenades + name = "colorful/glitter grenades spawner" + loot = list( + /obj/item/grenade/chem_grenade/glitter/pink, + /obj/item/grenade/chem_grenade/glitter/blue, + /obj/item/grenade/chem_grenade/glitter/white, + /obj/item/grenade/chem_grenade/colorful + ) diff --git a/code/game/objects/effects/spawners/random.dm/exotic.dm b/code/game/objects/effects/spawners/random.dm/exotic.dm new file mode 100644 index 000000000000..9d55fa9b69ff --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/exotic.dm @@ -0,0 +1,69 @@ +/obj/effect/spawner/random/exotic + name = "exotic spawner" + desc = "Super duper rare stuff." + icon_state = "showcase" + +/obj/effect/spawner/random/exotic/ripley + name = "25% exosuit 75% wreckage ripley spawner" + icon_state = "ripley" + loot = list( + /obj/mecha/working/ripley/mining = 1, + /obj/structure/mecha_wreckage/ripley = 5 + ) + +/obj/effect/spawner/random/exotic/prison_contraband + name = "prison contraband loot spawner" + icon_state = "prisoner" + loot = list( + /obj/item/clothing/mask/cigarette/space_cigarette = 4, + /obj/item/clothing/mask/cigarette/robust = 2, + /obj/item/clothing/mask/cigarette/carp = 3, + /obj/item/clothing/mask/cigarette/uplift = 2, + /obj/item/clothing/mask/cigarette/dromedary = 3, + /obj/item/clothing/mask/cigarette/robustgold = 1, + /obj/item/storage/fancy/cigarettes/cigpack_uplift = 3, + /obj/item/storage/fancy/cigarettes = 3, + /obj/item/clothing/mask/cigarette/rollie/cannabis = 4, + /obj/item/toy/crayon/spraycan = 2, + /obj/item/crowbar = 1, + /obj/item/assembly/flash/handheld = 1, + /obj/item/restraints/handcuffs/cable/zipties = 1, + /obj/item/restraints/handcuffs = 1, + /obj/item/radio = 1, + /obj/item/lighter = 3, + /obj/item/storage/box/matches = 3, + /obj/item/reagent_containers/syringe/contraband/space_drugs = 1, + /obj/item/reagent_containers/syringe/contraband/krokodil = 1, + /obj/item/reagent_containers/syringe/contraband/crank = 1, + /obj/item/reagent_containers/syringe/contraband/methamphetamine = 1, + /obj/item/reagent_containers/syringe/contraband/bath_salts = 1, + /obj/item/reagent_containers/syringe/contraband/fentanyl = 1, + /obj/item/reagent_containers/syringe/contraband/morphine = 1, + /obj/item/storage/pill_bottle/happy = 1, + /obj/item/storage/pill_bottle/lsd = 1, + /obj/item/storage/pill_bottle/psicodine = 1, + /obj/item/reagent_containers/food/drinks/beer = 4, + /obj/item/reagent_containers/food/drinks/bottle/whiskey = 1, + /obj/item/paper/fluff/jobs/prisoner/letter = 1, + /obj/item/grenade/smokebomb = 1, + /obj/item/flashlight/seclite = 1, + /obj/item/melee/knife/shiv = 4, + /obj/item/melee/knife/shiv/carrot = 1, + /obj/item/melee/knife/kitchen = 1, + /obj/item/storage/wallet/random = 1, + /obj/item/pda = 1 + ) + +/obj/effect/spawner/random/exotic/armory + name = "generic armory spawner" + spawn_loot_split = TRUE + spawn_loot_count = 3 + spawn_loot_split_pixel_offsets = 4 + + loot = list( + /obj/item/gun/ballistic/automatic/pistol/ringneck = 8, + /obj/item/gun/ballistic/shotgun/automatic/combat = 5, + /obj/item/gun/ballistic/automatic/pistol/deagle, + /obj/item/gun/ballistic/revolver/mateba + ) + diff --git a/code/game/objects/effects/spawners/random.dm/food_or_drink.dm b/code/game/objects/effects/spawners/random.dm/food_or_drink.dm new file mode 100644 index 000000000000..300f94260ee1 --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/food_or_drink.dm @@ -0,0 +1,284 @@ +/obj/effect/spawner/random/food_or_drink + name = "food or drink loot spawner" + desc = "Nom nom nom" + icon_state = "soup" + +/obj/effect/spawner/random/food_or_drink/donkpockets + name = "donk pocket box spawner" + icon_state = "donkpocket" + loot = list( + /obj/item/storage/box/donkpockets/donkpocketspicy = 1, + /obj/item/storage/box/donkpockets/donkpocketteriyaki = 1, + /obj/item/storage/box/donkpockets/donkpocketpizza = 1, + /obj/item/storage/box/donkpockets/donkpocketberry = 1, + /obj/item/storage/box/donkpockets/donkpockethonk = 1, + ) + +/obj/effect/spawner/random/food_or_drink/ration + name = "ration spawner" + icon_state = "pizzabox" + loot = list ( + /obj/item/storage/ration/vegan_chili = 5, + /obj/item/storage/ration/shredded_beef = 5, + /obj/item/storage/ration/pork_spaghetti = 5, + /obj/item/storage/ration/fried_fish = 5, + /obj/item/storage/ration/beef_strips = 5, + /obj/item/storage/ration/chili_macaroni = 5, + /obj/item/storage/ration/chicken_wings_hot_sauce = 5, + /obj/item/storage/ration/fish_stew = 5, + /obj/item/storage/ration/lemon_pepper_chicken = 5, + /obj/item/storage/ration/sausage_peppers_onions = 5, + /obj/item/storage/ration/pork_dumplings_chili_sauce = 5, + /obj/item/storage/ration/battered_fish_sticks = 5, + /obj/item/storage/ration/assorted_salted_offal = 5, + /obj/item/storage/ration/maple_pork_sausage_patty = 5, + /obj/item/storage/ration/pepper_jack_beef_patty = 5, + /obj/item/storage/ration/beef_goulash = 5, + /obj/item/storage/ration/pepperoni_pizza_slice = 5, + /obj/item/storage/ration/blackened_calamari = 5, + /obj/item/storage/ration/elbow_macaroni = 5, + /obj/item/storage/ration/cheese_pizza_slice = 5, + /obj/item/storage/ration/crayons = 2 // :) + ) + +/obj/effect/spawner/random/food_or_drink/donut + name = "random donut" //donut :) + icon_state = "pizzabox" + loot = list( + /obj/item/reagent_containers/food/snacks/donut/apple = 1, + /obj/item/reagent_containers/food/snacks/donut/berry = 1, + /obj/item/reagent_containers/food/snacks/donut/caramel = 1, + /obj/item/reagent_containers/food/snacks/donut/choco = 1, + /obj/item/reagent_containers/food/snacks/donut/laugh = 1, + /obj/item/reagent_containers/food/snacks/donut/matcha = 1, + /obj/item/reagent_containers/food/snacks/donut/meat = 1, + /obj/item/reagent_containers/food/snacks/donut/plain = 1, + /obj/item/reagent_containers/food/snacks/donut/trumpet = 1, + /obj/item/reagent_containers/food/snacks/donut/blumpkin = 1, + /obj/item/reagent_containers/food/snacks/donut/bungo = 1, + /obj/item/reagent_containers/food/snacks/donut/chaos = 1, + ) + +/obj/effect/spawner/random/food_or_drink/donut/jelly + name = "random jelly donut" + loot = list( + /obj/item/reagent_containers/food/snacks/donut/jelly/berry = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/apple = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/blumpkin = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/bungo = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/caramel = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/choco = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/laugh = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/matcha = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/trumpet = 1, + ) + +/obj/effect/spawner/random/food_or_drink/donut/slimejelly + name = "random slimejelly donut" + loot = list( + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/apple = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/berry = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/blumpkin = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/bungo = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/caramel = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/choco = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/laugh = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/matcha = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1, + /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/trumpet = 1, + ) + +/obj/effect/spawner/random/food_or_drink/three_course_meal + name = "three course meal spawner" + spawn_loot_count = 3 + spawn_loot_double = FALSE + var/soups = list( + /obj/item/reagent_containers/food/snacks/soup/beet, + /obj/item/reagent_containers/food/snacks/soup/sweetpotato, + /obj/item/reagent_containers/food/snacks/soup/stew, + /obj/item/reagent_containers/food/snacks/soup/hotchili, + /obj/item/reagent_containers/food/snacks/soup/nettle, + /obj/item/reagent_containers/food/snacks/soup/meatball) + var/salads = list( + /obj/item/reagent_containers/food/snacks/salad/herbsalad, + /obj/item/reagent_containers/food/snacks/salad/validsalad, + /obj/item/reagent_containers/food/snacks/salad/fruit, + /obj/item/reagent_containers/food/snacks/salad/jungle, + /obj/item/reagent_containers/food/snacks/salad/aesirsalad) + var/mains = list( + /obj/item/reagent_containers/food/snacks/bearsteak, + /obj/item/reagent_containers/food/snacks/enchiladas, + /obj/item/reagent_containers/food/snacks/stewedsoymeat, + /obj/item/reagent_containers/food/snacks/burger/bigbite, + /obj/item/reagent_containers/food/snacks/burger/superbite, + /obj/item/reagent_containers/food/snacks/burger/fivealarm) + +/obj/effect/spawner/random/food_or_drink/three_course_meal/Initialize(mapload) + loot = list(pick(soups) = 1,pick(salads) = 1,pick(mains) = 1) + . = ..() + +/obj/effect/spawner/random/food_or_drink/garden + name = "lush garden seeder" + spawn_loot_count = 3 + loot = list( + /obj/item/reagent_containers/food/snacks/grown/ambrosia/deus = 1, + /obj/item/reagent_containers/food/snacks/grown/berries/death/stealth = 2, + /obj/item/reagent_containers/food/snacks/grown/citrus/orange_3d = 1, + /obj/item/reagent_containers/food/snacks/grown/trumpet = 1, + /obj/item/reagent_containers/food/snacks/grown/bungofruit = 1, + /obj/item/seeds/random = 1, + /obj/item/grown/log/bamboo = 2, + /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris = 2, + /obj/item/reagent_containers/food/snacks/grown/berries/poison/stealth = 5, + /obj/item/reagent_containers/food/snacks/grown/citrus/lemon = 2, + /obj/item/reagent_containers/food/snacks/grown/citrus/lime = 2, + /obj/item/reagent_containers/food/snacks/grown/vanillapod = 2, + /obj/item/reagent_containers/food/snacks/grown/moonflower = 2, + /obj/item/reagent_containers/food/snacks/grown/cocoapod = 2, + /obj/item/reagent_containers/food/snacks/grown/pineapple = 2, + /obj/item/reagent_containers/food/snacks/grown/poppy/lily = 2, + /obj/item/reagent_containers/food/snacks/grown/poppy/geranium = 2, + /obj/item/reagent_containers/food/snacks/grown/sugarcane = 2, + /obj/item/reagent_containers/food/snacks/grown/tea = 2, + /obj/item/reagent_containers/food/snacks/grown/tobacco = 2, + /obj/item/reagent_containers/food/snacks/grown/watermelon = 4, + /obj/item/grown/sunflower = 4, + /obj/item/reagent_containers/food/snacks/grown/banana = 4, + /obj/item/reagent_containers/food/snacks/grown/apple = 4, + /obj/item/reagent_containers/food/snacks/grown/berries = 5, + /obj/item/reagent_containers/food/snacks/grown/cherries = 4, + /obj/item/reagent_containers/food/snacks/grown/citrus/orange = 4, + /obj/item/reagent_containers/food/snacks/grown/garlic = 4, + /obj/item/reagent_containers/food/snacks/grown/grapes = 4, + /obj/item/reagent_containers/food/snacks/grown/grass = 5, + /obj/item/reagent_containers/food/snacks/grown/pumpkin = 4, + /obj/item/reagent_containers/food/snacks/grown/rainbow_flower = 4, + /obj/item/reagent_containers/food/snacks/grown/wheat = 4, + /obj/item/reagent_containers/food/snacks/grown/parsnip = 4, + /obj/item/reagent_containers/food/snacks/grown/peas = 4, + /obj/item/reagent_containers/food/snacks/grown/rice = 4, + /obj/item/reagent_containers/food/snacks/grown/soybeans = 4, + /obj/item/reagent_containers/food/snacks/grown/tomato = 4, + /obj/item/reagent_containers/food/snacks/grown/cabbage = 4, + /obj/item/reagent_containers/food/snacks/grown/onion = 4, + /obj/item/reagent_containers/food/snacks/grown/carrot = 4) + +/obj/effect/spawner/random/food_or_drink/garden/arid + name = "arid garden seeder" + loot = list( + /obj/item/reagent_containers/food/snacks/grown/ghost_chili = 1, + /obj/item/reagent_containers/food/snacks/grown/nettle = 1, + /obj/item/grown/cotton/durathread = 1, + /obj/item/seeds/random = 1, + /obj/item/reagent_containers/food/snacks/grown/redbeet = 1, + /obj/item/reagent_containers/food/snacks/grown/aloe = 2, + /obj/item/grown/cotton = 2, + /obj/item/reagent_containers/food/snacks/grown/mushroom/angel = 2, + /obj/item/reagent_containers/food/snacks/grown/chili = 2, + /obj/item/reagent_containers/food/snacks/grown/whitebeet = 5, + /obj/item/reagent_containers/food/snacks/grown/potato = 4, + /obj/item/reagent_containers/food/snacks/grown/potato/sweet = 4, + /obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle = 4, + /obj/item/reagent_containers/food/snacks/grown/mushroom/plumphelmet = 4, + /obj/item/reagent_containers/food/snacks/grown/corn = 4 + ) + +/obj/effect/spawner/random/food_or_drink/garden/cold + name = "frigid garden seeder" + loot = list( + /obj/item/reagent_containers/food/snacks/grown/bluecherries = 1, + /obj/item/reagent_containers/food/snacks/grown/galaxythistle = 1, + /obj/item/reagent_containers/food/snacks/grown/berries/death/stealth = 1, + /obj/item/seeds/random = 1, + /obj/item/reagent_containers/food/snacks/grown/poppy = 2, + /obj/item/reagent_containers/food/snacks/grown/tomato/blue = 2, + /obj/item/reagent_containers/food/snacks/grown/berries/poison/stealth = 2, + /obj/item/reagent_containers/food/snacks/grown/berries = 4, + /obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle = 4, + /obj/item/reagent_containers/food/snacks/grown/oat = 4, + /obj/item/reagent_containers/food/snacks/grown/grapes/green = 4, + /obj/item/reagent_containers/food/snacks/grown/grass = 4, + /obj/item/reagent_containers/food/snacks/grown/harebell = 5, + /obj/item/seeds/starthistle = 5 + ) + +/obj/effect/spawner/random/food_or_drink/garden/sick + name = "sickly garden seeder" + loot = list( + /obj/item/reagent_containers/food/snacks/grown/cannabis/rainbow = 1, + /obj/item/reagent_containers/food/snacks/grown/cannabis/death = 1, + /obj/item/seeds/replicapod = 1, + /obj/item/reagent_containers/food/snacks/grown/mushroom/angel = 1, + /obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap = 2, + /obj/item/seeds/tower/steel = 2, + /obj/item/reagent_containers/food/snacks/grown/cannabis = 2, + /obj/item/seeds/random = 2, + /obj/item/reagent_containers/food/snacks/grown/mushroom/jupitercup = 2, + /obj/item/reagent_containers/food/snacks/grown/cherrybulbs = 4, + /obj/item/reagent_containers/food/snacks/grown/mushroom/amanita = 4, + /obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap = 4, + /obj/item/reagent_containers/food/snacks/grown/mushroom/reishi = 4, + /obj/item/reagent_containers/food/snacks/grown/berries/glow = 4 + ) + +/obj/effect/spawner/random/food_or_drink/garden/seaweed + name = "seaweed patch seeder" + loot = list( + /obj/item/reagent_containers/food/snacks/grown/seaweed + ) + +/obj/effect/spawner/random/food_or_drink/seed + name = "GO FORTH AND CULTIVATE" + icon_state = "seed"//sneed + loot = list( + /obj/item/seeds/aloe, + /obj/item/seeds/ambrosia, + /obj/item/seeds/apple, + /obj/item/seeds/cotton, + /obj/item/seeds/banana, + /obj/item/seeds/berry, + /obj/item/seeds/cabbage, + /obj/item/seeds/carrot, + /obj/item/seeds/cherry, + /obj/item/seeds/chanter, + /obj/item/seeds/chili, + /obj/item/seeds/cocoapod, + /obj/item/seeds/coffee, + /obj/item/seeds/corn, + /obj/item/seeds/eggplant, + /obj/item/seeds/garlic, + /obj/item/seeds/grape, + /obj/item/seeds/grass, + /obj/item/seeds/lemon, + /obj/item/seeds/lime, + /obj/item/seeds/onion, + /obj/item/seeds/orange, + /obj/item/seeds/peas, + /obj/item/seeds/pineapple, + /obj/item/seeds/potato, + /obj/item/seeds/poppy, + /obj/item/seeds/pumpkin, + /obj/item/seeds/wheat/rice, + /obj/item/seeds/soya, + /obj/item/seeds/sugarcane, + /obj/item/seeds/sunflower, + /obj/item/seeds/tea, + /obj/item/seeds/tobacco, + /obj/item/seeds/tomato, + /obj/item/seeds/tower, + /obj/item/seeds/watermelon, + /obj/item/seeds/wheat, + /obj/item/seeds/whitebeet, + /obj/item/seeds/amanita, + /obj/item/seeds/glowshroom, + /obj/item/seeds/liberty, + /obj/item/seeds/nettle, + /obj/item/seeds/plump, + /obj/item/seeds/reishi, + /obj/item/seeds/cannabis, + /obj/item/seeds/starthistle, + /obj/item/seeds/cherry/bomb, + /obj/item/seeds/berry/glow, + /obj/item/seeds/sunflower/moonflower + ) diff --git a/code/game/objects/effects/spawners/random.dm/maintenance.dm b/code/game/objects/effects/spawners/random.dm/maintenance.dm new file mode 100644 index 000000000000..53a61e0f877d --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/maintenance.dm @@ -0,0 +1,57 @@ +/obj/effect/spawner/random/maintenance + name = "maintenance loot spawner" + desc = "Come on Lady Luck, spawn me a pair of sunglasses." + icon_state = "loot" + // see code/_globalvars/lists/maintenance_loot.dm for loot table + +/obj/effect/spawner/random/maintenance/Initialize(mapload) + loot = GLOB.maintenance_loot + . = ..() + +/obj/effect/spawner/random/maintenance/skew_loot_weights(list/loot_list, exponent) + ///We only need to skew the weights once, since it's a global list used by all maint spawners. + var/static/already_done = FALSE + if(loot_list == GLOB.maintenance_loot && already_done) + return + already_done = TRUE + return ..() + +/obj/effect/spawner/random/maintenance/spawn_loot(lootcount_override) + if(isnull(lootcount_override)) + lootcount_override = spawn_loot_count + . = ..() + + /* Fucks everything. Investigate further + // In addition, closets that are closed will have the maintenance loot inserted inside. + for(var/obj/structure/closet/closet in get_turf(src)) + if(!closet.opened) + closet.take_contents() + */ + +/obj/effect/spawner/random/maintenance/two + name = "2 x maintenance loot spawner" + spawn_loot_count = 2 + +/obj/effect/spawner/random/maintenance/three + name = "3 x maintenance loot spawner" + spawn_loot_count = 3 + +/obj/effect/spawner/random/maintenance/four + name = "4 x maintenance loot spawner" + spawn_loot_count = 4 + +/obj/effect/spawner/random/maintenance/five + name = "5 x maintenance loot spawner" + spawn_loot_count = 5 + +/obj/effect/spawner/random/maintenance/six + name = "6 x maintenance loot spawner" + spawn_loot_count = 6 + +/obj/effect/spawner/random/maintenance/seven + name = "7 x maintenance loot spawner" + spawn_loot_count = 7 + +/obj/effect/spawner/random/maintenance/eight + name = "8 x maintenance loot spawner" + spawn_loot_count = 8 diff --git a/code/game/objects/effects/spawners/random.dm/medical.dm b/code/game/objects/effects/spawners/random.dm/medical.dm new file mode 100644 index 000000000000..a0d5a6db53b9 --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/medical.dm @@ -0,0 +1,145 @@ +/obj/effect/spawner/random/medical + name = "medical loot spawner" + desc = "Doc, gimmie something good." + +/obj/effect/spawner/random/medical/minor_healing + name = "minor healing spawner" + icon_state = "gauze" + loot = list( + /obj/item/stack/medical/suture, + /obj/item/stack/medical/mesh, + /obj/item/stack/medical/gauze, + ) + +/obj/effect/spawner/random/medical/organs + name = "ayylien organ spawner" + loot = list( + /obj/item/organ/heart/gland/electric = 3, + /obj/item/organ/heart/gland/trauma = 4, + /obj/item/organ/heart/gland/egg = 7, + /obj/item/organ/heart/gland/chem = 5, + /obj/item/organ/heart/gland/mindshock = 5, + /obj/item/organ/heart/gland/plasma = 7, + /obj/item/organ/heart/gland/transform = 5, + /obj/item/organ/heart/gland/slime = 4, + /obj/item/organ/heart/gland/spiderman = 5, + /obj/item/organ/heart/gland/ventcrawling = 1, + /obj/item/organ/body_egg/alien_embryo = 1, + /obj/item/organ/regenerative_core = 2) + spawn_loot_count = 3 + +/obj/effect/spawner/random/medical/memeorgans + name = "meme organ spawner" + loot = list( + /obj/item/organ/ears/penguin, + /obj/item/organ/ears/cat, + /obj/item/organ/eyes/compound, + /obj/item/organ/eyes/snail, + /obj/item/organ/tongue/bone, + /obj/item/organ/tongue/fly, + /obj/item/organ/tongue/snail, + /obj/item/organ/tongue/lizard, + /obj/item/organ/tongue/alien, + /obj/item/organ/tongue/ethereal, + /obj/item/organ/tongue/robot, + /obj/item/organ/tongue/zombie, + /obj/item/organ/appendix, + /obj/item/organ/liver/fly, + /obj/item/organ/lungs/plasmaman, + /obj/item/organ/tail/cat, + /obj/item/organ/tail/lizard + ) + spawn_loot_count = 5 + +/obj/effect/spawner/random/medical/surgery_tool/common + name = "Surgery tool spawner" + icon_state = "scapel" + loot = list( + /obj/item/scalpel, + /obj/item/hemostat, + /obj/item/retractor, + /obj/item/circular_saw, + /obj/item/surgicaldrill, + /obj/item/cautery, + ) + +/obj/effect/spawner/random/medical/surgery_tool/adv + loot = list( + /obj/item/scalpel/advanced, + /obj/item/retractor/advanced, + /obj/item/surgicaldrill/advanced, + ) + +/obj/effect/spawner/random/medical/surgery_tool + loot = list( + /obj/effect/spawner/random/medical/surgery_tool/common = 120, + /obj/effect/spawner/random/medical/surgery_tool/adv = 10, + ) + +/obj/effect/spawner/random/medical/medkit + name = "medkit spawner" + icon_state = "medkit" + loot = list( + /obj/item/storage/firstaid/regular = 10, + /obj/item/storage/firstaid/o2 = 10, + /obj/item/storage/firstaid/fire = 10, + /obj/item/storage/firstaid/brute = 10, + /obj/item/storage/firstaid/toxin = 10, + /obj/item/storage/firstaid/advanced = 1, + ) + +/obj/effect/spawner/random/medical/patient_stretcher + name = "patient stretcher spawner" + icon_state = "rollerbed" + loot = list( + /obj/structure/bed/roller, + /obj/vehicle/ridden/wheelchair, + ) + +/obj/effect/spawner/random/medical/supplies + name = "medical supplies spawner" + icon_state = "box_small" + loot = list( + /obj/item/storage/box/hug, + /obj/item/storage/box/pillbottles, + /obj/item/storage/box/bodybags, + /obj/item/storage/box/rxglasses, + /obj/item/storage/box/beakers, + /obj/item/storage/box/gloves, + /obj/item/storage/box/masks, + /obj/item/storage/box/syringes, + ) + +/obj/effect/spawner/random/medical/beaker + loot = list( + /obj/item/reagent_containers/glass/beaker = 300, + /obj/item/reagent_containers/glass/beaker/large = 200, + /obj/item/reagent_containers/glass/beaker/plastic = 50, + /obj/item/reagent_containers/glass/beaker/meta = 10, + /obj/item/reagent_containers/glass/beaker/noreact = 5, + /obj/item/reagent_containers/glass/beaker/bluespace = 1, + ) + +/obj/effect/spawner/random/medical/prosthetic + loot = list( + /obj/item/bodypart/l_arm/robot/surplus = 1, + /obj/item/bodypart/r_arm/robot/surplus = 1, + /obj/item/bodypart/leg/left/robot/surplus = 1, + /obj/item/bodypart/leg/right/robot/surplus = 1, + ) + +/obj/effect/spawner/random/medical/chem_jug + loot = list( + /obj/item/reagent_containers/glass/chem_jug/carbon, + /obj/item/reagent_containers/glass/chem_jug/oxygen, + /obj/item/reagent_containers/glass/chem_jug/nitrogen, + /obj/item/reagent_containers/glass/chem_jug/hydrogen, + /obj/item/reagent_containers/glass/chem_jug/radium, + /obj/item/reagent_containers/glass/chem_jug/aluminium, + /obj/item/reagent_containers/glass/chem_jug/chlorine, + /obj/item/reagent_containers/glass/chem_jug/copper, + /obj/item/reagent_containers/glass/chem_jug/bromine, + /obj/item/reagent_containers/glass/chem_jug/iodine, + /obj/item/reagent_containers/glass/chem_jug/potassium, + /obj/item/reagent_containers/glass/chem_jug/sulfur + ) diff --git a/code/game/objects/effects/spawners/random.dm/random.dm b/code/game/objects/effects/spawners/random.dm/random.dm new file mode 100644 index 000000000000..0e6606f3b9ee --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/random.dm @@ -0,0 +1,175 @@ +/** + * Base class for all random spawners. + */ +/obj/effect/spawner/random + icon = 'icons/effects/mapping/random_spawners.dmi' + icon_state = "loot" + layer = OBJ_LAYER + /// Stops persistent lootdrop spawns from being shoved into lockers + anchored = TRUE + /// A list of possible items to spawn e.g. list(/obj/item, /obj/structure, /obj/effect) + var/list/loot + /// The subtypes AND type to combine with the loot list + var/loot_type_path + /// The subtypes (this excludes the provided path) to combine with the loot list + var/loot_subtype_path + /// How many items will be spawned + var/spawn_loot_count = 1 + /// If the same item can be spawned twice + var/spawn_loot_double = TRUE + /// Whether the items should be distributed to offsets 0,1,-1,2,-2,3,-3.. This overrides pixel_x/y on the spawner itself + var/spawn_loot_split = FALSE + /// The pixel x/y divider offsets for spawn_loot_split (spaced 1 pixel apart by default) + var/spawn_loot_split_pixel_offsets = 2 + /// Whether the spawner should spawn all the loot in the list + var/spawn_all_loot = FALSE + /// The chance for the spawner to create loot (ignores spawn_loot_count) + var/spawn_loot_chance = 100 + /// Determines how big of a range (in tiles) we should scatter things in. + var/spawn_scatter_radius = 0 + /// Whether the items should have a random pixel_x/y offset (maxium offset distance is ±16 pixels for x/y) + var/spawn_random_offset = FALSE + /// Whether items that cannot be spawned will be removed from the loot list. Keep it TRUE unless you've a good reason. + var/remove_if_cant_spawn = TRUE + +/obj/effect/spawner/random/Initialize(mapload) + . = ..() + spawn_loot() + +///If the spawner has any loot defined, randomly picks some and spawns it. Does not cleanup the spawner. +/obj/effect/spawner/random/proc/spawn_loot(lootcount_override) + if(!prob(spawn_loot_chance)) + return + + var/list/spawn_locations = get_spawn_locations(spawn_scatter_radius) + var/spawn_loot_count = isnull(lootcount_override) ? src.spawn_loot_count : lootcount_override + + if(spawn_all_loot) + spawn_loot_count = INFINITY + spawn_loot_double = FALSE + + if(loot_type_path) + loot += typesof(loot_type_path) + + if(loot_subtype_path) + loot += subtypesof(loot_subtype_path) + + if(CONFIG_GET(number/random_loot_weight_modifier) != 1) + skew_loot_weights(loot, CONFIG_GET(number/random_loot_weight_modifier)) + + if(loot?.len) + var/loot_spawned = 0 + var/pixel_divider = FLOOR(16 / spawn_loot_split_pixel_offsets, 1) // 16 pixels offsets is max that should be allowed in any direction + while((spawn_loot_count-loot_spawned) && loot.len) + var/lootspawn = pick_weight_recursive(loot) + if(!can_spawn(lootspawn)) + if(remove_if_cant_spawn) + loot.Remove(lootspawn) + continue + if(!spawn_loot_double) + loot.Remove(lootspawn) + if(lootspawn && (spawn_scatter_radius == 0 || spawn_locations.len)) + var/turf/spawn_loc = loc + if(spawn_scatter_radius > 0) + spawn_loc = pick_n_take(spawn_locations) + + var/atom/movable/spawned_loot = make_item(spawn_loc, lootspawn) + spawned_loot.setDir(dir) + + if (!spawn_loot_split && !spawn_random_offset) + if (pixel_x != 0) + spawned_loot.pixel_x = pixel_x + if (pixel_y != 0) + spawned_loot.pixel_y = pixel_y + else if (spawn_random_offset) + spawned_loot.pixel_x = rand(-16, 16) + spawned_loot.pixel_y = rand(-16, 16) + else if (spawn_loot_split) + if (loot_spawned) + var/column = FLOOR(loot_spawned / pixel_divider, 1) + spawned_loot.pixel_x = spawn_loot_split_pixel_offsets * (loot_spawned % pixel_divider) + (column * spawn_loot_split_pixel_offsets) + spawned_loot.pixel_y = spawn_loot_split_pixel_offsets * (loot_spawned % pixel_divider) + loot_spawned++ + +///Levels out the weights of loot if lower than 1, or makes rarer spawns even more rare. +/obj/effect/spawner/random/proc/skew_loot_weights(list/loot_list, exponent) + ///This helps keeping the modified weights more or less correct, since pick_weight doesn't appreciate decimals. + var/precision = 1 + if(exponent < 1) + precision = round((1 - exponent) * 10) + 1 + for(var/loot_type in loot_list) + if(islist(loot_type)) + skew_loot_weights(loot_type, exponent) + var/loot_weight = loot_list[loot_type] + if(loot_weight <= 1) + if(exponent < 1) + loot_list[loot_type] = precision + continue + loot_list[loot_type] = round(loot_weight ** exponent * precision, 1) + +/** + * Makes the actual item related to our spawner. + * + * spawn_loc - where are we spawning it? + * type_path_to_make - what are we spawning? + **/ +/obj/effect/spawner/random/proc/make_item(spawn_loc, type_path_to_make) + return new type_path_to_make(spawn_loc) + +///If the spawner has a spawn_scatter_radius set, this creates a list of nearby turfs available that are in view and have an unblocked line to them. +/obj/effect/spawner/random/proc/get_spawn_locations(radius) + var/list/scatter_locations = list() + + if(!radius) + return scatter_locations + + for(var/turf/turf_in_view in view(radius, get_turf(src))) + if(isclosedturf(turf_in_view)) + continue + if(!has_unblocked_line(turf_in_view)) + continue + + scatter_locations += turf_in_view + + return scatter_locations + +/obj/effect/spawner/random/proc/has_unblocked_line(destination) + for(var/turf/potential_blockage as anything in get_line(get_turf(src), destination)) + if(!potential_blockage.is_blocked_turf(exclude_mobs = TRUE)) + continue + return FALSE + return TRUE + +//finds the probabilities of items spawning from a loot spawner's loot pool +/obj/item/loot_table_maker + icon = 'icons/effects/mapping/landmarks_static.dmi' + icon_state = "random_loot" + var/spawner_to_test = /obj/effect/spawner/random/maintenance //what lootdrop spawner to use the loot pool of + var/loot_count = 180 //180 is about how much maint loot spawns per map as of 11/14/2019 + //result outputs + var/list/spawned_table //list of all items "spawned" and how many + var/list/stat_table //list of all items "spawned" and their occurrance probability + +/obj/item/loot_table_maker/Initialize(mapload) + . = ..() + make_table() + +/obj/item/loot_table_maker/attack_self(mob/user) + to_chat(user, "Loot pool re-rolled.") + make_table() + +/obj/item/loot_table_maker/proc/make_table() + spawned_table = list() + stat_table = list() + var/obj/effect/spawner/random/spawner_to_table = new spawner_to_test + var/lootpool = spawner_to_table.loot + qdel(spawner_to_table) + for(var/i in 1 to loot_count) + var/loot_spawn = pick_weight_recursive(lootpool) + if(!(loot_spawn in spawned_table)) + spawned_table[loot_spawn] = 1 + else + spawned_table[loot_spawn] += 1 + stat_table += spawned_table + for(var/item in stat_table) + stat_table[item] /= loot_count diff --git a/code/game/objects/effects/spawners/random.dm/readme.md b/code/game/objects/effects/spawners/random.dm/readme.md new file mode 100644 index 000000000000..97db867f2de6 --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/readme.md @@ -0,0 +1,425 @@ +# Random Spawners + +## About + +Random spawners are an organized tool primarily for mapping to enhance replayability. The spawners can create objects, effects, and structures with different tweakable settings to get the desired outcome. You can make a spawner determine direction, rarity, number of items to spawn, pixel spacing between items, and even spread it over a large tile radius. This lets you control the atmosphere of a location. You could for instance spawn different piles of trash in maint or spawn decoration items for a room to give it more randomized flavor. The choice is yours! + +*(note the audience of this README is directed towards mappers who lack knowledge of coding)* + +## Variables + +The following variables are defined in `code/game/objects/effects/spawners/random/random.dm` that control how a spawner works. + +- `loot` - a list of possible items to spawn e.g. list(/obj/item, /obj/structure, /obj/effect) +- `loot_type_path` - this combines the subtypes AND type list with the loot list +- `loot_subtype_path` - this combines ONLY the subtypes (excludes the `loot_subtype_path`) with the loot list +- `spawn_loot_count` - how many items will be spawned +- `spawn_loot_double` - if the same item can be spawned twice from the loot list +- `spawn_loot_split` - whether the items should be distributed to offsets 0,1,-1,2,-2,3,-3.. This overrides pixel_x/y on the spawner itself +- `spawn_all_loot` - whether the spawner should spawn all the loot in the list (ignores `spawn_loot_count`) +- `spawn_loot_chance` - the chance for the spawner to create loot (ignores `spawn_loot_count`) +- `spawn_scatter_radius` - determines how big of a range (in tiles) we should scatter things in + +These variables are set to the following default values for the base `random.dm` object that all objects inherit from: + +```dm + /// these three loot values are all empty + var/list/loot + var/loot_type_path + var/loot_subtype_path + + var/spawn_loot_count = 1 // by default one item will be selected from the loot list + var/spawn_loot_double = TRUE // by default duplicate items CAN be spawned from the loot list + var/spawn_loot_split = FALSE // by default items will NOT spread out on the same tile + var/spawn_all_loot = FALSE // by default the spawner will only spawn the number of items set in spawn_loot_count + var/spawn_loot_chance = 100 // by default the spawner has a 100% chance to spawn the item(s) + var/spawn_scatter_radius = 0 // by default the spawner will spawn the items ONLY on the tile it is on +``` + +However there are some categories that overwrite these default values so pay attention to the folder or category you group your spawner in. For instance the `obj/effect/spawner/random/techstorage` category overwrites the `spawn_all_loot` and the `spawn_loot_split` variables. + +```dm +// Tech storage circuit board spawners +/obj/effect/spawner/random/techstorage + name = "generic circuit board spawner" + spawn_loot_split = TRUE + spawn_all_loot = TRUE +``` + +This means any spawner you create under the techstorage will also have those variables set to that by default. This can be overridden quite easily just be resetting the variables back to the normal state like so: + +```dm +/obj/effect/spawner/random/techstorage/data_disk + name = "data disk spawner" + spawn_all_loot = FALSE // now our loot won't all be spawned + loot = list( + /obj/item/disk/data = 49, + /obj/item/disk/nuclear/fake/obvious = 1, + ) +``` + +## Template + +All the random spawners follow the same template format to keep things consistent and unison. + +```dm +/obj/effect/spawner/random/INSERT_SPAWNER_GROUP/INSERT_SPAWNER_NAME + name = "INSERT_SPAWNER_NAME spawner" + loot = list( + /obj/item/PATH/INSERT_OBJ_1, + /obj/item/PATH/INSERT_OBJ_2, + /obj/item/PATH/INSERT_OBJ_3, + ) +``` + +All the capitalized code is the parts where you are supposed to swap out with your objects like so: + +```dm +/obj/effect/spawner/random/medical/minor_healing + name = "minor healing spawner" + loot = list( + /obj/item/stack/medical/suture, + /obj/item/stack/medical/mesh, + /obj/item/stack/medical/gauze, + ) +``` + +Find the path to different objects and add them to the list but try to be consistent with the types of the object and the spawner. For example a medical spawner shouldn't have a emag in the loot list. (use an antag spawner for that instead!) + +## Probability + +Be aware that the `loot` list uses a *weighted chance* formula to determine probability. So if there are no numbers set in the `loot` list then each object defaults to 1 and has the same probability to be selected. For our above example for the `minor_healing` spawner each medical item has a 1/3 chance to be spawned. But if we rearranged the values to this: + +```dm +/obj/effect/spawner/random/medical/minor_healing + name = "minor healing spawner" + loot = list( + /obj/item/stack/medical/suture = 2, + /obj/item/stack/medical/mesh = 1, + /obj/item/stack/medical/gauze = 1, + ) +``` + +Then now `suture` has a 50% chance of being spawned (2/4), `mesh` has a 25% chance of being spawned (1/4), and `gauze` also has a 25% chance of being spawned (1/4). If we add another item into the mix then we get the following: + +```dm +/obj/effect/spawner/random/medical/minor_healing + name = "minor healing spawner" + loot = list( + /obj/item/stack/medical/suture = 2, + /obj/item/stack/medical/mesh = 1, + /obj/item/stack/medical/gauze = 1, + /obj/item/reagent_containers/syringe = 1, + ) +``` + +Suture is 40% (2/5), Mesh is 20% (1/5), Gauze is 20% (1/5), and Syringe is 20% (1/5). A weighted list has the advantage of not needing to update every item in the list when adding a new item. If the list was based on a straight percent values, then each new item would require to manually go and edit ALL the items in the list. For big lists that would become very tedious. This is why we use weighted lists to determine probability! + +## Style + +Here are some simple guidelines that you should stick to when making a new spawner: + +### If ALL the items have the same chance, we should not set a weighted value to the item + +Do not put `/obj/item/ = 1` unless other items have different spawn chances + +Good: + +```dm +/obj/effect/spawner/random/medical/minor_healing + name = "minor healing spawner" + loot = list( + /obj/item/stack/medical/suture = 2, + /obj/item/stack/medical/mesh = 1, + /obj/item/stack/medical/gauze = 1, + /obj/item/reagent_containers/syringe = 1, + ) +``` + +Also Good: + +```dm +/obj/effect/spawner/random/medical/minor_healing + name = "minor healing spawner" + loot = list( + /obj/item/stack/medical/suture, + /obj/item/stack/medical/mesh, + /obj/item/stack/medical/gauze, + /obj/item/reagent_containers/syringe, + ) +``` + +Bad: + +```dm +/obj/effect/spawner/random/medical/minor_healing + name = "minor healing spawner" + loot = list( + /obj/item/stack/medical/suture = 1, + /obj/item/stack/medical/mesh = 1, + /obj/item/stack/medical/gauze = 1, + /obj/item/reagent_containers/syringe = 1, + ) +``` + + +### Sort the list from highest probability to lowest + +Sort from top to bottom. The rarest items for your spawner should be at the bottom of the list. + +Good: + +```dm +/obj/effect/spawner/random/exotic/armory + name = "armory loot spawner" + loot = list( + /obj/item/gun/ballistic/automatic/pistol = 8, + /obj/item/gun/ballistic/shotgun/automatic/combat = 5, + /obj/item/storage/box/syndie_kit/throwing_weapons = 3, + /obj/item/grenade/clusterbuster/teargas = 2, + /obj/item/grenade/clusterbuster = 2, + /obj/item/gun/ballistic/automatic/pistol/deagle = 1, + /obj/item/gun/ballistic/revolver/mateba = 1, + ) +``` + +Bad: + +```dm +/obj/effect/spawner/random/exotic/armory + name = "armory loot spawner" + loot = list( + /obj/item/storage/box/syndie_kit/throwing_weapons = 3, + /obj/item/gun/ballistic/automatic/pistol = 8, + /obj/item/gun/ballistic/revolver/mateba = 1, + /obj/item/grenade/clusterbuster/teargas = 2, + /obj/item/gun/ballistic/automatic/pistol/deagle = 1, + /obj/item/grenade/clusterbuster = 2, + /obj/item/gun/ballistic/shotgun/automatic/combat = 5, + ) +``` + +### Always put the `loot` list at the bottom of your spawner + +This is just to keep things organized. + +Good: + +```dm +/obj/effect/spawner/random/food_or_drink/donkpockets + name = "donk pocket box spawner" + spawn_loot_double = FALSE + loot = list( + /obj/item/storage/box/donkpockets/donkpocketspicy, + /obj/item/storage/box/donkpockets/donkpocketteriyaki, + /obj/item/storage/box/donkpockets/donkpocketpizza, + /obj/item/storage/box/donkpockets/donkpocketberry, + /obj/item/storage/box/donkpockets/donkpockethonk, + ) +``` + +Bad: + +```dm +/obj/effect/spawner/random/food_or_drink/donkpockets + name = "donk pocket box spawner" + loot = list( + /obj/item/storage/box/donkpockets/donkpocketspicy, + /obj/item/storage/box/donkpockets/donkpocketteriyaki, + /obj/item/storage/box/donkpockets/donkpocketpizza, + /obj/item/storage/box/donkpockets/donkpocketberry, + /obj/item/storage/box/donkpockets/donkpockethonk, + ) + spawn_loot_double = FALSE +``` + +### Always put a comma at the last item in the `loot` list + +This will make it easier for people to add items to your spawner later without getting frustrating code errors. + +Good: + +```dm +/obj/effect/spawner/random/medical/minor_healing + name = "minor healing spawner" + loot = list( + /obj/item/stack/medical/suture, + /obj/item/stack/medical/mesh, + /obj/item/stack/medical/gauze, + ) +``` + +Bad: + +```dm +/obj/effect/spawner/random/medical/minor_healing + name = "minor healing spawner" + loot = list( + /obj/item/stack/medical/suture, + /obj/item/stack/medical/mesh, + /obj/item/stack/medical/gauze // if someone adds an item to the list later it will cause an error + ) +``` + +### Keep the same tab formatting for the `loot` list (unless there is only one item) + +Again, this is just good code organization. If there is only one item, then encase that item in `loot = list(item)` + +Good: + +```dm +/obj/effect/spawner/random/medical/minor_healing + name = "minor healing spawner" + loot = list( + /obj/item/stack/medical/suture, + /obj/item/stack/medical/mesh, + /obj/item/stack/medical/gauze, + ) +``` + +Also Good: + +```dm +/obj/effect/spawner/random/structure/crate_abandoned + icon = 'icons/effects/landmarks_static.dmi' + icon_state = "loot_site" + spawn_loot_chance = 20 + loot = list(/obj/structure/closet/crate/secure/loot) +``` + +Bad: + +```dm +/obj/effect/spawner/random/medical/minor_healing + name = "minor healing spawner" + loot = list( + /obj/item/stack/medical/suture, + /obj/item/stack/medical/mesh, + /obj/item/stack/medical/gauze, + ) +``` + +Also Bad: + +```dm +/obj/effect/spawner/random/medical/minor_healing + name = "minor healing spawner" + loot = list(/obj/item/stack/medical/suture, + /obj/item/stack/medical/mesh, + /obj/item/stack/medical/gauze,) +``` + +### Try to keep the total combined weight of your `loot` list to sane values (Aim for 5, 10, 20, 50, or 100) + +This makes the math probability easier for people to calculate. (this is recommended, but not always possible) + +Good: + +```dm +/obj/effect/spawner/random/trash/cigbutt + name = "cigarette butt spawner" + loot = list( + /obj/item/cigbutt = 65, + /obj/item/cigbutt/roach = 20, + /obj/item/cigbutt/cigarbutt = 15, + ) +``` + +Also Good: + +```dm +/obj/effect/spawner/random/trash/botanical_waste + name = "botanical waste spawner" + loot = list( + /obj/item/grown/bananapeel = 6, + /obj/item/grown/corncob = 3, + /obj/item/food/grown/bungopit = 1, + ) +``` + +Bad: + +```dm +/obj/effect/spawner/random/entertainment/money_large + name = "large money spawner" + loot = list( + /obj/item/stack/spacecash/c1 = 521, + /obj/item/stack/spacecash/c10 = 378, + /obj/item/stack/spacecash/c20 = 212, + /obj/item/stack/spacecash/c50 = 205, + /obj/item/stack/spacecash/c100 = 71, + /obj/item/stack/spacecash/c200 = 60, + /obj/item/stack/spacecash/c500 = 57, + /obj/item/stack/spacecash/c1000 = 41, + /obj/item/stack/spacecash/c10000 = 12, + ) +``` + +### Do not put empty items in the loot list + +Instead use the `spawn_loot_chance` var to control the chance for the spawner to spawn nothing. + +Good: + +```dm +/obj/effect/spawner/random/structure/crate_abandoned + name = "locked crate spawner" + spawn_loot_chance = 20 + loot = list(/obj/structure/closet/crate/secure/loot) +``` + + +Bad: + +```dm +/obj/effect/spawner/lootdrop/crate_spawner + name = "lootcrate spawner" + loot = list( + "" = 80 + /obj/structure/closet/crate/secure/loot = 20, + ) +``` + +### Avoid making a spawner that is a duplicate + +We don't want copy-cat spawners that are almost identical. Instead merge spawners together if possible. + +Good: + +```dm +/obj/effect/spawner/random/exotic/armory + name = "armory loot spawner" + icon_state = "pistol" + loot = list( + /obj/item/gun/ballistic/automatic/pistol = 8, + /obj/item/gun/ballistic/shotgun/automatic/combat = 5, + /obj/item/storage/box/syndie_kit/throwing_weapons = 3, + /obj/item/grenade/clusterbuster/teargas = 2, + /obj/item/grenade/clusterbuster = 2, + /obj/item/gun/ballistic/automatic/pistol/deagle, + /obj/item/gun/ballistic/revolver/mateba, + ) +``` + + +Bad: + +```dm +/obj/effect/spawner/lootdrop/armory_contraband + loot = list( + /obj/item/gun/ballistic/automatic/pistol = 8, + /obj/item/gun/ballistic/shotgun/automatic/combat = 5, + /obj/item/gun/ballistic/automatic/pistol/deagle, + /obj/item/gun/ballistic/revolver/mateba + ) + +/obj/effect/spawner/lootdrop/armory_contraband/metastation + loot = list( + /obj/item/gun/ballistic/automatic/pistol = 8, + /obj/item/gun/ballistic/shotgun/automatic/combat = 5, + /obj/item/storage/box/syndie_kit/throwing_weapons = 3, + /obj/item/gun/ballistic/automatic/pistol/deagle, + /obj/item/gun/ballistic/revolver/mateba + ) + +``` diff --git a/code/game/objects/effects/spawners/random.dm/salvaging.dm b/code/game/objects/effects/spawners/random.dm/salvaging.dm new file mode 100644 index 000000000000..66543e3ef47a --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/salvaging.dm @@ -0,0 +1,207 @@ +//GENERIC +/obj/effect/spawner/random/salvage_capacitor + icon_state = "matter_bin" + loot = list( + /obj/item/stock_parts/capacitor = 120, + /obj/item/stock_parts/capacitor/adv = 20, + /obj/item/stock_parts/capacitor/super = 5, + ) + +/obj/effect/spawner/random/salvage_scanning + icon_state = "matter_bin" + loot = list( + /obj/item/stock_parts/scanning_module = 120, + /obj/item/stock_parts/scanning_module/adv = 20, + /obj/item/stock_parts/scanning_module/phasic = 5, + ) + +/obj/effect/spawner/random/salvage_manipulator + icon_state = "matter_bin" + loot = list( + /obj/item/stock_parts/manipulator = 120, + /obj/item/stock_parts/manipulator/nano = 20, + /obj/item/stock_parts/manipulator/pico = 5, + ) + +/obj/effect/spawner/random/salvage_matter_bin + icon_state = "matter_bin" + loot = list( + /obj/item/stock_parts/matter_bin = 120, + /obj/item/stock_parts/matter_bin/adv = 20, + /obj/item/stock_parts/matter_bin/super = 5, + ) + +/obj/effect/spawner/random/salvage_laser + icon_state = "matter_bin" + loot = list( + /obj/item/stock_parts/micro_laser = 120, + /obj/item/stock_parts/micro_laser/high = 20, + /obj/item/stock_parts/micro_laser/ultra = 5, + ) + +//PROTOLATHE + +/obj/effect/spawner/random/random_gun_protolathe_lootdrop + icon_state = "laser_gun" + loot = list( + /obj/item/gun/energy/lasercannon = 1, + /obj/item/gun/ballistic/automatic/smg/skm_carbine/inteq/proto = 1, + /obj/item/gun/energy/temperature/security = 1, + ) + +/obj/effect/spawner/random/random_ammo_protolathe_lootdrop + icon_state = "rubbershot" + loot = list( + /obj/item/stock_parts/cell/gun/upgraded = 5, + /obj/item/ammo_box/magazine/smgm9mm = 7, + ) + +//DESTRUCTIVE ANAL //i'm killing you +/obj/effect/spawner/random/destructive_anal_loot //what do people usually put in these things anayways + loot = list( + /obj/item/storage/toolbox/syndicate/empty = 650, + /obj/item/gun/ballistic/automatic/pistol/ringneck = 500, + /obj/item/camera_bug = 500, + /obj/item/clothing/gloves/combat = 200, + /obj/item/clothing/head/chameleon = 200, + /obj/item/pen/sleepy = 200, + /obj/item/reagent_containers/hypospray/medipen/stimpack/traitor = 100, + /obj/item/grenade/c4 = 100, + + /obj/item/wrench/syndie = 30, + /obj/item/screwdriver/nuke = 30, + /obj/item/crowbar/syndie = 30, + /obj/item/wirecutters/syndie = 30, + /obj/item/multitool/syndie = 30, + ) + +/obj/effect/spawner/random/salvage_machine + name = "salvageable machine spawner" + icon_state = "arcade" + loot = list( + /obj/structure/salvageable/protolathe, + /obj/structure/salvageable/circuit_imprinter, + /obj/structure/salvageable/server, + /obj/structure/salvageable/machine, + /obj/structure/salvageable/autolathe, + /obj/structure/salvageable/computer, + /obj/structure/salvageable/destructive_analyzer + ) + +/obj/effect/spawner/random/salvage + name = "salvage mats spawner" + icon_state = "rods" + loot = list( + /obj/item/stack/ore/salvage/scrapmetal, + /obj/item/stack/ore/salvage/scrapgold, + /obj/item/stack/ore/salvage/scrapplasma, + /obj/item/stack/ore/salvage/scrapsilver, + /obj/item/stack/ore/salvage/scraptitanium, + /obj/item/stack/ore/salvage/scrapbluespace, + /obj/item/stack/ore/salvage/scrapuranium + ) + +/obj/effect/spawner/random/salvage/half + name = "50% salvage spawner" + spawn_loot_chance = 50 + loot = list( + /obj/effect/spawner/random/maintenance, + /obj/effect/spawner/random/salvage_machine, + /obj/effect/spawner/random/exotic/ripley, + /obj/structure/closet/crate/secure/loot, + ) + +/obj/effect/spawner/random/salvage/metal + loot = list( + /obj/item/stack/ore/salvage/scrapmetal + ) + +/obj/effect/spawner/random/salvage/metal/Initialize() + spawn_loot_count = pick(list( + 1, + 2, + 3, + 4 + )) + return ..() + +/obj/effect/spawner/random/salvage/gold + loot = list( + /obj/item/stack/ore/salvage/scrapgold + ) + +/obj/effect/spawner/random/salvage/gold/Initialize() + spawn_loot_count = pick(list( + 1, + 2, + 3, + 4 + )) + return ..() + +/obj/effect/spawner/random/salvage/plasma + loot = list( + /obj/item/stack/ore/salvage/scrapplasma + ) +/obj/effect/spawner/random/salvage/plasma/Initialize() + spawn_loot_count = pick(list( + 1, + 2, + 3, + 4 + )) + return ..() + + +/obj/effect/spawner/random/salvage/silver + loot = list( + /obj/item/stack/ore/salvage/scrapsilver + ) +/obj/effect/spawner/random/salvage/silver/Initialize() + spawn_loot_count = pick(list( + 1, + 2, + 3, + 4 + )) + return ..() + + +/obj/effect/spawner/random/salvage/titanium + loot = list( + /obj/item/stack/ore/salvage/scraptitanium + ) +/obj/effect/spawner/random/salvage/titanium/Initialize() + spawn_loot_count = pick(list( + 1, + 2, + 3, + 4 + )) + return ..() + +/obj/effect/spawner/random/salvage/bluespace + loot = list( + /obj/item/stack/ore/salvage/scrapbluespace + ) +/obj/effect/spawner/random/salvage/bluespace/Initialize() + spawn_loot_count = pick(list( + 1, + 2, + 3, + 4 + )) + return ..() + +/obj/effect/spawner/random/salvage/uranium + loot = list( + /obj/item/stack/ore/salvage/scrapuranium + ) +/obj/effect/spawner/random/salvage/uranium/Initialize() + spawn_loot_count = pick(list( + 1, + 2, + 3, + 4 + )) + return ..() diff --git a/code/game/objects/effects/spawners/random.dm/structure.dm b/code/game/objects/effects/spawners/random.dm/structure.dm new file mode 100644 index 000000000000..0264b3d76a9e --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/structure.dm @@ -0,0 +1,91 @@ + +/obj/effect/spawner/random/structure + name = "structure spawner" + desc = "Now you see me, now you don't..." + icon_state = "girder" + +/obj/effect/spawner/random/structure/crate_abandoned + name = "locked crate spawner" + icon_state = "crate_secure" + spawn_loot_chance = 20 + loot = list(/obj/structure/closet/crate/secure/loot) + +/obj/effect/spawner/random/structure/girder + name = "girder spawner" + icon_state = "girder" + spawn_loot_chance = 90 + loot = list( // 80% chance normal girder, 10% chance of displaced, 10% chance of nothing + /obj/structure/girder = 8, + /obj/structure/girder/displaced = 1, + ) + +/obj/effect/spawner/random/structure/grille + name = "grille spawner" + icon_state = "grille" + spawn_loot_chance = 90 + loot = list( // 80% chance normal grille, 10% chance of broken, 10% chance of nothing + /obj/structure/grille = 8, + /obj/structure/grille/broken = 1, + ) + +/obj/effect/spawner/random/structure/furniture_parts + name = "furniture parts spawner" + icon_state = "table_parts" + loot = list( + /obj/structure/table_frame, + /obj/structure/table_frame/wood, + /obj/item/rack_parts, + ) + +/obj/effect/spawner/random/structure/table_or_rack + name = "table or rack spawner" + icon_state = "rack_parts" + loot = list( + /obj/effect/spawner/random/structure/table, + /obj/structure/rack, + ) + +/obj/effect/spawner/random/structure/table + name = "table spawner" + icon_state = "table" + loot = list( + /obj/structure/table = 40, + /obj/structure/table/wood = 30, + /obj/structure/table/glass = 20, + /obj/structure/table/reinforced = 5, + /obj/structure/table/wood/poker = 5, + ) + +/obj/effect/spawner/random/structure/closet_empty + name = "empty closet spawner" + icon_state = "locker" + loot = list( + /obj/structure/closet = 850, + /obj/structure/closet/cabinet = 150, + /obj/structure/closet/acloset = 1, + ) + +/obj/effect/spawner/random/structure/closet_empty/crate + name = "empty crate spawner" + icon_state = "crate" + loot = list( + /obj/structure/closet/crate = 20, + /obj/structure/closet/crate/wooden = 1, + /obj/structure/closet/crate/internals = 1, + /obj/structure/closet/crate/medical = 1, + /obj/structure/closet/crate/freezer = 1, + /obj/structure/closet/crate/radiation = 1, + /obj/structure/closet/crate/hydroponics = 1, + /obj/structure/closet/crate/engineering = 1, + /obj/structure/closet/crate/engineering/electrical = 1, + /obj/structure/closet/crate/science = 1, + ) + +/obj/effect/spawner/random/structure/barricade + name = "barricade spawner" + icon_state = "barricade" + spawn_loot_chance = 80 + loot = list( + /obj/structure/barricade/wooden, + /obj/structure/barricade/wooden/crude, + ) diff --git a/code/game/objects/effects/spawners/random.dm/trash.dm b/code/game/objects/effects/spawners/random.dm/trash.dm new file mode 100644 index 000000000000..3c15e77106a3 --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/trash.dm @@ -0,0 +1,282 @@ +/obj/effect/spawner/random/trash + name = "trash spawner" + desc = "Ewwwwwww gross." + icon_state = "trash" + +/obj/effect/spawner/random/trash/garbage + name = "garbage spawner" + loot = list( + /obj/effect/spawner/random/trash/food_packaging = 20, + /obj/item/trash/can = 15, + /obj/item/shard = 10, + /obj/effect/spawner/random/trash/cigbutt = 10, + /obj/effect/spawner/random/trash/botanical_waste = 5, + /obj/item/broken_bottle = 5, + /obj/item/light/tube/broken = 5, + /obj/item/light/bulb/broken = 5, + /obj/item/assembly/mousetrap/armed = 5, + /obj/item/stack/cable_coil = 5, + /obj/item/trash/candle = 1, + /obj/item/reagent_containers/glass/rag = 1, + /obj/item/popsicle_stick = 1, + /obj/item/reagent_containers/syringe = 1, + /obj/item/shard/plasma = 1, + ) + +/obj/effect/spawner/random/trash/deluxe_garbage + name = "fancy deluxe garbage spawner" + loot = list( + /obj/effect/spawner/random/trash/garbage = 25, + /obj/effect/spawner/random/trash/food_packaging = 10, + /obj/effect/spawner/random/entertainment/money = 10, + /obj/effect/spawner/random/trash/crushed_can = 10, + /obj/item/shard/plasma = 5, + /obj/item/reagent_containers/pill/floorpill = 5, + /obj/effect/spawner/random/trash/soap = 3, + /obj/item/broken_bottle = 3, + /obj/effect/spawner/random/engineering/tool/common = 1, + /mob/living/simple_animal/mouse = 1, + /obj/item/reagent_containers/glass/rag = 1, + /obj/effect/spawner/random/entertainment/drugs= 1, + /obj/item/reagent_containers/syringe = 1, + /obj/effect/spawner/random/entertainment/cigar = 1, + /obj/item/stack/ore/gold = 1, + ) + +/obj/effect/spawner/random/trash/cigbutt + name = "cigarette butt spawner" + loot = list( + /obj/item/cigbutt = 25, + /obj/item/cigbutt/roach = 25, + /obj/effect/decal/cleanable/ash = 25, + /obj/item/cigbutt/cigarbutt = 15, + ) + +/obj/effect/spawner/random/trash/food_packaging + name = "empty food packaging spawner" + icon_state = "chips" + loot = list( + /obj/item/trash/raisins = 2, + /obj/item/trash/cheesie = 2, + /obj/item/trash/candy = 2, + /obj/item/trash/chips = 2, + /obj/item/trash/sosjerky = 2, + /obj/item/trash/pistachios = 2, + /obj/item/trash/boritos = 1, + /obj/item/trash/can/food/beans = 1, + /obj/item/trash/can/food/peaches = 1, + /obj/item/trash/popcorn = 1, + /obj/item/trash/energybar = 1, + /obj/item/trash/can/food/peaches/maint = 1, + /obj/item/trash/semki = 1, + /obj/item/trash/syndi_cakes = 1, + /obj/item/trash/tray = 1, + ) + +/obj/effect/spawner/random/trash/botanical_waste + name = "botanical waste spawner" + icon_state = "peel" + loot = list( + /obj/item/grown/bananapeel = 6, + /obj/item/grown/corncob = 3, + ) + +/obj/effect/spawner/random/trash/grille_or_waste + name = "grille or waste spawner" + icon_state = "grille" + loot = list( + /obj/structure/grille = 5, + /obj/effect/spawner/random/trash/food_packaging = 3, + /obj/effect/spawner/random/trash/cigbutt = 1, + /obj/item/reagent_containers/food/snacks/deadmouse = 1, + ) + +/obj/effect/spawner/random/trash/decal + icon_state = "vomit" + loot = list( + /obj/effect/decal/cleanable/greenglow/filled = 30, + /obj/effect/decal/cleanable/greenglow/ecto = 1, + /obj/effect/decal/cleanable/glass = 30, + /obj/effect/decal/cleanable/glass/plasma = 30, + /obj/effect/decal/cleanable/glass/strange = 30, + /obj/effect/decal/cleanable/molten_object = 30, + /obj/effect/decal/cleanable/molten_object/large = 30, + /obj/effect/decal/cleanable/oil = 30, + /obj/effect/decal/cleanable/oil/slippery = 1, // :) + /obj/effect/decal/cleanable/plastic = 30, + /obj/effect/decal/cleanable/ash = 30, + /obj/effect/decal/cleanable/ash/large = 30, + ) + +/obj/effect/spawner/random/trash/mess + name = "gross decal spawner" + icon_state = "vomit" + loot = list( + /obj/effect/decal/cleanable/dirt = 6, + /obj/effect/decal/cleanable/garbage = 3, + /obj/effect/decal/cleanable/vomit/old = 3, + /obj/effect/decal/cleanable/blood/gibs/old = 3, + /obj/effect/decal/cleanable/insectguts = 1, + /obj/effect/decal/cleanable/greenglow/ecto = 1, + /obj/effect/decal/cleanable/wrapping = 1, + /obj/effect/decal/cleanable/plastic = 1, + /obj/effect/decal/cleanable/glass = 1, + ) + +/obj/effect/spawner/random/trash/grime + name = "trash and grime spawner" + spawn_loot_count = 5 + spawn_scatter_radius = 2 + loot = list( // This spawner will scatter garbage around a dirty site. + /obj/effect/spawner/random/trash/garbage = 6, + /mob/living/simple_animal/hostile/cockroach = 5, + /obj/effect/decal/cleanable/garbage = 4, + /obj/effect/decal/cleanable/vomit/old = 3, + /obj/effect/spawner/random/trash/cigbutt = 2, + ) + +/obj/effect/spawner/random/trash/moisture + name = "water hazard spawner" + icon_state = "caution" + spawn_loot_count = 2 + spawn_scatter_radius = 1 + loot = list( // This spawner will scatter water related items around a moist site. + /obj/item/clothing/head/cone = 7, + /obj/item/clothing/suit/caution = 3, + /mob/living/simple_animal/hostile/retaliate/frog = 2, + /obj/item/reagent_containers/glass/rag = 2, + /obj/item/reagent_containers/glass/bucket = 2, + /obj/effect/decal/cleanable/blood/old = 2, + ) + +/obj/effect/spawner/random/trash/graffiti + name = "random graffiti spawner" + icon_state = "rune" + loot = list(/obj/effect/decal/cleanable/crayon) + var/graffiti_icons = list( + "rune1", "rune2", "rune3", "rune4", "rune5", "rune6", + "amyjon", "face", "matt", "revolution", "engie", "guy", + "end", "dwarf", "uboa", "body", "cyka", "star", + "prolizard", "antilizard", "danger", "firedanger", "electricdanger", + "biohazard", "radiation", "safe", "evac", "space", "med", "trade", "shop", + "food", "peace", "like", "skull", "nay", "heart", "credit", + "smallbrush", "brush", "largebrush", "splatter", "snake", "stickman", + "carp", "ghost", "clown", "taser", "disk", "fireaxe", "toolbox", + "corgi", "cat", "toilet", "blueprint", "beepsky", "scroll", "bottle", + "shotgun", "arrow", "line", "thinline", "shortline", "body", "chevron", + "footprint", "clawprint", "pawprint", + ) + // This sets the color of the graffiti (used for mapedits) + color = COLOR_WHITE + /// Whether the graffiti will spawn with a random color (used for mapedits) + var/random_color = TRUE + /// Whether the graffiti will spawn with this spawner's icon_state instead of a random one (used for mapedits) + var/random_icon = TRUE + +/obj/effect/spawner/random/trash/graffiti/make_item(spawn_loc, type_path_to_make) + var/obj/effect/decal/cleanable/crayon/graffiti_decal = ..() + if(istype(graffiti_decal)) + color = random_color && "#[random_short_color()]" || color + icon_state = random_icon && pick(graffiti_icons) || icon_state + + graffiti_decal.add_atom_colour(color, FIXED_COLOUR_PRIORITY) + graffiti_decal.icon_state = icon_state + + return graffiti_decal + +/obj/effect/spawner/random/trash/mopbucket + name = "mop bucket spawner" + icon_state = "mopbucket" + spawn_loot_count = 2 + spawn_loot_double = FALSE + loot = list( + /obj/item/mop = 5, + /obj/item/clothing/suit/caution = 3, + /obj/item/reagent_containers/glass/bucket = 1, + /obj/item/reagent_containers/glass/bucket/wooden = 1, + ) + +/obj/effect/spawner/random/trash/caution_sign + name = "caution sign spawner" + icon_state = "caution" + loot = list( + /obj/item/clothing/suit/caution = 40, + /obj/structure/holosign/wetsign = 5, + /obj/structure/holosign/barrier = 3, + /obj/structure/holosign/barrier/wetsign = 2, + ) + +/obj/effect/spawner/random/trash/bucket + name = "bucket spawner" + icon_state = "caution" + loot = list( + /obj/item/reagent_containers/glass/bucket, + /obj/item/reagent_containers/glass/bucket/wooden, + ) + +/obj/effect/spawner/random/trash/soap + name = "soap spawner" + icon_state = "soap" + loot = list( + /obj/item/soap = 25, + /obj/item/bikehorn/rubberducky = 20, + /obj/item/soap/homemade = 20, + /obj/item/soap/deluxe = 15, + /obj/item/soap/nanotrasen = 10, + ) + +/obj/effect/spawner/random/trash/box + name = "box spawner" + icon_state = "box" + loot = list( + /obj/structure/closet/cardboard = 9, + /obj/structure/closet/cardboard/metal = 1, + ) + +/obj/effect/spawner/random/trash/bin + name = "trashbin spawner" + icon_state = "trash_bin" + loot = list( + /obj/structure/closet/crate/bin = 10, + /obj/structure/closet/crate/trashcart = 3, + /obj/effect/spawner/random/trash/box = 3, + /obj/structure/closet/crate/trashcart/laundry = 1, + ) + + +/obj/effect/spawner/random/trash/janitor_supplies + name = "janitor supplies spawner" + icon_state = "box_small" + loot = list( + /obj/item/storage/box/mousetraps, + /obj/item/storage/box/lights/tubes, + /obj/item/storage/box/lights/mixed, + /obj/item/storage/box/lights/bulbs, + ) + +/obj/effect/spawner/random/trash/crushed_can + name = "crushed can spawner" + icon_state = "crushed_can" + loot = list(/obj/item/trash/can) + /// Whether the can will spawn with this spawner's icon_state instead of a random one (used for mapedits) + var/soda_icons = list( + "energy_drink", "monkey_energy", "thirteen_loko", "space_mountain_wind", "dr_gibb", "starkist", + "sodawater", "tonic", "cola", "purple_can", "ice_tea_can", + "sol_dry", "wellcheers", "space beer", "ebisu", "shimauma", "moonlabor", + "space_up", "lemon_lime", "shamblers", "shamblerseldritch", "air", "laughter", + "volt_energy", "melon_soda", + ) + +/obj/effect/spawner/random/trash/crushed_can/make_item(spawn_loc, type_path_to_make) + var/obj/item/trash/can/crushed_can = .. () + if(istype(crushed_can)) + crushed_can.icon_state = pick(soda_icons) + return crushed_can + +/obj/effect/spawner/random/trash/ghetto_containers + name = "ghetto container spawner" + loot = list( + /obj/item/reagent_containers/glass/bucket = 5, + /obj/item/reagent_containers/glass/bottle = 5, + /obj/item/reagent_containers/glass/mortar = 2, + ) diff --git a/code/game/objects/effects/spawners/random.dm/vending.dm b/code/game/objects/effects/spawners/random.dm/vending.dm new file mode 100644 index 000000000000..595746e14e19 --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/vending.dm @@ -0,0 +1,17 @@ +/obj/effect/spawner/random/vending + name = "machinery spawner" + desc = "Randomized electronics for extra fun." + +/obj/effect/spawner/random/vending/snack + name = "spawn random snack vending machine" + desc = "Automagically transforms into a random snack vendor. If you see this while in a shift, please create a bug report." + icon_state = "snack" + loot_type_path = /obj/machinery/vending/snack + loot = list() + +/obj/effect/spawner/random/vending/cola + name = "spawn random cola vending machine" + desc = "Automagically transforms into a random cola vendor. If you see this while in a shift, please create a bug report." + icon_state = "cola" + loot_type_path = /obj/machinery/vending/cola + loot = list() diff --git a/code/game/objects/effects/spawners/random.dm/waste_planet.dm b/code/game/objects/effects/spawners/random.dm/waste_planet.dm new file mode 100644 index 000000000000..46ad61a754a6 --- /dev/null +++ b/code/game/objects/effects/spawners/random.dm/waste_planet.dm @@ -0,0 +1,101 @@ +/obj/effect/spawner/random/waste/grille_or_trash + icon_state = "grille" + name = "wasteplanet loot spawner" + loot = list( + /obj/structure/grille/broken = 5, + /obj/structure/grille = 5, + /obj/item/cigbutt = 1, + /obj/item/trash/cheesie = 1, + /obj/item/trash/candy = 1, + /obj/item/trash/chips = 1, + /obj/item/reagent_containers/food/snacks/deadmouse = 1, + /obj/item/trash/pistachios = 1, + /obj/item/trash/plate = 1, + /obj/item/trash/popcorn = 1, + /obj/item/trash/raisins = 1, + /obj/item/trash/sosjerky = 1, + /obj/item/trash/syndi_cakes = 1 + ) + +/obj/effect/spawner/random/waste/mechwreck + icon_state = "ripley" + name = "wasteplanet exosuit wreckage" + loot = list( + /obj/structure/mecha_wreckage/ripley = 15, + /obj/structure/mecha_wreckage/ripley/firefighter = 9, + /obj/structure/mecha_wreckage/ripley/mkii = 9, + /obj/structure/mecha_wreckage/ripley/clip = 9 + ) + +/obj/effect/spawner/random/waste/mechwreck/rare + loot = list( + /obj/structure/mecha_wreckage/durand = 12.5, + /obj/structure/mecha_wreckage/durand/clip = 12.5, + /obj/structure/mecha_wreckage/odysseus = 25, + /obj/structure/mecha_wreckage/gygax = 25 + ) + +/obj/effect/spawner/random/waste/radiation + loot = list( + /obj/structure/radioactive = 6, + /obj/structure/radioactive/stack = 6, + /obj/structure/radioactive/waste = 6 + ) + +/obj/effect/spawner/random/waste/radiation/more_rads + loot = list( + /obj/structure/radioactive = 3, + /obj/structure/radioactive/stack = 12, + /obj/structure/radioactive/waste = 12 + ) + +/obj/effect/spawner/random/waste/atmos_can + loot = list( + /obj/machinery/portable_atmospherics/canister/toxins = 3, + /obj/machinery/portable_atmospherics/canister/carbon_dioxide = 3, + /obj/machinery/portable_atmospherics/canister/nitrogen = 3, + /obj/machinery/portable_atmospherics/canister/oxygen = 3, + /obj/machinery/portable_atmospherics/canister/nitrous_oxide = 1, + /obj/machinery/portable_atmospherics/canister/water_vapor = 1 + ) + +/obj/effect/spawner/random/waste/atmos_can/rare + loot = list( + /obj/machinery/portable_atmospherics/canister/tritium = 3, + /obj/machinery/portable_atmospherics/canister/pluoxium = 3 + ) + +/obj/effect/spawner/random/waste/salvageable + loot = list( + /obj/structure/salvageable/machine = 20, + /obj/structure/salvageable/autolathe = 15, + /obj/structure/salvageable/computer = 10, + /obj/structure/salvageable/protolathe = 10, + /obj/structure/salvageable/circuit_imprinter = 8, + /obj/structure/salvageable/destructive_analyzer = 8, + /obj/structure/salvageable/server = 8 + ) + +/obj/effect/spawner/random/waste/girder + loot = list( + /obj/structure/girder, + /obj/structure/girder/displaced, + /obj/structure/girder/reinforced + ) +/obj/effect/spawner/random/waste/hivebot + loot = list( + /obj/effect/spawner/random/salvage/metal, + /obj/effect/spawner/random/salvage/metal, + /obj/effect/spawner/random/salvage/metal, + /obj/effect/spawner/random/salvage/gold, + /obj/effect/spawner/random/salvage/plasma, + /obj/effect/spawner/random/salvage/silver, + /obj/effect/spawner/random/salvage/titanium, + /obj/item/stack/ore/salvage/scrapbluespace, + /obj/item/stack/ore/salvage/scrapbluespace, + /obj/item/stack/ore/salvage/scrapuranium + ) + spawn_loot_count = 2 + +/obj/effect/spawner/random/waste/hivebot/beacon + spawn_loot_count = 6 diff --git a/code/game/objects/effects/spawners/spawner.dm b/code/game/objects/effects/spawners/spawner.dm new file mode 100644 index 000000000000..d8091c6cfc65 --- /dev/null +++ b/code/game/objects/effects/spawners/spawner.dm @@ -0,0 +1,23 @@ +/obj/effect/spawner + name = "object spawner" + +// Brief explanation: +// Rather then setting up and then deleting spawners, we block all atomlike setup +// and do the absolute bare minimum +// This is with the intent of optimizing mapload +/obj/effect/spawner/Initialize(mapload) + SHOULD_CALL_PARENT(FALSE) + if(flags_1 & INITIALIZED_1) + stack_trace("Warning: [src]([type]) initialized multiple times!") + flags_1 |= INITIALIZED_1 + + return INITIALIZE_HINT_QDEL + +/obj/effect/spawner/Destroy(force) + SHOULD_CALL_PARENT(FALSE) + moveToNullspace() + return QDEL_HINT_QUEUE + +/// Override to define loot blacklist behavior +/obj/effect/spawner/proc/can_spawn(atom/loot) + return TRUE diff --git a/code/game/objects/effects/spawners/traps.dm b/code/game/objects/effects/spawners/traps.dm deleted file mode 100644 index 0409d9944b9b..000000000000 --- a/code/game/objects/effects/spawners/traps.dm +++ /dev/null @@ -1,9 +0,0 @@ -/obj/effect/spawner/trap - name = "random trap" - icon = 'icons/obj/hand_of_god_structures.dmi' - icon_state = "trap_rand" - -/obj/effect/spawner/trap/Initialize(mapload) - . = ..() - var/new_type = pick(subtypesof(/obj/structure/trap) - typesof(/obj/structure/trap/ctf)) - new new_type(get_turf(src)) diff --git a/code/game/objects/effects/spawners/vaultspawner.dm b/code/game/objects/effects/spawners/vaultspawner.dm deleted file mode 100644 index 9bdf0a673ed9..000000000000 --- a/code/game/objects/effects/spawners/vaultspawner.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/effect/vaultspawner - var/maxX = 6 - var/maxY = 6 - var/minX = 2 - var/minY = 2 - -/obj/effect/vaultspawner/New(turf/location,lX = minX,uX = maxX,lY = minY,uY = maxY,type = null) - if(!type) - type = pick("sandstone","rock","alien") - - var/lowBoundX = location.x - var/lowBoundY = location.y - - var/hiBoundX = location.x + rand(lX,uX) - var/hiBoundY = location.y + rand(lY,uY) - - var/z = location.z - - for(var/i = lowBoundX,i<=hiBoundX,i++) - for(var/j = lowBoundY,j<=hiBoundY,j++) - var/turf/T = locate(i,j,z) - if(i == lowBoundX || i == hiBoundX || j == lowBoundY || j == hiBoundY) - T.PlaceOnTop(/turf/closed/wall/vault) - else - T.PlaceOnTop(/turf/open/floor/vault) - T.icon_state = "[type]vault" - - qdel(src) diff --git a/code/game/objects/effects/spawners/xeno_egg_delivery.dm b/code/game/objects/effects/spawners/xeno_egg_delivery.dm deleted file mode 100644 index 1eb4fd0dda94..000000000000 --- a/code/game/objects/effects/spawners/xeno_egg_delivery.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/effect/spawner/xeno_egg_delivery - name = "xeno egg delivery" - icon = 'icons/mob/alien.dmi' - icon_state = "egg_growing" - var/announcement_time = 1200 - -/obj/effect/spawner/xeno_egg_delivery/Initialize(mapload) - . = ..() - var/turf/T = get_turf(src) - - new /obj/structure/alien/egg(T) - new /obj/effect/temp_visual/gravpush(T) - playsound(T, 'sound/items/party_horn.ogg', 50, TRUE, -1) - - message_admins("An alien egg has been delivered to [ADMIN_VERBOSEJMP(T)].") - log_game("An alien egg has been delivered to [AREACOORD(T)]") - var/message = "Attention [station_name()], we have entrusted you with a research specimen in [get_area_name(T, TRUE)]. Remember to follow all safety precautions when dealing with the specimen." - SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_addtimer), CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(print_command_report), message), announcement_time)) diff --git a/code/game/objects/items/chromosome.dm b/code/game/objects/items/chromosome.dm index 3acf3cfe5cb3..c6ee7f174aab 100644 --- a/code/game/objects/items/chromosome.dm +++ b/code/game/objects/items/chromosome.dm @@ -48,7 +48,7 @@ if(!initial(CM.weight)) break chromosomes[A] = initial(CM.weight) - return pickweight(chromosomes) + return pick_weight(chromosomes) /obj/item/chromosome/stabilizer diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 26b23c509838..0606e999b1ce 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -564,15 +564,6 @@ name = "pink glowstick" color = LIGHT_COLOR_PINK -/obj/effect/spawner/lootdrop/glowstick - name = "random colored glowstick" - icon = 'icons/obj/lighting.dmi' - icon_state = "random_glowstick" - -/obj/effect/spawner/lootdrop/glowstick/Initialize() - loot = typesof(/obj/item/flashlight/glowstick) - . = ..() - /obj/item/flashlight/spotlight //invisible lighting source name = "disco light" desc = "Groovy..." diff --git a/code/game/objects/items/devices/mines.dm b/code/game/objects/items/devices/mines.dm index 9f0896f946bf..6319cc1a638d 100644 --- a/code/game/objects/items/devices/mines.dm +++ b/code/game/objects/items/devices/mines.dm @@ -841,10 +841,10 @@ LIVE_MINE_HELPER(pressure/sound) // spawners (random mines, minefields, non-guaranteed mine) // -/obj/effect/spawner/lootdrop/mine +/obj/effect/spawner/random/mine name = "live mine spawner (random)" - lootcount = 1 - fan_out_items = TRUE + spawn_loot_count = 1 + spawn_loot_split = TRUE loot = list( /obj/item/mine/pressure/explosive/live = 10, /obj/item/mine/pressure/explosive/shrapnel/live = 3, @@ -864,7 +864,7 @@ LIVE_MINE_HELPER(pressure/sound) /obj/effect/spawner/minefield/random name = "random minefield spawner" - minetype = /obj/effect/spawner/lootdrop/mine + minetype = /obj/effect/spawner/random/mine /obj/effect/spawner/minefield/manhack name = "manhack field spawner" diff --git a/code/game/objects/items/grenades/ghettobomb.dm b/code/game/objects/items/grenades/ghettobomb.dm index 915011b81b11..247ca439c8bd 100644 --- a/code/game/objects/items/grenades/ghettobomb.dm +++ b/code/game/objects/items/grenades/ghettobomb.dm @@ -25,7 +25,7 @@ add_overlay("improvised_grenade_filled") add_overlay("improvised_grenade_wired") times = list("5" = 10, "-1" = 20, "[rand(30,80)]" = 50, "[rand(65,180)]" = 20)// "Premature, Dud, Short Fuse, Long Fuse"=[weighting value] - det_time = text2num(pickweight(times)) + det_time = text2num(pick_weight(times)) if(det_time < 0) //checking for 'duds' range = 1 det_time = rand(30,80) diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index 4b16ee60942d..dd00d3abd1fd 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -863,43 +863,3 @@ var/mutable_appearance/base_overlay_among = mutable_appearance(icon, "plushie_among_visor") base_overlay_among.appearance_flags = RESET_COLOR add_overlay(base_overlay_among) - -/obj/effect/spawner/lootdrop/plushie - loot = list ( - /obj/item/toy/plush/beeplushie, - /obj/item/toy/plush/blahaj, - /obj/item/toy/plush/carpplushie, - /obj/item/toy/plush/flushed, - /obj/item/toy/plush/kari, - /obj/item/toy/plush/lizardplushie, - /obj/item/toy/plush/mora, - /obj/item/toy/plush/realgoat, - /obj/item/toy/plush/rilena, - /obj/item/toy/plush/sharai, - /obj/item/toy/plush/slimeplushie, - /obj/item/toy/plush/snakeplushie, - /obj/item/toy/plush/spider, - /obj/item/toy/plush/tali, - /obj/item/toy/plush/xader, - /obj/effect/spawner/lootdrop/plushie/moth // fair chances - ) - -/obj/effect/spawner/lootdrop/plushie/moth - loot = list ( - /obj/item/toy/plush/moth, - /obj/item/toy/plush/moth/monarch, - /obj/item/toy/plush/moth/luna, - /obj/item/toy/plush/moth/atlas, - /obj/item/toy/plush/moth/redish, - /obj/item/toy/plush/moth/royal, - /obj/item/toy/plush/moth/gothic, - /obj/item/toy/plush/moth/lovers, - /obj/item/toy/plush/moth/whitefly, - /obj/item/toy/plush/moth/punished, - /obj/item/toy/plush/moth/firewatch, - /obj/item/toy/plush/moth/deadhead, - /obj/item/toy/plush/moth/poison, - /obj/item/toy/plush/moth/ragged, - /obj/item/toy/plush/moth/snow, - /obj/item/toy/plush/moth/moonfly - ) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index e8b619b0d712..5a1bdaabe340 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -2,7 +2,7 @@ /obj/item/storage/box/syndicate /obj/item/storage/box/syndicate/bundle_A/PopulateContents() - switch (pickweight(list("recon" = 2, "bloodyspai" = 3, "stealth" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "sniper" = 1, "metaops" = 1))) + switch (pick_weight(list("recon" = 2, "bloodyspai" = 3, "stealth" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "sniper" = 1, "metaops" = 1))) if("recon") new /obj/item/clothing/glasses/thermal/xray(src) // ~8 tc? new /obj/item/storage/briefcase/launchpad(src) //6 tc @@ -117,7 +117,7 @@ new /obj/item/card/emag(src) // 6 tc /obj/item/storage/box/syndicate/bundle_B/PopulateContents() - switch (pickweight(list( "bond" = 2, "ninja" = 1, "darklord" = 1, "white_whale_holy_grail" = 2, "mad_scientist" = 2, "mr_freeze" = 2, "made_man"= 1))) + switch (pick_weight(list( "bond" = 2, "ninja" = 1, "darklord" = 1, "white_whale_holy_grail" = 2, "mad_scientist" = 2, "mr_freeze" = 2, "made_man"= 1))) if("bond") new /obj/item/gun/ballistic/automatic/pistol/ringneck(src) new /obj/item/attachment/silencer(src) @@ -181,7 +181,7 @@ new /obj/item/melee/transforming/energy/sword/saber/blue(src) //see see it fits the theme bc its blue and ice is blue if("made_man") - new /obj/effect/spawner/lootdrop/mafia_outfit(src) // 0 TC, just an outfit for the new 'don of this family + new /obj/effect/spawner/random/clothing/mafia_outfit(src) // 0 TC, just an outfit for the new 'don of this family new /obj/item/gun/ballistic/automatic/smg/firestorm/pan(src) // 20 TC, a gun with 50 .45 bullets on a three round burst is kinda outstanding new /obj/item/melee/knife/switchblade(src) // 3 TC? It's nice, but it's really a stealth/oh fuck I'm out of ammo weapon new /obj/item/reagent_containers/food/drinks/bottle/vodka (src) // 5 TC, free molotov assemblies diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 81e6ea9d54ec..220e0e605828 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -1392,7 +1392,7 @@ pixel_x = rand(-5, 5) pixel_y = rand(-5, 5) icon_state = "shell[rand(1,3)]" - color = pickweight(possible_colors) + color = pick_weight(possible_colors) setDir(pick(GLOB.cardinals)) /obj/item/toy/brokenradio diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 8ee8d8214f80..5b140a5b2428 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -383,7 +383,7 @@ LINEN BINS /obj/item/bedsheet/dorms/Initialize() ..() - var/type = pickweight(list("Colors" = 80, "Special" = 20)) + var/type = pick_weight(list("Colors" = 80, "Special" = 20)) switch(type) if("Colors") type = pick(list(/obj/item/bedsheet, @@ -408,7 +408,7 @@ LINEN BINS /obj/item/bedsheet/dorms/double/Initialize() ..() - var/type = pickweight(list("Colors" = 80, "Special" = 20)) + var/type = pick_weight(list("Colors" = 80, "Special" = 20)) switch(type) if("Colors") type = pick(list(/obj/item/bedsheet/double, diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index cfea37148e55..a69a279bad77 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -14,7 +14,6 @@ desc = "It looks alien!" icon_state = "alien" - /obj/structure/closet/gimmick name = "administrative supply closet" desc = "It's a storage unit for things that have no right being here." diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index fdc061e9769d..089b6f8f792c 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -29,7 +29,7 @@ if (prob(40)) new /obj/item/storage/toolbox/emergency(src) - switch (pickweight(list("small" = 40, "aid" = 25, "tank" = 20, "both" = 10, "nothing" = 4, "delete" = 1))) + switch (pick_weight(list("small" = 40, "aid" = 25, "tank" = 20, "both" = 10, "nothing" = 4, "delete" = 1))) if ("small") new /obj/item/tank/internals/emergency_oxygen(src) new /obj/item/tank/internals/emergency_oxygen(src) diff --git a/code/game/objects/structures/geyser.dm b/code/game/objects/structures/geyser.dm index af536d2e8c1c..d5c7dbeef362 100644 --- a/code/game/objects/structures/geyser.dm +++ b/code/game/objects/structures/geyser.dm @@ -45,7 +45,7 @@ /obj/structure/geyser/random/Initialize() . = ..() - reagent_id = pickweight(options) + reagent_id = pick_weight(options) /obj/item/plunger name = "plunger" diff --git a/code/game/objects/structures/salvaging.dm b/code/game/objects/structures/salvaging.dm index a3b3b2b5763f..ccb76bd81c4a 100644 --- a/code/game/objects/structures/salvaging.dm +++ b/code/game/objects/structures/salvaging.dm @@ -56,16 +56,16 @@ /obj/item/stack/ore/salvage/scrapgold/five = 60, /obj/item/stack/ore/salvage/scrapmetal/five = 60, - /obj/effect/spawner/lootdrop/salvage_capacitor = 50, - /obj/effect/spawner/lootdrop/salvage_capacitor = 50, - /obj/effect/spawner/lootdrop/salvage_scanning = 50, - /obj/effect/spawner/lootdrop/salvage_scanning = 50, - /obj/effect/spawner/lootdrop/salvage_matter_bin = 40, - /obj/effect/spawner/lootdrop/salvage_matter_bin = 40, - /obj/effect/spawner/lootdrop/salvage_manipulator = 40, - /obj/effect/spawner/lootdrop/salvage_manipulator = 40, - /obj/effect/spawner/lootdrop/salvage_laser = 40, - /obj/effect/spawner/lootdrop/salvage_laser = 40, + /obj/effect/spawner/random/salvage_capacitor = 50, + /obj/effect/spawner/random/salvage_capacitor = 50, + /obj/effect/spawner/random/salvage_scanning = 50, + /obj/effect/spawner/random/salvage_scanning = 50, + /obj/effect/spawner/random/salvage_matter_bin = 40, + /obj/effect/spawner/random/salvage_matter_bin = 40, + /obj/effect/spawner/random/salvage_manipulator = 40, + /obj/effect/spawner/random/salvage_manipulator = 40, + /obj/effect/spawner/random/salvage_laser = 40, + /obj/effect/spawner/random/salvage_laser = 40, ) /obj/structure/salvageable/computer @@ -79,7 +79,7 @@ /obj/item/stack/ore/salvage/scrapgold/five = 60, /obj/item/stack/ore/salvage/scrapmetal/five = 60, - /obj/effect/spawner/lootdrop/salvage_capacitor = 60, + /obj/effect/spawner/random/salvage_capacitor = 60, /obj/item/computer_hardware/battery = 40, /obj/item/computer_hardware/battery = 40, @@ -91,8 +91,8 @@ /obj/item/computer_hardware/card_slot = 40, /obj/item/computer_hardware/network_card/advanced = 20, - /obj/effect/spawner/lootdrop/random_computer_circuit_common = 50, - /obj/effect/spawner/lootdrop/random_computer_circuit_rare = 5, + /obj/effect/spawner/random/circuit/computer/common = 50, + /obj/effect/spawner/random/circuit/computer/rare = 5, /obj/item/research_notes/loot/tiny = 10, ) @@ -106,11 +106,10 @@ /obj/item/stack/ore/salvage/scraptitanium/five = 60, /obj/item/stack/ore/salvage/scrapmetal/five = 60, - - /obj/effect/spawner/lootdrop/salvage_matter_bin = 40, - /obj/effect/spawner/lootdrop/salvage_matter_bin = 40, - /obj/effect/spawner/lootdrop/salvage_matter_bin = 40, - /obj/effect/spawner/lootdrop/salvage_manipulator = 30, + /obj/effect/spawner/random/salvage_matter_bin = 40, + /obj/effect/spawner/random/salvage_matter_bin = 40, + /obj/effect/spawner/random/salvage_matter_bin = 40, + /obj/effect/spawner/random/salvage_manipulator = 30, /obj/item/circuitboard/machine/autolathe = 35, @@ -134,17 +133,17 @@ /obj/item/stack/ore/salvage/scrapplasma/five = 60, /obj/item/stack/ore/salvage/scrapmetal/five = 60, - /obj/effect/spawner/lootdrop/salvage_matter_bin = 40, - /obj/effect/spawner/lootdrop/salvage_matter_bin = 40, - /obj/effect/spawner/lootdrop/salvage_manipulator = 30, - /obj/effect/spawner/lootdrop/salvage_manipulator = 30, + /obj/effect/spawner/random/salvage_matter_bin = 40, + /obj/effect/spawner/random/salvage_matter_bin = 40, + /obj/effect/spawner/random/salvage_manipulator = 30, + /obj/effect/spawner/random/salvage_manipulator = 30, - /obj/effect/spawner/lootdrop/tool_engie_proto = 45, - /obj/effect/spawner/lootdrop/tool_surgery_proto = 55, - /obj/effect/spawner/lootdrop/beaker_loot_spawner = 45, - /obj/effect/spawner/lootdrop/random_prosthetic = 25, - /obj/effect/spawner/lootdrop/random_gun_protolathe_lootdrop = 5, //:flushed: - /obj/effect/spawner/lootdrop/random_ammo_protolathe_lootdrop = 5, + /obj/effect/spawner/random/engineering/tool = 45, + /obj/effect/spawner/random/medical/surgery_tool = 55, + /obj/effect/spawner/random/medical/beaker = 45, + /obj/effect/spawner/random/medical/prosthetic = 25, + /obj/effect/spawner/random/random_gun_protolathe_lootdrop = 5, //:flushed: + /obj/effect/spawner/random/random_ammo_protolathe_lootdrop = 5, /obj/item/storage/part_replacer = 20, /obj/item/storage/part_replacer/bluespace = 1, @@ -172,13 +171,13 @@ /obj/item/stack/ore/salvage/scrapmetal/five = 60, /obj/item/stack/ore/salvage/scrapbluespace = 60, - /obj/effect/spawner/lootdrop/salvage_matter_bin = 40, - /obj/effect/spawner/lootdrop/salvage_manipulator = 30, + /obj/effect/spawner/random/salvage_matter_bin = 40, + /obj/effect/spawner/random/salvage_manipulator = 30, /obj/item/stack/circuit_stack = 50, //this might be the only way in the game to get a poly circuit, and the only way for many ships to get essensial electronics. huh. - /obj/effect/spawner/lootdrop/random_machine_circuit_mech = 45, //with all the wonderful broken mechs lying around, this might be a chance to get something stupidly overpowered. - /obj/effect/spawner/lootdrop/random_machine_circuit_common = 50, //well.... "common" - /obj/effect/spawner/lootdrop/random_machine_circuit_rare = 5, + /obj/effect/spawner/random/circuit/machine/mech = 45, //with all the wonderful broken mechs lying around, this might be a chance to get something stupidly overpowered. + /obj/effect/spawner/random/circuit/machine/common = 50, //well.... "common" + /obj/effect/spawner/random/circuit/machine/rare = 5, /obj/item/stack/sheet/metal/five = 15, //same as above but more geared towards stuff used by circuit imprinter /obj/item/stack/sheet/glass/five = 15, @@ -199,12 +198,12 @@ /obj/item/stack/ore/salvage/scrapmetal/five = 60, /obj/item/stack/ore/salvage/scrapplasma = 60, - /obj/effect/spawner/lootdrop/salvage_scanning = 40, - /obj/effect/spawner/lootdrop/salvage_laser = 30, - /obj/effect/spawner/lootdrop/salvage_manipulator = 30, + /obj/effect/spawner/random/salvage_scanning = 40, + /obj/effect/spawner/random/salvage_laser = 30, + /obj/effect/spawner/random/salvage_manipulator = 30, /obj/item/storage/toolbox/syndicate/empty = 80, - /obj/effect/spawner/lootdrop/destructive_anal_loot = 65, + /obj/effect/spawner/random/destructive_anal_loot = 65, /obj/item/stack/sheet/metal/five = 15, //same as above but more geared towards stuff used by circuit imprinter /obj/item/stack/sheet/glass/five = 15, @@ -342,11 +341,11 @@ color = "#808080" salvageable_parts = list( - /obj/effect/spawner/lootdrop/seeded = 80, - /obj/effect/spawner/lootdrop/seeded = 80, - /obj/effect/spawner/lootdrop/seeded = 80, - /obj/effect/spawner/lootdrop/seeded = 80, - /obj/effect/spawner/lootdrop/seeded = 80, + /obj/effect/spawner/random/food_or_drink/seed = 80, + /obj/effect/spawner/random/food_or_drink/seed = 80, + /obj/effect/spawner/random/food_or_drink/seed = 80, + /obj/effect/spawner/random/food_or_drink/seed = 80, + /obj/effect/spawner/random/food_or_drink/seed = 80, /obj/item/seeds/random = 80, /obj/item/seeds/random = 40, /obj/item/seeds/random = 40, @@ -470,236 +469,3 @@ /obj/item/stack/ore/salvage/scrapbluespace/five amount = 5 - -//loot spawners as shown above - -//GENERIC -/obj/effect/spawner/lootdrop/salvage_capacitor - loot = list( - /obj/item/stock_parts/capacitor = 120, - /obj/item/stock_parts/capacitor/adv = 20, - /obj/item/stock_parts/capacitor/super = 5, - ) - -/obj/effect/spawner/lootdrop/salvage_scanning - loot = list( - /obj/item/stock_parts/scanning_module = 120, - /obj/item/stock_parts/scanning_module/adv = 20, - /obj/item/stock_parts/scanning_module/phasic = 5, - ) - -/obj/effect/spawner/lootdrop/salvage_manipulator - loot = list( - /obj/item/stock_parts/manipulator = 120, - /obj/item/stock_parts/manipulator/nano = 20, - /obj/item/stock_parts/manipulator/pico = 5, - ) - -/obj/effect/spawner/lootdrop/salvage_matter_bin - loot = list( - /obj/item/stock_parts/matter_bin = 120, - /obj/item/stock_parts/matter_bin/adv = 20, - /obj/item/stock_parts/matter_bin/super = 5, - ) - -/obj/effect/spawner/lootdrop/salvage_laser - loot = list( - /obj/item/stock_parts/micro_laser = 120, - /obj/item/stock_parts/micro_laser/high = 20, - /obj/item/stock_parts/micro_laser/ultra = 5, - ) - -//PROTOLATHE -/obj/effect/spawner/lootdrop/tool_engie_proto - loot = list( - /obj/effect/spawner/lootdrop/tool_engie_common = 120, - /obj/effect/spawner/lootdrop/tool_engie_sydnie = 20, - /obj/effect/spawner/lootdrop/tool_engie_adv = 5, - ) - -/obj/effect/spawner/lootdrop/tool_engie_common - loot = list( - /obj/item/wrench/crescent = 1, - /obj/item/screwdriver = 1, - /obj/item/weldingtool = 1, - /obj/item/crowbar = 1, - /obj/item/wirecutters = 1, - /obj/item/multitool = 1, - ) - -/obj/effect/spawner/lootdrop/tool_engie_sydnie - loot = list( - /obj/item/wrench/syndie = 1, - /obj/item/screwdriver/nuke = 1, - /obj/item/weldingtool/largetank = 1, - /obj/item/crowbar/syndie = 1, - /obj/item/wirecutters/syndie = 1, - /obj/item/multitool/syndie = 1, - ) - -/obj/effect/spawner/lootdrop/tool_engie_adv - loot = list( - /obj/item/screwdriver/power = 1, - /obj/item/weldingtool/experimental = 1, - /obj/item/crowbar/power = 1, - ) - -/obj/effect/spawner/lootdrop/tool_surgery_proto - loot = list( - /obj/effect/spawner/lootdrop/tool_surgery_common = 120, - /obj/effect/spawner/lootdrop/tool_surgery_adv = 10, - ) - -/obj/effect/spawner/lootdrop/tool_surgery_common - loot = list( - /obj/item/scalpel = 1, - /obj/item/hemostat = 1, - /obj/item/cautery = 1, - /obj/item/retractor = 1, - /obj/item/circular_saw = 1, - /obj/item/surgicaldrill = 1, - ) - -/obj/effect/spawner/lootdrop/tool_surgery_adv - loot = list( - /obj/item/scalpel/advanced = 1, - /obj/item/retractor/advanced = 1, - /obj/item/surgicaldrill/advanced = 1, - ) - -/obj/effect/spawner/lootdrop/beaker_loot_spawner - loot = list( - /obj/item/reagent_containers/glass/beaker = 300, - /obj/item/reagent_containers/glass/beaker/large = 200, - /obj/item/reagent_containers/glass/beaker/plastic = 50, - /obj/item/reagent_containers/glass/beaker/meta = 10, - /obj/item/reagent_containers/glass/beaker/noreact = 5, - /obj/item/reagent_containers/glass/beaker/bluespace = 1, - ) -/obj/effect/spawner/lootdrop/random_prosthetic - loot = list( - /obj/item/bodypart/l_arm/robot/surplus = 1, - /obj/item/bodypart/r_arm/robot/surplus = 1, - /obj/item/bodypart/leg/left/robot/surplus = 1, - /obj/item/bodypart/leg/right/robot/surplus = 1, - ) -/obj/effect/spawner/lootdrop/random_gun_protolathe_lootdrop - loot = list( - /obj/item/gun/energy/lasercannon = 1, - /obj/item/gun/ballistic/automatic/smg/skm_carbine/inteq/proto = 1, - /obj/item/gun/energy/temperature/security = 1, - ) -/obj/effect/spawner/lootdrop/random_ammo_protolathe_lootdrop - loot = list( - /obj/item/stock_parts/cell/gun/upgraded = 5, - /obj/item/ammo_box/magazine/smgm9mm = 7, - ) - -//CIRCUIT IMPRINTER -/obj/effect/spawner/lootdrop/random_machine_circuit_common - loot = list( - /obj/item/circuitboard/machine/autolathe = 5, - /obj/item/circuitboard/machine/biogenerator = 5, - /obj/item/circuitboard/machine/cell_charger = 5, - /obj/item/circuitboard/machine/chem_heater = 5, - /obj/item/circuitboard/machine/chem_master = 5, - /obj/item/circuitboard/machine/clonescanner = 5, - /obj/item/circuitboard/machine/cryo_tube = 5, - /obj/item/circuitboard/machine/cyborgrecharger = 5, - /obj/item/circuitboard/machine/deep_fryer = 5, - /obj/item/circuitboard/machine/experimentor = 5, - /obj/item/circuitboard/machine/holopad = 5, - /obj/item/circuitboard/machine/hydroponics = 5, - /obj/item/circuitboard/machine/limbgrower = 5, - /obj/item/circuitboard/machine/ltsrbt = 5, - /obj/item/circuitboard/machine/mech_recharger = 5, - /obj/item/circuitboard/machine/mechfab = 5, - /obj/item/circuitboard/machine/medical_kiosk = 5, - /obj/item/circuitboard/machine/medipen_refiller = 5, - /obj/item/circuitboard/machine/microwave = 5, - /obj/item/circuitboard/machine/ore_redemption = 5, - /obj/item/circuitboard/machine/ore_silo = 5, - /obj/item/circuitboard/machine/reagentgrinder = 5, - /obj/item/circuitboard/machine/recharger = 5, - /obj/item/circuitboard/machine/seed_extractor = 5, - /obj/item/circuitboard/machine/selling_pad = 5, - /obj/item/circuitboard/machine/emitter = 5, - ) - -/obj/effect/spawner/lootdrop/random_machine_circuit_rare - loot = list( - /obj/item/circuitboard/aicore = 5, - /obj/item/circuitboard/machine/chem_dispenser = 5, - /obj/item/circuitboard/machine/circuit_imprinter = 5, - /obj/item/circuitboard/machine/protolathe = 5, - /obj/item/circuitboard/machine/clonepod/experimental = 5, - /obj/item/circuitboard/machine/rad_collector = 5, - /obj/item/circuitboard/machine/launchpad = 5, - ) - -/obj/effect/spawner/lootdrop/random_machine_circuit_mech - loot = list( - /obj/item/circuitboard/mecha/ripley/main = 100, - /obj/item/circuitboard/mecha/ripley/peripherals = 100, - /obj/item/circuitboard/mecha/honker/main = 5, - /obj/item/circuitboard/mecha/honker/peripherals = 5, - /obj/item/circuitboard/mecha/odysseus/main = 5, - /obj/item/circuitboard/mecha/odysseus/peripherals = 5, - /obj/item/circuitboard/mecha/gygax/main = 1, - /obj/item/circuitboard/mecha/gygax/peripherals = 1, - /obj/item/circuitboard/mecha/gygax/targeting = 1, - /obj/item/circuitboard/mecha/durand/main = 1, - /obj/item/circuitboard/mecha/durand/peripherals = 1, - /obj/item/circuitboard/mecha/durand/targeting = 1, - ) - -//COMPUTER -/obj/effect/spawner/lootdrop/random_computer_circuit_common - loot = list( - /obj/item/circuitboard/computer/aifixer = 5, - /obj/item/circuitboard/computer/arcade/amputation = 5, - /obj/item/circuitboard/computer/arcade/battle = 5, - /obj/item/circuitboard/computer/arcade/orion_trail = 5, - /obj/item/circuitboard/computer/atmos_alert = 5, - /obj/item/circuitboard/computer/card = 5, - /obj/item/circuitboard/computer/cloning = 5, - /obj/item/circuitboard/computer/communications = 5, - /obj/item/circuitboard/computer/launchpad_console = 5, - /obj/item/circuitboard/computer/mech_bay_power_console = 5, - /obj/item/circuitboard/computer/pandemic = 5, - /obj/item/circuitboard/computer/powermonitor/secret = 5, - /obj/item/circuitboard/computer/prototype_cloning = 5, - /obj/item/circuitboard/computer/stationalert = 5, - /obj/item/circuitboard/computer/teleporter = 5, - /obj/item/circuitboard/computer/operating = 5, - /obj/item/circuitboard/computer/crew = 5, - /obj/item/circuitboard/computer/scan_consolenew = 5, - ) - -/obj/effect/spawner/lootdrop/random_computer_circuit_rare - loot = list( - /obj/item/circuitboard/computer/cargo = 5, - /obj/item/circuitboard/computer/communications = 5, - /obj/item/circuitboard/computer/shuttle/helm = 5, - /obj/item/circuitboard/computer/med_data = 5, - ) - -//DESTRUCTIVE ANAL //i'm killing you -/obj/effect/spawner/lootdrop/destructive_anal_loot //what do people usually put in these things anayways - loot = list( - /obj/item/storage/toolbox/syndicate/empty = 650, - /obj/item/gun/ballistic/automatic/pistol/ringneck = 500, - /obj/item/camera_bug = 500, - /obj/item/clothing/gloves/combat = 200, - /obj/item/clothing/head/chameleon = 200, - /obj/item/pen/sleepy = 200, - /obj/item/reagent_containers/hypospray/medipen/stimpack/traitor = 100, - - /obj/item/grenade/c4 = 100, - - /obj/item/wrench/syndie = 30, - /obj/item/screwdriver/nuke = 30, - /obj/item/crowbar/syndie = 30, - /obj/item/wirecutters/syndie = 30, - /obj/item/multitool/syndie = 30, - ) diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm index 7b007bb98472..d3d2cc076ef2 100644 --- a/code/game/turfs/closed/minerals.dm +++ b/code/game/turfs/closed/minerals.dm @@ -196,7 +196,7 @@ . = ..() if (prob(mineralChance)) - var/path = pickweight(mineralSpawnChanceList) + var/path = pick_weight(mineralSpawnChanceList) if(ispath(path, /turf)) var/turf/T = ChangeTurf(path,null,CHANGETURF_IGNORE_AIR) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 333b8b828022..68a2f4675bdb 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -854,7 +854,7 @@ switch(ruin_force) if("Random") - //Can't use pickweight as it might be from "everything" + //Can't use pick_weight as it might be from "everything" ruin_target = select_from[pick(select_from)] else var/selected_ruin = tgui_input_list(usr, "Which ruin?", "Spawn Ruin", select_from, 60 SECONDS) diff --git a/code/modules/antagonists/changeling/powers/pheromone_receptors.dm b/code/modules/antagonists/changeling/powers/pheromone_receptors.dm index 5980993958b0..93905c9d6aed 100644 --- a/code/modules/antagonists/changeling/powers/pheromone_receptors.dm +++ b/code/modules/antagonists/changeling/powers/pheromone_receptors.dm @@ -48,7 +48,7 @@ changelings[C] = (CHANGELING_PHEROMONE_MAX_DISTANCE ** 2) - (distance ** 2) if(changelings.len) - scan_target = pickweight(changelings) //Point at a 'random' changeling, biasing heavily towards closer ones. + scan_target = pick_weight(changelings) //Point at a 'random' changeling, biasing heavily towards closer ones. else scan_target = null diff --git a/code/modules/awaymissions/away_props.dm b/code/modules/awaymissions/away_props.dm index a29d48657446..3b51ebb583d8 100644 --- a/code/modules/awaymissions/away_props.dm +++ b/code/modules/awaymissions/away_props.dm @@ -1,7 +1,7 @@ /obj/effect/oneway name = "one way effect" desc = "Only lets things in from it's dir." - icon = 'icons/effects/mapping_helpers.dmi' + icon = 'icons/effects/mapping/mapping_helpers.dmi' icon_state = "field_dir" invisibility = INVISIBILITY_MAXIMUM anchored = TRUE @@ -14,7 +14,7 @@ /obj/effect/wind name = "wind effect" desc = "Creates pressure effect in it's direction. Use sparingly." - icon = 'icons/effects/mapping_helpers.dmi' + icon = 'icons/effects/mapping/mapping_helpers.dmi' icon_state = "field_dir" invisibility = INVISIBILITY_MAXIMUM var/strength = 30 @@ -32,7 +32,7 @@ /obj/effect/path_blocker name = "magic barrier" desc = "You shall not pass." - icon = 'icons/effects/mapping_helpers.dmi' + icon = 'icons/effects/mapping/mapping_helpers.dmi' icon_state = "blocker" //todo make this actually look fine when visible anchored = TRUE var/list/blocked_types = list() diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 26361b99cfc6..4fb7ceac4527 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -6,7 +6,7 @@ name = "Mob Spawner" density = TRUE anchored = TRUE - icon = 'icons/effects/mapping_helpers.dmi' // These aren't *really* mapping helpers but it fits the most with it's common usage (to help place corpses in maps) + icon = 'icons/effects/mapping/mapping_helpers.dmi' // These aren't *really* mapping helpers but it fits the most with it's common usage (to help place corpses in maps) icon_state = "mobspawner" // So it shows up in the map editor var/mob_type = null var/mob_name = "" @@ -138,6 +138,7 @@ // Base version - place these on maps/templates. /obj/effect/mob_spawn/human mob_type = /mob/living/carbon/human + icon_state = "corpsehuman" //Human specific stuff. var/mob_species = null //Set to make them a mutant race such as lizard or skeleton. Uses the datum typepath instead of the ID. var/datum/outfit/outfit = /datum/outfit //If this is a path, it will be instanced in Initialize() @@ -326,12 +327,10 @@ /obj/effect/mob_spawn/human/corpse/cargo_tech name = "Cargo Tech" outfit = /datum/outfit/job/cargo_tech - icon_state = "corpsecargotech" /obj/effect/mob_spawn/human/cook name = "Cook" outfit = /datum/outfit/job/cook - icon_state = "corpsecook" /obj/effect/mob_spawn/human/cook/husked husk = TRUE @@ -339,8 +338,6 @@ /obj/effect/mob_spawn/human/doctor name = "Doctor" outfit = /datum/outfit/job/doctor - icon_state = "corpsedoctor" - /obj/effect/mob_spawn/human/doctor/alive death = FALSE @@ -363,22 +360,18 @@ /obj/effect/mob_spawn/human/engineer name = "Engineer" outfit = /datum/outfit/job/engineer - icon_state = "corpseengineer" /obj/effect/mob_spawn/human/clown name = "Clown" outfit = /datum/outfit/job/clown - icon_state = "corpseclown" /obj/effect/mob_spawn/human/scientist name = "Scientist" outfit = /datum/outfit/job/scientist - icon_state = "corpsescientist" /obj/effect/mob_spawn/human/miner name = "Shaft Miner" outfit = /datum/outfit/job/miner - icon_state = "corpseminer" /obj/effect/mob_spawn/human/plasmaman mob_species = /datum/species/plasmaman @@ -405,7 +398,6 @@ /obj/effect/mob_spawn/human/bartender name = "Space Bartender" - icon_state = "corpsebartender" id_job = "Bartender" id_access_list = list(ACCESS_BAR) outfit = /datum/outfit/spacebartender diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index a240bf9f8404..210a5cec7a47 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -453,83 +453,6 @@ SAY AAAAAAAAAAAAAAAA FUCK THAT DELAY 15;"} -//lootspawners//-- - -/obj/effect/spawner/lootdrop/snowdin - name = "why are you using this dummy" - lootdoubles = 0 - lootcount = 1 - loot = list(/obj/item/bikehorn = 100) - -/obj/effect/spawner/lootdrop/snowdin/dungeonlite - name = "dungeon lite" - loot = list(/obj/item/melee/classic_baton = 11, - /obj/item/melee/classic_baton/telescopic = 12, - /obj/item/book/granter/spell/smoke = 10, - /obj/item/book/granter/spell/blind = 10, - /obj/item/storage/firstaid/regular = 45, - /obj/item/storage/firstaid/toxin = 35, - /obj/item/storage/firstaid/brute = 27, - /obj/item/storage/firstaid/fire = 27, - /obj/item/storage/toolbox/syndicate = 12, - /obj/item/grenade/c4 = 7, - /obj/item/grenade/clusterbuster/smoke = 15, - /obj/item/clothing/under/chameleon = 13, - /obj/item/clothing/shoes/chameleon/noslip = 10, - /obj/item/borg/upgrade/ddrill = 3, - /obj/item/borg/upgrade/soh = 3) - -/obj/effect/spawner/lootdrop/snowdin/dungeonmid - name = "dungeon mid" - loot = list(/obj/item/defibrillator/compact = 6, - /obj/item/storage/firstaid/tactical = 35, - /obj/item/shield/energy = 6, - /obj/item/shield/riot/tele = 12, - /obj/item/dnainjector/lasereyesmut = 7, - /obj/item/pneumatic_cannon = 15, - /obj/item/melee/transforming/energy/sword = 7, - /obj/item/book/granter/spell/knock = 15, - /obj/item/book/granter/spell/summonitem = 20, - /obj/item/book/granter/spell/forcewall = 17, - /obj/item/storage/backpack/holding = 12, - /obj/item/grenade/spawnergrenade/manhacks = 6, - /obj/item/grenade/spawnergrenade/spesscarp = 7, - /obj/item/grenade/clusterbuster/inferno = 3, - /obj/item/stack/sheet/mineral/diamond{amount = 15} = 10, - /obj/item/stack/sheet/mineral/uranium{amount = 15} = 10, - /obj/item/stack/sheet/mineral/plasma{amount = 15} = 10, - /obj/item/stack/sheet/mineral/gold{amount = 15} = 10, - /obj/item/book/granter/spell/barnyard = 4, - /obj/item/pickaxe/drill/diamonddrill = 6, - /obj/item/borg/upgrade/disablercooler = 7) - - -/obj/effect/spawner/lootdrop/snowdin/dungeonheavy - name = "dungeon heavy" - loot = list(/obj/item/melee/axe/fire = 25, - /obj/item/organ/brain/alien = 17, - /obj/item/dualsaber = 15, - /obj/item/organ/heart/demon = 7, - /obj/item/gun/ballistic/automatic/smg/cobra = 16, - /obj/item/uplink/old = 2, - /obj/item/book/granter/spell/charge = 12, - /obj/item/grenade/clusterbuster/spawner_manhacks = 15, - /obj/item/book/granter/spell/fireball = 10, - /obj/item/pickaxe/drill/jackhammer = 30, - /obj/item/borg/upgrade/syndicate = 13, - /obj/item/borg/upgrade/selfrepair = 17) - -/obj/effect/spawner/lootdrop/snowdin/dungeonmisc - name = "dungeon misc" - lootdoubles = 2 - lootcount = 1 - - loot = list(/obj/item/stack/sheet/mineral/snow{amount = 25} = 10, - /obj/item/toy/snowball = 15, - /obj/item/shovel = 10, - /obj/item/melee/spear = 8, - ) - //special items//-- /obj/structure/barricade/wooden/snowed diff --git a/code/modules/cargo/blackmarket/blackmarket_items/consumables.dm b/code/modules/cargo/blackmarket/blackmarket_items/consumables.dm index 2d9f3af83c06..65a72290bf07 100644 --- a/code/modules/cargo/blackmarket/blackmarket_items/consumables.dm +++ b/code/modules/cargo/blackmarket/blackmarket_items/consumables.dm @@ -4,7 +4,7 @@ /datum/blackmarket_item/consumable/donk_pocket_box name = "Box of Donk Pockets" desc = "A well packaged box containing the favourite snack of every spacefarer." - item = /obj/effect/spawner/lootdrop/donkpockets + item = /obj/effect/spawner/random/food_or_drink/donkpockets stock_min = 2 stock_max = 5 @@ -186,7 +186,7 @@ /datum/blackmarket_item/consumable/ration name = "Ration Pack" desc = "PGF military surplus rations. What's in them? Who knows. Surprise is the spice of life after all." - item = /obj/effect/spawner/lootdrop/ration + item = /obj/effect/spawner/random/food_or_drink/ration price_min = 150 price_max = 300 diff --git a/code/modules/cargo/packs/costumes_toys.dm b/code/modules/cargo/packs/costumes_toys.dm index cab2ac8563af..a7bcbb2fe7d4 100644 --- a/code/modules/cargo/packs/costumes_toys.dm +++ b/code/modules/cargo/packs/costumes_toys.dm @@ -73,7 +73,7 @@ var/the_toy for(var/i in 1 to 5) if(prob(50)) - the_toy = pickweight(GLOB.arcade_prize_pool) + the_toy = pick_weight(GLOB.arcade_prize_pool) else the_toy = pick(subtypesof(/obj/item/toy/plush)) new the_toy(C) @@ -103,7 +103,7 @@ /datum/supply_pack/costumes_toys/mafia/fill(obj/structure/closet/crate/C) for(var/i in 1 to 4) - new /obj/effect/spawner/lootdrop/mafia_outfit(C) + new /obj/effect/spawner/random/clothing/mafia_outfit(C) new /obj/item/virgin_mary(C) if(prob(30)) //Not all mafioso have mustaches, some people also find this item annoying. new /obj/item/clothing/mask/fakemoustache/italian(C) diff --git a/code/modules/cargo/packs/food.dm b/code/modules/cargo/packs/food.dm index 364c53ec9eb5..13402cce51b3 100644 --- a/code/modules/cargo/packs/food.dm +++ b/code/modules/cargo/packs/food.dm @@ -47,12 +47,12 @@ name = "Ration Crate" desc = "6 standerd issue rations." cost = 500 - contains = list(/obj/effect/spawner/lootdrop/ration, - /obj/effect/spawner/lootdrop/ration, - /obj/effect/spawner/lootdrop/ration, - /obj/effect/spawner/lootdrop/ration, - /obj/effect/spawner/lootdrop/ration, - /obj/effect/spawner/lootdrop/ration) + contains = list(/obj/effect/spawner/random/food_or_drink/ration, + /obj/effect/spawner/random/food_or_drink/ration, + /obj/effect/spawner/random/food_or_drink/ration, + /obj/effect/spawner/random/food_or_drink/ration, + /obj/effect/spawner/random/food_or_drink/ration, + /obj/effect/spawner/random/food_or_drink/ration) crate_name = "ration crate" crate_type = /obj/structure/closet/crate diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 0447f62aab9e..db9e2814b2c0 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -259,24 +259,6 @@ item_state = "lgloves" custom_price = 200 -/obj/effect/spawner/lootdrop/gloves - name = "random gloves" - desc = "These gloves are supposed to be a random color..." - icon = 'icons/obj/clothing/gloves.dmi' - icon_state = "random_gloves" - loot = list( - /obj/item/clothing/gloves/color/orange = 1, - /obj/item/clothing/gloves/color/red = 1, - /obj/item/clothing/gloves/color/blue = 1, - /obj/item/clothing/gloves/color/purple = 1, - /obj/item/clothing/gloves/color/green = 1, - /obj/item/clothing/gloves/color/grey = 1, - /obj/item/clothing/gloves/color/light_brown = 1, - /obj/item/clothing/gloves/color/brown = 1, - /obj/item/clothing/gloves/color/white = 1, - /obj/item/clothing/gloves/color/rainbow = 1, - ) - /obj/item/clothing/gloves/maid name = "maid arm covers" desc = "Cylindrical looking tubes that go over your arm, weird." diff --git a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm index f5e4ddcdf55b..8f1e0663ee31 100644 --- a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm +++ b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm @@ -47,26 +47,26 @@ return if(prob(90)) - head = pickweight(list( + head = pick_weight(list( /obj/item/clothing/head/beret/sec/frontier = 10, /obj/item/clothing/head/helmet/bulletproof/x11/frontier = 5, /obj/item/reagent_containers/glass/bucket = 1)) if(prob(60)) - suit = pickweight(list( + suit = pick_weight(list( /obj/item/clothing/suit/armor/vest = 5, /obj/item/clothing/suit/armor/vest/bulletproof/frontier = 5, /obj/item/clothing/suit/armor/vest/scrap = 1)) if(prob(50)) - mask = pickweight(list( + mask = pick_weight(list( /obj/item/clothing/mask/gas/frontiersmen = 12, /obj/item/clothing/mask/gas/sechailer/balaclava = 10, /obj/item/clothing/mask/breath = 7, /obj/item/clothing/mask/whistle/trench = 3)) if(prob(90)) - back = pickweight(list( + back = pick_weight(list( /obj/item/storage/backpack = 20, /obj/item/storage/backpack/satchel = 20, /obj/item/storage/backpack/messenger = 20, @@ -76,7 +76,7 @@ )) if(prob(90)) - shoes = pickweight(list( + shoes = pick_weight(list( /obj/item/clothing/shoes/jackboots = 10, /obj/item/clothing/shoes/sneakers = 5, )) @@ -136,7 +136,7 @@ /obj/item/gun/ballistic/shotgun/doublebarrel/beacon/presawn, /obj/item/gun/energy/e_gun/mini)) if("Melee") - r_hand = pickweight(list( + r_hand = pick_weight(list( /obj/item/melee/knife/survival = 15, /obj/item/melee/baseball_bat = 10, /obj/item/roastingstick = 2, diff --git a/code/modules/events/brain_trauma.dm b/code/modules/events/brain_trauma.dm index f7324e3c57dd..3c68b18d50f9 100644 --- a/code/modules/events/brain_trauma.dm +++ b/code/modules/events/brain_trauma.dm @@ -27,7 +27,7 @@ 15;TRAUMA_RESILIENCE_LOBOTOMY, 5;TRAUMA_RESILIENCE_MAGIC) - var/trauma_type = pickweight(list( + var/trauma_type = pick_weight(list( BRAIN_TRAUMA_MILD = 60, BRAIN_TRAUMA_SEVERE = 30, BRAIN_TRAUMA_SPECIAL = 10 diff --git a/code/modules/events/heart_attack.dm b/code/modules/events/heart_attack.dm index 35d8c4b141e1..73e3b721c067 100644 --- a/code/modules/events/heart_attack.dm +++ b/code/modules/events/heart_attack.dm @@ -18,7 +18,7 @@ heart_attack_contestants[victim] = 1 if(LAZYLEN(heart_attack_contestants)) - var/mob/living/carbon/human/winner = pickweight(heart_attack_contestants) + var/mob/living/carbon/human/winner = pick_weight(heart_attack_contestants) var/datum/disease/D = new /datum/disease/heart_failure() winner.ForceContractDisease(D, FALSE, TRUE) announce_to_ghosts(winner) diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm index 43e60c3137c3..1fbb017b7dd4 100644 --- a/code/modules/events/holiday/xmas.dm +++ b/code/modules/events/holiday/xmas.dm @@ -42,7 +42,7 @@ /obj/effect/spawner/xmastree name = "christmas tree spawner" - icon = 'icons/effects/landmarks_static.dmi' + icon = 'icons/effects/mapping/landmarks_static.dmi' icon_state = "x2" layer = FLY_LAYER diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm index 4f2c3cd1343a..40b979a89577 100644 --- a/code/modules/fishing/fish/_fish.dm +++ b/code/modules/fishing/fish/_fish.dm @@ -386,6 +386,6 @@ if(initial(fish.available_in_random_cases) || !case_fish_only) chance_table[fish] = initial(fish.random_case_rarity) probability_table[argkey] = chance_table - return pickweight(probability_table[argkey]) + return pick_weight(probability_table[argkey]) diff --git a/code/modules/fishing/sources/_fish_source.dm b/code/modules/fishing/sources/_fish_source.dm index 136a650148cd..db051d69175e 100644 --- a/code/modules/fishing/sources/_fish_source.dm +++ b/code/modules/fishing/sources/_fish_source.dm @@ -79,7 +79,7 @@ GLOBAL_LIST_INIT(preset_fish_sources,init_fishing_configurations()) /// In case you want more complex rules for specific spots /datum/fish_source/proc/roll_reward(obj/item/fishing_rod/rod, mob/fisherman) - return pickweight(get_modified_fish_table(rod,fisherman)) + return pick_weight(get_modified_fish_table(rod,fisherman)) /// Gives out the reward if possible /datum/fish_source/proc/dispense_reward(reward_path, mob/fisherman) diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 29ff8ead2f62..30b768e702b0 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -34,7 +34,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( if(world.time < next_hallucination) return - var/halpick = pickweight(GLOB.hallucination_list) + var/halpick = pick_weight(GLOB.hallucination_list) new halpick(src, FALSE) next_hallucination = world.time + rand(100, 600) diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index b5c4c2c42b85..bfc9179c4893 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -341,13 +341,13 @@ /obj/item/pizzabox/infinite/proc/attune_pizza(mob/living/carbon/human/noms) //tonight on "proc names I never thought I'd type" if(!pizza_preferences[noms.ckey]) - pizza_preferences[noms.ckey] = pickweight(pizza_types) + pizza_preferences[noms.ckey] = pick_weight(pizza_types) if(noms.has_quirk(/datum/quirk/pineapple_liker)) pizza_preferences[noms.ckey] = /obj/item/reagent_containers/food/snacks/pizza/pineapple else if(noms.has_quirk(/datum/quirk/pineapple_hater)) var/list/pineapple_pizza_liker = pizza_types.Copy() pineapple_pizza_liker -= /obj/item/reagent_containers/food/snacks/pizza/pineapple - pizza_preferences[noms.ckey] = pickweight(pineapple_pizza_liker) + pizza_preferences[noms.ckey] = pick_weight(pineapple_pizza_liker) else if(noms.mind && noms.mind.assigned_role == "Botanist") pizza_preferences[noms.ckey] = /obj/item/reagent_containers/food/snacks/pizza/dank diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 47e545c33663..52b5f7659305 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -4,7 +4,7 @@ /obj/effect/baseturf_helper //Set the baseturfs of every turf in the /area/ it is placed. name = "baseturf editor" - icon = 'icons/effects/mapping_helpers.dmi' + icon = 'icons/effects/mapping/mapping_helpers.dmi' icon_state = "" var/list/baseturf_to_replace @@ -89,8 +89,9 @@ /obj/effect/mapping_helpers - icon = 'icons/effects/mapping_helpers.dmi' + icon = 'icons/effects/mapping/mapping_helpers.dmi' icon_state = "" + invisibility = INVISIBILITY_OBSERVER var/late = FALSE /obj/effect/mapping_helpers/Initialize() @@ -272,7 +273,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) /obj/effect/mapping_helpers/ianbirthday name = "Ian's Bday Helper" late = TRUE - icon_state = "iansbdayhelper" var/balloon_clusters = 2 /obj/effect/mapping_helpers/ianbirthday/LateInitialize() @@ -331,7 +331,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) /obj/effect/mapping_helpers/ianbirthday/admin//so admins may birthday any room name = "generic birthday setup" - icon_state = "bdayhelper" /obj/effect/mapping_helpers/ianbirthday/admin/LateInitialize() birthday() @@ -341,7 +340,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) /obj/effect/mapping_helpers/iannewyear name = "Ian's New Years Helper" late = TRUE - icon_state = "iansnewyrshelper" /obj/effect/mapping_helpers/iannewyear/LateInitialize() if(SSevents.holidays && SSevents.holidays[NEW_YEAR]) diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index bf6fb15c9332..bf4ad80647ef 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -508,7 +508,7 @@ icon_state = "garden" harvested_name = "lush garden" harvested_desc = "In the soil and shade, something softly grew. It seems some industrious scavenger already passed by." - harvest = /obj/effect/spawner/lootdrop/garden + harvest = /obj/effect/spawner/random/food_or_drink/garden harvest_amount_high = 1 harvest_amount_low = 1 harvest_message_low = "You discover something nestled away in the growing bough." @@ -527,7 +527,7 @@ icon_state = "gardenarid" harvested_name = "sandy garden" harvested_desc = "Beneath a bluff of soft silicate, a sheltered grove slumbered. Some desert wanderer seems to have picked it clean." - harvest = /obj/effect/spawner/lootdrop/garden/arid + harvest = /obj/effect/spawner/random/food_or_drink/garden/arid harvest_amount_high = 1 harvest_amount_low = 1 harvest_message_low = "You brush sand away from a verdant prize, nestled in the leaves." @@ -540,7 +540,7 @@ icon_state = "gardencold" harvested_name = "chilly garden" harvested_desc = "A delicate layer of frost covers hardy brush. Someone came with the blizzard, and left with any prize this might contain." - harvest = /obj/effect/spawner/lootdrop/garden/cold + harvest = /obj/effect/spawner/random/food_or_drink/garden/cold harvest_amount_high = 1 harvest_amount_low = 1 harvest_message_low = "You unearth a snow-covered treat." @@ -553,7 +553,7 @@ icon_state = "gardensick" harvested_name = "sickly garden" harvested_desc = "Polluted water wells up from the cracked earth, where it once fed a patch of something curious. Now only wilted leaves remain." - harvest = /obj/effect/spawner/lootdrop/garden/sick + harvest = /obj/effect/spawner/random/food_or_drink/garden/sick harvest_amount_high = 1 harvest_amount_low = 1 harvest_message_low = "You pry something odd from the poisoned soil." @@ -567,124 +567,13 @@ icon_state = "seaweed" harvested_name = "seaweed patch" harvested_desc = "A patch of seaweed, floating on the surface of the water. It seems someone has already searched through this" - harvest = /obj/effect/spawner/lootdrop/garden/seaweed + harvest = /obj/effect/spawner/random/food_or_drink/garden/seaweed harvest_amount_high = 1 harvest_amount_low = 1 harvest_message_low = "You discover some edible weeds within the patch." harvest_message_med = "You discover some edible weeds within the patch." harvest_message_high = "You discover some edible weeds within the patch." -/obj/effect/spawner/lootdrop/garden - name = "lush garden seeder" - lootcount = 3 - var/list/plant = list( - /obj/item/reagent_containers/food/snacks/grown/ambrosia/deus = 1, - /obj/item/reagent_containers/food/snacks/grown/berries/death/stealth = 2, - /obj/item/reagent_containers/food/snacks/grown/citrus/orange_3d = 1, - /obj/item/reagent_containers/food/snacks/grown/trumpet = 1, - /obj/item/reagent_containers/food/snacks/grown/bungofruit = 1, - /obj/item/seeds/random = 1, - /obj/item/grown/log/bamboo = 2, - /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris = 2, - /obj/item/reagent_containers/food/snacks/grown/berries/poison/stealth = 5, - /obj/item/reagent_containers/food/snacks/grown/citrus/lemon = 2, - /obj/item/reagent_containers/food/snacks/grown/citrus/lime = 2, - /obj/item/reagent_containers/food/snacks/grown/vanillapod = 2, - /obj/item/reagent_containers/food/snacks/grown/moonflower = 2, - /obj/item/reagent_containers/food/snacks/grown/cocoapod = 2, - /obj/item/reagent_containers/food/snacks/grown/pineapple = 2, - /obj/item/reagent_containers/food/snacks/grown/poppy/lily = 2, - /obj/item/reagent_containers/food/snacks/grown/poppy/geranium = 2, - /obj/item/reagent_containers/food/snacks/grown/sugarcane = 2, - /obj/item/reagent_containers/food/snacks/grown/tea = 2, - /obj/item/reagent_containers/food/snacks/grown/tobacco = 2, - /obj/item/reagent_containers/food/snacks/grown/watermelon = 4, - /obj/item/grown/sunflower = 4, - /obj/item/reagent_containers/food/snacks/grown/banana = 4, - /obj/item/reagent_containers/food/snacks/grown/apple = 4, - /obj/item/reagent_containers/food/snacks/grown/berries = 5, - /obj/item/reagent_containers/food/snacks/grown/cherries = 4, - /obj/item/reagent_containers/food/snacks/grown/citrus/orange = 4, - /obj/item/reagent_containers/food/snacks/grown/garlic = 4, - /obj/item/reagent_containers/food/snacks/grown/grapes = 4, - /obj/item/reagent_containers/food/snacks/grown/grass = 5, - /obj/item/reagent_containers/food/snacks/grown/pumpkin = 4, - /obj/item/reagent_containers/food/snacks/grown/rainbow_flower = 4, - /obj/item/reagent_containers/food/snacks/grown/wheat = 4, - /obj/item/reagent_containers/food/snacks/grown/parsnip = 4, - /obj/item/reagent_containers/food/snacks/grown/peas = 4, - /obj/item/reagent_containers/food/snacks/grown/rice = 4, - /obj/item/reagent_containers/food/snacks/grown/soybeans = 4, - /obj/item/reagent_containers/food/snacks/grown/tomato = 4, - /obj/item/reagent_containers/food/snacks/grown/cabbage = 4, - /obj/item/reagent_containers/food/snacks/grown/onion = 4, - /obj/item/reagent_containers/food/snacks/grown/carrot = 4) - -/obj/effect/spawner/lootdrop/garden/Initialize(mapload) - loot = plant - . = ..() - -/obj/effect/spawner/lootdrop/garden/arid - name = "arid garden seeder" - plant = list( - /obj/item/reagent_containers/food/snacks/grown/ghost_chili = 1, - /obj/item/reagent_containers/food/snacks/grown/nettle = 1, - /obj/item/grown/cotton/durathread = 1, - /obj/item/seeds/random = 1, - /obj/item/reagent_containers/food/snacks/grown/redbeet = 1, - /obj/item/reagent_containers/food/snacks/grown/aloe = 2, - /obj/item/grown/cotton = 2, - /obj/item/reagent_containers/food/snacks/grown/mushroom/angel = 2, - /obj/item/reagent_containers/food/snacks/grown/chili = 2, - /obj/item/reagent_containers/food/snacks/grown/whitebeet = 5, - /obj/item/reagent_containers/food/snacks/grown/potato = 4, - /obj/item/reagent_containers/food/snacks/grown/potato/sweet = 4, - /obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle = 4, - /obj/item/reagent_containers/food/snacks/grown/mushroom/plumphelmet = 4, - /obj/item/reagent_containers/food/snacks/grown/corn = 4) - -/obj/effect/spawner/lootdrop/garden/cold - name = "frigid garden seeder" - plant = list( - /obj/item/reagent_containers/food/snacks/grown/bluecherries = 1, - /obj/item/reagent_containers/food/snacks/grown/galaxythistle = 1, - /obj/item/reagent_containers/food/snacks/grown/berries/death/stealth = 1, - /obj/item/seeds/random = 1, - /obj/item/reagent_containers/food/snacks/grown/poppy = 2, - /obj/item/reagent_containers/food/snacks/grown/tomato/blue = 2, - /obj/item/reagent_containers/food/snacks/grown/berries/poison/stealth = 2, - /obj/item/reagent_containers/food/snacks/grown/berries = 4, - /obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle = 4, - /obj/item/reagent_containers/food/snacks/grown/oat = 4, - /obj/item/reagent_containers/food/snacks/grown/grapes/green = 4, - /obj/item/reagent_containers/food/snacks/grown/grass = 4, - /obj/item/reagent_containers/food/snacks/grown/harebell = 5, - /obj/item/seeds/starthistle = 5) - -/obj/effect/spawner/lootdrop/garden/sick - name = "sickly garden seeder" - plant = list( - /obj/item/reagent_containers/food/snacks/grown/cannabis/rainbow = 1, - /obj/item/reagent_containers/food/snacks/grown/cannabis/death = 1, - /obj/item/seeds/replicapod = 1, - /obj/item/reagent_containers/food/snacks/grown/mushroom/angel = 1, - /obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap = 2, - /obj/item/seeds/tower/steel = 2, - /obj/item/reagent_containers/food/snacks/grown/cannabis = 2, - /obj/item/seeds/random = 2, - /obj/item/reagent_containers/food/snacks/grown/mushroom/jupitercup = 2, - /obj/item/reagent_containers/food/snacks/grown/cherrybulbs = 4, - /obj/item/reagent_containers/food/snacks/grown/mushroom/amanita = 4, - /obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap = 4, - /obj/item/reagent_containers/food/snacks/grown/mushroom/reishi = 4, - /obj/item/reagent_containers/food/snacks/grown/berries/glow = 4) - -/obj/effect/spawner/lootdrop/garden/seaweed - name = "seaweed patch seeder" - plant = list( - /obj/item/reagent_containers/food/snacks/grown/seaweed = 1 - ) - /obj/item/reagent_containers/food/snacks/grown/berries/poison/stealth //careful eating from random jungle bushes seed = /obj/item/seeds/berry/poison name = "bunch of berries" diff --git a/code/modules/mining/ore_veins.dm b/code/modules/mining/ore_veins.dm index 16f6afa8da0c..fa497b44a323 100644 --- a/code/modules/mining/ore_veins.dm +++ b/code/modules/mining/ore_veins.dm @@ -72,7 +72,7 @@ GLOBAL_LIST_EMPTY(ore_veins) else ore_type_amount = 1 for(var/ore_count in 1 to ore_type_amount) - var/picked = pickweight(ore_list) + var/picked = pick_weight(ore_list) vein_contents.Add(picked) ore_list.Remove(picked) GLOB.ore_veins += src diff --git a/code/modules/mob/living/simple_animal/hostile/abandoned_minebot.dm b/code/modules/mob/living/simple_animal/hostile/abandoned_minebot.dm index 58e48850c2b8..038aae0900de 100644 --- a/code/modules/mob/living/simple_animal/hostile/abandoned_minebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/abandoned_minebot.dm @@ -35,14 +35,14 @@ minimum_distance = 1 icon_state = "mining_drone_offense" faction = list("mining", "turret") - loot = list(/obj/effect/decal/cleanable/robot_debris, /obj/effect/spawner/lootdrop/minebot) + loot = list(/obj/effect/decal/cleanable/robot_debris, /obj/effect/spawner/random/minebot) projectiletype = /obj/projectile/kinetic/miner/weak /obj/projectile/kinetic/miner/weak damage = 15 -/obj/effect/spawner/lootdrop/minebot +/obj/effect/spawner/random/minebot loot = list(/obj/item/borg/upgrade/modkit/minebot_passthrough = 15, /obj/item/borg/upgrade/modkit/chassis_mod = 15, /obj/item/borg/upgrade/modkit/tracer = 15, diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index b98da0a899fc..6dcff82cb7c4 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -69,7 +69,7 @@ /mob/living/simple_animal/hostile/hivebot/death(gibbed) do_sparks(3, TRUE, src) - new /obj/effect/spawner/lootdrop/waste/hivebot(loc) + new /obj/effect/spawner/random/waste/hivebot(loc) ..(TRUE) /mob/living/simple_animal/hostile/hivebot/range diff --git a/code/modules/mob/living/simple_animal/hostile/human/survivors.dm b/code/modules/mob/living/simple_animal/hostile/human/survivors.dm index 8cfeeff0695a..772c277a0e8d 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/survivors.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/survivors.dm @@ -80,7 +80,7 @@ var/survivor_type //room for alternatives inside the fuckoff grade init. /obj/effect/mob_spawn/human/corpse/damaged/whitesands/Initialize() //everything here should equal out to 100 for the sake of my sanity. - mob_species = pickweight(list( + mob_species = pick_weight(list( /datum/species/human = 50, /datum/species/lizard = 20, /datum/species/ipc = 10, @@ -92,7 +92,7 @@ //to-do: learn how to make mobsprites for other survivors //gloves are a tossup - gloves = pickweight(list( + gloves = pick_weight(list( /obj/item/clothing/gloves/color/black = 60, /obj/item/clothing/gloves/explorer = 30, /obj/item/clothing/gloves/explorer/old = 10 @@ -100,7 +100,7 @@ ) //bags are semi-random. - back = pickweight(list( + back = pick_weight(list( /obj/item/storage/backpack = 20, /obj/item/storage/backpack/explorer = 20, /obj/item/storage/backpack/satchel = 20, @@ -112,7 +112,7 @@ //as are bag contents backpack_contents = list() if(prob(70)) - backpack_contents += pickweight(list( //these could stand to be expanded, right now they're just mildly modified miner ones, and I don't know how to plus that up. + backpack_contents += pick_weight(list( //these could stand to be expanded, right now they're just mildly modified miner ones, and I don't know how to plus that up. /obj/item/soap = 10, /obj/item/stack/marker_beacon/ten = 15, /obj/item/mining_scanner = 5, @@ -128,7 +128,7 @@ ) ) if(prob(70)) - backpack_contents += pickweight(list( + backpack_contents += pick_weight(list( /obj/item/stack/sheet/animalhide/goliath_hide = 20, /obj/item/stack/marker_beacon/ten = 10, /obj/item/mining_scanner = 20, @@ -140,7 +140,7 @@ ) ) if(prob(70)) - backpack_contents += pickweight(list( + backpack_contents += pick_weight(list( /obj/item/stack/sheet/animalhide/goliath_hide = 5, /obj/item/stack/marker_beacon/ten = 5, /obj/item/mining_scanner = 5, @@ -154,7 +154,7 @@ ) ) if (prob(15)) //mayhaps a medkit - backpack_contents += pickweight(list( + backpack_contents += pick_weight(list( /obj/item/storage/firstaid/regular = 50, /obj/item/storage/firstaid/brute = 15, /obj/item/storage/firstaid/medical = 15, @@ -167,7 +167,7 @@ backpack_contents += /obj/item/reagent_containers/hypospray/medipen/survival //masks - mask = pickweight(list( + mask = pick_weight(list( /obj/item/clothing/mask/gas = 40, /obj/item/clothing/mask/gas/explorer = 20, /obj/item/clothing/mask/gas/explorer/old = 20, @@ -177,7 +177,7 @@ //the eyes are the window into the soul. if(prob(70)) - glasses = pickweight(list( + glasses = pick_weight(list( /obj/item/clothing/glasses/heat = 20, /obj/item/clothing/glasses/cold = 20, /obj/item/clothing/glasses/meson = 40, @@ -189,7 +189,7 @@ if(prob(1)) //oh my god they can't hear the sandstorm coming they've got airpods in ears = /obj/item/instrument/piano_synth/headphones/spacepods else - ears = pickweight(list( + ears = pick_weight(list( /obj/item/radio/headset = 50, /obj/item/radio/headset/alt = 50 ) @@ -198,7 +198,7 @@ switch(survivor_type) if("survivor") //uniforms are random to show varied backgrounds, but similar goal - uniform = pickweight(list( + uniform = pick_weight(list( /obj/item/clothing/under/color/random = 65, /obj/item/clothing/under/rank/cargo/miner/lavaland = 10, /obj/item/clothing/under/rank/prisoner = 10, @@ -207,7 +207,7 @@ ) ) //storage is semi-randomized, giving some variety - belt = pickweight(list( + belt = pick_weight(list( /obj/item/storage/belt/fannypack = 40, /obj/item/storage/belt/mining = 20, /obj/item/storage/belt/mining/alt = 15, @@ -223,7 +223,7 @@ r_pocket = /obj/item/spacecash/bundle/smallrand if("hunter") - uniform = pickweight(list( + uniform = pick_weight(list( /obj/item/clothing/under/color/random = 50, /obj/item/clothing/under/rank/cargo/miner/lavaland = 25, /obj/item/clothing/under/rank/cargo/miner/lavaland/old = 15, @@ -231,7 +231,7 @@ /obj/item/clothing/under/utility = 5 ) ) - belt = pickweight(list( + belt = pick_weight(list( /obj/item/storage/belt/mining = 30, /obj/item/storage/belt/fannypack = 20, /obj/item/storage/belt/mining/alt = 15, @@ -251,7 +251,7 @@ visible_message(span_warning("The hunter's weapon shatters as they impact the ground!")) if("gunslinger") - uniform = pickweight(list( + uniform = pick_weight(list( /obj/item/clothing/under/rank/cargo/miner/lavaland = 35, /obj/item/clothing/under/color/random = 25, /obj/item/clothing/under/rank/cargo/miner/lavaland/old = 15, @@ -260,7 +260,7 @@ /obj/item/clothing/under/syndicate/combat = 5 ) ) - belt = pickweight(list( + belt = pick_weight(list( /obj/item/storage/belt/mining = 30, /obj/item/storage/belt/bandolier = 30, /obj/item/storage/belt/military = 20, diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index 2bae8ea2a5dc..7e3e217ecebd 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -463,7 +463,7 @@ H.transform = H.transform.Scale(0.8, 1)//somehow dwarf squashing is borked when not roundstart. I hate WS code /obj/effect/mob_spawn/human/corpse/damaged/legioninfested/Initialize() //in an ideal world, these would generate, the legion would overlay over the corpse, and we'd get cool sprites - mob_species = pickweight(list( + mob_species = pick_weight(list( /datum/species/human = 50, /datum/species/lizard = 20, /datum/species/ipc = 10, @@ -472,7 +472,7 @@ /datum/species/spider = 5 ) ) - var/type = pickweight(list( + var/type = pick_weight(list( "Miner" = 40, "Assistant" = 10, "Engineer" = 5, diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm index 15626099bff9..86476b21b3f4 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm @@ -1,6 +1,6 @@ /datum/outfit/generic/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) . = ..() - uniform = pickweight(list( + uniform = pick_weight(list( /obj/item/clothing/under/utility = 5, /obj/item/clothing/under/utility/skirt = 5, /obj/item/clothing/under/color/black = 1, @@ -21,7 +21,7 @@ /obj/item/clothing/under/syndicate/tacticool = 1, ) ) - suit = pickweight(list( + suit = pick_weight(list( /obj/item/clothing/suit/hooded/wintercoat = 1, /obj/item/clothing/suit/jacket = 1, /obj/item/clothing/suit/jacket/leather = 1, @@ -33,7 +33,7 @@ /obj/item/clothing/suit/toggle/hazard = 1, ) ) - back = pickweight(list( + back = pick_weight(list( /obj/item/storage/backpack = 1, /obj/item/storage/backpack/satchel = 1, /obj/item/storage/backpack/duffelbag = 1, @@ -42,7 +42,7 @@ ) ) if (prob(10)) - belt = pickweight(list( + belt = pick_weight(list( /obj/item/gun/ballistic/automatic/pistol/candor = 2, /obj/item/gun/ballistic/automatic/pistol/commander = 1, /obj/item/gun/ballistic/automatic/pistol/ringneck = 1, @@ -51,13 +51,13 @@ ) ) if(prob(50)) - gloves = pickweight(list( + gloves = pick_weight(list( /obj/item/clothing/gloves/color/black = 1, /obj/item/clothing/gloves/fingerless = 1, /obj/item/clothing/gloves/color/white = 1, ) ) - shoes = pickweight(list( + shoes = pick_weight(list( /obj/item/clothing/shoes/laceup = 1, /obj/item/clothing/shoes/sandal = 1, /obj/item/clothing/shoes/winterboots = 1, @@ -69,7 +69,7 @@ ) ) if(prob(50)) - head = pickweight(list( + head = pick_weight(list( /obj/item/clothing/head/beret = 3, /obj/item/clothing/head/beret/grey = 3, /obj/item/clothing/head/flatcap = 3, @@ -83,7 +83,7 @@ ) ) if(prob(50)) - mask = pickweight(list( + mask = pick_weight(list( /obj/item/clothing/mask/balaclava = 1, /obj/item/clothing/mask/bandana/red = 1, /obj/item/clothing/mask/gas = 3, @@ -91,7 +91,7 @@ ) ) if(prob(25)) - neck = pickweight(list( + neck = pick_weight(list( /obj/item/clothing/neck/scarf/red = 1, /obj/item/clothing/neck/scarf/green = 1, /obj/item/clothing/neck/scarf/darkblue = 1, @@ -103,7 +103,7 @@ ) ears = pick(/obj/item/radio/headset, /obj/item/radio/headset/alt) if(prob(50)) - glasses = pickweight(list( + glasses = pick_weight(list( /obj/item/clothing/glasses/regular = 1, /obj/item/clothing/glasses/regular/circle = 1, /obj/item/clothing/glasses/regular/jamjar = 1, @@ -121,7 +121,7 @@ l_pocket = pick(/obj/item/radio, /obj/item/flashlight) id = /obj/item/card/id backpack_contents = list() - backpack_contents += pickweight(list( + backpack_contents += pick_weight(list( /obj/item/dice/d20 = 1, /obj/item/lipstick = 1, /obj/item/clothing/mask/vape = 1, @@ -151,14 +151,14 @@ /datum/outfit/generic/miner/pre_equip(mob/living/carbon/human/H, visualsOnly) . = ..() if(prob(75)) - uniform = pickweight(list( + uniform = pick_weight(list( /obj/item/clothing/under/rank/cargo/miner/lavaland = 5, /obj/item/clothing/under/rank/cargo/miner = 4, /obj/item/clothing/under/rank/cargo/miner/lavaland/old = 1, ) ) if(prob(25)) - suit = pickweight(list( + suit = pick_weight(list( /obj/item/clothing/suit/hooded/explorer = 18, /obj/item/clothing/suit/hooded/explorer/old = 1, /obj/item/clothing/suit/hooded/cloak/goliath = 1 @@ -167,13 +167,13 @@ if(prob(75)) back = /obj/item/storage/backpack/explorer if(prob(75)) - belt = pickweight(list( + belt = pick_weight(list( /obj/item/storage/belt/mining = 2, /obj/item/storage/belt/mining/alt = 2 ) ) else if(prob(75)) - belt = pickweight(list( + belt = pick_weight(list( /obj/item/pickaxe = 16, /obj/item/pickaxe/mini = 8, /obj/item/pickaxe/silver = 4, @@ -183,7 +183,7 @@ ) ) if(prob(75)) - gloves = pickweight(list( + gloves = pick_weight(list( /obj/item/clothing/gloves/color/black = 9, /obj/item/clothing/gloves/explorer/old = 1 ) @@ -191,7 +191,7 @@ if(prob(75)) shoes = /obj/item/clothing/shoes/workboots/mining if(prob(75)) - mask = pickweight(list( + mask = pick_weight(list( /obj/item/clothing/mask/gas/explorer = 9, /obj/item/clothing/mask/gas/explorer/old = 1 ) @@ -199,7 +199,7 @@ if(prob(50)) glasses = /obj/item/clothing/glasses/meson if(prob(50)) - r_pocket = pickweight(list( + r_pocket = pick_weight(list( /obj/item/stack/marker_beacon = 20, /obj/item/spacecash/bundle/smallrand = 7, /obj/item/reagent_containers/hypospray/medipen/survival = 2, @@ -207,7 +207,7 @@ ) ) if(prob(25)) - l_pocket = pickweight(list( + l_pocket = pick_weight(list( /obj/item/spacecash/bundle/smallrand = 5, /obj/item/reagent_containers/hypospray/medipen/survival = 2, /obj/item/borg/upgrade/modkit/cooldown = 1 @@ -216,7 +216,7 @@ if(prob(75)) for(var/count in 1 to 3) if(prob(70)) - backpack_contents += pickweight(list( + backpack_contents += pick_weight(list( /obj/item/borg/upgrade/modkit/damage = 1, /obj/item/borg/upgrade/modkit/trigger_guard = 1, /obj/item/soap/nanotrasen = 1, @@ -236,7 +236,7 @@ ) if(prob(30)) backpack_contents += list( - /obj/item/reagent_containers/hypospray/medipen/survival = pickweight(list( + /obj/item/reagent_containers/hypospray/medipen/survival = pick_weight(list( 1 = 3, 2 = 2, 3 = 1 @@ -245,7 +245,7 @@ ) else if (prob(75)) backpack_contents = list() - back = pickweight(list( + back = pick_weight(list( /obj/item/kinetic_crusher = 9, /obj/item/kinetic_crusher/old = 1 ) @@ -276,7 +276,7 @@ back = /obj/item/melee/axe/fire for(var/i = 1 to 3) if(prob(75)) - backpack_contents += pickweight(list( + backpack_contents += pick_weight(list( /obj/item/stack/tape/industrial/electrical = 1, /obj/item/electronics/apc = 1, /obj/item/multitool = 1, @@ -305,7 +305,7 @@ else if (prob(75)) back = /obj/item/defibrillator/loaded if(prob(75)) - belt = pickweight(list(/obj/item/storage/belt/medical = 5, /obj/item/defibrillator/compact/loaded = 1)) + belt = pick_weight(list(/obj/item/storage/belt/medical = 5, /obj/item/defibrillator/compact/loaded = 1)) if(prob(75)) gloves = pick(/obj/item/clothing/gloves/color/white, /obj/item/clothing/gloves/color/latex/nitrile) if(prob(75)) @@ -320,7 +320,7 @@ glasses = pick(/obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/hud/health/prescription) for(var/i = 1 to 3) if(prob(75)) - backpack_contents += pickweight(list( + backpack_contents += pick_weight(list( /obj/item/reagent_containers/pill/patch/styptic = 5, /obj/item/reagent_containers/pill/patch/silver_sulf = 5, /obj/item/storage/firstaid/medical = 3, @@ -365,7 +365,7 @@ neck = /obj/item/clothing/neck/tie/horrible for(var/i = 1 to 3) if(prob(75)) - backpack_contents += pickweight(list( + backpack_contents += pick_weight(list( /obj/item/research_notes/loot/tiny = 3, /obj/item/research_notes/loot/small = 3, /obj/item/reagent_scanner = 3, @@ -408,7 +408,7 @@ ears = /obj/item/radio/headset/headset_cargo for(var/i = 1 to 3) if(prob(75)) - backpack_contents += pickweight(list( + backpack_contents += pick_weight(list( /obj/item/spacecash/bundle/smallrand = 5, /obj/item/ammo_box/magazine/illestren_a850r = 5, /obj/item/ammo_box/magazine/zip_ammo_9mm = 5, @@ -456,7 +456,7 @@ suit_store = pick(/obj/item/gun/energy/e_gun, /obj/item/gun/energy/e_gun/smg, /obj/item/gun/energy/e_gun/iot) for(var/i = 1 to 3) if(prob(75)) - backpack_contents += pickweight(list( + backpack_contents += pick_weight(list( /obj/item/restraints/handcuffs = 8, /obj/item/assembly/flash/handheld = 5, /obj/item/storage/box/evidence = 6, diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index f6dff0f23bb8..e90d00a38a42 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -479,7 +479,7 @@ return //we never mate when not alone, so just abort early if(alone && partner && children < 3) - var/childspawn = pickweight(childtype) + var/childspawn = pick_weight(childtype) var/turf/target = get_turf(loc) if(target) return new childspawn(target) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index adb03f1962f4..db9a8db4ec2c 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -77,7 +77,7 @@ if(prob(probability)) zone = check_zone(zone) else - zone = pickweight(list(BODY_ZONE_HEAD = 1, BODY_ZONE_CHEST = 1, BODY_ZONE_L_ARM = 4, BODY_ZONE_R_ARM = 4, BODY_ZONE_L_LEG = 4, BODY_ZONE_R_LEG = 4)) + zone = pick_weight(list(BODY_ZONE_HEAD = 1, BODY_ZONE_CHEST = 1, BODY_ZONE_L_ARM = 4, BODY_ZONE_R_ARM = 4, BODY_ZONE_L_LEG = 4, BODY_ZONE_R_LEG = 4)) return zone ///Would this zone be above the neck diff --git a/code/modules/mob_spawner/hivebot.dm b/code/modules/mob_spawner/hivebot.dm index 630ed6f6f3c7..2b36075d2225 100644 --- a/code/modules/mob_spawner/hivebot.dm +++ b/code/modules/mob_spawner/hivebot.dm @@ -42,7 +42,7 @@ smoke.set_up(2, loc) smoke.start() new /obj/effect/particle_effect/sparks(loc) - new /obj/effect/spawner/lootdrop/waste/hivebot/beacon(loc) + new /obj/effect/spawner/random/waste/hivebot/beacon(loc) /obj/effect/light_emitter/hivespawner set_luminosity = 4 diff --git a/code/modules/mob_spawner/spawner_componet.dm b/code/modules/mob_spawner/spawner_componet.dm index 8a904a5504c4..637423f0b1e0 100644 --- a/code/modules/mob_spawner/spawner_componet.dm +++ b/code/modules/mob_spawner/spawner_componet.dm @@ -114,7 +114,7 @@ spot = pick(peel) else spot = pick(circleviewturfs(origin, spawn_distance_max)) - var/chosen_mob_type = pickweight(mob_types) + var/chosen_mob_type = pick_weight(mob_types) var/mob/living/simple_animal/L = new chosen_mob_type(spot) L.flags_1 |= (P.flags_1 & ADMIN_SPAWNED_1) spawned_mobs += L diff --git a/code/modules/overmap/objects/dynamic_datum.dm b/code/modules/overmap/objects/dynamic_datum.dm index 1ca28df922aa..ad7d5007ca6d 100644 --- a/code/modules/overmap/objects/dynamic_datum.dm +++ b/code/modules/overmap/objects/dynamic_datum.dm @@ -128,7 +128,7 @@ probabilities = list() for(var/datum/planet_type/planet_type as anything in subtypesof(/datum/planet_type)) probabilities[initial(planet_type.planet)] = initial(planet_type.weight) - planet = SSmapping.planet_types[force_encounter ? force_encounter : pickweightAllowZero(probabilities)] + planet = SSmapping.planet_types[force_encounter ? force_encounter : pick_weight_allow_zero(probabilities)] if(planet.planet !=DYNAMIC_WORLD_ASTEROID && planet.planet != DYNAMIC_WORLD_SPACERUIN) //these aren't real planets @@ -192,7 +192,7 @@ log_shuttle("[src] [REF(src)] LEVEL_INIT") // use the ruin type in template if it exists, or pick from ruin list if IT exists; otherwise null - var/selected_ruin = template || (ruin_type ? pickweightAllowZero(SSmapping.ruin_types_probabilities[ruin_type]) : null) + var/selected_ruin = template || (ruin_type ? pick_weight_allow_zero(SSmapping.ruin_types_probabilities[ruin_type]) : null) var/list/dynamic_encounter_values = SSovermap.spawn_dynamic_encounter(src, selected_ruin) if(!length(dynamic_encounter_values)) return FALSE diff --git a/code/modules/overmap/objects/event_datum.dm b/code/modules/overmap/objects/event_datum.dm index 9381e8cae6d5..19604ce53375 100644 --- a/code/modules/overmap/objects/event_datum.dm +++ b/code/modules/overmap/objects/event_datum.dm @@ -323,7 +323,7 @@ /datum/overmap/event/anomaly/affect_ship(datum/overmap/ship/controlled/S) var/area/source_area = pick(S.shuttle_port.shuttle_areas) var/source_object = pick(source_area.contents) - new /obj/effect/spawner/lootdrop/anomaly/storm(get_turf(source_object)) + new /obj/effect/spawner/random/anomaly/storm(get_turf(source_object)) for(var/mob/M as anything in GLOB.player_list) if(S.shuttle_port.is_in_shuttle_bounds(M)) M.playsound_local(S.shuttle_port, 'sound/effects/bamf.ogg', 100) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index b6fe4370d9c5..35adab3cd4a3 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1517,9 +1517,9 @@ var/turf/open/floor/F = T playsound(T, 'sound/effects/bubbles.ogg', 50) F.PlaceOnTop(/turf/open/floor/grass, flags = CHANGETURF_INHERIT_AIR) - new /obj/effect/spawner/lootdrop/flower(T) + new /obj/effect/spawner/random/flower(T) if(prob(75)) - new /obj/effect/spawner/lootdrop/flora(T) + new /obj/effect/spawner/random/flora(T) ..() /datum/reagent/genesis/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index c33b2c4558d3..2cc0134cf8f6 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -199,7 +199,7 @@ id = "rngplant" build_type = BIOGENERATOR materials = list(/datum/material/biomass= 2000) - build_path = /obj/effect/spawner/lootdrop/seeded + build_path = /obj/effect/spawner/random/food_or_drink/seed category = list("initial","LIFESEED_2.0") /datum/design/genesis diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 64e5a0921b2b..62cd6f6bf8ef 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -200,7 +200,7 @@ use_power(750) if(dotype != FAIL) var/list/nodes = techweb_item_boost_check(process) - var/picked = pickweight(nodes) //This should work. + var/picked = pick_weight(nodes) //This should work. if(linked_console) linked_console.stored_research.boost_with_path(SSresearch.techweb_node_by_id(picked), process.type) updateUsrDialog() @@ -292,7 +292,7 @@ else if(prob(EFFECT_PROB_MEDIUM-badThingCoeff)) var/savedName = "[exp_on]" ejectItem(TRUE) - var/newPath = text2path(pickweight(valid_items)) + var/newPath = text2path(pick_weight(valid_items)) loaded_item = new newPath(src) visible_message("[src] malfunctions, transforming [savedName] into [loaded_item]!") investigate_log("Experimentor has transformed [savedName] into [loaded_item]", INVESTIGATE_EXPERIMENTOR) diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 1a5ad3d0d35f..5b6e6239f6a7 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -5,9 +5,9 @@ //NORTH default dir /obj/docking_port - invisibility = INVISIBILITY_ABSTRACT - icon = 'icons/obj/device.dmi' - icon_state = "pinonfar" + invisibility = INVISIBILITY_OBSERVER + icon = 'icons/effects/mapping/docking_ports.dmi' + icon_state = "static" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | LANDING_PROOF | HYPERSPACE_PROOF anchored = TRUE @@ -272,7 +272,7 @@ /obj/docking_port/mobile name = "shuttle" - icon_state = "pinonclose" + icon_state = "mobile" var/area_type = SHUTTLE_DEFAULT_SHUTTLE_AREA_TYPE diff --git a/code/modules/vending/cola.dm b/code/modules/vending/cola.dm index a3fa70ce6209..8592b02f2dae 100644 --- a/code/modules/vending/cola.dm +++ b/code/modules/vending/cola.dm @@ -31,17 +31,6 @@ machine_name = "RobustMore Softdrinks" icon_state = "refill_cola" -/obj/machinery/vending/cola/random - name = "\improper Random Drinkies" - icon_state = "random_cola" - desc = "Uh oh!" - -/obj/machinery/vending/cola/random/Initialize() - ..() - var/T = pick(subtypesof(/obj/machinery/vending/cola) - /obj/machinery/vending/cola/random) - new T(loc) - return INITIALIZE_HINT_QDEL - /obj/machinery/vending/cola/blue icon_state = "Cola_Machine" light_mask = "cola-light-mask" diff --git a/code/modules/vending/snack.dm b/code/modules/vending/snack.dm index cb9b6b1b9d95..7d5e13a5e5c0 100644 --- a/code/modules/vending/snack.dm +++ b/code/modules/vending/snack.dm @@ -26,17 +26,6 @@ /obj/item/vending_refill/snack machine_name = "RobustMore DrinkFoods LLC" -/obj/machinery/vending/snack/random - name = "\improper Random Snackies" - icon_state = "random_snack" - desc = "Uh oh!" - -/obj/machinery/vending/snack/random/Initialize() - ..() - var/T = pick(subtypesof(/obj/machinery/vending/snack) - /obj/machinery/vending/snack/random) - new T(loc) - return INITIALIZE_HINT_QDEL - /obj/machinery/vending/snack/blue icon_state = "snackblue" diff --git a/config/game_options.txt b/config/game_options.txt index 135123b845ad..005649a1480c 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -593,3 +593,8 @@ BLUESPACE_JUMP_WAIT 12000 ## If admins are allowed to use the authentication server as a regular server for testing AUTH_ADMIN_TESTING + +# A config that skews with the random spawners weights +# If the value is lower than 1, it'll tend to even out the odds +# If higher than 1, it'll lean toward common spawns even more. +RANDOM_LOOT_WEIGHT_MODIFIER 1 diff --git a/html/changelogs/archive/2019-03.yml b/html/changelogs/archive/2019-03.yml index b5fd83b8ae4c..af4cd2063ffc 100644 --- a/html/changelogs/archive/2019-03.yml +++ b/html/changelogs/archive/2019-03.yml @@ -430,7 +430,7 @@ - bugfix: Rolling a 17 on the d20 of fate no longer gives you an empty box. Basilman: - bugfix: fixed runtime from selectin missing bodypart due to ran_zone - - code_imp: changed how ran_zone selects a zone from a switch to pickweight + - code_imp: changed how ran_zone selects a zone from a switch to pick_weight Kierany9: - bugfix: Added a 15 second grace period after death to prevent people from avoiding a hivemind host's Reclaim by succumbing. diff --git a/icons/effects/landmarks_static.dmi b/icons/effects/landmarks_static.dmi deleted file mode 100644 index 05301f14a8313341677a74718c2b6d9df943f61d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19814 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%0Dt$x8%$wY} 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 literal 0 HcmV?d00001 diff --git a/icons/effects/mapping/landmarks_static.dmi b/icons/effects/mapping/landmarks_static.dmi new file mode 100644 index 0000000000000000000000000000000000000000..3e51e3f9a6e504f98bf87b4fb1a3121726ec3076 GIT binary patch literal 19106 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%0A2Q#SI`&O6%YK&I2G>edD&j9WO0jL^+-t%=KL(#8 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
    USYq-#3AHn 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 literal 0 HcmV?d00001 diff --git a/icons/effects/mapping_helpers.dmi b/icons/effects/mapping_helpers.dmi deleted file mode 100644 index 50e88be487b0285a932f8ec654a41fae7f03091e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16864 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 D;g-Jl diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi index ae86489bb340232976dce164db24fc6d0d82956c..45e0a73c898a1207b50b1021e6be720c682a2e8d 100644 GIT binary patch literal 76435 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 F{|AceN%Q~! diff --git a/shiptest.dme b/shiptest.dme index 6198fe0b1146..111baf30254e 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -1133,12 +1133,28 @@ #include "code\game\objects\effects\spawners\bombspawner.dm" #include "code\game\objects\effects\spawners\bundle.dm" #include "code\game\objects\effects\spawners\gibspawner.dm" -#include "code\game\objects\effects\spawners\lootdrop.dm" #include "code\game\objects\effects\spawners\mobspawner.dm" +#include "code\game\objects\effects\spawners\spawner.dm" #include "code\game\objects\effects\spawners\structure.dm" -#include "code\game\objects\effects\spawners\traps.dm" -#include "code\game\objects\effects\spawners\vaultspawner.dm" -#include "code\game\objects\effects\spawners\xeno_egg_delivery.dm" +#include "code\game\objects\effects\spawners\random.dm\ai_module.dm" +#include "code\game\objects\effects\spawners\random.dm\anomaly.dm" +#include "code\game\objects\effects\spawners\random.dm\bedsheet.dm" +#include "code\game\objects\effects\spawners\random.dm\boards.dm" +#include "code\game\objects\effects\spawners\random.dm\bureaucracy.dm" +#include "code\game\objects\effects\spawners\random.dm\clothing.dm" +#include "code\game\objects\effects\spawners\random.dm\decoration.dm" +#include "code\game\objects\effects\spawners\random.dm\engineering.dm" +#include "code\game\objects\effects\spawners\random.dm\entertainment.dm" +#include "code\game\objects\effects\spawners\random.dm\exotic.dm" +#include "code\game\objects\effects\spawners\random.dm\food_or_drink.dm" +#include "code\game\objects\effects\spawners\random.dm\maintenance.dm" +#include "code\game\objects\effects\spawners\random.dm\medical.dm" +#include "code\game\objects\effects\spawners\random.dm\random.dm" +#include "code\game\objects\effects\spawners\random.dm\salvaging.dm" +#include "code\game\objects\effects\spawners\random.dm\structure.dm" +#include "code\game\objects\effects\spawners\random.dm\trash.dm" +#include "code\game\objects\effects\spawners\random.dm\vending.dm" +#include "code\game\objects\effects\spawners\random.dm\waste_planet.dm" #include "code\game\objects\effects\temporary_visuals\cult.dm" #include "code\game\objects\effects\temporary_visuals\miscellaneous.dm" #include "code\game\objects\effects\temporary_visuals\temporary_visual.dm" diff --git a/tools/UpdatePaths/Scripts/17256_NEWFOOD_cakebreadnoodle.txt b/tools/UpdatePaths/Scripts/17256_NEWFOOD_cakebreadnoodle.txt deleted file mode 100644 index b8cec913eef2..000000000000 --- a/tools/UpdatePaths/Scripts/17256_NEWFOOD_cakebreadnoodle.txt +++ /dev/null @@ -1,22 +0,0 @@ -/obj/item/food/bread : /obj/item/food/bread/plain{@OLD} -/obj/item/food/bread/@SUBTYPES : /obj/item/food/bread/@SUBTYPES{@OLD} -/obj/item/food/breadslice : /obj/item/food/breadslice/plain{@OLD} -/obj/item/food/breadslice/@SUBTYPES : /obj/item/food/breadslice/@SUBTYPES{@OLD} -/obj/item/food/cake : /obj/item/food/cake/plain{@OLD} -/obj/item/food/cake/@SUBTYPES : /obj/item/food/cake/@SUBTYPES{@OLD} -/obj/item/food/cakeslice : /obj/item/food/cakeslice/plain{@OLD} -/obj/item/food/cakeslice/@SUBTYPES : /obj/item/food/cakeslice/@SUBTYPES{@OLD} - -/obj/item/reagent_containers/food/snacks/cherrycupcake/blue : /obj/item/reagent_containers/food/snacks/cherrycupcake/blue{@OLD} - -/obj/item/food/spaghetti : /obj/item/food/spaghetti/raw{@OLD} -/obj/item/food/spaghetti/@SUBTYPES : /obj/item/food/spaghetti/@SUBTYPES{@OLD} - -/obj/item/food/garlicbread : /obj/item/food/garlicbread{@OLD} -/obj/item/food/butterbiscuit : /obj/item/food/butterbiscuit{@OLD} -/obj/item/food/butterdog : /obj/item/food/butterdog{@OLD} - -/obj/item/food/baguette : /obj/item/food/baguette{@OLD} -/obj/item/food/baguette/@SUBTYPES : /obj/item/food/baguette/@SUBTYPES{@OLD} - -/obj/item/food/deepfryholder : /obj/item/food/deepfryholder{@OLD} diff --git a/tools/UpdatePaths/Scripts/60522_replace_spawners.txt b/tools/UpdatePaths/Scripts/3526_replace_spawners.txt similarity index 62% rename from tools/UpdatePaths/Scripts/60522_replace_spawners.txt rename to tools/UpdatePaths/Scripts/3526_replace_spawners.txt index 9c7a34bd396c..831d337edeb6 100644 --- a/tools/UpdatePaths/Scripts/60522_replace_spawners.txt +++ b/tools/UpdatePaths/Scripts/3526_replace_spawners.txt @@ -1,83 +1,67 @@ #comment This replaces the effect/spawner paths to the new refactored paths https://github.com/tgstation/tgstation/pull/60522 + /obj/effect/loot_site_spawner : /obj/effect/spawner/random/structure/crate -/obj/effect/spawner/lootdrop/costume : /obj/effect/spawner/random/clothing/costume -/obj/effect/spawner/lootdrop/mafia_outfit : /obj/effect/spawner/random/clothing/mafia_outfit -/obj/effect/spawner/lootdrop/minor/twentyfive_percent_cyborg_mask : /obj/effect/spawner/random/clothing/twentyfive_percent_cyborg_mask -/obj/effect/spawner/lootdrop/minor/pirate_or_bandana : /obj/effect/spawner/random/clothing/pirate_or_bandana -/obj/effect/spawner/lootdrop/minor/kittyears_or_rabbitears : /obj/effect/spawner/random/clothing/kittyears_or_rabbitears -/obj/effect/spawner/lootdrop/minor/bowler_or_that : /obj/effect/spawner/random/clothing/bowler_or_that -/obj/effect/spawner/lootdrop/minor/beret_or_rabbitears : /obj/effect/spawner/random/clothing/beret_or_rabbitears -/obj/effect/spawner/bundle/hobo_squat : /obj/effect/spawner/random/trash/hobo_squat -/obj/effect/spawner/bundle/moisture_trap : /obj/effect/spawner/random/trash/moisture_trap -/obj/effect/spawner/lootdrop/maint_drugs : /obj/effect/spawner/random/entertainment/drugs -/obj/effect/spawner/lootdrop/grille_or_trash : /obj/effect/spawner/random/trash/grille_or_waste -/obj/effect/spawner/lootdrop/botanical_waste : /obj/effect/spawner/random/trash/botanical_waste -/obj/effect/spawner/lootdrop/food_packaging : /obj/effect/spawner/random/trash/food_packaging -/obj/effect/spawner/lootdrop/cigbutt : /obj/effect/spawner/random/trash/cigbutt -/obj/effect/spawner/lootdrop/garbage_spawner : /obj/effect/spawner/random/trash/garbage -/obj/effect/spawner/lootdrop/gambling : /obj/effect/spawner/random/entertainment/gambling -/obj/effect/spawner/lootdrop/wallet_loot : /obj/effect/spawner/random/entertainment/wallet_storage -/obj/effect/spawner/lootdrop/organ_spawner : /obj/effect/spawner/random/medical/organs -/obj/effect/spawner/lootdrop/memeorgans : /obj/effect/spawner/random/medical/memeorgans -/obj/effect/spawner/lootdrop/two_percent_xeno_egg_spawner : /obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner -/obj/effect/spawner/lootdrop/three_course_meal : /obj/effect/spawner/random/food_or_drink/three_course_meal -/obj/effect/spawner/lootdrop/refreshing_beverage : /obj/effect/spawner/random/food_or_drink/refreshing_beverage -/obj/effect/spawner/lootdrop/donkpockets : /obj/effect/spawner/random/food_or_drink/donkpockets -/obj/effect/spawner/lootdrop/space/rareseed : /obj/effect/spawner/random/food_or_drink/seed_rare -/obj/effect/spawner/lootdrop/space/cashmoney : /obj/effect/spawner/random/entertainment/money_large -/obj/effect/spawner/lootdrop/space/fancytool/raremedicalonly : /obj/effect/spawner/random/medical/surgery_tool_alien -/obj/effect/spawner/lootdrop/space/fancytool/advmedicalonly : /obj/effect/spawner/random/medical/surgery_tool_advanced -/obj/effect/spawner/lootdrop/space/fancytool/engineonly : /obj/effect/spawner/random/engineering/tool_advanced -/obj/effect/spawner/lootdrop/space/material : /obj/effect/spawner/random/engineering/material_rare -/obj/effect/spawner/lootdrop/decorative_material : /obj/effect/spawner/random/decoration/material -/obj/effect/spawner/lootdrop/maintenance_carpet : /obj/effect/spawner/random/decoration/carpet -/obj/effect/spawner/lootdrop/decorations_spawner : /obj/effect/spawner/random/decoration/generic +/obj/effect/spawner/lootdrop/aimodule_harmful : /obj/effect/spawner/random/aimodule/harmful /obj/effect/spawner/lootdrop/aimodule_harmless : /obj/effect/spawner/random/aimodule/harmless /obj/effect/spawner/lootdrop/aimodule_neutral : /obj/effect/spawner/random/aimodule/neutral -/obj/effect/spawner/lootdrop/aimodule_harmful : /obj/effect/spawner/random/aimodule/harmful -/obj/effect/spawner/lootdrop/techstorage/service : /obj/effect/spawner/random/techstorage/service_all -/obj/effect/spawner/lootdrop/techstorage/rnd : /obj/effect/spawner/random/techstorage/rnd_all -/obj/effect/spawner/lootdrop/techstorage/security : /obj/effect/spawner/random/techstorage/security_all -/obj/effect/spawner/lootdrop/techstorage/engineering : /obj/effect/spawner/random/techstorage/engineering_all -/obj/effect/spawner/lootdrop/techstorage/tcomms : /obj/effect/spawner/random/techstorage/tcomms_all -/obj/effect/spawner/lootdrop/techstorage/medical : /obj/effect/spawner/random/techstorage/medical_all -/obj/effect/spawner/lootdrop/techstorage/ai : /obj/effect/spawner/random/techstorage/ai_all -/obj/effect/spawner/lootdrop/techstorage/command : /obj/effect/spawner/random/techstorage/command_all -/obj/effect/spawner/lootdrop/techstorage/rnd_secure : /obj/effect/spawner/random/techstorage/rnd_secure_all -/obj/effect/spawner/lootdrop/prison_contraband : /obj/effect/spawner/random/contraband/prison -/obj/effect/spawner/lootdrop/armory_contraband : /obj/effect/spawner/random/contraband/armory -/obj/effect/spawner/lootdrop/armory_contraband/metastation : /obj/effect/spawner/random/contraband/armory -/obj/effect/spawner/lootdrop/armory_contraband/donutstation : /obj/effect/spawner/random/contraband/armory -/obj/effect/spawner/lootdrop/gross_decal_spawner : /obj/effect/spawner/random/trash/mess -/obj/effect/spawner/scatter/grime : /obj/effect/spawner/random/trash/grime -/obj/effect/spawner/scatter/moisture : /obj/effect/spawner/random/trash/moisture -/obj/effect/spawner/lootdrop/space/fancytech : /obj/effect/spawner/random/exotic/technology -/obj/effect/spawner/lootdrop/space/languagebook : /obj/effect/spawner/random/exotic/languagebook -/obj/effect/spawner/lootdrop/space/syndiecosmetic : /obj/effect/spawner/random/exotic/syndie -/obj/effect/spawner/lootdrop/space/fancytool : /obj/effect/spawner/random/exotic/tool -/obj/effect/spawner/randomarcade : /obj/effect/spawner/random/entertainment/arcade -/obj/effect/spawner/randomsnackvend : /obj/effect/spawner/random/vending/snackvend -/obj/effect/spawner/randomcolavend : /obj/effect/spawner/random/vending/colavend /obj/effect/spawner/lootdrop/arcade_boards : /obj/effect/spawner/random/techstorage/arcade_boards +/obj/effect/spawner/lootdrop/armory_contraband : /obj/effect/spawner/random/exotic/armory +/obj/effect/spawner/lootdrop/armory_contraband/donutstation : /obj/effect/spawner/random/exotic/armory +/obj/effect/spawner/lootdrop/armory_contraband/metastation : /obj/effect/spawner/random/exotic/armory +/obj/effect/spawner/lootdrop/botanical_waste : /obj/effect/spawner/random/trash/decal/botanical_waste +/obj/effect/spawner/lootdrop/cigbutt : /obj/effect/spawner/random/trash/decal/cigbutt +/obj/effect/spawner/lootdrop/costume : /obj/effect/spawner/random/clothing/costume /obj/effect/spawner/lootdrop/crate_spawner : /obj/effect/spawner/random/structure/crate_abandoned -/obj/effect/spawner/lootdrop/maintenance : /obj/effect/spawner/random/maintenance -/obj/effect/spawner/lootdrop/maintenance/two : /obj/effect/spawner/random/maintenance/two -/obj/effect/spawner/lootdrop/maintenance/three : /obj/effect/spawner/random/maintenance/three -/obj/effect/spawner/lootdrop/maintenance/four : /obj/effect/spawner/random/maintenance/four -/obj/effect/spawner/lootdrop/maintenance/five : /obj/effect/spawner/random/maintenance/five -/obj/effect/spawner/lootdrop/maintenance/six : /obj/effect/spawner/random/maintenance/six -/obj/effect/spawner/lootdrop/maintenance/seven : /obj/effect/spawner/random/maintenance/seven -/obj/effect/spawner/lootdrop/maintenance/eight : /obj/effect/spawner/random/maintenance/eight +/obj/effect/spawner/lootdrop/decorations_spawner : /obj/effect/spawner/random/decoration/generic +/obj/effect/spawner/lootdrop/decorative_material : /obj/effect/spawner/random/decoration/material +/obj/effect/spawner/lootdrop/donkpockets : /obj/effect/spawner/random/food_or_drink/donkpockets +/obj/effect/spawner/lootdrop/donut : /obj/effect/spawner/random/food_or_drink/donut +/obj/effect/spawner/lootdrop/food_packaging : /obj/effect/spawner/random/trash/decal/food_packaging +/obj/effect/spawner/lootdrop/gambling : /obj/effect/spawner/random/entertainment/gambling +/obj/effect/spawner/lootdrop/garbage_spawner : /obj/effect/spawner/random/trash/decal/garbage +/obj/effect/spawner/lootdrop/garden/seaweed : /obj/effect/spawner/random/food_or_drink/garden/seaweed /obj/effect/spawner/lootdrop/gloves : /obj/effect/spawner/random/clothing/gloves /obj/effect/spawner/lootdrop/glowstick : /obj/effect/spawner/random/decoration/glowstick +/obj/effect/spawner/lootdrop/grille_or_trash : /obj/effect/spawner/random/trash/grille_or_waste +/obj/effect/spawner/lootdrop/gross_decal_spawner : /obj/effect/spawner/random/trash/decal/mess /obj/effect/spawner/lootdrop/lizardboots : /obj/effect/spawner/random/clothing/lizardboots -/obj/effect/spawner/lootdrop/pizzaparty : /obj/effect/spawner/random/food_or_drink/pizzaparty -/obj/effect/spawner/lootdrop/snowdin/dungeonlite : /obj/effect/spawner/random/exotic/antag_gear_weak -/obj/effect/spawner/lootdrop/snowdin/dungeonmid : /obj/effect/spawner/random/exotic/antag_gear -/obj/effect/spawner/lootdrop/snowdin/dungeonheavy : /obj/effect/spawner/random/exotic/antag_gear_strong -/obj/effect/spawner/lootdrop/snowdin/dungeonmisc : /obj/effect/spawner/random/exotic/snow_gear -/obj/effect/spawner/lootdrop/seed_vault : /obj/effect/spawner/random/food_or_drink/seed_vault +/obj/effect/spawner/lootdrop/mafia_outfit : /obj/effect/spawner/random/clothing/mafia_outfit +/obj/effect/spawner/lootdrop/maint_drugs : /obj/effect/spawner/random/entertainment/drugs +/obj/effect/spawner/lootdrop/maintenance : /obj/effect/spawner/random/maintenance +/obj/effect/spawner/lootdrop/maintenance_carpet : /obj/effect/spawner/random/decoration/carpet +/obj/effect/spawner/lootdrop/maintenance/eight : /obj/effect/spawner/random/maintenance/eight +/obj/effect/spawner/lootdrop/maintenance/five : /obj/effect/spawner/random/maintenance/five +/obj/effect/spawner/lootdrop/maintenance/four : /obj/effect/spawner/random/maintenance/four +/obj/effect/spawner/lootdrop/maintenance/seven : /obj/effect/spawner/random/maintenance/seven +/obj/effect/spawner/lootdrop/maintenance/six : /obj/effect/spawner/random/maintenance/six +/obj/effect/spawner/lootdrop/maintenance/three : /obj/effect/spawner/random/maintenance/three +/obj/effect/spawner/lootdrop/maintenance/two : /obj/effect/spawner/random/maintenance/two +/obj/effect/spawner/lootdrop/memeorgans : /obj/effect/spawner/random/medical/memeorgans +/obj/effect/spawner/lootdrop/minor/beret_or_rabbitears : /obj/effect/spawner/random/clothing/beret_or_rabbitears +/obj/effect/spawner/lootdrop/minor/bowler_or_that : /obj/effect/spawner/random/clothing/bowler_or_that +/obj/effect/spawner/lootdrop/minor/kittyears_or_rabbitears : /obj/effect/spawner/random/clothing/kittyears_or_rabbitears +/obj/effect/spawner/lootdrop/minor/pirate_or_bandana : /obj/effect/spawner/random/clothing/pirate_or_bandana +/obj/effect/spawner/lootdrop/minor/twentyfive_percent_cyborg_mask : /obj/effect/spawner/random/clothing/twentyfive_percent_cyborg_mask +/obj/effect/spawner/lootdrop/organ_spawner : /obj/effect/spawner/random/medical/organs +/obj/effect/spawner/lootdrop/prison_contraband : /obj/effect/spawner/random/exotic/prison_contraband +/obj/effect/spawner/lootdrop/ration : /obj/effect/spawner/random/food_or_drink/ration +/obj/effect/spawner/lootdrop/techstorage/ai : /obj/effect/spawner/random/techstorage/ai_all +/obj/effect/spawner/lootdrop/techstorage/command : /obj/effect/spawner/random/techstorage/command +/obj/effect/spawner/lootdrop/techstorage/engineering : /obj/effect/spawner/random/techstorage/engineering +/obj/effect/spawner/lootdrop/techstorage/medical : /obj/effect/spawner/random/techstorage/medical +/obj/effect/spawner/lootdrop/techstorage/rnd : /obj/effect/spawner/random/techstorage/rnd +/obj/effect/spawner/lootdrop/techstorage/rnd_secure : /obj/effect/spawner/random/techstorage/rnd_secure +/obj/effect/spawner/lootdrop/techstorage/security : /obj/effect/spawner/random/techstorage/security +/obj/effect/spawner/lootdrop/techstorage/service : /obj/effect/spawner/random/techstorage/service +/obj/effect/spawner/lootdrop/techstorage/tcomms : /obj/effect/spawner/random/techstorage/tcomms +/obj/effect/spawner/lootdrop/three_course_meal : /obj/effect/spawner/random/food_or_drink/three_course_meal +/obj/effect/spawner/lootdrop/wallet_loot : /obj/effect/spawner/random/entertainment/wallet_storage +/obj/effect/spawner/lootdrop/waste/trash : /obj/effect/spawner/random/trash/decal /obj/effect/spawner/lootdrop/whiteship_cere_ripley : /obj/effect/spawner/random/exotic/ripley - - +/obj/effect/spawner/randomarcade : /obj/effect/spawner/random/entertainment/arcade +/obj/machinery/vending/cola/random : /obj/effect/spawner/random/vending/cola +/obj/machinery/vending/snack/random : /obj/effect/spawner/random/vending/snack +/obj/item/bedsheet/dorms : /obj/effect/spawner/random/bedsheet +/obj/item/bedsheet/dorms/double : /obj/effect/spawner/random/bedsheet/double +/obj/item/bedsheet/random : /obj/effect/spawner/random/bedsheet diff --git a/tools/UpdatePaths/Scripts/55614_replacemonkeys.txt b/tools/UpdatePaths/Scripts/55614_replacemonkeys.txt deleted file mode 100644 index 5057faffbb33..000000000000 --- a/tools/UpdatePaths/Scripts/55614_replacemonkeys.txt +++ /dev/null @@ -1,5 +0,0 @@ -#comment This replaces the monkeys pre-species refactor to the monkeys post-species refactor https://github.com/tgstation/tgstation/pull/55614 - -/mob/living/carbon/monkey : /mob/living/carbon/human/species/monkey -/mob/living/carbon/monkey/angry : /mob/living/carbon/human/species/monkey/angry -/mob/living/carbon/monkey/punpun : /mob/living/carbon/human/species/monkey/punpun diff --git a/tools/UpdatePaths/Scripts/55658_apc_pixel_offsets.txt b/tools/UpdatePaths/Scripts/55658_apc_pixel_offsets.txt deleted file mode 100644 index 30b5ba2d5d92..000000000000 --- a/tools/UpdatePaths/Scripts/55658_apc_pixel_offsets.txt +++ /dev/null @@ -1,4 +0,0 @@ -/obj/machinery/power/apc/@SUBTYPES{dir = 1} : @OLD{@OLD; pixel_y = 23} -/obj/machinery/power/apc/@SUBTYPES{dir = 2} : @OLD{@OLD; pixel_y = -23} -/obj/machinery/power/apc/@SUBTYPES{dir = 4} : @OLD{@OLD; pixel_x = 24} -/obj/machinery/power/apc/@SUBTYPES{dir = 8} : @OLD{@OLD; pixel_x = -25} diff --git a/tools/UpdatePaths/Scripts/55658_cornersfix.txt b/tools/UpdatePaths/Scripts/55658_cornersfix.txt deleted file mode 100644 index d9ff8a20232b..000000000000 --- a/tools/UpdatePaths/Scripts/55658_cornersfix.txt +++ /dev/null @@ -1,30 +0,0 @@ -/obj/effect/turf_decal/stripes/corner {dir=1} : /obj/item/bear_armor {@OLD;dir=8} -/obj/effect/turf_decal/stripes/corner {dir=2} : /obj/effect/turf_decal/stripes/corner {@OLD;dir=@SKIP} -/obj/effect/turf_decal/stripes/corner {dir=4} : /obj/effect/turf_decal/stripes/corner {@OLD;dir=1} -/obj/effect/turf_decal/stripes/corner {dir=8} : /obj/effect/turf_decal/stripes/corner {@OLD;dir=4} -/obj/item/bear_armor {dir=8} : /obj/effect/turf_decal/stripes/corner {@OLD} -/obj/effect/turf_decal/stripes/red/corner {dir=1} : /obj/item/bear_armor {@OLD;dir=8} -/obj/effect/turf_decal/stripes/red/corner {dir=2} : /obj/effect/turf_decal/stripes/red/corner {@OLD;dir=@SKIP} -/obj/effect/turf_decal/stripes/red/corner {dir=4} : /obj/effect/turf_decal/stripes/red/corner {@OLD;dir=1} -/obj/effect/turf_decal/stripes/red/corner {dir=8} : /obj/effect/turf_decal/stripes/red/corner {@OLD;dir=4} -/obj/item/bear_armor {dir=8} : /obj/effect/turf_decal/stripes/red/corner {@OLD} -/obj/effect/turf_decal/stripes/white/corner {dir=1} : /obj/item/bear_armor {@OLD;dir=8} -/obj/effect/turf_decal/stripes/white/corner {dir=2} : /obj/effect/turf_decal/stripes/white/corner {@OLD;dir=@SKIP} -/obj/effect/turf_decal/stripes/white/corner {dir=4} : /obj/effect/turf_decal/stripes/white/corner {@OLD;dir=1} -/obj/effect/turf_decal/stripes/white/corner {dir=8} : /obj/effect/turf_decal/stripes/white/corner {@OLD;dir=4} -/obj/item/bear_armor {dir=8} : /obj/effect/turf_decal/stripes/white/corner {@OLD} -/obj/effect/turf_decal/box/corners {dir=1} : /obj/item/bear_armor {@OLD;dir=8} -/obj/effect/turf_decal/box/corners {dir=2} : /obj/effect/turf_decal/box/corners {@OLD;dir=@SKIP} -/obj/effect/turf_decal/box/corners {dir=4} : /obj/effect/turf_decal/box/corners {@OLD;dir=1} -/obj/effect/turf_decal/box/corners {dir=8} : /obj/effect/turf_decal/box/corners {@OLD;dir=4} -/obj/item/bear_armor {dir=8} : /obj/effect/turf_decal/box/corners {@OLD} -/obj/effect/turf_decal/box/red/corners {dir=1} : /obj/item/bear_armor {@OLD;dir=8} -/obj/effect/turf_decal/box/red/corners {dir=2} : /obj/effect/turf_decal/box/red/corners {@OLD;dir=@SKIP} -/obj/effect/turf_decal/box/red/corners {dir=4} : /obj/effect/turf_decal/box/red/corners {@OLD;dir=1} -/obj/effect/turf_decal/box/red/corners {dir=8} : /obj/effect/turf_decal/box/red/corners {@OLD;dir=4} -/obj/item/bear_armor {dir=8} : /obj/effect/turf_decal/box/red/corners {@OLD} -/obj/effect/turf_decal/box/white/corners {dir=1} : /obj/item/bear_armor {@OLD;dir=8} -/obj/effect/turf_decal/box/white/corners {dir=2} : /obj/effect/turf_decal/box/white/corners {@OLD;dir=@SKIP} -/obj/effect/turf_decal/box/white/corners {dir=4} : /obj/effect/turf_decal/box/white/corners {@OLD;dir=1} -/obj/effect/turf_decal/box/white/corners {dir=8} : /obj/effect/turf_decal/box/white/corners {@OLD;dir=4} -/obj/item/bear_armor {dir=8} : /obj/effect/turf_decal/box/white/corners {@OLD} \ No newline at end of file diff --git a/tools/UpdatePaths/Scripts/56644_turfs2decals.txt b/tools/UpdatePaths/Scripts/56644_turfs2decals.txt deleted file mode 100644 index fa330ce089eb..000000000000 --- a/tools/UpdatePaths/Scripts/56644_turfs2decals.txt +++ /dev/null @@ -1,467 +0,0 @@ -/turf/open/floor/circuit/killroom : /turf/open/floor/circuit/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/airless/asteroid : /obj/effect/turf_decal/sand , /turf/open/floor/iron/airless {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/airless/bar : /obj/effect/turf_decal/tile/bar , /obj/effect/turf_decal/tile/bar {dir=1} , /turf/open/floor/iron/airless {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/arrival {dir=1} : /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron/white/corner {@OLD;dir=1} -/turf/open/floor/plasteel/arrival {dir=@UNSET} : /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white/corner {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/arrival {dir=2} : /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white/corner {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/arrival {dir=4} : /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron/white/corner {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/arrival {dir=5} : /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron/cafeteria {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/arrival {dir=6} : /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white/corner {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/arrival {dir=8} : /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white/corner {@OLD;dir=1} -/turf/open/floor/plasteel/arrival {dir=9} : /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white/corner {@OLD;dir=1} -/turf/open/floor/plasteel/arrival {dir=10} : /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/cafeteria {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/arrival/corner {dir=1} : /turf/open/floor/iron/white/corner {@OLD} -/turf/open/floor/plasteel/arrival/corner {dir=@UNSET} : /turf/open/floor/iron/white/corner {@OLD} -/turf/open/floor/plasteel/arrival/corner {dir=2} : /turf/open/floor/iron/white/corner {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/arrival/corner {dir=4} : /obj/effect/turf_decal/tile/blue {dir=@OLD} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/arrival/corner {dir=8} : /obj/effect/turf_decal/tile/blue {dir=@OLD} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/asteroid : /obj/effect/turf_decal/sand , /turf/open/floor/iron -/turf/open/floor/plasteel/bar : /obj/effect/turf_decal/tile/bar , /obj/effect/turf_decal/tile/bar {dir=1} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/barber : /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/cafeteria {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blue : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blue/side {dir=1} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blue/side {dir=@UNSET} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blue/side {dir=2} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blue/side {dir=4} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blue/side {dir=5} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blue/side {dir=6} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blue/side {dir=8} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blue/side {dir=9} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blue/side {dir=10} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blue/corner : /obj/effect/turf_decal/tile/blue {dir=@OLD} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blueyellow : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blueyellow/side {dir=1} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blueyellow/side {dir=@UNSET} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blueyellow/side {dir=2} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blueyellow/side {dir=4} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blueyellow/side {dir=5} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blueyellow/side {dir=6} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blueyellow/side {dir=8} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blueyellow/side {dir=9} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/blueyellow/side {dir=10} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown {dir=1} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown {dir=@UNSET} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown {dir=2} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown {dir=4} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown {dir=5} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown {dir=6} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=4} , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown {dir=8} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown {dir=9} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown {dir=4} , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown {dir=10} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/corner : /obj/effect/turf_decal/tile/brown {dir=@OLD} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/telecomms {dir=1} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown {dir=4} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/telecomms {dir=@UNSET} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/telecomms {dir=2} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/telecomms {dir=4} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=4} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/telecomms {dir=5} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=4} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/telecomms {dir=6} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=4} , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/telecomms {dir=8} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/telecomms {dir=9} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown {dir=4} , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/telecomms {dir=10} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/telecomms/mainframe {dir=1} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown {dir=4} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/telecomms/mainframe {dir=@UNSET} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/telecomms/mainframe {dir=2} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/telecomms/mainframe {dir=4} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=4} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/telecomms/mainframe {dir=5} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=4} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/telecomms/mainframe {dir=6} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=4} , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/telecomms/mainframe {dir=8} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/telecomms/mainframe {dir=9} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown {dir=4} , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brown/telecomms/mainframe {dir=10} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brownold {dir=1} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brownold {dir=@UNSET} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brownold {dir=2} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brownold {dir=4} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brownold {dir=5} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brownold {dir=6} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=4} , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brownold {dir=8} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brownold {dir=9} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown {dir=4} , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brownold {dir=10} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/brownold/corner : /obj/effect/turf_decal/tile/brown {dir=@OLD} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/caution {dir=1} : /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron/dark/corner {@OLD;dir=1} -/turf/open/floor/plasteel/caution {dir=@UNSET} : /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/dark/corner {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/caution {dir=2} : /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/dark/corner {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/caution {dir=4} : /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron/dark/corner {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/caution {dir=5} : /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron/checker {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/caution {dir=6} : /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/dark/corner {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/caution {dir=8} : /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/dark/corner {@OLD;dir=1} -/turf/open/floor/plasteel/caution {dir=9} : /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/dark/corner {@OLD;dir=1} -/turf/open/floor/plasteel/caution {dir=10} : /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/checker {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/caution/corner {dir=1} : /turf/open/floor/iron/dark/corner {@OLD} -/turf/open/floor/plasteel/caution/corner {dir=@UNSET} : /turf/open/floor/iron/dark/corner {@OLD} -/turf/open/floor/plasteel/caution/corner {dir=2} : /turf/open/floor/iron/dark/corner {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/caution/corner {dir=4} : /obj/effect/turf_decal/tile/yellow {dir=@OLD} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/caution/corner {dir=8} : /obj/effect/turf_decal/tile/yellow {dir=@OLD} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/cmo : /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/dark/telecomms/mainframe : /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/dark/telecomms/server : /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/dark/telecomms/server/walkway : /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/side {dir=1} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/side {dir=@UNSET} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/side {dir=2} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/side {dir=4} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/side {dir=5} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/side {dir=6} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/side {dir=8} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/side {dir=9} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/side {dir=10} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/corner : /obj/effect/turf_decal/tile/blue {dir=@OLD} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/side/telecomms {dir=1} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/side/telecomms {dir=@UNSET} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/side/telecomms {dir=2} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/side/telecomms {dir=4} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/side/telecomms {dir=5} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/side/telecomms {dir=6} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/side/telecomms {dir=8} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/side/telecomms {dir=9} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkblue/side/telecomms {dir=10} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkbrown : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=4} , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkbrown/side {dir=1} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkbrown/side {dir=@UNSET} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkbrown/side {dir=2} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkbrown/side {dir=4} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkbrown/side {dir=5} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkbrown/side {dir=6} : /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=4} , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkbrown/side {dir=8} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkbrown/side {dir=9} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown {dir=4} , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkbrown/side {dir=10} : /obj/effect/turf_decal/tile/brown {dir=1} , /obj/effect/turf_decal/tile/brown , /obj/effect/turf_decal/tile/brown {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkbrown/corner : /obj/effect/turf_decal/tile/brown {dir=@OLD} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/side {dir=1} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/side {dir=@UNSET} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/side {dir=2} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/side {dir=4} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/side {dir=5} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/side {dir=6} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/side {dir=8} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/side {dir=9} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/side {dir=10} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/corner : /obj/effect/turf_decal/tile/green {dir=@OLD} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/side/telecomms {dir=1} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/side/telecomms {dir=@UNSET} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/side/telecomms {dir=2} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/side/telecomms {dir=4} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/side/telecomms {dir=5} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/side/telecomms {dir=6} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/side/telecomms {dir=8} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/side/telecomms {dir=9} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkgreen/side/telecomms {dir=10} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=4} , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/side {dir=1} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/side {dir=@UNSET} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/side {dir=2} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/side {dir=4} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/side {dir=5} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/side {dir=6} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=4} , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/side {dir=8} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/side {dir=9} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple {dir=4} , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/side {dir=10} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/corner : /obj/effect/turf_decal/tile/purple {dir=@OLD} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/side/telecomms {dir=1} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple {dir=4} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/side/telecomms {dir=@UNSET} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/side/telecomms {dir=2} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/side/telecomms {dir=4} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=4} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/side/telecomms {dir=5} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=4} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/side/telecomms {dir=6} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=4} , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/side/telecomms {dir=8} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/side/telecomms {dir=9} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple {dir=4} , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkpurple/side/telecomms {dir=10} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=4} , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/side {dir=1} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/side {dir=@UNSET} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/side {dir=2} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/side {dir=4} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/side {dir=5} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/side {dir=6} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=4} , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/side {dir=8} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/side {dir=9} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red {dir=4} , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/side {dir=10} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/corner : /obj/effect/turf_decal/tile/red {dir=@OLD} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/side/telecomms {dir=1} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red {dir=4} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/side/telecomms {dir=@UNSET} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/side/telecomms {dir=2} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/side/telecomms {dir=4} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=4} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/side/telecomms {dir=5} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=4} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/side/telecomms {dir=6} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=4} , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/side/telecomms {dir=8} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/side/telecomms {dir=9} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red {dir=4} , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkred/side/telecomms {dir=10} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/side {dir=1} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/side {dir=@UNSET} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/side {dir=2} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/side {dir=4} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/side {dir=5} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/side {dir=6} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/side {dir=8} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/side {dir=9} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/side {dir=10} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/corner : /obj/effect/turf_decal/tile/yellow {dir=@OLD} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/side/telecomms {dir=1} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/side/telecomms {dir=@UNSET} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/side/telecomms {dir=2} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/side/telecomms {dir=4} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/side/telecomms {dir=5} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/side/telecomms {dir=6} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/side/telecomms {dir=8} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/side/telecomms {dir=9} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/darkyellow/side/telecomms {dir=10} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/iron/escape {dir=1} : /obj/effect/turf_decal/tile/red {dir=4} , /turf/open/floor/iron/white/corner {@OLD;dir=1} -/turf/open/floor/iron/escape {dir=@UNSET} : /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/white/corner {@OLD;dir=@SKIP} -/turf/open/floor/iron/escape {dir=2} : /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/white/corner {@OLD;dir=@SKIP} -/turf/open/floor/iron/escape {dir=4} : /obj/effect/turf_decal/tile/red {dir=4} , /turf/open/floor/iron/white/corner {@OLD;dir=@SKIP} -/turf/open/floor/iron/escape {dir=5} : /obj/effect/turf_decal/tile/red {dir=4} , /turf/open/floor/iron/cafeteria {@OLD;dir=@SKIP} -/turf/open/floor/iron/escape {dir=6} : /obj/effect/turf_decal/tile/red {dir=4} , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/white/corner {@OLD;dir=@SKIP} -/turf/open/floor/iron/escape {dir=8} : /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/white/corner {@OLD;dir=1} -/turf/open/floor/iron/escape {dir=9} : /obj/effect/turf_decal/tile/red {dir=4} , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/white/corner {@OLD;dir=1} -/turf/open/floor/iron/escape {dir=10} : /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/cafeteria {@OLD;dir=@SKIP} -/turf/open/floor/iron/escape/corner {dir=1} : /turf/open/floor/iron/white/corner {@OLD} -/turf/open/floor/iron/escape/corner {dir=@UNSET} : /turf/open/floor/iron/white/corner {@OLD} -/turf/open/floor/iron/escape/corner {dir=2} : /turf/open/floor/iron/white/corner {@OLD;dir=@SKIP} -/turf/open/floor/iron/escape/corner {dir=4} : /obj/effect/turf_decal/tile/red {dir=@OLD} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/iron/escape/corner {dir=8} : /obj/effect/turf_decal/tile/red {dir=@OLD} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/side {dir=1} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/side {dir=@UNSET} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/side {dir=2} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/side {dir=4} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/side {dir=5} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/side {dir=6} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/side {dir=8} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/side {dir=9} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/side {dir=10} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/corner : /obj/effect/turf_decal/tile/green {dir=@OLD} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/side/telecomms {dir=1} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/side/telecomms {dir=@UNSET} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/side/telecomms {dir=2} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/side/telecomms {dir=4} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/side/telecomms {dir=5} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/side/telecomms {dir=6} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/side/telecomms {dir=8} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/side/telecomms {dir=9} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/green/side/telecomms {dir=10} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenblue : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenblue/side {dir=1} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenblue/side {dir=@UNSET} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenblue/side {dir=2} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenblue/side {dir=4} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenblue/side {dir=5} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenblue/side {dir=6} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenblue/side {dir=8} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenblue/side {dir=9} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenblue/side {dir=10} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenyellow : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenyellow/side {dir=1} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenyellow/side {dir=@UNSET} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenyellow/side {dir=2} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenyellow/side {dir=4} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenyellow/side {dir=5} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenyellow/side {dir=6} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenyellow/side {dir=8} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenyellow/side {dir=9} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/greenyellow/side {dir=10} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/hydrofloor : /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=4} , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/side {dir=1} : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/side {dir=@UNSET} : /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/side {dir=2} : /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/side {dir=4} : /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/side {dir=5} : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/side {dir=6} : /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=4} , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/side {dir=8} : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/side {dir=9} : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral {dir=4} , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/side {dir=10} : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/corner : /obj/effect/turf_decal/tile/neutral {dir=@OLD} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/side/telecomms {dir=1} : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral {dir=4} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/side/telecomms {dir=@UNSET} : /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/side/telecomms {dir=2} : /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/side/telecomms {dir=4} : /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=4} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/side/telecomms {dir=5} : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=4} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/side/telecomms {dir=6} : /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=4} , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/side/telecomms {dir=8} : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/side/telecomms {dir=9} : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral {dir=4} , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/neutral/side/telecomms {dir=10} : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/orange : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/orange/side {dir=1} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/orange/side {dir=@UNSET} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/orange/side {dir=2} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/orange/side {dir=4} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/orange/side {dir=5} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/orange/side {dir=6} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/orange/side {dir=8} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/orange/side {dir=9} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/orange/side {dir=10} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/orange/corner : /obj/effect/turf_decal/tile/yellow {dir=@OLD} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/purple : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=4} , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/purple/side {dir=1} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/purple/side {dir=@UNSET} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/purple/side {dir=2} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/purple/side {dir=4} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/purple/side {dir=5} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/purple/side {dir=6} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=4} , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/purple/side {dir=8} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/purple/side {dir=9} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple {dir=4} , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/purple/side {dir=10} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/purple/corner : /obj/effect/turf_decal/tile/purple {dir=@OLD} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/red : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=4} , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/red/side {dir=1} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/red/side {dir=@UNSET} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/red/side {dir=2} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/red/side {dir=4} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/red/side {dir=5} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/red/side {dir=6} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=4} , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/red/side {dir=8} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/red/side {dir=9} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red {dir=4} , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/red/side {dir=10} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/red/corner : /obj/effect/turf_decal/tile/red {dir=@OLD} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue/redside {dir=1} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue/redside {dir=@UNSET} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue/redside {dir=2} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue/redside {dir=4} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue/redside {dir=5} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue/redside {dir=6} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue/redside {dir=8} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue/redside {dir=9} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue/redside {dir=10} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue/blueside {dir=1} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue/blueside {dir=@UNSET} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue/blueside {dir=2} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue/blueside {dir=4} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue/blueside {dir=5} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue/blueside {dir=6} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue/blueside {dir=8} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue/blueside {dir=9} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redblue/blueside {dir=10} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen/side {dir=1} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen/side {dir=@UNSET} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen/side {dir=2} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen/side {dir=4} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen/side {dir=5} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen/side {dir=6} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen/side {dir=8} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen/side {dir=9} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen/side {dir=10} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen/side {dir=1} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen/side {dir=@UNSET} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen/side {dir=2} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen/side {dir=4} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen/side {dir=5} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen/side {dir=6} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen/side {dir=8} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen/side {dir=9} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redgreen/side {dir=10} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redyellow : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redyellow/side {dir=1} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redyellow/side {dir=@UNSET} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redyellow/side {dir=2} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redyellow/side {dir=4} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redyellow/side {dir=5} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redyellow/side {dir=6} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redyellow/side {dir=8} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redyellow/side {dir=9} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/redyellow/side {dir=10} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/vault : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=4} , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/vault/airless : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=4} , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron/dark/airless {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/vault/snowdin : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=4} , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron/dark/snowdin {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/vault/telecomms : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=4} , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/vault/telecomms/mainframe : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=4} , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/vault/killroom : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=4} , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron/dark/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/vault/side {dir=1} : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/vault/side {dir=@UNSET} : /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/vault/side {dir=2} : /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/vault/side {dir=4} : /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/vault/side {dir=5} : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=4} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/vault/side {dir=6} : /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=4} , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/vault/side {dir=8} : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/vault/side {dir=9} : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral {dir=4} , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/vault/side {dir=10} : /obj/effect/turf_decal/tile/neutral {dir=1} , /obj/effect/turf_decal/tile/neutral , /obj/effect/turf_decal/tile/neutral {dir=8} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/vault/corner : /obj/effect/turf_decal/tile/neutral {dir=@OLD} , /turf/open/floor/iron/dark {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/side {dir=1} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/side {dir=@UNSET} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/side {dir=2} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/side {dir=4} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/side {dir=5} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/side {dir=6} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/side {dir=8} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/side {dir=9} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/side {dir=10} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/corner : /obj/effect/turf_decal/tile/blue {dir=@OLD} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/side/telecomms {dir=1} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron/white/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/side/telecomms {dir=@UNSET} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/side/telecomms {dir=2} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/side/telecomms {dir=4} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron/white/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/side/telecomms {dir=5} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=4} , /turf/open/floor/iron/white/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/side/telecomms {dir=6} : /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/side/telecomms {dir=8} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/side/telecomms {dir=9} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue {dir=4} , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteblue/side/telecomms {dir=10} : /obj/effect/turf_decal/tile/blue {dir=1} , /obj/effect/turf_decal/tile/blue , /obj/effect/turf_decal/tile/blue {dir=8} , /turf/open/floor/iron/white/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitegreen : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitegreen/side {dir=1} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitegreen/side {dir=@UNSET} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitegreen/side {dir=2} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitegreen/side {dir=4} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitegreen/side {dir=5} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=4} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitegreen/side {dir=6} : /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitegreen/side {dir=8} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitegreen/side {dir=9} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green {dir=4} , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitegreen/side {dir=10} : /obj/effect/turf_decal/tile/green {dir=1} , /obj/effect/turf_decal/tile/green , /obj/effect/turf_decal/tile/green {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitegreen/corner : /obj/effect/turf_decal/tile/green {dir=@OLD} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=4} , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/side {dir=1} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple {dir=4} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/side {dir=@UNSET} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/side {dir=2} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/side {dir=4} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=4} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/side {dir=5} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=4} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/side {dir=6} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=4} , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/side {dir=8} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/side {dir=9} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple {dir=4} , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/side {dir=10} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/corner : /obj/effect/turf_decal/tile/purple {dir=@OLD} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/side/telecomms {dir=1} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple {dir=4} , /turf/open/floor/iron/white/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/side/telecomms {dir=@UNSET} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/white/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/side/telecomms {dir=2} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/white/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/side/telecomms {dir=4} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=4} , /turf/open/floor/iron/white/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/side/telecomms {dir=5} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=4} , /turf/open/floor/iron/white/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/side/telecomms {dir=6} : /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=4} , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/white/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/side/telecomms {dir=8} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/white/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/side/telecomms {dir=9} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple {dir=4} , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/white/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitepurple/side/telecomms {dir=10} : /obj/effect/turf_decal/tile/purple {dir=1} , /obj/effect/turf_decal/tile/purple , /obj/effect/turf_decal/tile/purple {dir=8} , /turf/open/floor/iron/white/telecomms {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitered : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=4} , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitered/side {dir=1} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red {dir=4} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitered/side {dir=@UNSET} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitered/side {dir=2} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitered/side {dir=4} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=4} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitered/side {dir=5} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=4} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitered/side {dir=6} : /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=4} , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitered/side {dir=8} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitered/side {dir=9} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red {dir=4} , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitered/side {dir=10} : /obj/effect/turf_decal/tile/red {dir=1} , /obj/effect/turf_decal/tile/red , /obj/effect/turf_decal/tile/red {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whitered/corner : /obj/effect/turf_decal/tile/red {dir=@OLD} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteyellow : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteyellow/side {dir=1} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteyellow/side {dir=@UNSET} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteyellow/side {dir=2} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteyellow/side {dir=4} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteyellow/side {dir=5} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteyellow/side {dir=6} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteyellow/side {dir=8} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteyellow/side {dir=9} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteyellow/side {dir=10} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/whiteyellow/corner : /obj/effect/turf_decal/tile/yellow {dir=@OLD} , /turf/open/floor/iron/white {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/yellow : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/yellow/side {dir=1} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/yellow/side {dir=@UNSET} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/yellow/side {dir=2} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/yellow/side {dir=4} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/yellow/side {dir=5} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/yellow/side {dir=6} : /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/yellow/side {dir=8} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/yellow/side {dir=9} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow {dir=4} , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/yellow/side {dir=10} : /obj/effect/turf_decal/tile/yellow {dir=1} , /obj/effect/turf_decal/tile/yellow , /obj/effect/turf_decal/tile/yellow {dir=8} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plasteel/yellow/corner : /obj/effect/turf_decal/tile/yellow {dir=@OLD} , /turf/open/floor/iron {@OLD;dir=@SKIP} -/turf/open/floor/plating/airless/astplate : /obj/effect/turf_decal/sand/plating , /turf/open/floor/plating/airless {@OLD;dir=@SKIP} -/turf/open/floor/plating/astplate : /obj/effect/turf_decal/sand/plating , /turf/open/floor/plating {@OLD;dir=@SKIP} \ No newline at end of file diff --git a/tools/UpdatePaths/Scripts/59820_replaceplasteelturf.txt b/tools/UpdatePaths/Scripts/59820_replaceplasteelturf.txt deleted file mode 100644 index 1f3db958ca5f..000000000000 --- a/tools/UpdatePaths/Scripts/59820_replaceplasteelturf.txt +++ /dev/null @@ -1,50 +0,0 @@ -/turf/open/floor/plasteel : /turf/open/floor/iron {@OLD} -/turf/open/floor/plasteel/airless : /turf/open/floor/iron/airless {@OLD} -/turf/open/floor/plasteel/airless/cafeteria : /turf/open/floor/iron/cafeteria/airless {@OLD} -/turf/open/floor/plasteel/airless/dark : /turf/open/floor/iron/dark/airless {@OLD} -/turf/open/floor/plasteel/airless/showroomfloor : /turf/open/floor/iron/showroomfloor/airless {@OLD} -/turf/open/floor/plasteel/airless/solarpanel : /turf/open/floor/iron/solarpanel/airless {@OLD} -/turf/open/floor/plasteel/airless/white : /turf/open/floor/iron/white/airless {@OLD} -/turf/open/floor/plasteel/airless/white/corner : /turf/open/floor/iron/white/corner/airless {@OLD} -/turf/open/floor/plasteel/airless/white/side : /turf/open/floor/iron/white/side/airless {@OLD} -/turf/open/floor/plasteel/bluespace : /turf/open/floor/iron/bluespace {@OLD} -/turf/open/floor/plasteel/cafeteria : /turf/open/floor/iron/cafeteria {@OLD} -/turf/open/floor/plasteel/chapel : /turf/open/floor/iron/chapel {@OLD} -/turf/open/floor/plasteel/checker : /turf/open/floor/iron/checker {@OLD} -/turf/open/floor/plasteel/cult : /turf/open/floor/cult {@OLD} -/turf/open/floor/plasteel/cult/airless : /turf/open/floor/cult/airless {@OLD} -/turf/open/floor/plasteel/dark : /turf/open/floor/iron/dark {@OLD} -/turf/open/floor/plasteel/dark/airless : /turf/open/floor/iron/dark/airless {@OLD} -/turf/open/floor/plasteel/dark/corner : /turf/open/floor/iron/dark/corner {@OLD} -/turf/open/floor/plasteel/dark/side : /turf/open/floor/iron/dark/side {@OLD} -/turf/open/floor/plasteel/dark/snowdin : /turf/open/floor/iron/dark/snowdin {@OLD} -/turf/open/floor/plasteel/dark/telecomms : /turf/open/floor/iron/dark/telecomms {@OLD} -/turf/open/floor/plasteel/elevatorshaft : /turf/open/floor/plating/elevatorshaft {@OLD} -/turf/open/floor/plasteel/freezer : /turf/open/floor/iron/freezer {@OLD} -/turf/open/floor/plasteel/freezer/airless : /turf/open/floor/iron/freezer/airless {@OLD} -/turf/open/floor/plasteel/goonplaque : /turf/open/floor/iron/goonplaque {@OLD} -/turf/open/floor/plasteel/grimy : /turf/open/floor/iron/grimy {@OLD} -/turf/open/floor/plasteel/icemoon : /turf/open/floor/iron/icemoon {@OLD} -/turf/open/floor/plasteel/kitchen_coldroom : /turf/open/floor/iron/kitchen_coldroom {@OLD} -/turf/open/floor/plasteel/kitchen_coldroom/freezerfloor : /turf/open/floor/iron/kitchen_coldroom/freezerfloor {@OLD} -/turf/open/floor/plasteel/recharge_floor : /turf/open/floor/iron/recharge_floor {@OLD} -/turf/open/floor/plasteel/recharge_floor/asteroid : /turf/open/floor/iron/recharge_floor/asteroid {@OLD} -/turf/open/floor/plasteel/rockvault : /turf/open/floor/vault/rock {@OLD} -/turf/open/floor/plasteel/rockvault/alien : /turf/open/floor/vault/alien {@OLD} -/turf/open/floor/plasteel/rockvault/sandstone : /turf/open/floor/vault/sandstone {@OLD} -/turf/open/floor/plasteel/sepia : /turf/open/floor/iron/sepia {@OLD} -/turf/open/floor/plasteel/showroomfloor : /turf/open/floor/iron/showroomfloor {@OLD} -/turf/open/floor/plasteel/solarpanel : /turf/open/floor/iron/solarpanel {@OLD} -/turf/open/floor/plasteel/stairs : /turf/open/floor/iron/stairs {@OLD} -/turf/open/floor/plasteel/stairs/left : /turf/open/floor/iron/stairs/left {@OLD} -/turf/open/floor/plasteel/stairs/medium : /turf/open/floor/iron/stairs/medium {@OLD} -/turf/open/floor/plasteel/stairs/old : /turf/open/floor/iron/stairs/old {@OLD} -/turf/open/floor/plasteel/stairs/right : /turf/open/floor/iron/stairs/right {@OLD} -/turf/open/floor/plasteel/telecomms : /turf/open/floor/iron/telecomms {@OLD} -/turf/open/floor/plasteel/vaporwave : /turf/open/floor/iron/vaporwave {@OLD} -/turf/open/floor/plasteel/white : /turf/open/floor/iron/white {@OLD} -/turf/open/floor/plasteel/white/corner : /turf/open/floor/iron/white/corner {@OLD} -/turf/open/floor/plasteel/white/side : /turf/open/floor/iron/white/side {@OLD} -/turf/open/floor/plasteel/white/telecomms : /turf/open/floor/iron/white/telecomms {@OLD} -/turf/open/floor/plasteel/yellowsiding : /turf/open/floor/iron/yellowsiding, /obj/effect/turf_decal/siding/yellow {@OLD} -/turf/open/floor/plasteel/yellowsiding/corner : /turf/open/floor/iron/yellowsiding/corner, /obj/effect/turf_decal/siding/yellow/corner {@OLD} diff --git a/tools/UpdatePaths/Scripts/60619_toxins_to_plasma.txt b/tools/UpdatePaths/Scripts/60619_toxins_to_plasma.txt deleted file mode 100644 index bb1b4bb2935d..000000000000 --- a/tools/UpdatePaths/Scripts/60619_toxins_to_plasma.txt +++ /dev/null @@ -1,38 +0,0 @@ -/obj/machinery/airlock_sensor/incinerator_toxmix : /obj/machinery/airlock_sensor/incinerator_ordmix -/obj/machinery/button/door/incinerator_vent_toxmix : /obj/machinery/button/door/incinerator_vent_ordmix -/obj/machinery/button/ignition/incinerator/toxmix : /obj/machinery/button/ignition/incinerator/ordmix -/obj/machinery/camera/preset/toxins : /obj/machinery/camera/preset/ordnance -/obj/machinery/air_sensor/atmos/toxins_mixing_tank : /obj/machinery/air_sensor/atmos/ordnance_mixing_tank -/obj/machinery/computer/atmos_control/toxinsmix : /obj/machinery/computer/atmos_control/ordnancemix -/obj/machinery/computer/security/telescreen/toxins : /obj/machinery/computer/security/telescreen/ordnance -/obj/machinery/computer/pod/old/mass_driver_controller/toxinsdriver : /obj/machinery/computer/pod/old/mass_driver_controller/ordnancedriver -/obj/machinery/computer/pod/old/mass_driver_controller/toxinsdriver/longrange : /obj/machinery/computer/pod/old/mass_driver_controller/ordnancedriver/longrange -/obj/machinery/door/airlock/research/glass/incinerator/toxmix_interior : /obj/machinery/door/airlock/research/glass/incinerator/ordmix_interior -/obj/machinery/door/airlock/research/glass/incinerator/toxmix_exterior : /obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior -/obj/machinery/door/poddoor/incinerator_toxmix : /obj/machinery/door/poddoor/incinerator_ordmix -/obj/machinery/door/poddoor/massdriver_toxins : /obj/machinery/door/poddoor/massdriver_ordnance -/obj/machinery/embedded_controller/radio/airlock_controller/incinerator_toxmix : /obj/machinery/embedded_controller/radio/airlock_controller/incinerator_ordmix -/obj/machinery/igniter/incinerator_toxmix : /obj/machinery/igniter/incinerator_ordmix -/obj/machinery/sparker/toxmix : /obj/machinery/sparker/ordmix -/obj/machinery/mass_driver/toxins : /obj/machinery/mass_driver/ordnance -/obj/item/circuitboard/computer/atmos_control/toxinsmix : /obj/item/circuitboard/computer/atmos_control/ordnancemix -/obj/item/circuitboard/computer/atmos_control/tank/toxin_tank : /obj/item/circuitboard/computer/atmos_control/tank/plasma_tank -/obj/machinery/computer/atmos_control/tank/toxin_tank : /obj/machinery/computer/atmos_control/tank/plasma_tank -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_toxmix : /obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxins_mixing_input : /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/ordnance_mixing_input -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxins_mixing_output : /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/ordnance_mixing_output - -/obj/machinery/portable_atmospherics/canister/toxins : /obj/machinery/portable_atmospherics/canister/plasma -/obj/machinery/air_sensor/atmos/toxin_tank : /obj/machinery/air_sensor/atmos/plasma_tank -/obj/machinery/computer/atmos_control/tank/toxin_tank : /obj/machinery/computer/atmos_control/tank/plasma_tank -/obj/machinery/atmospherics/components/tank/toxins : /obj/machinery/atmospherics/components/tank/plasma -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxin_input : /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/plasma_input -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxin_output : /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/plasma_output -/obj/machinery/atmospherics/miner/toxins : /obj/machinery/atmospherics/miner/plasma - -/obj/item/storage/backpack/satchel/tox : /obj/item/storage/backpack/satchel/science -/obj/item/cartridge/signal/toxins : /obj/item/cartridge/signal/ordnance -/obj/item/pda/toxins : /obj/item/pda/science -/obj/item/book/manual/wiki/toxins : /obj/item/book/manual/wiki/ordnance -/obj/item/storage/backpack/duffelbag/toxins : /obj/item/storage/backpack/duffelbag/science -/obj/item/paper/fluff/jobs/toxins/chemical_info : /obj/item/paper/fluff/jobs/ordnance/chemical_info diff --git a/tools/UpdatePaths/Scripts/61694_reinforcedwindows.txt b/tools/UpdatePaths/Scripts/61694_reinforcedwindows.txt deleted file mode 100644 index c084b6bf87b1..000000000000 --- a/tools/UpdatePaths/Scripts/61694_reinforcedwindows.txt +++ /dev/null @@ -1,35 +0,0 @@ -#This replaces the window/shuttle and window/plasma/reinforced with the refactors from https://github.com/tgstation/tgstation/pull/61694#pullrequestreview-763648844 - -/obj/structure/window/plasma/reinforced : /obj/structure/window/reinforced/plasma -/obj/structure/window/plasma/reinforced/fulltile : /obj/structure/window/reinforced/plasma/fulltile -/obj/structure/window/plasma/reinforced/unanchored : /obj/structure/window/reinforced/plasma/unanchored -/obj/structure/window/plasma/reinforced/fulltile/unanchored : /obj/structure/window/reinforced/plasma/fulltile/unanchored -/obj/structure/window/plasma/reinforced/plastitanium : /obj/structure/window/reinforced/plasma/plastitanium -/obj/structure/window/plasma/reinforced/plastitanium/unanchored : /obj/structure/window/reinforced/plasma/plastitanium/unanchored - -/obj/structure/window/shuttle : /obj/structure/window/reinforced/shuttle -/obj/structure/window/shuttle/unanchored : /obj/structure/window/reinforced/shuttle/unanchored -/obj/structure/window/shuttle/tinted : /obj/structure/window/reinforced/shuttle/tinted -/obj/structure/window/shuttle/survival_pod : /obj/structure/window/reinforced/shuttle/survival_pod - -/obj/structure/window/shuttle/survival_pod/spawner/east : /obj/structure/window/reinforced/shuttle/survival_pod/spawner/east -/obj/structure/window/shuttle/survival_pod/spawner/west : /obj/structure/window/reinforced/shuttle/survival_pod/spawner/west -/obj/structure/window/shuttle/survival_pod/spawner/north : /obj/structure/window/reinforced/shuttle/survival_pod/spawner/north - -/obj/structure/window/plasma/reinforced/spawner/north : /obj/structure/window/reinforced/plasma/spawner/north -/obj/structure/window/plasma/reinforced/spawner/east : /obj/structure/window/reinforced/plasma/spawner/east -/obj/structure/window/plasma/reinforced/spawner/west : /obj/structure/window/reinforced/plasma/spawner/west -/obj/effect/spawner/structure/window/shuttle : /obj/effect/spawner/structure/window/reinforced/shuttle - -/obj/effect/spawner/structure/window/hollow/plasma/reinforced : /obj/effect/spawner/structure/window/hollow/reinforced/plasma -/obj/effect/spawner/structure/window/hollow/plasma/reinforced/end : /obj/effect/spawner/structure/window/hollow/reinforced/plasma/end -/obj/effect/spawner/structure/window/hollow/plasma/reinforced/middle : /obj/effect/spawner/structure/window/hollow/reinforced/plasma/middle -/obj/effect/spawner/structure/window/hollow/plasma/reinforced/directional : /obj/effect/spawner/structure/window/hollow/reinforced/plasma/directional -/obj/effect/spawner/structure/window/plasma/reinforced : /obj/effect/spawner/structure/window/reinforced/plasma/reinforced -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium : /obj/effect/spawner/structure/window/reinforced/plasma/plastitanium - - -/obj/structure/window/plasma/reinforced/spawner/east : /obj/structure/window/reinforced/plasma/spawner/east -/obj/structure/window/plasma/reinforced/spawner/west : /obj/structure/window/reinforced/plasma/spawner/west -/obj/structure/window/plasma/reinforced/spawner/north : /obj/structure/window/reinforced/plasma/spawner/north - diff --git a/tools/UpdatePaths/Scripts/62601_wallitems_f2w.txt b/tools/UpdatePaths/Scripts/62601_wallitems_f2w.txt deleted file mode 100644 index 4caa3432dc8b..000000000000 --- a/tools/UpdatePaths/Scripts/62601_wallitems_f2w.txt +++ /dev/null @@ -1,94 +0,0 @@ -/obj/machinery/camera {dir=@UNSET} : /obj/machinery/camera/directional/north {@OLD} -/obj/machinery/camera {dir=1} : /obj/machinery/camera/directional/south {@OLD;dir=@SKIP} -/obj/machinery/camera {dir=2} : /obj/machinery/camera/directional/north {@OLD;dir=@SKIP} -/obj/machinery/camera {dir=4} : /obj/machinery/camera/directional/west {@OLD;dir=@SKIP} -/obj/machinery/camera {dir=8} : /obj/machinery/camera/directional/east {@OLD;dir=@SKIP} -/obj/machinery/camera/autoname {dir=@UNSET} : /obj/machinery/camera/directional/north {@OLD} -/obj/machinery/camera/autoname {dir=1} : /obj/machinery/camera/autoname/directional/south {@OLD;dir=@SKIP} -/obj/machinery/camera/autoname {dir=2} : /obj/machinery/camera/autoname/directional/north {@OLD;dir=@SKIP} -/obj/machinery/camera/autoname {dir=4} : /obj/machinery/camera/autoname/directional/west {@OLD;dir=@SKIP} -/obj/machinery/camera/autoname {dir=8} : /obj/machinery/camera/autoname/directional/east {@OLD;dir=@SKIP} -/obj/machinery/camera/emp_proof {dir=@UNSET} : /obj/machinery/camera/directional/north {@OLD} -/obj/machinery/camera/emp_proof {dir=1} : /obj/machinery/camera/emp_proof/directional/south {@OLD;dir=@SKIP} -/obj/machinery/camera/emp_proof {dir=2} : /obj/machinery/camera/directional/emp_proof/north {@OLD;dir=@SKIP} -/obj/machinery/camera/emp_proof {dir=4} : /obj/machinery/camera/directional/emp_proof/west {@OLD;dir=@SKIP} -/obj/machinery/camera/emp_proof {dir=8} : /obj/machinery/camera/directional/emp_proof/east {@OLD;dir=@SKIP} -/obj/machinery/camera/motion {dir=@UNSET} : /obj/machinery/camera/directional/north {@OLD} -/obj/machinery/camera/motion {dir=1} : /obj/machinery/camera/motion/directional/south {@OLD;dir=@SKIP} -/obj/machinery/camera/motion {dir=2} : /obj/machinery/camera/motion/directional/north {@OLD;dir=@SKIP} -/obj/machinery/camera/motion {dir=4} : /obj/machinery/camera/motion/directional/west {@OLD;dir=@SKIP} -/obj/machinery/camera/motion {dir=8} : /obj/machinery/camera/motion/directional/east {@OLD;dir=@SKIP} -/obj/machinery/camera/xray {dir=@UNSET} : /obj/machinery/camera/directional/north {@OLD} -/obj/machinery/camera/xray {dir=1} : /obj/machinery/camera/xray/directional/south {@OLD;dir=@SKIP} -/obj/machinery/camera/xray {dir=2} : /obj/machinery/camera/xray/directional/north {@OLD;dir=@SKIP} -/obj/machinery/camera/xray {dir=4} : /obj/machinery/camera/xray/directional/west {@OLD;dir=@SKIP} -/obj/machinery/camera/xray {dir=8} : /obj/machinery/camera/xray/directional/east {@OLD;dir=@SKIP} -/obj/machinery/airalarm {dir=@UNSET} : /obj/machinery/airalarm/directional/north {@OLD;dir=@SKIP} -/obj/machinery/airalarm {dir=1} : /obj/machinery/airalarm/directional/south {@OLD;dir=@SKIP} -/obj/machinery/airalarm {dir=2} : /obj/machinery/airalarm/directional/north {@OLD;dir=@SKIP} -/obj/machinery/airalarm {dir=4} : /obj/machinery/airalarm/directional/west {@OLD;dir=@SKIP} -/obj/machinery/airalarm {dir=8} : /obj/machinery/airalarm/directional/east {@OLD;dir=@SKIP} -/obj/machinery/airalarm/syndicate {dir=@UNSET} : /obj/machinery/airalarm/syndicate {@OLD;dir=1} -/obj/machinery/airalarm/syndicate {dir=1} : /obj/machinery/airalarm/syndicate {@OLD;dir=2} -/obj/machinery/airalarm/syndicate {dir=2} : /obj/machinery/airalarm/syndicate {@OLD;dir=1} -/obj/machinery/airalarm/syndicate {dir=4} : /obj/machinery/airalarm/syndicate {@OLD;dir=8} -/obj/machinery/airalarm/syndicate {dir=8} : /obj/machinery/airalarm/syndicate {@OLD;dir=4} -/obj/machinery/airalarm/all_access {dir=@UNSET} : /obj/machinery/airalarm/all_access {@OLD;dir=1} -/obj/machinery/airalarm/all_access {dir=1} : /obj/machinery/airalarm/all_access {@OLD;dir=2} -/obj/machinery/airalarm/all_access {dir=2} : /obj/machinery/airalarm/all_access {@OLD;dir=1} -/obj/machinery/airalarm/all_access {dir=4} : /obj/machinery/airalarm/all_access {@OLD;dir=8} -/obj/machinery/airalarm/all_access {dir=8} : /obj/machinery/airalarm/all_access {@OLD;dir=4} -/obj/machinery/airalarm/away {dir=@UNSET} : /obj/machinery/airalarm/away {@OLD;dir=1} -/obj/machinery/airalarm/away {dir=1} : /obj/machinery/airalarm/away {@OLD;dir=2} -/obj/machinery/airalarm/away {dir=2} : /obj/machinery/airalarm/away {@OLD;dir=1} -/obj/machinery/airalarm/away {dir=4} : /obj/machinery/airalarm/away {@OLD;dir=8} -/obj/machinery/airalarm/away {dir=8} : /obj/machinery/airalarm/away {@OLD;dir=4} -/obj/machinery/airalarm/engine {dir=@UNSET} : /obj/machinery/airalarm/engine {@OLD;dir=1} -/obj/machinery/airalarm/engine {dir=1} : /obj/machinery/airalarm/engine {@OLD;dir=2} -/obj/machinery/airalarm/engine {dir=2} : /obj/machinery/airalarm/engine {@OLD;dir=1} -/obj/machinery/airalarm/engine {dir=4} : /obj/machinery/airalarm/engine {@OLD;dir=8} -/obj/machinery/airalarm/engine {dir=8} : /obj/machinery/airalarm/engine {@OLD;dir=4} -/obj/machinery/airalarm/unlocked {dir=@UNSET} : /obj/machinery/airalarm/unlocked {@OLD;dir=1} -/obj/machinery/airalarm/unlocked {dir=1} : /obj/machinery/airalarm/unlocked {@OLD;dir=2} -/obj/machinery/airalarm/unlocked {dir=2} : /obj/machinery/airalarm/unlocked {@OLD;dir=1} -/obj/machinery/airalarm/unlocked {dir=4} : /obj/machinery/airalarm/unlocked {@OLD;dir=8} -/obj/machinery/airalarm/unlocked {dir=8} : /obj/machinery/airalarm/unlocked {@OLD;dir=4} -/obj/machinery/airalarm/server {dir=@UNSET} : /obj/machinery/airalarm/server {@OLD;dir=1} -/obj/machinery/airalarm/server {dir=1} : /obj/machinery/airalarm/server {@OLD;dir=2} -/obj/machinery/airalarm/server {dir=2} : /obj/machinery/airalarm/server {@OLD;dir=1} -/obj/machinery/airalarm/server {dir=4} : /obj/machinery/airalarm/server {@OLD;dir=8} -/obj/machinery/airalarm/server {dir=8} : /obj/machinery/airalarm/server {@OLD;dir=4} -/obj/machinery/airalarm/mixingchamber {dir=@UNSET} : /obj/machinery/airalarm/mixingchamber {@OLD;dir=1} -/obj/machinery/airalarm/mixingchamber {dir=1} : /obj/machinery/airalarm/mixingchamber {@OLD;dir=2} -/obj/machinery/airalarm/mixingchamber {dir=2} : /obj/machinery/airalarm/mixingchamber {@OLD;dir=1} -/obj/machinery/airalarm/mixingchamber {dir=4} : /obj/machinery/airalarm/mixingchamber {@OLD;dir=8} -/obj/machinery/airalarm/mixingchamber {dir=8} : /obj/machinery/airalarm/mixingchamber {@OLD;dir=4} -/obj/machinery/airalarm/kitchen_cold_room {dir=@UNSET} : /obj/machinery/airalarm/kitchen_cold_room {@OLD;dir=1} -/obj/machinery/airalarm/kitchen_cold_room {dir=1} : /obj/machinery/airalarm/kitchen_cold_room {@OLD;dir=2} -/obj/machinery/airalarm/kitchen_cold_room {dir=2} : /obj/machinery/airalarm/kitchen_cold_room {@OLD;dir=1} -/obj/machinery/airalarm/kitchen_cold_room {dir=4} : /obj/machinery/airalarm/kitchen_cold_room {@OLD;dir=8} -/obj/machinery/airalarm/kitchen_cold_room {dir=8} : /obj/machinery/airalarm/kitchen_cold_room {@OLD;dir=4} -/obj/structure/chair/stool {dir=1} : /obj/structure/chair/stool/directional/north {@OLD;dir=@SKIP} -/obj/structure/chair/stool {dir=2} : /obj/structure/chair/stool/directional/south {@OLD;dir=@SKIP} -/obj/structure/chair/stool {dir=4} : /obj/structure/chair/stool/directional/east {@OLD;dir=@SKIP} -/obj/structure/chair/stool {dir=8} : /obj/structure/chair/stool/directional/west {@OLD;dir=@SKIP} -/obj/structure/chair/stool/directional/south : /obj/structure/chair/stool/directional/north {@OLD;dir=@SKIP} -/obj/structure/chair/stool/directional/north : /obj/structure/chair/stool/directional/south {@OLD;dir=@SKIP} -/obj/structure/chair/stool/directional/west : /obj/structure/chair/stool/directional/east {@OLD;dir=@SKIP} -/obj/structure/chair/stool/directional/east : /obj/structure/chair/stool/directional/west {@OLD;dir=@SKIP} -/obj/structure/chair/stool/bar {dir=1} : /obj/structure/chair/stool/bar/directional/north {@OLD;dir=@SKIP} -/obj/structure/chair/stool/bar {dir=2} : /obj/structure/chair/stool/bar/directional/south {@OLD;dir=@SKIP} -/obj/structure/chair/stool/bar {dir=4} : /obj/structure/chair/stool/bar/directional/east {@OLD;dir=@SKIP} -/obj/structure/chair/stool/bar {dir=8} : /obj/structure/chair/stool/bar/directional/west {@OLD;dir=@SKIP} -/obj/structure/chair/stool/bar/directional/south : /obj/structure/chair/stool/bar/directional/north {@OLD;dir=@SKIP} -/obj/structure/chair/stool/bar/directional/north : /obj/structure/chair/stool/bar/directional/south {@OLD;dir=@SKIP} -/obj/structure/chair/stool/bar/directional/west : /obj/structure/chair/stool/bar/directional/east {@OLD;dir=@SKIP} -/obj/structure/chair/stool/bar/directional/east : /obj/structure/chair/stool/bar/directional/west {@OLD;dir=@SKIP} -/obj/machinery/power/apc/auto_name/north : /obj/machinery/power/apc/auto_name/directional/north {@OLD;dir=@SKIP;pixel_y=@SKIP} -/obj/machinery/power/apc/auto_name/south : /obj/machinery/power/apc/auto_name/directional/south {@OLD;dir=@SKIP;pixel_y=@SKIP} -/obj/machinery/power/apc/auto_name/east : /obj/machinery/power/apc/auto_name/directional/east {@OLD;dir=@SKIP;pixel_x=@SKIP} -/obj/machinery/power/apc/auto_name/west : /obj/machinery/power/apc/auto_name/directional/west {@OLD;dir=@SKIP;pixel_y=@SKIP} -/obj/machinery/bluespace_vendor/north : /obj/machinery/bluespace_vendor/directional/north {@OLD} -/obj/machinery/bluespace_vendor/south : /obj/machinery/bluespace_vendor/directional/south {@OLD} -/obj/machinery/bluespace_vendor/east : /obj/machinery/bluespace_vendor/directional/east {@OLD} -/obj/machinery/bluespace_vendor/west : /obj/machinery/bluespace_vendor/directional/west {@OLD} diff --git a/tools/UpdatePaths/Scripts/62789_camera_diag_f2w.txt b/tools/UpdatePaths/Scripts/62789_camera_diag_f2w.txt deleted file mode 100644 index f8a9a51e92b7..000000000000 --- a/tools/UpdatePaths/Scripts/62789_camera_diag_f2w.txt +++ /dev/null @@ -1,5 +0,0 @@ -/obj/machinery/camera/@SUBTYPES {dir=5;conversion_done=@UNSET} : @OLD {@OLD;dir=10;conversion_done=1} -/obj/machinery/camera/@SUBTYPES {dir=10;conversion_done=@UNSET} : @OLD {@OLD;dir=5;conversion_done=1} -/obj/machinery/camera/@SUBTYPES {dir=6;conversion_done=@UNSET} : @OLD {@OLD;dir=9;conversion_done=1} -/obj/machinery/camera/@SUBTYPES {dir=9;conversion_done=@UNSET} : @OLD {@OLD;dir=6;conversion_done=1} -/obj/machinery/camera/@SUBTYPES {conversion_done=1} : @OLD {@OLD;conversion_done=@SKIP} diff --git a/tools/UpdatePaths/Scripts/65236_clothingunderrepath.txt b/tools/UpdatePaths/Scripts/65236_clothingunderrepath.txt deleted file mode 100644 index e82dfce3d241..000000000000 --- a/tools/UpdatePaths/Scripts/65236_clothingunderrepath.txt +++ /dev/null @@ -1,196 +0,0 @@ -/obj/item/clothing/under/rank/vice : /obj/item/clothing/under/misc/vice_officer -/obj/item/clothing/under/durathread : /obj/item/cloning/under/misc/durathread -/obj/item/clothing/under/burial : /obj/item/clothing/under/misc/burial -/obj/item/clothing/under/overalls : /obj/item/clothing/under/misc/overalls -/obj/item/clothing/under/assistantformal : /obj/item/clothing/under/misc/assistantformal -/obj/item/clothing/under/pj/red : /obj/item/clothing/under/misc/pj -/obj/item/clothing/under/pj/blue : /obj/item/clothing/under/misc/pj/blue -/obj/item/clothing/under/patriotsuit : /obj/item/clothing/under/misc/patriotsuit -/obj/item/clothing/under/rank/mailman : /obj/item/clothing/under/misc/mailman -/obj/item/clothing/under/rank/psyche : /obj/item/clothing/under/misc/psyche -/obj/item/clothing/under/acj : /obj/item/clothing/under/misc/adminsuit - -/obj/item/clothing/under/scratch : /obj/item/clothing/under/suit/white_on_white -/obj/item/clothing/under/scratch/skirt : /obj/item/clothing/under/suit/white/skirt -/obj/item/clothing/under/sl_suit : /obj/item/clothing/under/suit/sl -/obj/item/clothing/under/waiter : /obj/item/clothing/under/suit/waiter -/obj/item/clothing/under/suit_jacket : /obj/item/clothing/under/suit/black -/obj/item/clothing/under/suit_jacket/female : /obj/item/clothing/under/suit/black/skirt -/obj/item/clothing/under/suit_jacket/really_black : /obj/item/clothing/under/suit/black_really -/obj/item/clothing/under/suit_jacket/green : /obj/item/clothing/under/suit/green -/obj/item/clothing/under/suit_jacket/red : /obj/item/clothing/under/suit/red -/obj/item/clothing/under/suit_jacket/charcoal : /obj/item/clothing/under/suit/charcoal -/obj/item/clothing/under/suit_jacket/navy : /obj/item/clothing/under/suit/navy -/obj/item/clothing/under/suit_jacket/burgundy : /obj/item/clothing/under/suit/burgundy -/obj/item/clothing/under/suit_jacket/checkered : /obj/item/clothing/under/suit/checkered -/obj/item/clothing/under/suit_jacket/tan : /obj/item/clothing/under/suit/tan -/obj/item/clothing/under/suit_jacket/white : /obj/item/clothing/under/suit/white - -/obj/item/clothing/under/skirt/black : /obj/item/clothing/under/dress/skirt -/obj/item/clothing/under/skirt/blue : /obj/item/clothing/under/dress/skirt/blue -/obj/item/clothing/under/skirt/red : /obj/item/clothing/under/dress/skirt/red -/obj/item/clothing/under/skirt/purple : /obj/item/clothing/under/dress/skirt/purple -/obj/item/clothing/under/sundress : /obj/item/clothing/under/dress/sundress -/obj/item/clothing/under/blacktango : /obj/item/clothing/under/dress/blacktango -/obj/item/clothing/under/stripeddress : /obj/item/clothing/under/dress/striped -/obj/item/clothing/under/sailordress : /obj/item/clothing/under/dress/sailor -/obj/item/clothing/under/redeveninggown : /obj/item/clothing/under/dress/redeveninggown -/obj/item/clothing/under/plaid_skirt : /obj/item/clothing/under/dress/skirt/plaid -/obj/item/clothing/under/plaid_skirt/blue : /obj/item/clothing/under/dress/skirt/plaid/blue -/obj/item/clothing/under/plaid_skirt/purple : /obj/item/clothing/under/dress/skirt/plaid/purple -/obj/item/clothing/under/plaid_skirt/green : /obj/item/clothing/under/dress/skirt/plaid/green - -/obj/item/clothing/under/roman : /obj/item/clothing/under/costume/roman -/obj/item/clothing/under/jabroni : /obj/item/clothing/under/costume/jabroni -/obj/item/clothing/under/owl : /obj/item/clothing/under/costume/owl -/obj/item/clothing/under/griffin : /obj/item/clothing/under/costume/griffin -/obj/item/clothing/under/schoolgirl : /obj/item/clothing/under/costume/schoolgirl -/obj/item/clothing/under/schoolgirl/red : /obj/item/clothing/under/costume/schoolgirl/red -/obj/item/clothing/under/schoolgirl/green : /obj/item/clothing/under/costume/schoolgirl/green -/obj/item/clothing/under/schoolgirl/orange : /obj/item/clothing/under/costume/schoolgirl/orange -/obj/item/clothing/under/pirate : /obj/item/clothing/under/costume/pirate -/obj/item/clothing/under/soviet : /obj/item/clothing/under/costume/soviet -/obj/item/clothing/under/redcoat : /obj/item/clothing/under/costume/redcoat -/obj/item/clothing/under/kilt : /obj/item/clothing/under/costume/kilt -/obj/item/clothing/under/kilt/highlander : /obj/item/clothing/under/costume/kilt/highlander -/obj/item/clothing/under/gladiator : /obj/item/clothing/under/costume/gladiator -/obj/item/clothing/under/gladiator/ash_walker : /obj/item/clothing/under/costume/gladiator/ash_walker -/obj/item/clothing/under/maid : /obj/item/clothing/under/costume/maid -/obj/item/clothing/under/singery : /obj/item/clothing/under/costume/singer/yellow -/obj/item/clothing/under/singerb : /obj/item/clothing/under/costume/singer/blue -/obj/item/clothing/under/geisha : /obj/item/clothing/under/costume/geisha -/obj/item/clothing/under/villain : /obj/item/clothing/under/costume/villain -/obj/item/clothing/under/sailor : /obj/item/clothing/under/costume/sailor -/obj/item/clothing/under/rank/security/navyblue/russian : /obj/item/clothing/under/costume/russian_officer -/obj/item/clothing/under/mummy : /obj/item/clothing/under/costume/mummy -/obj/item/clothing/under/scarecrow : /obj/item/clothing/under/costume/scarecrow -/obj/item/clothing/under/draculass : /obj/item/clothing/under/costume/draculass -/obj/item/clothing/under/drfreeze : /obj/item/clothing/under/costume/drfreeze -/obj/item/clothing/under/lobster : /obj/item/clothing/under/costume/lobster -/obj/item/clothing/under/skeleton : /obj/item/clothing/under/costume/skeleton -/obj/item/clothing/under/mech_suit : /obj/item/clothing/under/costume/mech_suit -/obj/item/clothing/under/mech_suit/white : /obj/item/clothing/under/costume/mech_suit/white -/obj/item/clothing/under/mech_suit/blue : /obj/item/clothing/under/costume/mech_suit/blue -/obj/item/clothing/under/gondola : /obj/item/clothing/under/costume/gondola - -/obj/item/clothing/under/rank/bartender : /obj/item/clothing/under/rank/civilian/bartender -/obj/item/clothing/under/rank/bartender/purple : /obj/item/clothing/under/rank/civilian/bartender/purple -/obj/item/clothing/under/rank/bartender/skirt : /obj/item/clothing/under/rank/civilian/bartender/skirt -/obj/item/clothing/under/rank/chaplain : /obj/item/clothing/under/rank/civilian/chaplain -/obj/item/clothing/under/rank/chaplain/skirt : /obj/item/clothing/under/rank/civilian/chaplain/skirt -/obj/item/clothing/under/rank/chef : /obj/item/clothing/under/rank/civilian/chef -/obj/item/clothing/under/rank/chef/skirt : /obj/item/clothing/under/rank/civilian/chef/skirt -/obj/item/clothing/under/rank/curator : /obj/item/clothing/under/rank/civilian/curator -/obj/item/clothing/under/rank/curator/skirt: /obj/item/clothing/under/rank/civilian/curator/skirt -/obj/item/clothing/under/rank/curator/treasure_hunter : /obj/item/clothing/under/rank/civilian/curator/treasure_hunter -/obj/item/clothing/under/space : /obj/item/clothing/under/rank/civilian/curator/nasa -/obj/item/clothing/under/rank/hydroponics : /obj/item/clothing/under/rank/civilian/hydroponics -/obj/item/clothing/under/rank/hydroponics/skirt : /obj/item/clothing/under/rank/civilian/hydroponics/skirt -/obj/item/clothing/under/rank/janitor : /obj/item/clothing/under/rank/civilian/janitor -/obj/item/clothing/under/rank/janitor/skirt : /obj/item/clothing/under/rank/civilian/janitor/skirt -/obj/item/clothing/under/janimaid : /obj/item/clothing/under/rank/civilian/janitor/maid -/obj/item/clothing/under/rank/mime : /obj/item/clothing/under/rank/civilian/mime -/obj/item/clothing/under/rank/mime/skirt : /obj/item/clothing/under/rank/civilian/mime/skirt -/obj/item/clothing/under/sexymime : /obj/item/clothing/under/rank/civilian/mime/sexy -/obj/item/clothing/under/rank/clown : /obj/item/clothing/under/rank/civilian/clown -/obj/item/clothing/under/rank/blueclown : /obj/item/clothing/under/rank/civilian/clown/blue -/obj/item/clothing/under/rank/greenclown : /obj/item/clothing/under/rank/civilian/clown/green -/obj/item/clothing/under/rank/yellowclown : /obj/item/clothing/under/rank/civilian/clown/yellow -/obj/item/clothing/under/rank/purpleclown : /obj/item/clothing/under/rank/civilian/clown/purple -/obj/item/clothing/under/rank/orangeclown : /obj/item/clothing/under/rank/civilian/clown/orange -/obj/item/clothing/under/rank/rainbowclown : /obj/item/clothing/under/rank/civilian/clown/rainbow -/obj/item/clothing/under/jester : /obj/item/clothing/under/rank/civilian/clown/jester -/obj/item/clothing/under/jester/alt : /obj/item/clothing/under/rank/civilian/clown/jester/alt -/obj/item/clothing/under/rank/clown/sexy : /obj/item/clothing/under/rank/civilian/clown/sexy -/obj/item/clothing/under/lawyer : /obj/item/clothing/under/rank/civilian/lawyer -/obj/item/clothing/under/lawyer/black : /obj/item/clothing/under/rank/civilian/lawyer/black -/obj/item/clothing/under/lawyer/black/skirt : /obj/item/clothing/under/rank/civilian/lawyer/black/skirt -/obj/item/clothing/under/lawyer/female : /obj/item/clothing/under/rank/civilian/lawyer/beige -/obj/item/clothing/under/lawyer/female/skirt : /obj/item/clothing/under/rank/civilian/lawyer/beige/skirt -/obj/item/clothing/under/lawyer/red : /obj/item/clothing/under/rank/civilian/lawyer/red -/obj/item/clothing/under/lawyer/red/skirt : /obj/item/clothing/under/rank/civilian/lawyer/red/skirt -/obj/item/clothing/under/lawyer/blue : /obj/item/clothing/under/rank/civilian/lawyer/blue -/obj/item/clothing/under/lawyer/blue/skirt : /obj/item/clothing/under/rank/civilian/lawyer/blue/skirt -/obj/item/clothing/under/lawyer/bluesuit : /obj/item/clothing/under/rank/civilian/lawyer/bluesuit -/obj/item/clothing/under/lawyer/bluesuit/skirt : /obj/item/clothing/under/rank/civilian/lawyer/bluesuit/skirt -/obj/item/clothing/under/lawyer/purpsuit : /obj/item/clothing/under/rank/civilian/lawyer/purpsuit -/obj/item/clothing/under/lawyer/purpsuit/skirt : /obj/item/clothing/under/rank/civilian/lawyer/purpsuit/skirt -/obj/item/clothing/under/lawyer/blacksuit : /obj/item/clothing/under/suit/black -/obj/item/clothing/under/lawyer/blacksuit/skirt : /obj/item/clothing/under/suit/black/skirt -/obj/item/clothing/under/lawyer/really_black : /obj/item/clothing/under/suit/black_really -/obj/item/clothing/under/lawyer/really_black/skirt : /obj/item/clothing/under/suit/black_really/skirt -/obj/item/clothing/under/rank/head_of_personnel : /obj/item/clothing/under/rank/civilian/head_of_personnel -/obj/item/clothing/under/rank/head_of_personnel/skirt : /obj/item/clothing/under/rank/civilian/head_of_personnel/skirt -/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit : /obj/item/clothing/under/rank/civilian/head_of_personnel/suit -/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit/skirt : /obj/item/clothing/under/rank/civilian/head_of_personnel/suit/skirt - -/obj/item/clothing/under/rank/cargo : /obj/item/clothing/under/rank/cargo/qm -/obj/item/clothing/under/rank/cargo/skirt : /obj/item/clothing/under/rank/cargo/qm/skirt -/obj/item/clothing/under/rank/cargotech : /obj/item/clothing/under/rank/cargo/tech -/obj/item/clothing/under/rank/cargotech/skirt : /obj/item/clothing/under/rank/cargo/tech/skirt -/obj/item/clothing/under/rank/miner : /obj/item/clothing/under/rank/cargo/miner -/obj/item/clothing/under/rank/miner/lavaland : /obj/item/clothing/under/rank/cargo/miner/lavaland - -/obj/item/clothing/under/rank/research_director : /obj/item/clothing/under/rank/rnd/research_director -/obj/item/clothing/under/rank/research_director/skirt : /obj/item/clothing/under/rank/rnd/research_director/skirt -/obj/item/clothing/under/rank/research_director/alt : /obj/item/clothing/under/rank/rnd/research_director/alt -/obj/item/clothing/under/rank/research_director/alt/skirt : /obj/item/clothing/under/rank/rnd/research_director/alt/skirt -/obj/item/clothing/under/rank/research_director/turtleneck : /obj/item/clothing/under/rank/rnd/research_director/turtleneck -/obj/item/clothing/under/rank/research_director/turtleneck/skirt : /obj/item/clothing/under/rank/rnd/research_director/turtleneck/skirt -/obj/item/clothing/under/rank/scientist : /obj/item/clothing/under/rank/rnd/scientist -/obj/item/clothing/under/rank/scientist/skirt : /obj/item/clothing/under/rank/rnd/scientist/skirt -/obj/item/clothing/under/rank/roboticist : /obj/item/clothing/under/rank/rnd/roboticist -/obj/item/clothing/under/rank/roboticist/skirt : /obj/item/clothing/under/rank/rnd/roboticist/skirt - -/obj/item/clothing/under/rank/chief_medical_officer : /obj/item/clothing/under/rank/medical/chief_medical_officer -/obj/item/clothing/under/rank/chief_medical_officer/skirt : /obj/item/clothing/under/rank/medical/chief_medical_officer/skirt -/obj/item/clothing/under/rank/medical/doctor/blue : /obj/item/clothing/under/rank/medical/scrubs/blue -/obj/item/clothing/under/rank/medical/doctor/blue : /obj/item/clothing/under/rank/medical/scrubs/green -/obj/item/clothing/under/rank/medical/doctor/blue : /obj/item/clothing/under/rank/medical/scrubs/purple -/obj/item/clothing/under/rank/geneticist : /obj/item/clothing/under/rank/rnd/geneticist -/obj/item/clothing/under/rank/geneticist/skirt : /obj/item/clothing/under/rank/rnd/geneticist/skirt -/obj/item/clothing/under/rank/virologist : /obj/item/clothing/under/rank/medical/virologist -/obj/item/clothing/under/rank/virologist/skirt : /obj/item/clothing/under/rank/medical/virologist/skirt -/obj/item/clothing/under/rank/chemist : /obj/item/clothing/under/rank/medical/chemist -/obj/item/clothing/under/rank/chemist/skirt : /obj/item/clothing/under/rank/medical/chemist/skirt - -/obj/item/clothing/under/rank/chief_engineer : /obj/item/clothing/under/rank/engineering/chief_engineer -/obj/item/clothing/under/rank/chief_engineer/skirt : /obj/item/clothing/under/rank/engineering/chief_engineer/skirt -/obj/item/clothing/under/rank/atmospheric_technician : /obj/item/clothing/under/rank/engineering/atmospheric_technician -/obj/item/clothing/under/rank/atmospheric_technician/skirt : /obj/item/clothing/under/rank/engineering/atmospheric_technician/skirt -/obj/item/clothing/under/rank/engineer : /obj/item/clothing/under/rank/engineering/engineer -/obj/item/clothing/under/rank/engineer/hazard : /obj/item/clothing/under/rank/engineering/engineer/hazard -/obj/item/clothing/under/rank/engineer/skirt : /obj/item/clothing/under/rank/engineering/engineer/skirt - -/obj/item/clothing/under/rank/centcom_officer : /obj/item/clothing/under/rank/centcom/officer -/obj/item/clothing/under/rank/centcom_commander : /obj/item/clothing/under/rank/centcom/commander - -/obj/item/clothing/under/gimmick/rank/captain/suit : /obj/item/clothing/under/rank/captain/suit -/obj/item/clothing/under/gimmick/rank/captain/suit/skirt : /obj/item/clothing/under/rank/captain/suit/skirt -/obj/item/clothing/under/captainparade : /obj/item/clothing/under/rank/captain/parade - -/obj/item/clothing/under/rank/security : /obj/item/clothing/under/rank/security/officer -/obj/item/clothing/under/rank/security/grey : /obj/item/clothing/under/rank/security/officer/grey -/obj/item/clothing/under/rank/security/skirt : /obj/item/clothing/under/rank/security/officer/skirt -/obj/item/clothing/under/rank/security/blueshirt : /obj/item/clothing/under/rank/security/officer/blueshirt -/obj/item/clothing/under/rank/security/navyblue : /obj/item/clothing/under/rank/security/officer/formal -/obj/item/clothing/under/rank/warden : /obj/item/clothing/under/rank/security/warden -/obj/item/clothing/under/rank/warden/grey : /obj/item/clothing/under/rank/security/warden/grey -/obj/item/clothing/under/rank/warden/skirt : /obj/item/clothing/under/rank/security/warden/skirt -/obj/item/clothing/under/rank/warden/navyblue : /obj/item/clothing/under/rank/security/warden/formal -/obj/item/clothing/under/rank/det : /obj/item/clothing/under/rank/security/detective -/obj/item/clothing/under/rank/det/skirt : /obj/item/clothing/under/rank/security/detective/skirt -/obj/item/clothing/under/rank/det/grey : /obj/item/clothing/under/rank/security/detective/noir -/obj/item/clothing/under/rank/det/grey/skirt : /obj/item/clothing/under/rank/security/detective/noir/skirt -/obj/item/clothing/under/rank/security/detective/grey : /obj/item/clothing/under/rank/security/detective/noir -/obj/item/clothing/under/rank/security/detective/grey/skirt : /obj/item/clothing/under/rank/security/detective/noir/skirt -/obj/item/clothing/under/rank/head_of_security : /obj/item/clothing/under/rank/security/head_of_security -/obj/item/clothing/under/rank/head_of_security/skirt : /obj/item/clothing/under/rank/security/head_of_security/skirt -/obj/item/clothing/under/rank/head_of_security/grey : /obj/item/clothing/under/rank/security/head_of_security/grey -/obj/item/clothing/under/rank/head_of_security/alt : /obj/item/clothing/under/rank/security/head_of_security/alt -/obj/item/clothing/under/rank/head_of_security/alt/skirt : /obj/item/clothing/under/rank/security/head_of_security/alt/skirt -/obj/item/clothing/under/rank/head_of_security/navyblue : /obj/item/clothing/under/rank/security/head_of_security/formal -/obj/item/clothing/under/hosparademale : /obj/item/clothing/under/rank/security/head_of_security/parade -/obj/item/clothing/under/hosparadefem : /obj/item/clothing/under/rank/security/head_of_security/parade/female -/obj/item/clothing/under/rank/security/spacepol : /obj/item/clothing/under/rank/security/officer/spacepol - diff --git a/tools/UpdatePaths/Scripts/65326_lib_computers.txt b/tools/UpdatePaths/Scripts/65326_lib_computers.txt deleted file mode 100644 index bb16088a909f..000000000000 --- a/tools/UpdatePaths/Scripts/65326_lib_computers.txt +++ /dev/null @@ -1 +0,0 @@ -/obj/machinery/computer/bookmanagement : /obj/machinery/computer/libraryconsole/bookmanagement diff --git a/tools/UpdatePaths/Scripts/65504_floor_repathing.txt b/tools/UpdatePaths/Scripts/65504_floor_repathing.txt deleted file mode 100644 index 6af8bd10fa9a..000000000000 --- a/tools/UpdatePaths/Scripts/65504_floor_repathing.txt +++ /dev/null @@ -1,53 +0,0 @@ -/turf/open/floor/plating/dirt : /turf/open/misc/dirt{@OLD} -/turf/open/floor/plating/dirt/dark : /turf/open/misc/dirt/dark{@OLD} -/turf/open/floor/plating/dirt/jungle : /turf/open/misc/dirt/jungle{@OLD} -/turf/open/floor/plating/dirt/jungle/dark : /turf/open/misc/dirt/jungle/dark{@OLD} -/turf/open/floor/plating/dirt/jungle/wasteland : /turf/open/misc/dirt/jungle/wasteland{@OLD} - -/turf/open/floor/plating/ashplanet : /turf/open/misc/ashplanet{@OLD} -/turf/open/floor/plating/ashplanet/ash : /turf/open/misc/ashplanet/ash{@OLD} -/turf/open/floor/plating/ashplanet/rocky : /turf/open/misc/ashplanet/rocky{@OLD} -/turf/open/floor/plating/ashplanet/wateryrock : /turf/open/misc/ashplanet/wateryrock{@OLD} - -/turf/open/floor/plating/grass : /turf/open/misc/grass{@OLD} -/turf/open/floor/plating/grass/jungle : /turf/open/misc/grass/jungle{@OLD} -/turf/open/floor/plating/grass/lavaland : /turf/open/misc/grass/lavaland{@OLD} - -/turf/open/floor/plating/sandy_dirt : /turf/open/misc/sandy_dirt{@OLD} - -/turf/open/floor/plating/ironsand : /turf/open/misc/ironsand{@OLD} - -/turf/open/floor/plating/ice : /turf/open/misc/ice{@OLD} -/turf/open/floor/plating/ice/smooth : /turf/open/misc/ice/smooth{@OLD} -/turf/open/floor/plating/ice/icemoon : /turf/misc/ice/icemoon{@OLD} -/turf/open/floor/plating/ice/icemoon/no_planet_atmos : /turf/open/misc/ice/icemoon/no_planet_atmos{@OLD} - -/turf/open/floor/plating/beach : /turf/open/misc/beach{@OLD} -/turf/open/floor/plating/beach/sand : /turf/open/misc/beach/sand{@OLD} -/turf/open/floor/plating/beach/coastline_t : /turf/open/misc/beach/coastline_t{@OLD} -/turf/open/floor/plating/beach/coastline_t/sandwater_inner : /turf/open/misc/beach/coastline_t/sandwater_inner{@OLD} -/turf/open/floor/plating/beach/coastline_b : /turf/open/misc/beach/coastline_b{@OLD} -/turf/open/floor/plating/beach/water : /turf/open/water/beach{@OLD} - -/turf/open/floor/grass/snow : /turf/open/misc/snow{@OLD} -/turf/open/floor/grass/snow/safe : /turf/open/floor/fake_snow{@OLD} -/turf/open/floor/grass/snow/basalt : /turf/open/misc/basalt{@OLD} -/turf/open/floor/grass/snow/basalt/safe : /turf/open/floor/fakebasalt{@OLD} - -/turf/open/floor/plating/asteroid : /turf/open/misc/asteroid{@OLD} -/turf/open/floor/plating/asteroid/dug : /turf/open/misc/asteroid/dug{@OLD} -/turf/open/floor/plating/asteroid/basalt : /turf/open/misc/asteroid/basalt{@OLD} -/turf/open/floor/plating/asteroid/basalt/lava : /turf/open/misc/asteroid/basalt/lava{@OLD} -/turf/open/floor/plating/asteroid/basalt/airless : /turf/open/misc/asteroid/basalt/airless{@OLD} -/turf/open/floor/plating/asteroid/basalt/lava_land_surface : /turf/open/misc/asteroid/basalt/lava_land_surface{@OLD} -/turf/open/floor/plating/asteroid/lowpressure : /turf/open/misc/asteroid/lowpressure{@OLD} -/turf/open/floor/plating/asteroid/airless : /turf/open/misc/asteroid/airless{@OLD} -/turf/open/floor/plating/asteroid/snow : /turf/open/misc/asteroid/snow{@OLD} -/turf/open/floor/plating/asteroid/snow/icemoon : /turf/open/misc/asteroid/snow/icemoon{@OLD} -/turf/open/floor/plating/asteroid/snow/ice : /turf/open/misc/asteroid/snow/ice{@OLD} -/turf/open/floor/plating/asteroid/snow/ice/icemoon : /turf/open/misc/asteroid/snow/ice/icemoon{@OLD} -/turf/open/floor/plating/asteroid/snow/airless : /turf/open/misc/asteroid/snow/airless{@OLD} -/turf/open/floor/plating/asteroid/snow/temperatre : /turf/open/misc/asteroid/snow/temperatre{@OLD} -/turf/open/floor/plating/asteroid/snow/atmosphere : /turf/open/misc/asteroid/snow/atmosphere{@OLD} -/turf/open/floor/plating/asteroid/snow/standard_air : /turf/open/misc/asteroid/snow/standard_air{@OLD} -/turf/open/floor/plating/asteroid/basalt/wasteland : /turf/open/misc/asteroid/basalt/wasteland{@OLD} diff --git a/tools/UpdatePaths/Scripts/65656_windoor_replacement.txt b/tools/UpdatePaths/Scripts/65656_windoor_replacement.txt deleted file mode 100644 index ba67c1e0d985..000000000000 --- a/tools/UpdatePaths/Scripts/65656_windoor_replacement.txt +++ /dev/null @@ -1,39 +0,0 @@ -/obj/machinery/door/window/northleft : /obj/machinery/door/window/left/directional/north {@OLD} -/obj/machinery/door/window/eastleft : /obj/machinery/door/window/left/directional/east {@OLD} -/obj/machinery/door/window/westleft : /obj/machinery/door/window/left/directional/west {@OLD} -/obj/machinery/door/window/southleft : /obj/machinery/door/window/left/directional/south {@OLD} - -/obj/machinery/door/window/northright : /obj/machinery/door/window/right/directional/north {@OLD} -/obj/machinery/door/window/eastright : /obj/machinery/door/window/right/directional/east {@OLD} -/obj/machinery/door/window/westright : /obj/machinery/door/window/right/directional/west {@OLD} -/obj/machinery/door/window/southright : /obj/machinery/door/window/right/directional/south {@OLD} - -/obj/machinery/door/window/brigdoor/northleft : /obj/machinery/door/window/brigdoor/left/directional/north {@OLD} -/obj/machinery/door/window/brigdoor/eastleft : /obj/machinery/door/window/brigdoor/left/directional/east {@OLD} -/obj/machinery/door/window/brigdoor/westleft : /obj/machinery/door/window/brigdoor/left/directional/west {@OLD} -/obj/machinery/door/window/brigdoor/southleft : /obj/machinery/door/window/brigdoor/left/directional/south {@OLD} - -/obj/machinery/door/window/brigdoor/northright : /obj/machinery/door/window/brigdoor/right/directional/north {@OLD} -/obj/machinery/door/window/brigdoor/eastright : /obj/machinery/door/window/brigdoor/right/directional/east {@OLD} -/obj/machinery/door/window/brigdoor/westright : /obj/machinery/door/window/brigdoor/right/directional/west {@OLD} -/obj/machinery/door/window/brigdoor/southright : /obj/machinery/door/window/brigdoor/right/directional/south {@OLD} - -/obj/machinery/door/window/brigdoor/security/cell/northleft : /obj/machinery/door/window/brigdoor/security/cell/left/directional/north {@OLD} -/obj/machinery/door/window/brigdoor/security/cell/eastleft : /obj/machinery/door/window/brigdoor/security/cell/left/directional/east {@OLD} -/obj/machinery/door/window/brigdoor/security/cell/westleft : /obj/machinery/door/window/brigdoor/security/cell/left/directional/west {@OLD} -/obj/machinery/door/window/brigdoor/security/cell/southleft : /obj/machinery/door/window/brigdoor/security/cell/left/directional/south {@OLD} - -/obj/machinery/door/window/brigdoor/security/cell/northright : /obj/machinery/door/window/brigdoor/security/cell/right/directional/north {@OLD} -/obj/machinery/door/window/brigdoor/security/cell/eastright : /obj/machinery/door/window/brigdoor/security/cell/right/directional/east {@OLD} -/obj/machinery/door/window/brigdoor/security/cell/westright : /obj/machinery/door/window/brigdoor/security/cell/right/directional/west {@OLD} -/obj/machinery/door/window/brigdoor/security/cell/southright : /obj/machinery/door/window/brigdoor/security/cell/right/directional/south {@OLD} - -/obj/machinery/door/window/brigdoor/security/holding/northleft : /obj/machinery/door/window/brigdoor/security/holding/left/directional/north {@OLD} -/obj/machinery/door/window/brigdoor/security/holding/eastleft : /obj/machinery/door/window/brigdoor/security/holding/left/directional/east {@OLD} -/obj/machinery/door/window/brigdoor/security/holding/westleft : /obj/machinery/door/window/brigdoor/security/holding/left/directional/west {@OLD} -/obj/machinery/door/window/brigdoor/security/holding/southleft : /obj/machinery/door/window/brigdoor/security/holding/left/directional/south {@OLD} - -/obj/machinery/door/window/brigdoor/security/holding/northright : /obj/machinery/door/window/brigdoor/security/holding/right/directional/north {@OLD} -/obj/machinery/door/window/brigdoor/security/holding/eastright : /obj/machinery/door/window/brigdoor/security/holding/right/directional/east {@OLD} -/obj/machinery/door/window/brigdoor/security/holding/westright : /obj/machinery/door/window/brigdoor/security/holding/right/directional/west {@OLD} -/obj/machinery/door/window/brigdoor/security/holding/southright : /obj/machinery/door/window/brigdoor/security/holding/right/directional/south {@OLD} diff --git a/tools/UpdatePaths/Scripts/65755_pdas_to_tabs.txt b/tools/UpdatePaths/Scripts/65755_pdas_to_tabs.txt deleted file mode 100644 index 1248b8fbcc9d..000000000000 --- a/tools/UpdatePaths/Scripts/65755_pdas_to_tabs.txt +++ /dev/null @@ -1,56 +0,0 @@ -#comment This replaces PDA and cart paths with the new modular tablet role paths. - -/obj/item/cartridge : /obj/item/computer_hardware/hard_drive/role -/obj/item/cartridge/engineering : /obj/item/computer_hardware/hard_drive/role/engineering -/obj/item/cartridge/atmos : /obj/item/computer_hardware/hard_drive/role/atmos -/obj/item/cartridge/medical : /obj/item/computer_hardware/hard_drive/role/medical -/obj/item/cartridge/chemistry : /obj/item/computer_hardware/hard_drive/role/chemistry -/obj/item/cartridge/security : /obj/item/computer_hardware/hard_drive/role/security -/obj/item/cartridge/detective : /obj/item/computer_hardware/hard_drive/role/detective -/obj/item/cartridge/lawyer : /obj/item/computer_hardware/hard_drive/role/lawyer -/obj/item/cartridge/curator : /obj/item/computer_hardware/hard_drive/role/curator -/obj/item/cartridge/roboticist : /obj/item/computer_hardware/hard_drive/role/roboticist -/obj/item/cartridge/signal : /obj/item/computer_hardware/hard_drive/role/signal -/obj/item/cartridge/signal/ordnance : /obj/item/computer_hardware/hard_drive/role/signal/ordnance -/obj/item/cartridge/quartermaster : /obj/item/computer_hardware/hard_drive/role/quartermaster -/obj/item/cartridge/head : /obj/item/computer_hardware/hard_drive/role/head -/obj/item/cartridge/hop : /obj/item/computer_hardware/hard_drive/role/hop -/obj/item/cartridge/hos : /obj/item/computer_hardware/hard_drive/role/hos -/obj/item/cartridge/ce : /obj/item/computer_hardware/hard_drive/role/ce -/obj/item/cartridge/cmo : /obj/item/computer_hardware/hard_drive/role/cmo -/obj/item/cartridge/rd : /obj/item/computer_hardware/hard_drive/role/rd -/obj/item/cartridge/captain : /obj/item/computer_hardware/hard_drive/role/captain - -/obj/item/pda : /obj/item/modular_computer/tablet/pda -/obj/item/pda/medical : /obj/item/modular_computer/tablet/pda/medical -/obj/item/pda/viro : /obj/item/modular_computer/tablet/pda/viro -/obj/item/pda/engineering : /obj/item/modular_computer/tablet/pda/engineering -/obj/item/pda/security : /obj/item/modular_computer/tablet/pda/security -/obj/item/pda/detective : /obj/item/modular_computer/tablet/pda/detective -/obj/item/pda/warden : /obj/item/modular_computer/tablet/pda/warden -/obj/item/pda/janitor : /obj/item/modular_computer/tablet/pda/janitor -/obj/item/pda/science : /obj/item/modular_computer/tablet/pda/science -/obj/item/pda/heads : /obj/item/modular_computer/tablet/pda/heads -/obj/item/pda/hop : /obj/item/modular_computer/tablet/pda/hop -/obj/item/pda/hos : /obj/item/modular_computer/tablet/pda/hos -/obj/item/pda/ce : /obj/item/modular_computer/tablet/pda/ce -/obj/item/pda/cmo : /obj/item/modular_computer/tablet/pda/cmo -/obj/item/pda/rd : /obj/item/modular_computer/tablet/pda/rd -/obj/item/pda/captain : /obj/item/modular_computer/tablet/pda/captain -/obj/item/pda/cargo : /obj/item/modular_computer/tablet/pda/cargo -/obj/item/pda/quartermaster : /obj/item/modular_computer/tablet/pda/quartermaster -/obj/item/pda/shaftminer : /obj/item/modular_computer/tablet/pda/shaftminer -/obj/item/pda/chaplain : /obj/item/modular_computer/tablet/pda/chaplain -/obj/item/pda/lawyer : /obj/item/modular_computer/tablet/pda/lawyer -/obj/item/pda/botanist : /obj/item/modular_computer/tablet/pda/botanist -/obj/item/pda/roboticist : /obj/item/modular_computer/tablet/pda/roboticist -/obj/item/pda/cook : /obj/item/modular_computer/tablet/pda/cook -/obj/item/pda/bar : /obj/item/modular_computer/tablet/pda/bar -/obj/item/pda/atmos : /obj/item/modular_computer/tablet/pda/atmos -/obj/item/pda/chemist : /obj/item/modular_computer/tablet/pda/chemist -/obj/item/pda/geneticist : /obj/item/modular_computer/tablet/pda/geneticist -/obj/item/pda/clown : /obj/item/modular_computer/tablet/pda/clown -/obj/item/pda/mime : /obj/item/modular_computer/tablet/pda/mime -/obj/item/pda/curator : /obj/item/modular_computer/tablet/pda/curator -/obj/item/pda/syndicate : /obj/item/modular_computer/tablet/pda/syndicate -/obj/item/pda/clear : /obj/item/modular_computer/tablet/pda/clear diff --git a/tools/UpdatePaths/Scripts/65906_replace_wayfinding_beacons.txt b/tools/UpdatePaths/Scripts/65906_replace_wayfinding_beacons.txt deleted file mode 100644 index 65ea94da7fd7..000000000000 --- a/tools/UpdatePaths/Scripts/65906_replace_wayfinding_beacons.txt +++ /dev/null @@ -1 +0,0 @@ -/obj/effect/landmark/navigate_destination : /obj/machinery/navbeacon/wayfinding {@OLD} \ No newline at end of file diff --git a/tools/UpdatePaths/Scripts/66210_replace_tiered_canisters.txt b/tools/UpdatePaths/Scripts/66210_replace_tiered_canisters.txt deleted file mode 100644 index 7b5192b5d095..000000000000 --- a/tools/UpdatePaths/Scripts/66210_replace_tiered_canisters.txt +++ /dev/null @@ -1,9 +0,0 @@ -#comment replaces /obj/machinery/portable_atmospherics/canister/tier_# with /obj/machinery/portable_atmospherics/canister -#comment replaces /obj/structure/canister_frame/machine/frame_tier_0 with /obj/structure/canister_frame/machine/unfinished_frame -#comment replaces /obj/structure/canister_frame/machine/frame_tier_1 with /obj/structure/canister_frame/machine/finished_frame - -/obj/machinery/portable_atmospherics/canister/tier_1 : /obj/machinery/portable_atmospherics/canister -/obj/machinery/portable_atmospherics/canister/tier_2 : /obj/machinery/portable_atmospherics/canister -/obj/machinery/portable_atmospherics/canister/tier_3 : /obj/machinery/portable_atmospherics/canister -/obj/structure/canister_frame/machine/frame_tier_0 : /obj/structure/canister_frame/machine/unfinished_canister_frame -/obj/structure/canister_frame/machine/frame_tier_1 : /obj/structure/canister_frame/machine/finished_canister_frame \ No newline at end of file diff --git a/tools/UpdatePaths/Scripts/66406_turf_updates.txt b/tools/UpdatePaths/Scripts/66406_turf_updates.txt deleted file mode 100644 index d1bda1a21b73..000000000000 --- a/tools/UpdatePaths/Scripts/66406_turf_updates.txt +++ /dev/null @@ -1,344 +0,0 @@ -#comment This updates primarily station paths to new ones - -/area/maintenance : /area/station/maintenance -/area/maintenance/department/chapel : /area/station/maintenance/department/chapel -/area/maintenance/department/chapel/monastery : /area/station/maintenance/department/chapel/monastery -/area/maintenance/department/crew_quarters/bar : /area/station/maintenance/department/crew_quarters/bar -/area/maintenance/department/crew_quarters/dorms : /area/station/maintenance/department/crew_quarters/dorms -/area/maintenance/department/eva : /area/station/maintenance/department/eva -/area/maintenance/department/electrical : /area/station/maintenance/department/electrical -/area/maintenance/department/engine/atmos : /area/station/maintenance/department/engine/atmos -/area/maintenance/department/security : /area/station/maintenance/department/security -/area/maintenance/department/security/upper : /area/station/maintenance/department/security/upper -/area/maintenance/department/security/brig : /area/station/maintenance/department/security/brig -/area/maintenance/department/medical : /area/station/maintenance/department/medical -/area/maintenance/department/medical/central : /area/station/maintenance/department/medical/central -/area/maintenance/department/medical/morgue : /area/station/maintenance/department/medical/morgue -/area/maintenance/department/science : /area/station/maintenance/department/science -/area/maintenance/department/science/central : /area/station/maintenance/department/science/central -/area/maintenance/department/cargo : /area/station/maintenance/department/cargo -/area/maintenance/department/bridge : /area/station/maintenance/department/bridge -/area/maintenance/department/engine : /area/station/maintenance/department/engine -/area/maintenance/department/science/xenobiology : /area/station/maintenance/department/science/xenobiology - -/area/maintenance/aft : /area/station/maintenance/aft -/area/maintenance/aft/upper : /area/station/maintenance/aft/upper -/area/maintenance/aft/greater : /area/station/maintenance/aft/greater -/area/maintenance/aft/lesser : /area/station/maintenance/aft/lesser -/area/maintenance/central : /area/station/maintenance/central -/area/maintenance/central/greater : /area/station/maintenance/central/greater -/area/maintenance/central/lesser : /area/station/maintenance/central/lesser -/area/maintenance/fore : /area/station/maintenance/fore -/area/maintenance/fore/upper : /area/station/maintenance/fore/upper -/area/maintenance/fore/greater : /area/station/maintenance/fore/greater -/area/maintenance/fore/lesser : /area/station/maintenance/fore/lesser -/area/maintenance/starboard : /area/station/maintenance/starboard -/area/maintenance/starboard/upper : /area/station/maintenance/starboard/upper -/area/maintenance/starboard/central : /area/station/maintenance/starboard/central -/area/maintenance/starboard/greater : /area/station/maintenance/starboard/greater -/area/maintenance/starboard/lesser : /area/station/maintenance/starboard/lesser -/area/maintenance/starboard/aft : /area/station/maintenance/starboard/aft -/area/maintenance/starboard/fore : /area/station/maintenance/starboard/fore -/area/maintenance/port : /area/station/maintenance/port -/area/maintenance/port/central : /area/station/maintenance/port/central -/area/maintenance/port/greater : /area/station/maintenance/port/greater -/area/maintenance/port/lesser : /area/station/maintenance/port/lesser -/area/maintenance/port/aft : /area/station/maintenance/port/aft -/area/maintenance/port/fore : /area/station/maintenance/port/fore -/area/maintenance/tram : /area/station/maintenance/tram -/area/maintenance/tram/left : /area/station/maintenance/tram/left -/area/maintenance/tram/mid : /area/station/maintenance/tram/mid -/area/maintenance/tram/right : /area/station/maintenance/tram/right - -/area/maintenance/disposal : /area/station/maintenance/disposal -/area/maintenance/disposal/incinerator : /area/station/maintenance/disposal/incinerator -/area/maintenance/space_hut : /area/station/maintenance/space_hut -/area/maintenance/space_hut/cabin : /area/station/maintenance/space_hut/cabin -/area/maintenance/space_hut/plasmaman : /area/station/maintenance/space_hut/plasmaman -/area/maintenance/space_hut/observatory : /area/station/maintenance/space_hut/observatory - -/area/maintenance/radshelter : /area/station/maintenance/radshelter -/area/maintenance/radshelter/medical : /area/station/maintenance/radshelter/medical -/area/maintenance/radshelter/sec : /area/station/maintenance/radshelter/sec -/area/maintenance/radshelter/service : /area/station/maintenance/radshelter/service -/area/maintenance/radshelter/civil : /area/station/maintenance/radshelter/civil -/area/maintenance/radshelter/sci : /area/station/maintenance/radshelter/sci -/area/maintenance/radshelter/cargo : /area/station/maintenance/radshelter/cargo - -/area/hallway : /area/station/hallway -/area/hallway/primary : /area/station/hallway/primary -/area/hallway/primary/aft : /area/station/hallway/primary/aft -/area/hallway/primary/fore : /area/station/hallway/primary/fore -/area/hallway/primary/starboard : /area/station/hallway/primary/starboard -/area/hallway/primary/port : /area/station/hallway/primary/port -/area/hallway/primary/central : /area/station/hallway/primary/central -/area/hallway/primary/central/fore : /area/station/hallway/primary/central/fore -/area/hallway/primary/central/aft : /area/station/hallway/primary/central/aft -/area/hallway/primary/upper : /area/station/hallway/primary/upper -/area/hallway/primary/tram : /area/station/hallway/primary/tram -/area/hallway/primary/tram/left : /area/station/hallway/primary/tram/left -/area/hallway/primary/tram/center : /area/station/hallway/primary/tram/center -/area/hallway/primary/tram/right : /area/station/hallway/primary/tram/right -/area/hallway/secondary/command : /area/station/hallway/secondary/command -/area/hallway/secondary/construction : /area/station/hallway/secondary/construction -/area/hallway/secondary/construction/engineering : /area/station/hallway/secondary/construction/engineering -/area/hallway/secondary/exit : /area/station/hallway/secondary/exit -/area/hallway/secondary/exit/departure_lounge : /area/station/hallway/secondary/exit/departure_lounge -/area/hallway/secondary/entry : /area/station/hallway/secondary/entry -/area/hallway/secondary/service : /area/station/hallway/secondary/service - -/area/command : /area/station/command -/area/command/bridge : /area/station/command/bridge -/area/command/meeting_room : /area/station/command/meeting_room -/area/command/meeting_room/council : /area/station/command/meeting_room/council -/area/command/corporate_showroom : /area/station/command/corporate_showroom -/area/command/heads_quarters : /area/station/command/heads_quarters -/area/command/heads_quarters/captain : /area/station/command/heads_quarters/captain -/area/command/heads_quarters/captain/private : /area/station/command/heads_quarters/captain/private -/area/command/heads_quarters/ce : /area/station/command/heads_quarters/ce -/area/command/heads_quarters/cmo : /area/station/command/heads_quarters/cmo -/area/command/heads_quarters/hop : /area/station/command/heads_quarters/hop -/area/command/heads_quarters/hos : /area/station/command/heads_quarters/hos -/area/command/heads_quarters/rd : /area/station/command/heads_quarters/rd - -/area/command/teleporter : /area/station/command/teleporter -/area/command/gateway : /area/station/command/gateway - -/area/commons : /area/station/commons -/area/commons/dorms : /area/station/commons/dorms -/area/commons/dorms/barracks : /area/station/commons/dorms/barracks -/area/commons/dorms/barracks/male : /area/station/commons/dorms/barracks/male -/area/commons/dorms/barracks/female : /area/station/commons/dorms/barracks/female -/area/commons/dorms/laundry : /area/station/commons/dorms/laundry -/area/commons/toilet : /area/station/commons/toilet -/area/commons/toilet/auxiliary : /area/station/commons/toilet/auxiliary -/area/commons/toilet/locker : /area/station/commons/toilet/locker -/area/commons/toilet/restrooms : /area/station/commons/toilet/restrooms -/area/commons/locker : /area/station/commons/locker -/area/commons/lounge : /area/station/commons/lounge -/area/commons/fitness : /area/station/commons/fitness -/area/commons/fitness/locker_room : /area/station/commons/fitness/locker_room -/area/commons/fitness/locker_room/male : /area/station/commons/fitness/locker_room/male -/area/commons/fitness/locker_room/female : /area/station/commons/fitness/locker_room/female -/area/commons/fitness/recreation : /area/station/commons/fitness/recreation -/area/commons/fitness/recreation/entertainment : /area/station/commons/fitness/recreation/entertainment - -/area/commons/vacant_room : /area/station/commons/vacant_room -/area/commons/vacant_room/office : /area/station/commons/vacant_room/office -/area/commons/vacant_room/commissary : /area/station/commons/vacant_room/commissary - -/area/commons/storage : /area/station/commons/storage -/area/commons/storage/tools : /area/station/commons/storage/tools -/area/commons/storage/primary : /area/station/commons/storage/primary -/area/commons/storage/art : /area/station/commons/storage/art -/area/commons/storage/emergency/starboard : /area/station/commons/storage/emergency/starboard -/area/commons/storage/emergency/port : /area/station/commons/storage/emergency/port -/area/commons/storage/mining : /area/station/commons/storage/mining - -/area/service : /area/station/service -/area/service/cafeteria : /area/station/service/cafeteria -/area/service/kitchen : /area/station/service/kitchen -/area/service/kitchen/coldroom : /area/station/service/kitchen/coldroom -/area/service/kitchen/diner : /area/station/service/kitchen/diner -/area/service/kitchen/abandoned : /area/station/service/kitchen/abandoned -/area/service/bar : /area/station/service/bar -/area/service/bar/Initialize(mapload) : /area/station/service/bar/Initialize(mapload) -/area/service/bar/atrium : /area/station/service/bar/atrium -/area/service/electronic_marketing_den : /area/station/service/electronic_marketing_den -/area/service/abandoned_gambling_den : /area/station/service/abandoned_gambling_den -/area/service/abandoned_gambling_den/gaming : /area/station/service/abandoned_gambling_den/gaming -/area/service/theater : /area/station/service/theater -/area/service/theater/abandoned : /area/station/service/theater/abandoned -/area/service/library : /area/station/service/library -/area/service/library/lounge : /area/station/service/library/lounge -/area/service/library/artgallery : /area/station/service/library/artgallery -/area/service/library/private : /area/station/service/library/private -/area/service/library/upper : /area/station/service/library/upper -/area/service/library/printer : /area/station/service/library/printer -/area/service/library/abandoned : /area/station/service/library/abandoned -/area/service/chapel : /area/station/service/chapel -/area/service/chapel/monastery : /area/station/service/chapel/monastery -/area/service/chapel/office : /area/station/service/chapel/office -/area/service/chapel/asteroid : /area/station/service/chapel/asteroid -/area/service/chapel/asteroid/monastery : /area/station/service/chapel/asteroid/monastery -/area/service/chapel/dock : /area/station/service/chapel/dock -/area/service/chapel/storage : /area/station/service/chapel/storage -/area/service/chapel/funeral : /area/station/service/chapel/funeral -/area/service/lawoffice : /area/station/service/lawoffice -/area/service/janitor : /area/station/service/janitor -/area/service/hydroponics : /area/station/service/hydroponics -/area/service/hydroponics/upper : /area/station/service/hydroponics/upper -/area/service/hydroponics/garden : /area/station/service/hydroponics/garden -/area/service/hydroponics/garden/abandoned : /area/station/service/hydroponics/garden/abandoned -/area/service/hydroponics/garden/monastery : /area/station/service/hydroponics/garden/monastery - -/area/engineering : /area/station/engineering -/area/engineering/engine_smes : /area/station/engineering/engine_smes -/area/engineering/main : /area/station/engineering/main -/area/engineering/hallway : /area/station/engineering/hallway -/area/engineering/atmos : /area/station/engineering/atmos -/area/engineering/atmos/upper : /area/station/engineering/atmos/upper -/area/engineering/atmos/project : /area/station/engineering/atmos/project -/area/engineering/atmos/pumproom : /area/station/engineering/atmos/pumproom -/area/engineering/atmos/mix : /area/station/engineering/atmos/mix -/area/engineering/atmos/storage : /area/station/engineering/atmos/storage -/area/engineering/atmos/storage/gas : /area/station/engineering/atmos/storage/gas -/area/engineering/atmos/office : /area/station/engineering/atmos/office -/area/engineering/atmos/hfr_room : /area/station/engineering/atmos/hfr_room -/area/engineering/atmospherics_engine : /area/station/engineering/atmospherics_engine -/area/engineering/lobby : /area/station/engineering/lobby -/area/engineering/supermatter : /area/station/engineering/supermatter -/area/engineering/supermatter/room : /area/station/engineering/supermatter/room -/area/engineering/break_room : /area/station/engineering/break_room -/area/engineering/gravity_generator : /area/station/engineering/gravity_generator -/area/engineering/storage : /area/station/engineering/storage -/area/engineering/storage_shared : /area/station/engineering/storage_shared -/area/engineering/transit_tube : /area/station/engineering/transit_tube -/area/engineering/storage/tech : /area/station/engineering/storage/tech -/area/engineering/storage/tcomms : /area/station/engineering/storage/tcomms - -/area/construction : /area/construction -/area/construction/mining/aux_base : /area/construction/mining/aux_base -/area/construction/storage_wing : /area/construction/storage_wing - -/area/solars : /area/station/solars -/area/solars/fore : /area/station/solars/fore -/area/solars/aft : /area/station/solars/aft -/area/solars/aux/port : /area/station/solars/aux/port -/area/solars/aux/starboard : /area/station/solars/aux/starboard -/area/solars/starboard : /area/station/solars/starboard -/area/solars/starboard/aft : /area/station/solars/starboard/aft -/area/solars/starboard/fore : /area/station/solars/starboard/fore -/area/solars/port : /area/station/solars/port -/area/solars/port/aft : /area/station/solars/port/aft -/area/solars/port/fore : /area/station/solars/port/fore -/area/solars/aisat : /area/station/solars/aisat - -/area/maintenance/solars : /area/station/maintenance/solars -/area/maintenance/solars/port : /area/station/maintenance/solars/port -/area/maintenance/solars/port/aft : /area/station/maintenance/solars/port/aft -/area/maintenance/solars/port/fore : /area/station/maintenance/solars/port/fore -/area/maintenance/solars/starboard : /area/station/maintenance/solars/starboard -/area/maintenance/solars/starboard/aft : /area/station/maintenance/solars/starboard/aft -/area/maintenance/solars/starboard/fore : /area/station/maintenance/solars/starboard/fore - -/area/medical : /area/station/medical -/area/medical/abandoned : /area/station/medical/abandoned -/area/medical/medbay : /area/station/medical/medbay -/area/medical/medbay/central : /area/station/medical/medbay/central -/area/medical/medbay/lobby : /area/station/medical/medbay/lobby -/area/medical/medbay/aft : /area/station/medical/medbay/aft -/area/medical/storage : /area/station/medical/storage -/area/medical/paramedic : /area/station/medical/paramedic -/area/medical/office : /area/station/medical/office -/area/medical/break_room : /area/station/medical/break_room -/area/medical/coldroom : /area/station/medical/coldroom -/area/medical/patients_rooms : /area/station/medical/patients_rooms -/area/medical/patients_rooms/room_a : /area/station/medical/patients_rooms/room_a -/area/medical/patients_rooms/room_b : /area/station/medical/patients_rooms/room_b -/area/medical/virology : /area/station/medical/virology -/area/medical/morgue : /area/station/medical/morgue -/area/medical/chemistry : /area/station/medical/chemistry -/area/medical/pharmacy : /area/station/medical/pharmacy -/area/medical/surgery : /area/station/medical/surgery -/area/medical/surgery/fore : /area/station/medical/surgery/fore -/area/medical/surgery/aft : /area/station/medical/surgery/aft -/area/medical/surgery/theatre : /area/station/medical/surgery/theatre -/area/medical/cryo : /area/station/medical/cryo -/area/medical/exam_room : /area/station/medical/exam_room -/area/medical/treatment_center : /area/station/medical/treatment_center -/area/medical/psychology : /area/station/medical/psychology - -/area/security : /area/station/security -/area/security/office : /area/station/security/office -/area/security/lockers : /area/station/security/lockers -/area/security/brig : /area/station/security/brig -/area/security/holding_cell : /area/station/security/holding_cell -/area/security/medical : /area/station/security/medical -/area/security/brig/upper : /area/station/security/brig/upper -/area/security/courtroom : /area/station/security/courtroom -/area/security/prison : /area/station/security/prison -/area/security/prison/toilet : /area/station/security/prison/toilet -/area/security/prison/safe : /area/station/security/prison/safe -/area/security/prison/upper : /area/station/security/prison/upper -/area/security/prison/visit : /area/station/security/prison/visit -/area/security/prison/rec : /area/station/security/prison/rec -/area/security/prison/mess : /area/station/security/prison/mess -/area/security/prison/work : /area/station/security/prison/work -/area/security/prison/shower : /area/station/security/prison/shower -/area/security/prison/workout : /area/station/security/prison/workout -/area/security/prison/garden : /area/station/security/prison/garden -/area/security/processing : /area/station/security/processing -/area/security/processing/cremation : /area/station/security/processing/cremation -/area/security/interrogation : /area/station/security/interrogation -/area/security/warden : /area/station/security/warden -/area/security/detectives_office : /area/station/security/detectives_office -/area/security/detectives_office/private_investigators_office : /area/station/security/detectives_office/private_investigators_office -/area/security/range : /area/station/security/range -/area/security/execution : /area/station/security/execution -/area/security/execution/transfer : /area/station/security/execution/transfer -/area/security/execution/education : /area/station/security/execution/education -/area/security/checkpoint : /area/station/security/checkpoint -/area/security/checkpoint/auxiliary : /area/station/security/checkpoint/auxiliary -/area/security/checkpoint/escape : /area/station/security/checkpoint/escape -/area/security/checkpoint/supply : /area/station/security/checkpoint/supply -/area/security/checkpoint/engineering : /area/station/security/checkpoint/engineering -/area/security/checkpoint/medical : /area/station/security/checkpoint/medical -/area/security/checkpoint/science : /area/station/security/checkpoint/science -/area/security/checkpoint/science/research : /area/station/security/checkpoint/science/research -/area/security/checkpoint/customs : /area/station/security/checkpoint/customs -/area/security/checkpoint/customs/auxiliary : /area/station/security/checkpoint/customs/auxiliary -/area/security/checkpoint/customs/fore : /area/station/security/checkpoint/customs/fore -/area/security/checkpoint/customs/aft : /area/station/security/checkpoint/customs/aft - -/area/cargo : /area/station/cargo -/area/cargo/sorting : /area/station/cargo/sorting -/area/cargo/warehouse : /area/station/cargo/warehouse -/area/cargo/drone_bay : /area/station/cargo/drone_bay -/area/cargo/warehouse/upper : /area/station/cargo/warehouse/upper -/area/cargo/office : /area/station/cargo/office -/area/cargo/storage : /area/station/cargo/storage -/area/cargo/lobby : /area/station/cargo/lobby -/area/cargo/qm : /area/station/cargo/qm -/area/cargo/miningdock : /area/station/cargo/miningdock -/area/cargo/miningdock/cafeteria : /area/station/cargo/miningdock/cafeteria -/area/cargo/miningdock/oresilo : /area/station/cargo/miningdock/oresilo -/area/cargo/miningoffice : /area/station/cargo/miningoffice - -/area/science : /area/station/science -/area/science/lobby : /area/station/science/lobby -/area/science/lower : /area/station/science/lower -/area/science/breakroom : /area/station/science/breakroom -/area/science/lab : /area/station/science/lab -/area/science/xenobiology : /area/station/science/xenobiology -/area/science/xenobiology/hallway : /area/station/science/xenobiology/hallway -/area/science/cytology : /area/station/science/cytology -/area/science/storage : /area/station/science/storage -/area/science/test_area : /area/station/science/test_area -/area/science/mixing : /area/station/science/mixing -/area/science/mixing/chamber : /area/station/science/mixing/chamber -/area/science/mixing/hallway : /area/station/science/mixing/hallway -/area/science/mixing/launch : /area/station/science/mixing/launch -/area/science/genetics : /area/station/science/genetics -/area/science/misc_lab : /area/station/science/misc_lab -/area/science/misc_lab/range : /area/station/science/misc_lab/range -/area/science/server : /area/station/science/server -/area/science/explab : /area/station/science/explab -/area/science/robotics : /area/station/science/robotics -/area/science/robotics/mechbay : /area/station/science/robotics/mechbay -/area/science/robotics/lab : /area/station/science/robotics/lab -/area/science/research : /area/station/science/research -/area/science/research/abandoned : /area/station/science/research/abandoned - -/area/tcommsat : /area/station/tcommsat -/area/tcommsat/computer : /area/station/tcommsat/computer -/area/tcommsat/server : /area/station/tcommsat/server -/area/tcommsat/server/upper : /area/station/tcommsat/server/upper - -/area/comms : /area/station/comms -/area/server : /area/station/server - -/area/maintenance/external : /area/station/maintenance/external -/area/maintenance/external/aft : /area/station/maintenance/external/aft -/area/maintenance/external/port : /area/station/maintenance/external/port -/area/maintenance/external/port/bow : /area/station/maintenance/external/port/bow diff --git a/tools/UpdatePaths/Scripts/66411_thermomachines.txt b/tools/UpdatePaths/Scripts/66411_thermomachines.txt deleted file mode 100644 index a53afc0727b2..000000000000 --- a/tools/UpdatePaths/Scripts/66411_thermomachines.txt +++ /dev/null @@ -1,6 +0,0 @@ -/obj/machinery/atmospherics/components/binary/thermomachine : /obj/machinery/atmospherics/components/unary/thermomachine{@OLD} -/obj/machinery/atmospherics/components/binary/thermomachine/freezer : /obj/machinery/atmospherics/components/unary/thermomachine/freezer{@OLD} -/obj/machinery/atmospherics/components/binary/thermomachine/freezer/on : /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{@OLD} -/obj/machinery/atmospherics/components/binary/thermomachine/freezer/on/coldroom : /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom{@OLD} -/obj/machinery/atmospherics/components/binary/thermomachine/heater : /obj/machinery/atmospherics/components/unary/thermomachine/heater{@OLD} -/obj/machinery/atmospherics/components/binary/thermomachine/heater/on : /obj/machinery/atmospherics/components/unary/thermomachine/heater/on{@OLD} diff --git a/tools/UpdatePaths/Scripts/66505_tablet_cartridges.txt b/tools/UpdatePaths/Scripts/66505_tablet_cartridges.txt deleted file mode 100644 index 7f60a8f1295f..000000000000 --- a/tools/UpdatePaths/Scripts/66505_tablet_cartridges.txt +++ /dev/null @@ -1,24 +0,0 @@ -/obj/item/computer_hardware/hard_drive/role/medical : /obj/item/computer_hardware/hard_drive/portable/medical -/obj/item/computer_hardware/hard_drive/role/chemistry : /obj/item/computer_hardware/hard_drive/portable/chemistry -/obj/item/computer_hardware/hard_drive/role/engineering : /obj/item/computer_hardware/hard_drive/portable/engineering -/obj/item/computer_hardware/hard_drive/role/atmos : /obj/item/computer_hardware/hard_drive/portable/atmos -/obj/item/computer_hardware/hard_drive/role/signal : /obj/item/computer_hardware/hard_drive/portable/ordnance -/obj/item/computer_hardware/hard_drive/role/signal/ordnance : /obj/item/computer_hardware/hard_drive/portable/ordnance -/obj/item/computer_hardware/hard_drive/role/quartermaster : /obj/item/computer_hardware/hard_drive/portable/quartermaster -/obj/item/computer_hardware/hard_drive/role/rd : /obj/item/computer_hardware/hard_drive/portable/command/rd -/obj/item/computer_hardware/hard_drive/role/ce : /obj/item/computer_hardware/hard_drive/portable/command/ce -/obj/item/computer_hardware/hard_drive/role/cmo : /obj/item/computer_hardware/hard_drive/portable/command/cmo -/obj/item/computer_hardware/hard_drive/role/hos : /obj/item/computer_hardware/hard_drive/portable/command/hos -/obj/item/computer_hardware/hard_drive/role/hop : /obj/item/computer_hardware/hard_drive/portable/command/hop -/obj/item/computer_hardware/hard_drive/role/captain : /obj/item/computer_hardware/hard_drive/portable/command/captain -/obj/item/computer_hardware/hard_drive/role/virus/mime : /obj/item/computer_hardware/hard_drive/portable/virus/mime -/obj/item/computer_hardware/hard_drive/role/virus/clown : /obj/item/computer_hardware/hard_drive/portable/virus/clown -/obj/item/computer_hardware/hard_drive/role/virus/deto : /obj/item/computer_hardware/hard_drive/portable/virus/deto -/obj/item/computer_hardware/hard_drive/role/virus/frame : /obj/item/computer_hardware/hard_drive/portable/virus/frame - -/obj/item/computer_hardware/hard_drive/role/lawyer : @DELETE -/obj/item/computer_hardware/hard_drive/role/detective : @DELETE -/obj/item/computer_hardware/hard_drive/role/janitor : @DELETE -/obj/item/computer_hardware/hard_drive/role/curator : @DELETE -/obj/item/computer_hardware/hard_drive/role/roboticist : @DELETE -/obj/item/computer_hardware/hard_drive/role/signal : @DELETE diff --git a/tools/UpdatePaths/Scripts/66754_replace_sign_names.txt b/tools/UpdatePaths/Scripts/66754_replace_sign_names.txt deleted file mode 100644 index eed28991fad9..000000000000 --- a/tools/UpdatePaths/Scripts/66754_replace_sign_names.txt +++ /dev/null @@ -1,17 +0,0 @@ -/obj/structure/sign/warning/securearea : /obj/structure/sign/warning/secure_area {@OLD} -/obj/structure/sign/warning/electricshock : /obj/structure/sign/warning/electric_shock {@OLD} -/obj/structure/sign/warning/nosmoking : /obj/structure/sign/warning/no_smoking {@OLD} -/obj/structure/sign/warning/nosmoking/circle : /obj/structure/sign/warning/no_smoking/circle {@OLD} -/obj/structure/sign/warning/yessmoking/circle : /obj/structure/sign/warning/yes_smoking/circle {@OLD} -/obj/structure/sign/warning/enginesafety : /obj/structure/sign/warning/engine_safety {@OLD} -/obj/structure/sign/warning/testchamber : /obj/structure/sign/warning/test_chamber {@OLD} -/obj/structure/sign/warning/firingrange : /obj/structure/sign/warning/firing_range {@OLD} -/obj/structure/sign/warning/coldtemp : /obj/structure/sign/warning/cold_temp {@OLD} -/obj/structure/sign/warning/hottemp : /obj/structure/sign/warning/hot_temp {@OLD} -/obj/structure/sign/warning/gasmask : /obj/structure/sign/warning/gas_mask {@OLD} -/obj/structure/sign/warning/chemdiamond : /obj/structure/sign/warning/chem_diamond {@OLD} -/obj/structure/sign/warning/radshelter : /obj/structure/sign/warning/rad_shelter {@OLD} - -/obj/structure/sign/departments/examroom : /obj/structure/sign/departments/exam_room {@OLD} -/obj/structure/sign/departments/mait : /obj/structure/sign/departments/maint {@OLD} -/obj/structure/sign/departments/mait/alt : /obj/structure/sign/departments/maint/alt {@OLD} diff --git a/tools/UpdatePaths/Scripts/66860_replace_masks.txt b/tools/UpdatePaths/Scripts/66860_replace_masks.txt deleted file mode 100644 index 234864a4019b..000000000000 --- a/tools/UpdatePaths/Scripts/66860_replace_masks.txt +++ /dev/null @@ -1,16 +0,0 @@ -#comment This replaces animal mask paths to the new simplified paths see (https://github.com/tgstation/tgstation/pull/66860) - -/obj/item/clothing/mask/animal/rat/cursed : /obj/item/clothing/mask/animal/small/rat/cursed -/obj/item/clothing/mask/animal/rat/fox/cursed : /obj/item/clothing/mask/animal/small/fox/cursed -/obj/item/clothing/mask/animal/rat/bee/cursed : /obj/item/clothing/mask/animal/small/bee/cursed -/obj/item/clothing/mask/animal/rat/bear/cursed : /obj/item/clothing/mask/animal/small/bear/cursed -/obj/item/clothing/mask/animal/rat/bat/cursed : /obj/item/clothing/mask/animal/small/bat/cursed -/obj/item/clothing/mask/animal/rat/raven/cursed : /obj/item/clothing/mask/animal/small/raven/cursed -/obj/item/clothing/mask/animal/rat/jackal/cursed : /obj/item/clothing/mask/animal/small/jackal/cursed -/obj/item/clothing/mask/animal/rat : /obj/item/clothing/mask/animal/small/rat -/obj/item/clothing/mask/animal/rat/fox : /obj/item/clothing/mask/animal/small/fox -/obj/item/clothing/mask/animal/rat/bee : /obj/item/clothing/mask/animal/small/bee -/obj/item/clothing/mask/animal/rat/bear : /obj/item/clothing/mask/animal/small/bear -/obj/item/clothing/mask/animal/rat/bat : /obj/item/clothing/mask/animal/small/bat -/obj/item/clothing/mask/animal/rat/raven : /obj/item/clothing/mask/animal/small/raven -/obj/item/clothing/mask/animal/rat/jackal : /obj/item/clothing/mask/animal/small/jackal diff --git a/tools/UpdatePaths/Scripts/67083_action_granters.txt b/tools/UpdatePaths/Scripts/67083_action_granters.txt deleted file mode 100644 index 91609df338ce..000000000000 --- a/tools/UpdatePaths/Scripts/67083_action_granters.txt +++ /dev/null @@ -1 +0,0 @@ -/obj/item/book/granter/spell/@SUBTYPES : /obj/item/book/granter/action/spell/@SUBTYPES {@OLD} diff --git a/tools/UpdatePaths/Scripts/67107_turf_updates_2.txt b/tools/UpdatePaths/Scripts/67107_turf_updates_2.txt deleted file mode 100644 index b5ac4b51b8fd..000000000000 --- a/tools/UpdatePaths/Scripts/67107_turf_updates_2.txt +++ /dev/null @@ -1,118 +0,0 @@ -#comment This is the second turf updates txt. This one only reorganizes the work tree. Use the first one if you're trying to update your area typepaths for stations, then run this. - -/area/centcom/control : /area/centcom/central_command_areas/control -/area/centcom/evacuation : /area/centcom/central_command_areas/evacuation -/area/centcom/evacuation/ship : /area/centcom/central_command_areas/evacuation/ship -/area/centcom/fore : /area/centcom/central_command_areas/fore -/area/centcom/supply : /area/centcom/central_command_areas/supply -/area/centcom/ferry : /area/centcom/central_command_areas/ferry -/area/centcom/briefing : /area/centcom/central_command_areas/briefing -/area/centcom/armory : /area/centcom/central_command_areas/armory -/area/centcom/admin : /area/centcom/central_command_areas/admin -/area/centcom/admin/storage : /area/centcom/central_command_areas/admin/storage -/area/centcom/prison : /area/centcom/central_command_areas/prison -/area/centcom/prison/cells : /area/centcom/central_command_areas/prison/cells -/area/centcom/courtroom : /area/centcom/central_command_areas/courtroom -/area/centcom/holding : /area/centcom/central_command_areas/holding -/area/centcom/supplypod/supplypod_temp_holding : /area/centcom/central_command_areas/supplypod/supplypod_temp_holding -/area/centcom/supplypod : /area/centcom/central_command_areas/supplypod -/area/centcom/supplypod/pod_storage : /area/centcom/central_command_areas/supplypod/pod_storage -/area/centcom/supplypod/loading : /area/centcom/central_command_areas/supplypod/loading -/area/centcom/supplypod/loading/one : /area/centcom/central_command_areas/supplypod/loading/one -/area/centcom/supplypod/loading/two : /area/centcom/central_command_areas/supplypod/loading/two -/area/centcom/supplypod/loading/three : /area/centcom/central_command_areas/supplypod/loading/three -/area/centcom/supplypod/loading/four : /area/centcom/central_command_areas/supplypod/loading/four -/area/centcom/supplypod/loading/ert : /area/centcom/central_command_areas/supplypod/loading/ert - -/area/tdome : /area/centcom/tdome -/area/tdome/arena : /area/centcom/tdome/arena -/area/tdome/arena_source : /area/centcom/tdome/arena_source -/area/tdome/tdome1 : /area/centcom/tdome/tdome1 -/area/tdome/tdome2 : /area/centcom/tdome/tdome2 -/area/tdome/administration : /area/centcom/tdome/administration -/area/tdome/observation : /area/centcom/tdome/observation - -/area/wizard_station : /area/centcom/wizard_station -/area/abductor_ship : /area/centcom/abductor_ship -/area/syndicate_mothership : /area/centcom/syndicate_mothership -/area/syndicate_mothership/control : /area/centcom/syndicate_mothership/control -/area/syndicate_mothership/expansion_bombthreat : /area/centcom/syndicate_mothership/expansion_bombthreat -/area/syndicate_mothership/expansion_bioterrorism : /area/centcom/syndicate_mothership/expansion_bioterrorism -/area/syndicate_mothership/expansion_chemicalwarfare : /area/centcom/syndicate_mothership/expansion_chemicalwarfare -/area/syndicate_mothership/expansion_fridgerummage :/area/centcom/syndicate_mothership/expansion_fridgerummage -/area/syndicate_mothership/elite_squad : /area/centcom/syndicate_mothership/elite_squad - -/area/heretic_sacrifice : /area/centcom/heretic_sacrifice -/area/heretic_sacrifice/ash : /area/centcom/heretic_sacrifice/ash -/area/heretic_sacrifice/void : /area/centcom/heretic_sacrifice/void -/area/heretic_sacrifice/flesh : /area/centcom/heretic_sacrifice/flesh -/area/heretic_sacrifice/rust : /area/centcom/heretic_sacrifice/rust - -/area/ctf : /area/centcom/ctf -/area/ctf/control_room : /area/centcom/ctf/control_room -/area/ctf/control_room2 : /area/centcom/ctf/control_room2 -/area/ctf/central : /area/centcom/ctf/central -/area/ctf/main_hall : /area/centcom/ctf/main_hall -/area/ctf/main_hall2 : /area/centcom/ctf/main_hall2 -/area/ctf/corridor : /area/centcom/ctf/corridor -/area/ctf/corridor2: /area/centcom/ctf/corridor2 -/area/ctf/flag_room : /area/centcom/ctf/flag_room -/area/ctf/flag_room2 : /area/centcom/ctf/flag_room2 - -/area/start : /area/misc/start -/area/testroom : /area/misc/testroom - -/area/ai_monitored : /area/station/ai_monitored -/area/ai_monitored/turret_protected : /area/station/ai_monitored/turret_protected -/area/ai_monitored : /area/station/ai_monitored -/area/ai_monitored/aisat/exterior : /area/station/ai_monitored/aisat/exterior -/area/ai_monitored/command/storage/satellite : /area/station/ai_monitored/command/storage/satellite -/area/ai_monitored/turret_protected : /area/station/ai_monitored/turret_protected -/area/ai_monitored/turret_protected/ai_upload : /area/station/ai_monitored/turret_protected/ai_upload -/area/ai_monitored/turret_protected/ai_upload_foyer : /area/station/ai_monitored/turret_protected/ai_upload_foyer -/area/ai_monitored/turret_protected/ai : /area/station/ai_monitored/turret_protected/ai -/area/ai_monitored/turret_protected/aisat : /area/station/ai_monitored/turret_protected/aisat -/area/ai_monitored/turret_protected/aisat/atmos : /area/station/ai_monitored/turret_protected/aisat/atmos -/area/ai_monitored/turret_protected/aisat/foyer : /area/station/ai_monitored/turret_protected/aisat/foyer -/area/ai_monitored/turret_protected/aisat/service : /area/station/ai_monitored/turret_protected/aisat/service -/area/ai_monitored/turret_protected/aisat/hallway : /area/station/ai_monitored/turret_protected/aisat/hallway -/area/ai_monitored/turret_protected/aisat/maint : /area/station/ai_monitored/turret_protected/aisat/maint -/area/ai_monitored/turret_protected/aisat_interior : /area/station/ai_monitored/turret_protected/aisat_interior -/area/ai_monitored/turret_protected/ai_sat_ext_as : /area/station/ai_monitored/turret_protected/ai_sat_ext_as -/area/ai_monitored/turret_protected/ai_sat_ext_ap : /area/station/ai_monitored/turret_protected/ai_sat_ext_ap -/area/ai_monitored/command/storage/eva : /area/station/ai_monitored/command/storage/eva -/area/ai_monitored/command/storage/eva/upper : /area/station/ai_monitored/command/storage/eva/upper -/area/ai_monitored/command/nuke_storage : /area/station/ai_monitored/command/nuke_storage -/area/ai_monitored/security/armory : /area/station/ai_monitored/security/armory -/area/ai_monitored/security/armory/upper : /area/station/ai_monitored/security/armory/upper - -/area/tcommsat/oldaisat : /area/ruin/tcommsat_oldaisat - -/area/solars/ancientstation/charlie/solars : /area/ruin/solars/ancientstation/charlie/solars -/area/solars/derelict_starboard : /area/ruin/solars/derelict_starboard -/area/solars/derelict_aft : /area/ruin/solars/derelict_aft - -/area/ai_multicam_room : /area/centcom/ai_multicam_room - -/area/cordon : /area/misc/cordon - -/area/holodeck : /area/station/holodeck -/area/holodeck/rec_center : /area/station/holodeck/rec_center -/area/holodeck/rec_center/offstation_one : /area/station/holodeck/rec_center/offstation_one - -/area/asteroid : /area/centcom/asteroid -/area/asteroid/nearstation : /area/centcom/asteroid/nearstation -/area/asteroid/nearstation/bomb_site : /area/centcom/asteroid/nearstation/bomb_site - -/area/hilbertshotel : /area/misc/hilbertshotel -/area/hilbertshotelstorage : /area/misc/hilbertshotelstorage - -/area/construction : /area/station/construction -/area/construction/mining/aux_base : /area/station/construction/mining/aux_base -/area/construction/storage_wing : /area/station/construction/storage_wing - -/area/mafia : /area/centcom/mafia - -/area/shuttle_arena : /area/shuttle/shuttle_arena - -/area/survivalpod : /area/misc/survivalpod diff --git a/tools/UpdatePaths/Scripts/67324_misc_space_fix.txt b/tools/UpdatePaths/Scripts/67324_misc_space_fix.txt deleted file mode 100644 index 6ae0987fa478..000000000000 --- a/tools/UpdatePaths/Scripts/67324_misc_space_fix.txt +++ /dev/null @@ -1,4 +0,0 @@ -#comment We fucked up, run this to revert behavior. - -/area/misc/space : /area/space -/area/misc/space/nearstation : /area/space/nearstation diff --git a/tools/UpdatePaths/Scripts/67512_mail_sorting_to_shipping.txt b/tools/UpdatePaths/Scripts/67512_mail_sorting_to_shipping.txt deleted file mode 100644 index 7a6699b354b2..000000000000 --- a/tools/UpdatePaths/Scripts/67512_mail_sorting_to_shipping.txt +++ /dev/null @@ -1,2 +0,0 @@ -/obj/effect/mapping_helpers/airlock/access/any/supply/mail_sorting : /obj/effect/mapping_helpers/airlock/access/any/supply/shipping -/obj effect/mapping_helpers/airlock/access/all/supply/mail_sorting : /obj/effect/mapping_helpers/airlock/access/all/supply/shipping \ No newline at end of file diff --git a/tools/UpdatePaths/Scripts/67761_floorvaredits_to_mappinghelpers.txt b/tools/UpdatePaths/Scripts/67761_floorvaredits_to_mappinghelpers.txt deleted file mode 100644 index 05fed1cadb38..000000000000 --- a/tools/UpdatePaths/Scripts/67761_floorvaredits_to_mappinghelpers.txt +++ /dev/null @@ -1,66 +0,0 @@ -/turf/open/floor/iron/@SUBTYPES{icon_state="damaged1"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/iron/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/iron/@SUBTYPES{icon_state="damaged2"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/iron/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/iron/@SUBTYPES{icon_state="damaged3"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/iron/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/iron/@SUBTYPES{icon_state="damaged4"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/iron/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/iron/@SUBTYPES{icon_state="damaged5"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/iron/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/iron/@SUBTYPES{icon_state="floorscorched1"} : /obj/effect/mapping_helpers/burnt_floor , /turf/open/floor/iron/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/iron/@SUBTYPES{icon_state="floorscorched2"} : /obj/effect/mapping_helpers/burnt_floor , /turf/open/floor/iron/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} - -/turf/open/floor/plating/@SUBTYPES{icon_state="platingdmg1"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/plating/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/plating/@SUBTYPES{icon_state="platingdmg2"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/plating/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/plating/@SUBTYPES{icon_state="platingdmg3"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/plating/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/plating/@SUBTYPES{icon_state="panelscorched"} : /obj/effect/mapping_helpers/burnt_floor , /turf/open/floor/plating/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} - -/turf/open/floor/wood/@SUBTYPES{icon_state="wood-broken"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/wood/@SUBTYPES{icon_state="wood-broken2"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/wood/@SUBTYPES{icon_state="wood-broken3"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/wood/@SUBTYPES{icon_state="wood-broken4"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/wood/@SUBTYPES{icon_state="wood-broken5"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/wood/@SUBTYPES{icon_state="wood-broken6"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/wood/@SUBTYPES{icon_state="wood-broken7"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} - -/turf/open/floor/wood/@SUBTYPES{icon_state="wood_parquet-broken"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/wood/@SUBTYPES{icon_state="wood_parquet-broken2"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/wood/@SUBTYPES{icon_state="wood_parquet-broken3"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/wood/@SUBTYPES{icon_state="wood_parquet-broken4"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/wood/@SUBTYPES{icon_state="wood_parquet-broken5"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/wood/@SUBTYPES{icon_state="wood_parquet-broken6"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/wood/@SUBTYPES{icon_state="wood_parquet-broken7"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} - -/turf/open/floor/wood/@SUBTYPES{icon_state="wood_tile-broken"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/wood/@SUBTYPES{icon_state="wood_tile-broken2"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/wood/@SUBTYPES{icon_state="wood_tile-broken3"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} - -/turf/open/floor/wood/@SUBTYPES{icon_state="wood_large-broken"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/wood/@SUBTYPES{icon_state="wood_large-broken2"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/wood/@SUBTYPES{icon_state="wood_large-broken3"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/wood/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} - -/turf/open/floor/mineral/@SUBTYPES{icon_state="silver_dam"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} - -/turf/open/floor/mineral/@SUBTYPES{icon_state="gold_dam"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} - -/turf/open/floor/mineral/@SUBTYPES{icon_state="diamond_dam"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} - -/turf/open/floor/mineral/@SUBTYPES{icon_state="plasma_dam"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} - -/turf/open/floor/mineral/@SUBTYPES{icon_state="uranium_dam"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} - -/turf/open/floor/mineral/@SUBTYPES{icon_state="bananium_dam"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} - -/turf/open/floor/mineral/@SUBTYPES{icon_state="titanium_dam1"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/mineral/@SUBTYPES{icon_state="titanium_dam2"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/mineral/@SUBTYPES{icon_state="titanium_dam3"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/mineral/@SUBTYPES{icon_state="titanium_dam4"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/mineral/@SUBTYPES{icon_state="titanium_dam5"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} - -/turf/open/floor/mineral/@SUBTYPES{icon_state="titanium_dam1_old"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/mineral/@SUBTYPES{icon_state="titanium_dam2_old"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/mineral/@SUBTYPES{icon_state="titanium_dam3_old"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/mineral/@SUBTYPES{icon_state="titanium_dam4_old"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/mineral/@SUBTYPES{icon_state="titanium_dam5_old"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} - -/turf/open/floor/mineral/@SUBTYPES{icon_state="plastitanium_dam1"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/mineral/@SUBTYPES{icon_state="plastitanium_dam2"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/mineral/@SUBTYPES{icon_state="plastitanium_dam3"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/mineral/@SUBTYPES{icon_state="plastitanium_dam4"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} -/turf/open/floor/mineral/@SUBTYPES{icon_state="plastitanium_dam5"} : /obj/effect/mapping_helpers/broken_floor , /turf/open/floor/mineral/@SUBTYPES{@OLD;icon_state=@SKIP;broken=@SKIP} diff --git a/tools/UpdatePaths/Scripts/68004_varedited_signs_to_subtype_directionals.txt b/tools/UpdatePaths/Scripts/68004_varedited_signs_to_subtype_directionals.txt deleted file mode 100644 index 2c9a3b1d62af..000000000000 --- a/tools/UpdatePaths/Scripts/68004_varedited_signs_to_subtype_directionals.txt +++ /dev/null @@ -1,452 +0,0 @@ -#comment This UpdatePaths File should move every single sign in-game into a directional subtype in order to help with cutting down on the lines in your average DMM file. -#comment There are the obvious North, South, East, West directionals: but several maps do two pixelshifts in order to get the sign in a corner. -#comment This UpdatePaths File accounts for this by setting the subtype to either East or West, and then giving the "north" and "south" effect by a pixelshift. -#comment Somethings are just utterly inescapable, and it's niche enough to the point where I don't see the need to define an entirely new directional subclass, just for "southwest" to be a thing. -#comment The old functionality of manually pixelshifting a sign will still remain, but this just gives mappers subtle cues as to what I would really like them to do. -#comment Some people also didn't properly pixel_shift it (using something like 28 instead of 32), but it's not going to be possible to automate auditing all of those because UpdatePaths can't do ranges of numbers. Unfortunate. -#comment One thing to note is that the @SUBTYPES variable does not work for what I'm trying to accomplish (I tried), so I'm going to be explicit with every subtype in this script. It hurts me more than it hurts you. - -#comment Warning Signs! - -/obj/structure/sign/warning{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/biohazard{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/biohazard/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/biohazard{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/biohazard/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/biohazard{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/biohazard/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/biohazard{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/biohazard/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/biohazard{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/biohazard/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/biohazard{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/biohazard/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/biohazard{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/biohazard/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/biohazard{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/biohazard/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/bodysposal{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/bodysposal/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/bodysposal{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/bodysposal/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/bodysposal{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/bodysposal/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/bodysposal{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/bodysposal/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/bodysposal{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/bodysposal/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/bodysposal{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/bodysposal/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/bodysposal{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/bodysposal/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/bodysposal{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/bodysposal/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/chem_diamond{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/chem_diamond/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/chem_diamond{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/chem_diamond/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/chem_diamond{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/chem_diamond/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/chem_diamond{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/chem_diamond/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/chem_diamond{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/chem_diamond/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/chem_diamond{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/chem_diamond/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/chem_diamond{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/chem_diamond/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/chem_diamond{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/chem_diamond/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/cold_temp{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/cold_temp/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/cold_temp{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/cold_temp/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/cold_temp{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/cold_temp/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/cold_temp{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/cold_temp/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/cold_temp{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/cold_temp/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/cold_temp{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/cold_temp/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/cold_temp{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/cold_temp/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/cold_temp{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/cold_temp/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/deathsposal{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/deathsposal/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/deathsposal{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/deathsposal/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/deathsposal{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/deathsposal/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/deathsposal{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/deathsposal/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/deathsposal{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/deathsposal/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/deathsposal{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/deathsposal/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/deathsposal{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/deathsposal/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/deathsposal{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/deathsposal/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/docking{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/docking/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/docking{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/docking/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/docking{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/docking/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/docking{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/docking/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/docking{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/docking/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/docking{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/docking/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/docking{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/docking/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/docking{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/docking/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/electric_shock{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/electric_shock/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/electric_shock{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/electric_shock/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/electric_shock{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/electric_shock/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/electric_shock{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/electric_shock/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/electric_shock{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/electric_shock/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/electric_shock{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/electric_shock/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/electric_shock{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/electric_shock/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/electric_shock{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/electric_shock/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/engine_safety{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/engine_safety/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/engine_safety{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/engine_safety/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/engine_safety{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/engine_safety/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/engine_safety{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/engine_safety/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/engine_safety{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/engine_safety/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/engine_safety{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/engine_safety/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/engine_safety{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/engine_safety/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/engine_safety{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/engine_safety/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/explosives{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/explosives/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/explosives{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/explosives/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/explosives{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/explosives/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/explosives{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/explosives/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/explosives{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/explosives/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/explosives{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/explosives/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/explosives{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/explosives/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/explosives{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/explosives/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/fire{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/fire/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/fire{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/fire/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/fire{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/fire/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/fire{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/fire/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/fire{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/fire/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/fire{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/fire/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/fire{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/fire/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/fire{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/fire/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/firing_range{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/firing_range/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/firing_range{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/firing_range/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/firing_range{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/firing_range/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/firing_range{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/firing_range/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/firing_range{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/firing_range/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/firing_range{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/firing_range/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/firing_range{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/firing_range/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/firing_range{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/firing_range/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/gas_mask{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/gas_mask/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/gas_mask{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/gas_mask/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/gas_mask{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/gas_mask/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/gas_mask{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/gas_mask/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/gas_mask{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/gas_mask/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/gas_mask{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/gas_mask/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/gas_mask{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/gas_mask/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/gas_mask{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/gas_mask/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/hot_temp{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/hot_temp/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/hot_temp{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/hot_temp/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/hot_temp{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/hot_temp/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/hot_temp{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/hot_temp/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/hot_temp{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/hot_temp/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/hot_temp{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/hot_temp/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/hot_temp{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/hot_temp/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/hot_temp{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/hot_temp/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/no_smoking{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/no_smoking/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/no_smoking{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/no_smoking/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/no_smoking{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/no_smoking/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/no_smoking{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/no_smoking/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/no_smoking{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/no_smoking/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/no_smoking{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/no_smoking/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/no_smoking{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/no_smoking/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/no_smoking{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/no_smoking/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/pods{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/pods/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/pods{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/pods/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/pods{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/pods/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/pods{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/pods/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/pods{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/pods/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/pods{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/pods/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/pods{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/pods/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/pods{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/pods/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/rad_shelter{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/rad_shelter/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/rad_shelter{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/rad_shelter/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/rad_shelter{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/rad_shelter/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/rad_shelter{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/rad_shelter/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/rad_shelter{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/rad_shelter/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/rad_shelter{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/rad_shelter/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/rad_shelter{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/rad_shelter/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/rad_shelter{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/rad_shelter/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/radiation{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/radiation/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/radiation{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/radiation/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/radiation{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/radiation/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/radiation{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/radiation/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/radiation{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/radiation/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/radiation{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/radiation/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/radiation{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/radiation/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/radiation{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/radiation/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/secure_area{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/secure_area/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/secure_area{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/secure_area/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/secure_area{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/secure_area/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/secure_area{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/secure_area/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/secure_area{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/secure_area/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/secure_area{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/secure_area/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/secure_area{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/secure_area/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/secure_area{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/secure_area/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/test_chamber{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/test_chamber/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/test_chamber{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/test_chamber/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/test_chamber{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/test_chamber/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/test_chamber{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/test_chamber/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/test_chamber{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/test_chamber/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/test_chamber{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/test_chamber/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/test_chamber{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/test_chamber/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/test_chamber{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/test_chamber/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/vacuum{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/vacuum/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/vacuum{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/vacuum/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/vacuum{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/vacuum/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/vacuum{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/vacuum/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/vacuum{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/vacuum/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/vacuum{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/vacuum/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/vacuum{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/vacuum/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/vacuum{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/vacuum/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/xeno_mining{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/xeno_mining/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/xeno_mining{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/xeno_mining/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/xeno_mining{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/xeno_mining/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/xeno_mining{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/xeno_mining/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/xeno_mining{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/xeno_mining/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/xeno_mining{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/xeno_mining/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/xeno_mining{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/xeno_mining/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/xeno_mining{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/xeno_mining/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/yes_smoking/circle{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/yes_smoking/circle/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/yes_smoking/circle{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/yes_smoking/circle/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/yes_smoking/circle{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/yes_smoking/circle/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/yes_smoking/circle{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/yes_smoking/circle/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/yes_smoking/circle{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/yes_smoking/circle/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/yes_smoking/circle{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/yes_smoking/circle/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/yes_smoking/circle{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/yes_smoking/circle/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/yes_smoking/circle{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/yes_smoking/circle/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/vacuum/external{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/vacuum/external/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/vacuum/external{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/vacuum/external/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/vacuum/external{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/vacuum/external/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/vacuum/external{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/vacuum/external/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/vacuum/external{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/vacuum/external/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/vacuum/external{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/vacuum/external/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/vacuum/external{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/vacuum/external/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/vacuum/external{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/vacuum/external/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/no_smoking/circle{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/no_smoking/circle/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/no_smoking/circle{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/no_smoking/circle/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/no_smoking/circle{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/no_smoking/circle/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/no_smoking/circle{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/no_smoking/circle/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/no_smoking/circle{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/no_smoking/circle/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/no_smoking/circle{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/no_smoking/circle/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/no_smoking/circle{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/no_smoking/circle/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/no_smoking/circle{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/no_smoking/circle/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/explosives/alt{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/explosives/alt/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/explosives/alt{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/explosives/alt/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/explosives/alt{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/explosives/alt/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/explosives/alt{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/explosives/alt/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/explosives/alt{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/explosives/alt/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/explosives/alt{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/explosives/alt/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/explosives/alt{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/explosives/alt/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/explosives/alt{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/explosives/alt/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/warning/radiation/rad_area{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/warning/radiation/rad_area/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/radiation/rad_area{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/warning/radiation/rad_area/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/radiation/rad_area{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/warning/radiation/rad_area/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/radiation/rad_area{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/warning/radiation/rad_area/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/warning/radiation/rad_area{pixel_x=32;pixel_y=-32} : /obj/structure/sign/warning/radiation/rad_area/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/warning/radiation/rad_area{pixel_x=32;pixel_y=32} : /obj/structure/sign/warning/radiation/rad_area/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/radiation/rad_area{pixel_x=-32;pixel_y=32} : /obj/structure/sign/warning/radiation/rad_area/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/warning/radiation/rad_area{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/warning/radiation/rad_area/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -#comment Departmental Signs! - -/obj/structure/sign/departments/botany{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/botany/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/botany{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/botany/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/botany{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/botany/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/botany{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/botany/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/botany{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/botany/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/botany{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/botany/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/botany{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/botany/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/botany{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/botany/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/cargo{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/cargo/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/cargo{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/cargo/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/cargo{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/cargo/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/cargo{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/cargo/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/cargo{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/cargo/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/cargo{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/cargo/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/cargo{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/cargo/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/cargo{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/cargo/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/chemistry{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/chemistry/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/chemistry{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/chemistry/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/chemistry{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/chemistry/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/chemistry{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/chemistry/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/chemistry{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/chemistry/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/chemistry{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/chemistry/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/chemistry{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/chemistry/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/chemistry{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/chemistry/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/court{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/court/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/court{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/court/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/court{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/court/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/court{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/court/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/court{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/court/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/court{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/court/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/court{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/court/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/court{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/court/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/custodian{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/custodian/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/custodian{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/custodian/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/custodian{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/custodian/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/custodian{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/custodian/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/custodian{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/custodian/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/custodian{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/custodian/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/custodian{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/custodian/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/custodian{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/custodian/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/drop{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/drop/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/drop{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/drop/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/drop{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/drop/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/drop{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/drop/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/drop{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/drop/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/drop{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/drop/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/drop{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/drop/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/drop{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/drop/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/engineering{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/engineering/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/engineering{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/engineering/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/engineering{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/engineering/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/engineering{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/engineering/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/engineering{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/engineering/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/engineering{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/engineering/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/engineering{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/engineering/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/engineering{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/engineering/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/evac{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/evac/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/evac{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/evac/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/evac{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/evac/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/evac{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/evac/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/evac{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/evac/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/evac{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/evac/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/evac{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/evac/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/evac{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/evac/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/exam_room{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/exam_room/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/exam_room{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/exam_room/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/exam_room{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/exam_room/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/exam_room{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/exam_room/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/exam_room{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/exam_room/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/exam_room{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/exam_room/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/exam_room{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/exam_room/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/exam_room{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/exam_room/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/holy{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/holy/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/holy{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/holy/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/holy{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/holy/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/holy{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/holy/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/holy{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/holy/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/holy{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/holy/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/holy{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/holy/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/holy{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/holy/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/lawyer{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/lawyer/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/lawyer{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/lawyer/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/lawyer{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/lawyer/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/lawyer{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/lawyer/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/lawyer{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/lawyer/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/lawyer{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/lawyer/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/lawyer{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/lawyer/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/lawyer{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/lawyer/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/maint{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/maint/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/maint{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/maint/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/maint{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/maint/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/maint{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/maint/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/maint{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/maint/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/maint{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/maint/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/maint{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/maint/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/maint{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/maint/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/medbay{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/medbay/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/medbay{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/medbay/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/medbay{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/medbay/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/medbay{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/medbay/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/medbay{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/medbay/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/medbay{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/medbay/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/medbay{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/medbay/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/medbay{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/medbay/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/psychology{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/psychology/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/psychology{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/psychology/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/psychology{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/psychology/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/psychology{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/psychology/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/psychology{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/psychology/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/psychology{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/psychology/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/psychology{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/psychology/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/psychology{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/psychology/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/restroom{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/restroom/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/restroom{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/restroom/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/restroom{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/restroom/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/restroom{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/restroom/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/restroom{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/restroom/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/restroom{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/restroom/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/restroom{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/restroom/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/restroom{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/restroom/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/science{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/science/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/science{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/science/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/science{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/science/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/science{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/science/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/science{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/science/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/science{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/science/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/science{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/science/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/science{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/science/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/security{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/security/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/security{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/security/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/security{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/security/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/security{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/security/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/security{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/security/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/security{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/security/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/security{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/security/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/security{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/security/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/xenobio{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/xenobio/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/xenobio{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/xenobio/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/xenobio{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/xenobio/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/xenobio{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/xenobio/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/xenobio{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/xenobio/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/xenobio{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/xenobio/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/xenobio{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/xenobio/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/xenobio{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/xenobio/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/chemistry/pharmacy{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/chemistry/pharmacy/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/chemistry/pharmacy{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/chemistry/pharmacy/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/chemistry/pharmacy{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/chemistry/pharmacy/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/chemistry/pharmacy{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/chemistry/pharmacy/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/chemistry/pharmacy{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/chemistry/pharmacy/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/chemistry/pharmacy{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/chemistry/pharmacy/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/chemistry/pharmacy{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/chemistry/pharmacy/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/chemistry/pharmacy{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/chemistry/pharmacy/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/maint/alt{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/maint/alt/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/maint/alt{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/maint/alt/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/maint/alt{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/maint/alt/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/maint/alt{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/maint/alt/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/maint/alt{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/maint/alt/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/maint/alt{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/maint/alt/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/maint/alt{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/maint/alt/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/maint/alt{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/maint/alt/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/medbay/alt{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/medbay/alt/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/medbay/alt{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/medbay/alt/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/medbay/alt{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/medbay/alt/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/medbay/alt{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/medbay/alt/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/medbay/alt{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/medbay/alt/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/medbay/alt{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/medbay/alt/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/medbay/alt{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/medbay/alt/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/medbay/alt{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/medbay/alt/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} - -/obj/structure/sign/departments/science/alt{pixel_x=32;pixel_y=@UNSET} : /obj/structure/sign/departments/science/alt/directional/east{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/science/alt{pixel_x=-32;pixel_y=@UNSET} : /obj/structure/sign/departments/science/alt/directional/west{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/science/alt{pixel_x=@UNSET;pixel_y=32} : /obj/structure/sign/departments/science/alt/directional/north{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/science/alt{pixel_x=@UNSET;pixel_y=-32} : /obj/structure/sign/departments/science/alt/directional/south{@OLD;pixel_x=@SKIP;pixel_y=@SKIP} -/obj/structure/sign/departments/science/alt{pixel_x=32;pixel_y=-32} : /obj/structure/sign/departments/science/alt/directional/east{@OLD;pixel_x=@SKIP;pixel_y=-32} -/obj/structure/sign/departments/science/alt{pixel_x=32;pixel_y=32} : /obj/structure/sign/departments/science/alt/directional/east{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/science/alt{pixel_x=-32;pixel_y=32} : /obj/structure/sign/departments/science/alt/directional/west{@OLD;pixel_x=@SKIP;pixel_y=32} -/obj/structure/sign/departments/science/alt{pixel_x=-32;pixel_y=-32} : /obj/structure/sign/departments/science/alt/directional/west{@OLD;pixel_x=@SKIP;pixel_y=-32} From 1c3cd16b7ac9db1d1bdb523bb1b626491a0a72c2 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 24 Oct 2024 15:26:26 -0500 Subject: [PATCH 113/274] Automatic changelog generation for PR #3526 [ci skip] --- html/changelogs/AutoChangeLog-pr-3526.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3526.yml diff --git a/html/changelogs/AutoChangeLog-pr-3526.yml b/html/changelogs/AutoChangeLog-pr-3526.yml new file mode 100644 index 000000000000..f21948b36459 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3526.yml @@ -0,0 +1,4 @@ +author: FalloutFalcon +changes: + - {refactor: refactored some mapping stuff including random spawners!} +delete-after: true From a08aa3413851e767e4ff0b5c75e12b2b56da3696 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 25 Oct 2024 01:03:14 +0000 Subject: [PATCH 114/274] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-3482.yml | 6 ----- html/changelogs/AutoChangeLog-pr-3526.yml | 4 ---- html/changelogs/AutoChangeLog-pr-3592.yml | 7 ------ html/changelogs/AutoChangeLog-pr-3600.yml | 5 ----- html/changelogs/AutoChangeLog-pr-3608.yml | 4 ---- html/changelogs/AutoChangeLog-pr-3613.yml | 4 ---- html/changelogs/AutoChangeLog-pr-3615.yml | 4 ---- html/changelogs/AutoChangeLog-pr-3618.yml | 5 ----- html/changelogs/AutoChangeLog-pr-3622.yml | 4 ---- html/changelogs/AutoChangeLog-pr-3629.yml | 4 ---- html/changelogs/archive/2024-10.yml | 27 +++++++++++++++++++++++ 11 files changed, 27 insertions(+), 47 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-3482.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3526.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3592.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3600.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3608.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3613.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3615.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3618.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3622.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-3629.yml diff --git a/html/changelogs/AutoChangeLog-pr-3482.yml b/html/changelogs/AutoChangeLog-pr-3482.yml deleted file mode 100644 index 32a1e2cc7499..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3482.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: thgvr -changes: - - {balance: Removed Kepori damage modifiers.} - - {balance: Decreased Kepori move speed modifier. (They are still a bit faster than - average)} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3526.yml b/html/changelogs/AutoChangeLog-pr-3526.yml deleted file mode 100644 index f21948b36459..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3526.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: FalloutFalcon -changes: - - {refactor: refactored some mapping stuff including random spawners!} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3592.yml b/html/changelogs/AutoChangeLog-pr-3592.yml deleted file mode 100644 index 8bd7da1fe492..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3592.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: SomeguyManperson -changes: - - {balance: simple humans now have as much health as normal humans! This makes them - weaker!} - - {balance: simple humans now also benefit from their armor as much as normal humans! - This makes them stronger!} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3600.yml b/html/changelogs/AutoChangeLog-pr-3600.yml deleted file mode 100644 index 4213f8bb5ba9..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3600.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: zimon9 -changes: - - {rscadd: Added plastitanium shards} - - {bugfix: fixed some artifacts in the plasma glass shard sprites} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3608.yml b/html/changelogs/AutoChangeLog-pr-3608.yml deleted file mode 100644 index 3f69cc679412..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3608.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Sadhorizon -changes: - - {tweak: Medical stacks now work on corpses.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3613.yml b/html/changelogs/AutoChangeLog-pr-3613.yml deleted file mode 100644 index faa1257caa79..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3613.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Erikafox -changes: - - {bugfix: Newscasters can now read IDs through a wallet.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3615.yml b/html/changelogs/AutoChangeLog-pr-3615.yml deleted file mode 100644 index de17ffbc1571..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3615.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Gristlebee -changes: - - {rscadd: Vote sound changed to announce_dig.ogg} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3618.yml b/html/changelogs/AutoChangeLog-pr-3618.yml deleted file mode 100644 index 75cf1806ad47..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3618.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: MemeSnorfer and Moffball -changes: - - {imageadd: Snouted balaclava sprites for both Sarathi and Elzuose} - - {code_imp: 'Elzuose snout type, for use with mask sprites'} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3622.yml b/html/changelogs/AutoChangeLog-pr-3622.yml deleted file mode 100644 index 5d7609e22c05..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3622.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: generalthrax -changes: - - {bugfix: Design disks work again} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3629.yml b/html/changelogs/AutoChangeLog-pr-3629.yml deleted file mode 100644 index 3f1925061720..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3629.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: zimon9 -changes: - - {bugfix: fixed the orbit menu search function so that names work again} -delete-after: true diff --git a/html/changelogs/archive/2024-10.yml b/html/changelogs/archive/2024-10.yml index 2e75ce1afc4e..c09dbea576a2 100644 --- a/html/changelogs/archive/2024-10.yml +++ b/html/changelogs/archive/2024-10.yml @@ -333,3 +333,30 @@ - balance: Fireaxes on the black market now cost less. Thanks Kiirv-Waha! FalloutFalcon: - code_imp: better pr labeling for ships and ruins +2024-10-25: + Erikafox: + - bugfix: Newscasters can now read IDs through a wallet. + FalloutFalcon: + - refactor: refactored some mapping stuff including random spawners! + Gristlebee: + - rscadd: Vote sound changed to announce_dig.ogg + MemeSnorfer and Moffball: + - imageadd: Snouted balaclava sprites for both Sarathi and Elzuose + - code_imp: Elzuose snout type, for use with mask sprites + Sadhorizon: + - tweak: Medical stacks now work on corpses. + SomeguyManperson: + - balance: simple humans now have as much health as normal humans! This makes them + weaker! + - balance: simple humans now also benefit from their armor as much as normal humans! + This makes them stronger! + generalthrax: + - bugfix: Design disks work again + thgvr: + - balance: Removed Kepori damage modifiers. + - balance: Decreased Kepori move speed modifier. (They are still a bit faster than + average) + zimon9: + - bugfix: fixed the orbit menu search function so that names work again + - rscadd: Added plastitanium shards + - bugfix: fixed some artifacts in the plasma glass shard sprites From a171fa2f8bf4eb1fa7eb281609da4887a8eb4ef4 Mon Sep 17 00:00:00 2001 From: Mark Suckerberg Date: Fri, 25 Oct 2024 01:05:25 -0500 Subject: [PATCH 115/274] Qdel Log Hotfix (#3633) ## About The Pull Request #3558 accidentally ported the JSON log support for qdel logs, despite the fact we still use old normal logs. This moves us back to the version we support, and also adds support ## Why It's Good For The Game qdel logs are nice to have for gauging prevalence of harddels ## Changelog :cl: server: qdel logs work again /:cl: --- code/controllers/subsystem/garbage.dm | 50 ++++++++++++++------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 60372d39d95b..1bb1d185c84f 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -94,38 +94,37 @@ SUBSYSTEM_DEF(garbage) /datum/controller/subsystem/garbage/Shutdown() //Adds the del() log to the qdel log file - var/list/del_log = list() + var/list/dellog = list() //sort by how long it's wasted hard deleting sortTim(items, cmp=/proc/cmp_qdel_item_time, associative = TRUE) for(var/path in items) var/datum/qdel_item/I = items[path] - var/list/entry = list() - del_log[path] = entry - + dellog += "Path: [path]" if (I.qdel_flags & QDEL_ITEM_SUSPENDED_FOR_LAG) - entry["SUSPENDED FOR LAG"] = TRUE + dellog += "\tSUSPENDED FOR LAG" if (I.failures) - entry["Failures"] = I.failures - entry["qdel() Count"] = I.qdels - entry["Destroy() Cost (ms)"] = I.destroy_time - + dellog += "\tFailures: [I.failures]" + dellog += "\tqdel() Count: [I.qdels]" + dellog += "\tDestroy() Cost: [I.destroy_time]ms" if (I.hard_deletes) - entry["Total Hard Deletes"] = I.hard_deletes - entry["Time Spend Hard Deleting (ms)"] = I.hard_delete_time - entry["Highest Time Spend Hard Deleting (ms)"] = I.hard_delete_max + dellog += "\tTotal Hard Deletes: [I.hard_deletes]" + dellog += "\tTime Spent Hard Deleting: [I.hard_delete_time]ms" + dellog += "\tHighest Time Spent Hard Deleting: [I.hard_delete_max]ms" if (I.hard_deletes_over_threshold) - entry["Hard Deletes Over Threshold"] = I.hard_deletes_over_threshold + dellog += "\tHard Deletes Over Threshold: [I.hard_deletes_over_threshold]" if (I.slept_destroy) - entry["Total Sleeps"] = I.slept_destroy + dellog += "\tSleeps: [I.slept_destroy]" if (I.no_respect_force) - entry["Total Ignored Force"] = I.no_respect_force + dellog += "\tIgnored force: [I.no_respect_force] times" if (I.no_hint) - entry["Total No Hint"] = I.no_hint - if(LAZYLEN(I.extra_details)) - entry["Deleted Metadata"] = I.extra_details - - log_qdel("", del_log) + dellog += "\tNo hint: [I.no_hint] times" + if (LAZYLEN(I.extra_details)) + dellog += "\tDeleted Metadata:" + dellog += I.extra_details.Join("\n\t") + if (I.most_refs) + dellog += "\tMost Refs After qdel(): [I.most_refs]" + log_qdel(dellog.Join("\n")) /datum/controller/subsystem/garbage/fire() //the fact that this resets its processing each fire (rather then resume where it left off) is intentional. @@ -191,8 +190,10 @@ SUBSYSTEM_DEF(garbage) var/datum/D = L[GC_QUEUE_ITEM_REF] + var/remaining_refs = refcount(D) - REFS_WE_EXPECT + // If that's all we've got, send er off - if (refcount(D) == REFS_WE_EXPECT) + if (!remaining_refs) ++gcedlasttick ++totalgcs pass_counts[level]++ @@ -213,9 +214,8 @@ SUBSYSTEM_DEF(garbage) switch (level) if (GC_QUEUE_CHECK) #ifdef REFERENCE_TRACKING - // Decides how many refs to look for (potentially) + // Decides how many refs to look for (potentially) with remaining_refs // Based off the remaining and the ones we can account for - var/remaining_refs = refcount(D) - REFS_WE_EXPECT if(reference_find_on_fail[text_ref(D)]) INVOKE_ASYNC(D, TYPE_PROC_REF(/datum,find_references), remaining_refs) ref_searching = TRUE @@ -230,8 +230,9 @@ SUBSYSTEM_DEF(garbage) var/datum/qdel_item/I = items[type] var/message = "## TESTING: GC: -- [text_ref(D)] | [type] was unable to be GC'd --" - message = "[message] (ref count of [refcount(D)])" + message = "[message] (ref count of [remaining_refs])" log_world(message) + I.most_refs = max(I.most_refs, remaining_refs) var/detail = D.dump_harddel_info() if(detail) @@ -341,6 +342,7 @@ SUBSYSTEM_DEF(garbage) var/hard_delete_time = 0 //!Total amount of milliseconds spent hard deleting this type. var/hard_delete_max = 0 //!Highest time spent hard_deleting this in ms. var/hard_deletes_over_threshold = 0 //!Number of times hard deletes took longer than the configured threshold + var/most_refs = 0 //!The highest amount of refs its had after failing to qdel var/no_respect_force = 0 //!Number of times it's not respected force=TRUE var/no_hint = 0 //!Number of times it's not even bother to give a qdel hint var/slept_destroy = 0 //!Number of times it's slept in its destroy From 01721e38d641e10af9fe729a46bc3c986fdb91f7 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 25 Oct 2024 01:26:05 -0500 Subject: [PATCH 116/274] Automatic changelog generation for PR #3633 [ci skip] --- html/changelogs/AutoChangeLog-pr-3633.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3633.yml diff --git a/html/changelogs/AutoChangeLog-pr-3633.yml b/html/changelogs/AutoChangeLog-pr-3633.yml new file mode 100644 index 000000000000..927efb100651 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3633.yml @@ -0,0 +1,4 @@ +author: MarkSuckerberg +changes: + - {server: qdel logs work again} +delete-after: true From edabc4dd191071b5e5d0bf24c116e9c5effa56a2 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:18:11 -0500 Subject: [PATCH 117/274] Tweaks and improvments to SSblackbox logging (#3561) ## About The Pull Request updates a few of the logs to be more useful and ands a few new ones ## Why It's Good For The Game ## Changelog :cl: add: Faction statistics are now logged to the blackbox del: Removes some cruft, red and blue team radios, out date/useless database logging station trash cleaned /:cl: --------- Co-authored-by: Sun-Soaked <45698967+Sun-Soaked@users.noreply.github.com> --- code/__DEFINES/radio.dm | 10 +---- code/controllers/subsystem/blackbox.dm | 4 -- code/game/communications.dm | 12 ++---- code/game/machinery/autolathe.dm | 11 ++--- code/game/machinery/teambuilder.dm | 2 - code/game/objects/effects/decals/cleanable.dm | 7 +-- .../game/objects/items/devices/radio/radio.dm | 2 +- .../game/objects/items/stacks/sheets/glass.dm | 9 ++-- code/game/objects/items/trash.dm | 7 +-- code/game/say.dm | 6 +-- code/game/turfs/closed/minerals.dm | 3 +- code/modules/awaymissions/capture_the_flag.dm | 2 - code/modules/faction/faction_datum.dm | 43 +++++++++++++------ .../mining/equipment/kinetic_crusher.dm | 1 + .../modules/mob/dead/new_player/new_player.dm | 1 + .../mob/dead/new_player/ship_select.dm | 3 +- code/modules/mob/living/brain/brain_item.dm | 3 +- .../projectiles/ammunition/_ammo_casing.dm | 3 -- 18 files changed, 58 insertions(+), 71 deletions(-) diff --git a/code/__DEFINES/radio.dm b/code/__DEFINES/radio.dm index 96e7ab6e0578..f6686232993d 100644 --- a/code/__DEFINES/radio.dm +++ b/code/__DEFINES/radio.dm @@ -22,7 +22,6 @@ #define RADIO_KEY_CENTCOM "e" #define RADIO_TOKEN_CENTCOM ":e" -//WS Begin - SGR, Overmaps #define RADIO_CHANNEL_SOLGOV "SolGov" #define RADIO_KEY_SOLGOV "s" #define RADIO_TOKEN_SOLGOV ":s" @@ -48,18 +47,11 @@ #define RADIO_TOKEN_PIRATE ":y" #define RADIO_CHANNEL_WIDEBAND "Wideband" -//WS End - -#define RADIO_CHANNEL_CTF_RED "Red Team" -#define RADIO_CHANNEL_CTF_BLUE "Blue Team" - #define MIN_FREE_FREQ 1201 // ------------------------------------------------- // Frequencies are always odd numbers and range from 1201 to 1599. #define FREQ_SYNDICATE 1213 // Nuke op comms frequency, dark brown -#define FREQ_CTF_RED 1215 // CTF red team comms frequency, red -#define FREQ_CTF_BLUE 1217 // CTF blue team comms frequency, blue #define FREQ_CENTCOM 1337 // CentCom comms frequency, gray #define FREQ_SOLGOV 1345 // SolGov comms frequency, dark blue WS ADDITION #define FREQ_INTEQ 1347 // Inteq comms frequency, light brown @@ -91,7 +83,7 @@ #define MAX_FREQ 1489 // ------------------------------------------------------ -#define FREQ_WIDEBAND 1501 // Subspace/shuttle comms frequency, dark blue WS ADDITION +#define FREQ_WIDEBAND 1501 // sector wide communication #define MAX_FREE_FREQ 1599 // ------------------------------------------------- diff --git a/code/controllers/subsystem/blackbox.dm b/code/controllers/subsystem/blackbox.dm index 2ac0b06b74d6..ab325d49ebe7 100644 --- a/code/controllers/subsystem/blackbox.dm +++ b/code/controllers/subsystem/blackbox.dm @@ -150,10 +150,6 @@ SUBSYSTEM_DEF(blackbox) record_feedback("tally", "radio_usage", 1, "solgov") //WS Edit - SolGov Rep if(FREQ_AI_PRIVATE) record_feedback("tally", "radio_usage", 1, "ai private") - if(FREQ_CTF_RED) - record_feedback("tally", "radio_usage", 1, "CTF red team") - if(FREQ_CTF_BLUE) - record_feedback("tally", "radio_usage", 1, "CTF blue team") else record_feedback("tally", "radio_usage", 1, "other") diff --git a/code/game/communications.dm b/code/game/communications.dm index 94afdbf364f5..2ee368eaa891 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -94,8 +94,8 @@ GLOBAL_LIST_INIT(radiochannels, list( RADIO_CHANNEL_COMMON = FREQ_COMMON, RADIO_CHANNEL_COMMAND = FREQ_COMMAND, RADIO_CHANNEL_CENTCOM = FREQ_CENTCOM, - RADIO_CHANNEL_SOLGOV = FREQ_SOLGOV, //WS Edit - SolGov Rep - RADIO_CHANNEL_WIDEBAND = FREQ_WIDEBAND, //WS Edit - Overmap + RADIO_CHANNEL_SOLGOV = FREQ_SOLGOV, + RADIO_CHANNEL_WIDEBAND = FREQ_WIDEBAND, RADIO_CHANNEL_SYNDICATE = FREQ_SYNDICATE, RADIO_CHANNEL_NANOTRASEN = FREQ_NANOTRASEN, RADIO_CHANNEL_MINUTEMEN = FREQ_MINUTEMEN, @@ -103,16 +103,14 @@ GLOBAL_LIST_INIT(radiochannels, list( RADIO_CHANNEL_INTEQ = FREQ_INTEQ, RADIO_CHANNEL_PIRATE = FREQ_PIRATE, RADIO_CHANNEL_AI_PRIVATE = FREQ_AI_PRIVATE, - RADIO_CHANNEL_CTF_RED = FREQ_CTF_RED, - RADIO_CHANNEL_CTF_BLUE = FREQ_CTF_BLUE )) GLOBAL_LIST_INIT(reverseradiochannels, list( "[FREQ_COMMON]" = RADIO_CHANNEL_COMMON, "[FREQ_COMMAND]" = RADIO_CHANNEL_COMMAND, "[FREQ_CENTCOM]" = RADIO_CHANNEL_CENTCOM, - "[FREQ_SOLGOV]" = RADIO_CHANNEL_SOLGOV, //WS Edit - SolGov Rep - "[FREQ_WIDEBAND]" = RADIO_CHANNEL_WIDEBAND, //WS Edit - SolGov Rep + "[FREQ_SOLGOV]" = RADIO_CHANNEL_SOLGOV, + "[FREQ_WIDEBAND]" = RADIO_CHANNEL_WIDEBAND, "[FREQ_SYNDICATE]" = RADIO_CHANNEL_SYNDICATE, "[FREQ_NANOTRASEN]" = RADIO_CHANNEL_NANOTRASEN, "[FREQ_MINUTEMEN]" = RADIO_CHANNEL_MINUTEMEN, @@ -120,8 +118,6 @@ GLOBAL_LIST_INIT(reverseradiochannels, list( "[FREQ_INTEQ]" = RADIO_CHANNEL_INTEQ, "[FREQ_PIRATE]" = RADIO_CHANNEL_PIRATE, "[FREQ_AI_PRIVATE]" = RADIO_CHANNEL_AI_PRIVATE, - "[FREQ_CTF_RED]" = RADIO_CHANNEL_CTF_RED, - "[FREQ_CTF_BLUE]" = RADIO_CHANNEL_CTF_BLUE )) /datum/radio_frequency diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index e63b3f75fb2b..452cd39b5d58 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -339,14 +339,15 @@ materials.use_materials(materials_used) if(is_stack) - var/obj/item/stack/N = new being_built.build_path(A, multiplier, FALSE) - N.update_appearance() - N.autolathe_crafted(src) + var/obj/item/stack/new_item = new being_built.build_path(A, multiplier, FALSE) + new_item.update_appearance() + new_item.autolathe_crafted(src) + SSblackbox.record_feedback("nested tally", "item_printed", 1, list("[type]", "[new_item.type]")) else for(var/i=1, i<=multiplier, i++) var/obj/item/new_item = new being_built.build_path(A) new_item.autolathe_crafted(src) - + SSblackbox.record_feedback("nested tally", "item_printed", 1, list("[type]", "[new_item.type]")) if(length(picked_materials)) new_item.set_custom_materials(picked_materials, 1 / multiplier) //Ensure we get the non multiplied amount for(var/x in picked_materials) @@ -446,5 +447,5 @@ //Called when the object is constructed by an autolathe //Has a reference to the autolathe so you can do !!FUN!! things with hacked lathes -/obj/item/proc/autolathe_crafted(obj/machinery/autolathe/A) +/obj/item/proc/autolathe_crafted(obj/machinery/autolathe/lathe) return diff --git a/code/game/machinery/teambuilder.dm b/code/game/machinery/teambuilder.dm index 153035a39374..402ea5aa5c6b 100644 --- a/code/game/machinery/teambuilder.dm +++ b/code/game/machinery/teambuilder.dm @@ -43,11 +43,9 @@ desc = "A machine that, when passed, colors you based on the color of your team. Go red team!" color = "#ff0000" team_color = "#ff0000" - team_radio = FREQ_CTF_RED /obj/machinery/teambuilder/blue name = "Teambuilding Machine (Blue)" desc = "A machine that, when passed, colors you based on the color of your team. Go blue team!" color = "#0000ff" team_color = "#0000ff" - team_radio = FREQ_CTF_BLUE diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index 3ec6f58aa7b1..0be76dd1fac6 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -32,11 +32,8 @@ AddElement(/datum/element/connect_loc, loc_connections) AddElement(/datum/element/beauty, beauty) - SSblackbox.record_feedback("tally", "station_mess_created", 1, name) - -/obj/effect/decal/cleanable/Destroy() - SSblackbox.record_feedback("tally", "station_mess_destroyed", 1, name) - return ..() + if(!mapload) + SSblackbox.record_feedback("tally", "station_mess_created", 1, name) /obj/effect/decal/cleanable/proc/replace_decal(obj/effect/decal/cleanable/C) // Returns true if we should give up in favor of the pre-existing decal if(mergeable_decal) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index cc528f103fe2..1caf2861a448 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -254,7 +254,7 @@ var/datum/signal/subspace/vocal/signal = new(src, freq, speaker, language, message, spans, message_mods) // Independent radios, on the CentCom frequency, reach all independent radios - if (independent && (freq == FREQ_CENTCOM || freq == FREQ_WIDEBAND || freq == FREQ_CTF_RED || freq == FREQ_CTF_BLUE)) //WS Edit - SolGov Rep + if (independent && (freq == FREQ_CENTCOM || freq == FREQ_WIDEBAND)) //WS Edit - SolGov Rep signal.data["compression"] = 0 signal.transmission_method = TRANSMISSION_SUPERSPACE signal.map_zones = list(0) // reaches all Z-levels diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 40de06d6f9cb..666e927eaf3e 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -282,7 +282,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( var/obj/item/stack/sheet/weld_material = /obj/item/stack/sheet/glass embedding = list("embed_chance" = 65) -/obj/item/shard/Initialize() +/obj/item/shard/Initialize(mapload) . = ..() AddComponent(/datum/component/caltrop, force) AddComponent(/datum/component/butchering, 150, 65) @@ -300,17 +300,14 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( if (icon_prefix) icon_state = "[icon_prefix][icon_state]" - SSblackbox.record_feedback("tally", "station_mess_created", 1, name) + if(!mapload) + SSblackbox.record_feedback("tally", "station_mess_created", 1, name) var/static/list/loc_connections = list( COMSIG_ATOM_ENTERED = PROC_REF(on_entered), ) AddElement(/datum/element/connect_loc, loc_connections) -/obj/item/shard/Destroy() - . = ..() - SSblackbox.record_feedback("tally", "station_mess_destroyed", 1, name) - /obj/item/shard/afterattack(atom/A as mob|obj, mob/user, proximity) . = ..() if(!proximity || !(src in user)) diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index bdcb89796bc4..cc67c6795783 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -8,11 +8,8 @@ resistance_flags = FLAMMABLE /obj/item/trash/Initialize(mapload) - SSblackbox.record_feedback("tally", "station_mess_created", 1, name) - return ..() - -/obj/item/trash/Destroy() - SSblackbox.record_feedback("tally", "station_mess_destroyed", 1, name) + if(!mapload) + SSblackbox.record_feedback("tally", "station_mess_created", 1, name) return ..() /obj/item/trash/raisins diff --git a/code/game/say.dm b/code/game/say.dm index cac8bafe5365..c92b984dbb77 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -13,10 +13,8 @@ GLOBAL_LIST_INIT(freqtospan, list( "[FREQ_AI_PRIVATE]" = "aiprivradio", "[FREQ_SYNDICATE]" = "syndradio", "[FREQ_CENTCOM]" = "centcomradio", - "[FREQ_SOLGOV]" = "solgovradio", //WS Edit - SolGov Rep - "[FREQ_WIDEBAND]" = "widebandradio", //WS Edit - Overmaps - "[FREQ_CTF_RED]" = "redteamradio", - "[FREQ_CTF_BLUE]" = "blueteamradio" + "[FREQ_SOLGOV]" = "solgovradio", + "[FREQ_WIDEBAND]" = "widebandradio", )) GLOBAL_LIST_INIT(freqcolor, list()) diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm index d3d2cc076ef2..7b8d68b7b2f9 100644 --- a/code/game/turfs/closed/minerals.dm +++ b/code/game/turfs/closed/minerals.dm @@ -113,7 +113,8 @@ visible_message(span_warning("The ore was completely ruined!")) else new mineralType(src, mineralAmt) - SSblackbox.record_feedback("tally", "ore_mined", mineralAmt, mineralType) + if(ishuman(user)) + SSblackbox.record_feedback("tally", "ore_mined", mineralAmt, mineralType) if(ishuman(user)) var/mob/living/carbon/human/H = user if(give_exp) diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index cde1ad6a4de1..037ae0add3e6 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -590,7 +590,6 @@ /datum/outfit/ctf/red/post_equip(mob/living/carbon/human/H) ..() var/obj/item/radio/R = H.ears - R.set_frequency(FREQ_CTF_RED) R.freqlock = TRUE R.independent = TRUE H.dna.species.stunmod = 0 @@ -598,7 +597,6 @@ /datum/outfit/ctf/blue/post_equip(mob/living/carbon/human/H) ..() var/obj/item/radio/R = H.ears - R.set_frequency(FREQ_CTF_BLUE) R.freqlock = TRUE R.independent = TRUE H.dna.species.stunmod = 0 diff --git a/code/modules/faction/faction_datum.dm b/code/modules/faction/faction_datum.dm index 450ee9688953..017c324f5011 100644 --- a/code/modules/faction/faction_datum.dm +++ b/code/modules/faction/faction_datum.dm @@ -1,62 +1,77 @@ /datum/faction var/name + /// Primarly to be used for backend stuff. + var/short_name var/parent_faction + /// List of prefixes that ships of this faction uses var/list/prefixes +/datum/faction/New() + if(!short_name) + short_name = name + /datum/faction/syndicate name = FACTION_SYNDICATE parent_faction = /datum/faction/syndicate - prefixes = list("SEV", "SSV") + prefixes = PREFIX_SYNDICATE /datum/faction/syndicate/ngr name = FACTION_NGR - prefixes = list("NGRV") + short_name = "NGR" + prefixes = PREFIX_NGR /datum/faction/syndicate/cybersun name = FACTION_CYBERSUN - prefixes = list("CSSV") + prefixes = PREFIX_CYBERSUN /datum/faction/syndicate/suns name = FACTION_SUNS - prefixes = list("SUNS") + short_name = "SUNS" + prefixes = PREFIX_SUNS /datum/faction/solgov name = FACTION_SOLGOV - prefixes = list("SCSV") + prefixes = PREFIX_SOLGOV /datum/faction/srm name = FACTION_SRM - prefixes = list("SRSV") + short_name = "SRM" + prefixes = PREFIX_SRM /datum/faction/inteq name = FACTION_INTEQ - prefixes = list("IRMV") + short_name = "INTEQ" + prefixes = PREFIX_INTEQ /datum/faction/clip name = FACTION_CLIP - prefixes = list("CMSV", "CMGSV") + short_name = "CLIP" + prefixes = PREFIX_CLIP /datum/faction/nt name = FACTION_NT + short_name = "NT" parent_faction = /datum/faction/nt - prefixes = list("NTSV") + prefixes = PREFIX_NT /datum/faction/nt/ns_logi name = FACTION_NS_LOGI - prefixes = list("NSSV") + prefixes = PREFIX_NS_LOGI /datum/faction/nt/vigilitas name = FACTION_VIGILITAS - prefixes = list("VISV") + prefixes = PREFIX_VIGILITAS /datum/faction/frontier name = FACTION_FRONTIER - prefixes = list("FFV") + prefixes = PREFIX_FRONTIER /datum/faction/pgf name = FACTION_PGF - prefixes = list("PGF", "PGFMC", "PGFN") + short_name = "PGF" + prefixes = PREFIX_PGF /datum/faction/independent name = FACTION_INDEPENDENT - prefixes = list("SV", "IMV", "ISV") + short_name = "Indie" + prefixes = PREFIX_INDEPENDENT diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index 05e81421ac4f..d110fe901082 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -138,6 +138,7 @@ L.apply_status_effect(STATUS_EFFECT_CRUSHERMARK, hammer_synced) var/target_turf = get_turf(target) if(ismineralturf(target_turf)) + SSblackbox.record_feedback("tally", "pick_used_mining", 1, src.type) var/turf/closed/mineral/M = target_turf new /obj/effect/temp_visual/kinetic_blast(M) ..() diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 2dbbd9d4b65b..3ff72083450a 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -345,6 +345,7 @@ log_manifest(character.mind.key, character.mind, character, TRUE) + SSblackbox.record_feedback("tally", "player_joined_faction", 1, ship.get_faction()) if(length(ship.job_slots) > 1 && ship.job_slots[1] == job) // if it's the "captain" equivalent job of the ship. checks to make sure it's not a one-job ship minor_announce("[job.name] [character.real_name] on deck!", zlevel = ship.shuttle_port.virtual_z()) return TRUE diff --git a/code/modules/mob/dead/new_player/ship_select.dm b/code/modules/mob/dead/new_player/ship_select.dm index e130f6e404ce..dd60c13ce2cd 100644 --- a/code/modules/mob/dead/new_player/ship_select.dm +++ b/code/modules/mob/dead/new_player/ship_select.dm @@ -100,7 +100,8 @@ to_chat(spawnee, "There was an error loading the ship. Please contact admins!") spawnee.new_player_panel() return - SSblackbox.record_feedback("tally", "ship_purchased", 1, template.name) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("tally", "ship_purchased", 1, template.name) + SSblackbox.record_feedback("tally", "faction_ship_purchased", 1, template.faction_datum.name) // Try to spawn as the first listed job in the job slots (usually captain) // Playtime checks are overridden, to ensure the player gets to join the ship they spawned. if(!spawnee.AttemptLateSpawn(target.job_slots[1], target, FALSE)) diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 8629d01650d4..5fe96021461b 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -381,7 +381,8 @@ if(resilience) actual_trauma.resilience = resilience . = actual_trauma - SSblackbox.record_feedback("tally", "traumas", 1, actual_trauma.type) + if(owner?.client) + SSblackbox.record_feedback("tally", "traumas", 1, actual_trauma.type) //Add a random trauma of a certain subtype /obj/item/organ/brain/proc/gain_trauma_type(brain_trauma_type = /datum/brain_trauma, resilience, natural_gain = FALSE) diff --git a/code/modules/projectiles/ammunition/_ammo_casing.dm b/code/modules/projectiles/ammunition/_ammo_casing.dm index 580410f6683f..1c259d622931 100644 --- a/code/modules/projectiles/ammunition/_ammo_casing.dm +++ b/code/modules/projectiles/ammunition/_ammo_casing.dm @@ -171,11 +171,8 @@ /obj/item/ammo_casing/Destroy() . = ..() - if(BB) QDEL_NULL(BB) - else - SSblackbox.record_feedback("tally", "station_mess_destroyed", 1, name) /obj/item/ammo_casing/update_icon_state() icon_state = "[initial(icon_state)][BB ? (bullet_skin ? "-[bullet_skin]" : "") : "-empty"]" From 05242e0f62e4bbe4530b2c08b7c9e520d7a32773 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 25 Oct 2024 08:29:02 -0500 Subject: [PATCH 118/274] Automatic changelog generation for PR #3561 [ci skip] --- html/changelogs/AutoChangeLog-pr-3561.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3561.yml diff --git a/html/changelogs/AutoChangeLog-pr-3561.yml b/html/changelogs/AutoChangeLog-pr-3561.yml new file mode 100644 index 000000000000..d12adfca6b82 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3561.yml @@ -0,0 +1,6 @@ +author: FalloutFalcon +changes: + - {rscadd: Faction statistics are now logged to the blackbox} + - {rscdel: 'Removes some cruft, red and blue team radios, out date/useless database + logging station trash cleaned'} +delete-after: true From c38a3d26fc873d5eb21d0a660e8f04d353d891e9 Mon Sep 17 00:00:00 2001 From: Mark Suckerberg Date: Fri, 25 Oct 2024 09:54:40 -0500 Subject: [PATCH 119/274] Opendream-detected Errors, More Harddels, Slight CI Improvements (#3572) ## About The Pull Request I didn't get them all in my last PR, apparently. Also throws in some minor tweaks for ambiguity and such detected by the OpenDream parser since I was messing around with that at the time. Also adds OpenDream linting to CI because why not. Ports: tgstation/tgstation#81892 (which is in turn from Para and Goon) tgstation/tgstation#82029 beestation/beestation-hornet#11464 tgstation/tgstation#86510 tgstation/tgstation#83255 tgstation/tgstation#78225 tgstation/tgstation#78265 Fixes: #3530 ## Why It's Good For The Game Harddels still bad, OpenDream good --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: san7890 Co-authored-by: PowerfulBacon <26465327+PowerfulBacon@users.noreply.github.com> Co-authored-by: Jordan Dominion Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Co-authored-by: distributivgesetz Co-authored-by: Aleksej Komarov --- .github/workflows/autowiki.yml | 2 +- .github/workflows/ci_suite.yml | 140 ++++++++++++------ .github/workflows/codeowner_reviews.yml | 1 + .github/workflows/rerun_flaky_tests.yml | 34 ++--- .github/workflows/run_integration_tests.yml | 2 + .github/workflows/tgs_test.yml | 9 +- .gitignore | 1 + __odlint.dm | 10 ++ check_regex.yaml | 2 +- code/__DEFINES/misc.dm | 4 + code/__HELPERS/_logging.dm | 12 +- code/__HELPERS/type2type.dm | 8 +- code/_compile_options.dm | 15 +- code/controllers/subsystem/acid.dm | 3 +- code/datums/components/_component.dm | 18 +-- code/datums/components/food/edible.dm | 6 +- code/datums/components/radioactive.dm | 1 - code/game/machinery/computer/medical.dm | 6 - code/game/machinery/computer/security.dm | 1 - code/game/objects/items/crayons.dm | 4 +- code/game/objects/items/devices/PDA/PDA.dm | 2 +- code/game/objects/items/devices/mines.dm | 2 +- code/game/objects/items/pet_carrier.dm | 6 +- code/game/objects/items/storage/guncases.dm | 2 + code/game/objects/obj_defense.dm | 7 +- .../crates_lockers/closets/utility_closets.dm | 2 +- code/game/objects/structures/crateshelf.dm | 1 + code/modules/admin/permissionedit.dm | 2 +- .../admin/view_variables/debug_variables.dm | 17 ++- code/modules/client/loadout/_loadout.dm | 6 +- .../client/loadout/loadout_accessories.dm | 3 + code/modules/client/loadout/loadout_hat.dm | 3 + code/modules/client/loadout/loadout_suit.dm | 3 + code/modules/client/preferences.dm | 2 +- code/modules/clothing/head/jobs.dm | 2 +- code/modules/clothing/head/misc.dm | 2 +- code/modules/clothing/suits/cloaks.dm | 1 - code/modules/clothing/under/accessories.dm | 5 +- code/modules/food_and_drinks/drinks/drinks.dm | 1 + .../modules/mob/dead/new_player/new_player.dm | 2 +- .../living/simple_animal/hostile/hostile.dm | 2 +- code/modules/mob/mob.dm | 2 - code/modules/mob/mob_helpers.dm | 4 +- code/modules/projectiles/gun.dm | 2 +- .../projectiles/guns/ballistic/assault.dm | 9 +- .../projectiles/guns/ballistic/revolver.dm | 2 + .../projectiles/guns/ballistic/shotgun.dm | 6 +- code/modules/projectiles/guns/energy.dm | 1 + code/modules/projectiles/guns/energy/laser.dm | 2 - .../manufacturer/scarborough/ballistics.dm | 2 +- .../chemistry/reagents/drink_reagents.dm | 2 +- .../chemistry/reagents/food_reagents.dm | 2 +- code/modules/surgery/bodyparts/bodyparts.dm | 2 +- code/modules/unit_tests/_unit_tests.dm | 4 +- code/modules/unit_tests/create_and_destroy.dm | 10 +- code/modules/unit_tests/icons/inhands.dm | 6 +- code/modules/unit_tests/icons/worn_icons.dm | 31 ++-- code/modules/unit_tests/outfit_sanity.dm | 4 +- icons/mob/inhands/weapons/guns_lefthand.dmi | Bin 42172 -> 39557 bytes .../mob/inhands/weapons/swords_righthand.dmi | Bin 31326 -> 31324 bytes shiptest.dme | 1 + tgui/public/tgui.html | 8 +- tools/ci/annotate_dm.sh | 4 + tools/ci/annotate_od.sh | 4 + tools/ci/od_lints.dm | 58 ++++++++ tools/dm_annotator/__main__.py | 59 ++++++++ tools/od_annotator/__main__.py | 50 +++++++ tools/requirements.txt | 6 +- tools/tgs_test/Program.cs | 4 +- 69 files changed, 454 insertions(+), 183 deletions(-) create mode 100644 __odlint.dm create mode 100755 tools/ci/annotate_dm.sh create mode 100644 tools/ci/annotate_od.sh create mode 100644 tools/ci/od_lints.dm create mode 100644 tools/dm_annotator/__main__.py create mode 100644 tools/od_annotator/__main__.py diff --git a/.github/workflows/autowiki.yml b/.github/workflows/autowiki.yml index c6f85bade91d..10d3cea1e676 100644 --- a/.github/workflows/autowiki.yml +++ b/.github/workflows/autowiki.yml @@ -43,7 +43,7 @@ jobs: sudo apt update || true sudo apt install -o APT::Immediate-configure=false libssl-dev:i386 bash tools/ci/install_rust_g.sh - + - name: Cache dependencies if: steps.secrets_set.outputs.SECRETS_ENABLED uses: actions/cache@v3 diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml index 915b6021e98c..33af3581a22b 100644 --- a/.github/workflows/ci_suite.yml +++ b/.github/workflows/ci_suite.yml @@ -3,17 +3,34 @@ on: push: branches: - master + - "project/**" pull_request: branches: - master + - "project/**" merge_group: branches: - master + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: + start_gate: + if: ( !contains(github.event.head_commit.message, '[ci skip]') ) + name: Start Gate + runs-on: ubuntu-latest + steps: + - name: Mandatory Empty Step + run: exit 0 + run_linters: - if: ${{ ! contains(github.event.head_commit.message, '[ci skip]') }} name: Run Linters + needs: start_gate runs-on: ubuntu-22.04 + timeout-minutes: 5 + steps: - uses: actions/checkout@v3 with: @@ -53,40 +70,62 @@ jobs: run: | pip3 install setuptools bash tools/ci/install_node.sh - bash tools/ci/install_spaceman_dmm.sh dreamchecker cargo install ripgrep --features pcre2 tools/bootstrap/python -c '' - - name: Run Linters + - name: Give Linters A Go + id: linter-setup + run: exit 0 + - name: Run Grep Checks + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: bash tools/ci/check_grep.sh + - name: Run DreamChecker + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: ~/dreamchecker 2>&1 | bash tools/ci/annotate_dm.sh + - name: Run Map Checks + if: steps.linter-setup.conclusion == 'success' && !cancelled() run: | - tools/bootstrap/python -m tools.maplint.source --github - tools/build/build --ci lint tgui-test - bash tools/ci/check_filedirs.sh shiptest.dme - bash tools/ci/check_changelogs.sh - bash tools/ci/check_misc.sh - bash tools/ci/check_grep.sh - tools/bootstrap/python -m dmi.test tools/bootstrap/python -m mapmerge2.dmm_test - ~/dreamchecker > ${GITHUB_WORKSPACE}/output-annotations.txt 2>&1 - - - name: Annotate Lints - if: always() - uses: yogstation13/DreamAnnotate@v2 - with: - outputFile: output-annotations.txt - - - name: Run Check Regex + tools/bootstrap/python -m tools.maplint.source + - name: Run DMI Tests + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: tools/bootstrap/python -m dmi.test + - name: Check File Directories + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: bash tools/ci/check_filedirs.sh shiptest.dme + - name: Check Changelogs + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: bash tools/ci/check_changelogs.sh + - name: Check Miscellaneous Files + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: bash tools/ci/check_misc.sh + - name: Run TGUI Checks + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: tools/build/build --ci lint tgui-test + - name: Run Regex Checks + if: steps.linter-setup.conclusion == 'success' && !cancelled() run: | tools/bootstrap/python -m ci.check_regex --log-changes-only --github-actions + cat check_regex_output.txt + + - name: Install OpenDream + uses: robinraju/release-downloader@v1.9 + with: + repository: "OpenDreamProject/OpenDream" + tag: "latest" + fileName: "DMCompiler_linux-x64.tar.gz" + extract: true - - name: Annotate Regex Matches + - name: Run OpenDream Linter run: | - cat check_regex_output.txt + ./DMCompiler_linux-x64/DMCompiler shiptest.dme --suppress-unimplemented --define=CIBUILDING | bash tools/ci/annotate_od.sh compile_all_maps: - if: ${{ ! contains(github.event.head_commit.message, '[ci skip]') }} name: Compile Maps + needs: start_gate runs-on: ubuntu-latest + timeout-minutes: 5 + steps: - uses: actions/checkout@v3 @@ -106,39 +145,41 @@ jobs: tools/build/build --ci dm -DCIBUILDING -DCITESTING -DALL_MAPS -DFULL_INIT run_all_tests: - if: ${{ ! contains(github.event.head_commit.message, '[ci skip]') }} name: Integration Tests + needs: start_gate strategy: fail-fast: false matrix: - arg: [ - "BASIC_TESTS", - "CREATE_AND_DESTROY_TEST", - "PLANET_GEN_TEST", - "RUIN_PLACEMENT_TEST", - "SHIP_PLACEMENT_TEST" - ] + arg: + [ + "BASIC_TESTS", + "CREATE_AND_DESTROY_TEST", + "PLANET_GEN_TEST", + "RUIN_PLACEMENT_TEST", + "SHIP_PLACEMENT_TEST", + ] uses: ./.github/workflows/run_integration_tests.yml with: arg: ${{ matrix.arg }} -# run_alternate_tests: -# if: "!contains(github.event.head_commit.message, '[ci skip]')" -# name: Alternate Tests -# strategy: -# fail-fast: false -# matrix: -# major: [515] -# minor: [1614] -# uses: ./.github/workflows/run_integration_tests.yml -# with: -# major: ${{ matrix.major }} -# minor: ${{ matrix.minor }} + # run_alternate_tests: + # if: "!contains(github.event.head_commit.message, '[ci skip]')" + # name: Alternate Tests + # strategy: + # fail-fast: false + # matrix: + # major: [515] + # minor: [1614] + # uses: ./.github/workflows/run_integration_tests.yml + # with: + # major: ${{ matrix.major }} + # minor: ${{ matrix.minor }} test_windows: - if: ${{ ! contains(github.event.head_commit.message, '[ci skip]') }} name: Windows Build + needs: start_gate runs-on: windows-latest + timeout-minutes: 5 steps: - uses: actions/checkout@v3 @@ -163,7 +204,18 @@ jobs: bash tools/deploy.sh ./deploy - name: Deploy artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: deploy path: deploy + + completion_gate: # Serves as a non-moving target for branch rulesets + if: always() && !cancelled() + name: Completion Gate + needs: [test_windows, compile_all_maps, run_linters, run_all_tests] + runs-on: ubuntu-latest + steps: + - name: Decide whether the needed jobs succeeded or failed + uses: re-actors/alls-green@release/v1 + with: + jobs: ${{ toJSON(needs) }} diff --git a/.github/workflows/codeowner_reviews.yml b/.github/workflows/codeowner_reviews.yml index 753f575f90d7..6799c5d14b37 100644 --- a/.github/workflows/codeowner_reviews.yml +++ b/.github/workflows/codeowner_reviews.yml @@ -6,6 +6,7 @@ on: pull_request_target jobs: assign-users: runs-on: ubuntu-latest + timeout-minutes: 5 steps: # Checks-out your repository under $GITHUB_WORKSPACE, so the job can access it diff --git a/.github/workflows/rerun_flaky_tests.yml b/.github/workflows/rerun_flaky_tests.yml index e3cbda05749b..b705735a0dfb 100644 --- a/.github/workflows/rerun_flaky_tests.yml +++ b/.github/workflows/rerun_flaky_tests.yml @@ -3,7 +3,7 @@ on: workflow_run: workflows: [Checks] types: - - completed + - completed permissions: actions: write @@ -15,23 +15,23 @@ jobs: runs-on: ubuntu-latest if: ${{ github.event.workflow_run.conclusion == 'failure' && github.event.workflow_run.run_attempt == 1 }} steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Rerun flaky tests - uses: actions/github-script@v6 - with: - script: | - const { rerunFlakyTests } = await import('${{ github.workspace }}/tools/pull_request_hooks/rerunFlakyTests.js') - await rerunFlakyTests({ github, context }) + - name: Checkout + uses: actions/checkout@v3 + - name: Rerun flaky tests + uses: actions/github-script@v6 + with: + script: | + const { rerunFlakyTests } = await import('${{ github.workspace }}/tools/pull_request_hooks/rerunFlakyTests.js') + await rerunFlakyTests({ github, context }) report_flaky_tests: runs-on: ubuntu-latest if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.run_attempt == 2 }} steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Report flaky tests - uses: actions/github-script@v6 - with: - script: | - const { reportFlakyTests } = await import('${{ github.workspace }}/tools/pull_request_hooks/rerunFlakyTests.js') - await reportFlakyTests({ github, context }) + - name: Checkout + uses: actions/checkout@v3 + - name: Report flaky tests + uses: actions/github-script@v6 + with: + script: | + const { reportFlakyTests } = await import('${{ github.workspace }}/tools/pull_request_hooks/rerunFlakyTests.js') + await reportFlakyTests({ github, context }) diff --git a/.github/workflows/run_integration_tests.yml b/.github/workflows/run_integration_tests.yml index 9c83d6ab013d..699151fe6f99 100644 --- a/.github/workflows/run_integration_tests.yml +++ b/.github/workflows/run_integration_tests.yml @@ -14,9 +14,11 @@ on: required: false default: ALL_TESTS type: string + jobs: run_integration_tests: runs-on: ubuntu-latest + timeout-minutes: 15 services: mysql: image: mysql:latest diff --git a/.github/workflows/tgs_test.yml b/.github/workflows/tgs_test.yml index a92b6cac76a3..4b7853aa77cf 100644 --- a/.github/workflows/tgs_test.yml +++ b/.github/workflows/tgs_test.yml @@ -3,7 +3,9 @@ on: push: branches: - master + - 'project/**' - 'gh-readonly-queue/master/**' + - 'gh-readonly-queue/project/**' paths: - '.tgs.yml' - '.github/workflows/tgs_test.yml' @@ -12,11 +14,13 @@ on: - 'code/__DEFINES/tgs.dm' - 'code/game/world.dm' - 'code/modules/tgs/**' + - 'tools/bootstrap/**' - 'tools/tgs_scripts/**' - 'tools/tgs_test/**' pull_request: branches: - master + - 'project/**' paths: - '.tgs.yml' - '.github/workflows/tgs_test.yml' @@ -25,6 +29,7 @@ on: - 'code/__DEFINES/tgs.dm' - 'code/game/world.dm' - 'code/modules/tgs/**' + - 'tools/bootstrap/**' - 'tools/tgs_scripts/**' - 'tools/tgs_test/**' merge_group: @@ -54,12 +59,12 @@ jobs: - 5000:5000 #Can't use env here for some reason steps: - name: Setup dotnet - uses: actions/setup-dotnet@v2 + uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.x - name: Checkout Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Test TGS Integration run: dotnet run -c Release --project tools/tgs_test ${{ github.repository }} /tgs_instances/tgstation ${{ env.TGS_API_PORT }} ${{ github.event.pull_request.head.sha || github.sha }} ${{ secrets.GITHUB_TOKEN }} ${{ env.PR_NUMBER }} diff --git a/.gitignore b/.gitignore index 94713bc82e1c..196353141536 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ *.lk *.int *.backup +/shiptest.json ### https://raw.github.com/github/gitignore/cc542de017c606138a87ee4880e5f06b3a306def/Global/Linux.gitignore *~ diff --git a/__odlint.dm b/__odlint.dm new file mode 100644 index 000000000000..b7c120514a1d --- /dev/null +++ b/__odlint.dm @@ -0,0 +1,10 @@ +// This file is included right at the start of the DME. +// Its purpose is to enable multiple lints (pragmas) that are supported by OpenDream to better validate the codebase +// These are essentially nitpicks the DM compiler should pick up on but doesnt + +#if !defined(SPACEMAN_DMM) && defined(OPENDREAM) +// This is in a separate file as a hack to avoid SpacemanDMM +// evaluating the #pragma lines, even if its outside a block it cares about +// (Also so people can code-own it. Shoutout to AA) +#include "tools/ci/od_lints.dm" +#endif diff --git a/check_regex.yaml b/check_regex.yaml index a9ed6b699d7f..95d3738da5dc 100644 --- a/check_regex.yaml +++ b/check_regex.yaml @@ -57,7 +57,7 @@ standards: - no_more: [ - 34, + 32, "indentions inside defines", '^(\s*)#define (\w*)( {2,}| ?\t+)(?!(\/\/|\/\*))', ] diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 68ef8b65b127..384b7fcc46c7 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -447,3 +447,7 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #define ROUND_END_NOT_DELAYED 0 #define ROUND_END_DELAYED 1 #define ROUND_END_TGS 2 + +/// A null statement to guard against EmptyBlock lint without necessitating the use of pass() +/// Used to avoid proc-call overhead. But use sparingly. Probably pointless in most places. +#define EMPTY_BLOCK_GUARD ; diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index 1ab889987695..16de5230a2bb 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -10,14 +10,22 @@ #define WRITE_LOG(log, text) rustg_log_write(log, text, "true") #define WRITE_LOG_NO_FORMAT(log, text) rustg_log_write(log, text, "false") -//print a warning message to world.log +#ifdef UNIT_TESTS +#define WARNING(MSG) log_world("::warning file=[__FILE__],line=[__LINE__]::[MSG] src: [UNLINT(src)] usr: [usr].") +#else #define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [UNLINT(src)] usr: [usr].") +#endif +/// Print a warning message to world.log /proc/warning(msg) msg = "## WARNING: [msg]" log_world(msg) -//not an error or a warning, but worth to mention on the world log, just in case. +#ifdef UNIT_TESTS +#define NOTICE(MSG) log_world("::notice file=[__FILE__],line=[__LINE__]::[MSG] src: [UNLINT(src)] usr: [usr].") +#else #define NOTICE(MSG) notice(MSG) +#endif +///not an error or a warning, but worth to mention on the world log, just in case. /proc/notice(msg) msg = "## NOTICE: [msg]" log_world(msg) diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 452a522870a0..3770b4e847ad 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -94,8 +94,8 @@ return "northwest" if(SOUTHWEST) return "southwest" - else - return + + return NONE //Turns text into proper directions /proc/text2dir(direction) @@ -116,8 +116,8 @@ return SOUTHEAST if("SOUTHWEST") return SOUTHWEST - else - return + + return NONE //Converts an angle (degrees) into an ss13 direction GLOBAL_LIST_INIT(modulo_angle_to_dir, list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH,SOUTHWEST,WEST,NORTHWEST)) diff --git a/code/_compile_options.dm b/code/_compile_options.dm index ee7638ea853d..9ff2cbe896ae 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -63,7 +63,7 @@ #warn compiling in TESTING mode. testing() debug messages will be visible. #endif -#ifdef CIBUILDING +#if defined(CIBUILDING) && !defined(OPENDREAM) #define UNIT_TESTS #endif @@ -90,3 +90,16 @@ // A reasonable number of maximum overlays an object needs // If you think you need more, rethink it #define MAX_ATOM_OVERLAYS 100 + +#if defined(OPENDREAM) + #if !defined(CIBUILDING) + #warn You are building with OpenDream. Remember to build TGUI manually. + #warn You can do this by running tgui-build.cmd from the bin directory. + #endif +#else + #if !defined(CBT) && !defined(SPACEMAN_DMM) + #warn Building with Dream Maker is no longer supported and will result in errors. + #warn In order to build, run BUILD.cmd in the root directory. + #warn Consider switching to VSCode editor instead, where you can press Ctrl+Shift+B to build. + #endif +#endif diff --git a/code/controllers/subsystem/acid.dm b/code/controllers/subsystem/acid.dm index 0ea8967e263c..efbc5e7d260e 100644 --- a/code/controllers/subsystem/acid.dm +++ b/code/controllers/subsystem/acid.dm @@ -33,8 +33,7 @@ SUBSYSTEM_DEF(acid) return continue - if(O.acid_level && O.acid_processing()) - else + if(!O.acid_level || !O.acid_processing()) O.update_appearance() processing -= O diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index 6c15d00869f2..695b6519f9c7 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -364,17 +364,17 @@ */ /datum/proc/GetExactComponent(datum/component/c_type) RETURN_TYPE(c_type) - if(initial(c_type.dupe_mode) == COMPONENT_DUPE_ALLOWED || initial(c_type.dupe_mode) == COMPONENT_DUPE_SELECTIVE) + var/initial_type_mode = initial(c_type.dupe_mode) + if(initial_type_mode == COMPONENT_DUPE_ALLOWED || initial_type_mode == COMPONENT_DUPE_SELECTIVE) stack_trace("GetComponent was called to get a component of which multiple copies could be on an object. This can easily break and should be changed. Type: \[[c_type]\]") - var/list/dc = datum_components - if(!dc) + var/list/all_components = datum_components + if(!all_components) return null - var/datum/component/C = dc[c_type] - if(C) - if(length(C)) - C = C[1] - if(C.type == c_type) - return C + var/datum/component/potential_component + if(length(all_components)) + potential_component = all_components[c_type] + if(potential_component?.type == c_type) + return potential_component return null /** diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index 729c50f2349f..f5129fb761b1 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -153,9 +153,9 @@ Behavior that's still missing from this component that original food items had t SIGNAL_HANDLER if(!(food_flags & FOOD_IN_CONTAINER)) - switch (bitecount) - if (0) - return + switch(bitecount) + if(0) + EMPTY_BLOCK_GUARD if(1) examine_list += "[parent] was bitten by someone!" if(2,3) diff --git a/code/datums/components/radioactive.dm b/code/datums/components/radioactive.dm index 9306f6aae899..26d98b99e80e 100644 --- a/code/datums/components/radioactive.dm +++ b/code/datums/components/radioactive.dm @@ -55,7 +55,6 @@ var/filter = master.get_filter("rad_glow") if(filter) animate(filter, alpha = 110, time = 15, loop = -1) - animate(alpha = 40, time = 25) /datum/component/radioactive/InheritComponent(datum/component/C, i_am_original, _strength, _source, _half_life, _can_contaminate) if(!i_am_original) diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 17c5dc2ef39c..9bd38b62c9fa 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -168,7 +168,6 @@ else dat += "
    [bdat]" - else else dat += "
    {Log In}" var/datum/browser/popup = new(user, "med_rec", "Medical Records Console", 600, 400) @@ -375,7 +374,6 @@ if(istype(active1.fields["photo_side"], /obj/item/photo)) var/obj/item/photo/P = active1.fields["photo_side"] P.show(usr) - else else if(href_list["p_stat"]) if(active1) @@ -488,16 +486,12 @@ for(var/datum/data/record/R in GLOB.data_core.medical) if((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"]))) active2 = R - else - //Foreach continue //goto(3229) if(!(active2)) temp = text("Could not locate record [].", sanitize(t1)) else for(var/datum/data/record/E in GLOB.data_core.general) if((E.fields["name"] == active2.fields["name"] || E.fields["id"] == active2.fields["id"])) active1 = E - else - //Foreach continue //goto(3334) screen = 4 else if(href_list["print_p"]) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 37759d04b13e..cdfad1556187 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -228,7 +228,6 @@ dat += "New Security Record

    " dat += "Delete Record (ALL)
    Print Record
    Print Wanted Poster
    Print Missing Persons Poster
    Back

    " dat += "{Log Out}" - else else dat += "{Log In}" var/datum/browser/popup = new(user, "secure_rec", "Security Records Console", 600, 400) diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index d703ae86ca7d..cd6fafd4dbef 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -235,7 +235,7 @@ . = TRUE if("select_stencil") var/stencil = params["item"] - if(stencil in all_drawables + randoms) + if(stencil in (all_drawables + randoms)) drawtype = stencil . = TRUE text_buffer = "" @@ -320,7 +320,7 @@ temp = "symbol" else if(drawing in drawings) temp = "drawing" - else if(drawing in graffiti|oriented) + else if(drawing in (graffiti|oriented)) temp = "graffiti" var/graf_rot diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index e259e56ccd0e..70871e2ddc77 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -410,7 +410,7 @@ GLOBAL_LIST_EMPTY(PDAs) //BASIC FUNCTIONS=================================== if("Refresh")//Refresh, goes to the end of the proc. - + EMPTY_BLOCK_GUARD if("Return")//Return if(mode<=9) mode = 0 diff --git a/code/game/objects/items/devices/mines.dm b/code/game/objects/items/devices/mines.dm index 6319cc1a638d..4f2169350d79 100644 --- a/code/game/objects/items/devices/mines.dm +++ b/code/game/objects/items/devices/mines.dm @@ -469,7 +469,7 @@ shrapnel_magnitude = 4 /obj/item/mine/pressure/explosive/fire/mine_effect(mob/victim) - if(victim && victim.is_holding(src))//in case it's been picked up + if(victim?.is_holding(src))//in case it's been picked up for(var/turf/T in view(4,victim)) T.IgniteTurf(15) new /obj/effect/hotspot(T) diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm index a08b1398aad8..0882034b165a 100644 --- a/code/game/objects/items/pet_carrier.dm +++ b/code/game/objects/items/pet_carrier.dm @@ -31,13 +31,13 @@ /obj/item/pet_carrier/Exited(atom/movable/occupant) . = ..() - if(occupant in occupants && isliving(occupant)) + if((occupant in occupants) && isliving(occupant)) var/mob/living/L = occupant occupants -= occupant occupant_weight -= L.mob_size /obj/item/pet_carrier/handle_atom_del(atom/A) - if(A in occupants && isliving(A)) + if((A in occupants) && isliving(A)) var/mob/living/L = A occupants -= L occupant_weight -= L.mob_size @@ -178,7 +178,7 @@ add_occupant(target) /obj/item/pet_carrier/proc/add_occupant(mob/living/occupant) - if(occupant in occupants || !istype(occupant)) + if((occupant in occupants) || !istype(occupant)) return occupant.forceMove(src) occupants += occupant diff --git a/code/game/objects/items/storage/guncases.dm b/code/game/objects/items/storage/guncases.dm index c846dd36b050..760a84f4e3aa 100644 --- a/code/game/objects/items/storage/guncases.dm +++ b/code/game/objects/items/storage/guncases.dm @@ -3,6 +3,8 @@ desc = "A large box designed for holding firearms and magazines safely." icon = 'icons/obj/guncase.dmi' icon_state = "guncase" + lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi' item_state = "infiltrator_case" force = 12 throwforce = 12 diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index e0e115b81d01..363a83d965a3 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -24,11 +24,8 @@ /obj/proc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir, armour_penetration = 0) if(damage_flag == "melee" && damage_amount < damage_deflection) return 0 - switch(damage_type) - if(BRUTE) - if(BURN) - else - return 0 + if(damage_type != BRUTE && damage_type != BURN) + return 0 var/armor_protection = 0 if(damage_flag) armor_protection = armor.getRating(damage_flag) diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index 089b6f8f792c..fa4fe485015d 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -50,7 +50,7 @@ new /obj/item/clothing/mask/breath(src) if ("nothing") - // doot + EMPTY_BLOCK_GUARD // teehee if ("delete") diff --git a/code/game/objects/structures/crateshelf.dm b/code/game/objects/structures/crateshelf.dm index 3b1387f5490b..0bf1cfa64c4f 100644 --- a/code/game/objects/structures/crateshelf.dm +++ b/code/game/objects/structures/crateshelf.dm @@ -123,6 +123,7 @@ crate.SpinAnimation(rand(4,7), 1) // Spin the crates around a little as they fall. Randomness is applied so it doesn't look weird. switch(pick(1, 1, 1, 1, 2, 2, 3)) // Randomly pick whether to do nothing, open the crate, or break it open. if(1) // Believe it or not, this does nothing. + EMPTY_BLOCK_GUARD if(2) // Open the crate! if(crate.open()) // Break some open, cause a little chaos. crate.visible_message(span_warning("[crate]'s lid falls open!")) diff --git a/code/modules/admin/permissionedit.dm b/code/modules/admin/permissionedit.dm index 5e354e0f6550..0046d353dc5c 100644 --- a/code/modules/admin/permissionedit.dm +++ b/code/modules/admin/permissionedit.dm @@ -214,7 +214,7 @@ . = ckey(admin_key) if(!.) return FALSE - if(!admin_ckey && (. in GLOB.admin_datums+GLOB.deadmins)) + if(!admin_ckey && (. in (GLOB.admin_datums+GLOB.deadmins))) to_chat(usr, "[admin_key] is already an admin.", confidential = TRUE) return FALSE if(use_db) diff --git a/code/modules/admin/view_variables/debug_variables.dm b/code/modules/admin/view_variables/debug_variables.dm index 68d2b4c2ec64..60528592f4e0 100644 --- a/code/modules/admin/view_variables/debug_variables.dm +++ b/code/modules/admin/view_variables/debug_variables.dm @@ -1,23 +1,24 @@ #define VV_HTML_ENCODE(thing) (sanitize ? html_encode(thing) : thing) /// Get displayed variable in VV variable list -/proc/debug_variable(name, value, level, datum/D, sanitize = TRUE) //if D is a list, name will be index, and value will be assoc value. +/proc/debug_variable(name, value, level, datum/owner, sanitize = TRUE) //if D is a list, name will be index, and value will be assoc value. var/header - if(D) - if(islist(D)) + if(owner) + if(islist(owner)) + var/list/owner_list = owner var/index = name if (value) - name = D[name] //name is really the index until this line + name = owner_list[name] //name is really the index until this line else - value = D[name] - header = "
  • ([VV_HREF_TARGET_1V(D, VV_HK_LIST_EDIT, "E", index)]) ([VV_HREF_TARGET_1V(D, VV_HK_LIST_CHANGE, "C", index)]) ([VV_HREF_TARGET_1V(D, VV_HK_LIST_REMOVE, "-", index)]) " + value = owner_list[name] + header = "
  • ([VV_HREF_TARGET_1V(owner, VV_HK_LIST_EDIT, "E", index)]) ([VV_HREF_TARGET_1V(owner, VV_HK_LIST_CHANGE, "C", index)]) ([VV_HREF_TARGET_1V(owner, VV_HK_LIST_REMOVE, "-", index)]) " else - header = "
  • ([VV_HREF_TARGET_1V(D, VV_HK_BASIC_EDIT, "E", name)]) ([VV_HREF_TARGET_1V(D, VV_HK_BASIC_CHANGE, "C", name)]) ([VV_HREF_TARGET_1V(D, VV_HK_BASIC_MASSEDIT, "M", name)]) " + header = "
  • ([VV_HREF_TARGET_1V(owner, VV_HK_BASIC_EDIT, "E", name)]) ([VV_HREF_TARGET_1V(owner, VV_HK_BASIC_CHANGE, "C", name)]) ([VV_HREF_TARGET_1V(owner, VV_HK_BASIC_MASSEDIT, "M", name)]) " else header = "
  • " var/item var/name_part = VV_HTML_ENCODE(name) - if(level > 0 || islist(D)) //handling keys in assoc lists + if(level > 0 || islist(owner)) //handling keys in assoc lists if(istype(name,/datum)) name_part = "[VV_HTML_ENCODE(name)] [REF(name)]" else if(islist(name)) diff --git a/code/modules/client/loadout/_loadout.dm b/code/modules/client/loadout/_loadout.dm index a0e5d6cab3c3..44c1cff4ffa5 100644 --- a/code/modules/client/loadout/_loadout.dm +++ b/code/modules/client/loadout/_loadout.dm @@ -20,11 +20,11 @@ GLOBAL_LIST_EMPTY(gear_datums) if(G == initial(G.subtype_path)) continue - if(!use_name) - WARNING("Loadout - Missing display name: [G]") + if(!use_name && initial(G.path)) + WARNING("Loadout gear [G] is missing display name") continue if(!initial(G.path) && use_category != "OOC") //OOC category does not contain actual items - WARNING("Loadout - Missing path definition: [G]") + WARNING("Loadout gear [G] is missing path definition") continue if(!GLOB.loadout_categories[use_category]) diff --git a/code/modules/client/loadout/loadout_accessories.dm b/code/modules/client/loadout/loadout_accessories.dm index a8acc1544654..d52c9a8b58fc 100644 --- a/code/modules/client/loadout/loadout_accessories.dm +++ b/code/modules/client/loadout/loadout_accessories.dm @@ -98,6 +98,9 @@ subtype_path = /datum/gear/accessory/mask slot = ITEM_SLOT_MASK +/datum/gear/accessory/mask/bandana + subtype_path = /datum/gear/accessory/mask/bandana + /datum/gear/accessory/mask/bandana/red display_name = "bandana, red" path = /obj/item/clothing/mask/bandana/red diff --git a/code/modules/client/loadout/loadout_hat.dm b/code/modules/client/loadout/loadout_hat.dm index 2f7e59c288b7..f660d35f676a 100644 --- a/code/modules/client/loadout/loadout_hat.dm +++ b/code/modules/client/loadout/loadout_hat.dm @@ -80,6 +80,9 @@ //Soft caps +/datum/gear/hat/softcap + subtype_path = /datum/gear/hat/softcap + /datum/gear/hat/softcap/red display_name = "cap, red" path = /obj/item/clothing/head/soft/red diff --git a/code/modules/client/loadout/loadout_suit.dm b/code/modules/client/loadout/loadout_suit.dm index 1d11857663ad..1edeed63530a 100644 --- a/code/modules/client/loadout/loadout_suit.dm +++ b/code/modules/client/loadout/loadout_suit.dm @@ -88,6 +88,9 @@ path = /obj/item/clothing/suit/toggle/hazard //Suspenders +/datum/gear/suit/suspenders + subtype_path = /datum/gear/suit/suspenders + /datum/gear/suit/suspenders/red display_name = "suspenders, red" path = /obj/item/clothing/suit/toggle/suspenders diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 9954d785cc74..18c9a5374443 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -893,7 +893,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) mutant_category = 0 // end generic adjective - if("wings" in pref_species.default_features && GLOB.r_wings_list.len >1) + if(("wings" in pref_species.default_features) && GLOB.r_wings_list.len >1) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 416fa20df39c..c5d7e6ec98f9 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -184,7 +184,7 @@ . = ..() UnregisterSignal(M, COMSIG_MOB_SAY) -/obj/item/clothing/head/warden/drill/proc/handle_speech(datum/source, mob/speech_args) +/obj/item/clothing/head/warden/drill/proc/handle_speech(datum/source, list/speech_args) var/message = speech_args[SPEECH_MESSAGE] if(message[1] != "*") switch (mode) diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index b2636b02871b..1271717fc537 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -201,7 +201,7 @@ . = ..() UnregisterSignal(M, COMSIG_MOB_SAY) -/obj/item/clothing/head/frenchberet/proc/handle_speech(datum/source, mob/speech_args) +/obj/item/clothing/head/frenchberet/proc/handle_speech(datum/source, list/speech_args) var/message = speech_args[SPEECH_MESSAGE] if(message[1] != "*") message = " [message]" diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm index 982b3804f586..1524a4aa6466 100644 --- a/code/modules/clothing/suits/cloaks.dm +++ b/code/modules/clothing/suits/cloaks.dm @@ -5,7 +5,6 @@ desc = "It's a cape that can be worn around your neck." icon = 'icons/obj/clothing/cloaks.dmi' icon_state = "qmcloak" - item_state = "qmcloak" w_class = WEIGHT_CLASS_SMALL body_parts_covered = CHEST|GROIN|LEGS|ARMS flags_inv = HIDESUITSTORAGE diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index 89cce9c24d64..81e5da317553 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -103,7 +103,7 @@ name = "waistcoat" desc = "For some classy, murderous fun." icon_state = "waistcoat" - item_state = "waistcoat" + item_state = "det_suit" minimize_when_attached = FALSE attachment_slot = null @@ -119,13 +119,11 @@ name = "syndicate maid apron" desc = "Practical? No. Tactical? Also no. Cute? Most definitely yes." icon_state = "maidapronsynd" - item_state = "maidapronsynd" /obj/item/clothing/accessory/maidapron/inteq name = "inteq maid apron" desc = "A 'tactical' apron to protect you from all sorts of spills, from dough to blood!" icon_state = "inteqmaidapron" - item_state = "inteqmaidapron" ////////// //Medals// @@ -408,7 +406,6 @@ name = "shoulder holster" desc = "A holster to carry a handgun and ammo. WARNING: Badasses only." icon_state = "holster" - item_state = "holster" pocket_storage_component_path = /datum/component/storage/concrete/pockets/holster attachment_slot = null diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index ec10f7dfb0f2..90b180587638 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -593,6 +593,7 @@ broh.losebreath++ switch(broh.losebreath) if(-INFINITY to 0) + EMPTY_BLOCK_GUARD if(1 to 2) if(prob(30)) user.visible_message("[broh]'s eyes water as [broh.p_they()] chug the can of [src]!") diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 3ff72083450a..406c59ae0d04 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -433,7 +433,7 @@ mind.active = FALSE //we wish to transfer the key manually mind.original_character_slot_index = client.prefs.default_slot mind.transfer_to(H) //won't transfer key since the mind is not active - mind.set_original_character(H) + H.mind.set_original_character(H) H.name = real_name client.init_verbs() diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 5005930855e4..beb44db426de 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -712,7 +712,7 @@ if(ignite_turfs) T.IgniteTurf(power,flame_color) for(var/mob/living/L in T.contents) - if(L in hit_list || L == source) + if((L in hit_list) || L == source) continue hit_list += L L.adjustFireLoss(20) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index c800acc46786..d1b28067a804 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -452,8 +452,6 @@ else client.eye = client.mob client.perspective = MOB_PERSPECTIVE - else - //Do nothing else //Reset to common defaults: mob if on turf, otherwise current loc if(isturf(loc)) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index db9a8db4ec2c..e8d5f5c508c6 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -147,7 +147,7 @@ if(20) newletter += "[newletter][newletter]" else - // do nothing + EMPTY_BLOCK_GUARD . += "[newletter]" return sanitize(.) @@ -192,7 +192,7 @@ if(5) newletter = "glor" else - // do nothing + EMPTY_BLOCK_GUARD . += newletter return sanitize(.) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index ea8d5fcbfff2..32d91294bc84 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -337,7 +337,7 @@ /// triggered on wield of two handed item /obj/item/gun/proc/on_wield(obj/item/source, mob/user) wielded = TRUE - INVOKE_ASYNC(src, .proc.do_wield, user) + INVOKE_ASYNC(src, PROC_REF(do_wield), user) /obj/item/gun/proc/do_wield(mob/user) user.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/gun, multiplicative_slowdown = wield_slowdown) diff --git a/code/modules/projectiles/guns/ballistic/assault.dm b/code/modules/projectiles/guns/ballistic/assault.dm index 091c1aba92ba..0141667d1ce6 100644 --- a/code/modules/projectiles/guns/ballistic/assault.dm +++ b/code/modules/projectiles/guns/ballistic/assault.dm @@ -230,17 +230,10 @@ return secondary.screwdriver_act(user, attack_obj,) return ..() - -/obj/item/gun/ballistic/automatic/assault/e40/can_shoot() - var/current_firemode = gun_firemodes[firemode_index] - if(current_firemode != FIREMODE_OTHER) - return ..() - return secondary.can_shoot() - /obj/item/gun/ballistic/automatic/assault/e40/on_wield(obj/item/source, mob/user) wielded = TRUE secondary.wielded = TRUE - INVOKE_ASYNC(src, .proc.do_wield, user) + INVOKE_ASYNC(src, PROC_REF(do_wield), user) /obj/item/gun/ballistic/automatic/assault/e40/do_wield(mob/user) . = ..() diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 2c7b664ff3b5..752af51a57e5 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -463,6 +463,7 @@ desc = "A small law enforcement firearm. Originally commissioned by Nanotrasen for their Private Investigation division, it has become extremely popular among independent civilians as a cheap, compact sidearm. Uses .38 Special rounds." fire_sound = 'sound/weapons/gun/revolver/shot_light.ogg' icon_state = "detective" + item_state = "hp_generic" icon = 'icons/obj/guns/manufacturer/hunterspride/48x32.dmi' lefthand_file = 'icons/obj/guns/manufacturer/hunterspride/lefthand.dmi' righthand_file = 'icons/obj/guns/manufacturer/hunterspride/righthand.dmi' @@ -572,6 +573,7 @@ EMPTY_GUN_HELPER(revolver/viper) mob_overlay_icon = 'icons/obj/guns/manufacturer/hunterspride/onmob.dmi' icon_state = "montagne" + item_state = "hp_generic" manufacturer = MANUFACTURER_HUNTERSPRIDE spread_unwielded = 15 recoil = 0 diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 26c796555ebd..30ccb528a4e9 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -153,6 +153,8 @@ EMPTY_GUN_HELPER(shotgun/hellfire) desc = "A semi-automatic shotgun with tactical furniture and six-shell capacity underneath." icon_state = "cshotgun" item_state = "shotgun_combat" + lefthand_file = 'icons/mob/inhands/weapons/64x_guns_left.dmi' + righthand_file = 'icons/mob/inhands/weapons/64x_guns_right.dmi' fire_delay = 0.5 SECONDS default_ammo_type = /obj/item/ammo_box/magazine/internal/shot/com allowed_ammo_types = list( @@ -398,8 +400,8 @@ EMPTY_GUN_HELPER(shotgun/doublebarrel) name = "improvised shotgun" desc = "A length of pipe and miscellaneous bits of scrap fashioned into a rudimentary single-shot shotgun." icon = 'icons/obj/guns/projectile.dmi' - lefthand_file = GUN_LEFTHAND_ICON - righthand_file = GUN_RIGHTHAND_ICON + lefthand_file = 'icons/mob/inhands/weapons/64x_guns_left.dmi' + righthand_file = 'icons/mob/inhands/weapons/64x_guns_right.dmi' mob_overlay_icon = null base_icon_state = "ishotgun" diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 9c75aa56edcc..4eba20701ac7 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -3,6 +3,7 @@ desc = "A basic energy-based gun." icon = 'icons/obj/guns/energy.dmi' icon_state = "laser" + item_state = "spur" muzzleflash_iconstate = "muzzle_flash_laser" muzzle_flash_color = COLOR_SOFT_RED diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index f5f82ff43fb9..c17c1cb8a005 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -2,8 +2,6 @@ name = "SL L-204 laser gun" desc = "A basic energy-based laser gun that fires concentrated beams of light which pass through glass and thin metal." - icon_state = "laser" - item_state = "laser" w_class = WEIGHT_CLASS_NORMAL custom_materials = list(/datum/material/iron=2000) ammo_type = list(/obj/item/ammo_casing/energy/lasergun) diff --git a/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm b/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm index 6d1dff192407..dc599c84bb7f 100644 --- a/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm +++ b/code/modules/projectiles/guns/manufacturer/scarborough/ballistics.dm @@ -886,7 +886,7 @@ NO_MAG_GUN_HELPER(automatic/assault/hydra/dmr) /obj/item/gun/ballistic/automatic/assault/hydra/underbarrel_gl/on_wield(obj/item/source, mob/user) wielded = TRUE secondary.wielded = TRUE - INVOKE_ASYNC(src, .proc.do_wield, user) + INVOKE_ASYNC(src, PROC_REF(do_wield), user) /obj/item/gun/ballistic/automatic/assault/hydra/underbarrel_gl/do_wield(mob/user) . = ..() diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index d37048250e62..bb6bafc9e74c 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -63,7 +63,7 @@ M.adjust_blindness(-1) switch(current_cycle) if(1 to 20) - //nothing + EMPTY_BLOCK_GUARD //nothing if(21 to INFINITY) if(prob(current_cycle-10)) M.cure_nearsighted(list(EYE_DAMAGE)) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 9e4b2120774e..82bda376fc3c 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -119,7 +119,7 @@ F.fry(volume) F.reagents.add_reagent(/datum/reagent/consumable/cooking_oil, reac_volume) -/datum/reagent/consumable/cooking_oil/expose_mob(mob/living/M, method = TOUCH, method = SMOKE, reac_volume, show_message = 1, touch_protection = 0) +/datum/reagent/consumable/cooking_oil/expose_mob(mob/living/M, method = TOUCH, reac_volume, show_message = 1, touch_protection = 0) if(!istype(M)) return var/boiling = FALSE diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index 97196cf64ecc..ebfc08db3a48 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -776,7 +776,7 @@ ///obj/item/bodypart/proc/break_bone_feedback() owner.visible_message("You hear a cracking sound coming from [owner]'s [name].", "You feel something crack in your [name]!", "You hear an awful cracking sound.") - playsound(owner, list('sound/health/bone/bone_break1.ogg','sound/health/bone/bone_break2.ogg','sound/health/bone/bone_break3.ogg','sound/health/bone/bone_break4.ogg','sound/health/bone/bone_break5.ogg','sound/health/bone/bone_break6.ogg'), 100, FALSE, -1) + playsound(owner, pick(list('sound/health/bone/bone_break1.ogg','sound/health/bone/bone_break2.ogg','sound/health/bone/bone_break3.ogg','sound/health/bone/bone_break4.ogg','sound/health/bone/bone_break5.ogg','sound/health/bone/bone_break6.ogg')), 100, FALSE, -1) /obj/item/bodypart/proc/fix_bone() // owner.update_inv_splints() breaks diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 16e76901f957..5364a69c3483 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -45,6 +45,8 @@ /// Use this when something shouldn't happen and is of note, but shouldn't block CI. /// Does not mark the test as failed. #define TEST_NOTICE(source, message) source.log_for_test((##message), "notice", __FILE__, __LINE__) +/// TEST_NOTICE but more important +#define TEST_WARNING(source, message) source.log_for_test((##message), "warning", __FILE__, __LINE__) /// Constants indicating unit test completion status #define UNIT_TEST_PASSED 0 @@ -70,7 +72,7 @@ #ifdef BASIC_TESTS -//#include "icons/inhands.dm" +#include "icons/inhands.dm" #include "icons/missing_icons.dm" #include "icons/spritesheets.dm" #include "icons/worn_icons.dm" diff --git a/code/modules/unit_tests/create_and_destroy.dm b/code/modules/unit_tests/create_and_destroy.dm index b7c1b924fd53..ed3d9c6ed0a7 100644 --- a/code/modules/unit_tests/create_and_destroy.dm +++ b/code/modules/unit_tests/create_and_destroy.dm @@ -141,14 +141,12 @@ // Drastically lower the amount of time it takes to GC, since we don't have clients that can hold it up. SSgarbage.collection_timeout[GC_QUEUE_CHECK] = 10 SECONDS - //Prevent the garbage subsystem from harddeling anything, if only to save time - SSgarbage.collection_timeout[GC_QUEUE_HARDDELETE] = 10000 HOURS //Clear it, just in case cached_contents.Cut() var/list/queues_we_care_about = list() - // All up to harddel - for(var/i in 1 to GC_QUEUE_HARDDELETE - 1) + // All of em, I want hard deletes too, since we rely on the debug info from them + for(var/i in 1 to GC_QUEUE_HARDDELETE) queues_we_care_about += i //Now that we've qdel'd everything, let's sleep until the gc has processed all the shit we care about @@ -158,6 +156,7 @@ time_needed += SSgarbage.collection_timeout[index] var/start_time = world.time + var/real_start_time = REALTIMEOFDAY var/garbage_queue_processed = FALSE sleep(time_needed) @@ -179,7 +178,7 @@ garbage_queue_processed = TRUE break - if(world.time > start_time + time_needed + 30 MINUTES) //If this gets us gitbanned I'm going to laugh so hard + if(REALTIMEOFDAY > real_start_time + time_needed + 30 MINUTES) //If this gets us gitbanned I'm going to laugh so hard TEST_FAIL("Something has gone horribly wrong, the garbage queue has been processing for well over 30 minutes. What the hell did you do") break @@ -215,4 +214,3 @@ SSticker.delay_end = FALSE //This shouldn't be needed, but let's be polite SSgarbage.collection_timeout[GC_QUEUE_CHECK] = GC_CHECK_QUEUE - SSgarbage.collection_timeout[GC_QUEUE_HARDDELETE] = GC_DEL_QUEUE diff --git a/code/modules/unit_tests/icons/inhands.dm b/code/modules/unit_tests/icons/inhands.dm index 858c6d2f2840..dc05295203e6 100644 --- a/code/modules/unit_tests/icons/inhands.dm +++ b/code/modules/unit_tests/icons/inhands.dm @@ -53,7 +53,7 @@ match_message += (match_message ? " & '[file_place]'" : " - Matching sprite found in: '[file_place]'") if(!(skip_left || skip_right) && !lefthand_file && !righthand_file) - TEST_FAIL("Missing both icon files for [item_path].\n\titem_state = \"[item_state]\"[match_message]") + TEST_NOTICE(src, "Missing both icon files for [item_path].\n\titem_state = \"[item_state]\"[match_message]") continue var/missing_left @@ -80,7 +80,7 @@ if(!match_message && right_fallback && left_fallback) fallback_log_message += "\n\t[item_path] has invalid value, using fallback icon.\n\titem_state = \"[item_state]\"" continue - TEST_FAIL("Missing inhand sprites for [item_path] in both '[lefthand_file]' & '[righthand_file]'.\n\titem_state = \"[item_state]\"[match_message]") + TEST_NOTICE(src, "Missing inhand sprites for [item_path] in both '[lefthand_file]' & '[righthand_file]'.\n\titem_state = \"[item_state]\"[match_message]") else if(missing_left) TEST_FAIL("Missing left inhand sprite for [item_path] in '[lefthand_file]'[left_fallback ? ", using fallback icon" : null].\n\titem_state = \"[item_state]\"[match_message]") else if(missing_right) @@ -90,5 +90,5 @@ TEST_FAIL("Invalid item_state values should be set to null if there isn't a valid icon.[fallback_log_message]") if(unset_inhand_var_message) - log_test("\tNotice - Possible inhand icon matches found. It is best to be explicit with inhand sprite values.[unset_inhand_var_message]") + TEST_NOTICE(src, "Possible inhand icon matches found. It is best to be explicit with inhand sprite values.[unset_inhand_var_message]") diff --git a/code/modules/unit_tests/icons/worn_icons.dm b/code/modules/unit_tests/icons/worn_icons.dm index 3dba4d7c8e03..31c5d432dfa0 100644 --- a/code/modules/unit_tests/icons/worn_icons.dm +++ b/code/modules/unit_tests/icons/worn_icons.dm @@ -5,6 +5,7 @@ /// Make sure this location is also present in tools/deploy.sh /// If you need additional paths ontop of this second one, you can add another generate_possible_icon_states_list("your/folder/path/") below the if(additional_icon_location) block in Run(), and make sure to add that path to tools/deploy.sh as well. var/additional_icon_location = null + var/required_test = TRUE /datum/unit_test/mob_overlay_icons/proc/generate_possible_icon_states_list(directory_path) if(!directory_path) @@ -16,6 +17,9 @@ else possible_icon_states += generate_possible_icon_states_list("[directory_path][file_path]") +/datum/unit_test/mob_overlay_icons/proc/types_to_search() + return subtypesof(/obj/item/clothing) + /datum/unit_test/mob_overlay_icons/Run() generate_possible_icon_states_list() if(additional_icon_location) @@ -23,7 +27,7 @@ var/list/already_warned_icons = list() - for(var/obj/item/item_path as anything in (subtypesof(/obj/item/clothing))) + for(var/obj/item/item_path as anything in types_to_search()) var/cached_slot_flags = initial(item_path.slot_flags) if(!cached_slot_flags || (cached_slot_flags & ITEM_SLOT_LPOCKET) || (cached_slot_flags & ITEM_SLOT_RPOCKET) || initial(item_path.item_flags) & ABSTRACT) continue @@ -45,7 +49,10 @@ if(mob_overlay_icon) //easiest to check since we override everything. this automatically includes downstream support. if(!(icon_state in icon_states(mob_overlay_icon, 1))) - TEST_FAIL("[item_path] using invalid [mob_overlay_state ? "mob_overlay_state" : "icon_state"], \"[icon_state]\" in mob_overlay_icon override file, '[mob_overlay_icon]'[match_message]") + if(required_test) + TEST_FAIL("[item_path] using invalid [mob_overlay_state ? "mob_overlay_state" : "icon_state"], \"[icon_state]\" in mob_overlay_icon override file, '[mob_overlay_icon]'[match_message]") + else + TEST_NOTICE(src, "[item_path] using invalid [mob_overlay_state ? "mob_overlay_state" : "icon_state"], \"[icon_state]\" in mob_overlay_icon override file, '[mob_overlay_icon]'[match_message]") continue var/icon_file //checks against all the default icon locations if one isn't defined. @@ -61,15 +68,6 @@ fail_reasons += "[item_path] using invalid [mob_overlay_state ? "mob_overlay_state" : "icon_state"], \"[icon_state]\" in '[icon_file]'[match_message]" spacer = "\n\t" - /* - if(cached_slot_flags & ITEM_SLOT_ID) - icon_file = 'icons/mob/clothing/id.dmi' - if(!(icon_state in icon_states(icon_file, 1))) - already_warned_icons += icon_state - fail_reasons += "[spacer][item_path] using invalid [mob_overlay_state ? "mob_overlay_state" : "icon_state"], \"[icon_state]\" in '[icon_file]'[match_message]" - spacer = "\n\t" - */ - if(cached_slot_flags & ITEM_SLOT_GLOVES) icon_file = 'icons/mob/clothing/hands.dmi' if(!(icon_state in icon_states(icon_file, 1))) @@ -113,4 +111,13 @@ spacer = "\n\t" if(fail_reasons) - TEST_FAIL(fail_reasons) + if(required_test) + TEST_FAIL(fail_reasons) + else + TEST_NOTICE(src, fail_reasons) + +/datum/unit_test/mob_overlay_icons/not_clothing + required_test = FALSE + +/datum/unit_test/mob_overlay_icons/not_clothing/types_to_search() + return (subtypesof(/obj/item) - subtypesof(/obj/item/clothing)) diff --git a/code/modules/unit_tests/outfit_sanity.dm b/code/modules/unit_tests/outfit_sanity.dm index a09395d42103..8e85797e713e 100644 --- a/code/modules/unit_tests/outfit_sanity.dm +++ b/code/modules/unit_tests/outfit_sanity.dm @@ -6,7 +6,7 @@ if (outfit.random != TRUE) \ TEST_FAIL("[outfit.name]'s [#outfit_key] is invalid! Could not equip a [outfit.##outfit_key] into that slot."); \ else \ - log_test("[outfit.name]'s [#outfit_key] is invalid! Could not equip a [outfit.##outfit_key] into that slot."); \ + TEST_NOTICE(src, "[outfit.name]'s [#outfit_key] is invalid! Could not equip a [outfit.##outfit_key] into that slot."); \ } \ } @@ -72,7 +72,7 @@ if (outfit.random != TRUE) TEST_FAIL("[outfit.name]'s backpack_contents are invalid! Couldn't add [path] to backpack.") else - log_test("[outfit.name]'s backpack_contents are invalid! Couldn't add [path] to backpack.") + TEST_NOTICE(src, "[outfit.name]'s backpack_contents are invalid! Couldn't add [path] to backpack.") #undef CHECK_OUTFIT_SLOT diff --git a/icons/mob/inhands/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi index ff71ba99e3c082d3f95180e18c164d474a17f18d..fd76394a835a214a7673411d42e41c08bdfa5215 100644 GIT binary patch literal 39557 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

    PTNXyo}*OukxtPLUfViCa|9bzx|1m1( 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 X_Giq8J%j_+Xt4`6DC=s=>v4YpY0pY_ literal 42172 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%0ADEFUW9q)A10mm#gLQu&-7oO$Mw&NAlgkAL zevunH<(h1$YwLhL7|Zuvivbc&+^2hs_sjp=$vS%A+deBGmT?Q|&G@N(JI<&z=XjoO z>cVbC_G7<{x~!ZV=kp}qKcJzZAiZKp13L z6oI`w4)?-!>u3#Q)=hCjEn#iy1Gi~W9AaYU6miO6E_iuDM*AJwq#&RLr)}N4FlVhjH%dKr4w6F?HZf~0Rdtk^>jde91U7X-Q}=)T z>SWanmWWR}%UMG3k>$)wHzy(fd&RUq+7`jxPaN@b(!F+LKM5>Vm;zPQRsKyzwtDH&vE7Rvg_Oor-qH81}?af7yF0x5MxO0H-7c^L=R6GLL~ zmOPL_W01s~*`*u7EA;&%QnIXw^R94|{4RbASnS>U6#H+}aX$buSq6BjIOpu~?r)9J za#WR~BKuIR>AI@%tdi1o!!Yfui&8J`^G7Y3IE?6V{h*{`V${Kc3PSx7$7GcfZhNre z;^G^ZC%u!M%Ni7*~~V_J}1Nr(2_p+Ra=2} z^XP24hB|jY_}1r55q{fgbJJy->8DoWFGk?RMNu#36F=bO{Mh$)(5%wFC7mXA#2DVP z!Q~cqkew;4#>LhB)n>-P@vW__nWbbhMyc_4r3aN`F}@5_NV$Izc=A9N3VGI*H&?E= zOa*5kqSSQ~!mn?JR(|xzvv%`P>9%*CL=T3 zpUR8Vo(w#Q{}X?Cj`B70m_>qDt=@#d2`UAVvC1`%)BQ%&F78Ci!?Otx>{&;`UX3pc?(oi+UW=w{`;wE#Yc(3{x& zy4RauEe6HOb4N5g2Om!e%|CX&W`L>q`=*iNoImgQZ%X&bV?lG?{;i8>l*roPdW2bbvvl5S%AhV7(M>}ve zeHG`;ack#Mf>E@zw_j|1Ih9MjE&!Gh_41T6MedJHjs|Q6$K}uLe6;2buMr_~N{yAq zNV%~~Cj6yy0>w*^5A_SR3oGSIvR`&j_Za?Wq;a%f1!alPMm=`5>i9x}!|95C43E54SkH2#fq_i%G?}0V2?w@DJEAgWXn3mp0eZ9_S*TIFYu{);X?Q;kA04}x9FP}wx{~iJmT+LI= z9Bhi#Q+z(ALPBs1TNSQbJ>wByt*>&eiq>wO8y2Pw9u}e8Lj48uug@RN_ z^m3E~`R##8^&hTjBvI7Wtp5BOJ(8>Wok))JY+CJC*s}!9OLn~DWkDeQI@Q*~(AH;K zQMSP(6f}(EckJ@22{VFwl){eSnr7yiw{}}03>U|o73aO!`mKBGf3C@9Onq8CMdL&G z;TR$14ycEpafmzFv=eUgw;9?!D(cZ`@&EBD7_6L+`s!M*WfNfq|C*7jO~*FCl-d z%e9?;TH5N(vBeOgZQz9HU;4=rK^fo+qT&TX<@!#TSykYzLr~~1A2^?>b{n>; z^tt;(0;Ha@nypan*#6>GQZQ;?@dOms7#AY4cVEEL1 z`-l@IgG-nhNHb(-+lMKaI)^m%&euy<)g}m;t<1KgHpdNADOur{WaLP5wkRNad``^A zapsyh7?i*AZMbIP9h^@vlPFAIc*INsozrvhuh=L20EN1}QeIE9LKhsD4B%!BIW>uN zGv@G4N0V21IJ})8bIz5$E*g|%VqV;rxP$s!8=%`4g7ki!3Cn!7m9{FL6_X~?asAg{ zlAy94*9lUXT^-`(w>jDU^UYuLrpME}#-tDom#*#V39z~kJb3_YuV;47SocdIu1Gc3 zdJ}oE75Y#RPvZHFJb(GP-XanG1DAarzd3CP05Or|jftO&%DpB-9b{ia!&_q*^lD`@ z4nK6U1~|txEH?8F<3O!f@{YiMnZ5C6Sv7vqq>6A_>9qa#`6;ptDvLYM=M;`X+SOs+ zx@pM&*7vv{e)IgDd5fOxL(Jg`Rp6iQ7N0t048IMkvaUL)5JuT`+X(~de)W^!@5Uh^+4qlv8WLEwGZI?w8BnFX^rf)-=lOj+;ec?G*{vB zCidx$0Y_F|$Qt|$WSF4_al8+-yo2f@sAI>Ls0gevBbpkfuF1MvD zXCV&);{d6bR4~ql(qsHXr*WSO3purLgZxK(WIPNou(EpXuzQyGyaU%0*>RLjM%MLd zMvr8R_avH~9Oj+}#6XZu2M8{!My_PpPR-x!tu8UZ-;*OOlq}L9TjPaiex;C<>bycF zz>{x5xQ(n&@J0kSjXPi^=kl+0UC(}+4#FyE{Dqf|7pZc#_fe^W>dhO`FKwUhqgltdw95XGhFj?1ab&STC8U13zVtrO_F2S9NtBlbI zfmtHRrC6NI+=!mKHOkE04h5&#v!nyGV|tYfcS}xO489?F+SRoNfycGXtrdhAANU9m<`0+_vbKMt zfynfSPvbn@k=AHCrxI2Zb1|;N#XP9M`^Fl@(?oiz9>Wi~NENJ`N%cJ(&Igou2NMJP zj%DaRG(OVsq^T%i!nrn_^3B+&ieS%;nGVfXd-RcW@NFa&{rLithnu4%8fkUX9+(JL6r~6n98x>XE z-5(x9yqQI!;qCRMShYQ8luc6*-z;)jO`tm1U% zR*b*nh^*Bs7m2NMZhtFzPp$;7kmrbe4MU9Cx9*Okx>Qf`FtIG-SFx`PKsXM#hNeEY zGYkkN!R(QCd{3yeaibtE19;NP_uPToJ3`v8KfI@GWO#p`RBX*3W0|=hvN@&L(_uUa zB3#u<@)eet&VUyQhGLg9m_6xG!VI`ByL{zp0Vo1dF=3U32+F6tK=jq%xtu%d5dF>-+u$CS*ZR&8vpmpk z3*24zVKoPCFUW~HYxxPd3AAlZJu3od)g!k{PW`$n{yAF>?s9?VP#uh5D=xk4X2{l} zipW#VNrweC9W04127u8fEz(x$d10qvs5kNd^7| z2Io7FC*$?1-*-Ghy%NAFc-EHn;&7@&y64n_#hoK5%PX$4zf6QLX*KRoeK!@P);o?& zh{(pOFs1tjzOwzWulNS$Ok$Q9-4$Xw;o_Q|`2o5WMfC91`2=7Tjq;$o^*B@%f;$19 z{{XRUOlh1kBlWTwg}YBXh*5k8HBTeYx5QEU=MyVgPIk1 zhwd!(ge1yLgH^=%fQ8ljzpy4?93sgFkB^5+wYDjWEx%VdcSUhcHp)69%f1VKgXIBw zaT<%Wze%pI+D%!c5!1Ro9$_XIw9{i_Af09WHgi_QQ7fWW3g=bA7{) zey!G|>>~5|AF;F|+UF1fdRKG?henb~I*41r!ME!&S{7;AA$~BEGF?-r8R6i3?P5lW z6r!kctDe3{arl?=@7cA^LD zQt?7){jrahWd8TVci_KQByheFu(jhMI&9>}=-RUhDpLDh4!fqdwLGpbmVds@4V(EOLb@OzXmaimlYIDB2Nw9l!~R$*E^7>zV9 zp{Yt(p(^cQW_R6}81>V;&Y!2yE^eNU!MRHKLVF#y<%lJ2bT1>_=xj#M<309{R|L5h zD(8b+*w~}C4Hk?t`_PK%Jqp=(jbEMAPH2l+-XI{YR_>BC-G(6^kub+*sWHdOdQdRa z&b0CHkDrdVhC&1x68JQXD~`P-pm6bA4sY|C*q75Wfy1?wfG+}Q%;h^w0oUe z=;{7K%C@L;S0?0HD<^4#5ZQWRE1F}tpWE8``sEB>%alymDE z{hnN;f|4sMV}=j(_bbSxD!()`>cy?+gPG3vHQ>ADMUFEcn2Pwq$Ct|5X2~N$vsVpv zA^@lZ-@=&m2*5#9+h6V4HiC-Pw_EG-n_2jY?7$w=g ztgdao0Af7)Q44=(JA*#j zT2tj~DbFgiR*765=+;nIR}ke}?zB}9eU%|#g{H#B=CF5k|FqweW$#RSU2XFh~N{Qh0HNbJlyr6ArZv;gK*=Q|R`$)s**p)Wm(ycC5} zDdz2Czu4&5kuDMMyv^3)yYW5QOfPtcX`#{(3FCkCljc``i=1rT0RxqT@Q%_#A9PcZ zb{-ijvETD&VRDW_;yZorQw>d$RzAoFu^%MOUYRSeK~<4R#9U}u(X0$L9xh24qP^>u z$P84TZS&HP{r<17<+V+--_1>giHXwp@8vXDROd~-Y`W}viS$4lQhC~IZRS}-t-tWhUSxF9FG}h|0VJeFe^ak$XmXv= zdn(S%tVxB${<+23%bgXBR&OuGPEYCW!@js~<`Nw!ghA|3Z+DSFTty&gjABddFNH~% z+cLAW7vtKZwwH^`{=rs<52C1T4cx*Y2#XKt?LHV2qC$cp=43|asdzK9-`TizjVErt zT@N-jt}Vjvfum_IEN!J#Bqe0|u{Q3P;dx%d^asMtncTnxM2sbV1pt7L4wx1p1@OUK z@xY&^@^s7r0Qk()78nZvT<`7}UVEVQ|BMJ%EN={J`T4;CkbnMf11zww{>#%DAA zjF!{$Mn5BX06@miivMkvDlGGCa!Sf(IHb6^_zAx)Vi%F}z-~sql@%F%2mlTrZ8UZW zRVSq+CpXXgPx$!xg@!WO`}-l6PYRM5(e)p#EE;=OD1Uo<_iv=!Qf3?l2mGu2#Ftio zQNe^6+jD=P%y6x-Js%apELC@(oZh#mI!9XefG>8*uQDIUPR2GQWwVoJuv2;;4{N<8Xg}h00iq|3{kOIWp)6(&3sWaU=dNtCWa5 zfY-FLVIgVu$e8Ft_6L+_Tg=A~%=h2I&luzzxt2Uf;BdunjlvT9}=Pkg*^VfSK z252`iL)4q7A^QD2pnq@$M+cC~1hChTOQ8|7QZ3}h5v+h0(7?e8%UfUyGL-H}f7xfM zx6@{3fMsTGh-qeWh;5erh8qXD*>s;e%BVW3Nj0{M6n|?g9&;$mEzvi-S=*qjL2Hz$ z+gKnVrO>LPZ+7TVBV$xi6h7#XA>gvaZuE63vR4;Q3wudcg@43fEppNyJ+SxI{{QdT z5FFDzg;&_RWtt8z1@`t zHAXfpB+U*P6K%-;fbwjO`S^kP{+sz31G19qc_y9?r;oJUXa-6-RU2`;1sHkz^&W`< z+KtQ*^+sxlet!=rTz|pA0eNKuxNFEF-ICdrY9UvSU;(^<1`bXbF~AgLDE*Q9WuK_K zoi;H8EHiOKOf!)~Y%}jS+&IYXrn}TrM%7ZCS3|o<@way3kw96liN4y+OoOrptx=|f zuib71DTP)QeRD(m8X2OBqS%8D83H~_Y(`(EB0F{Av~ZVXRewnQWsv8cd!WwPduRXu zcWelb>6XF^Y;BmP{ab-Me+}$HdFiRWYB1Ll*iLyMlc)qMh1)WA1;#c;" ); }; - -// Signal tgui that we're ready to receive updates -Byond.sendMessage('ready');