diff --git a/.github/workflows/autochangelog.yml b/.github/workflows/autochangelog.yml index 7953929ce5..71a53a5b2d 100644 --- a/.github/workflows/autochangelog.yml +++ b/.github/workflows/autochangelog.yml @@ -11,7 +11,7 @@ env: jobs: autochangelog: name: Autochangelog - runs-on: ubuntu-16.04 + runs-on: ubuntu-20.04 if: github.event.pull_request.merged == true steps: - uses: /actions/checkout@v2 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 33b71bb2aa..59319c4b8b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,7 +10,7 @@ env: jobs: file_tests: name: Run Linters - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Ensure +x on CI directory @@ -26,7 +26,7 @@ jobs: dreamchecker: name: DreamChecker - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 @@ -54,7 +54,7 @@ jobs: unit_tests: name: Integration Tests - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Ensure +x on CI directory @@ -69,7 +69,7 @@ jobs: run: | sudo dpkg --add-architecture i386 sudo apt update || true - sudo apt install libc6:i386 libgcc1:i386 libstdc++6:i386 libssl1.0.0:i386 zlib1g:i386 + sudo apt install zlib1g-dev:i386 libssl-dev:i386 pkg-config:i386 ldd librust_g.so - name: Unit Tests run: | diff --git a/.github/workflows/render_nanomaps.yml b/.github/workflows/render_nanomaps.yml index f3a50a5e94..fd5536ea48 100644 --- a/.github/workflows/render_nanomaps.yml +++ b/.github/workflows/render_nanomaps.yml @@ -14,7 +14,7 @@ on: jobs: generate_maps: name: 'Generate NanoMaps' - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - name: Clone uses: actions/checkout@v2 diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index 8d30c946ca..5817d0948e 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -296,7 +296,7 @@ to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + "\The [user] unfastens \the [src].", \ "You have unfastened \the [src].", \ "You hear ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index 05922103ff..7d476e17b7 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -256,7 +256,7 @@ Thus, the two variables affect pump operation are set in New(): to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + "\The [user] unfastens \the [src].", \ "You have unfastened \the [src].", \ "You hear ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm index a3a368852f..f0c5498fb3 100644 --- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm +++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm @@ -91,7 +91,7 @@ playsound(src, W.usesound, 50, 1) if(do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + "\The [user] unfastens \the [src].", \ "You have unfastened \the [src].", \ "You hear a ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/portables_connector.dm b/code/ATMOSPHERICS/components/portables_connector.dm index 5b489441db..31f61ae55b 100644 --- a/code/ATMOSPHERICS/components/portables_connector.dm +++ b/code/ATMOSPHERICS/components/portables_connector.dm @@ -162,7 +162,7 @@ to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + "\The [user] unfastens \the [src].", \ "You have unfastened \the [src].", \ "You hear a ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm index 10d7403541..eaae718b2e 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm @@ -62,7 +62,7 @@ to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + "\The [user] unfastens \the [src].", \ "You have unfastened \the [src].", \ "You hear a ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/tvalve.dm b/code/ATMOSPHERICS/components/tvalve.dm index 7deca38847..12c3fbfa13 100644 --- a/code/ATMOSPHERICS/components/tvalve.dm +++ b/code/ATMOSPHERICS/components/tvalve.dm @@ -340,7 +340,7 @@ to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + "\The [user] unfastens \the [src].", \ "You have unfastened \the [src].", \ "You hear a ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm index bba26185e7..a3571fed8b 100644 --- a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm +++ b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm @@ -81,7 +81,7 @@ to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + "\The [user] unfastens \the [src].", \ "You have unfastened \the [src].", \ "You hear a ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/unary/outlet_injector.dm b/code/ATMOSPHERICS/components/unary/outlet_injector.dm index 5eeab2c8e4..b4991c0e5d 100644 --- a/code/ATMOSPHERICS/components/unary/outlet_injector.dm +++ b/code/ATMOSPHERICS/components/unary/outlet_injector.dm @@ -171,7 +171,7 @@ to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + "\The [user] unfastens \the [src].", \ "You have unfastened \the [src].", \ "You hear a ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 488855a71f..4c843f5342 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -405,7 +405,7 @@ if(!src || !WT.isOn()) return playsound(src, WT.usesound, 50, 1) if(!welded) - user.visible_message("\The [user] welds the vent shut.", "You weld the vent shut.", "You hear welding.") + user.visible_message("\The [user] welds the vent shut.", "You weld the vent shut.", "You hear welding.") welded = 1 update_icon() else @@ -453,7 +453,7 @@ to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + "\The [user] unfastens \the [src].", \ "You have unfastened \the [src].", \ "You hear a ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 515cd37e7f..8b481a6d8c 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -281,7 +281,7 @@ to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + "\The [user] unfastens \the [src].", \ "You have unfastened \the [src].", \ "You hear a ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm index c890938100..9e88195bcc 100644 --- a/code/ATMOSPHERICS/components/valve.dm +++ b/code/ATMOSPHERICS/components/valve.dm @@ -301,7 +301,7 @@ to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + "\The [user] unfastens \the [src].", \ "You have unfastened \the [src].", \ "You hear a ratchet.") deconstruct() diff --git a/code/ATMOSPHERICS/pipes/pipe_base.dm b/code/ATMOSPHERICS/pipes/pipe_base.dm index f95948868d..5f384ed457 100644 --- a/code/ATMOSPHERICS/pipes/pipe_base.dm +++ b/code/ATMOSPHERICS/pipes/pipe_base.dm @@ -130,7 +130,7 @@ to_chat(user, "You begin to unfasten \the [src]...") if (do_after(user, 10 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + "\The [user] unfastens \the [src].", \ "You have unfastened \the [src].", \ "You hear a ratchet.") deconstruct() diff --git a/code/__defines/art.dm b/code/__defines/art.dm new file mode 100644 index 0000000000..473f7f3565 --- /dev/null +++ b/code/__defines/art.dm @@ -0,0 +1,5 @@ + +///tgui tab portrait categories- they're the same across all portrait tguis. +#define TAB_LIBRARY 1 +#define TAB_SECURE 2 +#define TAB_PRIVATE 3 diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index a71515643b..f4566e5101 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -51,7 +51,7 @@ GLOBAL_LIST_INIT(custom_species_bases, new) // Species that can be used for a Cu var/datum/category_collection/underwear/global_underwear = new() //Backpacks -var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt", "Messenger Bag") +var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt", "Messenger Bag", "Sports Bag") var/global/list/pdachoicelist = list("Default", "Slim", "Old", "Rugged", "Holographic", "Wrist-Bound") var/global/list/exclude_jobs = list(/datum/job/ai,/datum/job/cyborg) @@ -121,7 +121,7 @@ GLOBAL_LIST_EMPTY(mannequins) var/list/paths //Hair - Initialise all /datum/sprite_accessory/hair into an list indexed by hair-style name - paths = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair + paths = subtypesof(/datum/sprite_accessory/hair) for(var/path in paths) var/datum/sprite_accessory/hair/H = new path() hair_styles_list[H.name] = H @@ -133,7 +133,7 @@ GLOBAL_LIST_EMPTY(mannequins) hair_styles_female_list += H.name //Facial Hair - Initialise all /datum/sprite_accessory/facial_hair into an list indexed by facialhair-style name - paths = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair + paths = subtypesof(/datum/sprite_accessory/facial_hair) for(var/path in paths) var/datum/sprite_accessory/facial_hair/H = new path() facial_hair_styles_list[H.name] = H @@ -145,27 +145,27 @@ GLOBAL_LIST_EMPTY(mannequins) facial_hair_styles_female_list += H.name //Body markings - Initialise all /datum/sprite_accessory/marking into an list indexed by marking name - paths = typesof(/datum/sprite_accessory/marking) - /datum/sprite_accessory/marking + paths = subtypesof(/datum/sprite_accessory/marking) for(var/path in paths) var/datum/sprite_accessory/marking/M = new path() body_marking_styles_list[M.name] = M //Surgery Steps - Initialize all /datum/surgery_step into a list - paths = typesof(/datum/surgery_step)-/datum/surgery_step + paths = subtypesof(/datum/surgery_step) for(var/T in paths) var/datum/surgery_step/S = new T surgery_steps += S sort_surgeries() //List of job. I can't believe this was calculated multiple times per tick! - paths = typesof(/datum/job)-/datum/job + paths = subtypesof(/datum/job) paths -= exclude_jobs for(var/T in paths) var/datum/job/J = new T joblist[J.title] = J //Languages - paths = typesof(/datum/language)-/datum/language + paths = subtypesof(/datum/language) for(var/T in paths) var/datum/language/L = new T if (isnull(GLOB.all_languages[L.name])) @@ -189,7 +189,7 @@ GLOBAL_LIST_EMPTY(mannequins) //Species var/rkey = 0 - paths = typesof(/datum/species) + paths = subtypesof(/datum/species) for(var/T in paths) rkey++ @@ -214,31 +214,31 @@ GLOBAL_LIST_EMPTY(mannequins) GLOB.whitelisted_species += S.name //Ores - paths = typesof(/ore)-/ore + paths = subtypesof(/ore) for(var/oretype in paths) var/ore/OD = new oretype() GLOB.ore_data[OD.name] = OD - paths = typesof(/datum/alloy)-/datum/alloy + paths = subtypesof(/datum/alloy) for(var/alloytype in paths) GLOB.alloy_data += new alloytype() //Closet appearances GLOB.closet_appearances = decls_repository.get_decls_of_type(/decl/closet_appearance) - paths = typesof(/datum/sprite_accessory/ears) - /datum/sprite_accessory/ears + paths = subtypesof(/datum/sprite_accessory/ears) for(var/path in paths) var/obj/item/clothing/head/instance = new path() ear_styles_list[path] = instance // Custom Tails - paths = typesof(/datum/sprite_accessory/tail) - /datum/sprite_accessory/tail - /datum/sprite_accessory/tail/taur + paths = subtypesof(/datum/sprite_accessory/tail) - /datum/sprite_accessory/tail/taur for(var/path in paths) var/datum/sprite_accessory/tail/instance = new path() tail_styles_list[path] = instance // Custom Wings - paths = typesof(/datum/sprite_accessory/wing) - /datum/sprite_accessory/wing + paths = subtypesof(/datum/sprite_accessory/wing) for(var/path in paths) var/datum/sprite_accessory/wing/instance = new path() wing_styles_list[path] = instance @@ -253,7 +253,7 @@ GLOBAL_LIST_EMPTY(mannequins) /* // Custom species traits - paths = typesof(/datum/trait) - /datum/trait + paths = subtypesof(/datum/trait) - /datum/trait for(var/path in paths) var/datum/trait/instance = new path() if(!instance.name) diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index 16622d1ee6..87cd24a36f 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -492,6 +492,18 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN, SPECIES_GOLEM, //Some special species that may or may not be ever used in event too, SPECIES_SHADEKIN) //Shadefluffers just poof away +/var/global/list/alt_titles_with_icons = list( + "Virologist", + "Apprentice Engineer", + "Medical Intern", + "Research Intern", + "Security Cadet", + "Jr. Cargo Tech", + "Jr. Explorer", + "Server", + "Electrician", + "Barista") + /var/global/list/existing_solargrubs = list() /hook/startup/proc/init_vore_datum_ref_lists() @@ -512,10 +524,10 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN, var/cost = instance.cost traits_costs[path] = cost all_traits[path] = instance - + // Shakey shakey shake sortTim(all_traits, /proc/cmp_trait_datums_name, associative = TRUE) - + // Split 'em up for(var/traitpath in all_traits) var/datum/trait/T = all_traits[traitpath] @@ -529,7 +541,7 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN, everyone_traits[traitpath] = T if(0.1 to INFINITY) positive_traits[traitpath] = T - + // Weaver recipe stuff paths = typesof(/datum/weaver_recipe/structure) - /datum/weaver_recipe/structure diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 5540fe8e08..6c3d63f129 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -686,12 +686,12 @@ Turf and target are seperate in case you want to teleport some distance from a t /proc/return_areas() var/list/area/areas = list() for(var/area/A in world) - areas += A + areas[A.name] = A return areas //Returns: all the areas in the world, sorted. /proc/return_sorted_areas() - return sortAtom(return_areas()) + return sortTim(return_areas(), /proc/cmp_text_asc) //Takes: Area type as text string or as typepath OR an instance of the area. //Returns: A list of all areas of that type in the world. diff --git a/code/controllers/subsystems/persistence.dm b/code/controllers/subsystems/persistence.dm index 792bf63893..52adf3ae21 100644 --- a/code/controllers/subsystems/persistence.dm +++ b/code/controllers/subsystems/persistence.dm @@ -4,6 +4,10 @@ SUBSYSTEM_DEF(persistence) flags = SS_NO_FIRE var/list/tracking_values = list() var/list/persistence_datums = list() + + /// Places our subsystem can spawn paintings (helps with art spawning differently across maps) + var/list/obj/structure/sign/painting/painting_frames = list() + var/list/paintings = list() /datum/controller/subsystem/persistence/Initialize() . = ..() diff --git a/code/datums/outfits/jobs/civilian.dm b/code/datums/outfits/jobs/civilian.dm index cda81f977f..1d299a81db 100644 --- a/code/datums/outfits/jobs/civilian.dm +++ b/code/datums/outfits/jobs/civilian.dm @@ -68,6 +68,7 @@ backpack = /obj/item/weapon/storage/backpack/hydroponics satchel_one = /obj/item/weapon/storage/backpack/satchel/hyd messenger_bag = /obj/item/weapon/storage/backpack/messenger/hyd + sports_bag = /obj/item/weapon/storage/backpack/sport/hyd id_type = /obj/item/weapon/card/id/civilian/service/botanist //VOREStation Edit pda_type = /obj/item/device/pda/botanist diff --git a/code/datums/outfits/jobs/medical.dm b/code/datums/outfits/jobs/medical.dm index 6622d3b285..dd5cb7fbcb 100644 --- a/code/datums/outfits/jobs/medical.dm +++ b/code/datums/outfits/jobs/medical.dm @@ -65,6 +65,7 @@ suit = /obj/item/clothing/suit/storage/toggle/labcoat/chemist backpack = /obj/item/weapon/storage/backpack/chemistry satchel_one = /obj/item/weapon/storage/backpack/satchel/chem + sports_bag = /obj/item/weapon/storage/backpack/sport/chem id_type = /obj/item/weapon/card/id/medical/chemist pda_type = /obj/item/device/pda/chemist diff --git a/code/datums/outfits/jobs/science.dm b/code/datums/outfits/jobs/science.dm index 8920db9b7b..a7b7a71478 100644 --- a/code/datums/outfits/jobs/science.dm +++ b/code/datums/outfits/jobs/science.dm @@ -7,6 +7,7 @@ backpack = /obj/item/weapon/storage/backpack/toxins satchel_one = /obj/item/weapon/storage/backpack/satchel/tox messenger_bag = /obj/item/weapon/storage/backpack/messenger/tox + sports_bag = /obj/item/weapon/storage/backpack/sport/tox /decl/hierarchy/outfit/job/science/rd name = OUTFIT_JOB_NAME("Research Director") diff --git a/code/datums/outfits/jobs/security.dm b/code/datums/outfits/jobs/security.dm index ca4a0a4b85..4a044d8aaa 100644 --- a/code/datums/outfits/jobs/security.dm +++ b/code/datums/outfits/jobs/security.dm @@ -8,6 +8,7 @@ satchel_one = /obj/item/weapon/storage/backpack/satchel/sec backpack_contents = list(/obj/item/weapon/handcuffs = 1) messenger_bag = /obj/item/weapon/storage/backpack/messenger/sec + sports_bag = /obj/item/weapon/storage/backpack/sport/sec /decl/hierarchy/outfit/job/security/hos name = OUTFIT_JOB_NAME("Head of security") diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm index 7791f95b0e..4292556300 100644 --- a/code/datums/outfits/outfit.dm +++ b/code/datums/outfits/outfit.dm @@ -56,6 +56,7 @@ var/list/outfits_decls_by_type_ var/satchel_one = /obj/item/weapon/storage/backpack/satchel/norm var/satchel_two = /obj/item/weapon/storage/backpack/satchel var/messenger_bag = /obj/item/weapon/storage/backpack/messenger + var/sports_bag = /obj/item/weapon/storage/backpack/sport var/flags // Specific flags @@ -76,6 +77,7 @@ var/list/outfits_decls_by_type_ if(3) back = satchel_one if(4) back = satchel_two if(5) back = messenger_bag + if(6) back = sports_bag else back = null /decl/hierarchy/outfit/proc/post_equip(mob/living/carbon/human/H) diff --git a/code/datums/supplypacks/hospitality.dm b/code/datums/supplypacks/hospitality.dm index 1ca6aee620..bcf472a0b9 100644 --- a/code/datums/supplypacks/hospitality.dm +++ b/code/datums/supplypacks/hospitality.dm @@ -79,6 +79,23 @@ containertype = /obj/structure/closet/crate/allico containername = "crate of gifts" +/datum/supply_pack/hospitality/painting + name = "Painting equipment" + contains = list( + /obj/item/paint_brush = 2, + /obj/item/paint_palette = 2, + /obj/item/weapon/reagent_containers/glass/rag = 2, + /obj/structure/easel = 1, // How does that even fit + /obj/item/canvas = 1, + /obj/item/canvas/nineteen_nineteen = 1, + /obj/item/canvas/twentyfour_twentyfour = 1, + /obj/item/canvas/twentythree_nineteen = 1, + /obj/item/canvas/twentythree_twentythree = 1 + ) + cost = 20 + containertype = /obj/structure/closet/crate/centauri + containername = "Painting equipment" + /datum/supply_pack/randomised/hospitality/ group = "Hospitality" diff --git a/code/game/antagonist/outsider/mercenary.dm b/code/game/antagonist/outsider/mercenary.dm index 94b362fca8..623291dde7 100644 --- a/code/game/antagonist/outsider/mercenary.dm +++ b/code/game/antagonist/outsider/mercenary.dm @@ -42,6 +42,7 @@ var/datum/antagonist/mercenary/mercs if(player.backbag == 3) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(player), slot_back) if(player.backbag == 4) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(player), slot_back) if(player.backbag == 5) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(player), slot_back) + if(player.backbag == 6) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/sport(player), slot_back) player.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/cyanide(player), slot_in_backpack) player.mind.tcrystals = DEFAULT_TELECRYSTAL_AMOUNT diff --git a/code/game/antagonist/outsider/wizard.dm b/code/game/antagonist/outsider/wizard.dm index f362f6b3a8..0fcded12c6 100644 --- a/code/game/antagonist/outsider/wizard.dm +++ b/code/game/antagonist/outsider/wizard.dm @@ -83,7 +83,8 @@ var/datum/antagonist/wizard/wizards if(wizard_mob.backbag == 2) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(wizard_mob), slot_back) if(wizard_mob.backbag == 3) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(wizard_mob), slot_back) if(wizard_mob.backbag == 4) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(wizard_mob), slot_back) - if(wizard_mob.backbag == 5) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(wizard_mob), slot_back) + if(wizard_mob.backbag == 5) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(wizard_mob), slot_back) + if(wizard_mob.backbag == 6) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/sport(wizard_mob), slot_back) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/box(wizard_mob), slot_in_backpack) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(wizard_mob), slot_r_store) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/spellbook(wizard_mob), slot_r_hand) diff --git a/code/game/gamemodes/cult/construct_spells.dm b/code/game/gamemodes/cult/construct_spells.dm index 48394146b5..62cdd5bf48 100644 --- a/code/game/gamemodes/cult/construct_spells.dm +++ b/code/game/gamemodes/cult/construct_spells.dm @@ -671,6 +671,6 @@ W.visible_message("\The [user] [attack_message] \the [W], obliterating it!") W.dismantle_wall(1) else - user.visible_message("\The [user] lowers its fist.") + user.visible_message("\The [user] lowers its fist.") return qdel(src) \ No newline at end of file diff --git a/code/game/gamemodes/technomancer/core_obj.dm b/code/game/gamemodes/technomancer/core_obj.dm index 4e78a6ad36..88aa93f4c2 100644 --- a/code/game/gamemodes/technomancer/core_obj.dm +++ b/code/game/gamemodes/technomancer/core_obj.dm @@ -121,7 +121,7 @@ if(L.stat == DEAD) summoned_mobs -= L spawn(1) - L.visible_message("\The [L] begins to fade away...") + L.visible_message("\The [L] begins to fade away...") animate(L, alpha = 255, alpha = 0, time = 30) // Makes them fade into nothingness. sleep(30) qdel(L) diff --git a/code/game/gamemodes/technomancer/spells/abjuration.dm b/code/game/gamemodes/technomancer/spells/abjuration.dm index dd39e1982b..c14356cba8 100644 --- a/code/game/gamemodes/technomancer/spells/abjuration.dm +++ b/code/game/gamemodes/technomancer/spells/abjuration.dm @@ -27,7 +27,7 @@ to_chat(L, "\The [user] tried to teleport you far away, but failed.") return 0 else - visible_message("\The [L] vanishes!") + visible_message("\The [L] vanishes!") qdel(L) else if(istype(L, /mob/living/simple_mob/construct)) var/mob/living/simple_mob/construct/evil = L diff --git a/code/game/gamemodes/technomancer/spells/blink.dm b/code/game/gamemodes/technomancer/spells/blink.dm index 0bbff7b016..f2a2b2051a 100644 --- a/code/game/gamemodes/technomancer/spells/blink.dm +++ b/code/game/gamemodes/technomancer/spells/blink.dm @@ -47,7 +47,7 @@ if(L.buckled) L.buckled.unbuckle_mob() AM.forceMove(destination) - AM.visible_message("\The [AM] vanishes!") + AM.visible_message("\The [AM] vanishes!") to_chat(AM, "You suddenly appear somewhere else!") new /obj/effect/effect/sparks(destination) new /obj/effect/effect/sparks(starting) diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index 72eda8b94a..ddf4b9be33 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -236,7 +236,7 @@ return C.registered_name /proc/get_all_job_icons() //For all existing HUD icons - return joblist + list("Prisoner") + return joblist + alt_titles_with_icons + list("Prisoner") /obj/proc/GetJobName() //Used in secHUD icon generation var/obj/item/weapon/card/id/I = GetID() diff --git a/code/game/jobs/job/assistant_vr.dm b/code/game/jobs/job/assistant_vr.dm index f2fac2e72b..48f240d0ca 100644 --- a/code/game/jobs/job/assistant_vr.dm +++ b/code/game/jobs/job/assistant_vr.dm @@ -16,8 +16,7 @@ access = list() //See /datum/job/intern/get_access() minimal_access = list() //See /datum/job/intern/get_access() outfit_type = /decl/hierarchy/outfit/job/assistant/intern - alt_titles = list("Intern" = /datum/alt_title/intern, - "Apprentice Engineer" = /datum/alt_title/intern_eng, + alt_titles = list("Apprentice Engineer" = /datum/alt_title/intern_eng, "Medical Intern" = /datum/alt_title/intern_med, "Research Intern" = /datum/alt_title/intern_sci, "Security Cadet" = /datum/alt_title/intern_sec, @@ -28,9 +27,6 @@ another job. Though they are part of the crew, they have no real authority." timeoff_factor = 0 // Interns, noh -/datum/alt_title/intern - title = "Intern" - /datum/alt_title/intern_eng title = "Apprentice Engineer" title_blurb = "An Apprentice Engineer attempts to provide whatever the Engineering department needs. They are not proper Engineers, and are \ diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 73c15fd667..e53cd7818c 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -382,7 +382,7 @@ beaker = I user.drop_item() I.loc = src - user.visible_message("\The [user] adds \a [I] to \the [src].", "You add \a [I] to \the [src].") + user.visible_message("\The [user] adds \a [I] to \the [src].", "You add \a [I] to \the [src].") else to_chat(user, "\The [src] has a beaker already.") return diff --git a/code/game/machinery/airconditioner_vr.dm b/code/game/machinery/airconditioner_vr.dm index 4e9ce2d22b..ea54edfa2e 100644 --- a/code/game/machinery/airconditioner_vr.dm +++ b/code/game/machinery/airconditioner_vr.dm @@ -76,7 +76,7 @@ return if(draw_power(idle_power_usage) < idle_power_usage) - visible_message("\The [src] shuts down.") + visible_message("\The [src] shuts down.") turn_off() return diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index 2d5d0a8747..e5e4b65ab4 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -110,7 +110,7 @@ to_chat(user, "You begin to unfasten \the [src]...") if(do_after(user, 40 * W.toolspeed)) user.visible_message( \ - "\The [user] unfastens \the [src].", \ + "\The [user] unfastens \the [src].", \ "You have unfastened \the [src].", \ "You hear ratchet.") new /obj/item/pipe_meter(get_turf(src)) diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm index cc507dad27..fe2c027eb1 100644 --- a/code/game/machinery/bioprinter.dm +++ b/code/game/machinery/bioprinter.dm @@ -163,7 +163,7 @@ printing = 1 update_icon() - visible_message("\The [src] begins churning.") + visible_message("\The [src] begins churning.") sleep(print_delay) @@ -211,7 +211,7 @@ /obj/machinery/organ_printer/proc/can_print(var/choice, var/masscount = 0) var/biomass = get_biomass_volume() if(biomass < masscount) - visible_message("\The [src] displays a warning: 'Not enough biomass. [biomass] stored and [masscount] needed.'") + visible_message("\The [src] displays a warning: 'Not enough biomass. [biomass] stored and [masscount] needed.'") return 0 if(!loaded_dna || !loaded_dna["donor"]) diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 4cfdb16dd0..40ce15d2b0 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -1,38 +1,84 @@ +#define CHARGER_EMPTY 0 +#define CHARGER_WORKING 1 +#define CHARGER_DONE 2 + /obj/machinery/cell_charger name = "heavy-duty cell charger" desc = "A much more powerful version of the standard recharger that is specially designed for charging power cells." icon = 'icons/obj/power.dmi' - icon_state = "ccharger0" + icon_state = "recharger" anchored = 1 use_power = USE_POWER_IDLE + power_channel = EQUIP idle_power_usage = 5 active_power_usage = 60000 //60 kW. (this the power drawn when charging) - var/efficiency = 60000 //will provide the modified power rate when upgraded - power_channel = EQUIP - var/obj/item/weapon/cell/charging = null - var/chargelevel = -1 circuit = /obj/item/weapon/circuitboard/cell_charger + + var/efficiency = 60000 //will provide the modified power rate when upgraded + var/obj/item/weapon/cell/charging = null + var/charging_vis_flags = NONE + var/charge_state = CHARGER_EMPTY /obj/machinery/cell_charger/Initialize() . = ..() default_apply_parts() /obj/machinery/cell_charger/update_icon() - icon_state = "ccharger[charging ? 1 : 0]" + var/new_state + if(!anchored) + new_state = "[initial(icon_state)]4" + return - if(charging && !(stat & (BROKEN|NOPOWER))) + if(stat & (BROKEN|NOPOWER)) + new_state = "[initial(icon_state)]3" + return - var/newlevel = round(charging.percent() * 4.0 / 99) - //to_world("nl: [newlevel]") + switch(charge_state) + if(CHARGER_EMPTY) + new_state = "[initial(icon_state)]0" + if(CHARGER_WORKING) + new_state = "[initial(icon_state)]1" + if(CHARGER_DONE) + new_state = "[initial(icon_state)]2" + + if(icon_state != new_state) + icon_state = new_state - if(chargelevel != newlevel) +/obj/machinery/cell_charger/proc/insert_item(obj/item/W, mob/user) + if(!W || !user) + return - cut_overlays() - add_overlay("ccharger-o[newlevel]") + user.drop_item() + charging = W + charging.loc = src + charging_vis_flags = charging.vis_flags + charging.vis_flags = VIS_INHERIT_ID + vis_contents += charging + + charge_state = CHARGER_WORKING + update_icon() - chargelevel = newlevel + if((stat & (BROKEN|NOPOWER)) || !anchored) + update_use_power(USE_POWER_OFF) else - cut_overlays() + update_use_power(USE_POWER_ACTIVE) + +/obj/machinery/cell_charger/proc/remove_item(mob/user) + if(!charging || !user) + return + + vis_contents -= charging + charging.vis_flags = charging_vis_flags + user.put_in_hands(charging) + charging = null + + charge_state = CHARGER_EMPTY + update_icon() + + if((stat & (BROKEN|NOPOWER)) || !anchored) + update_use_power(USE_POWER_OFF) + else + update_use_power(USE_POWER_IDLE) /obj/machinery/cell_charger/examine(mob/user) . = ..() @@ -60,11 +106,8 @@ to_chat(user, "\The [src] blinks red as you try to insert [W]!") return - user.drop_item() - W.loc = src - charging = W + insert_item(W, user) user.visible_message("[user] inserts [charging] into [src].", "You insert [charging] into [src].") - chargelevel = -1 update_icon() else if(W.is_wrench()) if(charging) @@ -85,12 +128,8 @@ add_fingerprint(user) if(charging) - user.put_in_hands(charging) - charging.update_icon() + remove_item(user) user.visible_message("[user] removes [charging] from [src].", "You remove [charging] from [src].") - - charging = null - chargelevel = -1 update_icon() /obj/machinery/cell_charger/attack_ai(mob/user) @@ -109,6 +148,9 @@ charging.emp_act(severity) ..(severity) +/obj/machinery/cell_charger/power_change() + . = ..() + update_icon() /obj/machinery/cell_charger/process() //to_world("ccpt [charging] [stat]") @@ -116,16 +158,22 @@ update_use_power(USE_POWER_OFF) return - if(charging && !charging.fully_charged()) - charging.give(efficiency*CELLRATE) - update_use_power(USE_POWER_ACTIVE) - + if(charging) + if(!charging.fully_charged()) + charge_state = CHARGER_WORKING + charging.give(efficiency*CELLRATE) + update_use_power(USE_POWER_ACTIVE) + else + charge_state = CHARGER_DONE + update_use_power(USE_POWER_IDLE) update_icon() - else - update_use_power(USE_POWER_IDLE) /obj/machinery/cell_charger/RefreshParts() var/E = 0 for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) E += C.rating - efficiency = active_power_usage * (1+ (E - 1)*0.5) \ No newline at end of file + efficiency = active_power_usage * (1+ (E - 1)*0.5) + +#undef CHARGER_EMPTY +#undef CHARGER_WORKING +#undef CHARGER_DONE \ No newline at end of file diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 8e162b6d56..c6156b7a31 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -234,21 +234,21 @@ GLOBAL_LIST_BOILERPLATE(all_deactivated_AI_cores, /obj/structure/AIcore/deactiva return else if(W.is_wrench()) if(anchored) - user.visible_message("\The [user] starts to unbolt \the [src] from the plating...") + user.visible_message("\The [user] starts to unbolt \the [src] from the plating...") playsound(src, W.usesound, 50, 1) if(!do_after(user,40 * W.toolspeed)) - user.visible_message("\The [user] decides not to unbolt \the [src].") + user.visible_message("\The [user] decides not to unbolt \the [src].") return - user.visible_message("\The [user] finishes unfastening \the [src]!") + user.visible_message("\The [user] finishes unfastening \the [src]!") anchored = 0 return else - user.visible_message("\The [user] starts to bolt \the [src] to the plating...") + user.visible_message("\The [user] starts to bolt \the [src] to the plating...") playsound(src, W.usesound, 50, 1) if(!do_after(user,40 * W.toolspeed)) - user.visible_message("\The [user] decides not to bolt \the [src].") + user.visible_message("\The [user] decides not to bolt \the [src].") return - user.visible_message("\The [user] finishes fastening down \the [src]!") + user.visible_message("\The [user] finishes fastening down \the [src]!") anchored = 1 return else diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm index e23aa459be..23a451eb69 100644 --- a/code/game/machinery/computer/guestpass.dm +++ b/code/game/machinery/computer/guestpass.dm @@ -48,7 +48,7 @@ var/confirm = tgui_alert(usr, "Do you really want to deactivate this guest pass? (you can't reactivate it)", "Confirm Deactivation", list("Yes", "No")) if(confirm == "Yes") //rip guest pass \The [user] deactivates \the [src].") + user.visible_message("\The [user] deactivates \the [src].") icon_state = "guest-invalid" update_icon() expiration_time = world.time diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 616205563d..9b4994892a 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -47,7 +47,7 @@ playsound(src, S.attack_sound, 75, 1) take_damage(damage) else - visible_message("\The [user] bonks \the [src] harmlessly.") + visible_message("\The [user] bonks \the [src] harmlessly.") user.do_attack_animation(src) /obj/machinery/door/New() diff --git a/code/game/machinery/gear_dispenser.dm b/code/game/machinery/gear_dispenser.dm index 562c9906f4..a2723a2597 100644 --- a/code/game/machinery/gear_dispenser.dm +++ b/code/game/machinery/gear_dispenser.dm @@ -258,13 +258,7 @@ var/list/dispenser_presets = list() if((dispenser_flags & GD_UNIQUE) && !emagged) unique_dispense_list |= user.ckey - flick("[icon_state]-scan",src) - visible_message("\The [src] scans its user.", runemessage = "hums") - sleep(30) - flick("[icon_state]-dispense",src) - dispenser_flags |= GD_BUSY - sleep(15) - dispenser_flags &= ~GD_BUSY + animate_dispensing() // Blocks here until animation is done var/turf/T = get_turf(src) if(!(S && T)) // in case we got destroyed while we slept @@ -277,6 +271,15 @@ var/list/dispenser_presets = list() if(greet && user && !user.stat) // in case we got destroyed while we slept to_chat(user,"[S.name] dispensing processed. Have a good day.") +/obj/machinery/gear_dispenser/proc/animate_dispensing() + flick("[icon_state]-scan",src) + visible_message("\The [src] scans its user.", runemessage = "hums") + sleep(30) + flick("[icon_state]-dispense",src) + dispenser_flags |= GD_BUSY + sleep(15) + dispenser_flags &= ~GD_BUSY + /obj/machinery/gear_dispenser/emag_act(remaining_charges, mob/user, emag_source) . = ..() if(!emagged) @@ -292,10 +295,100 @@ var/list/dispenser_presets = list() icon_state = "suitdispenser2" /obj/machinery/gear_dispenser/suit_old - name = "duit dispenser" + name = "suit dispenser" desc = "An industrial U-Tak-It Dispenser unit designed to fetch all kinds of space suits. An older model." icon_state = "suitdispenser" +/obj/machinery/gear_dispenser/suit_fancy + name = "suit dispenser" + desc = "An industrial U-Tak-It Dispenser unit designed to fetch all kinds of space suits. A newer model." + icon_state = "suit_storage_map" + var/obj/effect/overlay/vis/door + var/datum/gear_disp/held_gear_disp + var/special_frame + +/obj/machinery/gear_dispenser/suit_fancy/Initialize(mapload) + . = ..() + door = add_vis_overlay("closed", layer = 4, unique = TRUE) + icon_state = "suit_storage" + if(special_frame) + add_overlay(special_frame) + +/obj/machinery/gear_dispenser/suit_fancy/Destroy() + qdel_null(door) + held_gear_disp = null + return ..() + +/obj/machinery/gear_dispenser/suit_fancy/power_change() + . = ..() + update_icon() + +/obj/machinery/gear_dispenser/suit_fancy/update_icon() + cut_overlays() + + if(special_frame) + add_overlay(special_frame) + + if(needs_power && inoperable()) + add_overlay("nopower") + else + add_overlay("light1") + + if(held_gear_disp) + add_overlay("fullsuit") + if(operable()) + add_overlay("light2") + +/obj/machinery/gear_dispenser/suit_fancy/attack_hand(var/mob/living/carbon/human/user) + if(held_gear_disp) + var/turf/T = get_turf(user) + var/list/spawned = held_gear_disp.spawn_gear(T, user) + for(var/obj/item/I in spawned) + user.put_in_hands(I) + to_chat(user, "You remove the equipment from [src].") + held_gear_disp = null + animate_close() + return + return ..() + +/obj/machinery/gear_dispenser/suit_fancy/dispense(var/datum/gear_disp/S,var/mob/living/carbon/human/user,var/greet=TRUE) + if(!S.amount && !(dispenser_flags & GD_UNLIMITED)) + to_chat(user,"There are no more [S.name]s left!") + dispenser_flags &= ~GD_BUSY + return 1 + else if(!(dispenser_flags & GD_UNLIMITED)) + S.amount-- + if((dispenser_flags & GD_NOGREED) && !emagged) + gear_distributed_to["[type]"] |= user.ckey + if((dispenser_flags & GD_UNIQUE) && !emagged) + unique_dispense_list |= user.ckey + + held_gear_disp = S + + animate_dispensing() + dispenser_flags &= ~GD_BUSY + + if(emagged) + emagged = FALSE + if(greet && user && !user.stat) // in case we got destroyed while we slept + to_chat(user,"[S.name] dispensing processed. Have a good day.") + +/obj/machinery/gear_dispenser/suit_fancy/animate_dispensing() + add_overlay("working") + sleep(5 SECONDS) + add_overlay("fullsuit") + door.icon_state = "open" + flick("anim_open", door) + sleep(10.5) + add_overlay("light2") + cut_overlay("working") + +/obj/machinery/gear_dispenser/suit_fancy/proc/animate_close() + cut_overlay("fullsuit") + cut_overlay("light2") + door.icon_state = "closed" + flick("anim_close", door) + // For fluff/custom items /obj/machinery/gear_dispenser/custom name = "personal gear dispenser" @@ -467,6 +560,13 @@ var/list/dispenser_presets = list() dispenser_flags = GD_ONEITEM|GD_NOGREED|GD_UNLIMITED one_setting = /datum/gear_disp/voidsuit/autolok +/obj/machinery/gear_dispenser/suit_fancy/autolok + name = "AutoLok Suit Dispenser" + desc = "An industrial U-Tak-It Dispenser unit designed to fetch a specific AutoLok mass produced suit." + dispenser_flags = GD_ONEITEM|GD_NOGREED|GD_UNLIMITED + one_setting = /datum/gear_disp/voidsuit/autolok + special_frame = "frame_grey" + // Adminbuse /obj/machinery/gear_dispenser/vv_get_dropdown() . = ..() diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm index 06323a4f06..8cb44be78a 100644 --- a/code/game/machinery/jukebox.dm +++ b/code/game/machinery/jukebox.dm @@ -253,7 +253,7 @@ /obj/machinery/media/jukebox/proc/explode() walk_to(src,0) - src.visible_message("\the [src] blows apart!", 1) + src.visible_message("\The [src] blows apart!", 1) explosion(src.loc, 0, 0, 1, rand(1,2), 1) diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 757a056713..3f61837a16 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -133,6 +133,7 @@ GLOBAL_LIST_BOILERPLATE(allCasters, /obj/machinery/newscaster) light_power = 0.9 light_range = 2 light_color = "#00ff00" + vis_flags = VIS_HIDE // They have an emissive that looks bad in openspace due to their wall-mounted nature var/isbroken = 0 //1 if someone banged it with something heavy var/ispowered = 1 //starts powered, changes with power_change() //var/list/datum/feed_channel/channel_list = list() //This list will contain the names of the feed channels. Each name will refer to a data region where the messages of the feed channels are stored. @@ -333,6 +334,7 @@ GLOBAL_LIST_BOILERPLATE(allCasters, /obj/machinery/newscaster) // Creating Messages // data["channel_name"] = channel_name data["msg"] = msg + data["title"] = title data["photo_data"] = !!photo_data // Printing menu @@ -445,11 +447,11 @@ GLOBAL_LIST_BOILERPLATE(allCasters, /obj/machinery/newscaster) return TRUE if("set_new_message") - msg = sanitize(input(usr, "Write your Feed story", "Network Channel Handler", "") as message|null) + msg = sanitize(tgui_input_message(usr, "Write your Feed story", "Network Channel Handler")) return TRUE if("set_new_title") - title = sanitize(input(usr, "Enter your Feed title", "Network Channel Handler", "") as message|null) + title = sanitize(tgui_input_text(usr, "Enter your Feed title", "Network Channel Handler")) return TRUE if("set_attachment") diff --git a/code/game/machinery/oxygen_pump.dm b/code/game/machinery/oxygen_pump.dm index ee0d44ede0..3673462534 100644 --- a/code/game/machinery/oxygen_pump.dm +++ b/code/game/machinery/oxygen_pump.dm @@ -55,7 +55,7 @@ /obj/machinery/oxygen_pump/attack_hand(mob/user as mob) if((stat & MAINT) && tank) - user.visible_message("\The [user] removes \the [tank] from \the [src].", "You remove \the [tank] from \the [src].") + user.visible_message("\The [user] removes \the [tank] from \the [src].", "You remove \the [tank] from \the [src].") user.put_in_hands(tank) src.add_fingerprint(user) tank.add_fingerprint(user) @@ -69,7 +69,7 @@ tank.forceMove(src) breather.remove_from_mob(contained) contained.forceMove(src) - src.visible_message("\The [user] makes \the [contained] rapidly retract back into \the [src]!") + src.visible_message("\The [user] makes \the [contained] rapidly retract back into \the [src]!") if(breather.internals) breather.internals.icon_state = "internal0" breather = null @@ -140,7 +140,7 @@ user.drop_item() W.forceMove(src) tank = W - user.visible_message("\The [user] installs \the [tank] into \the [src].", "You install \the [tank] into \the [src].") + user.visible_message("\The [user] installs \the [tank] into \the [src].", "You install \the [tank] into \the [src].") src.add_fingerprint(user) if(istype(W, /obj/item/weapon/tank) && !stat) to_chat(user, "Please open the maintenance hatch first.") diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index c458e78ebf..2155b62bcb 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -567,7 +567,7 @@ take_damage(incoming_damage) S.do_attack_animation(src) return 1 - visible_message("\The [L] bonks \the [src]'s casing!") + visible_message("\The [L] bonks \the [src]'s casing!") return ..() /obj/machinery/porta_turret/emag_act(var/remaining_charges, var/mob/user) @@ -1007,7 +1007,7 @@ return var/obj/item/weapon/gun/energy/E = I //typecasts the item to an energy gun if(!user.unEquip(I)) - to_chat(user, "\the [I] is stuck to your hand, you cannot put it in \the [src]") + to_chat(user, "\The [I] is stuck to your hand, you cannot put it in \the [src]") return installation = I.type //installation becomes I.type gun_charge = E.power_supply.charge //the gun's charge is stored in gun_charge @@ -1028,7 +1028,7 @@ if(isprox(I)) build_step = 5 if(!user.unEquip(I)) - to_chat(user, "\the [I] is stuck to your hand, you cannot put it in \the [src]") + to_chat(user, "\The [I] is stuck to your hand, you cannot put it in \the [src]") return to_chat(user, "You add the prox sensor to the turret.") qdel(I) diff --git a/code/game/machinery/reagents/pump.dm b/code/game/machinery/reagents/pump.dm index 04916d4d9b..b73ce06a4a 100644 --- a/code/game/machinery/reagents/pump.dm +++ b/code/game/machinery/reagents/pump.dm @@ -107,7 +107,7 @@ if(Output.get_pairing()) reagents.trans_to_holder(Output.reagents, Output.reagents.maximum_volume) if(prob(5)) - visible_message("\The [src] gurgles as it exports fluid.") + visible_message("\The [src] gurgles as it exports fluid.") if(!on) return @@ -148,7 +148,7 @@ on = 1 update_icon() if(loud) - visible_message("\The [src] turns on.") + visible_message("\The [src] turns on.") return 1 /obj/machinery/pump/proc/turn_off(var/loud = 0) @@ -156,7 +156,7 @@ set_light(0, 0) update_icon() if(loud) - visible_message("\The [src] shuts down.") + visible_message("\The [src] shuts down.") if(!on) return TRUE diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 761fbaa910..03a8ab1665 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -27,12 +27,13 @@ var/list/obj/machinery/requests_console/allConsoles = list() desc = "A console intended to send requests to different departments on the station." anchored = 1 icon = 'icons/obj/terminals_vr.dmi' //VOREStation Edit - icon_state = "req_comp0" + icon_state = "req_comp_0" layer = ABOVE_WINDOW_LAYER circuit = /obj/item/weapon/circuitboard/request blocks_emissive = NONE light_power = 0.25 light_color = "#00ff00" + vis_flags = VIS_HIDE // They have an emissive that looks bad in openspace due to their wall-mounted nature var/department = "Unknown" //The list of all departments on the station (Determined from this variable on each unit) Set this to the same thing if you want several consoles in one department var/list/message_log = list() //List of all messages var/departmentType = 0 //Bitflag. Zero is reply-only. Map currently uses raw numbers instead of defines. @@ -221,8 +222,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() for (var/obj/machinery/requests_console/Console in allConsoles) if(Console.department == department) Console.newmessagepriority = 0 - Console.icon_state = "req_comp0" - Console.set_light(1) + Console.update_icon() if(tempScreen == RCS_MAINMENU) reset_message() screen = tempScreen diff --git a/code/game/machinery/supplybeacon.dm b/code/game/machinery/supplybeacon.dm index 20be7d52ca..c4d90818fc 100644 --- a/code/game/machinery/supplybeacon.dm +++ b/code/game/machinery/supplybeacon.dm @@ -12,11 +12,11 @@ deploy_path = /obj/machinery/power/supply_beacon/supermatter /obj/item/supply_beacon/attack_self(var/mob/user) - user.visible_message("\The [user] begins setting up \the [src].") + user.visible_message("\The [user] begins setting up \the [src].") if(!do_after(user, deploy_time)) return var/obj/S = new deploy_path(get_turf(user)) - user.visible_message("\The [user] deploys \the [S].") + user.visible_message("\The [user] deploys \the [S].") user.unEquip(src) qdel(src) diff --git a/code/game/machinery/virtual_reality/ar_console.dm b/code/game/machinery/virtual_reality/ar_console.dm index 5067c47600..6cf182e106 100644 --- a/code/game/machinery/virtual_reality/ar_console.dm +++ b/code/game/machinery/virtual_reality/ar_console.dm @@ -25,7 +25,7 @@ if(stat & (BROKEN)) if(occupant) go_out() - visible_message("\The [src] emits a low droning sound, before the pod door clicks open.") + visible_message("\The [src] emits a low droning sound, before the pod door clicks open.") return else if(eject_dead && occupant && occupant.stat == DEAD) visible_message("\The [src] sounds an alarm, swinging its hatch open.") diff --git a/code/game/machinery/virtual_reality/vr_console.dm b/code/game/machinery/virtual_reality/vr_console.dm index c529d45da1..0f10b19e7f 100644 --- a/code/game/machinery/virtual_reality/vr_console.dm +++ b/code/game/machinery/virtual_reality/vr_console.dm @@ -40,7 +40,7 @@ if(stat & (NOPOWER|BROKEN)) if(occupant) go_out() - visible_message("\The [src] emits a low droning sound, before the pod door clicks open.") + visible_message("\The [src] emits a low droning sound, before the pod door clicks open.") return else if(eject_dead && occupant && occupant.stat == DEAD) // If someone dies somehow while inside, spit them out. visible_message("\The [src] sounds an alarm, swinging its hatch open.") diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index c540bcf2c0..d472b73363 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -1964,7 +1964,7 @@ if(ishuman(occupant)) GrantActions(occupant, 1) else - visible_message("\The [usr] starts to climb into [src.name]") + visible_message("\The [usr] starts to climb into [src.name]") if(enter_after(40,usr)) if(!src.occupant) moved_inside(usr) @@ -2604,11 +2604,11 @@ var/obj/item/mecha_parts/mecha_equipment/tool/passenger/P = passengers[pname] var/mob/occupant = P.occupant - user.visible_message("\The [user] begins opening the hatch on \the [P]...", "You begin opening the hatch on \the [P]...") + user.visible_message("\The [user] begins opening the hatch on \the [P]...", "You begin opening the hatch on \the [P]...") if (!do_after(user, 40)) return - user.visible_message("\The [user] opens the hatch on \the [P] and removes [occupant]!", "You open the hatch on \the [P] and remove [occupant]!") + user.visible_message("\The [user] opens the hatch on \the [P] and removes [occupant]!", "You open the hatch on \the [P] and remove [occupant]!") P.go_out() P.log_message("[occupant] was removed.") return @@ -2795,7 +2795,7 @@ if(prob(temp_deflect_chance))//Deflected src.log_append_to_last("Armor saved.") src.occupant_message("\The [user]'s attack is stopped by the armor.") - visible_message("\The [user] rebounds off [src.name]'s armor!") + visible_message("\The [user] rebounds off [src.name]'s armor!") user.attack_log += text("\[[time_stamp()]\] attacked [src.name]") playsound(src, 'sound/weapons/slash.ogg', 50, 1, -1) diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index dcbf63688a..d6b21ef674 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -236,7 +236,7 @@ last_itch = world.time to_chat(O.owner, "Your [O.name] itches...") else if(prob(1)) - src.visible_message("\The [src] skitters.") + src.visible_message("\The [src] skitters.") if(amount_grown >= 0) amount_grown += rand(0,2) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 403bb39f15..8c527334c0 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -241,14 +241,15 @@ return var/old_loc = src.loc - src.pickup(user) if (istype(src.loc, /obj/item/weapon/storage)) var/obj/item/weapon/storage/S = src.loc - S.remove_from_storage(src) - + if(!S.remove_from_storage(src)) + return + + src.pickup(user) src.throwing = 0 if (src.loc == user) - if(!user.unEquip(src, null, src)) + if(!user.unEquip(src)) return else if(isliving(src.loc)) @@ -942,3 +943,8 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. // Like the above, but used for RPED sorting of parts. /obj/item/proc/rped_rating() return get_rating() + +/// How are you described if at all when in pockets (or other 'usually not visible' places) +/obj/item/proc/pocket_description(mob/haver, mob/examiner) + return null // most things are hidden + \ No newline at end of file diff --git a/code/game/objects/items/devices/defib.dm b/code/game/objects/items/devices/defib.dm index 6e9cff65e9..90783c803c 100644 --- a/code/game/objects/items/devices/defib.dm +++ b/code/game/objects/items/devices/defib.dm @@ -86,7 +86,7 @@ reattach_paddles(user) else if(istype(W, /obj/item/weapon/cell)) if(bcell) - to_chat(user, "\the [src] already has a cell.") + to_chat(user, "\The [src] already has a cell.") else if(!user.unEquip(W)) return @@ -392,7 +392,7 @@ user.visible_message("\The [user] begins to place [src] on [H]'s chest.", "You begin to place [src] on [H]'s chest...") if(!do_after(user, 30, H)) return - user.visible_message("\The [user] places [src] on [H]'s chest.", "You place [src] on [H]'s chest.") + user.visible_message("\The [user] places [src] on [H]'s chest.", "You place [src] on [H]'s chest.") playsound(src, 'sound/machines/defib_charge.ogg', 50, 0) var/error = can_defib(H) diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index facc87ae64..70e0d3d768 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -41,7 +41,7 @@ if(repairing) to_chat(user, "\The [src] is already being repaired!") return - user.visible_message("\The [user] starts trying to repair \the [src]'s bulb.") + user.visible_message("\The [user] starts trying to repair \the [src]'s bulb.") repairing = TRUE if(do_after(user, (40 SECONDS + rand(0, 20 SECONDS)) * W.toolspeed) && can_repair) if(prob(30)) @@ -50,7 +50,7 @@ update_icon() playsound(src, W.usesound, 50, 1) else - user.visible_message("\The [user] fails to repair \the [src].") + user.visible_message("\The [user] fails to repair \the [src].") repairing = FALSE else ..() diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 54e69c45fa..9595f1ba80 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -115,7 +115,7 @@ if(!vision) to_chat(user, "You can't find any [H.species.vision_organ ? H.species.vision_organ : "eyes"] on [H]!") - user.visible_message("\The [user] directs [src] to [M]'s eyes.", \ + user.visible_message("\The [user] directs [src] to [M]'s eyes.", \ "You direct [src] to [M]'s eyes.") if(H != user) //can't look into your own eyes buster if(M.stat == DEAD || M.blinded) //mob is dead or fully blind diff --git a/code/game/objects/items/devices/modkit.dm b/code/game/objects/items/devices/modkit.dm index 820229fd83..e299a4d390 100644 --- a/code/game/objects/items/devices/modkit.dm +++ b/code/game/objects/items/devices/modkit.dm @@ -49,7 +49,7 @@ playsound(src, O.usesound, 100, 1) - user.visible_message("\The [user] opens \the [src] and modifies \the [O].","You open \the [src] and modify \the [O].") + user.visible_message("\The [user] opens \the [src] and modifies \the [O].","You open \the [src] and modify \the [O].") I.refit_for_species(target_species) diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 746fbd5eab..6fe9aea398 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -32,7 +32,7 @@ tool_qualities = list(TOOL_MULTITOOL) /obj/item/device/multitool/attack_self(mob/living/user) - var/choice = tgui_alert(usr, "What do you want to do with \the [src]?","Multitool Menu", "Switch Mode", list("Clear Buffers", "Cancel")) + var/choice = tgui_alert(usr, "What do you want to do with \the [src]?", "Multitool Menu", list("Switch Mode", "Clear Buffers", "Cancel")) switch(choice) if("Cancel") to_chat(user,"You lower \the [src].") diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 860b8dadd3..fb9f0dea79 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -11,6 +11,7 @@ light_color = "#00ff00" light_power = 0.25 blocks_emissive = NONE + vis_flags = VIS_HIDE // They have an emissive that looks bad in openspace due to their wall-mounted nature var/circuit = /obj/item/weapon/circuitboard/intercom var/number = 0 var/wiresexposed = 0 diff --git a/code/game/objects/items/devices/scanners_vr.dm b/code/game/objects/items/devices/scanners_vr.dm index 4280545743..b0c928e5a2 100644 --- a/code/game/objects/items/devices/scanners_vr.dm +++ b/code/game/objects/items/devices/scanners_vr.dm @@ -270,7 +270,7 @@ var/global/mob/living/carbon/human/dummy/mannequin/sleevemate_mob if(istype(target, /mob/living/carbon/human)) var/mob/living/carbon/human/H = target if(H.resleeve_lock && stored_mind.loaded_from_ckey != H.resleeve_lock) - to_chat(usr,"\[H] is protected from impersonation!") + to_chat(usr,"\The [H] is protected from impersonation!") return usr.visible_message("[usr] begins uploading someone's mind into [target]!","You begin uploading a mind into [target]!") diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 179170fcea..629a383433 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -108,7 +108,7 @@ return 1 else var/available = get_amount() - user.visible_message("\The [user] starts bandaging [M]'s [affecting.name].", \ + user.visible_message("\The [user] starts bandaging [M]'s [affecting.name].", \ "You start bandaging [M]'s [affecting.name]." ) var/used = 0 for (var/datum/wound/W in affecting.wounds) @@ -131,10 +131,10 @@ break if (W.current_stage <= W.max_bleeding_stage) - user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \ + user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \ "You bandage \a [W.desc] on [M]'s [affecting.name]." ) else - user.visible_message("\The [user] places a bandage over \a [W.desc] on [M]'s [affecting.name].", \ + user.visible_message("\The [user] places a bandage over \a [W.desc] on [M]'s [affecting.name].", \ "You place a bandage over \a [W.desc] on [M]'s [affecting.name]." ) W.bandage() playsound(src, pick(apply_sounds), 25) @@ -177,7 +177,7 @@ return 1 else var/available = get_amount() - user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \ + user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \ "You start treating [M]'s [affecting.name]." ) var/used = 0 for (var/datum/wound/W in affecting.wounds) @@ -200,14 +200,14 @@ break if (W.current_stage <= W.max_bleeding_stage) - user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \ + user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \ "You bandage \a [W.desc] on [M]'s [affecting.name]." ) //H.add_side_effect("Itch") else if (W.damage_type == BRUISE) - user.visible_message("\The [user] places a bruise patch over \a [W.desc] on [M]'s [affecting.name].", \ + user.visible_message("\The [user] places a bruise patch over \a [W.desc] on [M]'s [affecting.name].", \ "You place a bruise patch over \a [W.desc] on [M]'s [affecting.name]." ) else - user.visible_message("\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name].", \ + user.visible_message("\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name].", \ "You place a bandaid over \a [W.desc] on [M]'s [affecting.name]." ) W.bandage() // W.disinfect() // VOREStation - Tech1 should not disinfect @@ -250,7 +250,7 @@ to_chat(user, "The wounds on [M]'s [affecting.name] have already been salved.") return 1 else - user.visible_message("\The [user] starts salving wounds on [M]'s [affecting.name].", \ + user.visible_message("\The [user] starts salving wounds on [M]'s [affecting.name].", \ "You start salving the wounds on [M]'s [affecting.name]." ) if(!do_mob(user, M, 10, exclusive = TRUE)) to_chat(user, "You must stand still to salve wounds.") @@ -290,7 +290,7 @@ return 1 else var/available = get_amount() - user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \ + user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \ "You start treating [M]'s [affecting.name]." ) var/used = 0 for (var/datum/wound/W in affecting.wounds) @@ -312,13 +312,13 @@ break if (W.current_stage <= W.max_bleeding_stage) - user.visible_message("\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.", \ + user.visible_message("\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.", \ "You clean and seal \a [W.desc] on [M]'s [affecting.name]." ) else if (W.damage_type == BRUISE) - user.visible_message("\The [user] places a medical patch over \a [W.desc] on [M]'s [affecting.name].", \ + user.visible_message("\The [user] places a medical patch over \a [W.desc] on [M]'s [affecting.name].", \ "You place a medical patch over \a [W.desc] on [M]'s [affecting.name]." ) else - user.visible_message("\The [user] smears some bioglue over \a [W.desc] on [M]'s [affecting.name].", \ + user.visible_message("\The [user] smears some bioglue over \a [W.desc] on [M]'s [affecting.name].", \ "You smear some bioglue over \a [W.desc] on [M]'s [affecting.name]." ) W.bandage() W.disinfect() @@ -358,7 +358,7 @@ to_chat(user, "The wounds on [M]'s [affecting.name] have already been salved.") return 1 else - user.visible_message("\The [user] starts salving wounds on [M]'s [affecting.name].", \ + user.visible_message("\The [user] starts salving wounds on [M]'s [affecting.name].", \ "You start salving the wounds on [M]'s [affecting.name]." ) if(!do_mob(user, M, 10, exclusive = TRUE)) to_chat(user, "You must stand still to salve wounds.") diff --git a/code/game/objects/items/weapons/autopsy.dm b/code/game/objects/items/weapons/autopsy.dm index 7868d2d3ab..100fac14c2 100644 --- a/code/game/objects/items/weapons/autopsy.dm +++ b/code/game/objects/items/weapons/autopsy.dm @@ -177,7 +177,7 @@ if(!S.open) to_chat(user, "You have to cut [S] open first!") return - M.visible_message("\The [user] scans the wounds on [M]'s [S.name] with [src]") + M.visible_message("\The [user] scans the wounds on [M]'s [S.name] with [src]") src.add_data(S) diff --git a/code/game/objects/items/weapons/canes.dm b/code/game/objects/items/weapons/canes.dm index ea0a5fe62a..ff76a1cc4b 100644 --- a/code/game/objects/items/weapons/canes.dm +++ b/code/game/objects/items/weapons/canes.dm @@ -97,7 +97,7 @@ /obj/item/weapon/cane/white/collapsible/attack_self(mob/user as mob) on = !on if(on) - user.visible_message("\The [user] extends the white cane.",\ + user.visible_message("\The [user] extends the white cane.",\ "You extend the white cane.",\ "You hear an ominous click.") icon_state = "whitecane1out" @@ -106,7 +106,7 @@ force = 5 attack_verb = list("smacked", "struck", "cracked", "beaten") else - user.visible_message("\The [user] collapses the white cane.",\ + user.visible_message("\The [user] collapses the white cane.",\ "You collapse the white cane.",\ "You hear a click.") icon_state = "whitecane1in" diff --git a/code/game/objects/items/weapons/circuitboards/computer/research.dm b/code/game/objects/items/weapons/circuitboards/computer/research.dm index 791cd51cdc..8de61a2b91 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/research.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/research.dm @@ -9,7 +9,7 @@ /obj/item/weapon/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob) if(I.is_screwdriver()) playsound(src, I.usesound, 50, 1) - user.visible_message("\The [user] adjusts the jumper on \the [src]'s access protocol pins.", "You adjust the jumper on the access protocol pins.") + user.visible_message("\The [user] adjusts the jumper on \the [src]'s access protocol pins.", "You adjust the jumper on the access protocol pins.") if(build_path == /obj/machinery/computer/rdconsole/core) name = T_BOARD("RD Console - Robotics") build_path = /obj/machinery/computer/rdconsole/robotics diff --git a/code/game/objects/items/weapons/circuitboards/machinery/research.dm b/code/game/objects/items/weapons/circuitboards/machinery/research.dm index 8049096292..4305ecf180 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/research.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/research.dm @@ -14,7 +14,7 @@ /obj/item/weapon/circuitboard/rdserver/attackby(obj/item/I as obj, mob/user as mob) if(I.is_screwdriver()) playsound(src, I.usesound, 50, 1) - user.visible_message("\The [user] adjusts the jumper on \the [src]'s access protocol pins.", "You adjust the jumper on the access protocol pins.") + user.visible_message("\The [user] adjusts the jumper on \the [src]'s access protocol pins.", "You adjust the jumper on the access protocol pins.") if(build_path == /obj/machinery/r_n_d/server/core) name = T_BOARD("RD Console - Robotics") build_path = /obj/machinery/r_n_d/server/robotics diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index cb3184a7f6..2162941ac3 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -11,6 +11,8 @@ var/stage = 0 var/state = 0 var/path = 0 + /// If TRUE, grenade is permanently sealed when fully assembled, useful for things like off-the-shelf grenades. + var/sealed = FALSE var/obj/item/device/assembly_holder/detonator = null var/list/beakers = new/list() var/list/allowed_containers = list(/obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/glass/bottle) @@ -93,7 +95,8 @@ if(active && prob(95)) to_chat(user, "You trigger the assembly!") detonate() - return + else if(sealed) + to_chat(user, "This grenade lacks a way to disassemble it.") else to_chat(user, "You unlock the assembly.") playsound(src, W.usesound, 50, -3) @@ -200,8 +203,10 @@ /obj/item/weapon/grenade/chem_grenade/metalfoam name = "metal-foam grenade" desc = "Used for emergency sealing of air breaches." + icon_state = "foam" path = 1 stage = 2 + sealed = TRUE /obj/item/weapon/grenade/chem_grenade/metalfoam/Initialize() . = ..() @@ -216,13 +221,14 @@ beakers += B1 beakers += B2 - icon_state = initial(icon_state) +"_locked" /obj/item/weapon/grenade/chem_grenade/incendiary name = "incendiary grenade" desc = "Used for clearing rooms of living things." + icon_state = "incendiary" path = 1 stage = 2 + sealed = TRUE /obj/item/weapon/grenade/chem_grenade/incendiary/Initialize() . = ..() @@ -239,13 +245,13 @@ beakers += B1 beakers += B2 - icon_state = initial(icon_state) +"_locked" /obj/item/weapon/grenade/chem_grenade/antiweed name = "weedkiller grenade" desc = "Used for purging large areas of invasive plant species. Contents under pressure. Do not directly inhale contents." path = 1 stage = 2 + sealed = TRUE /obj/item/weapon/grenade/chem_grenade/antiweed/Initialize() . = ..() @@ -266,8 +272,10 @@ /obj/item/weapon/grenade/chem_grenade/cleaner name = "cleaner grenade" desc = "BLAM!-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas." + icon_state = "cleaner" stage = 2 path = 1 + sealed = TRUE /obj/item/weapon/grenade/chem_grenade/cleaner/Initialize() . = ..() @@ -282,13 +290,14 @@ beakers += B1 beakers += B2 - icon_state = initial(icon_state) +"_locked" /obj/item/weapon/grenade/chem_grenade/teargas name = "tear gas grenade" desc = "Concentrated Capsaicin. Contents under pressure. Use with caution." + icon_state = "teargas" stage = 2 path = 1 + sealed = TRUE /obj/item/weapon/grenade/chem_grenade/teargas/Initialize() . = ..() @@ -305,4 +314,4 @@ beakers += B1 beakers += B2 - icon_state = initial(icon_state) +"_locked" \ No newline at end of file + \ No newline at end of file diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 68867e03cd..f2cdabd5f8 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -301,7 +301,7 @@ var/last_chew = 0 return 1 /obj/item/weapon/handcuffs/legcuffs/bola/dropped() - visible_message("\The [src] falls apart!") + visible_message("\The [src] falls apart!") qdel(src) /obj/item/weapon/handcuffs/legcuffs/bola/place_legcuffs(var/mob/living/carbon/target, var/mob/user) @@ -313,7 +313,7 @@ var/last_chew = 0 return 0 if(!H.has_organ_for_slot(slot_legcuffed)) - H.visible_message("\The [src] slams into [H], but slides off!") + H.visible_message("\The [src] slams into [H], but slides off!") src.dropped() return 0 diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm index ea16a3be20..349c212499 100644 --- a/code/game/objects/items/weapons/material/kitchen.dm +++ b/code/game/objects/items/weapons/material/kitchen.dm @@ -75,6 +75,26 @@ /obj/item/weapon/material/kitchen/utensil/fork/plastic default_material = "plastic" +/obj/item/weapon/material/kitchen/utensil/foon + name = "foon" + desc = "It's a foon. The forgotten cousin of the spork." + icon_state = "foon" + sharp = TRUE + edge = FALSE + +/obj/item/weapon/material/kitchen/utensil/foon/plastic + default_material = "plastic" + +/obj/item/weapon/material/kitchen/utensil/spork + name = "spork" + desc = "It's a spork. The (un)holy merger of a spoon and fork." + icon_state = "spork" + sharp = TRUE + edge = FALSE + +/obj/item/weapon/material/kitchen/utensil/spork/plastic + default_material = "plastic" + /obj/item/weapon/material/kitchen/utensil/spoon name = "spoon" desc = "It's a spoon. You can see your own upside-down face in it." diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm index 3086ceae31..44ffb44e39 100644 --- a/code/game/objects/items/weapons/material/knives.dm +++ b/code/game/objects/items/weapons/material/knives.dm @@ -123,6 +123,16 @@ icon_state = "render" applies_material_colour = 0 +/obj/item/weapon/material/knife/table + name = "table knife" + icon = 'icons/obj/kitchen.dmi' + icon_state = "knife_table" + sharp = FALSE // blunted tip + force_divisor = 0.1 + +/obj/item/weapon/material/knife/table/plastic + default_material = "plastic" + /obj/item/weapon/material/knife/butch name = "butcher's cleaver" icon_state = "butch" diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm index 9cb6f78daa..f9b0c11a17 100644 --- a/code/game/objects/items/weapons/policetape.dm +++ b/code/game/objects/items/weapons/policetape.dm @@ -333,7 +333,7 @@ var/list/tape_roll_applications = list() /obj/item/tape/attack_hand(mob/user as mob) if (user.a_intent == I_HELP && src.allowed(user)) - user.show_viewers("\The [user] lifts \the [src], allowing passage.") + user.show_viewers("\The [user] lifts \the [src], allowing passage.") for(var/obj/item/tape/T in gettapeline()) T.lift(100) //~10 seconds else @@ -377,7 +377,7 @@ var/list/tape_roll_applications = list() if(user.a_intent == I_HELP) to_chat(user, "You refrain from breaking \the [src].") return - user.visible_message("\The [user] breaks \the [src]!","You break \the [src].") + user.visible_message("\The [user] breaks \the [src]!","You break \the [src].") for (var/obj/item/tape/T in gettapeline()) if(T == src) diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index b296c58b96..e6370499a0 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -75,57 +75,69 @@ /obj/item/weapon/storage/backpack/cultpack name = "trophy rack" desc = "It's useful for both carrying extra gear and proudly declaring your insanity." - icon_state = "cultpack" + icon_state = "backpack_cult" /obj/item/weapon/storage/backpack/clown name = "Giggles von Honkerton" desc = "It's a backpack made by Honk! Co." - icon_state = "clownpack" + icon_state = "backpack_clown" + +/obj/item/weapon/storage/backpack/white + name = "white backpack" + icon_state = "backpack_white" + +/obj/item/weapon/storage/backpack/fancy + name = "fancy backpack" + icon_state = "backpack_fancy" + +/obj/item/weapon/storage/backpack/military + name = "military backpack" + icon_state = "backpack_military" /obj/item/weapon/storage/backpack/medic name = "medical backpack" desc = "It's a backpack especially designed for use in a sterile environment." - icon_state = "medicalpack" + icon_state = "backpack_medical" /obj/item/weapon/storage/backpack/security name = "security backpack" desc = "It's a very robust backpack." - icon_state = "securitypack" + icon_state = "backpack_security" /obj/item/weapon/storage/backpack/captain name = "site manager's backpack" desc = "It's a special backpack made exclusively for officers." - icon_state = "captainpack" + icon_state = "backpack_captain" /obj/item/weapon/storage/backpack/industrial name = "industrial backpack" desc = "It's a tough backpack for the daily grind of station life." - icon_state = "engiepack" + icon_state = "backpack_industrial" /obj/item/weapon/storage/backpack/toxins name = "laboratory backpack" desc = "It's a light backpack modeled for use in laboratories and other scientific institutions." - icon_state = "toxpack" + icon_state = "backpack_purple" /obj/item/weapon/storage/backpack/hydroponics name = "herbalist's backpack" desc = "It's a green backpack with many pockets to store plants and tools in." - icon_state = "hydpack" + icon_state = "backpack_hydro" /obj/item/weapon/storage/backpack/genetics name = "geneticist backpack" desc = "It's a backpack fitted with slots for diskettes and other workplace tools." - icon_state = "genpack" + icon_state = "backpack_blue" /obj/item/weapon/storage/backpack/virology name = "sterile backpack" desc = "It's a sterile backpack able to withstand different pathogens from entering its fabric." - icon_state = "viropack" + icon_state = "backpack_green" /obj/item/weapon/storage/backpack/chemistry name = "chemistry backpack" desc = "It's an orange backpack which was designed to hold beakers, pill bottles and bottles." - icon_state = "chempack" + icon_state = "backpack_orange" /* * Duffle Types @@ -162,7 +174,7 @@ /obj/item/weapon/storage/backpack/dufflebag/med name = "medical dufflebag" desc = "A large dufflebag for holding extra medical supplies." - icon_state = "duffle_med" + icon_state = "duffle_medical" /obj/item/weapon/storage/backpack/dufflebag/emt name = "EMT dufflebag" @@ -172,17 +184,27 @@ /obj/item/weapon/storage/backpack/dufflebag/sec name = "security dufflebag" desc = "A large dufflebag for holding extra security supplies and ammunition." - icon_state = "duffle_sec" + icon_state = "duffle_security" /obj/item/weapon/storage/backpack/dufflebag/eng name = "industrial dufflebag" desc = "A large dufflebag for holding extra tools and supplies." - icon_state = "duffle_eng" + icon_state = "duffle_industrial" /obj/item/weapon/storage/backpack/dufflebag/sci name = "science dufflebag" desc = "A large dufflebag for holding circuits and beakers." - icon_state = "duffle_sci" + icon_state = "duffle_science" + +/obj/item/weapon/storage/backpack/dufflebag/drone + name = "drone dufflebag" + desc = "A large dufflebag for holding small robots? Or maybe it's one used by robots!" + icon_state = "duffle_drone" + +/obj/item/weapon/storage/backpack/dufflebag/cursed + name = "cursed dufflebag" + desc = "That probably shouldn't be moving..." + icon_state = "duffle_cursed" /* * Satchel Types @@ -192,7 +214,6 @@ name = "leather satchel" desc = "It's a very fancy satchel made with fine leather." icon_state = "satchel" - item_state_slots = list(slot_r_hand_str = "briefcase", slot_l_hand_str = "briefcase") /obj/item/weapon/storage/backpack/satchel/withwallet starts_with = list(/obj/item/weapon/storage/wallet/random) @@ -200,67 +221,70 @@ /obj/item/weapon/storage/backpack/satchel/norm name = "satchel" desc = "A trendy looking satchel." - icon_state = "satchel-norm" + icon_state = "satchel_grey" + +/obj/item/weapon/storage/backpack/satchel/white + name = "white satchel" + icon_state = "satchel_white" + +/obj/item/weapon/storage/backpack/satchel/fancy + name = "fancy satchel" + icon_state = "satchel_fancy" + +/obj/item/weapon/storage/backpack/satchel/military + name = "military satchel" + icon_state = "satchel_military" /obj/item/weapon/storage/backpack/satchel/eng name = "industrial satchel" desc = "A tough satchel with extra pockets." - icon_state = "satchel-eng" - item_state_slots = list(slot_r_hand_str = "engiepack", slot_l_hand_str = "engiepack") + icon_state = "satchel_industrial" /obj/item/weapon/storage/backpack/satchel/med name = "medical satchel" desc = "A sterile satchel used in medical departments." - icon_state = "satchel-med" - item_state_slots = list(slot_r_hand_str = "medicalpack", slot_l_hand_str = "medicalpack") + icon_state = "satchel_medical" /obj/item/weapon/storage/backpack/satchel/vir name = "virologist satchel" desc = "A sterile satchel with virologist colours." - icon_state = "satchel-vir" - item_state_slots = list(slot_r_hand_str = "viropack", slot_l_hand_str = "viropack") + icon_state = "satchel_green" /obj/item/weapon/storage/backpack/satchel/chem name = "chemist satchel" desc = "A sterile satchel with chemist colours." - icon_state = "satchel-chem" - item_state_slots = list(slot_r_hand_str = "chempack", slot_l_hand_str = "chempack") + icon_state = "satchel_orange" /obj/item/weapon/storage/backpack/satchel/gen name = "geneticist satchel" desc = "A sterile satchel with geneticist colours." - icon_state = "satchel-gen" - item_state_slots = list(slot_r_hand_str = "genpack", slot_l_hand_str = "genpack") + icon_state = "satchel_blue" /obj/item/weapon/storage/backpack/satchel/tox name = "scientist satchel" desc = "Useful for holding research materials." - icon_state = "satchel-tox" - item_state_slots = list(slot_r_hand_str = "toxpack", slot_l_hand_str = "toxpack") + icon_state = "satchel_purple" /obj/item/weapon/storage/backpack/satchel/sec name = "security satchel" desc = "A robust satchel for security related needs." - icon_state = "satchel-sec" - item_state_slots = list(slot_r_hand_str = "securitypack", slot_l_hand_str = "securitypack") + icon_state = "satchel_security" /obj/item/weapon/storage/backpack/satchel/hyd name = "hydroponics satchel" desc = "A green satchel for plant related work." - icon_state = "satchel_hyd" + icon_state = "satchel_hydro" /obj/item/weapon/storage/backpack/satchel/cap name = "site manager's satchel" desc = "An exclusive satchel for officers." - icon_state = "satchel-cap" - item_state_slots = list(slot_r_hand_str = "captainpack", slot_l_hand_str = "captainpack") + icon_state = "satchel_captain" //ERT backpacks. /obj/item/weapon/storage/backpack/ert name = "emergency response team backpack" desc = "A spacious backpack with lots of pockets, used by members of the Emergency Response Team." icon_state = "ert_commander" - item_state_slots = list(slot_r_hand_str = "securitypack", slot_l_hand_str = "securitypack") //Commander /obj/item/weapon/storage/backpack/ert/commander @@ -292,59 +316,106 @@ /obj/item/weapon/storage/backpack/messenger name = "messenger bag" desc = "A sturdy backpack worn over one shoulder." - icon_state = "courierbag" - item_state_slots = list(slot_r_hand_str = "backpack", slot_l_hand_str = "backpack") + icon_state = "courier" + item_state_slots = list(slot_r_hand_str = "satchel_grey", slot_l_hand_str = "satchel_grey") /obj/item/weapon/storage/backpack/messenger/chem name = "chemistry messenger bag" desc = "A serile backpack worn over one shoulder. This one is in Chemsitry colors." - icon_state = "courierbagchem" - item_state_slots = list(slot_r_hand_str = "chempack", slot_l_hand_str = "chempack") + icon_state = "courier_chemistry" + item_state_slots = list(slot_r_hand_str = "satchel_orange", slot_l_hand_str = "satchel_orange") /obj/item/weapon/storage/backpack/messenger/med name = "medical messenger bag" desc = "A sterile backpack worn over one shoulder used in medical departments." - icon_state = "courierbagmed" - item_state_slots = list(slot_r_hand_str = "medicalpack", slot_l_hand_str = "medicalpack") + icon_state = "courier_medical" + item_state_slots = list(slot_r_hand_str = "satchel_medical", slot_l_hand_str = "satchel_medical") /obj/item/weapon/storage/backpack/messenger/viro name = "virology messenger bag" desc = "A sterile backpack worn over one shoulder. This one is in Virology colors." - icon_state = "courierbagviro" - item_state_slots = list(slot_r_hand_str = "viropack", slot_l_hand_str = "viropack") + icon_state = "courier_virology" + item_state_slots = list(slot_r_hand_str = "satchel_green", slot_l_hand_str = "satchel_green") /obj/item/weapon/storage/backpack/messenger/tox name = "research messenger bag" desc = "A backpack worn over one shoulder. Useful for holding science materials." - icon_state = "courierbagtox" - item_state_slots = list(slot_r_hand_str = "toxpack", slot_l_hand_str = "toxpack") + icon_state = "courier_toxins" + item_state_slots = list(slot_r_hand_str = "satchel_purple", slot_l_hand_str = "satchel_purple") /obj/item/weapon/storage/backpack/messenger/com name = "command messenger bag" desc = "A special backpack worn over one shoulder. This one is made specifically for officers." - icon_state = "courierbagcom" - item_state_slots = list(slot_r_hand_str = "captainpack", slot_l_hand_str = "captainpack") + icon_state = "courier_captain" + item_state_slots = list(slot_r_hand_str = "satchel_captain", slot_l_hand_str = "satchel_captain") /obj/item/weapon/storage/backpack/messenger/engi name = "engineering messenger bag" - icon_state = "courierbagengi" - item_state_slots = list(slot_r_hand_str = "engiepack", slot_l_hand_str = "engiepack") + icon_state = "courier_industrial" + item_state_slots = list(slot_r_hand_str = "satchel_industrial", slot_l_hand_str = "satchel_industrial") /obj/item/weapon/storage/backpack/messenger/hyd name = "hydroponics messenger bag" desc = "A backpack worn over one shoulder. This one is designed for plant-related work." - icon_state = "courierbaghyd" + icon_state = "courier_hydro" + item_state_slots = list(slot_r_hand_str = "satchel_hydro", slot_l_hand_str = "satchel_hydro") /obj/item/weapon/storage/backpack/messenger/sec name = "security messenger bag" desc = "A tactical backpack worn over one shoulder. This one is in Security colors." - icon_state = "courierbagsec" - item_state_slots = list(slot_r_hand_str = "securitypack", slot_l_hand_str = "securitypack") + icon_state = "courier_security" + item_state_slots = list(slot_r_hand_str = "satchel_security", slot_l_hand_str = "satchel_security") /obj/item/weapon/storage/backpack/messenger/black - icon_state = "courierbagblk" + icon_state = "courier_black" +/* + * Sport Bags + */ + +/obj/item/weapon/storage/backpack/sport + name = "sports backpack" + icon_state = "backsport" + +/obj/item/weapon/storage/backpack/sport/white + name = "white sports backpack" + icon_state = "backsport_white" + +/obj/item/weapon/storage/backpack/sport/fancy + name = "fancy sports backpack" + icon_state = "backsport_fancy" + +/obj/item/weapon/storage/backpack/sport/vir + name = "virologist sports backpack" + desc = "A sterile sports backpack with virologist colours." + icon_state = "backsport_green" + +/obj/item/weapon/storage/backpack/sport/chem + name = "chemist sports backpack" + desc = "A sterile sports backpack with chemist colours." + icon_state = "backsport_orange" + +/obj/item/weapon/storage/backpack/sport/gen + name = "geneticist sports backpack" + desc = "A sterile sports backpack with geneticist colours." + icon_state = "backsport_blue" + +/obj/item/weapon/storage/backpack/sport/tox + name = "scientist sports backpack" + desc = "Useful for holding research materials." + icon_state = "backsport_purple" + +/obj/item/weapon/storage/backpack/sport/sec + name = "security sports backpack" + desc = "A robust sports backpack for security related needs." + icon_state = "backsport_security" + +/obj/item/weapon/storage/backpack/sport/hyd + name = "hydroponics sports backpack" + desc = "A green sports backpack for plant related work." + icon_state = "backsport_hydro" + //Purses /obj/item/weapon/storage/backpack/purse name = "purse" @@ -394,29 +465,29 @@ return if(!parachute) //This packs the parachute - H.visible_message("\The [H] starts to pack \the [src]!", \ + H.visible_message("\The [H] starts to pack \the [src]!", \ "You start to pack \the [src]!", \ "You hear the shuffling of cloth.") if(do_after(H, 50)) - H.visible_message("\The [H] finishes packing \the [src]!", \ + H.visible_message("\The [H] finishes packing \the [src]!", \ "You finish packing \the [src]!", \ "You hear the shuffling of cloth.") parachute = TRUE else - H.visible_message("\The [src] gives up on packing \the [src]!", \ + H.visible_message("\The [src] gives up on packing \the [src]!", \ "You give up on packing \the [src]!") return else //This unpacks the parachute - H.visible_message("\The [src] starts to unpack \the [src]!", \ + H.visible_message("\The [src] starts to unpack \the [src]!", \ "You start to unpack \the [src]!", \ "You hear the shuffling of cloth.") if(do_after(H, 25)) - H.visible_message("\The [src] finishes unpacking \the [src]!", \ + H.visible_message("\The [src] finishes unpacking \the [src]!", \ "You finish unpacking \the [src]!", \ "You hear the shuffling of cloth.") parachute = FALSE else - H.visible_message("\The [src] decides not to unpack \the [src]!", \ + H.visible_message("\The [src] decides not to unpack \the [src]!", \ "You decide not to unpack \the [src]!") return diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 3cf872effb..40d6cfbe23 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -53,6 +53,16 @@ icon_state = "trashbag2" else icon_state = "trashbag3" +/obj/item/weapon/storage/bag/trash/holding + name = "trash bag of holding" + desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage." + icon_state = "bluetrashbag" + origin_tech = list(TECH_BLUESPACE = 3) + max_w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_NORMAL * 10 // Slightly less than BoH + +/obj/item/weapon/storage/bag/trash/holding/update_icon() + return // ----------------------------- // Plastic Bag diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 4d06d52314..673f54340e 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -236,7 +236,7 @@ if(istype(W, /obj/item/clothing/mask/smokable/cigarette)) var/obj/item/clothing/mask/smokable/cigarette/C = W reagents.trans_to_obj(C, (reagents.total_volume/contents.len)) - ..() + return ..() /obj/item/weapon/storage/fancy/cigarettes/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) if(!istype(M, /mob)) @@ -343,7 +343,7 @@ var/obj/item/clothing/mask/smokable/cigarette/cigar/C = W if(!istype(C)) return reagents.trans_to_obj(C, (reagents.total_volume/contents.len)) - ..() + return ..() /obj/item/weapon/storage/rollingpapers name = "rolling paper pack" diff --git a/code/game/objects/items/weapons/storage/pouches.dm b/code/game/objects/items/weapons/storage/pouches.dm new file mode 100644 index 0000000000..38d0660894 --- /dev/null +++ b/code/game/objects/items/weapons/storage/pouches.dm @@ -0,0 +1,186 @@ +#define INVENTORY_POUCH_SPACE ITEMSIZE_COST_SMALL*4 // 25% the size of a backpack for normal size + +// Pouches for small storage in pocket slots +/obj/item/weapon/storage/pouch + name = "storage pouch (medium)" + desc = "This storage pouch can be used to provide some additional storage for quick access." + icon = 'icons/obj/clothing/pouches.dmi' + slot_flags = SLOT_POCKET + drop_sound = 'sound/items/drop/backpack.ogg' + pickup_sound = 'sound/items/pickup/backpack.ogg' + + icon_state = "medium_generic" + max_w_class = ITEMSIZE_NORMAL + max_storage_space = INVENTORY_POUCH_SPACE + can_hold = null + pocketable = TRUE + + var/insert_delay = 0 + var/remove_delay = 2 SECONDS + +/obj/item/weapon/storage/pouch/stall_insertion(obj/item/W, mob/user) + // No delay if you have the pouch in your hands + if(user.get_active_hand() == src || user.get_inactive_hand() == src) + return TRUE // Skip delay + + if(insert_delay && !do_after(user, 2 SECONDS, src, needhand = TRUE, exclusive = TRUE)) + return FALSE // Moved or whatever + + if(W in src) + return TRUE // Item is still inside + + return FALSE + +/obj/item/weapon/storage/pouch/stall_removal(obj/item/W, mob/user) + // No delay if you have the pouch in your hands + if(user.get_active_hand() == src || user.get_inactive_hand() == src) + return TRUE // Skip delay + + if(remove_delay && !do_after(user, 2 SECONDS, src, needhand = TRUE, exclusive = TRUE)) + return FALSE // Moved or whatever + + if(W in src) + return TRUE // Item is still inside + + return FALSE + +/obj/item/weapon/storage/pouch/pocket_description(mob/haver, mob/examiner) + return "[src]" + +/obj/item/weapon/storage/pouch/large + name = "storage pouch (large)" + desc = "This storage pouch can be used to provide a good amount of additional storage for quick access." + icon_state = "large_generic" + max_storage_space = ITEMSIZE_COST_SMALL*6 + +/obj/item/weapon/storage/pouch/small + name = "storage pouch (small)" + desc = "This storage pouch can be used to provide a small amount of additional storage for quick access." + icon_state = "small_generic" + max_storage_space = ITEMSIZE_COST_SMALL*2 + +/obj/item/weapon/storage/pouch/ammo + name = "storage pouch (ammo)" + desc = "This storage pouch can be used to provide some additional storage for quick access. Can only hold ammunition and cells." + icon_state = "ammo" + max_storage_space = INVENTORY_POUCH_SPACE + can_hold = list(/obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/cell/device/weapon) + +/obj/item/weapon/storage/pouch/eng_tool + name = "storage pouch (tools)" + desc = "This storage pouch can be used to provide some additional storage for quick access. Can only hold tools." + icon_state = "engineering_tool" + max_storage_space = INVENTORY_POUCH_SPACE + can_hold = list( + /obj/item/weapon/tool, + /obj/item/weapon/weldingtool, + /obj/item/device/multitool, + /obj/item/device/flashlight, + /obj/item/device/t_scanner, + /obj/item/device/analyzer, + /obj/item/clothing/glasses, + /obj/item/clothing/gloves, + ) + +/obj/item/weapon/storage/pouch/eng_supply + name = "storage pouch (supplies)" + desc = "This storage pouch can be used to provide some additional storage for quick access. Can only hold engineering supplies." + icon_state = "engineering_supply" + max_storage_space = INVENTORY_POUCH_SPACE + can_hold = list( + /obj/item/weapon/cell/device, + /obj/item/stack/cable_coil, + /obj/item/taperoll, + /obj/item/weapon/extinguisher/mini, + /obj/item/weapon/tape_roll + ) + +/obj/item/weapon/storage/pouch/eng_parts + name = "storage pouch (parts)" + desc = "This storage pouch can be used to provide some additional storage for quick access. Can only hold machinery components." + icon_state = "part_pouch" + max_storage_space = INVENTORY_POUCH_SPACE + can_hold = list( + /obj/item/weapon/stock_parts, + /obj/item/stack/cable_coil, + /obj/item/weapon/circuitboard + ) + +/obj/item/weapon/storage/pouch/medical + name = "storage pouch (medical)" + desc = "This storage pouch can be used to provide some additional storage for quick access. Can only hold medical supplies." + icon_state = "medical_supply" + max_storage_space = INVENTORY_POUCH_SPACE + can_hold = list( + /obj/item/device/healthanalyzer, + /obj/item/weapon/dnainjector, + /obj/item/weapon/reagent_containers/dropper, + /obj/item/weapon/reagent_containers/glass/beaker, + /obj/item/weapon/reagent_containers/glass/bottle, + /obj/item/weapon/reagent_containers/pill, + /obj/item/weapon/reagent_containers/syringe, + /obj/item/weapon/storage/quickdraw/syringe_case, + /obj/item/weapon/storage/pill_bottle, + /obj/item/stack/medical, + /obj/item/weapon/reagent_containers/hypospray, + /obj/item/weapon/storage/quickdraw/syringe_case + ) + +/obj/item/weapon/storage/pouch/flares + name = "storage pouch (flares)" + desc = "This storage pouch can be used to provide some additional storage for quick access. Can only hold flares and glowsticks." + icon_state = "flare" + storage_slots = 5 + can_hold = list(/obj/item/device/flashlight/flare, /obj/item/device/flashlight/glowstick) +/obj/item/weapon/storage/pouch/flares/full_flare + starts_with = list(/obj/item/device/flashlight/flare = 5) +/obj/item/weapon/storage/pouch/flares/full_glow + starts_with = list(/obj/item/device/flashlight/glowstick = 5) + +/obj/item/weapon/storage/pouch/flares/update_icon() + cut_overlays() + if(contents.len) + add_overlay("flare_[contents.len]") + ..() + +/obj/item/weapon/storage/pouch/holster + name = "storage pouch (holster)" + desc = "This storage pouch can be used to provide some additional storage for quick access. Can hold one normal sized weapon." + icon_state = "pistol_holster" + storage_slots = 1 + can_hold = list(/obj/item/weapon/gun) + remove_delay = 0 +/obj/item/weapon/storage/pouch/holster/full_stunrevolver + starts_with = list(/obj/item/weapon/gun/energy/stunrevolver) +/obj/item/weapon/storage/pouch/holster/full_taser + starts_with = list(/obj/item/weapon/gun/energy/taser) + +/obj/item/weapon/storage/pouch/holster/update_icon() + cut_overlays() + if(contents.len) + add_overlay("pistol_layer") + ..() + +/obj/item/weapon/storage/pouch/baton + name = "storage pouch (baton)" + desc = "This storage pouch can be used to provide some additional storage for quick access. Can hold one standard baton." + icon_state = "baton_holster" + storage_slots = 1 + can_hold = list(/obj/item/weapon/melee/baton) + remove_delay = 0 +/obj/item/weapon/storage/pouch/baton/full + starts_with = list(/obj/item/weapon/melee/baton) + +/obj/item/weapon/storage/pouch/baton/update_icon() + cut_overlays() + if(contents.len) + add_overlay("baton_layer") + ..() + +/obj/item/weapon/storage/pouch/holding + name = "storage pouch of holding" + desc = "This storage pouch can be used to provide some additional storage for quick access. Seems to use extradimensional storage!" + icon_state = "holdingpouch" + max_storage_space = INVENTORY_STANDARD_SPACE // Size of a normal backpack, compared to a normal BoH, which is way bigger + +#undef INVENTORY_POUCH_SPACE \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index c0414036b5..8bc546a87a 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -49,6 +49,8 @@ var/use_sound = "rustle" //sound played when used. null for no sound. var/list/starts_with //Things to spawn on the box on spawn var/empty //Mapper override to spawn an empty version of a container that usually has stuff + /// If you can use this storage while in a pocket + var/pocketable = FALSE /obj/item/weapon/storage/Initialize() . = ..() @@ -101,6 +103,7 @@ count-- new newtype(src) starts_with = null //Reduce list count. + update_icon() calibrate_size() @@ -473,6 +476,9 @@ /obj/item/weapon/storage/proc/handle_item_insertion(obj/item/W as obj, prevent_warning = 0) if(!istype(W)) return 0 + if(!stall_insertion(W, usr)) // Can sleep here and delay removal for slow storage + return 0 + if(usr) usr.remove_from_mob(W,target = src) //If given a target, handles forceMove() W.on_enter_storage(src) @@ -506,6 +512,9 @@ /obj/item/weapon/storage/proc/remove_from_storage(obj/item/W as obj, atom/new_location) if(!istype(W)) return 0 + if(!stall_removal(W, usr)) // Can sleep here and delay removal for slow storage + return 0 + if(istype(src, /obj/item/weapon/storage/fancy)) var/obj/item/weapon/storage/fancy/F = src F.update_icon(1) @@ -534,6 +543,14 @@ update_icon() return 1 +/// Called before insertion completes, allowing you to delay or cancel it +/obj/item/weapon/storage/proc/stall_insertion(obj/item/W, mob/user) + return TRUE + +/// Called before removal completes, allowing you to delay or cancel it +/obj/item/weapon/storage/proc/stall_removal(obj/item/W, mob/user) + return TRUE + //This proc is called when you want to place an item into the storage item. /obj/item/weapon/storage/attackby(obj/item/W as obj, mob/user as mob) ..() @@ -579,7 +596,7 @@ return /obj/item/weapon/storage/attack_hand(mob/user as mob) - if(ishuman(user)) + if(ishuman(user) && !pocketable) var/mob/living/carbon/human/H = user if(H.l_store == src && !H.get_active_hand()) //Prevents opening if it's in a pocket. H.put_in_hands(src) diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index 6fc53235b5..0ff349f476 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -67,7 +67,7 @@ force = 15//quite robust attack_verb = list("smacked", "struck", "slapped") else - user.visible_message("\The [user] collapses their telescopic baton.",\ + user.visible_message("\The [user] collapses their telescopic baton.",\ "You collapse the baton.",\ "You hear a click.") icon_state = "telebaton0" diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm index 8500af8180..30056ed7a4 100644 --- a/code/game/objects/items/weapons/tools/weldingtool.dm +++ b/code/game/objects/items/weapons/tools/weldingtool.dm @@ -508,7 +508,7 @@ if(mounted_pack.loc != src.loc && src.loc != mounted_pack) mounted_pack.return_nozzle() - visible_message("\The [src] retracts to its fueltank.") + visible_message("\The [src] retracts to its fueltank.") if(get_fuel() <= get_max_fuel()) mounted_pack.reagents.trans_to_obj(src, 1) diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm index 3183d26fe7..48e62010cc 100644 --- a/code/game/objects/random/misc.dm +++ b/code/game/objects/random/misc.dm @@ -71,8 +71,8 @@ /obj/random/powercell name = "random powercell" desc = "This is a random powercell." - icon = 'icons/obj/power.dmi' - icon_state = "cell" + icon = 'icons/obj/power_cells.dmi' + icon_state = "random" /obj/random/powercell/item_to_spawn() return pick(prob(40);/obj/item/weapon/cell, @@ -133,8 +133,8 @@ /obj/random/tech_supply name = "random tech supply" desc = "This is a random piece of technology supplies." - icon = 'icons/obj/power.dmi' - icon_state = "cell" + icon = 'icons/obj/power_cells.dmi' + icon_state = "random" spawn_nothing_percentage = 25 /obj/random/tech_supply/item_to_spawn() @@ -955,3 +955,26 @@ prob(3);/obj/item/clothing/accessory/poncho/thermal/green, prob(3);/obj/item/clothing/accessory/poncho/thermal/purple, prob(3);/obj/item/clothing/accessory/poncho/thermal/blue) + +/obj/random/pouch + name = "Random Storage Pouch" + desc = "This is a random storage pouch." + icon = 'icons/obj/clothing/pouches.dmi' + icon_state = "random" + +/obj/random/pouch/item_to_spawn() + return pick( + prob(10);/obj/item/weapon/storage/pouch, // medium + prob(3);/obj/item/weapon/storage/pouch/large, + prob(8);/obj/item/weapon/storage/pouch/small, + prob(5);/obj/item/weapon/storage/pouch/ammo, + prob(5);/obj/item/weapon/storage/pouch/eng_tool, + prob(5);/obj/item/weapon/storage/pouch/eng_supply, + prob(5);/obj/item/weapon/storage/pouch/eng_parts, + prob(5);/obj/item/weapon/storage/pouch/medical, + prob(5);/obj/item/weapon/storage/pouch/flares/full_flare, + prob(5);/obj/item/weapon/storage/pouch/flares/full_glow, + prob(5);/obj/item/weapon/storage/pouch/holster, + prob(5);/obj/item/weapon/storage/pouch/baton/full, + prob(1);/obj/item/weapon/storage/pouch/holding + ) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 87332c776f..f023f3e395 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -7,7 +7,7 @@ var/climb_delay = 3.5 SECONDS var/breakable var/parts - var/list/climbers = list() + var/list/climbers var/block_turf_edges = FALSE // If true, turf edge icons will not be made on the turf this occupies. var/list/connections = list("0", "0", "0", "0") @@ -35,7 +35,7 @@ if(H.species.can_shred(user)) attack_generic(user,1,"slices") - if(climbers.len && !(user in climbers)) + if(LAZYLEN(climbers) && !(user in climbers)) user.visible_message("[user.name] shakes \the [src].", \ "You shake \the [src].") structure_shaken() @@ -103,21 +103,21 @@ return usr.visible_message("[user] starts climbing onto \the [src]!") - climbers |= user + LAZYDISTINCTADD(climbers, user) if(!do_after(user,(issmall(user) ? climb_delay * 0.6 : climb_delay))) - climbers -= user + LAZYREMOVE(climbers, user) return if (!can_climb(user, post_climb_check=1)) - climbers -= user + LAZYREMOVE(climbers, user) return usr.forceMove(get_turf(src)) if (get_turf(user) == get_turf(src)) usr.visible_message("[user] climbs onto \the [src]!") - climbers -= user + LAZYREMOVE(climbers, user) /obj/structure/proc/structure_shaken() for(var/mob/living/M in climbers) @@ -204,7 +204,7 @@ if(can_visually_connect_to(S)) if(S.can_visually_connect()) if(propagate) - //S.update_connections() //Not here + S.update_connections() S.update_icon() dirs += get_dir(src, S) diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm new file mode 100644 index 0000000000..5324e21576 --- /dev/null +++ b/code/game/objects/structures/artstuff.dm @@ -0,0 +1,561 @@ + +/////////// +// EASEL // +/////////// + +/obj/structure/easel + name = "easel" + desc = "Only for the finest of art!" + icon = 'icons/obj/artstuff.dmi' + icon_state = "easel" + density = TRUE + //resistance_flags = FLAMMABLE + //max_integrity = 60 + var/obj/item/canvas/painting = null + +//Adding canvases +/obj/structure/easel/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/canvas)) + var/obj/item/canvas/canvas = I + user.drop_from_inventory(canvas) + painting = canvas + canvas.forceMove(get_turf(src)) + canvas.layer = layer+0.1 + user.visible_message("[user] puts \the [canvas] on \the [src].","You place \the [canvas] on \the [src].") + else + return ..() + + +//Stick to the easel like glue +/obj/structure/easel/Move() + var/turf/T = get_turf(src) + . = ..() + if(painting && painting.loc == T) //Only move if it's near us. + painting.forceMove(get_turf(src)) + else + painting = null + +/obj/item/canvas + name = "canvas" + desc = "Draw out your soul on this canvas!" + icon = 'icons/obj/artstuff.dmi' + icon_state = "11x11" + //flags_1 = UNPAINTABLE_1 + //resistance_flags = FLAMMABLE + var/width = 11 + var/height = 11 + var/list/grid + var/canvas_color = "#ffffff" //empty canvas color + var/used = FALSE + var/painting_name = "Untitled Artwork" //Painting name, this is set after framing. + var/finalized = FALSE //Blocks edits + var/author_name + var/author_ckey + var/icon_generated = FALSE + var/icon/generated_icon + ///boolean that blocks persistence from saving it. enabled from printing copies, because we do not want to save copies. + var/no_save = FALSE + + /// From the origin of the turf we're on, where should the left of the canvas pixel be + var/framed_offset_x = 11 + /// From the origin of the turf we're on, where should the bottom of the canvas be + var/framed_offset_y = 10 + /// The frame takes the painting's offset, then moves this X offset + var/frame_offset_x = -1 + /// The frame takes the painting's offset, then moves this Y offset + var/frame_offset_y = -1 + + pixel_x = 10 + pixel_y = 9 + +/obj/item/canvas/Initialize() + . = ..() + reset_grid() + +/obj/item/canvas/proc/reset_grid() + grid = new/list(width,height) + for(var/x in 1 to width) + for(var/y in 1 to height) + grid[x][y] = canvas_color + +/obj/item/canvas/attack_self(mob/user) + . = ..() + tgui_interact(user) + +/obj/item/canvas/dropped(mob/user) + pixel_x = initial(pixel_x) + pixel_y = initial(pixel_y) + return ..() + +/obj/item/canvas/tgui_state(mob/user) + if(finalized) + return GLOB.tgui_physical_obscured_state + else + return GLOB.tgui_default_state + +/obj/item/canvas/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Canvas", name) + ui.set_autoupdate(FALSE) + ui.open() + +/obj/item/canvas/attackby(obj/item/I, mob/living/user, params) + if(istype(I, /obj/item/paint_palette)) + var/choice = tgui_alert(user, "Adjusting the base color of this canvas will replace ALL pixels with the selected color. Are you sure?", "Confirm Color Fill", list("Yes", "No")) + if(choice == "No") + return + var/basecolor = input(user, "Select a base color for the canvas:", "Base Color", canvas_color) as null|color + if(basecolor && Adjacent(user, src) && Adjacent(user, I)) + canvas_color = basecolor + reset_grid() + user.visible_message("[user] smears paint on [src], covering the entire thing in paint.", "You smear paint on [src], changing the color of the entire thing.", runemessage = "smears paint") + update_appearance() + return + + if(user.a_intent == I_HELP) + tgui_interact(user) + else + return ..() + +/obj/item/canvas/tgui_data(mob/user) + . = ..() + .["grid"] = grid + .["name"] = painting_name + .["finalized"] = finalized + +/obj/item/canvas/examine(mob/user) + . = ..() + tgui_interact(user) + +/obj/item/canvas/tgui_act(action, params) + . = ..() + if(. || finalized) + return + var/mob/user = usr + switch(action) + if("paint") + var/obj/item/I = user.get_active_hand() + var/color = get_paint_tool_color(I) + if(!color) + return FALSE + var/x = text2num(params["x"]) + var/y = text2num(params["y"]) + grid[x][y] = color + used = TRUE + update_appearance() + . = TRUE + if("finalize") + . = TRUE + if(!finalized) + finalize(user) + +/obj/item/canvas/proc/finalize(mob/user) + finalized = TRUE + author_name = user.real_name + author_ckey = user.ckey + generate_proper_overlay() + try_rename(user) + +/obj/item/canvas/proc/update_appearance() + cut_overlays() + if(icon_generated) + var/mutable_appearance/detail = mutable_appearance(generated_icon) + detail.pixel_x = 1 + detail.pixel_y = 1 + add_overlay(detail) + return + if(!used) + return + + var/mutable_appearance/detail = mutable_appearance(icon, "[icon_state]wip") + detail.pixel_x = 1 + detail.pixel_y = 1 + add_overlay(detail) + +/obj/item/canvas/proc/generate_proper_overlay() + if(icon_generated) + return + var/png_filename = "data/persistent/paintings/temp_painting.png" + var/result = rustg_dmi_create_png(png_filename,"[width]","[height]",get_data_string()) + if(result) + CRASH("Error generating painting png : [result]") + generated_icon = new(png_filename) + icon_generated = TRUE + update_appearance() + +/obj/item/canvas/proc/get_data_string() + var/list/data = list() + for(var/y in 1 to height) + for(var/x in 1 to width) + data += grid[x][y] + return data.Join("") + +//Todo make this element ? +/obj/item/canvas/proc/get_paint_tool_color(obj/item/I) + if(!I) + return + if(istype(I, /obj/item/paint_brush)) + var/obj/item/paint_brush/P = I + return P.selected_color + else if(istype(I, /obj/item/weapon/pen/crayon)) + var/obj/item/weapon/pen/crayon/crayon = I + return crayon.colour + else if(istype(I, /obj/item/weapon/pen)) + var/obj/item/weapon/pen/P = I + switch(P.colour) + if("black") + return "#000000" + if("blue") + return "#0000ff" + if("red") + return "#ff0000" + return P.colour + else if(istype(I, /obj/item/weapon/soap) || istype(I, /obj/item/weapon/reagent_containers/glass/rag)) + return canvas_color + +/obj/item/canvas/proc/try_rename(mob/user) + var/new_name = stripped_input(user,"What do you want to name the painting?") + if(new_name != painting_name && new_name && CanUseTopic(user, GLOB.tgui_physical_state)) + painting_name = new_name + SStgui.update_uis(src) + +/obj/item/canvas/nineteen_nineteen + icon_state = "19x19" + width = 19 + height = 19 + pixel_x = 5 + pixel_y = 10 + framed_offset_x = 8 + framed_offset_y = 9 + +/obj/item/canvas/twentythree_nineteen + icon_state = "23x19" + width = 23 + height = 19 + pixel_x = 4 + pixel_y = 10 + framed_offset_x = 6 + framed_offset_y = 8 + +/obj/item/canvas/twentythree_twentythree + icon_state = "23x23" + width = 23 + height = 23 + pixel_x = 5 + pixel_y = 9 + framed_offset_x = 5 + framed_offset_y = 6 + +/obj/item/canvas/twentyfour_twentyfour + name = "ai universal standard canvas" + //desc = "Besides being very large, the AI can accept these as a display from their internal database after you've hung it up." // Not yet + icon_state = "24x24" + width = 24 + height = 24 + pixel_x = 2 + pixel_y = 2 + framed_offset_x = 4 + framed_offset_y = 4 + frame_offset_x = -2 + frame_offset_y = -2 + +/obj/item/paint_brush + name = "artist's paintbrush" + desc = "When you really want to put together a masterpiece!" + description_info = "Hit this on a palette to set the color, and use it on a canvas to paint with that color." + icon = 'icons/obj/artstuff.dmi' + icon_state = "brush" + var/selected_color = "#000000" + var/image/color_drop + var/hud_level = FALSE + +/obj/item/paint_brush/Initialize() + . = ..() + color_drop = image(icon, null, "brush_color") + color_drop.color = selected_color + +// When picked up +/obj/item/paint_brush/hud_layerise() + . = ..() + hud_level = TRUE + update_paint() + +// When put down +/obj/item/paint_brush/reset_plane_and_layer() + . = ..() + hud_level = FALSE + update_paint() + +/obj/item/paint_brush/proc/update_paint(var/new_color) + if(new_color) + selected_color = new_color + color_drop.color = new_color + + cut_overlays() + if(hud_level) + add_overlay(color_drop) + +/obj/item/paint_palette + name = "artist's palette" + desc = "Helps to have a paintbrush, too." + description_info = "You can hit this on a canvas to set the entire canvas color (but note that it will wipe out any works in progress). You can hit a paintbrush on this to set the color." + icon = 'icons/obj/artstuff.dmi' + icon_state = "palette" + +/obj/item/paint_palette/attackby(obj/item/weapon/W, mob/user) + if(istype(W, /obj/item/paint_brush)) + var/obj/item/paint_brush/P = W + var/newcolor = input(user, "Select a new paint color:", "Paint Palette", P.selected_color) as null|color + if(newcolor && Adjacent(user, P) && Adjacent(user, src)) + P.update_paint(newcolor) + else + return ..() + +/obj/item/frame/painting + name = "painting frame" + desc = "The perfect showcase for your favorite deathtrap memories." + icon = 'icons/obj/decals.dmi' + //custom_materials = list(/datum/material/wood = 2000) + //flags_1 = NONE + icon_state = "frame-empty" + +/obj/item/frame/painting/try_build(turf/on_wall, mob/user as mob) + if(get_dist(on_wall, user) > 1) + return + var/ndir = get_dir(on_wall, user) + if (!(ndir in cardinal)) + return + if(!istype(on_wall, /turf/simulated/wall)) + to_chat(user, "Frame cannot be placed on this spot.") + return + new /obj/structure/sign/painting(get_turf(user), ndir, TRUE) + qdel(src) + +/obj/structure/sign/painting + name = "Painting" + desc = "Art or \"Art\"? You decide." + icon = 'icons/obj/decals.dmi' + icon_state = "frame-empty" + var/base_icon_state = "frame" + //custom_materials = list(/datum/material/wood = 2000) + //buildable_sign = FALSE + ///Canvas we're currently displaying. + var/obj/item/canvas/current_canvas + ///Description set when canvas is added. + var/desc_with_canvas + var/persistence_id + +//Presets for art gallery mapping, for paintings to be shared across stations +/obj/structure/sign/painting/public + name = "\improper Public Painting Exhibit mounting" + desc = "For art pieces hung by the public." + desc_with_canvas = "A piece of art (or \"art\"). Anyone could've hung it." + persistence_id = "public" + +/obj/structure/sign/painting/library_secure + name = "\improper Curated Painting Exhibit mounting" + desc = "For masterpieces hand-picked by the curator." + desc_with_canvas = "A masterpiece hand-picked by the curator, supposedly." + persistence_id = "library" + req_one_access = list(access_library) + +/obj/structure/sign/painting/chapel_secure + name = "\improper Religious Painting Exhibit mounting" + desc = "For masterpieces hand-picked by the chaplain." + desc_with_canvas = "A masterpiece hand-picked by the chaplain, supposedly." + persistence_id = "chapel" + req_one_access = list(access_chapel_office) + +/obj/structure/sign/painting/library_private // keep your smut away from prying eyes, or non-librarians at least + name = "\improper Private Painting Exhibit mounting" + desc = "For art pieces deemed too subversive or too illegal to be shared outside of curators." + desc_with_canvas = "A painting hung away from lesser minds." + persistence_id = "library_private" + req_one_access = list(access_library) + +/obj/structure/sign/painting/Initialize(mapload, dir, building) + . = ..() + if(persistence_id) + SSpersistence.painting_frames += src + if(dir) + set_dir(dir) + if(building) + pixel_x = (dir & 3)? 0 : (dir == 4 ? -30 : 30) + pixel_y = (dir & 3)? (dir ==1 ? -30 : 30) : 0 + +/obj/structure/sign/painting/Destroy() + . = ..() + SSpersistence.painting_frames -= src + +/obj/structure/sign/painting/attackby(obj/item/I, mob/user, params) + if(!current_canvas && istype(I, /obj/item/canvas)) + frame_canvas(user, I) + else if(current_canvas && current_canvas.painting_name == initial(current_canvas.painting_name) && istype(I,/obj/item/weapon/pen)) + try_rename(user) + else if(current_canvas && I.is_wirecutter()) + unframe_canvas(user) + else + return ..() + +/obj/structure/sign/painting/examine(mob/user) + . = ..() + if(persistence_id) + . += "Any painting placed here will be archived at the end of the shift." + if(current_canvas) + current_canvas.tgui_interact(user) + . += "Use wirecutters to remove the painting." + +/obj/structure/sign/painting/proc/frame_canvas(mob/user,obj/item/canvas/new_canvas) + if(!allowed(user)) + to_chat(user, "You're not comfortable framing this canvas in such a prestigious spot!") + return + if(user.drop_from_inventory(new_canvas, src)) + current_canvas = new_canvas + if(!current_canvas.finalized) + current_canvas.finalize(user) + to_chat(user,"You frame [current_canvas].") + update_appearance() + +/obj/structure/sign/painting/proc/unframe_canvas(mob/living/user) + if(current_canvas) + current_canvas.forceMove(drop_location()) + current_canvas = null + to_chat(user, "You remove the painting from the frame.") + update_appearance() + +/obj/structure/sign/painting/proc/try_rename(mob/user) + if(current_canvas.painting_name == initial(current_canvas.painting_name)) + current_canvas.try_rename(user) + +/obj/structure/sign/painting/proc/update_appearance() + name = current_canvas ? "painting - [current_canvas.painting_name]" : initial(name) + desc = current_canvas ? desc_with_canvas : initial(desc) + icon_state = "[base_icon_state]-[current_canvas?.generated_icon ? "hidden" : "empty"]" + + cut_overlays() + + if(!current_canvas?.generated_icon) + return + + . = list() + var/mutable_appearance/MA = mutable_appearance(current_canvas.generated_icon) + MA.pixel_x = current_canvas.framed_offset_x + MA.pixel_y = current_canvas.framed_offset_y + . += MA + var/mutable_appearance/frame = mutable_appearance(current_canvas.icon,"[current_canvas.icon_state]frame") + frame.pixel_x = current_canvas.framed_offset_x + current_canvas.frame_offset_x + frame.pixel_y = current_canvas.framed_offset_y + current_canvas.frame_offset_y + . += frame + + add_overlay(.) + +/obj/item/canvas/proc/fill_grid_from_icon(icon/I) + var/h = I.Height() + 1 + for(var/x in 1 to width) + for(var/y in 1 to height) + grid[x][y] = I.GetPixel(x,h-y) + +/** + * Loads a painting from SSpersistence. Called globally by said subsystem when it inits + * + * Deleting paintings leaves their json, so this proc will remove the json and try again if it finds one of those. + */ +/obj/structure/sign/painting/proc/load_persistent() + if(!persistence_id || !SSpersistence.paintings) + return + var/list/painting_category = list() + for (var/list/P in SSpersistence.paintings) + if(P["persistence_id"] == persistence_id) + painting_category[++painting_category.len] = P + var/list/painting + while(!painting) + if(!length(painting_category)) + return //aborts loading anything this category has no usable paintings + var/list/chosen = pick(painting_category) + if(!fexists("data/persistent/paintings/[persistence_id]/[chosen["md5"]].png")) //shitmin deleted this art, lets remove json entry to avoid errors + painting_category -= list(chosen) + continue //and try again + painting = chosen + var/title = painting["title"] + var/author_name = painting["author"] + var/author_ckey = painting["ckey"] + var/png = "data/persistent/paintings/[persistence_id]/[painting["md5"]].png" + if(!title) + title = "Untitled Artwork" //legacy artwork allowed null names which was bad for the json, lets fix that + painting["title"] = title + var/icon/I = new(png) + var/obj/item/canvas/new_canvas + var/w = I.Width() + var/h = I.Height() + for(var/T in typesof(/obj/item/canvas)) + new_canvas = T + if(initial(new_canvas.width) == w && initial(new_canvas.height) == h) + new_canvas = new T(src) + break + new_canvas.fill_grid_from_icon(I) + new_canvas.generated_icon = I + new_canvas.icon_generated = TRUE + new_canvas.finalized = TRUE + new_canvas.painting_name = title + new_canvas.author_name = author_name + new_canvas.author_ckey = author_ckey + new_canvas.name = "painting - [title]" + current_canvas = new_canvas + update_appearance() + +/obj/structure/sign/painting/proc/save_persistent() + if(!persistence_id || !current_canvas || current_canvas.no_save) + return + if(sanitize_filename(persistence_id) != persistence_id) + stack_trace("Invalid persistence_id - [persistence_id]") + return + if(!current_canvas.painting_name) + current_canvas.painting_name = "Untitled Artwork" + var/data = current_canvas.get_data_string() + var/md5 = md5(lowertext(data)) + LAZYINITLIST(SSpersistence.paintings) + for(var/list/entry in SSpersistence.paintings) + if(entry["md5"] == md5) + return + var/png_directory = "data/persistent/paintings/[persistence_id]/" + var/png_path = png_directory + "[md5].png" + var/result = rustg_dmi_create_png(png_path,"[current_canvas.width]","[current_canvas.height]",data) + if(result) + CRASH("Error saving persistent painting: [result]") + SSpersistence.paintings += list(list( + "persistence_id" = persistence_id, + "title" = current_canvas.painting_name, + "md5" = md5, + "author" = current_canvas.author_name, + "ckey" = current_canvas.author_ckey + )) + +/obj/structure/sign/painting/vv_get_dropdown() + . = ..() + VV_DROPDOWN_OPTION("removepainting", "Remove Persistent Painting") + +/obj/structure/sign/painting/vv_do_topic(list/href_list) + . = ..() + if(href_list["removepainting"]) + if(!check_rights(NONE)) + return + var/mob/user = usr + if(!persistence_id || !current_canvas) + to_chat(user,"This is not a persistent painting.") + return + var/md5 = md5(lowertext(current_canvas.get_data_string())) + var/author = current_canvas.author_ckey + var/list/filenames_found = list() + for(var/list/entry in SSpersistence.paintings) + if(entry["md5"] == md5) + filenames_found += "data/persistent/paintings/[entry["persistence_id"]]/[entry["md5"]].png" + SSpersistence.paintings -= entry + for(var/png in filenames_found) + if(fexists(png)) + fdel(png) + for(var/obj/structure/sign/painting/P in SSpersistence.painting_frames) + if(P.current_canvas && md5(P.current_canvas.get_data_string()) == md5) + QDEL_NULL(P.current_canvas) + P.update_appearance() + log_and_message_admins("[key_name_admin(user)] has deleted persistent painting made by [author].") \ No newline at end of file diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 29498bb2df..c7bab19f0f 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -30,7 +30,7 @@ LINEN BINS /obj/item/weapon/bedsheet/attackby(obj/item/I, mob/user) if(is_sharp(I)) - user.visible_message("\The [user] begins cutting up [src] with [I].", "You begin cutting up [src] with [I].") + user.visible_message("\The [user] begins cutting up [src] with [I].", "You begin cutting up [src] with [I].") if(do_after(user, 50)) to_chat(user, "You cut [src] into pieces!") for(var/i in 1 to rand(2,5)) diff --git a/code/game/objects/structures/bonfire.dm b/code/game/objects/structures/bonfire.dm index 92aad9af87..d5dd625c67 100644 --- a/code/game/objects/structures/bonfire.dm +++ b/code/game/objects/structures/bonfire.dm @@ -160,7 +160,7 @@ burning = FALSE update_icon() STOP_PROCESSING(SSobj, src) - visible_message("\The [src] stops burning.") + visible_message("\The [src] stops burning.") /obj/structure/bonfire/proc/ignite() if(!burning && get_fuel_amount()) @@ -180,8 +180,9 @@ O.fire_act(null, 1000, 500) else if(isliving(A) && get_fuel_amount() > 4) var/mob/living/L = A - L.adjust_fire_stacks(get_fuel_amount() / 4) - L.IgniteMob() + if(!(L.is_incorporeal())) + L.adjust_fire_stacks(get_fuel_amount() / 4) + L.IgniteMob() /obj/structure/bonfire/update_icon() cut_overlays() @@ -353,7 +354,7 @@ burning = FALSE update_icon() STOP_PROCESSING(SSobj, src) - visible_message("\The [src] stops burning.") + visible_message("\The [src] stops burning.") /obj/structure/fireplace/proc/ignite() if(!burning && get_fuel_amount()) diff --git a/code/game/objects/structures/fitness_vr.dm b/code/game/objects/structures/fitness_vr.dm index 6459cd469b..99978fe27c 100644 --- a/code/game/objects/structures/fitness_vr.dm +++ b/code/game/objects/structures/fitness_vr.dm @@ -26,14 +26,14 @@ return usr.visible_message("[user] starts climbing onto \the [src]!") - climbers |= user + LAZYDISTINCTADD(climbers, user) if(!do_after(user,(issmall(user) ? 20 : 34))) - climbers -= user + LAZYREMOVE(climbers, user) return if(!can_climb(user, post_climb_check=1)) - climbers -= user + LAZYREMOVE(climbers, user) return if(get_turf(user) == get_turf(src)) @@ -42,7 +42,7 @@ usr.forceMove(get_turf(src)) usr.visible_message("[user] climbed over \the [src]!") - climbers -= user + LAZYREMOVE(climbers, user) /obj/structure/fitness/boxing_ropes/can_climb(var/mob/living/user, post_climb_check=0) //Sets it to keep people from climbing over into the next turf if it is occupied. if(!..()) @@ -84,14 +84,14 @@ return usr.visible_message("[user] starts climbing onto \the [src]!") - climbers |= user + LAZYDISTINCTADD(climbers, user) if(!do_after(user,(issmall(user) ? 20 : 34))) - climbers -= user + LAZYREMOVE(climbers, user) return if(!can_climb(user, post_climb_check=1)) - climbers -= user + LAZYREMOVE(climbers, user) return if(get_turf(user) == get_turf(src)) @@ -100,7 +100,7 @@ usr.forceMove(get_turf(src)) usr.visible_message("[user] climbed over \the [src]!") - climbers -= user + LAZYREMOVE(climbers, user) /obj/structure/fitness/boxing_ropes_bottom/can_climb(var/mob/living/user, post_climb_check=0) if(!..()) @@ -143,14 +143,14 @@ return usr.visible_message("[user] starts climbing onto \the [src]!") - climbers |= user + LAZYDISTINCTADD(climbers, user) if(!do_after(user,(issmall(user) ? 20 : 34))) - climbers -= user + LAZYREMOVE(climbers, user) return if(!can_climb(user, post_climb_check=1)) - climbers -= user + LAZYREMOVE(climbers, user) return if(get_turf(user) == get_turf(src)) @@ -159,7 +159,7 @@ usr.forceMove(get_turf(src)) usr.visible_message("[user] climbed over \the [src]!") - climbers -= user + LAZYREMOVE(climbers, user) /obj/structure/fitness/boxing_turnbuckle/can_climb(var/mob/living/user, post_climb_check=0) if(!..()) diff --git a/code/game/objects/structures/flora/trees.dm b/code/game/objects/structures/flora/trees.dm index 2ced6ba550..f2cf86e557 100644 --- a/code/game/objects/structures/flora/trees.dm +++ b/code/game/objects/structures/flora/trees.dm @@ -47,7 +47,7 @@ if(is_stump) if(istype(W,/obj/item/weapon/shovel)) if(do_after(user, 5 SECONDS)) - visible_message("\The [user] digs up \the [src] stump with \the [W].") + visible_message("\The [user] digs up \the [src] stump with \the [W].") qdel(src) return diff --git a/code/game/objects/structures/ghost_pods/ghost_pods_vr.dm b/code/game/objects/structures/ghost_pods/ghost_pods_vr.dm index 1c88500020..a792e1b559 100644 --- a/code/game/objects/structures/ghost_pods/ghost_pods_vr.dm +++ b/code/game/objects/structures/ghost_pods/ghost_pods_vr.dm @@ -15,7 +15,7 @@ return if(!activated) - to_chat(user, "\the [src] has not yet been activated. Sorry.") + to_chat(user, "\The [src] has not yet been activated. Sorry.") return if(used) diff --git a/code/game/objects/structures/ledges.dm b/code/game/objects/structures/ledges.dm index 1afa2efb01..cf7c88fc48 100644 --- a/code/game/objects/structures/ledges.dm +++ b/code/game/objects/structures/ledges.dm @@ -55,14 +55,14 @@ return usr.visible_message("[user] starts climbing onto \the [src]!") - climbers |= user + LAZYDISTINCTADD(climbers, user) if(!do_after(user,(issmall(user) ? 20 : 34))) - climbers -= user + LAZYREMOVE(climbers, user) return if(!can_climb(user, post_climb_check=1)) - climbers -= user + LAZYREMOVE(climbers, user) return if(get_turf(user) == get_turf(src)) @@ -71,7 +71,7 @@ usr.forceMove(get_turf(src)) usr.visible_message("[user] climbed over \the [src]!") - climbers -= user + LAZYREMOVE(climbers, user) /obj/structure/ledge/can_climb(var/mob/living/user, post_climb_check=0) if(!..()) diff --git a/code/game/objects/structures/medical_stand_vr.dm b/code/game/objects/structures/medical_stand_vr.dm index 2da7daba7b..e2eca967ff 100644 --- a/code/game/objects/structures/medical_stand_vr.dm +++ b/code/game/objects/structures/medical_stand_vr.dm @@ -129,10 +129,10 @@ qdel(contained) contained = new mask_type(src) breather = null - src.visible_message("\The [contained] slips to \the [src]!") + src.visible_message("\The [contained] slips to \the [src]!") update_icon() return - usr.visible_message("\The [usr] begins carefully placing the mask onto [target].", + usr.visible_message("\The [usr] begins carefully placing the mask onto [target].", "You begin carefully placing the mask onto [target].") if(!do_mob(usr, target, 100) || !can_apply_to_target(target, usr)) return @@ -151,14 +151,14 @@ visible_message("\The [attached] is taken off \the [src]") attached = null else if(ishuman(target)) - usr.visible_message("\The [usr] begins inserting needle into [target]'s vein.", + usr.visible_message("\The [usr] begins inserting needle into [target]'s vein.", "You begin inserting needle into [target]'s vein.") if(!do_mob(usr, target, 50)) usr.visible_message("\The [usr]'s hand slips and pricks \the [target].", "Your hand slips and pricks \the [target].") target.apply_damage(3, BRUTE, pick(BP_R_ARM, BP_L_ARM)) return - usr.visible_message("\The [usr] hooks \the [target] up to \the [src].", + usr.visible_message("\The [usr] hooks \the [target] up to \the [src].", "You hook \the [target] up to \the [src].") attached = target START_PROCESSING(SSobj,src) @@ -184,13 +184,13 @@ to_chat(user, "There is no tank in \the [src]!") return else if (tank && is_loosen) - user.visible_message("\The [user] removes \the [tank] from \the [src].", "You remove \the [tank] from \the [src].>") + user.visible_message("\The [user] removes \the [tank] from \the [src].", "You remove \the [tank] from \the [src].>") user.put_in_hands(tank) tank = null update_icon() return else if (!is_loosen) - user.visible_message("\The [user] tries to removes \the [tank] from \the [src] but it won't budge.", "You try to removes \the [tank] from \the [src] but it won't budge.>") + user.visible_message("\The [user] tries to removes \the [tank] from \the [src] but it won't budge.", "You try to removes \the [tank] from \the [src] but it won't budge.>") return if ("Toggle valve") if (!tank) @@ -198,7 +198,7 @@ return else if (valve_opened) - src.visible_message("\The [user] closes valve on \the [src]!", + src.visible_message("\The [user] closes valve on \the [src]!", "You close valve on \the [src].") if(breather) breather.internals?.icon_state = "internal0" @@ -206,7 +206,7 @@ valve_opened = FALSE update_icon() else - src.visible_message("\The [user] opens valve on \the [src]!", + src.visible_message("\The [user] opens valve on \the [src]!", "You open valve on \the [src].") if(breather) breather.internal = tank @@ -319,7 +319,7 @@ user.drop_item() W.forceMove(src) tank = W - user.visible_message("\The [user] attaches \the [tank] to \the [src].", "You attach \the [tank] to \the [src].") + user.visible_message("\The [user] attaches \the [tank] to \the [src].", "You attach \the [tank] to \the [src].") src.add_fingerprint(user) update_icon() @@ -373,7 +373,7 @@ else qdel(contained) contained = new mask_type (src) - src.visible_message("\The [contained] slips to \the [src]!") + src.visible_message("\The [contained] slips to \the [src]!") breather = null update_icon() return diff --git a/code/game/objects/structures/props/beam_prism.dm b/code/game/objects/structures/props/beam_prism.dm index d70d72d089..a8d22fad50 100644 --- a/code/game/objects/structures/props/beam_prism.dm +++ b/code/game/objects/structures/props/beam_prism.dm @@ -90,11 +90,11 @@ /obj/structure/prop/prism/proc/rotate_auto(var/new_bearing) if(rotation_lock) - visible_message("\The [src] shudders.") + visible_message("\The [src] shudders.") playsound(src, 'sound/effects/clang.ogg', 50, 1) return - visible_message("\The [src] rotates to a bearing of [new_bearing].") + visible_message("\The [src] rotates to a bearing of [new_bearing].") var/rotate_degrees = new_bearing - degrees_from_north diff --git a/code/game/objects/structures/props/prop.dm b/code/game/objects/structures/props/prop.dm index ddabd200e5..1ddd91285e 100644 --- a/code/game/objects/structures/props/prop.dm +++ b/code/game/objects/structures/props/prop.dm @@ -115,6 +115,13 @@ icon = 'icons/obj/structures/decor32x64.dmi' icon_state = "eotp" +// gravity generator from Eris +/obj/structure/prop/gravygen + icon = 'icons/obj/structures/decor64x64.dmi' + icon_state = "bigdice" + bound_width = 64 + bound_height = 64 + // dna vault from /tg/ /obj/structure/prop/dna_vault icon = 'icons/obj/structures/decor96x96.dmi' @@ -271,6 +278,58 @@ /obj/structure/prop/nt_solifier/starts_on icon_state = "nt_solidifier_on" +/** + * Possible 'state' options for change_state(state) are: + * off: Boring, round + * on: Spinny glowy + */ +// conduit of soul from Eris +/obj/structure/prop/conduit + icon = 'icons/obj/structures/decor.dmi' + icon_state = "conduit_off" + +/obj/structure/prop/conduit/change_state(state) + . = ..() + switch(state) + if("on") + icon_state = "conduit_spin" + flick("conduit_starting", src) + if("off") + icon_state = "conduit_off" + flick("conduit_stopping", src) + +/obj/structure/prop/conduit/starts_on + icon_state = "conduit_spin" + +/** + * Possible 'state' options for change_state(state) are: + * on: Doing some kinda worky thing + * off: Not doing much of anything + * empty: No blue crystal thingy + * loaded: off but without the animation + */ +// some kinda NT thing from Eris +/obj/structure/prop/core + icon = 'icons/obj/structures/decor.dmi' + icon_state = "core_inactive" + +/obj/structure/prop/core/change_state(state) + . = ..() + switch(state) + if("on") + icon_state = "core_active" + flick("core_warmup", src) + if("off") + icon_state = "core_inactive" + flick("core_shutdown", src) + if("empty") + icon_state = "core_empty" + if("loaded") + icon_state = "core_inactive" + +/obj/structure/prop/core/starts_on + icon_state = "core_active" + /** * Possible 'state' options for change_state(state) are: * down: In the ground, glowing @@ -278,7 +337,6 @@ */ // experimental science destructor from /tg/ /obj/structure/prop/tube - icon = 'icons/obj/structures/decor.dmi' icon = 'icons/obj/structures/decor32x64.dmi' icon_state = "tube_open" @@ -393,6 +451,62 @@ /obj/structure/prop/nt_optable/starts_active icon_state = "nt_optable-active" +/** + * Possible 'state' options for change_state(state) are: + * idle: The default look + * active: Glowy lights in the center + * panel_open: Opened panel (wiring) + * panel_closed: Closed panel + */ +// trade beacon from Eris +/obj/structure/prop/tradebeacon + icon = 'icons/obj/structures/decor.dmi' + icon_state = "tradebeacon" + +/obj/structure/prop/tradebeacon/change_state(state) + . = ..() + switch(state) + if("idle") + icon_state = "tradebeacon" + if("active") + icon_state = "tradebeacon_active" + if("panel_open") + cut_overlay("tradebeacon_panel") + add_overlay("tradebeacon_panel") + if("panel_closed") + cut_overlay("tradebeacon_panel") + +/obj/structure/prop/tradebeacon/starts_active + icon_state = "tradebeacon_active" + +/** + * Possible 'state' options for change_state(state) are: + * idle: The default look + * active: Glowy lights in the center + * panel_open: Opened panel (wiring) + * panel_closed: Closed panel + */ +// another trade beacon from Eris +/obj/structure/prop/tradebeacon2 + icon = 'icons/obj/structures/decor.dmi' + icon_state = "tradebeacon" + +/obj/structure/prop/tradebeacon2/change_state(state) + . = ..() + switch(state) + if("idle") + icon_state = "tradebeacon_sending" + if("active") + icon_state = "tradebeacon_sending_active" + if("panel_open") + cut_overlay("tradebeacon_sending_panel") + add_overlay("tradebeacon_sending_panel") + if("panel_closed") + cut_overlay("tradebeacon_sending_panel") + +/obj/structure/prop/tradebeacon2/starts_active + icon_state = "tradebeacon_sending_active" + /** * Possible 'state' options for change_state(state) are: * off: Non-spinny @@ -414,6 +528,48 @@ /obj/structure/prop/nt_obelisk/starts_on icon_state = "nt_obelisk_on" +/** + * Possible 'state' options for change_state(state) are: + * off: Inert + * on: Hand destroying machinery + */ +// 'sorter' from Eris +/obj/structure/prop/sorter + icon = 'icons/obj/structures/decor.dmi' + icon_state = "sorter" + +/obj/structure/prop/sorter/change_state(state) + . = ..() + switch(state) + if("off") + icon_state = "sorter" + if("on") + icon_state = "sorter-process" + +/obj/structure/prop/sorter/starts_on + icon_state = "sorter-process" + +/** + * Possible 'state' options for change_state(state) are: + * off: Inert + * on: Hand destroying machinery + */ +// 'smelter' from Eris +/obj/structure/prop/smelter + icon = 'icons/obj/structures/decor.dmi' + icon_state = "smelter" + +/obj/structure/prop/smelter/change_state(state) + . = ..() + switch(state) + if("off") + icon_state = "smelter" + if("on") + icon_state = "smelter-process" + +/obj/structure/prop/smelter/starts_on + icon_state = "smelter-process" + /** * Possible 'state' options for change_state(state) are: * idle: Not doing anything, with yellow template exposed diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm index e039f7806f..876e58c4e3 100644 --- a/code/game/objects/structures/railing.dm +++ b/code/game/objects/structures/railing.dm @@ -205,7 +205,7 @@ if(W.is_wrench() && !anchored) playsound(src, W.usesound, 50, 1) if(do_after(user, 20, src)) - user.visible_message("\The [user] dismantles \the [src].", "You dismantle \the [src].") + user.visible_message("\The [user] dismantles \the [src].", "You dismantle \the [src].") new /obj/item/stack/material/steel(get_turf(usr), 2) qdel(src) return @@ -216,13 +216,13 @@ if(F.welding) playsound(src, F.usesound, 50, 1) if(do_after(user, 20, src)) - user.visible_message("\The [user] repairs some damage to \the [src].", "You repair some damage to \the [src].") + user.visible_message("\The [user] repairs some damage to \the [src].", "You repair some damage to \the [src].") health = min(health+(maxhealth/5), maxhealth) // 20% repair per application return // Install if(W.is_screwdriver()) - user.visible_message(anchored ? "\The [user] begins unscrewing \the [src]." : "\The [user] begins fasten \the [src]." ) + user.visible_message(anchored ? "\The [user] begins unscrewing \the [src]." : "\The [user] begins fasten \the [src]." ) playsound(src, W.usesound, 75, 1) if(do_after(user, 10, src)) to_chat(user, (anchored ? "You have unfastened \the [src] from the floor." : "You have fastened \the [src] to the floor.")) @@ -286,14 +286,14 @@ return usr.visible_message("[user] starts climbing onto \the [src]!") - climbers |= user + LAZYDISTINCTADD(climbers, user) if(!do_after(user,(issmall(user) ? 20 : 34))) - climbers -= user + LAZYREMOVE(climbers, user) return if(!can_climb(user, post_climb_check=1)) - climbers -= user + LAZYREMOVE(climbers, user) return if(get_turf(user) == get_turf(src)) @@ -303,7 +303,7 @@ usr.visible_message("[user] climbed over \the [src]!") if(!anchored) take_damage(maxhealth) // Fatboy - climbers -= user + LAZYREMOVE(climbers, user) /obj/structure/railing/can_climb(var/mob/living/user, post_climb_check=0) if(!..()) diff --git a/code/game/objects/structures/salvageable.dm b/code/game/objects/structures/salvageable.dm index 18fe7ad080..faf6c788aa 100644 --- a/code/game/objects/structures/salvageable.dm +++ b/code/game/objects/structures/salvageable.dm @@ -18,7 +18,7 @@ playsound(src, I.usesound, 50, 1) var/actual_time = I.toolspeed * 170 user.visible_message( \ - "\The [user] begins salvaging from \the [src].", \ + "\The [user] begins salvaging from \the [src].", \ "You start salvaging from \the [src].") if(do_after(user, actual_time, target = src)) user.visible_message( \ diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index ad83b847b8..60bff00cec 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -324,7 +324,7 @@ to_chat(usr, "\The [thing] is empty.") return // Clear the vessel. - visible_message("\The [usr] tips the contents of \the [thing] into \the [src].") + visible_message("\The [usr] tips the contents of \the [thing] into \the [src].") thing.reagents.clear_reagents() thing.update_icon() diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 2ae7c7adfc..6083a38a79 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -215,7 +215,7 @@ damage = damage / 2 take_damage(damage) else - visible_message("\The [user] bonks \the [src] harmlessly.") + visible_message("\The [user] bonks \the [src] harmlessly.") user.do_attack_animation(src) return 1 @@ -302,7 +302,7 @@ if (C.use(1)) playsound(src, 'sound/effects/sparks1.ogg', 75, 1) user.visible_message( \ - "\The [user] begins to wire \the [src] for electrochromic tinting.", \ + "\The [user] begins to wire \the [src] for electrochromic tinting.", \ "You begin to wire \the [src] for electrochromic tinting.", \ "You hear sparks.") if(do_after(user, 20 * C.toolspeed, src) && state == 0) diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm index 67524c05ef..f2902abdfe 100644 --- a/code/game/turfs/simulated/lava.dm +++ b/code/game/turfs/simulated/lava.dm @@ -77,14 +77,14 @@ for(var/thing in thing_to_check) if(isobj(thing)) var/obj/O = thing - if(O.throwing) + if(O.throwing || O.is_incorporeal()) continue . = TRUE O.lava_act() else if(isliving(thing)) var/mob/living/L = thing - if(L.hovering || L.throwing) // Flying over the lava. We're just gonna pretend convection doesn't exist. + if(L.hovering || L.throwing || L.is_incorporeal()) // Flying over the lava. We're just gonna pretend convection doesn't exist. continue . = TRUE L.lava_act() diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm index e826867ab7..85292aa2b3 100644 --- a/code/game/turfs/turf_changing.dm +++ b/code/game/turfs/turf_changing.dm @@ -59,6 +59,7 @@ if(S.zone) S.zone.rebuild() cut_overlays(TRUE) + RemoveElement(/datum/element/turf_z_transparency) if(ispath(N, /turf/simulated/floor)) var/turf/simulated/W = new N( locate(src.x, src.y, src.z) ) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index a0a84ed52c..ff22e219f4 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -688,7 +688,7 @@ var/global/floorIsLava = 0 set desc="Announce your desires to the world" if(!check_rights(0)) return - var/message = input(usr, "Global message to send:", "Admin Announce", null, null) as message//todo: sanitize for all? + var/message = tgui_input_message(usr, "Global message to send:", "Admin Announce") if(message) if(!check_rights(R_SERVER,0)) message = sanitize(message, 500, extra = 0) diff --git a/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm b/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm index 8b7d4b0234..594b3c34d2 100644 --- a/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm +++ b/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm @@ -13,24 +13,25 @@ if (!shuttle_tag) return var/datum/shuttle/S = SSshuttles.shuttles[shuttle_tag] - - var/origin_area = tgui_input_list(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", return_areas()) + + var/list/area_choices = return_areas() + var/origin_area = tgui_input_list(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", area_choices) if (!origin_area) return - var/destination_area = tgui_input_list(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", return_areas()) + var/destination_area = tgui_input_list(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", area_choices) if (!destination_area) return var/long_jump = tgui_alert(user, "Is there a transition area for this jump?","Transition?", list("Yes","No")) if (long_jump == "Yes") - var/transition_area = tgui_input_list(user, "Which area is the transition area? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", return_areas()) + var/transition_area = tgui_input_list(user, "Which area is the transition area? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", area_choices) if (!transition_area) return var/move_duration = input(user, "How many seconds will this jump take?") as num - S.long_jump(origin_area, destination_area, transition_area, move_duration) + S.long_jump(area_choices[origin_area], area_choices[destination_area], area_choices[transition_area], move_duration) message_admins("[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] lasting [move_duration] seconds for the [shuttle_tag] shuttle", 1) log_admin("[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] lasting [move_duration] seconds for the [shuttle_tag] shuttle") else - S.short_jump(origin_area, destination_area) + S.short_jump(area_choices[origin_area], area_choices[destination_area]) message_admins("[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] for the [shuttle_tag] shuttle", 1) log_admin("[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] for the [shuttle_tag] shuttle") diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index dc3c696cf3..3868c4271a 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1278,7 +1278,7 @@ var/client/C = usr.client if(!isobserver(usr)) C.admin_ghost() sleep(2) - C.jumptomob(M) + C.do_jumptomob(M) else if(href_list["adminplayerobservefollow"]) if(!check_rights(R_MOD|R_ADMIN|R_SERVER)) //VOREStation Edit diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index 185d911b07..fc32742583 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -39,6 +39,7 @@ tgui_alert_async(usr, "Admin jumping disabled") return +/// Verb wrapper around do_jumptomob() /client/proc/jumptomob() set category = "Admin" set name = "Jump to Mob" @@ -47,24 +48,30 @@ if(!check_rights(R_ADMIN|R_MOD|R_DEBUG|R_EVENT)) return - if(config.allow_admin_jump) - var/mob/M = tgui_input_list(usr, "Pick a mob:", "Jump to Mob", mob_list) - if(!M) - return + var/mob/M = tgui_input_list(usr, "Pick a mob:", "Jump to Mob", mob_list) + if(!M) // Cancelled + return + do_jumptomob(M) + +/// Performs the jumps +/client/proc/do_jumptomob(var/mob/M) + if(!config.allow_admin_jump) + tgui_alert_async(usr, "Admin jumping disabled") + return + if(!M) + return + + var/mob/A = src.mob // Impossible to be unset, enforced by byond + var/turf/T = get_turf(M) + if(isturf(T)) + A.on_mob_jump() + A.forceMove(T) log_admin("[key_name(usr)] jumped to [key_name(M)]") message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1) - if(src.mob) - var/mob/A = src.mob - var/turf/T = get_turf(M) - if(T && isturf(T)) - feedback_add_details("admin_verb","JM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - A.on_mob_jump() - A.forceMove(T) - else - to_chat(A, "This mob is not located in the game world.") + feedback_add_details("admin_verb","JM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! else - tgui_alert_async(usr, "Admin jumping disabled") - + to_chat(A, "This mob is not located in the game world.") + /client/proc/jumptocoord(tx as num, ty as num, tz as num) set category = "Admin" set name = "Jump to Coordinate" diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 79391fc29d..fe21599691 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -273,12 +273,12 @@ Ccomp's first proc. var/target = tgui_input_list(usr, "Select a ckey to allow to rejoin", "Allow Respawn Selector", GLOB.respawn_timers) if(!target) return - + if(GLOB.respawn_timers[target] == -1) // Their respawn timer is set to -1, which is 'not allowed to respawn' var/response = tgui_alert(src, "Are you sure you wish to allow this individual to respawn? They would normally not be able to.","Allow impossible respawn?",list("No","Yes")) if(response == "No") return - + GLOB.respawn_timers -= target var/found_client = FALSE @@ -295,7 +295,7 @@ Ccomp's first proc. if(!found_client) to_chat(src, "The associated client didn't appear to be connected, so they couldn't be notified, but they can now respawn if they reconnect.") - + log_admin("[key_name(usr)] allowed [found_client ? key_name(found_client) : target] to bypass the respawn time limit") message_admins("Admin [key_name_admin(usr)] allowed [found_client ? key_name_admin(found_client) : target] to bypass the respawn time limit", 1) @@ -483,7 +483,7 @@ Traitors and the like can also be revived with the previous role mostly intact. return new_character = new(spawnloc) - + if(sparks) anim(spawnloc,new_character,'icons/mob/mob.dmi',,"phasein",,new_character.dir) playsound(spawnloc, "sparks", 50, 1) @@ -538,6 +538,8 @@ Traitors and the like can also be revived with the previous role mostly intact. //A redraw for good measure new_character.regenerate_icons() + new_character.update_transform() //VOREStation Edit + //If we're announcing their arrival if(announce) AnnounceArrival(new_character, new_character.mind.assigned_role, "Common", new_character.z) diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm index 8219b07300..4211bb8add 100644 --- a/code/modules/client/preference_setup/general/01_basic.dm +++ b/code/modules/client/preference_setup/general/01_basic.dm @@ -100,7 +100,7 @@ return TOPIC_REFRESH else if(href_list["nickname"]) - var/raw_nickname = input(user, "Choose your character's nickname:", "Character Nickname") as text|null + var/raw_nickname = tgui_input_text(user, "Choose your character's nickname:", "Character Nickname", pref.nickname) if (!isnull(raw_nickname) && CanUseTopic(user)) var/new_nickname = sanitize_name(raw_nickname, pref.species, is_FBP()) if(new_nickname) @@ -140,7 +140,7 @@ return TOPIC_REFRESH else if(href_list["metadata"]) - var/new_metadata = sanitize(input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , html_decode(pref.metadata)) as message|null, extra = 0) //VOREStation Edit + var/new_metadata = sanitize(tgui_input_message(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , html_decode(pref.metadata)), extra = 0) //VOREStation Edit if(new_metadata && CanUseTopic(user)) pref.metadata = new_metadata return TOPIC_REFRESH diff --git a/code/modules/client/preference_setup/general/04_equipment.dm b/code/modules/client/preference_setup/general/04_equipment.dm index f1bf1c8c3f..6c0aa76730 100644 --- a/code/modules/client/preference_setup/general/04_equipment.dm +++ b/code/modules/client/preference_setup/general/04_equipment.dm @@ -36,8 +36,8 @@ pref.all_underwear -= underwear_category_name // TODO - Looks like this is duplicating the work of sanitize_character() if so, remove - if(pref.backbag > 5 || pref.backbag < 1) - pref.backbag = 1 //Same as above + if(pref.backbag > backbaglist.len || pref.backbag < 1) + pref.backbag = 2 //Same as above character.backbag = pref.backbag if(pref.pdachoice > 6 || pref.pdachoice < 1) diff --git a/code/modules/client/preference_setup/loadout/loadout_cosmetics_vr.dm b/code/modules/client/preference_setup/loadout/loadout_cosmetics_vr.dm new file mode 100644 index 0000000000..c538c66410 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_cosmetics_vr.dm @@ -0,0 +1,20 @@ +/datum/gear/cosmetic/nailpolish + display_name = "nail polish (colorable)" + description = "Nail polish, available in every color of the rainbow! Doesn't come with nail polish remover." + path = /obj/item/weapon/nailpolish + +/datum/gear/cosmetic/nailpolish/New() + ..() + // can't set description, it'll look funny + gear_tweaks = list(gear_tweak_free_color_choice, gear_tweak_free_name) + +/datum/gear/cosmetic/nailpolish/spawn_item(var/location, var/metadata) + var/obj/item/weapon/nailpolish/polish = ..() + polish.set_colour(polish.color) + polish.color = null + return polish + +/datum/gear/cosmetic/nailpolish_remover + display_name = "nail polish remover" + description = "Nail polish remover, for when the fun's over. Doesn't come with nail polish." + path = /obj/item/weapon/nailpolish_remover \ No newline at end of file diff --git a/code/modules/client/preference_setup/vore/02_size.dm b/code/modules/client/preference_setup/vore/02_size.dm index 19df50973f..95a944e931 100644 --- a/code/modules/client/preference_setup/vore/02_size.dm +++ b/code/modules/client/preference_setup/vore/02_size.dm @@ -87,19 +87,19 @@ return TOPIC_REFRESH else if(href_list["weight_gain"]) - var/weight_gain_rate = input(user, "Choose your character's rate of weight gain between 100% \ + var/weight_gain_rate = tgui_input_num(user, "Choose your character's rate of weight gain between 100% \ (full realism body fat gain) and 0% (no body fat gain).\n\ (If you want to disable weight gain, set this to 0.01 to round it to 0%.)\ - ([WEIGHT_CHANGE_MIN]-[WEIGHT_CHANGE_MAX])", "Character Preference") as num|null + ([WEIGHT_CHANGE_MIN]-[WEIGHT_CHANGE_MAX])", "Character Preference", pref.weight_gain) if(weight_gain_rate) pref.weight_gain = round(text2num(weight_gain_rate),1) return TOPIC_REFRESH else if(href_list["weight_loss"]) - var/weight_loss_rate = input(user, "Choose your character's rate of weight loss between 100% \ + var/weight_loss_rate = tgui_input_num(user, "Choose your character's rate of weight loss between 100% \ (full realism body fat loss) and 0% (no body fat loss).\n\ (If you want to disable weight loss, set this to 0.01 round it to 0%.)\ - ([WEIGHT_CHANGE_MIN]-[WEIGHT_CHANGE_MAX])", "Character Preference") as num|null + ([WEIGHT_CHANGE_MIN]-[WEIGHT_CHANGE_MAX])", "Character Preference", pref.weight_loss) if(weight_loss_rate) pref.weight_loss = round(text2num(weight_loss_rate),1) return TOPIC_REFRESH diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 37b2c3598b..e58b71ca72 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -677,7 +677,7 @@ user.unEquip(I) I.forceMove(src) holding = I - user.visible_message("\The [user] shoves \the [I] into \the [src].") + user.visible_message("\The [user] shoves \the [I] into \the [src].") verbs |= /obj/item/clothing/shoes/proc/draw_knife update_icon() else diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index bb0ca1ee39..3abb4c223f 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -62,7 +62,7 @@ //TODO: Make inflating gloves a thing /*/obj/item/clothing/gloves/sterile/proc/Inflate(/mob/living/carbon/human/user) - user.visible_message("\The [src] expands!") + user.visible_message("\The [src] expands!") qdel(src)*/ /obj/item/clothing/gloves/sterile/latex diff --git a/code/modules/clothing/spacesuits/void/void_vr.dm b/code/modules/clothing/spacesuits/void/void_vr.dm index 1ee289ae06..ae10305eb5 100644 --- a/code/modules/clothing/spacesuits/void/void_vr.dm +++ b/code/modules/clothing/spacesuits/void/void_vr.dm @@ -141,13 +141,14 @@ /obj/item/clothing/suit/space/void/autolok name = "AutoLok pressure suit" desc = "A high-tech snug-fitting pressure suit. Fits any species. It offers very little physical protection, but is equipped with sensors that will automatically deploy the integral helmet to protect the wearer." + icon = 'icons/obj/clothing/suits_vr.dmi' icon_state = "autoloksuit" item_state = "autoloksuit" + item_state_slots = list(slot_r_hand_str = "space_suit_syndicate", slot_l_hand_str = "space_suit_syndicate") armor = list(melee = 15, bullet = 5, laser = 5,energy = 5, bomb = 5, bio = 100, rad = 80) slowdown = 0.5 siemens_coefficient = 1 species_restricted = list("exclude",SPECIES_DIONA,SPECIES_VOX) //this thing can autoadapt - icon = 'icons/obj/clothing/suits_vr.dmi' breach_threshold = 6 //this thing is basically tissue paper w_class = ITEMSIZE_NORMAL //if it's snug, high-tech, and made of relatively soft materials, it should be much easier to store! diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm index 97140e6f29..4ec669a565 100644 --- a/code/modules/detectivework/tools/rag.dm +++ b/code/modules/detectivework/tools/rag.dm @@ -152,7 +152,7 @@ return if(A.reagents && A.reagents.trans_to_obj(src, reagents.maximum_volume)) - user.visible_message("\The [user] soaks [src] using [A].", "You soak [src] using [A].") + user.visible_message("\The [user] soaks [src] using [A].", "You soak [src] using [A].") update_name() return diff --git a/code/modules/economy/vending.dm b/code/modules/economy/vending.dm index e4b4998171..4086dcd921 100644 --- a/code/modules/economy/vending.dm +++ b/code/modules/economy/vending.dm @@ -580,7 +580,7 @@ GLOBAL_LIST_EMPTY(vending_products) if(prob(1)) sleep(3) if(R.get_product(get_turf(src))) - visible_message("\The [src] clunks as it vends an additional item.") + visible_message("\The [src] clunks as it vends an additional item.") playsound(src, "sound/[vending_sound]", 100, 1, 1) GLOB.items_sold_shift_roundstat++ diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm index 5605a5a702..d9757b0c75 100644 --- a/code/modules/food/food/snacks.dm +++ b/code/modules/food/food/snacks.dm @@ -235,7 +235,7 @@ user.visible_message("\The [user] crudely slices \the [src] with [W]!", "You crudely slice \the [src] with your [W]!") slices_lost = rand(1,min(1,round(slices_num/2))) else - user.visible_message("\The [user] slices \the [src]!", "You slice \the [src]!") + user.visible_message("\The [user] slices \the [src]!", "You slice \the [src]!") var/reagents_per_slice = reagents.total_volume/slices_num for(var/i=1 to (slices_num-slices_lost)) @@ -1833,7 +1833,7 @@ Unwrap(user) /obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand() - src.visible_message("\The [src] expands!") + src.visible_message("\The [src] expands!") var/mob/living/carbon/human/H = new(get_turf(src)) H.set_species(monkey_type) H.real_name = H.species.get_random_name() diff --git a/code/modules/food/food/snacks_vr.dm b/code/modules/food/food/snacks_vr.dm index 6b9f15ff5a..f8509d4392 100644 --- a/code/modules/food/food/snacks_vr.dm +++ b/code/modules/food/food/snacks_vr.dm @@ -476,7 +476,7 @@ . = ..() /obj/item/weapon/reagent_containers/food/snacks/cube/proc/Expand() - src.visible_message("\The [src] expands!") + src.visible_message("\The [src] expands!") new food_type(get_turf(src)) qdel(src) diff --git a/code/modules/food/kitchen/cooking_machines/_appliance.dm b/code/modules/food/kitchen/cooking_machines/_appliance.dm index d87fbfc902..1b090068f6 100644 --- a/code/modules/food/kitchen/cooking_machines/_appliance.dm +++ b/code/modules/food/kitchen/cooking_machines/_appliance.dm @@ -319,7 +319,7 @@ CI = new /datum/cooking_item/(CC) I.forceMove(src) cooking_objs.Add(CI) - user.visible_message("\The [user] puts \the [I] into \the [src].") + user.visible_message("\The [user] puts \the [I] into \the [src].") if (CC.check_contents() == 0)//If we're just putting an empty container in, then dont start any processing. return TRUE else @@ -333,7 +333,7 @@ CI.combine_target = selected_option // We can actually start cooking now. - user.visible_message("\The [user] puts \the [I] into \the [src].") + user.visible_message("\The [user] puts \the [I] into \the [src].") get_cooking_work(CI) cooking = TRUE @@ -433,7 +433,7 @@ /obj/machinery/appliance/proc/finish_cooking(var/datum/cooking_item/CI) - src.visible_message("\The [src] pings!") + src.visible_message("\The [src] pings!") if(cooked_sound) playsound(get_turf(src), cooked_sound, 50, 1) //Check recipes first, a valid recipe overrides other options diff --git a/code/modules/food/kitchen/cooking_machines/oven.dm b/code/modules/food/kitchen/cooking_machines/oven.dm index d58df7e6f6..bcebc851a0 100644 --- a/code/modules/food/kitchen/cooking_machines/oven.dm +++ b/code/modules/food/kitchen/cooking_machines/oven.dm @@ -148,7 +148,7 @@ /obj/machinery/appliance/cooker/oven/finish_cooking(var/datum/cooking_item/CI) if(CI.combine_target) CI.result_type = 3//Combination type. We're making something out of our ingredients - visible_message("\The [src] pings!") + visible_message("\The [src] pings!") combination_cook(CI) return else diff --git a/code/modules/food/kitchen/microwave.dm b/code/modules/food/kitchen/microwave.dm index a92e17c6da..9162286858 100644 --- a/code/modules/food/kitchen/microwave.dm +++ b/code/modules/food/kitchen/microwave.dm @@ -77,24 +77,24 @@ if(src.broken > 0) if(src.broken == 2 && O.is_screwdriver()) // If it's broken and they're using a screwdriver user.visible_message( \ - "\The [user] starts to fix part of the microwave.", \ + "\The [user] starts to fix part of the microwave.", \ "You start to fix part of the microwave." \ ) playsound(src, O.usesound, 50, 1) if (do_after(user,20 * O.toolspeed)) user.visible_message( \ - "\The [user] fixes part of the microwave.", \ + "\The [user] fixes part of the microwave.", \ "You have fixed part of the microwave." \ ) src.broken = 1 // Fix it a bit else if(src.broken == 1 && O.is_wrench()) // If it's broken and they're doing the wrench user.visible_message( \ - "\The [user] starts to fix part of the microwave.", \ + "\The [user] starts to fix part of the microwave.", \ "You start to fix part of the microwave." \ ) if (do_after(user,20 * O.toolspeed)) user.visible_message( \ - "\The [user] fixes the microwave.", \ + "\The [user] fixes the microwave.", \ "You have fixed the microwave." \ ) src.icon_state = "mw" @@ -108,7 +108,7 @@ else if(src.dirty==100) // The microwave is all dirty so can't be used! if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them user.visible_message( \ - "\The [user] starts to clean the microwave.", \ + "\The [user] starts to clean the microwave.", \ "You start to clean the microwave." \ ) if (do_after(user,20)) diff --git a/code/modules/food/kitchen/smartfridge/hydroponics.dm b/code/modules/food/kitchen/smartfridge/hydroponics.dm index 1c2cb42246..93afa67b19 100644 --- a/code/modules/food/kitchen/smartfridge/hydroponics.dm +++ b/code/modules/food/kitchen/smartfridge/hydroponics.dm @@ -24,19 +24,6 @@ icon_state = "showcase" icon_base = "showcase" -/obj/machinery/smartfridge/drinks/update_icon() - cut_overlays() - if(stat & (BROKEN|NOPOWER)) - icon_state = "[icon_base]-off" - else - icon_state = icon_base - - if(panel_open) - add_overlay("[icon_base]-panel") - - if(!stat && contents.len) - add_overlay("[icon_base]-fill") - /obj/machinery/smartfridge/drinks/accept_check(var/obj/item/O as obj) if(istype(O,/obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/food/drinks) || istype(O,/obj/item/weapon/reagent_containers/food/condiment)) return TRUE diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 4d4ab53dca..8c333aaf10 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -111,7 +111,7 @@ cards -= P H.parentdeck = src H.update_icon() - user.visible_message("\The [user] draws a card.") + user.visible_message("\The [user] draws a card.") to_chat(user,"It's the [P].") /obj/item/weapon/deck/verb/deal_card() diff --git a/code/modules/ghosttrap/trap.dm b/code/modules/ghosttrap/trap.dm index 5de81594a9..594d6f2e45 100644 --- a/code/modules/ghosttrap/trap.dm +++ b/code/modules/ghosttrap/trap.dm @@ -83,7 +83,7 @@ var/list/ghost_traps to_chat(target, "Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm.") to_chat(target, "Use say #b to speak to other artificial intelligences.") var/turf/T = get_turf(target) - T.visible_message("\The [src] chimes quietly.") + T.visible_message("\The [src] chimes quietly.") var/obj/item/device/mmi/digital/posibrain/P = target.loc if(!istype(P)) //wat return diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm index 35d7ee2fef..70fa60be35 100644 --- a/code/modules/holodeck/HolodeckObjects.dm +++ b/code/modules/holodeck/HolodeckObjects.dm @@ -513,5 +513,5 @@ derez() /mob/living/simple_mob/animal/space/carp/holodeck/proc/derez() - visible_message("\The [src] fades away!") + visible_message("\The [src] fades away!") qdel(src) diff --git a/code/modules/holomap/mapper.dm b/code/modules/holomap/mapper.dm index 430a4176ba..b99d2928c1 100644 --- a/code/modules/holomap/mapper.dm +++ b/code/modules/holomap/mapper.dm @@ -185,7 +185,7 @@ hud_item.off(FALSE) /obj/item/device/mapping_unit/proc/hide_device() - hud_datum.unapply_to_hud() + hud_datum?.unapply_to_hud() /obj/item/device/mapping_unit/proc/last_run() stop_updates() diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 67e6dbeecb..dfa95aed2d 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -571,7 +571,7 @@ if(!degree || get_trait(TRAIT_IMMUTABLE) > 0) return - source_turf.visible_message("\The [display_name] quivers!") + source_turf.visible_message("\The [display_name] quivers!") //This looks like shit, but it's a lot easier to read/change this way. var/total_mutations = rand(1,1+degree) @@ -608,7 +608,7 @@ if(prob(degree*5)) set_trait(TRAIT_CARNIVOROUS, get_trait(TRAIT_CARNIVOROUS)+rand(-degree,degree),2, 0) if(get_trait(TRAIT_CARNIVOROUS)) - source_turf.visible_message("\The [display_name] shudders hungrily.") + source_turf.visible_message("\The [display_name] shudders hungrily.") if(6) set_trait(TRAIT_WEED_TOLERANCE, get_trait(TRAIT_WEED_TOLERANCE)+(rand(-2,2)*degree),10, 0) if(prob(degree*5)) @@ -629,7 +629,7 @@ set_trait(TRAIT_POTENCY, get_trait(TRAIT_POTENCY)+(rand(-20,20)*degree),200, 0) if(prob(degree*5)) set_trait(TRAIT_SPREAD, get_trait(TRAIT_SPREAD)+rand(-1,1),2, 0) - source_turf.visible_message("\The [display_name] spasms visibly, shifting in the tray.") + source_turf.visible_message("\The [display_name] spasms visibly, shifting in the tray.") if(prob(degree*3)) set_trait(TRAIT_SPORING, !get_trait(TRAIT_SPORING)) if(9) @@ -647,7 +647,7 @@ if(prob(degree*2)) set_trait(TRAIT_BIOLUM, !get_trait(TRAIT_BIOLUM)) if(get_trait(TRAIT_BIOLUM)) - source_turf.visible_message("\The [display_name] begins to glow!") + source_turf.visible_message("\The [display_name] begins to glow!") if(prob(degree*2)) set_trait(TRAIT_BIOLUM_COLOUR,"#[get_random_colour(0,75,190)]") source_turf.visible_message("\The [display_name]'s glow changes colour!") diff --git a/code/modules/hydroponics/seed_gene_mut.dm b/code/modules/hydroponics/seed_gene_mut.dm index 09147c72b9..35ced29739 100644 --- a/code/modules/hydroponics/seed_gene_mut.dm +++ b/code/modules/hydroponics/seed_gene_mut.dm @@ -4,7 +4,7 @@ return src var/datum/seed/S = diverge() //Let's not modify all of the seeds. - T.visible_message("\The [S.display_name] quivers!") //Mimicks the normal mutation. + T.visible_message("\The [S.display_name] quivers!") //Mimicks the normal mutation. G.mutate(S, T) return S @@ -94,7 +94,7 @@ if(prob(50)) S.set_trait(TRAIT_BIOLUM, !S.get_trait(TRAIT_BIOLUM)) if(S.get_trait(TRAIT_BIOLUM)) - T.visible_message("\The [S.display_name] begins to glow!") + T.visible_message("\The [S.display_name] begins to glow!") if(prob(50)) S.set_trait(TRAIT_BIOLUM_COLOUR,get_random_colour(0,75,190)) T.visible_message("\The [S.display_name]'s glow changes colour!") @@ -118,7 +118,7 @@ S.set_trait(TRAIT_MATURATION, S.get_trait(TRAIT_MATURATION)+rand(-1,1),30,0) if(prob(55)) S.set_trait(TRAIT_SPREAD, S.get_trait(TRAIT_SPREAD)+rand(-1,1),2,0) - T.visible_message("\The [S.display_name] spasms visibly, shifting in the tray.") + T.visible_message("\The [S.display_name] spasms visibly, shifting in the tray.") /decl/plantgene/fruit/mutate(var/datum/seed/S) if(prob(65)) diff --git a/code/modules/hydroponics/spreading/spreading_response.dm b/code/modules/hydroponics/spreading/spreading_response.dm index b448357187..ab22ae15df 100644 --- a/code/modules/hydroponics/spreading/spreading_response.dm +++ b/code/modules/hydroponics/spreading/spreading_response.dm @@ -68,12 +68,12 @@ var/mob/living/L = A if(!(user in buckled_mobs)) L.visible_message(\ - "\The [user] frees \the [L] from \the [src].",\ - "\The [user] frees you from \the [src].",\ + "\The [user] frees \the [L] from \the [src].",\ + "\The [user] frees you from \the [src].",\ "You hear shredding and ripping.") else L.visible_message(\ - "\The [L] struggles free of \the [src].",\ + "\The [L] struggles free of \the [src].",\ "You untangle \the [src] from around yourself.",\ "You hear shredding and ripping.") unbuckle() diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm index f671b51569..69e8b69e18 100644 --- a/code/modules/integrated_electronics/core/assemblies.dm +++ b/code/modules/integrated_electronics/core/assemblies.dm @@ -268,7 +268,7 @@ if(S.scan(target)) scanned = TRUE if(scanned) - visible_message("\The [user] waves \the [src] around [target].") + visible_message("\The [user] waves \the [src] around [target].") /obj/item/device/electronic_assembly/attackby(var/obj/item/I, var/mob/user) if(can_anchor && I.is_wrench()) diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index cd18f1c75e..db8905be0d 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -187,7 +187,7 @@ new /obj/item/weapon/book/tome(src.loc) var/datum/gender/T = gender_datums[user.get_visible_gender()] to_chat(user, "Your sanity barely endures the seconds spent in the vault's browsing window. The only thing to remind you of this when you stop browsing is a dusty old tome sitting on the desk. You don't really remember printing it.") - user.visible_message("\The [user] stares at the blank screen for a few moments, [T.his] expression frozen in fear. When [T.he] finally awakens from it, [T.he] looks a lot older.", 2) + user.visible_message("\The [user] stares at the blank screen for a few moments, [T.his] expression frozen in fear. When [T.he] finally awakens from it, [T.he] looks a lot older.", 2) src.arcanecheckout = 0 if(1) // Inventory diff --git a/code/modules/makeup/nailpolish.dm b/code/modules/makeup/nailpolish.dm new file mode 100644 index 0000000000..4cd989959f --- /dev/null +++ b/code/modules/makeup/nailpolish.dm @@ -0,0 +1,145 @@ +/obj/item/organ/external/var/datum/nail_polish/nail_polish + +/obj/item/weapon/nailpolish + name = "nail polish" + desc = "to paint your nails with. Or someone else's!" + icon = 'icons/obj/nailpolish_vr.dmi' + icon_state = "nailpolish" + var/colour = "#FFFFFF" + var/image/top_underlay + var/image/color_underlay + var/open = FALSE + drop_sound = 'sound/items/drop/glass.ogg' + pickup_sound = 'sound/items/pickup/glass.ogg' + +/obj/item/weapon/nailpolish/Initialize() + . = ..() + desc = "Nail polish, " + initial(desc) + top_underlay = image(icon, "top") + color_underlay = image(icon, "color") + update_icon() + +/obj/item/weapon/nailpolish/proc/set_colour(var/_colour) + colour = _colour + desc = "Nail polish, " + initial(desc) + update_icon() + +/obj/item/weapon/nailpolish/attack_self(var/mob/user) + open = !open + to_chat(user, SPAN_NOTICE("You [open ? "open" : "close"] \the [src].")) + update_icon() + +/obj/item/weapon/nailpolish/update_icon() + . = ..() + icon_state = "[initial(icon_state)][open ? "-open" : ""]" + top_underlay.icon_state = "top[open ? "-open" : ""]" + color_underlay.icon_state = "color[open ? "-open" : ""]" + color_underlay.color = colour + underlays = list(color_underlay, top_underlay) + +/obj/item/organ/external/proc/get_polish(var/colour) + var/static/forbidden_parts = BP_ALL - list(BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT) + if(organ_tag in forbidden_parts) + return FALSE + var/ico + var/icostate + if(length(markings)) + for(var/mark_name in markings) + var/mark_data = markings[mark_name] + var/datum/sprite_accessory/marking/mark = mark_data["datum"] + if(length(mark.body_parts & forbidden_parts)) + continue + ico = mark.icon + icostate = "[mark.icon_state]-[organ_tag]" + break + else + ico = 'icons/obj/nailpolish_vr.dmi' + icostate = organ_tag + return new /datum/nail_polish(ico, icostate, colour) + +/obj/item/weapon/nailpolish/attack(var/mob/user, var/mob/living/carbon/human/target) + if(!open) + return + + if(!istype(target)) + return + + var/bp = user.zone_sel.selecting + var/obj/item/organ/external/body_part = target.get_organ(bp) + if(!body_part) + to_chat(user, SPAN_WARNING("[target] is missing that limb!")) + return + if(body_part.nail_polish) + to_chat(user, SPAN_NOTICE("[target]'s [body_part.name] already has nail polish on!")) + return + var/datum/nail_polish/polish = body_part.get_polish(colour) + if(!polish) + to_chat(user, SPAN_NOTICE("You can't find any nails on [body_part] to paint.")) + return + if(user == target) + user.visible_message("\The [user] paints their nails with \the [src].", "You paint your nails with \the [src].") + else + if(do_after(user, 2 SECONDS, target)) + user.visible_message("\The [user] paints \the [target]'s nails with \the [src].", "You paint \the [target]'s nails with \the [src].") + else + to_chat(user, SPAN_NOTICE("Both you and [target] must stay still!")) + return + body_part.set_polish(polish) + +/obj/item/organ/external/proc/set_polish(var/datum/nail_polish/polish) + nail_polish = polish + owner?.update_icons_body() + +/obj/item/weapon/nailpolish_remover + name = "nail polish remover" + desc = "Paint thinner, acetone, nail polish remover; whatever you call it, it gets the job done." + drop_sound = 'sound/items/drop/helm.ogg' + pickup_sound = 'sound/items/pickup/helm.ogg' + icon = 'icons/obj/nailpolish_vr.dmi' + icon_state = "nailpolishremover" + var/open = FALSE + +/obj/item/weapon/nailpolish_remover/attack_self(var/mob/user) + open = !open + to_chat(user, SPAN_NOTICE("You [open ? "open" : "close"] \the [src].")) + update_icon() + +/obj/item/weapon/nailpolish_remover/update_icon() + . = ..() + icon_state = "[initial(icon_state)][open ? "-open" : ""]" + +/obj/item/weapon/nailpolish_remover/attack(var/mob/user, var/mob/living/carbon/human/target) + if(!open) + return + + if(!istype(target)) + return + + var/bp = user.zone_sel.selecting + var/obj/item/organ/external/body_part = target.get_organ(bp) + if(!body_part) + to_chat(user, SPAN_WARNING("[target] is missing that limb!")) + return + if(!body_part.nail_polish) + to_chat(user, SPAN_NOTICE("[target]'s [body_part.name] has no nail polish to remove!")) + return + if(user == target) + user.visible_message("\The [user] removes their nail polish with \the [src].", "You remove your nail polish with \the [src].") + else + if(do_after(user, 2 SECONDS, target)) + user.visible_message("\The [user] removes \the [target]'s nail polish with \the [src].", "You remove \the [target]'s nail polish with \the [src].") + else + to_chat(user, SPAN_NOTICE("Both you and [target] must stay still!")) + return + body_part.set_polish(null) + +/datum/nail_polish + var/icon = 'icons/obj/nailpolish_vr.dmi' + var/icon_state + var/color + +/datum/nail_polish/New(var/_icon, var/_icon_state, var/_color) + icon = _icon + icon_state = _icon_state + color = _color + \ No newline at end of file diff --git a/code/modules/maps/tg/reader.dm b/code/modules/maps/tg/reader.dm index 542a0b9582..bb320e27ae 100644 --- a/code/modules/maps/tg/reader.dm +++ b/code/modules/maps/tg/reader.dm @@ -152,7 +152,7 @@ GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new) if(xcrd > world.maxx) if(cropMap) break - else + else if(!measureOnly) world.maxx = xcrd if(xcrd >= 1) diff --git a/code/modules/materials/materials/glass.dm b/code/modules/materials/materials/glass.dm index 9cfdba3555..dd1f09821e 100644 --- a/code/modules/materials/materials/glass.dm +++ b/code/modules/materials/materials/glass.dm @@ -33,8 +33,8 @@ to_chat(user, "You must be standing on open flooring to build a window.") return 1 - var/title = "Sheet-[used_stack.name] ([used_stack.get_amount()] sheet\s left)" - var/choice = tgui_input_list(title, "What would you like to construct?", "Window Selection", window_options) + var/message = "Sheet-[used_stack.name] ([used_stack.get_amount()] sheet\s left)" + var/choice = tgui_input_list(user, message, "Window Construction", window_options) if(!choice || !used_stack || !user || used_stack.loc != user || user.stat || user.loc != T) return 1 diff --git a/code/modules/materials/materials/organic/cloth.dm b/code/modules/materials/materials/organic/cloth.dm index 588a7ad86f..260c47f5b0 100644 --- a/code/modules/materials/materials/organic/cloth.dm +++ b/code/modules/materials/materials/organic/cloth.dm @@ -28,7 +28,12 @@ new /datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("crude bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), - new /datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]") + new /datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]"), + new /datum/stack_recipe("painting canvas (11x11)", /obj/item/canvas, 2, time = 2 SECONDS, pass_stack_color = FALSE, supplied_material = "[name]"), + new /datum/stack_recipe("painting canvas (19x19)", /obj/item/canvas/nineteen_nineteen, 3, time = 2 SECONDS, pass_stack_color = FALSE, supplied_material = "[name]"), + new /datum/stack_recipe("painting canvas (23x19)", /obj/item/canvas/twentythree_nineteen, 4, time = 3 SECONDS, pass_stack_color = FALSE, supplied_material = "[name]"), + new /datum/stack_recipe("painting canvas (23x23), AI", /obj/item/canvas/twentythree_twentythree, 5, time = 3 SECONDS, pass_stack_color = FALSE, supplied_material = "[name]"), + new /datum/stack_recipe("painting canvas (24x24)", /obj/item/canvas/twentyfour_twentyfour, 6, time = 3 SECONDS, pass_stack_color = FALSE, supplied_material = "[name]") ) /datum/material/cloth/syncloth diff --git a/code/modules/materials/materials/organic/wood.dm b/code/modules/materials/materials/organic/wood.dm index ecdad547ca..5d82ec4875 100644 --- a/code/modules/materials/materials/organic/wood.dm +++ b/code/modules/materials/materials/organic/wood.dm @@ -43,7 +43,9 @@ new /datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("wooden standup figure", /obj/structure/barricade/cutout, 5, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), //VOREStation Add new /datum/stack_recipe("noticeboard", /obj/structure/noticeboard, 1, recycle_material = "[name]"), - new /datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]") + new /datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]"), + new /datum/stack_recipe("painting easel", /obj/structure/easel, 5, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]"), + new /datum/stack_recipe("painting frame", /obj/item/frame/painting, 5, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]") ) /datum/material/wood/sif diff --git a/code/modules/materials/sheets/metals/rods.dm b/code/modules/materials/sheets/metals/rods.dm index 2d53c2d305..318ec68626 100644 --- a/code/modules/materials/sheets/metals/rods.dm +++ b/code/modules/materials/sheets/metals/rods.dm @@ -67,7 +67,7 @@ var/global/list/datum/stack_recipe/rods_recipes = list( \ var/obj/item/stack/medical/splint/ghetto/new_splint = new(get_turf(user)) new_splint.add_fingerprint(user) - user.visible_message("\The [user] constructs \a [new_splint] out of a [singular_name].", \ + user.visible_message("\The [user] constructs \a [new_splint] out of a [singular_name].", \ "You use make \a [new_splint] out of a [singular_name].") src.use(1) return diff --git a/code/modules/materials/sheets/organic/tanning/hide.dm b/code/modules/materials/sheets/organic/tanning/hide.dm index a8b229c9eb..e9617ba921 100644 --- a/code/modules/materials/sheets/organic/tanning/hide.dm +++ b/code/modules/materials/sheets/organic/tanning/hide.dm @@ -18,7 +18,7 @@ /obj/item/stack/animalhide/attackby(obj/item/weapon/W as obj, mob/user as mob) if(has_edge(W) || is_sharp(W)) //visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message) - user.visible_message("\The [user] starts cutting hair off \the [src]", "You start cutting the hair off \the [src]", "You hear the sound of a knife rubbing against flesh") + user.visible_message("\The [user] starts cutting hair off \the [src]", "You start cutting the hair off \the [src]", "You hear the sound of a knife rubbing against flesh") var/scraped = 0 while(amount > 0 && do_after(user, 2.5 SECONDS)) // 2.5s per hide //Try locating an exisitng stack on the tile and add to there if possible diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index aa46981599..66a3088767 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -209,10 +209,10 @@ if(use_cell_power()) active = !active if(active) - visible_message("\The [src] lurches downwards, grinding noisily.") + visible_message("\The [src] lurches downwards, grinding noisily.") need_update_field = 1 else - visible_message("\The [src] shudders to a grinding halt.") + visible_message("\The [src] shudders to a grinding halt.") else to_chat(user, "The drill is unpowered.") else @@ -273,7 +273,7 @@ /obj/machinery/mining/drill/proc/system_error(var/error) if(error) - src.visible_message("\The [src] flashes a '[error]' warning.") + src.visible_message("\The [src] flashes a '[error]' warning.") faultreporter.autosay(error, src.name, "Supply") need_player_check = 1 active = 0 diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index b246835638..78e33a2d52 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -398,7 +398,7 @@ var/list/mining_overlay_cache = list() if (istype(W, /obj/item/device/measuring_tape)) var/obj/item/device/measuring_tape/P = W - user.visible_message("\The [user] extends \a [P] towards \the [src].","You extend \the [P] towards \the [src].") + user.visible_message("\The [user] extends \a [P] towards \the [src].","You extend \the [P] towards \the [src].") if(do_after(user, 15)) to_chat(user, "\The [src] has been excavated to a depth of [excavation_level]cm.") return @@ -408,7 +408,7 @@ var/list/mining_overlay_cache = list() if(C.mode) //Mode means scanning C.depth_scanner.scan_atom(user, src) else - user.visible_message("\The [user] extends \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!", "You extend \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!") + user.visible_message("\The [user] extends \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!", "You extend \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!") if(do_after(user, 15)) to_chat(user, "\The [src] has been excavated to a depth of [excavation_level]cm.") return diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 9cb0f69e35..e0fc08d8ba 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -334,14 +334,15 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(src, "AntagHUD [antagHUD ? "Enabled" : "Disabled"]") /mob/observer/dead/proc/jumpable_areas() - var/list/areas = return_areas() + var/list/areas = return_sorted_areas() if(client?.holder) return areas - for(var/area/A as anything in areas) + for(var/key in areas) + var/area/A = areas[key] if(A.z in using_map?.secret_levels) - areas -= A - return areas + areas -= key + return areas /mob/observer/dead/proc/jumpable_mobs() var/list/mobs = getmobs() @@ -363,11 +364,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(usr, "Not when you're not dead!") return - - var/area/A = tgui_input_list(usr, "Select an area:", "Ghost Teleport", jumpable_areas()) - if(!A) + var/list/areas = jumpable_areas() + var/input = tgui_input_list(usr, "Select an area:", "Ghost Teleport", areas) + if(!input) return + var/area/A = areas[input] + if(!A) return usr.forceMove(pick(get_area_turfs(A))) usr.on_mob_jump() diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index c26629a8bb..f007b5c8dc 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -147,12 +147,9 @@ var/list/slot_equipment_priority = list( \ // If canremove or other conditions need to be checked then use unEquip instead. /mob/proc/drop_from_inventory(var/obj/item/W, var/atom/target) - if(W) - remove_from_mob(W, target) - if(!(W && W.loc)) - return 1 // self destroying objects (tk, grabs) - return 1 - return 0 + if(!W) + return 0 + return remove_from_mob(W, target) //Drops the item in our left hand /mob/proc/drop_l_hand(var/atom/Target) diff --git a/code/modules/mob/living/bot/edCLNbot.dm b/code/modules/mob/living/bot/edCLNbot.dm index d0ebbc91ad..bbb1e9861d 100644 --- a/code/modules/mob/living/bot/edCLNbot.dm +++ b/code/modules/mob/living/bot/edCLNbot.dm @@ -37,7 +37,7 @@ if(!red_switch && blue_switch && !green_switch && prob(50) || src.emagged) if(istype(loc, /turf/simulated)) var/turf/simulated/T = loc - visible_message("\The [src] squirts a puddle of water on the floor!") + visible_message("\The [src] squirts a puddle of water on the floor!") T.wet_floor() if(!red_switch && !blue_switch && green_switch && prob(10) || src.emagged) diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm index b6ce4ae0ad..f525230124 100644 --- a/code/modules/mob/living/bot/floorbot.dm +++ b/code/modules/mob/living/bot/floorbot.dm @@ -228,7 +228,7 @@ return busy = 1 update_icons() - visible_message("\The [src] begins to repair the hole.") + visible_message("\The [src] begins to repair the hole.") if(do_after(src, 50)) if(A && (locate(/obj/structure/lattice, A) && building == 1 || !locate(/obj/structure/lattice, A) && building == 2)) // Make sure that it still needs repairs var/obj/item/I @@ -245,7 +245,7 @@ if(F.broken || F.burnt) busy = 1 update_icons() - visible_message("\The [src] begins to remove the broken floor.") + visible_message("\The [src] begins to remove the broken floor.") if(do_after(src, 50, F)) if(F.broken || F.burnt) F.make_plating() @@ -255,7 +255,7 @@ else if(!F.flooring && amount) busy = 1 update_icons() - visible_message("\The [src] begins to improve the floor.") + visible_message("\The [src] begins to improve the floor.") if(do_after(src, 50)) if(!F.flooring) F.set_flooring(get_flooring_data(floor_build_type)) @@ -265,7 +265,7 @@ update_icons() else if(istype(A, /obj/item/stack/tile/floor) && amount < maxAmount) var/obj/item/stack/tile/floor/T = A - visible_message("\The [src] begins to collect tiles.") + visible_message("\The [src] begins to collect tiles.") busy = 1 update_icons() if(do_after(src, 20)) @@ -279,7 +279,7 @@ else if(istype(A, /obj/item/stack/material) && amount + 4 <= maxAmount) var/obj/item/stack/material/M = A if(M.get_material_name() == MAT_STEEL) - visible_message("\The [src] begins to make tiles.") + visible_message("\The [src] begins to make tiles.") busy = 1 update_icons() if(do_after(50)) diff --git a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm index 3adf6b34f0..450f47103f 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm @@ -18,6 +18,6 @@ return user.unEquip(W) wear_hat(W) - user.visible_message("\The [user] puts \the [W] on \the [src].") + user.visible_message("\The [user] puts \the [W] on \the [src].") return return ..() diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index b6c9a5e938..8f25d65430 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -58,7 +58,7 @@ to_chat(user, "\The [src] appears to reject this brain. It is incompatable.") return - user.visible_message("\The [user] sticks \a [O] into \the [src].") + user.visible_message("\The [user] sticks \a [O] into \the [src].") B.preserved = TRUE brainmob = B.brainmob diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index a3c75b649d..fa75fb5e91 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -133,6 +133,18 @@ if(accessories_visible.len) tie_msg += " Attached to it is [english_list(accessories_visible)]." + var/list/pocket_msg + if(l_store) + var/l_store_message = l_store.pocket_description(src, user) + if(l_store_message) + LAZYADD(pocket_msg, l_store_message) + if(r_store) + var/r_store_message = r_store.pocket_description(src, user) + if(r_store_message) + LAZYADD(pocket_msg, r_store_message) + if(LAZYLEN(pocket_msg)) + tie_msg += " Near the waist it has [english_list(pocket_msg)]." + if(w_uniform.blood_DNA) msg += "[T.He] [T.is] wearing [bicon(w_uniform)] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [w_uniform.name]![tie_msg]" else diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index b1fe390e78..bc914b5204 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1395,8 +1395,8 @@ /mob/living/carbon/human/drop_from_inventory(var/obj/item/W, var/atom/Target = null) if(W in organs) - return - ..() + return 0 + return ..() /mob/living/carbon/human/reset_view(atom/A, update_hud = 1) ..() diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 3ceea87f7b..feab80627a 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -421,7 +421,7 @@ emp_act return if(!zone) - visible_message("\The [O] misses [src] narrowly!") + visible_message("\The [O] misses [src] narrowly!") return O.throwing = 0 //it hit, so stop moving diff --git a/code/modules/mob/living/carbon/human/species/species_shapeshift.dm b/code/modules/mob/living/carbon/human/species/species_shapeshift.dm index 106ffb618d..9f3a928b9b 100644 --- a/code/modules/mob/living/carbon/human/species/species_shapeshift.dm +++ b/code/modules/mob/living/carbon/human/species/species_shapeshift.dm @@ -164,7 +164,7 @@ var/list/wrapped_species_by_ref = list() return wrapped_species_by_ref["\ref[src]"] = new_species - visible_message("\The [src] shifts and contorts, taking the form of \a [new_species]!") + visible_message("\The [src] shifts and contorts, taking the form of \a [new_species]!") regenerate_icons() /mob/living/carbon/human/proc/shapeshifter_select_colour() diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans.dm b/code/modules/mob/living/carbon/human/species/station/prometheans.dm index 8ec116221e..082ade0544 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans.dm @@ -167,7 +167,7 @@ var/datum/species/shapeshifter/promethean/prometheans if(FEMALE) t_him = "her" - H.visible_message("\The [H] glomps [target] to make [t_him] feel better!", \ + H.visible_message("\The [H] glomps [target] to make [t_him] feel better!", \ "You glomp [target] to make [t_him] feel better!") H.apply_stored_shock_to(target) diff --git a/code/modules/mob/living/carbon/human/species/station/teshari.dm b/code/modules/mob/living/carbon/human/species/station/teshari.dm index 42afbbdbfc..c2864e9f7c 100644 --- a/code/modules/mob/living/carbon/human/species/station/teshari.dm +++ b/code/modules/mob/living/carbon/human/species/station/teshari.dm @@ -207,7 +207,7 @@ // Handled! if(!silent) to_chat(H, SPAN_NOTICE("You catch the air in your wings and greatly slow your fall.")) - landing.visible_message(SPAN_NOTICE("\The [H] glides down from above, landing safely.")) + landing.visible_message("\The [H] glides down from above, landing safely.") H.Stun(1) playsound(H, "rustle", 25, 1) return TRUE diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 7f8d44a742..0b77148d30 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -271,6 +271,11 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() for(var/M in part.markings) icon_key += "[M][part.markings[M]["color"]]" + + // VOREStation Edit Start + if(part.nail_polish) + icon_key += "_[part.nail_polish.icon]_[part.nail_polish.icon_state]_[part.nail_polish.color]" + // VOREStation Edit End if(part.robotic >= ORGAN_ROBOT) icon_key += "2[part.model ? "-[part.model]": ""]" diff --git a/code/modules/mob/living/carbon/lick_wounds.dm b/code/modules/mob/living/carbon/lick_wounds.dm index 6f360a5e53..4dd039186e 100644 --- a/code/modules/mob/living/carbon/lick_wounds.dm +++ b/code/modules/mob/living/carbon/lick_wounds.dm @@ -51,7 +51,7 @@ return else - visible_message("\The [src] starts licking the wounds on [M]'s [affecting.name] clean.", \ + visible_message("\The [src] starts licking the wounds on [M]'s [affecting.name] clean.", \ "You start licking the wounds on [M]'s [affecting.name] clean." ) for (var/datum/wound/W in affecting.wounds) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 1951d370c6..d5de7e47e9 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -719,8 +719,8 @@ /mob/living/carbon/drop_from_inventory(var/obj/item/W, var/atom/Target = null) if(W in internal_organs) - return - ..() + return 0 + return ..() /mob/living/touch_map_edge() diff --git a/code/modules/mob/living/silicon/ai/multicam.dm b/code/modules/mob/living/silicon/ai/multicam.dm index 6f83805372..7f84eebf6e 100644 --- a/code/modules/mob/living/silicon/ai/multicam.dm +++ b/code/modules/mob/living/silicon/ai/multicam.dm @@ -153,7 +153,7 @@ Whatever you did that made the last camera window disappear-- don't do that agai . = ..() /area/ai_multicam_room - name = "ai_multicam_room" + name = "AI Multicam Room" icon_state = "ai_camera_room" dynamic_lighting = FALSE ambience = list() diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm index 0d909652e0..7a8c3becc6 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm @@ -269,7 +269,7 @@ playsound(src, 'sound/weapons/Egloves.ogg', 50, 1, -1) R.cell.charge -= 666 else - user.visible_message("\the [user] affectionately licks all over \the [target]'s face!", "You affectionately lick all over \the [target]'s face!") + user.visible_message("\The [user] affectionately licks all over \the [target]'s face!", "You affectionately lick all over \the [target]'s face!") playsound(src, 'sound/effects/attackblob.ogg', 50, 1) water.use_charge(5) var/mob/living/carbon/human/H = target diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index afa61a5317..32cc4f32d4 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -173,7 +173,7 @@ var/list/mob_hat_cache = list() return user.unEquip(W) wear_hat(W) - user.visible_message("\The [user] puts \the [W] on \the [src].") + user.visible_message("\The [user] puts \the [W] on \the [src].") return else if(istype(W, /obj/item/borg/upgrade/)) to_chat(user, "\The [src] is not compatible with \the [W].") diff --git a/code/modules/mob/living/silicon/robot/subtypes/thinktank/_thinktank.dm b/code/modules/mob/living/silicon/robot/subtypes/thinktank/_thinktank.dm index f777fe7996..cc0b3785b6 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/thinktank/_thinktank.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/thinktank/_thinktank.dm @@ -165,4 +165,4 @@ if(!recharge_complete && recharging_atom.percent() >= 100) recharge_complete = TRUE - visible_message(SPAN_NOTICE("\The [src] beeps and flashes a green light above \his recharging port.")) + visible_message("\The [src] beeps and flashes a green light above \his recharging port.") diff --git a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_interactions.dm b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_interactions.dm index f9a78b4f12..0c981cb4b2 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_interactions.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_interactions.dm @@ -6,7 +6,7 @@ if(istype(recharging_atom) && !QDELETED(recharging_atom) && recharging_atom.loc == src) recharging_atom.dropInto(loc) user.put_in_hands(recharging_atom) - user.visible_message(SPAN_NOTICE("\The [user] pops \the [recharging_atom] out of \the [src]'s recharging port.")) + user.visible_message("\The [user] pops \the [recharging_atom] out of \the [src]'s recharging port.") recharging = null return TRUE @@ -24,7 +24,7 @@ W.forceMove(src) recharging = weakref(W) recharge_complete = FALSE - user.visible_message(SPAN_NOTICE("\The [user] slots \the [W] into \the [src]'s recharging port.")) + user.visible_message("\The [user] slots \the [W] into \the [src]'s recharging port.") return TRUE if(istype(W, /obj/item/device/floor_painter)) diff --git a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_storage.dm b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_storage.dm index ec6d6f4267..6ffe75bfe3 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_storage.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_storage.dm @@ -82,9 +82,9 @@ if(istype(ejecting) && !QDELETED(ejecting) && ejecting.loc == src) ejecting.dropInto(loc) if(user == src) - visible_message(SPAN_NOTICE("\The [src] ejects \the [ejecting] from its cargo compartment.")) + visible_message("\The [src] ejects \the [ejecting] from its cargo compartment.") else - user.visible_message(SPAN_NOTICE("\The [user] pulls \the [ejecting] from \the [src]'s cargo compartment.")) + user.visible_message("\The [user] pulls \the [ejecting] from \the [src]'s cargo compartment.") /mob/living/silicon/robot/platform/attack_ai(mob/user) if(isrobot(user) && user.Adjacent(src)) @@ -99,7 +99,7 @@ if(!istype(removing) || QDELETED(removing) || removing.loc != src) LAZYREMOVE(stored_atoms, remove_ref) else - user.visible_message(SPAN_NOTICE("\The [user] begins unloading \the [removing] from \the [src]'s cargo compartment.")) + user.visible_message("\The [user] begins unloading \the [removing] from \the [src]'s cargo compartment.") if(do_after(user, 3 SECONDS, src) && !QDELETED(removing) && removing.loc == src) drop_stored_atom(removing, user) return TRUE @@ -124,9 +124,9 @@ if(!can_mouse_drop(dropping, user) || !can_store_atom(dropping, user)) return FALSE if(user == src) - visible_message(SPAN_NOTICE("\The [src] begins loading \the [dropping] into its cargo compartment.")) + visible_message("\The [src] begins loading \the [dropping] into its cargo compartment.") else - user.visible_message(SPAN_NOTICE("\The [user] begins loading \the [dropping] into \the [src]'s cargo compartment.")) + user.visible_message("\The [user] begins loading \the [dropping] into \the [src]'s cargo compartment.") if(do_after(user, 3 SECONDS, src) && can_mouse_drop(dropping, user) && can_store_atom(dropping, user)) store_atom(dropping, user) return FALSE diff --git a/code/modules/mob/living/simple_mob/defense.dm b/code/modules/mob/living/simple_mob/defense.dm index b17274bd2f..b0d622cb20 100644 --- a/code/modules/mob/living/simple_mob/defense.dm +++ b/code/modules/mob/living/simple_mob/defense.dm @@ -64,7 +64,7 @@ MED.amount -= 1 if(MED.amount <= 0) qdel(MED) - visible_message("\The [user] applies the [MED] on [src].") + visible_message("\The [user] applies the [MED] on [src].") else var/datum/gender/T = gender_datums[src.get_visible_gender()] to_chat(user, "\The [src] is dead, medical items won't bring [T.him] back to life.") // the gender lookup is somewhat overkill, but it functions identically to the obsolete gender macros and future-proofs this code diff --git a/code/modules/mob/living/simple_mob/simple_mob_vr.dm b/code/modules/mob/living/simple_mob/simple_mob_vr.dm index c66b982b7d..749def3e84 100644 --- a/code/modules/mob/living/simple_mob/simple_mob_vr.dm +++ b/code/modules/mob/living/simple_mob/simple_mob_vr.dm @@ -161,9 +161,9 @@ vore_pounce_cooldown = world.time + 20 SECONDS // don't attempt another pounce for a while if(prob(successrate)) // pounce success! M.Weaken(5) - M.visible_message("\the [src] pounces on \the [M]!!") + M.visible_message("\The [src] pounces on \the [M]!!") else // pounce misses! - M.visible_message("\the [src] attempts to pounce \the [M] but misses!!") + M.visible_message("\The [src] attempts to pounce \the [M] but misses!!") playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1) if(will_eat(M) && (!M.canmove || vore_standing_too)) //if they're edible then eat them too @@ -263,7 +263,7 @@ if(istype(tmob) && will_eat(tmob) && !istype(tmob, type) && prob(vore_bump_chance) && !ckey) //check if they decide to eat. Includes sanity check to prevent cannibalism. if(tmob.canmove && prob(vore_pounce_chance)) //if they'd pounce for other noms, pounce for these too, otherwise still try and eat them if they hold still tmob.Weaken(5) - tmob.visible_message("\the [src] [vore_bump_emote] \the [tmob]!!") + tmob.visible_message("\The [src] [vore_bump_emote] \the [tmob]!!") set_AI_busy(TRUE) spawn() animal_nom(tmob) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse_vr.dm index 5e1aab7290..b942f69d0f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse_vr.dm @@ -38,7 +38,7 @@ var/obj/item/weapon/storage/S = O var/obj/item/weapon/holder/H = new holder_type(get_turf(src),src) //this works weird, but it creates an empty holder, to see if that holder can fit if(S.can_be_inserted(H) && (src.size_multiplier <= 0.75)) - visible_message("\the [src] squeezes into \the [S].") + visible_message("\The [src] squeezes into \the [S].") H.forceMove(S) return 1 else diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm index 722ac3ffcd..3c8cd73f09 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm @@ -185,7 +185,7 @@ var/list/_cat_default_emotes = list( /mob/living/simple_mob/animal/passive/cat/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen)) if(named) - to_chat(user, "\the [name] already has a name!") + to_chat(user, "\The [name] already has a name!") else var/tmp_name = sanitizeSafe(input(user, "Give \the [name] a name", "Name"), MAX_NAME_LEN) if(length(tmp_name) > 50) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm index 0ac8d54c2b..7bb9db0b06 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm @@ -116,5 +116,5 @@ if(prob(10)) for(var/mob/living/L in hearers(holder)) if(!istype(L, holder)) // Don't follow other hooligan crabs. - holder.visible_message("\The [holder] starts to follow \the [L].") + holder.visible_message("\The [holder] starts to follow \the [L].") set_follow(L, rand(20 SECONDS, 40 SECONDS)) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm index 8c0e653ee9..3c01214918 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm @@ -181,7 +181,7 @@ if(holder.get_active_hand() && istype(holder.get_active_hand(), /obj/item/clothing/head) && !S.hat) var/obj/item/I = holder.get_active_hand() S.take_hat(S) - holder.visible_message("\The [holder] wears \the [I]") + holder.visible_message("\The [holder] wears \the [I]") /mob/living/simple_mob/animal/sif/sakimm/intelligent desc = "What appears to be an oversized rodent with hands. This one has a curious look in its eyes." @@ -327,7 +327,7 @@ if(istype(holder) && istype(holder.get_active_hand(), /obj/item/clothing/head) && !S.hat) var/obj/item/I = holder.get_active_hand() S.take_hat(S) - holder.visible_message("\The [holder] wears \the [I]") + holder.visible_message("\The [holder] wears \the [I]") carrying_item = TRUE if(istype(holder) && S.hat) // Do we have a hat? Hats are loot. diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/bats.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/bats.dm index 7ca24f3174..dbf9b48159 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/bats.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/bats.dm @@ -41,7 +41,7 @@ var/mob/living/L = A if(prob(scare_chance)) L.Stun(1) - L.visible_message("\the [src] scares \the [L]!") + L.visible_message("\The [src] scares \the [L]!") // Spookiest of bats /mob/living/simple_mob/animal/space/bats/cult diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm index 2e014482f2..ece32ca7a4 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm @@ -116,7 +116,7 @@ my_storage.rangedload(T, src) if(my_storage.contents.len >= my_storage.max_storage_space) - visible_message("\The [src] emits a shrill beep, indicating its storage is full.") + visible_message("\The [src] emits a shrill beep, indicating its storage is full.") var/obj/structure/ore_box/OB = locate() in view(2, src) diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm index 0a0f36d516..33d2494884 100644 --- a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm +++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm @@ -126,7 +126,7 @@ var/repair_upper_bound = A.melee_damage_upper * -1 adjustBruteLoss(rand(repair_lower_bound, repair_upper_bound)) adjustFireLoss(rand(repair_lower_bound, repair_upper_bound)) - user.visible_message("\The [user] mends some of \the [src]'s wounds.") + user.visible_message("\The [user] mends some of \the [src]'s wounds.") else to_chat(user, "\The [src] is undamaged.") return diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm b/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm index 1c4ac8876c..d65c9527b2 100644 --- a/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm +++ b/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm @@ -48,7 +48,7 @@ var/mob/living/L = A if(prob(12)) L.Weaken(3) - L.visible_message("\the [src] knocks down \the [L]!") + L.visible_message("\The [src] knocks down \the [L]!") // Strong Variant /mob/living/simple_mob/faithless/strong diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm b/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm index a1afb7bbb2..fd4837b955 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm @@ -160,7 +160,7 @@ hunger += 5 else food.Weaken(5) - food.visible_message("\the [src] pounces on \the [food]!!") + food.visible_message("\The [src] pounces on \the [food]!!") target_mob = food EatTarget() hunger = 0 diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm index 69ec5ceea5..d0a06f570a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm @@ -69,7 +69,7 @@ List of things solar grubs should be able to do: if(attached) set_AI_busy(TRUE) if(prob(2)) - src.visible_message("\The [src] begins to sink power from the net.") + src.visible_message("\The [src] begins to sink power from the net.") if(prob(5)) var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() sparks.set_up(5, 0, get_turf(src)) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 67eab03afa..1af7d10fb1 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -132,9 +132,7 @@ new_player_panel_proc() if(href_list["observe"]) - var/alert_time = ticker?.current_state <= GAME_STATE_SETTING_UP ? 1 : round(config.respawn_time/10/60) - - if(tgui_alert(src,"Are you sure you wish to observe? You will have to wait up to [alert_time] minute\s before being able to spawn into the game!","Player Setup",list("Yes","No")) == "Yes") + if(tgui_alert(src,"Are you sure you wish to observe? If you do, make sure to not use any knowledge gained from observing if you decide to join later.","Player Setup",list("Yes","No")) == "Yes") if(!client) return 1 //Make a new mannequin quickly, and allow the observer to take the appearance diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 2cbf9a74f8..651ed85b14 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -29,7 +29,7 @@ all_underwear[WRC.name] = WRI.name - backbag = rand(1,5) + backbag = rand(1,6) pdachoice = rand(1,5) age = rand(current_species.min_age, current_species.max_age) b_type = RANDOM_BLOOD_TYPE diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 1e7184f965..8984efe214 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -23,7 +23,7 @@ var/icon_state // the icon_state of the accessory var/preview_state // a custom preview state for whatever reason - var/name // the preview name of the accessory + var/name = "ERROR - FIXME" // the preview name of the accessory // Determines if the accessory will be skipped or included in random hair generations var/gender = NEUTER @@ -1819,6 +1819,7 @@ shaved //Teshari things /datum/sprite_accessory/hair/teshari name = "Teshari Default" + icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "teshari_default" species_allowed = list(SPECIES_TESHARI) @@ -1855,8 +1856,8 @@ shaved icon_state = "teshari_mohawk" /datum/sprite_accessory/hair/teshari/pointy - name = "Teshari Pointy" - icon_state = "teshari_pointy" + name = "Teshari Pointy" + icon_state = "teshari_pointy" /datum/sprite_accessory/hair/teshari/upright name = "Teshari Upright" @@ -1875,7 +1876,6 @@ shaved icon_state = "teshari_mushroom" //Tesh things ported from Ark Station - /datum/sprite_accessory/hair/teshari/twies name = "Teshari Twies" icon_state = "teshari_twies" diff --git a/code/modules/mob/new_player/sprite_accessories_extra_vr.dm b/code/modules/mob/new_player/sprite_accessories_extra_vr.dm index 52d1d1923b..742480858c 100644 --- a/code/modules/mob/new_player/sprite_accessories_extra_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_extra_vr.dm @@ -5,732 +5,849 @@ color_blend_mode = ICON_ADD species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use -/datum/sprite_accessory/marking/vr - icon = 'icons/mob/human_races/markings_vr.dmi' - -/datum/sprite_accessory/marking/vr/vulp_belly +/datum/sprite_accessory/marking/vr_vulp_belly name = "belly fur (Vulp)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "vulp_belly" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO,BP_GROIN) -/datum/sprite_accessory/marking/vr/vulp_fullbelly +/datum/sprite_accessory/marking/vr_vulp_fullbelly name = "full belly fur (Vulp)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "vulp_fullbelly" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO,BP_GROIN) -/datum/sprite_accessory/marking/vr/vulp_crest +/datum/sprite_accessory/marking/vr_vulp_crest name = "belly crest (Vulp)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "vulp_crest" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO,BP_GROIN) -/datum/sprite_accessory/marking/vr/vulp_nose +/datum/sprite_accessory/marking/vr_vulp_nose name = "nose (Vulp)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "vulp_nose" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/vulp_short_nose +/datum/sprite_accessory/marking/vr_vulp_short_nose name = "nose, short (Vulp)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "vulp_short_nose" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/snoutstripe +/datum/sprite_accessory/marking/vr_snoutstripe name = "snout stripe (Vulp)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "snoutstripe" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/vulp_face +/datum/sprite_accessory/marking/vr_vulp_face name = "face (Vulp)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "vulp_face" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/vulp_facealt +/datum/sprite_accessory/marking/vr_vulp_facealt name = "face, alt. (Vulp)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "vulp_facealt" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/vulp_earsface +/datum/sprite_accessory/marking/vr_vulp_earsface name = "ears and face (Vulp)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "vulp_earsface" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/vulp_all +/datum/sprite_accessory/marking/vr_vulp_all name = "all head highlights (Vulp)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "vulp_all" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/sergal_full +/datum/sprite_accessory/marking/vr_sergal_full name = "Sergal Markings" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "sergal_full" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) species_allowed = list("Sergal") -/datum/sprite_accessory/marking/vr/sergal_full_female +/datum/sprite_accessory/marking/vr_sergal_full_female name = "Sergal Markings (Female)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "sergal_full_female" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) species_allowed = list("Sergal") -/datum/sprite_accessory/marking/vr/monoeye +/datum/sprite_accessory/marking/vr_monoeye name = "Monoeye" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "monoeye" body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/spidereyes +/datum/sprite_accessory/marking/vr_spidereyes name = "Spider Eyes" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "spidereyes" body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/sergaleyes +/datum/sprite_accessory/marking/vr_sergaleyes name = "Sergal Eyes" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "eyes_sergal" body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/closedeyes +/datum/sprite_accessory/marking/vr_closedeyes name = "Closed Eyes" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "eyes_closed" body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/brows +/datum/sprite_accessory/marking/vr_brows name = "Eyebrows" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "brows" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/nevrean_female +/datum/sprite_accessory/marking/vr_nevrean_female name = "Female Nevrean beak" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "nevrean_f" body_parts = list(BP_HEAD) color_blend_mode = ICON_MULTIPLY gender = FEMALE -/datum/sprite_accessory/marking/vr/nevrean_male +/datum/sprite_accessory/marking/vr_nevrean_male name = "Male Nevrean beak" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "nevrean_m" body_parts = list(BP_HEAD) color_blend_mode = ICON_MULTIPLY gender = MALE -/datum/sprite_accessory/marking/vr/spots +/datum/sprite_accessory/marking/vr_spots name = "Spots" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "spots" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) -/datum/sprite_accessory/marking/vr/shaggy_mane +/datum/sprite_accessory/marking/vr_shaggy_mane name = "Shaggy mane/feathers" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "shaggy" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO) -/datum/sprite_accessory/marking/vr/jagged_teeth +/datum/sprite_accessory/marking/vr_jagged_teeth name = "Jagged teeth" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "jagged" body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/blank_face +/datum/sprite_accessory/marking/vr_blank_face name = "Blank round face (use with monster mouth)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "blankface" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/monster_mouth +/datum/sprite_accessory/marking/vr_monster_mouth name = "Monster mouth" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "monster" body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/saber_teeth +/datum/sprite_accessory/marking/vr_saber_teeth name = "Saber teeth" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "saber" body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/fangs +/datum/sprite_accessory/marking/vr_fangs name = "Fangs" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "fangs" body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/tusks +/datum/sprite_accessory/marking/vr_tusks name = "Tusks" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "tusks" body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/otie_face +/datum/sprite_accessory/marking/vr_otie_face name = "Otie face" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "otieface" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/otie_nose +/datum/sprite_accessory/marking/vr_otie_nose name = "Otie nose" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "otie_nose" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/otienose_lite +/datum/sprite_accessory/marking/vr_otienose_lite name = "Short otie nose" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "otienose_lite" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/backstripes +/datum/sprite_accessory/marking/vr_backstripes name = "Back stripes" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "otiestripes" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO,BP_HEAD) -/datum/sprite_accessory/marking/vr/belly_butt +/datum/sprite_accessory/marking/vr_belly_butt name = "Belly and butt" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "bellyandbutt" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_GROIN,BP_TORSO) -/datum/sprite_accessory/marking/vr/fingers_toes +/datum/sprite_accessory/marking/vr_fingers_toes name = "Fingers and toes" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "fingerstoes" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND) -/datum/sprite_accessory/marking/vr/otie_socks +/datum/sprite_accessory/marking/vr_otie_socks name = "Fingerless socks" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "otiesocks" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) -/datum/sprite_accessory/marking/vr/corvid_beak +/datum/sprite_accessory/marking/vr_corvid_beak name = "Corvid beak" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "corvidbeak" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/corvid_belly +/datum/sprite_accessory/marking/vr_corvid_belly name = "Corvid belly" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "corvidbelly" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_GROIN,BP_TORSO,BP_HEAD) -/datum/sprite_accessory/marking/vr/cow_body +/datum/sprite_accessory/marking/vr_cow_body name = "Cow markings" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "cowbody" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) -/datum/sprite_accessory/marking/vr/cow_nose +/datum/sprite_accessory/marking/vr_cow_nose name = "Cow nose" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "cownose" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/zmask +/datum/sprite_accessory/marking/vr_zmask name = "Eye mask" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "zmask" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/zbody +/datum/sprite_accessory/marking/vr_zbody name = "Thick jagged stripes" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "zbody" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG,BP_R_LEG,BP_GROIN,BP_TORSO) -/datum/sprite_accessory/marking/vr/znose +/datum/sprite_accessory/marking/vr_znose name = "Jagged snout" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "znose" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/otter_nose +/datum/sprite_accessory/marking/vr_otter_nose name = "Otter nose" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "otternose" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/otter_face +/datum/sprite_accessory/marking/vr_otter_face name = "Otter face" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "otterface" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/deer_face +/datum/sprite_accessory/marking/vr_deer_face name = "Deer face" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "deerface" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/sharkface +/datum/sprite_accessory/marking/vr_sharkface name = "Akula snout" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "sharkface" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/sheppy_face +/datum/sprite_accessory/marking/vr_sheppy_face name = "Shepherd snout" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "shepface" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/sheppy_back +/datum/sprite_accessory/marking/vr_sheppy_back name = "Shepherd back" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "shepback" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO,BP_GROIN) -/datum/sprite_accessory/marking/vr/zorren_belly_male +/datum/sprite_accessory/marking/vr_zorren_belly_male name = "Zorren Male Torso" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "zorren_belly" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO,BP_GROIN) -/datum/sprite_accessory/marking/vr/zorren_belly_female +/datum/sprite_accessory/marking/vr_zorren_belly_female name = "Zorren Female Torso" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "zorren_belly_female" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO,BP_GROIN) -/datum/sprite_accessory/marking/vr/zorren_back_patch +/datum/sprite_accessory/marking/vr_zorren_back_patch name = "Zorren Back Patch" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "zorren_backpatch" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO) -/datum/sprite_accessory/marking/vr/zorren_face_male +/datum/sprite_accessory/marking/vr_zorren_face_male name = "Zorren Male Face" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "zorren_face" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) gender = MALE -/datum/sprite_accessory/marking/vr/zorren_face_female +/datum/sprite_accessory/marking/vr_zorren_face_female name = "Zorren Female Face" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "zorren_face_female" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) gender = FEMALE -/datum/sprite_accessory/marking/vr/zorren_muzzle_male +/datum/sprite_accessory/marking/vr_zorren_muzzle_male name = "Zorren Male Muzzle" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "zorren_muzzle" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) gender = MALE -/datum/sprite_accessory/marking/vr/zorren_muzzle_female +/datum/sprite_accessory/marking/vr_zorren_muzzle_female name = "Zorren Female Muzzle" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "zorren_muzzle_female" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) gender = FEMALE -/datum/sprite_accessory/marking/vr/zorren_socks +/datum/sprite_accessory/marking/vr_zorren_socks name = "Zorren Socks" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "zorren_socks" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) -/datum/sprite_accessory/marking/vr/zorren_longsocks +/datum/sprite_accessory/marking/vr_zorren_longsocks name = "Zorren Longsocks" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "zorren_longsocks" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) -/datum/sprite_accessory/marking/vr/tesh_feathers +/datum/sprite_accessory/marking/vr_tesh_feathers name = "Teshari Feathers" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "tesh-feathers" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND) -/datum/sprite_accessory/marking/vr/harpy_feathers +/datum/sprite_accessory/marking/vr_harpy_feathers name = "Rapala leg Feather" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "harpy-feathers" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG,BP_R_LEG) -/datum/sprite_accessory/marking/vr/harpy_legs +/datum/sprite_accessory/marking/vr_harpy_legs name = "Rapala leg coloring" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "harpy-leg" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) -/datum/sprite_accessory/marking/vr/chooves +/datum/sprite_accessory/marking/vr_chooves name = "Cloven hooves" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "chooves" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT) -/datum/sprite_accessory/marking/vr/body_tone +/datum/sprite_accessory/marking/vr_body_tone name = "Body toning (for emergency contrast loss)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "btone" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) -/datum/sprite_accessory/marking/vr/gloss +/datum/sprite_accessory/marking/vr_gloss name = "Full body gloss" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "gloss" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) -/datum/sprite_accessory/marking/vr/eboop_panels +/datum/sprite_accessory/marking/vr_eboop_panels name = "Eggnerd FBP panels" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "eboop" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) -/datum/sprite_accessory/marking/vr/osocks_rarm +/datum/sprite_accessory/marking/vr_osocks_rarm name = "Modular Longsock (right arm)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "osocks" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_R_ARM,BP_R_HAND) -/datum/sprite_accessory/marking/vr/osocks_larm +/datum/sprite_accessory/marking/vr_osocks_larm name = "Modular Longsock (left arm)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "osocks" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_ARM,BP_L_HAND) -/datum/sprite_accessory/marking/vr/osocks_rleg +/datum/sprite_accessory/marking/vr_osocks_rleg name = "Modular Longsock (right leg)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "osocks" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_R_FOOT,BP_R_LEG) -/datum/sprite_accessory/marking/vr/osocks_lleg +/datum/sprite_accessory/marking/vr_osocks_lleg name = "Modular Longsock (left leg)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "osocks" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_L_LEG) -/datum/sprite_accessory/marking/vr/animeeyesinner +/datum/sprite_accessory/marking/vr_animeeyesinner name = "Anime Eyes Inner" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "animeeyesinner" body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/animeeyesouter +/datum/sprite_accessory/marking/vr_animeeyesouter name = "Anime Eyes Outer" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "animeeyesouter" body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/panda_eye_marks +/datum/sprite_accessory/marking/vr_panda_eye_marks name = "Panda Eye Markings" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "eyes_panda" body_parts = list(BP_HEAD) species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) -/datum/sprite_accessory/marking/vr/catwomantorso +/datum/sprite_accessory/marking/vr_catwomantorso name = "Catwoman chest stripes" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "catwomanchest" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO) -/datum/sprite_accessory/marking/vr/catwomangroin +/datum/sprite_accessory/marking/vr_catwomangroin name = "Catwoman groin stripes" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "catwomangroin" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_GROIN) -/datum/sprite_accessory/marking/vr/catwoman_rleg +/datum/sprite_accessory/marking/vr_catwoman_rleg name = "Catwoman right leg stripes" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "catwomanright" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_R_LEG) -/datum/sprite_accessory/marking/vr/catwoman_lleg +/datum/sprite_accessory/marking/vr_catwoman_lleg name = "Catwoman left leg stripes" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "catwomanleft" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG) -/datum/sprite_accessory/marking/vr/teshi_small_feathers +/datum/sprite_accessory/marking/vr_teshi_small_feathers name = "Teshari small wingfeathers" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "teshi_sf" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND,BP_TORSO) -/datum/sprite_accessory/marking/vr/spirit_lights +/datum/sprite_accessory/marking/vr_spirit_lights name = "Ward - Spirit FBP Lights" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "lights" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_HEAD) -/datum/sprite_accessory/marking/vr/spirit_lights_body +/datum/sprite_accessory/marking/vr_spirit_lights_body name = "Ward - Spirit FBP Lights (body)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "lights" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO) -/datum/sprite_accessory/marking/vr/spirit_lights_head +/datum/sprite_accessory/marking/vr_spirit_lights_head name = "Ward - Spirit FBP Lights (head)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "lights" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/spirit_panels +/datum/sprite_accessory/marking/vr_spirit_panels name = "Ward - Spirit FBP Panels" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "panels" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) -/datum/sprite_accessory/marking/vr/spirit_panels_body +/datum/sprite_accessory/marking/vr_spirit_panels_body name = "Ward - Spirit FBP Panels (body)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "panels" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO) -/datum/sprite_accessory/marking/vr/spirit_panels_head +/datum/sprite_accessory/marking/vr_spirit_panels_head name = "Ward - Spirit FBP Panels (head)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "panels" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/tentacle_head +/datum/sprite_accessory/marking/vr_tentacle_head name = "Squid Head" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "tentaclehead" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/tentacle_mouth +/datum/sprite_accessory/marking/vr_tentacle_mouth name = "Tentacle Mouth" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "tentaclemouth" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/rosette +/datum/sprite_accessory/marking/vr_rosette name = "Rosettes" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "rosette" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) -/datum/sprite_accessory/marking/vr/werewolf_nose +/datum/sprite_accessory/marking/vr_werewolf_nose name = "Werewolf nose" + icon = 'icons/mob/human_races/markings_vr.dmi' icon = 'icons/mob/species/werebeast/werebeast_markings.dmi' icon_state = "werewolf_nose" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) species_allowed = list(SPECIES_WEREBEAST) -/datum/sprite_accessory/marking/vr/werewolf_face +/datum/sprite_accessory/marking/vr_werewolf_face name = "Werewolf face" + icon = 'icons/mob/human_races/markings_vr.dmi' icon = 'icons/mob/species/werebeast/werebeast_markings.dmi' icon_state = "werewolf" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) species_allowed = list(SPECIES_WEREBEAST) -/datum/sprite_accessory/marking/vr/werewolf_belly +/datum/sprite_accessory/marking/vr_werewolf_belly name = "Werewolf belly" + icon = 'icons/mob/human_races/markings_vr.dmi' icon = 'icons/mob/species/werebeast/werebeast_markings.dmi' icon_state = "werewolf" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_GROIN,BP_TORSO) species_allowed = list(SPECIES_WEREBEAST) -/datum/sprite_accessory/marking/vr/werewolf_socks +/datum/sprite_accessory/marking/vr_werewolf_socks name = "Werewolf socks" + icon = 'icons/mob/human_races/markings_vr.dmi' icon = 'icons/mob/species/werebeast/werebeast_markings.dmi' icon_state = "werewolf" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) species_allowed = list(SPECIES_WEREBEAST) -/datum/sprite_accessory/marking/vr/shadekin_snoot +/datum/sprite_accessory/marking/vr_shadekin_snoot name = "Shadekin Snoot" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "shadekin-snoot" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) -/datum/sprite_accessory/marking/vr/taj_nose_alt +/datum/sprite_accessory/marking/vr_taj_nose_alt name = "Nose Color, alt. (Taj)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "taj_nosealt" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/talons +/datum/sprite_accessory/marking/vr_talons name = "Talons" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "talons" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) -/datum/sprite_accessory/marking/vr/claws +/datum/sprite_accessory/marking/vr_claws name = "Claws" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "claws" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_HAND,BP_R_HAND) -/datum/sprite_accessory/marking/vr/equine_snout //Why the long face? Works best with sergal bodytype. +/datum/sprite_accessory/marking/vr_equine_snout //Why the long face? Works best with sergal bodytype. name = "Equine Snout" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "donkey" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/equine_nose +/datum/sprite_accessory/marking/vr_equine_nose name = "Equine Nose" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "dnose" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/bee_stripes +/datum/sprite_accessory/marking/vr_bee_stripes name = "bee stripes" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "beestripes" body_parts = list(BP_TORSO,BP_GROIN) -/datum/sprite_accessory/marking/vr/vas_toes +/datum/sprite_accessory/marking/vr_vas_toes name = "Bug Paws (Vasilissan)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "vas_toes" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT) //CitRP stuff -/datum/sprite_accessory/marking/vr/vox_alt +/datum/sprite_accessory/marking/vr_vox_alt name = "Vox Alternate" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "bay_vox" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD) species_allowed = list(SPECIES_VOX) -/datum/sprite_accessory/marking/vr/vox_alt_eyes +/datum/sprite_accessory/marking/vr_vox_alt_eyes name = "Alternate Vox Eyes" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "bay_vox_eyes" body_parts = list(BP_HEAD) species_allowed = list(SPECIES_VOX) -/datum/sprite_accessory/marking/vr/c_beast_body +/datum/sprite_accessory/marking/vr_c_beast_body name = "Cyber Body" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "c_beast_body" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_TORSO,BP_GROIN) -/datum/sprite_accessory/marking/vr/c_beast_plating +/datum/sprite_accessory/marking/vr_c_beast_plating name = "Cyber Plating (Use w/ Cyber Body)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "c_beast_plating" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM) -/datum/sprite_accessory/marking/vr/c_beast_band +/datum/sprite_accessory/marking/vr_c_beast_band name = "Cyber Band (Use w/ Cybertech head)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "c_beast_band" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/c_beast_cheek_a +/datum/sprite_accessory/marking/vr_c_beast_cheek_a name = "Cyber Beast Cheeks A (Use A, B and C)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "c_beast_a" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/c_beast_cheek_b +/datum/sprite_accessory/marking/vr_c_beast_cheek_b name = "Cyber Beast Cheeks B (Use A, B and C)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "c_beast_b" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/c_beast_cheek_c +/datum/sprite_accessory/marking/vr_c_beast_cheek_c name = "Cyber Beast Cheeks C (Use A, B and C)" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "c_beast_c" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/teshari_large_eyes +/datum/sprite_accessory/marking/vr_teshari_large_eyes name = "Teshari large eyes" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "teshlarge_eyes" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) species_allowed = list(SPECIES_TESHARI) -/datum/sprite_accessory/marking/vr/teshari_coat +/datum/sprite_accessory/marking/vr_teshari_coat name = "Teshari coat" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "tesh_coat" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_TORSO,BP_HEAD) species_allowed = list(SPECIES_TESHARI) -/datum/sprite_accessory/marking/vr/teshari_pattern_male +/datum/sprite_accessory/marking/vr_teshari_pattern_male name = "Teshari male pattern" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "tesh-pattern-male" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD) species_allowed = list(SPECIES_TESHARI) -/datum/sprite_accessory/marking/vr/teshari_pattern_female +/datum/sprite_accessory/marking/vr_teshari_pattern_female name = "Teshari female pattern" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "tesh-pattern-fem" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD) species_allowed = list(SPECIES_TESHARI) -/datum/sprite_accessory/marking/vr/voxscales +/datum/sprite_accessory/marking/vr_voxscales name = "Vox Scales" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "Voxscales" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_HEAD) -/datum/sprite_accessory/marking/vr/voxclaws +/datum/sprite_accessory/marking/vr_voxclaws name = "Vox Claws" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "Voxclaws" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND) -/datum/sprite_accessory/marking/vr/voxbeak +/datum/sprite_accessory/marking/vr_voxbeak name = "Vox Beak" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "Voxscales" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/unathihood +/datum/sprite_accessory/marking/vr_unathihood name = "Cobra Hood" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "unathihood" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/unathidoublehorns +/datum/sprite_accessory/marking/vr_unathidoublehorns name = "Double Unathi Horns" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "unathidoublehorns" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/unathihorns +/datum/sprite_accessory/marking/vr_unathihorns name = "Unathi Horns" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "unathihorns" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/unathiramhorns +/datum/sprite_accessory/marking/vr_unathiramhorns name = "Unathi Ram Horns" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "unathiramhorns" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/unathishortspines +/datum/sprite_accessory/marking/vr_unathishortspines name = "Unathi Short Spines" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "unathishortspines" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/unathilongspines +/datum/sprite_accessory/marking/vr_unathilongspines name = "Unathi Long Spines" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "unathilongspines" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/unathishortfrills +/datum/sprite_accessory/marking/vr_unathishortfrills name = "Unathi Short Frills" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "unathishortfrills" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/unathilongfrills +/datum/sprite_accessory/marking/vr_unathilongfrills name = "Unathi Long Frills" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "unathilongfrills" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) -/datum/sprite_accessory/marking/vr/thunderthighs +/datum/sprite_accessory/marking/vr_thunderthighs name = "Boosted Thighs" + icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "thunderthighs" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG,BP_R_LEG) \ No newline at end of file diff --git a/code/modules/mob/new_player/sprite_accessories_taur_vr.dm b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm index fc3994b528..1652fbfca9 100644 --- a/code/modules/mob/new_player/sprite_accessories_taur_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm @@ -57,7 +57,7 @@ suit_sprites = 'icons/mob/taursuits_wolf_vr.dmi' icon_sprite_tag = "wolf" -/datum/sprite_accessory/tail/taur/fatwolf +/datum/sprite_accessory/tail/taur/wolf/fatwolf name = "Fat Wolf (Taur)" icon_state = "fatwolf_s" icon_sprite_tag = "wolf" //This could be modified later. @@ -83,7 +83,7 @@ extra_overlay2 = "synthwolf_glow" //icon_sprite_tag = "synthwolf" -/datum/sprite_accessory/tail/taur/ch/wolf/fatsynthwolf +/datum/sprite_accessory/tail/taur/wolf/fatsynthwolf name = "Fat SynthWolf dual-color (Taur)" icon_state = "fatsynthwolf_s" extra_overlay = "fatsynthwolf_markings" @@ -219,11 +219,11 @@ extra_overlay = "lizard_markings" //icon_sprite_tag = "lizard2c" -/datum/sprite_accessory/tail/taur/ch/lizard/fat +/datum/sprite_accessory/tail/taur/lizard/fatlizard name = "Fat Lizard (Taur)" icon_state = "fatlizard_s" -/datum/sprite_accessory/tail/taur/ch/lizard/fat_2c +/datum/sprite_accessory/tail/taur/lizard/fatlizard_2c name = "Fat Lizard (Taur, dual-color)" icon_state = "fatlizard_s" extra_overlay= "fatlizard_markings" @@ -235,7 +235,7 @@ extra_overlay2 = "synthlizard_glow" //icon_sprite_tag = "synthlizard" -/datum/sprite_accessory/tail/taur/ch/lizard/fatsynthlizard +/datum/sprite_accessory/tail/taur/lizard/fatsynthlizard name = "Fat SynthLizard dual-color (Taur)" icon_state = "fatsynthlizard_s" extra_overlay = "fatsynthlizard_markings" @@ -326,7 +326,7 @@ extra_overlay2 = "synthfeline_glow" //icon_sprite_tag = "synthfeline" -/datum/sprite_accessory/tail/taur/ch/feline/fatsynthfeline +/datum/sprite_accessory/tail/taur/feline/fatsynthfeline name = "Fat SynthFeline dual-color (Taur)" icon_state = "fatsynthfeline_s" extra_overlay = "fatsynthfeline_markings" diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm index 7a3997e22a..2d772b44ae 100644 --- a/code/modules/mob/new_player/sprite_accessories_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_vr.dm @@ -243,64 +243,6 @@ icon_state = "hair_fingerwave" species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN) -//Teshari things -/datum/sprite_accessory/hair/teshari - icon_add = 'icons/mob/human_face_vr_add.dmi' - -/datum/sprite_accessory/hair/teshari_altdefault - icon_add = 'icons/mob/human_face_vr_add.dmi' - -/datum/sprite_accessory/hair/teshari_tight - icon_add = 'icons/mob/human_face_vr_add.dmi' - -/datum/sprite_accessory/hair/teshari_excited - icon_add = 'icons/mob/human_face_vr_add.dmi' - -/datum/sprite_accessory/hair/teshari_spike - icon_add = 'icons/mob/human_face_vr_add.dmi' - -/datum/sprite_accessory/hair/teshari_long - icon_add = 'icons/mob/human_face_vr_add.dmi' - -/datum/sprite_accessory/hair/teshari_burst - icon_add = 'icons/mob/human_face_vr_add.dmi' - -/datum/sprite_accessory/hair/teshari_shortburst - icon_add = 'icons/mob/human_face_vr_add.dmi' - -/datum/sprite_accessory/hair/teshari_mohawk - icon_add = 'icons/mob/human_face_vr_add.dmi' - -/datum/sprite_accessory/hair/teshari_pointy - icon_add = 'icons/mob/human_face_vr_add.dmi' - -/datum/sprite_accessory/hair/teshari_upright - icon_add = 'icons/mob/human_face_vr_add.dmi' - -/datum/sprite_accessory/hair/teshari_mane - icon_add = 'icons/mob/human_face_vr_add.dmi' - -/datum/sprite_accessory/hair/teshari_droopy - icon_add = 'icons/mob/human_face_vr_add.dmi' - -/datum/sprite_accessory/hair/teshari_mushroom - icon_add = 'icons/mob/human_face_vr_add.dmi' - -/datum/sprite_accessory/hair/teshari_twies - icon_add = 'icons/mob/human_face_vr_add.dmi' - -/datum/sprite_accessory/hair/teshari_backstrafe - icon_add = 'icons/mob/human_face_vr_add.dmi' - -/datum/sprite_accessory/hair/teshari_longway - icon_add = 'icons/mob/human_face_vr_add.dmi' - -/datum/sprite_accessory/hair/teshari_tree - icon_add = 'icons/mob/human_face_vr_add.dmi' - -/datum/sprite_accessory/hair/teshari_fluffymohawk - icon = 'icons/mob/human_face_vr.dmi' - icon_add = 'icons/mob/human_face_vr_add.dmi' //Skrell 'hairstyles' - these were requested for a chimera and screw it, if one wants to eat seafood, go nuts /datum/sprite_accessory/hair/skr_tentacle_veryshort diff --git a/code/modules/mob/typing_indicator.dm b/code/modules/mob/typing_indicator.dm index e9715834c8..35fe2d8bbb 100644 --- a/code/modules/mob/typing_indicator.dm +++ b/code/modules/mob/typing_indicator.dm @@ -40,7 +40,7 @@ set hidden = 1 set_typing_indicator(TRUE) - var/message = input(usr, "","say (text)") as text + var/message = tgui_input_text(usr, "Type your message:", "Say") set_typing_indicator(FALSE) if(message) @@ -51,8 +51,25 @@ set hidden = 1 set_typing_indicator(TRUE) - var/message = input(usr, "","me (text)") as message //VOREStation Edit + var/message = tgui_input_message(usr, "Type your message:", "Emote") set_typing_indicator(FALSE) if(message) me_verb(message) + +// No typing indicators here, but this is the file where the wrappers are, so... +/mob/verb/whisper_wrapper() + set name = ".Whisper" + set hidden = 1 + + var/message = tgui_input_text(usr, "Type your message:", "Whisper") + if(message) + whisper(message) + +/mob/verb/subtle_wrapper() + set name = ".Subtle" + set hidden = 1 + + var/message = tgui_input_message(usr, "Type your message:", "Subtle") + if(message) + me_verb_subtle(message) diff --git a/code/modules/modular_computers/file_system/programs/generic/game.dm b/code/modules/modular_computers/file_system/programs/generic/game.dm index cde240be73..31eaac08d2 100644 --- a/code/modules/modular_computers/file_system/programs/generic/game.dm +++ b/code/modules/modular_computers/file_system/programs/generic/game.dm @@ -166,7 +166,7 @@ to_chat(usr, "Hardware error: Printer is out of paper.") return else - computer.visible_message("\The [computer] prints out paper.") + computer.visible_message("\The [computer] prints out paper.") if(ticket_count >= 1) new /obj/item/stack/arcadeticket((get_turf(computer)), 1) to_chat(usr, "[src] dispenses a ticket!") diff --git a/code/modules/multiz/ladders.dm b/code/modules/multiz/ladders.dm index 8c726a8ed3..6b03f8f610 100644 --- a/code/modules/multiz/ladders.dm +++ b/code/modules/multiz/ladders.dm @@ -94,7 +94,7 @@ /obj/structure/ladder/proc/climbLadder(var/mob/M, var/obj/target_ladder) var/direction = (target_ladder == target_up ? "up" : "down") - M.visible_message("\The [M] begins climbing [direction] \the [src]!", + M.visible_message("\The [M] begins climbing [direction] \the [src]!", "You begin climbing [direction] \the [src]!", "You hear the grunting and clanging of a metal ladder being used.") diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index abaf66559d..f82d65275f 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -461,9 +461,9 @@ if(damage_desc) if(user == src.owner) var/datum/gender/T = gender_datums[user.get_visible_gender()] - user.visible_message("\The [user] patches [damage_desc] on [T.his] [src.name] with [tool].") + user.visible_message("\The [user] patches [damage_desc] on [T.his] [src.name] with [tool].") else - user.visible_message("\The [user] patches [damage_desc] on [owner]'s [src.name] with [tool].") + user.visible_message("\The [user] patches [damage_desc] on [owner]'s [src.name] with [tool].") return 1 diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm index 7216540734..d35a5aa516 100644 --- a/code/modules/organs/organ_icon.dm +++ b/code/modules/organs/organ_icon.dm @@ -131,6 +131,15 @@ var/global/list/limb_icon_cache = list() I.Blend(rgb(h_col[1],h_col[2],h_col[3]), ICON_MULTIPLY) //VOREStation edit limb_icon_cache[cache_key] = I mob_icon.Blend(limb_icon_cache[cache_key], ICON_OVERLAY) + + // VOREStation edit start + if(nail_polish) + var/icon/I = new(nail_polish.icon, nail_polish.icon_state) + I.Blend(nail_polish.color, ICON_MULTIPLY) + add_overlay(I) + mob_icon.Blend(I, ICON_OVERLAY) + icon_cache_key += "_[nail_polish.icon]_[nail_polish.icon_state]_[nail_polish.color]" + // VOREStation edit end if(model) icon_cache_key += "_model_[model]" diff --git a/code/modules/organs/subtypes/slime.dm b/code/modules/organs/subtypes/slime.dm index eef360a515..fa60367e93 100644 --- a/code/modules/organs/subtypes/slime.dm +++ b/code/modules/organs/subtypes/slime.dm @@ -71,7 +71,7 @@ /obj/item/organ/internal/heart/grey/colormatch/slime/process() ..() if(!(QDELETED(src)) && src.loc != owner) - visible_message("\The [src] splatters!") + visible_message("\The [src] splatters!") var/turf/T = get_turf(src) var/obj/effect/decal/cleanable/blood/B = new (T) @@ -120,7 +120,7 @@ ..() if(!(QDELETED(src)) && src.loc != owner) - visible_message("\The [src] splatters!") + visible_message("\The [src] splatters!") var/turf/T = get_turf(src) var/obj/effect/decal/cleanable/blood/B = new (T) diff --git a/code/modules/overmap/disperser/disperser.dm b/code/modules/overmap/disperser/disperser.dm index b51c0fb709..c7a5efd130 100644 --- a/code/modules/overmap/disperser/disperser.dm +++ b/code/modules/overmap/disperser/disperser.dm @@ -24,7 +24,7 @@ /obj/machinery/disperser/attackby(obj/item/I, mob/user) if(I && I.is_wrench()) if(panel_open) - user.visible_message("\The [user] rotates \the [src] with \the [I].", + user.visible_message("\The [user] rotates \the [src] with \the [I].", "You rotate \the [src] with \the [I].") set_dir(turn(dir, 90)) playsound(src, 'sound/items/jaws_pry.ogg', 50, 1) diff --git a/code/modules/paperwork/adminpaper.dm b/code/modules/paperwork/adminpaper.dm index d5af66f01e..1a6077c30a 100644 --- a/code/modules/paperwork/adminpaper.dm +++ b/code/modules/paperwork/adminpaper.dm @@ -87,8 +87,10 @@ to_chat(usr, "There isn't enough space left on \the [src] to write anything.") return - var/t = sanitize(input(usr, "Enter what you want to write:", "Write", null, null) as message, free_space, extra = 0) - + var/raw_t = tgui_input_message(usr, "Enter what you want to write:", "Write") + if(!raw_t) + return + var/t = sanitize(raw_t, free_space, extra = 0) if(!t) return diff --git a/code/modules/paperwork/paper_sticky.dm b/code/modules/paperwork/paper_sticky.dm index 4332be7762..04f4249cfb 100644 --- a/code/modules/paperwork/paper_sticky.dm +++ b/code/modules/paperwork/paper_sticky.dm @@ -37,7 +37,7 @@ var/text = sanitizeSafe(input(usr, "What would you like to write?") as text, writing_space) if(!text || thing.loc != user || (!Adjacent(user) && loc != user) || user.incapacitated()) return - user.visible_message(SPAN_NOTICE("\The [user] jots a note down on \the [src].")) + user.visible_message("\The [user] jots a note down on \the [src].") written_by = user.ckey if(written_text) written_text = "[written_text] [text]" diff --git a/code/modules/persistence/datum/persistence_datum.dm b/code/modules/persistence/datum/persistence_datum.dm index a52b57fb66..325ff15ced 100644 --- a/code/modules/persistence/datum/persistence_datum.dm +++ b/code/modules/persistence/datum/persistence_datum.dm @@ -20,6 +20,14 @@ if(!isnull(entries_decay_at) && !isnull(entries_expire_at)) entries_decay_at = round(entries_expire_at * entries_decay_at) +/datum/persistent/proc/Initialize() + if(fexists(filename)) + var/list/tokens = json_decode(file2text(filename)) + for(var/list/token in tokens) + if(!CheckTokenSanity(token)) + tokens -= token + ProcessAndApplyTokens(tokens) + /datum/persistent/proc/GetValidTurf(var/turf/T, var/list/token) if(T && CheckTurfContents(T, token)) return T @@ -93,14 +101,6 @@ "age" = GetEntryAge(entry) ) -/datum/persistent/proc/Initialize() - if(fexists(filename)) - var/list/tokens = json_decode(file2text(filename)) - for(var/list/token in tokens) - if(!CheckTokenSanity(token)) - tokens -= token - ProcessAndApplyTokens(tokens) - /datum/persistent/proc/Shutdown() if(fexists(filename)) fdel(filename) diff --git a/code/modules/persistence/graffiti.dm b/code/modules/persistence/graffiti.dm index 2259186c71..999a82ea90 100644 --- a/code/modules/persistence/graffiti.dm +++ b/code/modules/persistence/graffiti.dm @@ -47,7 +47,7 @@ var/obj/item/weapon/weldingtool/welder = thing if(welder.isOn() && welder.remove_fuel(0,user) && do_after(user, 5, src) && !QDELETED(src)) playsound(src.loc, welder.usesound, 50, 1) - user.visible_message("\The [user] clears away some graffiti.") + user.visible_message("\The [user] clears away some graffiti.") qdel(src) else if(thing.sharp) diff --git a/code/modules/persistence/paintings.dm b/code/modules/persistence/paintings.dm new file mode 100644 index 0000000000..a9bf169841 --- /dev/null +++ b/code/modules/persistence/paintings.dm @@ -0,0 +1,36 @@ +/datum/persistent/paintings + name = "paintings" + entries_expire_at = 1000 // Basically forever + +/datum/persistent/paintings/SetFilename() + filename = "data/persistent/paintings.json" + +/datum/persistent/paintings/Initialize() + . = ..() + if(fexists(filename)) + SSpersistence.paintings = json_decode(file2text(filename)) + var/list/tokens = SSpersistence.paintings + for(var/list/token in tokens) + token["age"]++ // Increment age! + if(!CheckTokenSanity(token)) + tokens -= token + + for(var/obj/structure/sign/painting/P in SSpersistence.painting_frames) + P.load_persistent() + return + +/datum/persistent/paintings/CheckTokenSanity(var/list/token) + var/png_filename = "data/paintings/[token["persistence_id"]]/[token["md5"]].png" + if(!fexists(png_filename)) + return FALSE + if(token["age"] > entries_expire_at) + fdel(png_filename) + return FALSE + +/datum/persistent/paintings/Shutdown() + for(var/obj/structure/sign/painting/P in SSpersistence.painting_frames) + P.save_persistent() + + if(fexists(filename)) + fdel(filename) + to_file(file(filename), json_encode(SSpersistence.paintings)) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 4d7a154581..aa37003520 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -5,8 +5,8 @@ /obj/item/weapon/cell name = "power cell" desc = "A rechargable electrochemical power cell." - icon = 'icons/obj/power.dmi' - icon_state = "cell" + icon = 'icons/obj/power_cells.dmi' + icon_state = "b_st" item_state = "cell" origin_tech = list(TECH_POWER = 1) force = 5.0 @@ -29,8 +29,7 @@ pickup_sound = 'sound/items/pickup/component.ogg' // Overlay stuff. - var/overlay_half_state = "cell-o1" // Overlay used when not fully charged but not empty. - var/overlay_full_state = "cell-o2" // Overlay used when fully charged. + var/standard_overlays = TRUE var/last_overlay_state = null // Used to optimize update_icon() calls. /obj/item/weapon/cell/New() @@ -73,29 +72,14 @@ #define OVERLAY_EMPTY 0 /obj/item/weapon/cell/update_icon() - var/new_overlay = null // The overlay that is needed. - // If it's different than the current overlay, then it'll get changed. - // Otherwise nothing happens, to save on CPU. - - if(charge < 0.01) // Empty. - new_overlay = OVERLAY_EMPTY - if(last_overlay_state != new_overlay) - cut_overlays() - - else if(charge/maxcharge >= 0.995) // Full - new_overlay = OVERLAY_FULL - if(last_overlay_state != new_overlay) - cut_overlay(overlay_half_state) - add_overlay(overlay_full_state) - - - else // Inbetween. - new_overlay = OVERLAY_PARTIAL - if(last_overlay_state != new_overlay) - cut_overlay(overlay_full_state) - add_overlay(overlay_half_state) - - last_overlay_state = new_overlay + if(!standard_overlays) + return + var/ratio = clamp(round(charge / maxcharge, 0.25) * 100, 0, 100) + var/new_state = "[icon_state]_[ratio]" + if(new_state != last_overlay_state) + cut_overlay(last_overlay_state) + add_overlay(new_state) + last_overlay_state = new_state #undef OVERLAY_FULL #undef OVERLAY_PARTIAL diff --git a/code/modules/power/cells/device_cells.dm b/code/modules/power/cells/device_cells.dm index 908433ecec..3b6e71e2ed 100644 --- a/code/modules/power/cells/device_cells.dm +++ b/code/modules/power/cells/device_cells.dm @@ -2,7 +2,7 @@ /obj/item/weapon/cell/device name = "device power cell" desc = "A small power cell designed to power handheld devices." - icon_state = "dcell" + icon_state = "m_st" item_state = "egg6" w_class = ITEMSIZE_SMALL force = 0 @@ -16,7 +16,7 @@ /obj/item/weapon/cell/device/weapon name = "weapon power cell" desc = "A small power cell designed to power handheld weaponry." - icon_state = "wcell" + icon_state = "m_sup" maxcharge = 2400 charge_amount = 20 @@ -28,7 +28,7 @@ /obj/item/weapon/cell/device/weapon/recharge name = "self-charging weapon power cell" desc = "A small power cell designed to power handheld weaponry. This one recharges itself." -// icon_state = "wcell" //TODO: Different sprite + icon_state = "meb_m_nu" self_recharge = TRUE charge_amount = 120 charge_delay = 75 diff --git a/code/modules/power/cells/device_cells_vr.dm b/code/modules/power/cells/device_cells_vr.dm index 41291ab0c4..54fd8965aa 100644 --- a/code/modules/power/cells/device_cells_vr.dm +++ b/code/modules/power/cells/device_cells_vr.dm @@ -3,6 +3,7 @@ /obj/item/weapon/cell/device/weapon/recharge/alien name = "void cell (device)" var/swaps_to = /obj/item/weapon/cell/void + standard_overlays = FALSE /obj/item/weapon/cell/device/weapon/recharge/alien/attack_self(var/mob/user) user.remove_from_mob(src) @@ -13,10 +14,6 @@ newcell.charge = newcell.maxcharge * percentage qdel(src) -/obj/item/weapon/cell/device/weapon/recharge/alien/update_icon() - return - - //The machine cell /obj/item/weapon/cell/void name = "void cell (machinery)" @@ -29,6 +26,7 @@ self_recharge = TRUE charge_delay = 50 matter = null + standard_overlays = FALSE var/swaps_to = /obj/item/weapon/cell/device/weapon/recharge/alien /obj/item/weapon/cell/void/attack_self(var/mob/user) @@ -40,9 +38,6 @@ newcell.charge = newcell.maxcharge * percentage qdel(src) -/obj/item/weapon/cell/void/update_icon() - return - // Bloo friendlier hybrid tech /obj/item/weapon/cell/device/weapon/recharge/alien/hybrid icon = 'icons/obj/power_vr.dmi' diff --git a/code/modules/power/cells/esoteric_cells.dm b/code/modules/power/cells/esoteric_cells.dm index b9bb06bf68..a37fd22050 100644 --- a/code/modules/power/cells/esoteric_cells.dm +++ b/code/modules/power/cells/esoteric_cells.dm @@ -3,7 +3,7 @@ name = "modified power cell" desc = "A modified power cell sitting in a highly conductive chassis." origin_tech = list(TECH_POWER = 2) - icon_state = "spikecell" + icon_state = "exs_m" maxcharge = 10000 matter = list(MAT_STEEL = 1000, MAT_GLASS = 80, MAT_SILVER = 100) self_recharge = TRUE diff --git a/code/modules/power/cells/power_cells.dm b/code/modules/power/cells/power_cells.dm index a704b752cb..09831fd42e 100644 --- a/code/modules/power/cells/power_cells.dm +++ b/code/modules/power/cells/power_cells.dm @@ -2,6 +2,7 @@ name = "\improper rechargable AA battery" desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT origin_tech = list(TECH_POWER = 0) + icon_state = "s_st" maxcharge = 500 matter = list(MAT_STEEL = 700, MAT_GLASS = 40) @@ -12,6 +13,7 @@ /obj/item/weapon/cell/secborg name = "security borg rechargable D battery" origin_tech = list(TECH_POWER = 0) + icon_state = "meb_s_st" maxcharge = 600 //600 max charge / 100 charge per shot = six shots matter = list(MAT_STEEL = 700, MAT_GLASS = 40) @@ -23,13 +25,14 @@ /obj/item/weapon/cell/apc name = "heavy-duty power cell" origin_tech = list(TECH_POWER = 1) + icon_state = "meb_b_st" maxcharge = 5000 matter = list(MAT_STEEL = 700, MAT_GLASS = 50) /obj/item/weapon/cell/high name = "high-capacity power cell" origin_tech = list(TECH_POWER = 2) - icon_state = "hcell" + icon_state = "b_hi" maxcharge = 10000 matter = list(MAT_STEEL = 700, MAT_GLASS = 60) @@ -41,7 +44,7 @@ /obj/item/weapon/cell/super name = "super-capacity power cell" origin_tech = list(TECH_POWER = 5) - icon_state = "scell" + icon_state = "b_sup" maxcharge = 20000 matter = list(MAT_STEEL = 700, MAT_GLASS = 70) @@ -53,7 +56,7 @@ /obj/item/weapon/cell/hyper name = "hyper-capacity power cell" origin_tech = list(TECH_POWER = 6) - icon_state = "hpcell" + icon_state = "b_hy" maxcharge = 30000 matter = list(MAT_STEEL = 700, MAT_GLASS = 80) @@ -64,12 +67,13 @@ /obj/item/weapon/cell/mech name = "mecha power cell" + icon_state = "exs_l" charge = 15000 maxcharge = 15000 /obj/item/weapon/cell/infinite name = "infinite-capacity power cell!" - icon_state = "icell" + icon_state = "infinite_b" origin_tech = null maxcharge = 30000 //determines how badly mobs get shocked matter = list(MAT_STEEL = 700, MAT_GLASS = 80) @@ -89,6 +93,7 @@ charge = 100 maxcharge = 300 minor_fault = 1 + standard_overlays = FALSE /obj/item/weapon/cell/slime name = "charged slime core" @@ -100,13 +105,14 @@ maxcharge = 10000 matter = null self_recharge = TRUE + standard_overlays = FALSE //Not actually a cell, but if people look for it, they'll probably look near other cells /obj/item/device/fbp_backup_cell name = "backup battery" desc = "A small one-time-use chemical battery for synthetic crew when they are low on power in emergency situations." - icon = 'icons/obj/power.dmi' - icon_state = "fbp_cell" + icon = 'icons/obj/power_cells.dmi' + icon_state = "exs_s" w_class = ITEMSIZE_SMALL var/amount = 100 var/used = FALSE @@ -144,6 +150,7 @@ desc = "A tiny power cell with a very low power capacity. Used in light fixtures to power them in the event of an outage." maxcharge = 120 //Emergency lights use 0.2 W per tick, meaning ~10 minutes of emergency power from a cell matter = list(MAT_GLASS = 20) + icon_state = "meb_s_sup" w_class = ITEMSIZE_TINY /obj/item/weapon/cell/emergency_light/Initialize() diff --git a/code/modules/power/fusion/core/_core.dm b/code/modules/power/fusion/core/_core.dm index af1f24449e..aba9087b75 100644 --- a/code/modules/power/fusion/core/_core.dm +++ b/code/modules/power/fusion/core/_core.dm @@ -67,7 +67,7 @@ GLOBAL_LIST_EMPTY(fusion_cores) if(Output.get_pairing()) reagents.trans_to_holder(Output.reagents, Output.reagents.maximum_volume) if(prob(5)) - visible_message("\The [src] gurgles as it exports fluid.") + visible_message("\The [src] gurgles as it exports fluid.") if(owned_field) @@ -131,7 +131,7 @@ GLOBAL_LIST_EMPTY(fusion_cores) /obj/machinery/power/fusion_core/attack_hand(var/mob/user) if(!Adjacent(user)) // As funny as it was for the AI to hug-kill the tokamak field from a distance... return - visible_message("\The [user] hugs \the [src] to make it feel better!") + visible_message("\The [user] hugs \the [src] to make it feel better!") if(owned_field) Shutdown() diff --git a/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm b/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm index 89b11da6c1..cccde09edc 100644 --- a/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm +++ b/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm @@ -26,14 +26,14 @@ to_chat(user, "You need at least three hundred units of material to form a fuel rod.") return 1 var/datum/reagent/R = thing.reagents.reagent_list[1] - visible_message("\The [src] compresses the contents of \the [thing] into a new fuel assembly.") + visible_message("\The [src] compresses the contents of \the [thing] into a new fuel assembly.") var/obj/item/weapon/fuel_assembly/F = new(get_turf(src), R.id, R.color) thing.reagents.remove_reagent(R.id, R.volume) user.put_in_hands(F) else if(istype(thing, /obj/machinery/power/supermatter)) var/obj/item/weapon/fuel_assembly/F = new(get_turf(src), "supermatter") - visible_message("\The [src] compresses \the [thing] into a new fuel assembly.") + visible_message("\The [src] compresses \the [thing] into a new fuel assembly.") qdel(thing) user.put_in_hands(F) return 1 @@ -58,7 +58,7 @@ to_chat(user, "You need at least 25 [mat.sheet_plural_name] to make a fuel rod.") return var/obj/item/weapon/fuel_assembly/F = new(get_turf(src), mat.name) - visible_message("\The [src] compresses the [mat.use_name] into a new fuel assembly.") + visible_message("\The [src] compresses the [mat.use_name] into a new fuel assembly.") M.use(FUSION_ROD_SHEET_AMT) user.put_in_hands(F) diff --git a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm index e45fe4ad9c..da989865e6 100644 --- a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm +++ b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm @@ -56,9 +56,9 @@ GLOBAL_LIST_EMPTY(fuel_injectors) if(cur_assembly) cur_assembly.forceMove(get_turf(src)) - visible_message("\The [user] swaps \the [src]'s [cur_assembly] for \a [W].") + visible_message("\The [user] swaps \the [src]'s [cur_assembly] for \a [W].") else - visible_message("\The [user] inserts \a [W] into \the [src].") + visible_message("\The [user] inserts \a [W] into \the [src].") user.drop_from_inventory(W) W.forceMove(src) @@ -92,7 +92,7 @@ GLOBAL_LIST_EMPTY(fuel_injectors) if(cur_assembly) cur_assembly.forceMove(get_turf(src)) user.put_in_hands(cur_assembly) - visible_message("\The [user] removes \the [cur_assembly] from \the [src].") + visible_message("\The [user] removes \the [cur_assembly] from \the [src].") cur_assembly = null return else diff --git a/code/modules/power/port_gen_vr.dm b/code/modules/power/port_gen_vr.dm index ceb0b24429..5964adc297 100644 --- a/code/modules/power/port_gen_vr.dm +++ b/code/modules/power/port_gen_vr.dm @@ -240,3 +240,44 @@ . = ..() cell = new /obj/item/weapon/cell/void/hybrid(src) RefreshParts() + + +// Kugelblitz generator, confined black hole like a singulo but smoller and higher tech +// Presumably whoever made these has better tech than most +/obj/machinery/power/rtg/kugelblitz + name = "kugelblitz generator" + desc = "A power source harnessing a small black hole." + icon = 'icons/obj/structures/decor64x64.dmi' + icon_state = "bigdice" + bound_width = 64 + bound_height = 64 + power_gen = 30000 + irradiate = FALSE // Green energy! + can_buckle = FALSE + +/obj/machinery/power/rtg/kugelblitz/proc/asplod() + visible_message("\The [src] lets out an shower of sparks as it starts to lose stability!",\ + "You hear a loud electrical crack!") + playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5) + var/turf/T = get_turf(src) + qdel(src) + new /obj/singularity(T) + +/obj/machinery/power/rtg/kugelblitz/blob_act(obj/structure/blob/B) + asplod() + +/obj/machinery/power/rtg/kugelblitz/ex_act() + asplod() + +/obj/machinery/power/rtg/kugelblitz/fire_act(exposed_temperature, exposed_volume) + asplod() + +/obj/machinery/power/rtg/kugelblitz/tesla_act() + ..() //extend the zap + asplod() + +/obj/machinery/power/rtg/kugelblitz/bullet_act(obj/item/projectile/Proj) + . = ..() + if(istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)) && Proj.damage >= 20) + log_and_message_admins("[ADMIN_LOOKUPFLW(Proj.firer)] triggered a kugelblitz core explosion at [x],[y],[z] via projectile.") + asplod() diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm index 213b37d01a..5c9031a831 100644 --- a/code/modules/power/singularity/generator.dm +++ b/code/modules/power/singularity/generator.dm @@ -32,7 +32,7 @@ if(W.is_screwdriver()) panel_open = !panel_open playsound(src, W.usesound, 50, 1) - visible_message("\The [user] adjusts \the [src]'s mechanisms.") + visible_message("\The [user] adjusts \the [src]'s mechanisms.") if(panel_open && do_after(user, 30)) to_chat(user, "\The [src] looks like it could be modified.") if(panel_open && do_after(user, 80 * W.toolspeed)) // We don't have skills, so a delayed hint for engineers will have to do for now. (Panel open check for sanity) @@ -41,10 +41,10 @@ else to_chat(user, "\The [src]'s mechanisms look secure.") if(istype(W, /obj/item/weapon/smes_coil/super_io) && panel_open) - visible_message("\The [user] begins to modify \the [src] with \the [W].") + visible_message("\The [user] begins to modify \the [src] with \the [W].") if(do_after(user, 300)) user.drop_from_inventory(W) - visible_message("\The [user] installs \the [W] onto \the [src].") + visible_message("\The [user] installs \the [W] onto \the [src].") qdel(W) var/turf/T = get_turf(src) var/new_machine = /obj/machinery/particle_smasher diff --git a/code/modules/power/singularity/particle_accelerator/particle_smasher.dm b/code/modules/power/singularity/particle_accelerator/particle_smasher.dm index adff836cee..44e5c5d4fc 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_smasher.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_smasher.dm @@ -174,7 +174,7 @@ recipes = typesof(/datum/particle_smasher_recipe) if(!target) // You are just blasting an empty machine. - visible_message("\The [src] shudders.") + visible_message("\The [src] shudders.") update_icon() return diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 4686b41909..de0a1f46bd 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -246,7 +246,7 @@ to_chat(user, "You ready \the [src]! Click and drag the target around to shoot.") else//Otherwise just make a new one auto_target = new/obj/screen/auto_target(get_turf(A), src) - visible_message("\[user] readies the [src]!") + visible_message("\The [user] readies the [src]!") playsound(src, 'sound/weapons/TargetOn.ogg', 50, 1) to_chat(user, "You ready \the [src]! Click and drag the target around to shoot.") return diff --git a/code/modules/projectiles/guns/magnetic/bore.dm b/code/modules/projectiles/guns/magnetic/bore.dm index eea444fbf6..3d52f5737e 100644 --- a/code/modules/projectiles/guns/magnetic/bore.dm +++ b/code/modules/projectiles/guns/magnetic/bore.dm @@ -63,7 +63,7 @@ if(removing) user.put_in_hands(removing) - user.visible_message("\The [user] removes \the [removing] from \the [src].") + user.visible_message("\The [user] removes \the [removing] from \the [src].") playsound(src, 'sound/machines/click.ogg', 10, 1) update_icon() return @@ -91,7 +91,7 @@ to_chat(user, "\The [src] has no manipulator installed.") return user.put_in_hands(manipulator) - user.visible_message("\The [user] levers \the [manipulator] from \the [src].") + user.visible_message("\The [user] levers \the [manipulator] from \the [src].") playsound(src, thing.usesound, 50, 1) mat_cost = initial(mat_cost) manipulator = null @@ -107,7 +107,7 @@ user.drop_from_inventory(manipulator, src) playsound(src, 'sound/machines/click.ogg', 10,1) mat_cost = initial(mat_cost) / (2*manipulator.rating) - user.visible_message("\The [user] slots \the [manipulator] into \the [src].") + user.visible_message("\The [user] slots \the [manipulator] into \the [src].") update_icon() update_rating_mod() return @@ -143,7 +143,7 @@ mat_storage += (SHEET_MATERIAL_AMOUNT/2*0.8) //two plasma ores needed per sheet, some inefficiency for not using refined product success = TRUE if(success) - user.visible_message("\The [user] loads \the [src] with \the [M].") + user.visible_message("\The [user] loads \the [src] with \the [M].") playsound(src, 'sound/weapons/flipblade.ogg', 50, 1) update_icon() return diff --git a/code/modules/projectiles/guns/magnetic/magnetic.dm b/code/modules/projectiles/guns/magnetic/magnetic.dm index 12d00c63ac..f4933efbf3 100644 --- a/code/modules/projectiles/guns/magnetic/magnetic.dm +++ b/code/modules/projectiles/guns/magnetic/magnetic.dm @@ -151,7 +151,7 @@ cell = thing user.drop_from_inventory(cell, src) playsound(src, 'sound/machines/click.ogg', 10, 1) - user.visible_message("\The [user] slots \the [cell] into \the [src].") + user.visible_message("\The [user] slots \the [cell] into \the [src].") update_icon() return @@ -160,7 +160,7 @@ to_chat(user, "\The [src] has no capacitor installed.") return user.put_in_hands(capacitor) - user.visible_message("\The [user] unscrews \the [capacitor] from \the [src].") + user.visible_message("\The [user] unscrews \the [capacitor] from \the [src].") playsound(src, thing.usesound, 50, 1) capacitor = null update_icon() @@ -174,7 +174,7 @@ user.drop_from_inventory(capacitor, src) playsound(src, 'sound/machines/click.ogg', 10, 1) power_per_tick = (power_cost*0.15) * capacitor.rating - user.visible_message("\The [user] slots \the [capacitor] into \the [src].") + user.visible_message("\The [user] slots \the [capacitor] into \the [src].") update_icon() return @@ -195,7 +195,7 @@ loaded = new load_type(src, 1) ammo.use(1) - user.visible_message("\The [user] loads \the [src] with \the [loaded].") + user.visible_message("\The [user] loads \the [src] with \the [loaded].") playsound(src, 'sound/weapons/flipblade.ogg', 50, 1) update_icon() return @@ -215,7 +215,7 @@ if(removing) removing.forceMove(get_turf(src)) user.put_in_hands(removing) - user.visible_message("\The [user] removes \the [removing] from \the [src].") + user.visible_message("\The [user] removes \the [removing] from \the [src].") playsound(src, 'sound/machines/click.ogg', 10, 1) update_icon() return diff --git a/code/modules/projectiles/guns/magnetic/magnetic_construction.dm b/code/modules/projectiles/guns/magnetic/magnetic_construction.dm index 003d6c956c..9f81dbe4dc 100644 --- a/code/modules/projectiles/guns/magnetic/magnetic_construction.dm +++ b/code/modules/projectiles/guns/magnetic/magnetic_construction.dm @@ -17,19 +17,19 @@ to_chat(user, "You need at least 5 [reinforcing.singular_name]\s for this task.") return reinforcing.use(5) - user.visible_message("\The [user] shapes some steel sheets around \the [src] to form a body.") + user.visible_message("\The [user] shapes some steel sheets around \the [src] to form a body.") increment_construction_stage() return if(istype(thing, /obj/item/weapon/tape_roll) && construction_stage == 2) - user.visible_message("\The [user] secures \the [src] together with \the [thing].") + user.visible_message("\The [user] secures \the [src] together with \the [thing].") increment_construction_stage() return if(istype(thing, /obj/item/pipe) && construction_stage == 3) user.drop_from_inventory(thing) qdel(thing) - user.visible_message("\The [user] jams \the [thing] into \the [src].") + user.visible_message("\The [user] jams \the [thing] into \the [src].") increment_construction_stage() return @@ -44,7 +44,7 @@ to_chat(user, "You need more fuel!") return - user.visible_message("\The [user] welds the barrel of \the [src] into place.") + user.visible_message("\The [user] welds the barrel of \the [src] into place.") playsound(src, 'sound/items/Welder2.ogg', 100, 1) increment_construction_stage() return @@ -55,19 +55,19 @@ to_chat(user, "You need at least 5 lengths of cable for this task.") return cable.use(5) - user.visible_message("\The [user] wires \the [src].") + user.visible_message("\The [user] wires \the [src].") increment_construction_stage() return if(istype(thing, /obj/item/weapon/smes_coil) && construction_stage >= 6 && construction_stage <= 8) - user.visible_message("\The [user] installs \a [thing] into \the [src].") + user.visible_message("\The [user] installs \a [thing] into \the [src].") user.drop_from_inventory(thing) qdel(thing) increment_construction_stage() return if(thing.is_screwdriver() && construction_stage >= 9) - user.visible_message("\The [user] secures \the [src] and finishes it off.") + user.visible_message("\The [user] secures \the [src] and finishes it off.") playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) var/obj/item/weapon/gun/magnetic/coilgun = new(loc) var/put_in_hands diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 17dae5c90e..c7fcc6d30e 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -667,7 +667,7 @@ if(result == PROJECTILE_FORCE_MISS) if(!silenced) - target_mob.visible_message("\The [src] misses \the [target_mob] narrowly!") + target_mob.visible_message("\The [src] misses \the [target_mob] narrowly!") playsound(target_mob, "bullet_miss", 75, 1) return FALSE diff --git a/code/modules/projectiles/targeting/targeting_overlay.dm b/code/modules/projectiles/targeting/targeting_overlay.dm index cea545ce25..67525bdc5b 100644 --- a/code/modules/projectiles/targeting/targeting_overlay.dm +++ b/code/modules/projectiles/targeting/targeting_overlay.dm @@ -217,7 +217,7 @@ if(istype(aiming_with, /obj/item/weapon/gun)) playsound(owner, 'sound/weapons/TargetOff.ogg', 50,1) if(!no_message) - owner.visible_message("\The [owner] lowers \the [aiming_with].") + owner.visible_message("\The [owner] lowers \the [aiming_with].") aiming_with = null aiming_at.aimed -= src diff --git a/code/modules/reagents/machinery/distillery.dm b/code/modules/reagents/machinery/distillery.dm index c9679ccec9..6e0ad4d7c0 100644 --- a/code/modules/reagents/machinery/distillery.dm +++ b/code/modules/reagents/machinery/distillery.dm @@ -146,7 +146,7 @@ to_chat(user, "You press \the [src]'s chamber agitator button.") if(on) - visible_message("\The [src] rattles to life.") + visible_message("\The [src] rattles to life.") reagents.handle_reactions() else spawn(1 SECOND) @@ -316,7 +316,7 @@ if(target_temp == round(current_temp, 1.0)) current_temp = target_temp // Hard set it so we don't need to worry about exact decimals any more, after we've been keeping track of it all this time playsound(src, 'sound/machines/ping.ogg', 50, 0) - src.visible_message("\The [src] pings as it reaches the target temperature.") + src.visible_message("\The [src] pings as it reaches the target temperature.") else if(connected_port && avg_pressure > 1000) current_temp = round((current_temp + avg_temp) / 2) diff --git a/code/modules/reagents/reagents/medicine.dm b/code/modules/reagents/reagents/medicine.dm index fce96ffff6..17454a7bd9 100644 --- a/code/modules/reagents/reagents/medicine.dm +++ b/code/modules/reagents/reagents/medicine.dm @@ -347,7 +347,7 @@ var/obj/item/stack/medical/M = C.upgrade_stack(to_produce) if(M && M.amount) - holder.my_atom.visible_message("\The [packname] bubbles.") + holder.my_atom.visible_message("\The [packname] bubbles.") remove_self(to_produce * 5) /datum/reagent/cryoxadone @@ -1256,7 +1256,7 @@ var/obj/item/stack/medical/M = C.upgrade_stack(to_produce) if(M && M.amount) - holder.my_atom.visible_message("\The [packname] bubbles.") + holder.my_atom.visible_message("\The [packname] bubbles.") remove_self(to_produce) /datum/reagent/sterilizine diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 610fb85e54..ae9a97c5d1 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -110,7 +110,7 @@ if(istype(I, /obj/item/weapon/material/ashtray)) var/obj/item/weapon/material/ashtray/A = I if(A.contents.len > 0) - user.visible_message("\The [user] empties \the [A.name] into [src].") + user.visible_message("\The [user] empties \the [A] into [src].") for(var/obj/item/O in A.contents) O.forceMove(src) A.update_icon() diff --git a/code/modules/research/designs/bag_of_holding.dm b/code/modules/research/designs/bag_of_holding.dm index bdaa9b374a..6f5a70adc6 100644 --- a/code/modules/research/designs/bag_of_holding.dm +++ b/code/modules/research/designs/bag_of_holding.dm @@ -29,4 +29,23 @@ req_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 6) materials = list(MAT_GOLD = 3000, MAT_DIAMOND = 1500, MAT_URANIUM = 250) build_path = /obj/item/weapon/storage/backpack/holding/duffle - sort_string = "QAAAB" \ No newline at end of file + sort_string = "QAAAB" + +/datum/design/item/boh/bag_holding + name = "Trashbag of Holding" + desc = "Considerably more utilitarian than the Bag of Holding, the Trashbag of Holding is a janitor's best friend." + id = "trashbag_holding" + req_tech = list(TECH_BLUESPACE = 3, TECH_MATERIAL = 5) + materials = list("gold" = 2000, "diamond" = 1000, "uranium" = 250) + build_path = /obj/item/weapon/storage/bag/trash/holding + sort_string = "QAAAC" + +/datum/design/item/boh/pouch_holding + name = "Pouch of Holding" + desc = "Somehow compresses the storage of a backpack into a pouch-sized container!" + id = "pouch_holding" + req_tech = list(TECH_BLUESPACE = 3, TECH_MATERIAL = 5) + materials = list("gold" = 3000, "diamond" = 2000, "uranium" = 250) + build_path = /obj/item/weapon/storage/pouch/holding + sort_string = "QAAAD" + \ No newline at end of file diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm index 928b4af380..2c97941309 100644 --- a/code/modules/resleeving/machines.dm +++ b/code/modules/resleeving/machines.dm @@ -383,7 +383,7 @@ var/obj/item/stack/material/S = W if(!(S.material.name in stored_material)) - to_chat(user, "\the [src] doesn't accept [S.material]!") + to_chat(user, "\The [src] doesn't accept [S.material]!") return var/amnt = S.perunit diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm index a66c62750a..53790689a9 100644 --- a/code/modules/shieldgen/emergency_shield.dm +++ b/code/modules/shieldgen/emergency_shield.dm @@ -24,7 +24,7 @@ /obj/machinery/shield/proc/check_failure() if (src.health <= 0) - visible_message("\The [src] dissipates!") + visible_message("\The [src] dissipates!") qdel(src) return @@ -93,7 +93,7 @@ /obj/machinery/shield/hitby(AM as mob|obj) //Let everyone know we've been hit! - visible_message("\[src] was hit by [AM].") + visible_message("\The [src] was hit by [AM].") //Super realistic, resource-intensive, real-time damage calculations. var/tforce = 0 diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm index 7d850bc4f6..7111cd52d7 100644 --- a/code/modules/tables/tables.dm +++ b/code/modules/tables/tables.dm @@ -110,7 +110,7 @@ var/list/table_icon_cache = list() return 1 if(carpeted && W.is_crowbar()) - user.visible_message("\The [user] removes the carpet from \the [src].", + user.visible_message("\The [user] removes the carpet from \the [src].", "You remove the carpet from \the [src].") new carpeted_type(loc) carpeted = 0 @@ -120,7 +120,7 @@ var/list/table_icon_cache = list() if(!carpeted && material && istype(W, /obj/item/stack/tile/carpet)) var/obj/item/stack/tile/carpet/C = W if(C.use(1)) - user.visible_message("\The [user] adds \the [C] to \the [src].", + user.visible_message("\The [user] adds \the [C] to \the [src].", "You add \the [C] to \the [src].") carpeted = 1 carpeted_type = W.type @@ -151,7 +151,7 @@ var/list/table_icon_cache = list() playsound(src, F.usesound, 50, 1) if(!do_after(user, 20 * F.toolspeed) || !F.remove_fuel(1, user)) return - user.visible_message("\The [user] repairs some damage to \the [src].", + user.visible_message("\The [user] repairs some damage to \the [src].", "You repair some damage to \the [src].") health = max(health+(maxhealth/5), maxhealth) // 20% repair per application return 1 @@ -191,7 +191,7 @@ var/list/table_icon_cache = list() src.break_to_parts() user.do_attack_animation(src) return 1 - visible_message("\The [user] scratches at \the [src]!") + visible_message("\The [user] scratches at \the [src]!") return ..() /obj/structure/table/MouseDrop_T(obj/item/stack/material/what) @@ -260,14 +260,14 @@ var/list/table_icon_cache = list() if(manipulating) return M manipulating = 1 - user.visible_message("\The [user] begins removing the [type_holding] holding \the [src]'s [M.display_name] [what] in place.", + user.visible_message("\The [user] begins removing the [type_holding] holding \the [src]'s [M.display_name] [what] in place.", "You begin removing the [type_holding] holding \the [src]'s [M.display_name] [what] in place.") if(sound) playsound(src, sound, 50, 1) if(!do_after(user, delay)) manipulating = 0 return M - user.visible_message("\The [user] removes the [M.display_name] [what] from \the [src].", + user.visible_message("\The [user] removes the [M.display_name] [what] from \the [src].", "You remove the [M.display_name] [what] from \the [src].") new M.stack_type(src.loc) manipulating = 0 @@ -282,13 +282,13 @@ var/list/table_icon_cache = list() /obj/structure/table/proc/dismantle(obj/item/W, mob/user) if(manipulating) return manipulating = 1 - user.visible_message("\The [user] begins dismantling \the [src].", + user.visible_message("\The [user] begins dismantling \the [src].", "You begin dismantling \the [src].") playsound(src, W.usesound, 50, 1) if(!do_after(user, 20 * W.toolspeed)) manipulating = 0 return - user.visible_message("\The [user] dismantles \the [src].", + user.visible_message("\The [user] dismantles \the [src].", "You dismantle \the [src].") new /obj/item/stack/material/steel(src.loc) qdel(src) @@ -333,6 +333,8 @@ var/list/table_icon_cache = list() return FALSE if(istype(src,/obj/structure/table/bench) && !istype(S,/obj/structure/table/bench)) return FALSE + if(istype(src,/obj/structure/table/rack) && !istype(S,/obj/structure/table/rack)) + return FALSE if(istype(S,/obj/structure/table)) return TRUE ..() diff --git a/code/modules/tgui/modules/ntos-only/cardmod.dm b/code/modules/tgui/modules/ntos-only/cardmod.dm index f96772626e..fc77417996 100644 --- a/code/modules/tgui/modules/ntos-only/cardmod.dm +++ b/code/modules/tgui/modules/ntos-only/cardmod.dm @@ -152,7 +152,7 @@ to_chat(usr, "Hardware error: Printer was unable to print the file. It may be out of paper.") return else - computer.visible_message("\The [computer] prints out paper.") + computer.visible_message("\The [computer] prints out paper.") else var/contents = {"

Crew Manifest


@@ -162,7 +162,7 @@ to_chat(usr, "Hardware error: Printer was unable to print the file. It may be out of paper.") return else - computer.visible_message("\The [computer] prints out paper.") + computer.visible_message("\The [computer] prints out paper.") . = TRUE if("modify") if(computer && computer.card_slot) diff --git a/code/modules/tgui/states.dm b/code/modules/tgui/states.dm index 775bf0c522..01b8ae1a84 100644 --- a/code/modules/tgui/states.dm +++ b/code/modules/tgui/states.dm @@ -119,7 +119,7 @@ return STATUS_DISABLED return STATUS_CLOSE // Otherwise, we got nothing. -/mob/living/carbon/human/shared_living_tgui_distance(atom/movable/src_object) +/mob/living/carbon/human/shared_living_tgui_distance(atom/movable/src_object, viewcheck = TRUE) if((TK in mutations) && (get_dist(src, src_object) <= 2)) return STATUS_INTERACTIVE return ..() diff --git a/code/modules/tgui/states/physical.dm b/code/modules/tgui/states/physical.dm index a57a321e95..30c67906ae 100644 --- a/code/modules/tgui/states/physical.dm +++ b/code/modules/tgui/states/physical.dm @@ -22,3 +22,28 @@ GLOBAL_DATUM_INIT(tgui_physical_state, /datum/tgui_state/physical, new) /mob/living/silicon/ai/physical_can_use_tgui_topic(src_object) return STATUS_UPDATE // AIs are not physical. + +/** + * tgui state: physical_obscured_state + * + * Short-circuits the default state to only check physical distance, being in view doesn't matter + */ + +GLOBAL_DATUM_INIT(tgui_physical_obscured_state, /datum/tgui_state/physical_obscured_state, new) + +/datum/tgui_state/physical_obscured_state/can_use_topic(src_object, mob/user) + . = user.shared_tgui_interaction(src_object) + if(. > STATUS_CLOSE) + return min(., user.physical_obscured_can_use_topic(src_object)) + +/mob/proc/physical_obscured_can_use_topic(src_object) + return STATUS_CLOSE + +/mob/living/physical_obscured_can_use_topic(src_object) + return shared_living_tgui_distance(src_object, viewcheck = FALSE) + +/mob/living/silicon/physical_obscured_can_use_topic(src_object) + return max(STATUS_UPDATE, shared_living_tgui_distance(src_object, viewcheck = FALSE)) // Silicons can always see. + +/mob/living/silicon/ai/physical_obscured_can_use_topic(src_object) + return STATUS_UPDATE // AIs are not physical. diff --git a/code/modules/tgui/tgui_input_list.dm b/code/modules/tgui/tgui_input_list.dm index 778c9f0e0c..8b1af90196 100644 --- a/code/modules/tgui/tgui_input_list.dm +++ b/code/modules/tgui/tgui_input_list.dm @@ -99,6 +99,10 @@ var/static/regex/whitelistedWords = regex(@{"([^\u0020-\u8000]+)"}) for(var/i in buttons) + if(isnull(i)) + stack_trace("Null in a tgui_input_list() buttons") + continue + var/string_key = whitelistedWords.Replace("[i]", "") //avoids duplicated keys E.g: when areas have the same name diff --git a/code/modules/tgui/tgui_input_text.dm b/code/modules/tgui/tgui_input_text.dm new file mode 100644 index 0000000000..e2247a32ce --- /dev/null +++ b/code/modules/tgui/tgui_input_text.dm @@ -0,0 +1,299 @@ +/** + * Creates a TGUI input text window and returns the user's response. + * + * This proc should be used to create alerts that the caller will wait for a response from. + * Arguments: + * * user - The user to show the input box to. + * * message - The content of the input box, shown in the body of the TGUI window. + * * title - The title of the input box, shown on the top of the TGUI window. + * * default - The default value pre-populated in the input box. + * * timeout - The timeout of the input box, after which the input box will close and qdel itself. Set to zero for no timeout. + */ +/proc/tgui_input_text(mob/user, message, title, default, timeout = 0) + if (istext(user)) + stack_trace("tgui_input_text() received text for user instead of mob") + return + if (!user) + user = usr + if (!istype(user)) + if (istype(user, /client)) + var/client/client = user + user = client.mob + else + return + var/datum/tgui_input_dialog/input = new(user, message, title, default, timeout) + input.input_type = "text" + input.tgui_interact(user) + input.wait() + if (input) + . = input.choice + qdel(input) + +/** + * Creates a TGUI input message window and returns the user's response. + * + * This proc should be used to create alerts that the caller will wait for a response from. + * Arguments: + * * user - The user to show the input box to. + * * message - The content of the input box, shown in the body of the TGUI window. + * * title - The title of the input box, shown on the top of the TGUI window. + * * default - The default value pre-populated in the input box. + * * timeout - The timeout of the input box, after which the input box will close and qdel itself. Set to zero for no timeout. + */ +/proc/tgui_input_message(mob/user, message, title, default, timeout = 0) + if (istext(user)) + stack_trace("tgui_input_message() received text for user instead of mob") + return + if (!user) + user = usr + if (!istype(user)) + if (istype(user, /client)) + var/client/client = user + user = client.mob + else + return + var/datum/tgui_input_dialog/input = new(user, message, title, default, timeout) + input.input_type = "message" + input.tgui_interact(user) + input.wait() + if (input) + . = input.choice + qdel(input) + +/** + * Creates a TGUI input num window and returns the user's response. + * + * This proc should be used to create alerts that the caller will wait for a response from. + * Arguments: + * * user - The user to show the input box to. + * * message - The content of the input box, shown in the body of the TGUI window. + * * title - The title of the input box, shown on the top of the TGUI window. + * * default - The default value pre-populated in the input box. + * * timeout - The timeout of the input box, after which the input box will close and qdel itself. Set to zero for no timeout. + */ +/proc/tgui_input_num(mob/user, message, title, default, timeout = 0) + if (istext(user)) + stack_trace("tgui_input_num() received text for user instead of mob") + return + if (!user) + user = usr + if (!istype(user)) + if (istype(user, /client)) + var/client/client = user + user = client.mob + else + return + var/datum/tgui_input_dialog/input = new(user, message, title, default, timeout) + input.input_type = "num" + input.tgui_interact(user) + input.wait() + if (input) + . = input.choice + qdel(input) + +/** + * Creates an asynchronous TGUI input text window with an associated callback. + * + * This proc should be used to create inputs that invoke a callback with the user's chosen option. + * Arguments: + * * user - The user to show the input box to. + * * message - The content of the input box, shown in the body of the TGUI window. + * * title - The title of the input box, shown on the top of the TGUI window. + * * default - The default value pre-populated in the input box. + * * callback - The callback to be invoked when a choice is made. + * * timeout - The timeout of the input box, after which the menu will close and qdel itself. Set to zero for no timeout. + */ +/proc/tgui_input_text_async(mob/user, message, title, default, datum/callback/callback, timeout = 60 SECONDS) + if (istext(user)) + stack_trace("tgui_input_text_async() received text for user instead of mob") + return + if (!user) + user = usr + if (!istype(user)) + if (istype(user, /client)) + var/client/client = user + user = client.mob + else + return + var/datum/tgui_input_dialog/async/input = new(user, message, title, default, callback, timeout) + input.input_type = "text" + input.tgui_interact(user) + +/** + * Creates an asynchronous TGUI input message window with an associated callback. + * + * This proc should be used to create inputs that invoke a callback with the user's chosen option. + * Arguments: + * * user - The user to show the input box to. + * * message - The content of the input box, shown in the body of the TGUI window. + * * title - The title of the input box, shown on the top of the TGUI window. + * * default - The default value pre-populated in the input box. + * * callback - The callback to be invoked when a choice is made. + * * timeout - The timeout of the input box, after which the menu will close and qdel itself. Set to zero for no timeout. + */ +/proc/tgui_input_message_async(mob/user, message, title, default, datum/callback/callback, timeout = 60 SECONDS) + if (istext(user)) + stack_trace("tgui_input_message_async() received text for user instead of mob") + return + if (!user) + user = usr + if (!istype(user)) + if (istype(user, /client)) + var/client/client = user + user = client.mob + else + return + var/datum/tgui_input_dialog/async/input = new(user, message, title, default, callback, timeout) + input.input_type = "message" + input.tgui_interact(user) + +/** + * Creates an asynchronous TGUI input num window with an associated callback. + * + * This proc should be used to create inputs that invoke a callback with the user's chosen option. + * Arguments: + * * user - The user to show the input box to. + * * message - The content of the input box, shown in the body of the TGUI window. + * * title - The title of the input box, shown on the top of the TGUI window. + * * default - The default value pre-populated in the input box. + * * callback - The callback to be invoked when a choice is made. + * * timeout - The timeout of the input box, after which the menu will close and qdel itself. Set to zero for no timeout. + */ +/proc/tgui_input_num_async(mob/user, message, title, default, datum/callback/callback, timeout = 60 SECONDS) + if (istext(user)) + stack_trace("tgui_input_num_async() received text for user instead of mob") + return + if (!user) + user = usr + if (!istype(user)) + if (istype(user, /client)) + var/client/client = user + user = client.mob + else + return + var/datum/tgui_input_dialog/async/input = new(user, message, title, default, callback, timeout) + input.input_type = "num" + input.tgui_interact(user) + +/** + * # tgui_input_dialog + * + * Datum used for instantiating and using a TGUI-controlled input that prompts the user with + * a message and a box for accepting text/message/num input. + */ +/datum/tgui_input_dialog + /// The title of the TGUI window + var/title + /// The textual body of the TGUI window + var/message + /// The default value to initially populate the input box. + var/initial + /// The value that the user input into the input box, null if cancelled. + var/choice + /// The time at which the tgui_text_input was created, for displaying timeout progress. + var/start_time + /// The lifespan of the tgui_text_input, after which the window will close and delete itself. + var/timeout + /// Boolean field describing if the tgui_text_input was closed by the user. + var/closed + /// Indicates the data type we want to collect ("text", "message", "num") + var/input_type = "text" + +/datum/tgui_input_dialog/New(mob/user, message, title, default, timeout) + src.title = title + src.message = message + // TODO - Do we need to sanitize the initial value for illegal characters? + src.initial = default + if (timeout) + src.timeout = timeout + start_time = world.time + QDEL_IN(src, timeout) + +/datum/tgui_input_dialog/Destroy(force, ...) + SStgui.close_uis(src) + . = ..() + +/** + * Waits for a user's response to the tgui_text_input's prompt before returning. Returns early if + * the window was closed by the user. + */ +/datum/tgui_input_dialog/proc/wait() + while (!choice && !closed) + stoplag(1) + +/datum/tgui_input_dialog/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "InputModal") + ui.open() + +/datum/tgui_input_dialog/tgui_close(mob/user) + . = ..() + closed = TRUE + +/datum/tgui_input_dialog/tgui_state(mob/user) + return GLOB.tgui_always_state + +/datum/tgui_input_dialog/tgui_static_data(mob/user) + . = list( + "title" = title, + "message" = message, + "initial" = initial, + "input_type" = input_type + ) + +/datum/tgui_input_dialog/tgui_data(mob/user) + . = list() + if(timeout) + .["timeout"] = clamp((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS), 0, 1) + +/datum/tgui_input_dialog/tgui_act(action, list/params) + . = ..() + if (.) + return + switch(action) + if("choose") + set_choice(params["choice"]) + if(isnull(src.choice)) + return + SStgui.close_uis(src) + return TRUE + if("cancel") + SStgui.close_uis(src) + closed = TRUE + return TRUE + +/datum/tgui_input_dialog/proc/set_choice(choice) + if(input_type == "num") + src.choice = text2num(choice) + return + src.choice = choice + +/** + * # async tgui_text_input + * + * An asynchronous version of tgui_text_input to be used with callbacks instead of waiting on user responses. + */ +/datum/tgui_input_dialog/async + /// The callback to be invoked by the tgui_text_input upon having a choice made. + var/datum/callback/callback + +/datum/tgui_input_dialog/async/New(mob/user, message, title, default, callback, timeout) + ..(user, title, message, default, timeout) + src.callback = callback + +/datum/tgui_input_dialog/async/Destroy(force, ...) + QDEL_NULL(callback) + . = ..() + +/datum/tgui_input_dialog/async/tgui_close(mob/user) + . = ..() + qdel(src) + +/datum/tgui_input_dialog/async/set_choice(choice) + . = ..() + if(!isnull(src.choice)) + callback?.InvokeAsync(src.choice) + +/datum/tgui_input_dialog/async/wait() + return diff --git a/code/modules/turbolift/turbolift.dm b/code/modules/turbolift/turbolift.dm index 9468179122..5ea1fd683c 100644 --- a/code/modules/turbolift/turbolift.dm +++ b/code/modules/turbolift/turbolift.dm @@ -192,12 +192,12 @@ for(var/turf/T in destination) for(var/atom/movable/AM in T) - if(istype(AM, /mob/living)) + if(istype(AM, /mob/living) && !(AM.is_incorporeal())) var/mob/living/M = AM M.gib() else if(istype(AM, /mob/zshadow)) AM.Destroy() //prevent deleting shadow without deleting shadow's shadows - else if(AM.simulated && !(istype(AM, /mob/observer))) + else if(AM.simulated && !(istype(AM, /mob/observer)) && !(AM.is_incorporeal())) qdel(AM) origin.move_contents_to(destination) diff --git a/code/modules/turbolift/turbolift_console.dm b/code/modules/turbolift/turbolift_console.dm index dddfb4e60f..a638fbbad4 100644 --- a/code/modules/turbolift/turbolift_console.dm +++ b/code/modules/turbolift/turbolift_console.dm @@ -26,7 +26,7 @@ if(user.a_intent == I_HURT) user.visible_message("\The [user] hammers on the lift button!") else - user.visible_message("\The [user] presses the lift button.") + user.visible_message("\The [user] presses the lift button.") /obj/structure/lift/New(var/newloc, var/datum/turbolift/_lift) diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index eca51127c2..e9641d0a73 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -9,6 +9,10 @@ qdel(src) return + // VERY early exit + if(!contents.len) + return + var/play_sound //Potential sound to play at the end to avoid code duplication. var/to_update = FALSE //Did anything update worthy happen? @@ -50,28 +54,29 @@ if(hta_returns["to_update"]) to_update = hta_returns["to_update"] - if(!islist(touchable_mobs)) + if(!LAZYLEN(touchable_mobs)) return ///////////////////// Early Non-Mode Handling ///////////////////// - var/list/EL = emote_lists[digest_mode] - if(LAZYLEN(EL) && touchable_mobs && next_emote <= world.time && emote_active) - next_emote = world.time + (emote_time SECONDS) - for(var/mob/living/M in contents) - if(digest_mode == DM_DIGEST && !M.digestable) - continue // don't give digesty messages to indigestible people + if(emote_active) + var/list/EL = emote_lists[digest_mode] + if(LAZYLEN(EL) && next_emote <= world.time) var/living_count = 0 for(var/mob/living/L in contents) living_count++ + next_emote = world.time + (emote_time SECONDS) + for(var/mob/living/M in contents) + if(digest_mode == DM_DIGEST && !M.digestable) + continue // don't give digesty messages to indigestible people - var/raw_message = pick(EL) - var/formatted_message - formatted_message = replacetext(raw_message, "%belly", lowertext(name)) - formatted_message = replacetext(formatted_message, "%pred", owner) - formatted_message = replacetext(formatted_message, "%prey", english_list(contents)) - formatted_message = replacetext(formatted_message, "%count", contents.len) - formatted_message = replacetext(formatted_message, "%countprey", living_count) - to_chat(M, "[formatted_message]") + var/raw_message = pick(EL) + var/formatted_message + formatted_message = replacetext(raw_message, "%belly", lowertext(name)) + formatted_message = replacetext(formatted_message, "%pred", owner) + formatted_message = replacetext(formatted_message, "%prey", english_list(contents)) + formatted_message = replacetext(formatted_message, "%count", contents.len) + formatted_message = replacetext(formatted_message, "%countprey", living_count) + to_chat(M, "[formatted_message]") if(!digestion_noise_chance) digestion_noise_chance = DM.noise_chance diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 7ee87c1fe6..9b480ff28a 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -48,7 +48,7 @@ /datum/vore_look/tgui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "VorePanel", "Inside!") + ui = new(user, src, "VorePanel", "Vore Panel") ui.open() // This looks weird, but all tgui_host is used for is state checking diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm index ff97eb7cd8..7ff0d97769 100644 --- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm @@ -2121,7 +2121,7 @@ Departamental Swimsuits, for general use user.visible_message("[user] harmlessly bops [target] with \the [src].", \ "\The [src] harmlessly bops [target]. The hat seems... unwilling?") else - user.visible_message("\The [src] flops over [user]'s' head for a moment, but they seem alright.", \ + user.visible_message("\The [src] flops over [user]'s' head for a moment, but they seem alright.", \ "\The [src] flops over your head for a moment, but you correct it without issue. There we go!") /obj/item/clothing/head/fluff/nikki/proc/hat_warp_checks(var/mob/living/target, mob/user, proximity_flag) diff --git a/code/modules/xenoarcheaology/artifacts/gigadrill.dm b/code/modules/xenoarcheaology/artifacts/gigadrill.dm index ad51cd690a..b30b1ed959 100644 --- a/code/modules/xenoarcheaology/artifacts/gigadrill.dm +++ b/code/modules/xenoarcheaology/artifacts/gigadrill.dm @@ -24,7 +24,7 @@ if(istype(A,/turf/simulated/mineral)) var/turf/simulated/mineral/M = A drilling_turf = get_turf(src) - src.visible_message("\The [src] begins to drill into \the [M].") + src.visible_message("\The [src] begins to drill into \the [M].") anchored = 1 spawn(drill_time) if(get_turf(src) == drilling_turf && active) diff --git a/code/modules/xenoarcheaology/artifacts/replicator.dm b/code/modules/xenoarcheaology/artifacts/replicator.dm index 20358b6fec..a1f069e546 100644 --- a/code/modules/xenoarcheaology/artifacts/replicator.dm +++ b/code/modules/xenoarcheaology/artifacts/replicator.dm @@ -178,4 +178,4 @@ user.drop_item() W.loc = src stored_materials.Add(W) - src.visible_message("\The [user] inserts \the [W] into \the [src].") + src.visible_message("\The [user] inserts \the [W] into \the [src].") diff --git a/code/modules/xenoarcheaology/boulder.dm b/code/modules/xenoarcheaology/boulder.dm index a04fce089f..b66ed8f0e6 100644 --- a/code/modules/xenoarcheaology/boulder.dm +++ b/code/modules/xenoarcheaology/boulder.dm @@ -35,14 +35,14 @@ C.depth_scanner.scan_atom(user, src) return else - user.visible_message("\The [user] extends \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!", "You extend \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!") + user.visible_message("\The [user] extends \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!", "You extend \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!") if(do_after(user, 15)) to_chat(user, "\The [src] has been excavated to a depth of [2 * src.excavation_level]cm.") return if(istype(I, /obj/item/device/measuring_tape)) var/obj/item/device/measuring_tape/P = I - user.visible_message("\The [user] extends \the [P] towards \the [src].", "You extend \the [P] towards \the [src].") + user.visible_message("\The [user] extends \the [P] towards \the [src].", "You extend \the [P] towards \the [src].") if(do_after(user, 15)) to_chat(user, "\The [src] has been excavated to a depth of [2 * src.excavation_level]cm.") return diff --git a/code/modules/xenoarcheaology/tools/tools.dm b/code/modules/xenoarcheaology/tools/tools.dm index 6e23a71e3a..cde8d83d31 100644 --- a/code/modules/xenoarcheaology/tools/tools.dm +++ b/code/modules/xenoarcheaology/tools/tools.dm @@ -111,7 +111,7 @@ var/material = "unknown" /obj/item/device/depth_scanner/proc/scan_atom(var/mob/user, var/atom/A) - user.visible_message("\The [user] scans \the [A], the air around them humming gently.") + user.visible_message("\The [user] scans \the [A], the air around them humming gently.") if(istype(A, /turf/simulated/mineral)) var/turf/simulated/mineral/M = A diff --git a/code/modules/xenobio/items/extracts.dm b/code/modules/xenobio/items/extracts.dm index f810b9f68b..dacebb203c 100644 --- a/code/modules/xenobio/items/extracts.dm +++ b/code/modules/xenobio/items/extracts.dm @@ -53,7 +53,7 @@ var/obj/item/slime_extract/T = holder.my_atom T.uses-- if(T.uses <= 0) - T.visible_message("[bicon(T)]\The [T] goes inert.") + T.visible_message("[bicon(T)]\The [T] goes inert.") T.name = "inert [initial(T.name)]" diff --git a/code/modules/xenobio/machinery/processor.dm b/code/modules/xenobio/machinery/processor.dm index 216c0cb77b..04b929d5c8 100644 --- a/code/modules/xenobio/machinery/processor.dm +++ b/code/modules/xenobio/machinery/processor.dm @@ -58,7 +58,7 @@ return to_be_processed.Add(AM) AM.forceMove(src) - visible_message("\the [user] places [AM] inside \the [src].") + visible_message("\The [user] places [AM] inside \the [src].") /obj/machinery/processor/proc/begin_processing() if(processing) diff --git a/icons/_nanomaps/tether_nanomap_z1.png b/icons/_nanomaps/tether_nanomap_z1.png index 54235d04bb..8a00eef962 100644 Binary files a/icons/_nanomaps/tether_nanomap_z1.png and b/icons/_nanomaps/tether_nanomap_z1.png differ diff --git a/icons/_nanomaps/tether_nanomap_z2.png b/icons/_nanomaps/tether_nanomap_z2.png index b803f01d10..79d2c9a9ab 100644 Binary files a/icons/_nanomaps/tether_nanomap_z2.png and b/icons/_nanomaps/tether_nanomap_z2.png differ diff --git a/icons/_nanomaps/tether_nanomap_z3.png b/icons/_nanomaps/tether_nanomap_z3.png index cffca4b183..b7cab8e7b6 100644 Binary files a/icons/_nanomaps/tether_nanomap_z3.png and b/icons/_nanomaps/tether_nanomap_z3.png differ diff --git a/icons/_nanomaps/tether_nanomap_z4.png b/icons/_nanomaps/tether_nanomap_z4.png index c5bb7a9a86..eb95d89199 100644 Binary files a/icons/_nanomaps/tether_nanomap_z4.png and b/icons/_nanomaps/tether_nanomap_z4.png differ diff --git a/icons/_nanomaps/tether_nanomap_z5.png b/icons/_nanomaps/tether_nanomap_z5.png index 8bbb546a47..ca4a1b8ba7 100644 Binary files a/icons/_nanomaps/tether_nanomap_z5.png and b/icons/_nanomaps/tether_nanomap_z5.png differ diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 88f6dbf028..bae46a47da 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/hud_jobs_vr.dmi b/icons/mob/hud_jobs_vr.dmi index f3878ac2d4..8d8561c080 100644 Binary files a/icons/mob/hud_jobs_vr.dmi and b/icons/mob/hud_jobs_vr.dmi differ diff --git a/icons/mob/items/lefthand_storage.dmi b/icons/mob/items/lefthand_storage.dmi index 6b5a4defb8..d69025101e 100644 Binary files a/icons/mob/items/lefthand_storage.dmi and b/icons/mob/items/lefthand_storage.dmi differ diff --git a/icons/mob/items/lefthand_suits.dmi b/icons/mob/items/lefthand_suits.dmi index 556b5e137f..d69739d40f 100644 Binary files a/icons/mob/items/lefthand_suits.dmi and b/icons/mob/items/lefthand_suits.dmi differ diff --git a/icons/mob/items/righthand_storage.dmi b/icons/mob/items/righthand_storage.dmi index 783540cefc..b2160603b8 100644 Binary files a/icons/mob/items/righthand_storage.dmi and b/icons/mob/items/righthand_storage.dmi differ diff --git a/icons/mob/items/righthand_suits.dmi b/icons/mob/items/righthand_suits.dmi index 6cc80297b6..3e0d73d39d 100644 Binary files a/icons/mob/items/righthand_suits.dmi and b/icons/mob/items/righthand_suits.dmi differ diff --git a/icons/obj/artstuff.dmi b/icons/obj/artstuff.dmi new file mode 100644 index 0000000000..c75a4b85ef Binary files /dev/null and b/icons/obj/artstuff.dmi differ diff --git a/icons/obj/clothing/backpack.dmi b/icons/obj/clothing/backpack.dmi index 7132925559..050a938805 100644 Binary files a/icons/obj/clothing/backpack.dmi and b/icons/obj/clothing/backpack.dmi differ diff --git a/icons/obj/clothing/pouches.dmi b/icons/obj/clothing/pouches.dmi new file mode 100644 index 0000000000..4673c05dce Binary files /dev/null and b/icons/obj/clothing/pouches.dmi differ diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi index 3f1fd1b792..bf73083fe0 100644 Binary files a/icons/obj/decals.dmi and b/icons/obj/decals.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 8787c5bd16..9f212a6a27 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/grenade.dmi b/icons/obj/grenade.dmi index e312da52b9..8f2ed0d8bb 100644 Binary files a/icons/obj/grenade.dmi and b/icons/obj/grenade.dmi differ diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi index 47974032e0..61920eb274 100644 Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index f558d3fd49..432b46541b 100644 Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ diff --git a/icons/obj/nailpolish_vr.dmi b/icons/obj/nailpolish_vr.dmi new file mode 100644 index 0000000000..e3bddf098e Binary files /dev/null and b/icons/obj/nailpolish_vr.dmi differ diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi index d3df5cbdb8..88174d10c4 100644 Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ diff --git a/icons/obj/power_cells.dmi b/icons/obj/power_cells.dmi new file mode 100644 index 0000000000..463711e6a0 Binary files /dev/null and b/icons/obj/power_cells.dmi differ diff --git a/icons/obj/power_vr.dmi b/icons/obj/power_vr.dmi index 0e8cdd0195..0ced6510e6 100644 Binary files a/icons/obj/power_vr.dmi and b/icons/obj/power_vr.dmi differ diff --git a/icons/obj/structures/decor.dmi b/icons/obj/structures/decor.dmi index 942ab117f0..96d6afb6b8 100644 Binary files a/icons/obj/structures/decor.dmi and b/icons/obj/structures/decor.dmi differ diff --git a/icons/obj/structures/decor64x64.dmi b/icons/obj/structures/decor64x64.dmi new file mode 100644 index 0000000000..42f72c549c Binary files /dev/null and b/icons/obj/structures/decor64x64.dmi differ diff --git a/icons/obj/suitdispenser.dmi b/icons/obj/suitdispenser.dmi index c49ba787be..09723225a4 100644 Binary files a/icons/obj/suitdispenser.dmi and b/icons/obj/suitdispenser.dmi differ diff --git a/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi index 8495d83917..7acb724e5b 100644 Binary files a/icons/obj/watercloset.dmi and b/icons/obj/watercloset.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 1dbd0e6ab2..81f6f4e0ca 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -518,7 +518,7 @@ macro "hotkeymode" command = ".me" elem name = "6" - command = "subtle" + command = ".Subtle" elem name = "A+REP" command = ".moveleft" @@ -596,10 +596,10 @@ macro "hotkeymode" command = ".northeast" elem name = "Y" - command = "whisper" + command = ".Whisper" elem name = "CTRL+Y" - command = "whisper" + command = ".Whisper" elem name = "Z" command = "Activate-Held-Object" diff --git a/librust_g.so b/librust_g.so index 9d46da045f..239f12d713 100644 Binary files a/librust_g.so and b/librust_g.so differ diff --git a/maps/expedition_vr/beach/beach.dmm b/maps/expedition_vr/beach/beach.dmm index c60de78548..fc0e80cc08 100644 --- a/maps/expedition_vr/beach/beach.dmm +++ b/maps/expedition_vr/beach/beach.dmm @@ -63,8 +63,7 @@ "ap" = ( /obj/effect/overlay/palmtree_r, /turf/simulated/floor/water/beach/corner{ - dir = 8; - icon_state = "beachcorner" + dir = 8 }, /area/tether_away/beach/jungle) "aq" = ( @@ -97,10 +96,7 @@ /turf/simulated/floor/wood, /area/tether_away/beach) "ax" = ( -/turf/simulated/mineral/floor/cave{ - name = "dirt"; - outdoors = 1 - }, +/turf/simulated/floor/outdoors/newdirt, /area/tether_away/beach/jungle) "ay" = ( /obj/structure/table/glass, @@ -275,8 +271,7 @@ /area/tether_away/beach/jungle) "bk" = ( /turf/simulated/floor/water/beach{ - dir = 1; - icon_state = "beach" + dir = 1 }, /area/tether_away/beach/water) "bl" = ( @@ -342,8 +337,7 @@ /area/tether_away/beach/cavebase) "cA" = ( /turf/simulated/floor/water/beach{ - dir = 10; - icon_state = "beach" + dir = 10 }, /area/tether_away/beach/water) "cN" = ( @@ -385,8 +379,7 @@ /area/tether_away/beach/resort/lockermed) "dY" = ( /turf/simulated/floor/water/beach/corner{ - dir = 8; - icon_state = "beachcorner" + dir = 8 }, /area/tether_away/beach) "et" = ( @@ -497,8 +490,7 @@ /area/tether_away/beach/cavebase) "gA" = ( /turf/simulated/floor/water/beach{ - dir = 6; - icon_state = "beach" + dir = 6 }, /area/tether_away/beach/water) "gU" = ( @@ -561,13 +553,11 @@ /area/tether_away/beach/cavebase) "hR" = ( /obj/machinery/power/terminal{ - dir = 8; - icon_state = "term" + dir = 8 }, /obj/structure/cable{ d2 = 2; - icon_state = "0-2"; - pixel_y = 0 + icon_state = "0-2" }, /turf/simulated/floor/tiled/asteroid_steel, /area/tether_away/beach/powershed) @@ -582,7 +572,6 @@ "hV" = ( /obj/structure/undies_wardrobe{ density = 0; - pixel_x = 0; pixel_y = 18 }, /obj/structure/cable/cyan{ @@ -689,7 +678,6 @@ "kR" = ( /obj/structure/undies_wardrobe{ density = 0; - pixel_x = 0; pixel_y = 18 }, /obj/structure/cable/cyan{ @@ -737,8 +725,7 @@ /area/tether_away/beach/resort/janibar) "le" = ( /turf/simulated/floor/water/beach{ - dir = 5; - icon_state = "beach" + dir = 5 }, /area/tether_away/beach/jungle) "lh" = ( @@ -799,9 +786,7 @@ "mF" = ( /obj/structure/sink{ dir = 4; - icon_state = "sink"; - pixel_x = 11; - pixel_y = 0 + pixel_x = 11 }, /turf/simulated/floor/tiled/eris/cafe, /area/tether_away/beach/resort/kitchen) @@ -809,12 +794,10 @@ /obj/machinery/power/solar_control, /obj/structure/cable{ d2 = 2; - icon_state = "0-2"; - pixel_y = 0 + icon_state = "0-2" }, /obj/machinery/light/small{ - dir = 4; - pixel_y = 0 + dir = 4 }, /turf/simulated/floor/tiled/asteroid_steel, /area/tether_away/beach/powershed) @@ -832,8 +815,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - pixel_y = 0 + icon_state = "1-2" }, /turf/simulated/floor/tiled/asteroid_steel{ outdoors = 1 @@ -841,6 +823,7 @@ /area/tether_away/beach/resort) "mW" = ( /obj/structure/mirror{ + dir = 8; pixel_x = 27 }, /turf/simulated/floor/wood, @@ -848,8 +831,7 @@ "nm" = ( /obj/structure/cable{ d2 = 2; - icon_state = "0-2"; - pixel_y = 0 + icon_state = "0-2" }, /obj/machinery/power/tracker, /turf/simulated/floor{ @@ -880,8 +862,7 @@ /area/tether_away/beach/resort/dorm1) "oC" = ( /turf/simulated/floor/water/beach{ - dir = 4; - icon_state = "beach" + dir = 4 }, /area/tether_away/beach/jungle) "oF" = ( @@ -930,8 +911,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - pixel_y = 0 + icon_state = "1-2" }, /turf/simulated/floor/tiled/asteroid_steel, /area/tether_away/beach/powershed) @@ -983,8 +963,7 @@ /area/tether_away/beach/resort) "pS" = ( /turf/simulated/floor/water/beach{ - dir = 1; - icon_state = "beach" + dir = 1 }, /area/tether_away/beach/jungle) "qi" = ( @@ -1022,7 +1001,6 @@ "rJ" = ( /obj/structure/undies_wardrobe{ density = 0; - pixel_x = 0; pixel_y = 18 }, /obj/structure/cable/cyan{ @@ -1055,16 +1033,13 @@ /area/tether_away/beach/resort) "tj" = ( /turf/simulated/floor/water/beach{ - dir = 5; - icon_state = "beach" + dir = 5 }, /area/tether_away/beach/water) "tl" = ( /obj/machinery/shower{ dir = 4; - icon_state = "shower"; - pixel_x = 2; - pixel_y = 0 + pixel_x = 2 }, /obj/effect/floor_decal/steeldecal/steel_decals10, /obj/effect/floor_decal/steeldecal/steel_decals10{ @@ -1105,8 +1080,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - pixel_y = 0 + icon_state = "1-2" }, /turf/simulated/floor/tiled/asteroid_steel{ outdoors = 1 @@ -1160,6 +1134,7 @@ /area/tether_away/beach/resort/kitchen) "uT" = ( /obj/structure/mirror{ + dir = 4; pixel_x = -27 }, /turf/simulated/floor/wood, @@ -1357,8 +1332,7 @@ /area/tether_away/beach/resort/dorm3) "BG" = ( /turf/simulated/floor/water/beach/corner{ - dir = 8; - icon_state = "beachcorner" + dir = 8 }, /area/tether_away/beach/jungle) "BP" = ( @@ -1400,8 +1374,7 @@ /area/tether_away/beach/resort/kitchen) "CP" = ( /turf/simulated/floor/water/beach{ - dir = 10; - icon_state = "beach" + dir = 10 }, /area/tether_away/beach/jungle) "Dq" = ( @@ -1420,8 +1393,7 @@ "DA" = ( /obj/structure/cable{ d2 = 2; - icon_state = "0-2"; - pixel_y = 0 + icon_state = "0-2" }, /obj/item/solar_assembly, /turf/simulated/floor{ @@ -1447,8 +1419,7 @@ /area/tether_away/beach/resort/dorm2) "DL" = ( /turf/simulated/floor/water/beach/corner{ - dir = 8; - icon_state = "beachcorner" + dir = 8 }, /area/tether_away/beach/water) "Ed" = ( @@ -1459,8 +1430,7 @@ /area/tether_away/beach/cavebase) "Ee" = ( /turf/simulated/floor/water/beach/corner{ - dir = 4; - icon_state = "beachcorner" + dir = 4 }, /area/tether_away/beach/jungle) "Eh" = ( @@ -1484,8 +1454,7 @@ /area/tether_away/beach/resort/dorm4) "Ey" = ( /turf/simulated/floor/water/beach{ - dir = 6; - icon_state = "beach" + dir = 6 }, /area/tether_away/beach/jungle) "EG" = ( @@ -1538,14 +1507,14 @@ /area/tether_away/beach/resort/kitchen) "HO" = ( /obj/structure/mirror{ + dir = 8; pixel_x = 27 }, /turf/simulated/floor/wood, /area/tether_away/beach/resort/dorm3) "Ij" = ( /turf/simulated/floor/water/beach/corner{ - dir = 4; - icon_state = "beachcorner" + dir = 4 }, /area/tether_away/beach/water) "IA" = ( @@ -1631,8 +1600,7 @@ /area/tether_away/beach/resort/kitchen) "Kw" = ( /turf/simulated/floor/water/beach{ - dir = 8; - icon_state = "beach" + dir = 8 }, /area/tether_away/beach/jungle) "KN" = ( @@ -1674,9 +1642,7 @@ "LO" = ( /obj/machinery/shower{ dir = 4; - icon_state = "shower"; - pixel_x = 2; - pixel_y = 0 + pixel_x = 2 }, /obj/effect/floor_decal/steeldecal/steel_decals10, /obj/effect/floor_decal/steeldecal/steel_decals10{ @@ -1717,8 +1683,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - pixel_y = 0 + icon_state = "1-2" }, /turf/simulated/floor/tiled/asteroid_steel{ outdoors = 1 @@ -1779,6 +1744,9 @@ }, /turf/simulated/floor/lino, /area/tether_away/beach/resort/kitchen) +"Ow" = ( +/turf/simulated/floor/outdoors/newdirt, +/area/tether_away/beach/cavebase) "OK" = ( /obj/effect/overlay/palmtree_l, /turf/simulated/floor/beach/sand/outdoors, @@ -1837,6 +1805,7 @@ /area/tether_away/beach/resort/janibar) "QY" = ( /obj/structure/mirror{ + dir = 4; pixel_x = -27 }, /turf/simulated/floor/wood, @@ -1916,16 +1885,14 @@ /area/tether_away/beach/resort/dorm3) "RQ" = ( /turf/simulated/floor/water/beach{ - dir = 8; - icon_state = "beach" + dir = 8 }, /area/tether_away/beach/water) "RX" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - pixel_y = 0 + icon_state = "1-2" }, /turf/simulated/floor/tiled/asteroid_steel{ outdoors = 1 @@ -1933,16 +1900,13 @@ /area/tether_away/beach/resort) "Sv" = ( /turf/simulated/floor/water/beach{ - dir = 9; - icon_state = "beach" + dir = 9 }, /area/tether_away/beach/jungle) "Sz" = ( /obj/structure/sink{ dir = 4; - icon_state = "sink"; - pixel_x = 11; - pixel_y = 0 + pixel_x = 11 }, /turf/simulated/floor/tiled/asteroid_steel, /area/tether_away/beach/resort/janibar) @@ -2039,8 +2003,7 @@ /area/tether_away/beach/resort/lockermed) "Va" = ( /turf/simulated/floor/water/beach/corner{ - dir = 1; - icon_state = "beachcorner" + dir = 1 }, /area/tether_away/beach/water) "Vo" = ( @@ -2055,8 +2018,7 @@ /area/tether_away/beach/jungle) "VS" = ( /turf/simulated/floor/water/beach/corner{ - dir = 1; - icon_state = "beachcorner" + dir = 1 }, /area/tether_away/beach/jungle) "Wc" = ( @@ -2092,7 +2054,6 @@ "WS" = ( /obj/structure/undies_wardrobe{ density = 0; - pixel_x = 0; pixel_y = 18 }, /obj/structure/cable/cyan{ @@ -2108,8 +2069,7 @@ /area/tether_away/beach/resort/lockermed) "WX" = ( /turf/simulated/floor/water/beach{ - dir = 9; - icon_state = "beach" + dir = 9 }, /area/tether_away/beach/water) "Xd" = ( @@ -2127,8 +2087,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - pixel_y = 0 + icon_state = "1-2" }, /turf/simulated/floor{ outdoors = 1 @@ -5685,7 +5644,7 @@ bp ae ae ax -xy +Ow Xd ZC ZC diff --git a/maps/offmap_vr/om_ships/aro3.dmm b/maps/offmap_vr/om_ships/aro3.dmm index 35ee6f007f..777a00f4fb 100644 --- a/maps/offmap_vr/om_ships/aro3.dmm +++ b/maps/offmap_vr/om_ships/aro3.dmm @@ -1184,15 +1184,13 @@ /turf/simulated/floor/tiled/eris/steel/panels, /area/aro3/atmos) "iZ" = ( -/obj/machinery/power/terminal{ - dir = 4 +/obj/effect/floor_decal/industrial/warning{ + dir = 5 }, /obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" + icon_state = "2-4" }, -/obj/structure/cable/cyan, -/turf/simulated/floor/plating/eris/under, +/turf/simulated/floor/tiled/eris/white/gray_platform, /area/aro3/power) "jb" = ( /obj/machinery/power/apc/alarms_hidden{ @@ -1650,18 +1648,16 @@ /turf/simulated/floor/tiled/eris/cafe, /area/aro3/kitchen) "mW" = ( -/obj/machinery/power/terminal{ - dir = 4 +/obj/effect/floor_decal/industrial/warning{ + dir = 6 }, /obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" + icon_state = "4-8" }, /obj/structure/cable/cyan{ - d2 = 1; - icon_state = "0-2" + icon_state = "1-8" }, -/turf/simulated/floor/plating/eris/under, +/turf/simulated/floor/tiled/eris/white/gray_platform, /area/aro3/power) "mX" = ( /obj/structure/flora/tree/jungle_small, @@ -2047,19 +2043,6 @@ "qC" = ( /turf/space/internal_edge/bottomleft, /area/aro3/bar) -"qG" = ( -/obj/structure/cable/cyan{ - d2 = 1; - icon_state = "0-4" - }, -/obj/machinery/power/smes/buildable/hybrid{ - input_attempt = 1; - input_level = 250000; - input_level_max = 250000; - output_level = 190000 - }, -/turf/simulated/floor/plating/eris/under, -/area/aro3/power) "qH" = ( /obj/machinery/vending/loadout/clothing, /turf/simulated/floor/tiled/eris/dark/gray_platform, @@ -2228,11 +2211,10 @@ /turf/simulated/floor/tiled/eris/dark, /area/aro3/function) "rP" = ( -/obj/machinery/power/rtg/abductor/hybrid/built, -/obj/structure/cable/cyan{ - icon_state = "0-4" +/obj/effect/floor_decal/industrial/warning{ + dir = 9 }, -/turf/simulated/floor/plating/eris/under, +/turf/simulated/floor/tiled/eris/white/gray_platform, /area/aro3/power) "rU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -2713,15 +2695,11 @@ /turf/simulated/floor/tiled/eris/dark/techfloor_grid, /area/aro3/hallway_port) "wx" = ( -/obj/machinery/power/smes/buildable/hybrid{ - input_attempt = 1; - input_level = 250000; - input_level_max = 250000; - output_level = 190000 +/obj/machinery/power/terminal{ + dir = 4 }, /obj/structure/cable/cyan{ - d2 = 1; - icon_state = "0-4" + icon_state = "0-8" }, /turf/simulated/floor/plating/eris/under, /area/aro3/power) @@ -2787,10 +2765,15 @@ /turf/simulated/wall/rpshull, /area/space) "wW" = ( +/obj/machinery/power/smes/buildable/hybrid{ + input_attempt = 1; + input_level = 250000; + input_level_max = 250000; + output_level = 190000 + }, /obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" + d2 = 1; + icon_state = "0-4" }, /turf/simulated/floor/plating/eris/under, /area/aro3/power) @@ -3679,7 +3662,7 @@ /turf/simulated/floor/tiled/eris/dark/gray_perforated, /area/aro3/repair_bay) "DM" = ( -/obj/machinery/gear_dispenser/suit/autolok, +/obj/machinery/gear_dispenser/suit_fancy/autolok, /turf/simulated/floor/tiled/eris/steel/panels, /area/aro3/eva_hall) "DQ" = ( @@ -3967,12 +3950,16 @@ /turf/simulated/floor/tiled/white, /area/aro3/suite_starboard_wc) "Gs" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" +/obj/machinery/power/rtg/kugelblitz{ + pixel_y = 10 }, -/turf/simulated/floor/plating/eris/under, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/structure/cable/cyan{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/eris/white/gray_platform, /area/aro3/power) "Gt" = ( /obj/structure/table/steel, @@ -5178,9 +5165,14 @@ /area/aro3/surfluid) "RK" = ( /obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" + d2 = 1; + icon_state = "0-4" + }, +/obj/machinery/power/smes/buildable/hybrid{ + input_attempt = 1; + input_level = 250000; + input_level_max = 250000; + output_level = 190000 }, /turf/simulated/floor/plating/eris/under, /area/aro3/power) @@ -13949,10 +13941,10 @@ xj uE kH aq +TW rP -rP -rP -rP +Gs +TW aq Fn yn @@ -14091,10 +14083,10 @@ xj uE Lq aq -Gs +TW iZ mW -RK +TW aq Fn Fn @@ -14235,7 +14227,7 @@ XQ aq TW wx -qG +wx TW aq aq @@ -14377,7 +14369,7 @@ NV aq qV wW -wW +RK TW TW aq diff --git a/maps/tether/tether-01-surface1.dmm b/maps/tether/tether-01-surface1.dmm index 7940272c82..efa122025b 100644 --- a/maps/tether/tether-01-surface1.dmm +++ b/maps/tether/tether-01-surface1.dmm @@ -774,6 +774,9 @@ /obj/structure/table/woodentable, /obj/random/plushie, /obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/sign/painting/library_secure{ + pixel_y = 30 + }, /turf/simulated/floor/wood, /area/tether/surfacebase/medical/mentalhealth) "abk" = ( @@ -4461,6 +4464,9 @@ /obj/effect/floor_decal/corner/lightgrey/border{ dir = 9 }, +/obj/structure/sign/painting/public{ + pixel_x = -30 + }, /turf/simulated/floor/tiled, /area/hallway/lower/first_west) "ahH" = ( @@ -9924,6 +9930,9 @@ /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 5 }, +/obj/structure/sign/painting/public{ + pixel_x = -30 + }, /turf/simulated/floor/tiled, /area/storage/art) "aqC" = ( @@ -10165,15 +10174,11 @@ /turf/simulated/floor/plating, /area/vacant/vacant_site) "ara" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 +/obj/structure/sign/painting/public{ + pixel_y = -30 }, -/obj/machinery/camera/network/civilian{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/storage/art) +/turf/simulated/floor/carpet/gaycarpet, +/area/tether/surfacebase/funny/clownoffice) "arb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -10201,6 +10206,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, +/obj/structure/sign/painting/public{ + pixel_x = 30 + }, /turf/simulated/floor/tiled, /area/storage/art) "are" = ( @@ -22873,12 +22881,11 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_8) "aLW" = ( -/obj/structure/sink{ - pixel_y = 22 - }, /obj/structure/mirror{ - dir = 4; - pixel_y = 32 + pixel_y = 38 + }, +/obj/structure/sink{ + pixel_y = 20 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/Dorm_8) @@ -24173,12 +24180,11 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_6) "aOu" = ( -/obj/structure/sink{ - pixel_y = 22 - }, /obj/structure/mirror{ - dir = 4; - pixel_y = 32 + pixel_y = 38 + }, +/obj/structure/sink{ + pixel_y = 20 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/Dorm_6) @@ -25286,12 +25292,11 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_4) "aQm" = ( -/obj/structure/sink{ - pixel_y = 22 - }, /obj/structure/mirror{ - dir = 4; - pixel_y = 32 + pixel_y = 38 + }, +/obj/structure/sink{ + pixel_y = 20 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/Dorm_4) @@ -26414,12 +26419,11 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_2) "aSu" = ( -/obj/structure/sink{ - pixel_y = 22 - }, /obj/structure/mirror{ - dir = 4; - pixel_y = 32 + pixel_y = 38 + }, +/obj/structure/sink{ + pixel_y = 20 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/Dorm_2) @@ -27523,6 +27527,9 @@ /obj/item/clothing/mask/smokable/cigarette/joint{ desc = "Ever been to orbit?" }, +/obj/structure/sign/painting/public{ + pixel_y = 30 + }, /turf/simulated/floor/plating, /area/crew_quarters/sleep/maintDorm3) "aUF" = ( @@ -28363,7 +28370,7 @@ /area/vacant/vacant_bar) "aWa" = ( /obj/structure/sink/kitchen{ - pixel_y = 28 + pixel_y = 20 }, /turf/simulated/floor/wood, /area/vacant/vacant_bar) @@ -29443,11 +29450,10 @@ /area/vacant/vacant_bar) "aYr" = ( /obj/structure/sink{ - pixel_y = 22 + pixel_y = 20 }, /obj/structure/mirror{ - dir = 4; - pixel_y = 32 + pixel_y = 38 }, /turf/simulated/floor/tiled/white, /area/vacant/vacant_bar) @@ -29485,11 +29491,10 @@ /area/crew_quarters/sleep/maintDorm3) "aYv" = ( /obj/structure/sink{ - pixel_y = 22 + pixel_y = 20 }, /obj/structure/mirror{ - dir = 4; - pixel_y = 32 + pixel_y = 38 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/maintDorm3) @@ -29502,11 +29507,10 @@ /area/crew_quarters/sleep/maintDorm2) "aYz" = ( /obj/structure/sink{ - pixel_y = 22 + pixel_y = 20 }, /obj/structure/mirror{ - dir = 4; - pixel_y = 32 + pixel_y = 38 }, /turf/simulated/floor/plating, /area/crew_quarters/sleep/maintDorm2) @@ -29714,6 +29718,9 @@ /area/crew_quarters/sleep/maintDorm1) "aZw" = ( /obj/effect/decal/cleanable/blood, +/obj/structure/sign/painting/library_private{ + pixel_x = -30 + }, /turf/simulated/floor/plating, /area/vacant/vacant_bar) "aZz" = ( @@ -31207,6 +31214,9 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/sign/painting/public{ + pixel_x = 30 + }, /turf/simulated/floor/tiled/techmaint, /area/holodeck_control) "bdn" = ( @@ -31510,6 +31520,18 @@ /obj/structure/barricade/cutout/mime, /turf/simulated/floor/carpet/bcarpet, /area/tether/surfacebase/funny/mimeoffice) +"bmK" = ( +/obj/structure/closet/walllocker_double{ + dir = 1; + pixel_y = -28 + }, +/obj/item/weapon/storage/fancy/crayons, +/obj/item/weapon/storage/fancy/crayons, +/obj/item/weapon/storage/fancy/crayons, +/obj/item/weapon/storage/fancy/crayons, +/obj/item/weapon/storage/fancy/crayons, +/turf/simulated/floor/tiled, +/area/storage/art) "bqI" = ( /turf/simulated/wall, /area/tether/surfacebase/security/brig/storage) @@ -32353,6 +32375,12 @@ /mob/living/simple_mob/animal/passive/mimepet, /turf/simulated/floor/carpet/bcarpet, /area/tether/surfacebase/funny/mimeoffice) +"eoh" = ( +/obj/structure/sign/painting/public{ + pixel_y = 30 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/sleep/maintDorm1) "eow" = ( /obj/effect/floor_decal/borderfloor{ dir = 4 @@ -32790,6 +32818,42 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/weaponsrange) +"ggX" = ( +/obj/structure/closet/walllocker_double{ + dir = 8; + pixel_x = -28 + }, +/obj/machinery/camera/network/civilian{ + dir = 1 + }, +/obj/item/canvas, +/obj/item/canvas, +/obj/item/canvas, +/obj/item/canvas, +/obj/item/canvas, +/obj/item/canvas/nineteen_nineteen, +/obj/item/canvas/nineteen_nineteen, +/obj/item/canvas/nineteen_nineteen, +/obj/item/canvas/nineteen_nineteen, +/obj/item/canvas/nineteen_nineteen, +/obj/item/canvas/twentyfour_twentyfour, +/obj/item/canvas/twentyfour_twentyfour, +/obj/item/canvas/twentyfour_twentyfour, +/obj/item/canvas/twentyfour_twentyfour, +/obj/item/canvas/twentyfour_twentyfour, +/obj/item/canvas/twentythree_nineteen, +/obj/item/canvas/twentythree_nineteen, +/obj/item/canvas/twentythree_nineteen, +/obj/item/canvas/twentythree_nineteen, +/obj/item/canvas/twentythree_nineteen, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/obj/structure/easel, +/turf/simulated/floor/tiled, +/area/storage/art) "ghg" = ( /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 5 @@ -33172,6 +33236,30 @@ dir = 9 }, /area/looking_glass/lg_1) +"haf" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/sign/painting/public{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_one_hall) "haw" = ( /obj/machinery/light/small{ dir = 8 @@ -33343,6 +33431,20 @@ }, /turf/simulated/floor/tiled, /area/hallway/lower/first_west) +"hFn" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 + }, +/obj/structure/sign/painting/public{ + pixel_y = -30 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_one_hall) "hFq" = ( /obj/effect/floor_decal/borderfloor{ dir = 4 @@ -33857,6 +33959,9 @@ name = "plastic table frame" }, /obj/item/device/flashlight/lamp/green, +/obj/structure/sign/painting/public{ + pixel_y = 30 + }, /turf/simulated/floor/carpet/gaycarpet, /area/tether/surfacebase/funny/clownoffice) "jva" = ( @@ -34553,6 +34658,10 @@ /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled, /area/crew_quarters/visitor_laundry) +"lgZ" = ( +/obj/structure/sign/painting/public, +/turf/simulated/wall, +/area/tether/surfacebase/surface_one_hall) "lhM" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/blast/regular{ @@ -35700,6 +35809,9 @@ }, /obj/item/clothing/mask/smokable/pipe/cobpipe, /obj/item/weapon/flame/lighter/zippo/ironic, +/obj/structure/sign/painting/public{ + pixel_y = 30 + }, /turf/simulated/floor/plating, /area/tether/surfacebase/funny/clownoffice) "okO" = ( @@ -35928,8 +36040,8 @@ name = "obscure table" }, /obj/random/action_figure, -/obj/machinery/light/small{ - dir = 1 +/obj/structure/sign/painting/public{ + pixel_y = 30 }, /turf/simulated/floor/carpet/bcarpet, /area/tether/surfacebase/funny/mimeoffice) @@ -36139,6 +36251,15 @@ }, /turf/simulated/floor/plating, /area/maintenance/lower/trash_pit) +"pUw" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/structure/sign/painting/public{ + pixel_x = -30 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/tram) "pUI" = ( /obj/structure/railing{ dir = 1 @@ -36461,6 +36582,12 @@ }, /turf/simulated/floor, /area/tether/surfacebase/security/gasstorage) +"qQo" = ( +/obj/structure/sign/painting/public{ + pixel_y = -30 + }, +/turf/simulated/floor/lino, +/area/crew_quarters/visitor_dining) "qRI" = ( /obj/effect/floor_decal/borderfloor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -36484,6 +36611,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/sign/painting/public{ + pixel_y = -30 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_one_hall) "qSJ" = ( @@ -36589,6 +36719,13 @@ }, /turf/simulated/floor/tiled, /area/crew_quarters/visitor_laundry) +"rnA" = ( +/obj/structure/table/woodentable, +/obj/structure/sign/painting/public{ + pixel_y = 30 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/sleep/maintDorm2) "rse" = ( /obj/structure/bed/double/padded, /obj/item/weapon/bedsheet/mimedouble, @@ -36634,6 +36771,9 @@ "rxD" = ( /obj/structure/bed/double/padded, /obj/item/weapon/bedsheet/clowndouble, +/obj/structure/sign/painting/public{ + pixel_y = -30 + }, /turf/simulated/floor/carpet/gaycarpet, /area/tether/surfacebase/funny/clownoffice) "rxG" = ( @@ -38070,6 +38210,9 @@ name = "obscure table" }, /obj/random/mre, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/carpet/bcarpet, /area/tether/surfacebase/funny/mimeoffice) "wUW" = ( @@ -38314,6 +38457,22 @@ /obj/machinery/camera/network/engineering, /turf/simulated/floor/plating, /area/maintenance/substation/civ_west) +"xvK" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/easel, +/obj/item/paint_palette, +/obj/item/paint_palette{ + pixel_y = -4 + }, +/obj/item/paint_brush, +/obj/item/paint_brush{ + pixel_x = 4 + }, +/turf/simulated/floor/tiled, +/area/storage/art) "xyI" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/grey/border, @@ -38440,6 +38599,18 @@ }, /turf/simulated/floor/plating, /area/tether/surfacebase/funny/hideyhole) +"xZB" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/grey/border{ + dir = 4 + }, +/obj/structure/sign/painting/public{ + pixel_x = 30 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitor_laundry) "yaA" = ( /obj/effect/floor_decal/corner/lightgrey{ dir = 9 @@ -47530,9 +47701,9 @@ aoI apq apY aqB -aoH -aoH -bcd +xvK +ggX +apu bcd apu aqb @@ -47672,8 +47843,8 @@ aoI apr apr apr -ara -aoH +apr +bmK aoH bcd apu @@ -50647,7 +50818,7 @@ aJl aHK aOS aGa -bbm +haf anW aoj aoS @@ -50667,7 +50838,7 @@ arg aoS aoj awH -axm +hFn ayh ayh ayh @@ -52422,7 +52593,7 @@ aYz aIF aZp aYg -aZQ +rnA bah bah aXn @@ -52672,7 +52843,7 @@ agM agM aIp aJi -agM +lgZ agM aLg aLO @@ -53055,7 +53226,7 @@ oKn fFb meS meS -meS +ara aaU aaU qJl @@ -53274,7 +53445,7 @@ aHX aZc aNt aYi -aZD +eoh aZD baD aZD @@ -54235,7 +54406,7 @@ aeL aIw aDu aCQ -aDu +qQo aLj aLW aMH @@ -54401,7 +54572,7 @@ bHR aVD aVS aga -bcJ +xZB aXc aUm aUm @@ -54785,13 +54956,13 @@ auV avC auB aCT -aCT +pUw ayp azp mRF rYL ayp -aCT +pUw avA aIo aEO diff --git a/maps/tether/tether-02-surface2.dmm b/maps/tether/tether-02-surface2.dmm index 0dfb501c95..dd1d76119f 100644 --- a/maps/tether/tether-02-surface2.dmm +++ b/maps/tether/tether-02-surface2.dmm @@ -2630,6 +2630,9 @@ dir = 8 }, /obj/machinery/organ_printer/flesh, +/obj/structure/sign/painting/library_secure{ + pixel_x = -30 + }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/resleeving) "adZ" = ( @@ -2819,6 +2822,9 @@ /obj/structure/bed/psych{ name = "couch" }, +/obj/structure/sign/painting/library_secure{ + pixel_x = -30 + }, /turf/simulated/floor/wood, /area/tether/surfacebase/medical/cmo) "aep" = ( @@ -7071,6 +7077,9 @@ /obj/structure/bed/chair/office/dark{ dir = 4 }, +/obj/structure/sign/painting/library_secure{ + pixel_x = -30 + }, /turf/simulated/floor/lino, /area/tether/surfacebase/security/detective/officea) "alc" = ( @@ -7107,6 +7116,9 @@ /obj/structure/bed/chair/office/dark{ dir = 8 }, +/obj/structure/sign/painting/library_secure{ + pixel_x = 30 + }, /turf/simulated/floor/lino, /area/tether/surfacebase/security/detective/officeb) "ali" = ( @@ -8967,6 +8979,9 @@ /obj/effect/floor_decal/corner/lime/border{ dir = 9 }, +/obj/structure/sign/painting/public{ + pixel_x = -30 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/public_garden_two) "aof" = ( @@ -9429,17 +9444,18 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/breakroom) "aoK" = ( -/obj/structure/mirror{ - dir = 4; - pixel_x = -25 +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 }, /obj/structure/sink{ dir = 8; pixel_x = -12; - pixel_y = 2 + pixel_y = -3 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 +/obj/structure/mirror{ + dir = 4; + pixel_x = -26; + pixel_y = 5 }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/bathroom) @@ -10182,9 +10198,7 @@ /obj/structure/reagent_dispensers/water_cooler/full{ dir = 4 }, -/obj/machinery/light{ - dir = 8 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/breakroom) "apY" = ( @@ -10203,6 +10217,9 @@ /obj/effect/floor_decal/corner/paleblue/diagonal, /obj/structure/table/standard, /obj/machinery/recharger, +/obj/structure/sign/painting/library_secure{ + pixel_y = -30 + }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/breakroom) "aqa" = ( @@ -10244,17 +10261,18 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/breakroom) "aqd" = ( -/obj/structure/mirror{ - dir = 4; - pixel_x = -25 +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 }, /obj/structure/sink{ dir = 8; pixel_x = -12; - pixel_y = 2 + pixel_y = -3 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 +/obj/structure/mirror{ + dir = 4; + pixel_x = -26; + pixel_y = 5 }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/bathroom) @@ -11119,6 +11137,9 @@ frequency = 1442; name = "Riot Control Console" }, +/obj/structure/sign/painting/library_secure{ + pixel_x = 30 + }, /turf/simulated/floor/tiled/dark, /area/tether/surfacebase/security/warden) "arJ" = ( @@ -12686,10 +12707,13 @@ }, /obj/structure/sink{ dir = 4; - pixel_x = 11 + pixel_x = 11; + pixel_y = -4 }, /obj/structure/mirror{ - pixel_x = 25 + dir = 8; + pixel_x = 26; + pixel_y = 5 }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/security/brig/bathroom) @@ -15566,6 +15590,9 @@ /obj/structure/closet/hydrant{ pixel_y = 32 }, +/obj/structure/sign/painting/public{ + pixel_x = 30 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/fish_farm) "aAe" = ( @@ -16244,6 +16271,9 @@ /obj/effect/floor_decal/corner/lightgrey/border{ dir = 1 }, +/obj/structure/sign/painting/library_secure{ + pixel_y = 30 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_two_hall) "aBI" = ( @@ -16918,6 +16948,9 @@ /obj/structure/cable/green{ icon_state = "1-8" }, +/obj/structure/sign/painting/library_secure{ + pixel_x = 30 + }, /turf/simulated/floor/tiled/dark, /area/bridge_hallway) "aCP" = ( @@ -19522,25 +19555,31 @@ /turf/simulated/floor/tiled/dark, /area/chapel/main) "aHX" = ( -/obj/structure/table/bench/padded, /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" }, +/obj/structure/bed/chair/sofa/pew/left{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/chapel/main) "aHY" = ( -/obj/structure/table/bench/padded, /obj/effect/floor_decal/chapel{ dir = 1 }, +/obj/structure/bed/chair/sofa/pew{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/chapel/main) "aHZ" = ( -/obj/structure/table/bench/padded, /obj/effect/floor_decal/chapel{ dir = 4 }, +/obj/structure/bed/chair/sofa/pew/right{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/chapel/main) "aIa" = ( @@ -19552,12 +19591,14 @@ /turf/simulated/floor/tiled/dark, /area/chapel/main) "aIc" = ( -/obj/structure/table/bench/padded, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ icon_state = "1-2" }, +/obj/structure/bed/chair/sofa/pew/right{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/chapel/main) "aId" = ( @@ -19975,6 +20016,9 @@ /obj/structure/flora/pottedplant/small{ pixel_y = 12 }, +/obj/structure/sign/painting/library_secure{ + pixel_x = -30 + }, /turf/simulated/floor/wood, /area/bridge/meeting_room) "aIU" = ( @@ -20038,17 +20082,23 @@ /turf/simulated/floor/tiled/dark, /area/chapel/main) "aJb" = ( -/obj/structure/table/bench/padded, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/bed/chair/sofa/pew/left{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/chapel/main) "aJc" = ( -/obj/structure/table/bench/padded, +/obj/structure/bed/chair/sofa/pew{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/chapel/main) "aJd" = ( -/obj/structure/table/bench/padded, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/bed/chair/sofa/pew/right{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/chapel/main) "aJe" = ( @@ -20442,23 +20492,30 @@ d2 = 8; icon_state = "2-8" }, +/obj/structure/sign/painting/chapel_secure{ + pixel_y = 30 + }, /turf/simulated/floor/lino, /area/chapel/office) "aJU" = ( /turf/simulated/floor/lino, /area/chapel/office) "aJV" = ( -/obj/structure/table/bench/padded, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +/obj/structure/bed/chair/sofa/pew/left{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/chapel/main) "aJW" = ( -/obj/structure/table/bench/padded, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/structure/bed/chair/sofa/pew/right{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/chapel/main) "aJX" = ( @@ -20802,9 +20859,17 @@ /turf/simulated/floor/lino, /area/chapel/office) "aKG" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/dark, -/area/chapel/main) +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/effect/floor_decal/corner/pink/border{ + dir = 4 + }, +/obj/structure/sign/painting/library_secure{ + pixel_x = 30 + }, +/turf/simulated/floor/tiled/white, +/area/tether/surfacebase/medical/examroom) "aKH" = ( /obj/effect/floor_decal/chapel{ dir = 8 @@ -20884,6 +20949,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/structure/sign/painting/library_secure{ + pixel_x = -30 + }, /turf/simulated/floor/tiled, /area/rnd/rdoffice) "aKQ" = ( @@ -24292,6 +24360,9 @@ /obj/effect/landmark/start{ name = "Roboticist" }, +/obj/structure/sign/painting/library_secure{ + pixel_x = 30 + }, /turf/simulated/floor/wood, /area/rnd/breakroom) "aRq" = ( @@ -26202,16 +26273,19 @@ /turf/simulated/floor/tiled/white, /area/rnd/breakroom/bathroom) "aVh" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, /obj/machinery/firealarm{ layer = 3.3; pixel_y = 26 }, /obj/structure/mirror{ - pixel_x = 29 + dir = 8; + pixel_x = 26; + pixel_y = 5 + }, +/obj/structure/sink{ + dir = 4; + pixel_x = 11; + pixel_y = -4 }, /turf/simulated/floor/tiled/white, /area/rnd/breakroom/bathroom) @@ -26448,12 +26522,15 @@ /turf/simulated/floor/tiled/white, /area/rnd/breakroom/bathroom) "aVM" = ( +/obj/structure/mirror{ + dir = 8; + pixel_x = 26; + pixel_y = 5 + }, /obj/structure/sink{ dir = 4; - pixel_x = 11 - }, -/obj/structure/mirror{ - pixel_x = 29 + pixel_x = 11; + pixel_y = -4 }, /turf/simulated/floor/tiled/white, /area/rnd/breakroom/bathroom) @@ -32299,6 +32376,9 @@ /obj/structure/undies_wardrobe, /obj/effect/floor_decal/borderfloorwhite, /obj/effect/floor_decal/corner/paleblue/border, +/obj/structure/sign/painting/library_secure{ + pixel_y = -30 + }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/recoveryward) "boH" = ( @@ -32688,6 +32768,13 @@ /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/lower/south) +"bOU" = ( +/obj/machinery/light/floortube{ + dir = 8; + pixel_x = -3 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) "bOW" = ( /obj/structure/railing{ dir = 1 @@ -32792,6 +32879,15 @@ }, /turf/simulated/floor/tiled/techfloor/grid, /area/ai) +"dzE" = ( +/obj/effect/floor_decal/chapel{ + dir = 8 + }, +/obj/structure/sign/painting/chapel_secure{ + pixel_y = -30 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) "dAB" = ( /obj/structure/cable/orange{ d1 = 4; @@ -32906,6 +33002,13 @@ /obj/structure/railing, /turf/simulated/floor/plating, /area/maintenance/readingrooms) +"eTp" = ( +/obj/effect/floor_decal/chapel, +/obj/structure/sign/painting/chapel_secure{ + pixel_y = -30 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) "eZG" = ( /obj/machinery/camera/network/command, /obj/effect/floor_decal/techfloor{ @@ -32913,6 +33016,13 @@ }, /turf/simulated/floor/tiled/techmaint, /area/ai) +"fhR" = ( +/obj/machinery/light/floortube{ + dir = 4; + pixel_x = 2 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) "flk" = ( /obj/structure/catwalk, /obj/effect/floor_decal/techfloor{ @@ -33119,6 +33229,15 @@ /obj/effect/floor_decal/techfloor, /turf/simulated/floor/tiled/techfloor/grid, /area/ai_upload_foyer) +"huD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/sign/painting/chapel_secure{ + pixel_y = -30 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/chapel_morgue) "hxk" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/light{ @@ -33179,6 +33298,21 @@ }, /turf/simulated/floor/bluegrid, /area/ai_upload) +"jcd" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/structure/sign/painting/public{ + pixel_x = 30 + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/east_stairs_two) +"jiy" = ( +/obj/structure/sign/painting/library_secure{ + pixel_x = 30 + }, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "jtj" = ( /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/readingrooms) @@ -33502,6 +33636,23 @@ }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/breakroom) +"lJc" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/painting/public{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/surface_two_hall) "lMw" = ( /obj/item/device/radio/intercom/locked/ai_private{ dir = 4; @@ -33543,6 +33694,12 @@ "mwQ" = ( /turf/simulated/floor/bluegrid, /area/ai) +"mBP" = ( +/obj/structure/bed/chair/sofa/pew/right{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) "mCl" = ( /obj/machinery/floodlight, /turf/simulated/floor/plating, @@ -33911,6 +34068,13 @@ "qSJ" = ( /turf/simulated/floor/tiled/techmaint, /area/ai) +"rbq" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/sign/painting/chapel_secure{ + pixel_x = 30 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) "rii" = ( /obj/effect/floor_decal/techfloor{ dir = 9 @@ -34010,6 +34174,15 @@ }, /turf/simulated/floor/tiled/techmaint, /area/ai) +"rUS" = ( +/obj/effect/floor_decal/chapel{ + dir = 1 + }, +/obj/structure/bed/chair/sofa/pew/left{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) "rXR" = ( /obj/effect/floor_decal/techfloor{ dir = 8 @@ -34454,6 +34627,15 @@ }, /turf/simulated/floor/tiled/techfloor/grid, /area/ai) +"vmx" = ( +/obj/effect/floor_decal/chapel{ + dir = 4 + }, +/obj/structure/bed/chair/sofa/pew{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) "voE" = ( /obj/effect/floor_decal/corner_techfloor_grid, /obj/effect/floor_decal/corner_techfloor_grid{ @@ -34703,6 +34885,12 @@ }, /turf/simulated/floor/tiled/techfloor/grid, /area/ai) +"xJR" = ( +/obj/structure/bed/chair/sofa/pew/left{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) "xKF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 @@ -46295,7 +46483,7 @@ laD aac adt avD -axp +lJc ayd ayH azb @@ -47307,7 +47495,7 @@ aGg aGK aHe aHv -aGF +jiy aIu aFp aFp @@ -48313,7 +48501,7 @@ aMs aNn aNV aNV -aNV +jcd aNV aQY aRA @@ -50141,7 +50329,7 @@ apa aDO aDO aDO -aDO +rbq aFF aGr aGR @@ -50152,7 +50340,7 @@ aIC aJb aIb aJV -aKG +aGR aDP aLX aLX @@ -50294,7 +50482,7 @@ aID aJc aGR aHY -aKH +dzE aDP aLY aLY @@ -50433,7 +50621,7 @@ aGT aGT aHZ aIE -aJc +mBP aGR aHZ aKI @@ -50575,7 +50763,7 @@ aHj aHA aIa aIF -aGR +bOU aGR aGR aGR @@ -50819,7 +51007,7 @@ aab ado aak aaA -aaA +aKG aaD ahK ait @@ -50859,7 +51047,7 @@ aHl aHB aIb aIH -aGR +fhR aGR aGR aGR @@ -50999,11 +51187,11 @@ aDP aGS aGT aGT -aHY +rUS aID -aJc +xJR aGR -aHY +rUS aKH aDP adt @@ -51141,12 +51329,12 @@ aBz aGR aGR aGR -aHZ +vmx aIE aJc aGR -aHZ -aKI +vmx +eTp aDP aMc aMc @@ -51704,7 +51892,7 @@ aDh aDT aEw aFd -aFM +huD aBz abn abn diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm index 3601e033ae..494bdcbdca 100644 --- a/maps/tether/tether-03-surface3.dmm +++ b/maps/tether/tether-03-surface3.dmm @@ -8976,9 +8976,6 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "aoj" = ( -/obj/machinery/alarm{ - pixel_y = 22 - }, /obj/effect/floor_decal/borderfloor{ dir = 1 }, @@ -8989,6 +8986,9 @@ dir = 4 }, /obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/structure/sign/painting/public{ + pixel_y = 30 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "aok" = ( @@ -9210,6 +9210,9 @@ /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 4 }, +/obj/machinery/alarm{ + pixel_y = 22 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "aoG" = ( @@ -11902,9 +11905,9 @@ dir = 4; pixel_x = -30 }, -/obj/structure/sink{ +/obj/structure/sink/kitchen{ dir = 8; - pixel_x = -12 + pixel_x = -11 }, /turf/simulated/floor/grass, /area/hydroponics) @@ -11913,10 +11916,9 @@ /turf/simulated/floor/grass, /area/hydroponics) "atg" = ( -/obj/structure/sink{ +/obj/structure/sink/kitchen{ dir = 8; - pixel_x = -12; - pixel_y = 2 + pixel_x = -11 }, /turf/simulated/floor/grass, /area/hydroponics) @@ -13161,7 +13163,9 @@ /turf/simulated/wall, /area/crew_quarters/kitchen) "avz" = ( -/obj/item/weapon/stool/padded, +/obj/item/weapon/stool/padded{ + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/bar) "avA" = ( @@ -13453,6 +13457,9 @@ "awd" = ( /obj/machinery/librarycomp, /obj/structure/table/woodentable, +/obj/structure/sign/painting/library_secure{ + pixel_x = -30 + }, /turf/simulated/floor/carpet, /area/library) "awe" = ( @@ -13525,10 +13532,12 @@ /obj/structure/sink{ dir = 8; pixel_x = -12; - pixel_y = 2 + pixel_y = -3 }, /obj/structure/mirror{ - pixel_x = -28 + dir = 4; + pixel_x = -25; + pixel_y = 5 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/captain) @@ -14216,6 +14225,9 @@ /obj/machinery/chemical_dispenser/bar_soft/full{ dir = 8 }, +/obj/structure/sign/painting/library_secure{ + pixel_x = 30 + }, /turf/simulated/floor/lino, /area/crew_quarters/bar) "axp" = ( @@ -14648,6 +14660,12 @@ /obj/item/weapon/storage/briefcase{ pixel_x = 3 }, +/obj/structure/sign/painting/library_private{ + pixel_x = 30 + }, +/obj/structure/sign/painting/library_private{ + pixel_y = 30 + }, /turf/simulated/floor/carpet, /area/tether/surfacebase/library/study) "axX" = ( @@ -15041,19 +15059,24 @@ /obj/effect/landmark/start{ name = "Librarian" }, +/obj/structure/sign/painting/library_secure{ + pixel_x = 30 + }, /turf/simulated/floor/carpet, /area/library) "ayJ" = ( /obj/effect/floor_decal/spline/plain{ dir = 6 }, -/obj/item/weapon/stool/padded, /obj/structure/cable/green{ icon_state = "0-8" }, /obj/machinery/light{ dir = 4 }, +/obj/item/weapon/stool/padded{ + dir = 1 + }, /turf/simulated/floor/lino, /area/crew_quarters/bar) "ayK" = ( @@ -15540,13 +15563,15 @@ /obj/effect/floor_decal/spline/plain{ dir = 8 }, -/obj/item/weapon/stool/padded, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, +/obj/item/weapon/stool/padded{ + dir = 4 + }, /turf/simulated/floor/lino, /area/crew_quarters/bar) "azt" = ( @@ -16279,6 +16304,9 @@ }, /obj/item/device/camera, /obj/item/device/tape, +/obj/structure/sign/painting/library_private{ + pixel_x = -30 + }, /turf/simulated/floor/carpet, /area/tether/surfacebase/library/study) "aAx" = ( @@ -16745,6 +16773,9 @@ dir = 4 }, /obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/structure/sign/painting/public{ + pixel_y = 30 + }, /turf/simulated/floor/tiled, /area/rnd/research/researchdivision) "aBj" = ( @@ -18179,8 +18210,8 @@ /turf/simulated/open, /area/tether/surfacebase/public_garden_three) "aDI" = ( -/obj/structure/sink{ - pixel_y = 24 +/obj/structure/sink/kitchen{ + pixel_y = 20 }, /turf/simulated/floor/grass, /area/hydroponics) @@ -18813,6 +18844,9 @@ /obj/structure/bed/chair/office/dark{ dir = 1 }, +/obj/structure/sign/painting/library_secure{ + pixel_y = -30 + }, /turf/simulated/floor/carpet, /area/library) "aES" = ( @@ -18844,6 +18878,9 @@ /obj/structure/bed/chair/office/dark{ dir = 1 }, +/obj/structure/sign/painting/library_secure{ + pixel_y = -30 + }, /turf/simulated/floor/carpet, /area/library) "aEX" = ( @@ -20346,10 +20383,12 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/botanystorage) "aHp" = ( -/obj/item/weapon/stool/padded, /obj/effect/floor_decal/corner/beige{ dir = 6 }, +/obj/item/weapon/stool/padded{ + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/bar) "aHq" = ( @@ -20369,7 +20408,9 @@ /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/item/weapon/stool/padded, +/obj/item/weapon/stool/padded{ + dir = 4 + }, /turf/simulated/floor/carpet/turcarpet, /area/crew_quarters/bar) "aHt" = ( @@ -20908,7 +20949,9 @@ /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/item/weapon/stool/padded, +/obj/item/weapon/stool/padded{ + dir = 8 + }, /turf/simulated/floor/carpet/turcarpet, /area/crew_quarters/bar) "aIh" = ( @@ -20966,7 +21009,9 @@ /obj/effect/floor_decal/spline/plain{ dir = 8 }, -/obj/item/weapon/stool/padded, +/obj/item/weapon/stool/padded{ + dir = 4 + }, /turf/simulated/floor/lino, /area/crew_quarters/bar) "aIn" = ( @@ -21228,10 +21273,12 @@ /obj/effect/floor_decal/spline/plain{ dir = 8 }, -/obj/item/weapon/stool/padded, /obj/structure/disposalpipe/segment{ dir = 8 }, +/obj/item/weapon/stool/padded{ + dir = 4 + }, /turf/simulated/floor/lino, /area/crew_quarters/bar) "aIL" = ( @@ -21782,7 +21829,9 @@ dir = 2; icon_state = "pipe-c" }, -/obj/item/weapon/stool/padded, +/obj/item/weapon/stool/padded{ + dir = 8 + }, /turf/simulated/floor/carpet/turcarpet, /area/crew_quarters/bar) "aJL" = ( @@ -22090,7 +22139,9 @@ dir = 4 }, /obj/structure/disposalpipe/segment, -/obj/item/weapon/stool/padded, +/obj/item/weapon/stool/padded{ + dir = 8 + }, /turf/simulated/floor/carpet/turcarpet, /area/crew_quarters/bar) "aKp" = ( @@ -22198,7 +22249,7 @@ "aKy" = ( /obj/effect/floor_decal/corner/grey/diagonal, /obj/structure/sink/kitchen{ - pixel_y = 28 + pixel_y = 20 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -23182,10 +23233,13 @@ "aMw" = ( /obj/structure/sink{ dir = 8; - pixel_x = -12 + pixel_x = -12; + pixel_y = -3 }, /obj/structure/mirror{ - pixel_x = -25 + dir = 4; + pixel_x = -26; + pixel_y = 5 }, /obj/machinery/vending/wallmed1/public{ pixel_y = 28 @@ -25109,7 +25163,9 @@ /turf/simulated/floor/tiled, /area/rnd/outpost/xenobiology/outpost_breakroom) "aQw" = ( -/obj/item/weapon/stool/padded, +/obj/item/weapon/stool/padded{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/rnd/outpost/xenobiology/outpost_breakroom) "aQx" = ( @@ -27745,6 +27801,9 @@ /obj/effect/floor_decal/corner/lightgrey{ dir = 9 }, +/obj/structure/sign/painting/public{ + pixel_y = 30 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "aVr" = ( @@ -29313,6 +29372,9 @@ /area/crew_quarters/captain) "aXX" = ( /obj/structure/filingcabinet/filingcabinet, +/obj/structure/sign/painting/library_secure{ + pixel_x = 30 + }, /turf/simulated/floor/tiled/dark, /area/bridge) "aXY" = ( @@ -30289,6 +30351,9 @@ /obj/machinery/photocopier/faxmachine{ department = "Head of Personnel's Office" }, +/obj/structure/sign/painting/library_secure{ + pixel_x = -30 + }, /turf/simulated/floor/carpet, /area/crew_quarters/heads/hop) "aZO" = ( @@ -30590,6 +30655,9 @@ /area/crew_quarters/captain) "baj" = ( /obj/structure/displaycase, +/obj/structure/sign/painting/library_secure{ + pixel_y = 30 + }, /turf/simulated/floor/wood, /area/crew_quarters/captain) "bak" = ( @@ -30762,10 +30830,12 @@ /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/item/weapon/stool/padded, /obj/machinery/light{ dir = 8 }, +/obj/item/weapon/stool/padded{ + dir = 4 + }, /turf/simulated/floor/carpet/turcarpet, /area/crew_quarters/bar) "baB" = ( @@ -31010,6 +31080,9 @@ d2 = 8; icon_state = "2-8" }, +/obj/structure/sign/painting/public{ + pixel_x = 30 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "baR" = ( @@ -31526,22 +31599,26 @@ /obj/effect/floor_decal/spline/plain{ dir = 8 }, -/obj/item/weapon/stool/padded, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/item/weapon/stool/padded{ + dir = 4 + }, /turf/simulated/floor/lino, /area/crew_quarters/bar) "bbS" = ( /obj/effect/floor_decal/spline/plain{ dir = 8 }, -/obj/item/weapon/stool/padded, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, +/obj/item/weapon/stool/padded{ + dir = 4 + }, /turf/simulated/floor/lino, /area/crew_quarters/bar) "bbT" = ( @@ -31823,6 +31900,9 @@ /obj/effect/floor_decal/spline/plain{ dir = 1 }, +/obj/structure/sign/painting/library_secure{ + pixel_x = -30 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/entertainment/stage) "bcs" = ( @@ -32946,6 +33026,9 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/sign/painting/library_secure{ + pixel_x = -30 + }, /turf/simulated/floor/tiled/eris/steel/bar_dance, /area/tether/surfacebase/barbackmaintenance) "beo" = ( @@ -33227,7 +33310,6 @@ /area/tether/surfacebase/entertainment/stage) "beK" = ( /obj/effect/floor_decal/spline/plain, -/obj/item/weapon/stool/padded, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -33238,6 +33320,9 @@ d2 = 8; icon_state = "1-8" }, +/obj/item/weapon/stool/padded{ + dir = 1 + }, /turf/simulated/floor/lino, /area/crew_quarters/bar) "beL" = ( @@ -34178,12 +34263,14 @@ /area/crew_quarters/bar) "bgE" = ( /obj/effect/floor_decal/spline/plain, -/obj/item/weapon/stool/padded, /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/item/weapon/stool/padded{ + dir = 1 + }, /turf/simulated/floor/lino, /area/crew_quarters/bar) "bgF" = ( @@ -38011,6 +38098,12 @@ }, /turf/simulated/floor/tiled/dark, /area/tether/surfacebase/security/iaa/officea) +"cEW" = ( +/obj/structure/sign/painting/library_secure{ + pixel_y = -30 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) "cFA" = ( /obj/effect/floor_decal/borderfloor{ dir = 8 @@ -38615,8 +38708,7 @@ pixel_y = 20 }, /obj/structure/mirror{ - dir = 4; - pixel_y = 32 + pixel_y = 38 }, /obj/machinery/light/small{ dir = 4 @@ -38966,11 +39058,13 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/shuttle_pad) "gLg" = ( -/obj/item/weapon/stool/padded, /obj/machinery/holoposter{ dir = 8; pixel_x = 30 }, +/obj/item/weapon/stool/padded{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/crew_quarters/pool) "gOS" = ( @@ -39790,7 +39884,9 @@ /area/tether/surfacebase/public_garden_three) "jRO" = ( /obj/effect/floor_decal/spline/plain, -/obj/item/weapon/stool/padded, +/obj/item/weapon/stool/padded{ + dir = 1 + }, /turf/simulated/floor/carpet/turcarpet, /area/crew_quarters/bar) "jSV" = ( @@ -40719,6 +40815,20 @@ }, /turf/simulated/floor/outdoors/grass/sif/virgo3b, /area/tether/surfacebase/outside/outside3) +"niG" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/structure/sign/painting/public{ + pixel_y = -30 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) "nlf" = ( /obj/effect/floor_decal/borderfloor{ dir = 8 @@ -40768,6 +40878,12 @@ }, /turf/simulated/floor/tiled/white, /area/crew_quarters/barrestroom) +"nsm" = ( +/obj/structure/sign/painting/library_secure{ + pixel_y = -30 + }, +/turf/simulated/floor/carpet, +/area/library) "ntl" = ( /obj/structure/table/bench/wooden, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -40979,6 +41095,12 @@ }, /turf/simulated/floor/tiled/white, /area/crew_quarters/recreation_area_restroom) +"oqI" = ( +/obj/item/weapon/stool/padded{ + dir = 4 + }, +/turf/simulated/floor/carpet/turcarpet, +/area/crew_quarters/bar) "orc" = ( /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/lower/medsec_maintenance) @@ -41008,6 +41130,12 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"oBJ" = ( +/obj/structure/sign/painting/public{ + pixel_x = 30 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/cafeteria) "oCC" = ( /obj/effect/floor_decal/borderfloor{ dir = 1 @@ -41160,6 +41288,12 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/recreation_area) +"oTr" = ( +/obj/structure/sign/painting/public{ + pixel_x = -30 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/cafeteria) "oUI" = ( /obj/structure/cable/green{ d1 = 4; @@ -41609,8 +41743,7 @@ pixel_y = 20 }, /obj/structure/mirror{ - dir = 4; - pixel_y = 32 + pixel_y = 38 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/barrestroom) @@ -42600,6 +42733,24 @@ }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/chemistry) +"uiW" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 + }, +/obj/structure/sign/painting/public{ + pixel_x = 30 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) "ukn" = ( /obj/effect/floor_decal/borderfloor{ dir = 10 @@ -43025,6 +43176,22 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/shuttle_pad) +"vVD" = ( +/obj/effect/floor_decal/spline/plain, +/obj/structure/sign/painting/library_secure{ + pixel_x = -30 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/entertainment/stage) +"vXo" = ( +/obj/structure/bed/chair/comfy/beige{ + dir = 8 + }, +/obj/structure/sign/painting/library_secure{ + pixel_x = 30 + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) "vYr" = ( /obj/machinery/light/small{ dir = 4 @@ -43314,6 +43481,12 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/briefingroom) +"wTj" = ( +/obj/structure/sign/painting/library_secure{ + pixel_x = -30 + }, +/turf/simulated/floor/wood, +/area/library) "wXr" = ( /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 6 @@ -43551,6 +43724,24 @@ /obj/machinery/camera/network/tether, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"xEb" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/structure/sign/painting/public{ + pixel_x = -30 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) "xEB" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -50319,7 +50510,7 @@ agw agw air aWF -akn +niG akS alB amp @@ -52888,7 +53079,7 @@ aix apQ asS aha -aha +xEb aOb ass asR @@ -54326,7 +54517,7 @@ azi aAw azP aCG -azT +wTj azT aFn aFt @@ -54473,7 +54664,7 @@ aEU aHc aFu aHc -aEU +nsm axg aGZ aHR @@ -55011,7 +55202,7 @@ ali ali ali ali -ali +uiW ali aOT ali @@ -56502,7 +56693,7 @@ biF bsr cun gsP -biL +oTr bjs biF adG @@ -56601,7 +56792,7 @@ bdm bdg bdo beJ -bgk +vVD bbk bgB aYC @@ -58164,7 +58355,7 @@ aCT cGs aHs baA -aIl +oqI aIO bgD asX @@ -58774,7 +58965,7 @@ biF gYa lWN qKO -biL +oBJ bjv biF adG @@ -59162,7 +59353,7 @@ bbM bbV aAc aAG -asX +cEW ayM bdV beb @@ -59592,7 +59783,7 @@ baW ayM bea aHC -bfz +vXo bfz bfz aHC diff --git a/maps/tether/tether-04-transit.dmm b/maps/tether/tether-04-transit.dmm index da2cbe77e0..59259d0fac 100644 --- a/maps/tether/tether-04-transit.dmm +++ b/maps/tether/tether-04-transit.dmm @@ -636,6 +636,12 @@ }, /turf/simulated/floor/plating, /area/maintenance/tether_midpoint) +"QE" = ( +/obj/structure/sign/painting/public{ + pixel_y = -30 + }, +/turf/simulated/floor/wood, +/area/tether/midpoint) "RZ" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -686,6 +692,12 @@ }, /turf/simulated/floor/wood, /area/tether/midpoint) +"Wc" = ( +/obj/structure/sign/painting/public{ + pixel_x = 30 + }, +/turf/simulated/floor/wood, +/area/tether/midpoint) "WU" = ( /obj/machinery/light{ dir = 4 @@ -9034,10 +9046,10 @@ pK pK pK Pz +Wc pK pK -pK -pK +Wc Pz pK pK @@ -9598,7 +9610,7 @@ tA tA tA pK -pK +QE Dz Qv xl @@ -10024,7 +10036,7 @@ tA tA tA pK -pK +QE Dz Qv Hs diff --git a/maps/tether/tether-05-station1.dmm b/maps/tether/tether-05-station1.dmm index 5f96e01af7..e0a02d2b4d 100644 --- a/maps/tether/tether-05-station1.dmm +++ b/maps/tether/tether-05-station1.dmm @@ -5823,11 +5823,10 @@ /area/maintenance/station/eng_lower) "amE" = ( /obj/structure/mirror{ - dir = 4; - pixel_y = 32 + pixel_y = 38 }, /obj/structure/sink{ - pixel_y = 22 + pixel_y = 20 }, /turf/simulated/floor/tiled/white, /area/tether/station/restroom) @@ -7538,6 +7537,9 @@ /area/engineering/break_room) "aqH" = ( /obj/effect/floor_decal/corner/white/diagonal, +/obj/structure/sign/painting/library_secure{ + pixel_x = 30 + }, /turf/simulated/floor/tiled, /area/engineering/break_room) "aqI" = ( @@ -8283,25 +8285,9 @@ /turf/simulated/floor/tiled/monotile, /area/engineering/workshop) "asW" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/tether/outpost/solars_outside{ - name = "\improper Telecomms Solar Field" - }) +/obj/item/stack/cable_coil/yellow, +/turf/space, +/area/space) "asX" = ( /obj/machinery/power/tracker, /obj/structure/cable/yellow{ @@ -11297,14 +11283,13 @@ /turf/simulated/floor/plating, /area/quartermaster/storage) "aDP" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/structure/mirror{ - dir = 4; - pixel_y = 32 + pixel_y = 38 }, /obj/structure/sink{ - pixel_y = 22 + pixel_y = 20 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled/white, /area/tether/station/restroom) "aDR" = ( @@ -11602,18 +11587,20 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/structure/mirror{ - dir = 4; - pixel_x = 28 - }, /obj/effect/landmark{ name = "morphspawn" }, /obj/machinery/light, +/obj/structure/sink{ + dir = 4; + pixel_x = 11; + pixel_y = -4 + }, +/obj/structure/mirror{ + dir = 8; + pixel_x = 26; + pixel_y = 5 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/engi_wash) "aES" = ( @@ -12248,11 +12235,13 @@ "aLj" = ( /obj/structure/sink{ dir = 4; - pixel_x = 11 + pixel_x = 11; + pixel_y = -4 }, /obj/structure/mirror{ - dir = 4; - pixel_x = 28 + dir = 8; + pixel_x = 26; + pixel_y = 5 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/engi_wash) @@ -12982,6 +12971,9 @@ }, /obj/item/clothing/mask/breath, /obj/item/weapon/rig/ce/equipped, +/obj/structure/sign/painting/library_secure{ + pixel_x = -30 + }, /turf/simulated/floor/tiled, /area/crew_quarters/heads/chief) "aQh" = ( @@ -24242,6 +24234,27 @@ /obj/machinery/mineral/stacking_machine, /turf/simulated/floor/plating, /area/quartermaster/belterdock/refinery) +"kCE" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/structure/sign/painting/public{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled, +/area/hallway/station/docks) "kCH" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -25868,6 +25881,25 @@ }, /turf/simulated/floor/tiled, /area/tether/exploration/crew) +"lSs" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 + }, +/obj/structure/sign/painting/public{ + pixel_x = 30 + }, +/turf/simulated/floor/tiled, +/area/hallway/station/atrium) "lSR" = ( /obj/effect/landmark/start{ name = "Pilot" @@ -28462,6 +28494,9 @@ /obj/structure/table/standard, /obj/item/weapon/storage/pill_bottle/dice_nerd, /obj/random/maintenance/cargo, +/obj/structure/sign/painting/public{ + pixel_x = 30 + }, /turf/simulated/floor, /area/maintenance/station/cargo) "ovQ" = ( @@ -28736,6 +28771,9 @@ /obj/effect/floor_decal/corner/green/border{ dir = 9 }, +/obj/structure/sign/painting/library_secure{ + pixel_x = -30 + }, /turf/simulated/floor/tiled, /area/tether/exploration/pathfinder_office) "oTF" = ( @@ -29170,6 +29208,18 @@ }, /turf/simulated/floor/tiled, /area/quartermaster/belterdock) +"pxB" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 6 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 6 + }, +/obj/structure/sign/painting/library_secure{ + pixel_x = 30 + }, +/turf/simulated/floor/tiled, +/area/tether/exploration/crew) "pyy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -29570,6 +29620,17 @@ }, /turf/simulated/floor/plating, /area/quartermaster/belterdock/refinery) +"qcg" = ( +/obj/machinery/camera/network/telecom, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/airless, +/area/tether/outpost/solars_outside{ + name = "\improper Telecomms Solar Field" + }) "qcz" = ( /obj/structure/bed/chair/shuttle, /turf/simulated/floor/tiled/eris/white/gray_perforated, @@ -32142,6 +32203,9 @@ /area/hallway/station/atrium) "sYe" = ( /obj/machinery/computer/security/mining, +/obj/structure/sign/painting/library_secure{ + pixel_x = 30 + }, /turf/simulated/floor/wood, /area/quartermaster/qm) "sYw" = ( @@ -41162,7 +41226,7 @@ aSe aRX aVz aRb -oYN +kCE bVP pfh bgG @@ -46692,7 +46756,7 @@ vYJ vYJ wRJ tRn -vYJ +lSs vYJ dPx adM @@ -48239,7 +48303,7 @@ ajj ajj vmt hqU -ajq +pxB scu hlX xNg @@ -52073,7 +52137,7 @@ dLP gDA dTU gfX -fpk +gjd ahW ahW ahV @@ -52215,7 +52279,7 @@ dTU dTU dTU gfX -fpk +gjd aaa ahW aaa @@ -52357,7 +52421,7 @@ gfX gfX gfX gfX -rhn +qcg aaa ahW aaa @@ -53053,7 +53117,7 @@ aaa asH ape ape -asW +fpk auH auH avC @@ -53336,7 +53400,7 @@ aaa aaa aaa aaa -aaa +asW gjd aaa aaa @@ -53621,7 +53685,7 @@ ape ape ape ape -asW +fpk auH auH auH @@ -53763,7 +53827,7 @@ agC agC agC agC -gjd +fpk agC agC agC @@ -53905,8 +53969,8 @@ aaa aaa aaa aaa -gjd -aaa +fpk +asW aaa aaa aaa @@ -54047,7 +54111,7 @@ aEI aEI aEI aEI -gjd +fpk aEI aEI aEI @@ -54189,7 +54253,7 @@ ape ape ape ape -asW +fpk auH auH auH diff --git a/maps/tether/tether-06-mining.dmm b/maps/tether/tether-06-mining.dmm index 6c204235a6..69f736d6f1 100644 --- a/maps/tether/tether-06-mining.dmm +++ b/maps/tether/tether-06-mining.dmm @@ -134,8 +134,7 @@ /area/outpost/mining_main/hangar) "ax" = ( /obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, @@ -167,8 +166,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5; - icon_state = "intact-scrubbers" + dir = 5 }, /turf/simulated/floor/tiled, /area/outpost/mining_main/hangar) @@ -230,9 +228,7 @@ dir = 1 }, /obj/machinery/firealarm{ - dir = 2; layer = 3.3; - pixel_x = 0; pixel_y = 26 }, /turf/simulated/floor/plating, @@ -340,7 +336,6 @@ /obj/machinery/power/apc{ dir = 1; name = "north bump"; - pixel_x = 0; pixel_y = 24 }, /obj/structure/cable/green{ @@ -360,7 +355,6 @@ /obj/machinery/power/apc{ dir = 1; name = "north bump"; - pixel_x = 0; pixel_y = 24 }, /obj/structure/cable/green{ @@ -425,7 +419,6 @@ /area/outpost/mining_main/hangar) "aZ" = ( /obj/machinery/power/apc{ - dir = 2; name = "south bump"; pixel_y = -32 }, @@ -567,9 +560,7 @@ /area/outpost/mining_main/maintenance) "bm" = ( /obj/machinery/light{ - dir = 4; - icon_state = "tube1"; - pixel_x = 0 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/supply{ dir = 9 @@ -718,9 +709,7 @@ "bD" = ( /obj/machinery/power/smes/buildable{ RCon_tag = "Substation - Mining Outpost"; - charge = 0; - output_attempt = 0; - outputting = 0 + output_attempt = 0 }, /obj/structure/cable{ d2 = 8; @@ -848,8 +837,7 @@ /area/outpost/mining_main/secondary_gear_storage) "bP" = ( /obj/effect/floor_decal/industrial/warning/corner{ - dir = 1; - icon_state = "warningcorner" + dir = 1 }, /obj/machinery/firealarm{ dir = 4; @@ -895,9 +883,7 @@ pixel_x = -26 }, /obj/effect/floor_decal/borderfloor{ - dir = 8; - icon_state = "borderfloor"; - pixel_x = 0 + dir = 8 }, /obj/effect/floor_decal/corner/brown/border{ dir = 8 @@ -991,9 +977,7 @@ dir = 4 }, /obj/effect/floor_decal/borderfloor{ - dir = 8; - icon_state = "borderfloor"; - pixel_x = 0 + dir = 8 }, /obj/effect/floor_decal/corner/brown/border{ dir = 8 @@ -1038,9 +1022,7 @@ "cj" = ( /obj/structure/closet/secure_closet/miner, /obj/effect/floor_decal/borderfloor{ - dir = 8; - icon_state = "borderfloor"; - pixel_x = 0 + dir = 8 }, /obj/effect/floor_decal/corner/brown/border{ dir = 8 @@ -1071,8 +1053,7 @@ pixel_y = 24 }, /obj/effect/floor_decal/borderfloor{ - dir = 1; - pixel_y = 0 + dir = 1 }, /obj/effect/floor_decal/corner/brown/border{ dir = 1 @@ -1247,8 +1228,7 @@ }, /obj/machinery/washing_machine, /obj/effect/floor_decal/borderfloor{ - dir = 1; - pixel_y = 0 + dir = 1 }, /obj/effect/floor_decal/corner/brown/border{ dir = 1 @@ -1265,7 +1245,6 @@ /obj/machinery/power/apc{ dir = 1; name = "north bump"; - pixel_x = 0; pixel_y = 24 }, /obj/machinery/light_switch{ @@ -1283,8 +1262,7 @@ icon_state = "2-4" }, /obj/effect/floor_decal/borderfloor{ - dir = 1; - pixel_y = 0 + dir = 1 }, /obj/effect/floor_decal/corner/brown/border{ dir = 1 @@ -1331,8 +1309,7 @@ icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 + dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -1344,8 +1321,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 + dir = 9 }, /obj/structure/bed/chair{ dir = 1 @@ -1415,7 +1391,6 @@ icon_state = "0-8" }, /obj/machinery/power/apc{ - dir = 2; name = "south bump"; pixel_y = -32 }, @@ -1455,8 +1430,7 @@ /area/outpost/mining_main/break_room) "cS" = ( /obj/effect/floor_decal/borderfloor{ - dir = 1; - pixel_y = 0 + dir = 1 }, /obj/effect/floor_decal/corner/brown/border{ dir = 1 @@ -1536,8 +1510,7 @@ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5; - icon_state = "intact-scrubbers" + dir = 5 }, /turf/simulated/floor/tiled, /area/outpost/mining_main/secondary_gear_storage) @@ -1586,11 +1559,9 @@ "di" = ( /obj/machinery/access_button{ command = "cycle_exterior"; - dir = 2; frequency = 1379; master_tag = "mining_outpost_airlock"; name = "Mining Outpost Access Button"; - pixel_x = 0; pixel_y = 24; req_access = list(48,54) }, @@ -1616,7 +1587,6 @@ frequency = 1379; master_tag = "mining_outpost_airlock"; name = "Mining Outpost Access Button"; - pixel_x = 0; pixel_y = 24; req_access = list(48,54) }, @@ -1661,8 +1631,7 @@ icon_state = "1-2" }, /obj/machinery/light{ - dir = 8; - icon_state = "tube1" + dir = 8 }, /obj/effect/floor_decal/borderfloor{ dir = 8 @@ -1723,7 +1692,6 @@ "BD" = ( /obj/machinery/embedded_controller/radio/airlock/phoron{ id_tag = "mining_outpost_airlock"; - pixel_x = 0; pixel_y = -25 }, /obj/machinery/airlock_sensor/phoron{ @@ -1802,7 +1770,6 @@ /obj/machinery/power/apc{ dir = 1; name = "north bump"; - pixel_x = 0; pixel_y = 24 }, /obj/machinery/light_switch{ @@ -1842,7 +1809,6 @@ /obj/machinery/power/apc{ dir = 1; name = "north bump"; - pixel_x = 0; pixel_y = 24 }, /obj/structure/cable/green{ @@ -1859,15 +1825,13 @@ dir = 8 }, /obj/machinery/light{ - dir = 8; - icon_state = "tube1" + dir = 8 }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, /area/outpost/mining_main/airlock) "IA" = ( /obj/structure/closet/firecloset, /obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 2; frequency = 1379; id_tag = "mining_outpost_airlock_pump" }, @@ -1909,8 +1873,7 @@ /area/outpost/mining_main/dorms) "Nh" = ( /obj/structure/railing{ - dir = 4; - icon_state = "railing0" + dir = 4 }, /turf/simulated/floor/outdoors/grass/sif/virgo3b, /area/mine/explored) @@ -2006,8 +1969,7 @@ /area/outpost/mining_main/break_room) "Wy" = ( /obj/structure/railing{ - dir = 1; - icon_state = "railing0" + dir = 1 }, /turf/simulated/floor/outdoors/grass/sif/virgo3b, /area/mine/explored) @@ -2022,6 +1984,9 @@ /obj/machinery/alarm{ pixel_y = 22 }, +/obj/structure/sign/painting/library_secure{ + pixel_x = -30 + }, /turf/simulated/floor/wood, /area/outpost/mining_main/dorms) "Zn" = ( diff --git a/maps/tether/tether-07-solars.dmm b/maps/tether/tether-07-solars.dmm index db66542c9c..d71af22ca9 100644 --- a/maps/tether/tether-07-solars.dmm +++ b/maps/tether/tether-07-solars.dmm @@ -9,7 +9,6 @@ /obj/machinery/power/apc{ dir = 1; name = "north bump"; - pixel_x = 0; pixel_y = 28 }, /obj/structure/cable/green{ @@ -378,11 +377,9 @@ /area/tether/outpost/solars_outside) "aO" = ( /obj/machinery/power/smes/buildable{ - charge = 0; + RCon_tag = "Power - Solar Array"; cur_coils = 3; - output_attempt = 0; - outputting = 0; - RCon_tag = "Power - Solar Array" + output_attempt = 0 }, /obj/structure/cable/heavyduty, /turf/simulated/floor/virgo3b_indoors, @@ -418,7 +415,6 @@ /area/tether/outpost/solars_shed) "aS" = ( /obj/machinery/power/apc{ - dir = 2; name = "south bump"; pixel_y = -28 }, @@ -444,7 +440,6 @@ /area/mine/explored) "aV" = ( /obj/machinery/power/terminal{ - icon_state = "term"; dir = 1 }, /obj/structure/cable/yellow{ @@ -491,8 +486,7 @@ icon_state = "1-2" }, /obj/machinery/light/small{ - dir = 8; - pixel_x = 0 + dir = 8 }, /turf/simulated/floor/virgo3b, /area/tether/outpost/solars_outside) @@ -500,8 +494,7 @@ /obj/structure/sign/securearea{ desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; - name = "HIGH VOLTAGE"; - pixel_y = 0 + name = "HIGH VOLTAGE" }, /turf/simulated/wall, /area/tether/outpost/solars_shed) @@ -946,7 +939,6 @@ /area/rnd/outpost/mixing) "ce" = ( /obj/machinery/atmospherics/unary/freezer{ - dir = 2; icon_state = "freezer" }, /obj/effect/floor_decal/corner/purple/full{ @@ -1094,7 +1086,6 @@ /area/rnd/outpost/testing) "cy" = ( /obj/effect/floor_decal/industrial/warning/cee{ - icon_state = "warningcee"; dir = 1 }, /turf/simulated/floor/greengrid, @@ -1385,7 +1376,6 @@ /area/rnd/outpost/testing) "da" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 2; frequency = 1379; id_tag = "sci_outpost_pump" }, @@ -1393,7 +1383,6 @@ /area/rnd/outpost/airlock) "db" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 2; frequency = 1379; id_tag = "sci_outpost_pump" }, @@ -1416,7 +1405,6 @@ pixel_y = 2 }, /obj/effect/floor_decal/steeldecal/steel_decals_central5{ - icon_state = "steel_decals_central5"; dir = 4 }, /turf/simulated/floor/tiled, @@ -1483,7 +1471,6 @@ "dn" = ( /obj/machinery/atmospherics/trinary/mixer/m_mixer{ dir = 4; - initialize_directions = 7; name = "High Power Gas mixer"; power_rating = 15000 }, @@ -1508,8 +1495,7 @@ /obj/machinery/atmospherics/portables_connector, /obj/machinery/alarm{ dir = 8; - pixel_x = 22; - pixel_y = 0 + pixel_x = 22 }, /obj/effect/floor_decal/corner/purple{ dir = 6 @@ -1543,7 +1529,6 @@ "dv" = ( /obj/structure/dispenser, /obj/machinery/light{ - icon_state = "tube1"; dir = 4 }, /turf/simulated/floor/tiled, @@ -1587,15 +1572,13 @@ /area/rnd/outpost/eva) "dA" = ( /obj/machinery/vending/coffee{ - icon_state = "coffee"; dir = 8 }, /turf/simulated/floor/tiled, /area/rnd/outpost/breakroom) "dB" = ( /obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4; - icon_state = "map" + dir = 4 }, /obj/effect/floor_decal/steeldecal/steel_decals10{ dir = 5 @@ -1604,8 +1587,7 @@ /area/rnd/outpost/airlock) "dC" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5; - icon_state = "intact" + dir = 5 }, /obj/structure/cable/green{ d1 = 1; @@ -1706,7 +1688,6 @@ }, /obj/machinery/meter, /obj/machinery/light{ - icon_state = "tube1"; dir = 4 }, /obj/effect/floor_decal/corner/purple{ @@ -1717,7 +1698,6 @@ "dR" = ( /obj/machinery/firealarm{ dir = 1; - pixel_x = 0; pixel_y = -26 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -1762,8 +1742,8 @@ /area/rnd/outpost/testing) "dV" = ( /obj/machinery/vending/cola{ - icon_state = "Soda_Machine"; - dir = 8 + dir = 8; + icon_state = "Soda_Machine" }, /turf/simulated/floor/tiled, /area/rnd/outpost/breakroom) @@ -1900,7 +1880,6 @@ /area/rnd/outpost/mixing) "ej" = ( /obj/machinery/atmospherics/pipe/simple/visible/blue{ - icon_state = "intact"; dir = 9 }, /obj/structure/grille, @@ -1920,7 +1899,6 @@ /area/rnd/outpost/mixing) "el" = ( /obj/machinery/atmospherics/pipe/simple/visible{ - icon_state = "intact"; dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/black{ @@ -2068,7 +2046,6 @@ /obj/effect/floor_decal/steeldecal/steel_decals7, /obj/machinery/status_display{ layer = 4; - pixel_x = 0; pixel_y = 32 }, /turf/simulated/floor/tiled, @@ -2289,7 +2266,6 @@ }, /obj/structure/extinguisher_cabinet{ dir = 4; - icon_state = "extinguisher_closed"; pixel_x = -30 }, /turf/simulated/floor/tiled, @@ -2516,8 +2492,7 @@ }, /obj/machinery/alarm{ dir = 8; - pixel_x = 22; - pixel_y = 0 + pixel_x = 22 }, /obj/effect/floor_decal/borderfloor{ dir = 4 @@ -2538,8 +2513,7 @@ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10; - icon_state = "intact" + dir = 10 }, /turf/simulated/floor/tiled, /area/rnd/outpost) @@ -2547,8 +2521,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; @@ -2559,10 +2532,8 @@ /area/maintenance/substation/outpost) "ff" = ( /obj/machinery/power/smes/buildable{ - charge = 0; - output_attempt = 0; - outputting = 0; - RCon_tag = "Substation - Science Outpost" + RCon_tag = "Substation - Science Outpost"; + output_attempt = 0 }, /obj/structure/cable/green, /obj/structure/cable/green{ @@ -2572,7 +2543,6 @@ /area/maintenance/substation/outpost) "fg" = ( /obj/structure/cable/heavyduty{ - dir = 2; icon_state = "0-4" }, /obj/structure/cable{ @@ -2702,8 +2672,7 @@ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 + dir = 9 }, /turf/simulated/floor/tiled, /area/rnd/outpost) @@ -2755,7 +2724,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light{ - icon_state = "tube1"; dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden, @@ -2784,8 +2752,7 @@ }, /obj/machinery/alarm{ dir = 4; - pixel_x = -23; - pixel_y = 0 + pixel_x = -23 }, /turf/simulated/floor, /area/maintenance/substation/outpost) @@ -2794,8 +2761,7 @@ dir = 8 }, /obj/machinery/light/small{ - dir = 4; - pixel_y = 0 + dir = 4 }, /turf/simulated/floor, /area/maintenance/substation/outpost) @@ -2876,7 +2842,6 @@ dir = 4 }, /obj/item/device/radio/intercom{ - dir = 2; pixel_y = -24 }, /obj/effect/floor_decal/corner/purple{ @@ -2888,7 +2853,6 @@ /area/rnd/outpost/mixing) "fJ" = ( /obj/machinery/power/apc{ - dir = 2; name = "south bump"; pixel_y = -24 }, @@ -2934,7 +2898,6 @@ "fM" = ( /obj/machinery/firealarm{ dir = 1; - pixel_x = 0; pixel_y = -26 }, /obj/effect/floor_decal/borderfloor, @@ -3118,7 +3081,6 @@ }, /obj/machinery/newscaster{ layer = 3.3; - pixel_x = 0; pixel_y = -32 }, /turf/simulated/floor/tiled, @@ -3183,8 +3145,7 @@ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 + dir = 9 }, /turf/simulated/floor, /area/maintenance/substation/outpost) @@ -3217,8 +3178,7 @@ dir = 8 }, /obj/machinery/light/small{ - dir = 8; - pixel_x = 0 + dir = 8 }, /obj/effect/floor_decal/rust, /turf/simulated/floor, @@ -3348,7 +3308,6 @@ /area/mine/explored) "gv" = ( /obj/machinery/atmospherics/pipe/manifold/visible/red{ - icon_state = "map"; dir = 1 }, /obj/machinery/meter, @@ -3384,7 +3343,6 @@ /area/rnd/outpost/heating) "gy" = ( /obj/machinery/atmospherics/pipe/simple/visible/red{ - icon_state = "intact"; dir = 10 }, /obj/machinery/light{ @@ -3559,7 +3517,6 @@ icon_state = "map_vent_in"; id_tag = "burn_out"; initialize_directions = 4; - layer = 2.4; pump_direction = 0 }, /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ @@ -3604,7 +3561,6 @@ dir = 6 }, /obj/effect/floor_decal/industrial/warning/cee{ - icon_state = "warningcee"; dir = 1 }, /turf/simulated/floor/tiled/white, @@ -3752,8 +3708,7 @@ dir = 9 }, /obj/machinery/light{ - dir = 4; - icon_state = "tube1" + dir = 4 }, /turf/simulated/floor/tiled, /area/rnd/outpost) @@ -3887,7 +3842,6 @@ /area/rnd/outpost/heating) "hp" = ( /obj/machinery/atmospherics/pipe/manifold/visible/red{ - icon_state = "map"; dir = 1 }, /obj/effect/floor_decal/corner/purple, @@ -3896,7 +3850,6 @@ "hq" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/manifold/visible/red{ - icon_state = "map"; dir = 1 }, /turf/simulated/floor/tiled/white, @@ -3974,8 +3927,7 @@ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5; - icon_state = "intact" + dir = 5 }, /obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary{ scrub_id = "science_outpost" @@ -4029,8 +3981,7 @@ }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1; - icon_state = "map" + dir = 1 }, /turf/simulated/floor/tiled, /area/rnd/outpost) @@ -4240,7 +4191,6 @@ /area/rnd/outpost) "hO" = ( /obj/machinery/computer/area_atmos/tag{ - dir = 2; scrub_id = "science_outpost" }, /obj/effect/floor_decal/borderfloor{ @@ -4377,9 +4327,7 @@ /area/rnd/outpost/heating) "ie" = ( /obj/effect/floor_decal/borderfloor{ - dir = 1; - icon_state = "borderfloor"; - pixel_y = 0 + dir = 1 }, /obj/effect/floor_decal/corner/purple/border{ dir = 1 @@ -4401,8 +4349,6 @@ dir = 9 }, /obj/structure/extinguisher_cabinet{ - dir = 2; - icon_state = "extinguisher_closed"; pixel_x = 30 }, /obj/effect/floor_decal/corner/purple{ @@ -4436,7 +4382,6 @@ /area/rnd/outpost/atmos) "il" = ( /obj/machinery/atmospherics/pipe/simple/visible/red{ - icon_state = "intact"; dir = 10 }, /turf/simulated/floor, @@ -4516,14 +4461,12 @@ /area/rnd/outpost/heating) "iu" = ( /obj/machinery/atmospherics/pipe/manifold/visible/red{ - icon_state = "map"; dir = 1 }, /turf/simulated/floor/tiled/white, /area/rnd/outpost/heating) "iv" = ( /obj/machinery/atmospherics/pipe/simple/visible/red{ - icon_state = "intact"; dir = 5 }, /turf/simulated/floor/tiled/white, @@ -4548,7 +4491,6 @@ /obj/machinery/power/apc{ dir = 1; name = "north bump"; - pixel_x = 0; pixel_y = 28 }, /turf/simulated/floor/tiled/steel_dirty, @@ -4685,7 +4627,6 @@ }, /obj/machinery/firealarm{ dir = 1; - pixel_x = 0; pixel_y = -26 }, /obj/effect/floor_decal/corner/purple{ @@ -4880,8 +4821,7 @@ "jj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 + dir = 9 }, /turf/simulated/floor/tiled/steel_dirty, /area/rnd/outpost/storage) @@ -4929,9 +4869,7 @@ "jn" = ( /obj/machinery/camera/network/research_outpost, /obj/effect/floor_decal/borderfloor{ - dir = 1; - icon_state = "borderfloor"; - pixel_y = 0 + dir = 1 }, /obj/effect/floor_decal/corner/purple/border{ dir = 1 @@ -4999,18 +4937,19 @@ /turf/simulated/floor/tiled, /area/rnd/outpost/xenoarch_storage) "ju" = ( -/obj/structure/cable/heavyduty{ - icon_state = "2-8" - }, -/obj/structure/railing{ +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/purple/border, +/obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 1 }, -/obj/structure/railing{ - icon_state = "railing0"; - dir = 4 +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 }, -/turf/simulated/floor/virgo3b, -/area/mine/explored) +/obj/structure/sign/painting/library_secure{ + pixel_y = -30 + }, +/turf/simulated/floor/tiled, +/area/rnd/outpost) "jv" = ( /obj/structure/window/reinforced{ dir = 1 @@ -5311,7 +5250,6 @@ "kb" = ( /obj/effect/floor_decal/industrial/warning/corner, /obj/machinery/atmospherics/pipe/simple/visible{ - icon_state = "intact"; dir = 6 }, /turf/simulated/floor, @@ -5339,8 +5277,7 @@ dir = 8 }, /obj/machinery/light{ - dir = 8; - icon_state = "tube1" + dir = 8 }, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 5 @@ -5443,7 +5380,6 @@ /obj/machinery/power/apc{ dir = 1; name = "north bump"; - pixel_x = 0; pixel_y = 28 }, /obj/machinery/atmospherics/pipe/simple/visible{ @@ -5464,8 +5400,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6; - icon_state = "intact" + dir = 6 }, /turf/simulated/floor/tiled, /area/rnd/outpost) @@ -5521,8 +5456,7 @@ }, /obj/machinery/alarm{ dir = 8; - pixel_x = 25; - pixel_y = 0 + pixel_x = 25 }, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 9 @@ -5543,7 +5477,6 @@ /area/rnd/outpost/anomaly_lab/airlock) "ky" = ( /obj/machinery/light/small{ - icon_state = "bulb1"; dir = 1 }, /obj/machinery/button/remote/blast_door{ @@ -5556,8 +5489,7 @@ icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6; - icon_state = "intact" + dir = 6 }, /turf/simulated/floor/tiled, /area/rnd/outpost/anomaly_lab/airlock) @@ -5618,8 +5550,7 @@ /area/rnd/outpost) "kC" = ( /obj/machinery/light/small{ - dir = 8; - pixel_x = 0 + dir = 8 }, /turf/simulated/floor, /area/rnd/outpost/anomaly_lab/storage) @@ -5698,17 +5629,14 @@ /area/rnd/outpost/anomaly_lab) "kK" = ( /obj/machinery/light{ - dir = 8; - icon_state = "tube1" + dir = 8 }, /obj/structure/anomaly_container, /turf/simulated/floor/tiled, /area/rnd/outpost/xenoarch_storage) "kL" = ( /obj/effect/floor_decal/borderfloor{ - dir = 1; - icon_state = "borderfloor"; - pixel_y = 0 + dir = 1 }, /obj/effect/floor_decal/corner/purple/border{ dir = 1 @@ -5778,9 +5706,7 @@ /area/rnd/outpost/xenoarch_storage) "kQ" = ( /obj/effect/floor_decal/borderfloor{ - dir = 1; - icon_state = "borderfloor"; - pixel_y = 0 + dir = 1 }, /obj/effect/floor_decal/corner/purple/border{ dir = 1 @@ -5800,9 +5726,7 @@ /area/rnd/outpost) "kS" = ( /obj/effect/floor_decal/borderfloor{ - dir = 1; - icon_state = "borderfloor"; - pixel_y = 0 + dir = 1 }, /obj/effect/floor_decal/corner/purple/border{ dir = 1 @@ -5821,16 +5745,13 @@ /area/rnd/outpost) "kT" = ( /obj/effect/floor_decal/borderfloor{ - dir = 1; - icon_state = "borderfloor"; - pixel_y = 0 + dir = 1 }, /obj/effect/floor_decal/corner/purple/border{ dir = 1 }, /obj/structure/extinguisher_cabinet{ dir = 1; - icon_state = "extinguisher_closed"; pixel_y = 32 }, /obj/effect/floor_decal/steeldecal/steel_decals7{ @@ -5846,8 +5767,7 @@ /obj/machinery/access_button{ frequency = 1452; master_tag = "anomaly_chamber_airlock"; - pixel_x = 25; - pixel_y = 0 + pixel_x = 25 }, /turf/simulated/floor/tiled/dark, /area/rnd/outpost/anomaly_lab/testing) @@ -5870,9 +5790,7 @@ /area/rnd/outpost/anomaly_lab) "kX" = ( /obj/effect/floor_decal/borderfloor{ - dir = 1; - icon_state = "borderfloor"; - pixel_y = 0 + dir = 1 }, /obj/effect/floor_decal/corner/purple/border{ dir = 1 @@ -6169,7 +6087,6 @@ icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -6182,8 +6099,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9; - icon_state = "intact" + dir = 9 }, /turf/simulated/floor/tiled, /area/rnd/outpost) @@ -6195,13 +6111,11 @@ /obj/machinery/power/apc{ dir = 1; name = "north bump"; - pixel_x = 0; pixel_y = 28 }, /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 8; frequency = 1452; - icon_state = "map_vent"; id_tag = "anomaly_airlock_pump"; name = "Anomaly Airlock Pump" }, @@ -6264,7 +6178,6 @@ /area/rnd/outpost) "ly" = ( /obj/effect/floor_decal/industrial/warning{ - icon_state = "warning"; dir = 8 }, /turf/simulated/floor/tiled/dark, @@ -6274,9 +6187,7 @@ alarm_id = "anomaly_testing"; breach_detection = 0; dir = 8; - frequency = 1439; pixel_x = 22; - pixel_y = 0; report_danger_level = 0 }, /turf/simulated/floor/tiled/dark, @@ -6425,8 +6336,7 @@ "lL" = ( /obj/machinery/alarm{ dir = 8; - pixel_x = 22; - pixel_y = 0 + pixel_x = 22 }, /turf/simulated/floor, /area/rnd/outpost/anomaly_lab/storage) @@ -6435,12 +6345,10 @@ dir = 4 }, /obj/machinery/light{ - dir = 8; - icon_state = "tube1" + dir = 8 }, /obj/structure/extinguisher_cabinet{ dir = 4; - icon_state = "extinguisher_closed"; pixel_x = -30 }, /turf/simulated/floor/tiled, @@ -6459,7 +6367,6 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; dir = 4 }, /obj/structure/cable/green{ @@ -6484,8 +6391,7 @@ /obj/item/weapon/pickaxe, /obj/machinery/alarm{ dir = 8; - pixel_x = 22; - pixel_y = 0 + pixel_x = 22 }, /turf/simulated/floor/tiled, /area/rnd/outpost/xenoarch_storage) @@ -6535,8 +6441,7 @@ /area/rnd/outpost) "lT" = ( /obj/machinery/atmospherics/unary/vent_pump{ - dir = 4; - use_power = 0 + dir = 4 }, /turf/simulated/floor/tiled/dark, /area/rnd/outpost/anomaly_lab/testing) @@ -6581,15 +6486,12 @@ "lY" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/light{ - dir = 4; - icon_state = "tube1"; - pixel_x = 0 + dir = 4 }, /turf/simulated/floor/tiled, /area/rnd/outpost/anomaly_lab) "lZ" = ( /obj/machinery/power/apc{ - cell_type = /obj/item/weapon/cell/apc; dir = 8; name = "west bump"; pixel_x = -28 @@ -6666,7 +6568,6 @@ /obj/item/weapon/storage/belt/archaeology, /obj/machinery/firealarm{ dir = 1; - pixel_x = 0; pixel_y = -26 }, /obj/item/weapon/melee/umbrella/random, @@ -6696,7 +6597,6 @@ dir = 4 }, /obj/machinery/door/firedoor/glass/hidden{ - icon_state = "door_open"; dir = 2 }, /turf/simulated/floor/tiled, @@ -6800,7 +6700,6 @@ /area/rnd/outpost/anomaly_lab) "ms" = ( /obj/machinery/door/firedoor/glass/hidden{ - icon_state = "door_open"; dir = 1 }, /turf/simulated/floor/tiled, @@ -6820,7 +6719,6 @@ icon_state = "1-2" }, /obj/structure/railing{ - icon_state = "railing0"; dir = 4 }, /turf/simulated/floor/virgo3b, @@ -6835,7 +6733,6 @@ /obj/effect/floor_decal/industrial/warning, /obj/structure/extinguisher_cabinet{ dir = 4; - icon_state = "extinguisher_closed"; pixel_x = -30 }, /turf/simulated/floor/tiled, @@ -6900,8 +6797,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5; - icon_state = "intact" + dir = 5 }, /turf/simulated/floor/tiled, /area/rnd/outpost/anomaly_lab) @@ -7029,7 +6925,6 @@ /obj/machinery/power/apc{ dir = 1; name = "north bump"; - pixel_x = 0; pixel_y = 28 }, /obj/structure/cable/green{ @@ -7086,7 +6981,6 @@ }, /obj/structure/extinguisher_cabinet{ dir = 1; - icon_state = "extinguisher_closed"; pixel_y = -32 }, /turf/simulated/floor/tiled, @@ -7221,7 +7115,6 @@ "nk" = ( /obj/machinery/firealarm{ dir = 1; - pixel_x = 0; pixel_y = -26 }, /turf/simulated/floor/tiled, @@ -7246,7 +7139,6 @@ dir = 1 }, /obj/item/device/radio/intercom{ - dir = 2; pixel_y = -24 }, /turf/simulated/floor, @@ -7304,8 +7196,7 @@ }, /obj/machinery/alarm{ dir = 4; - pixel_x = -23; - pixel_y = 0 + pixel_x = -23 }, /obj/machinery/light{ dir = 8 @@ -7345,7 +7236,6 @@ dir = 4 }, /obj/machinery/door/firedoor/glass/hidden{ - icon_state = "door_open"; dir = 1 }, /turf/simulated/floor/tiled, @@ -7386,7 +7276,6 @@ /area/rnd/outpost/anomaly_lab) "ny" = ( /obj/item/device/radio/intercom{ - dir = 2; pixel_y = -24 }, /turf/simulated/floor/tiled, @@ -7397,7 +7286,6 @@ /obj/item/weapon/pen, /obj/machinery/light, /obj/item/device/radio/intercom{ - dir = 2; pixel_y = -24 }, /turf/simulated/floor/tiled, @@ -7423,7 +7311,6 @@ icon_state = "1-8" }, /obj/structure/railing{ - icon_state = "railing0"; dir = 4 }, /obj/structure/railing, @@ -7455,7 +7342,6 @@ /obj/machinery/artifact_scanpad, /obj/structure/extinguisher_cabinet{ dir = 1; - icon_state = "extinguisher_closed"; pixel_y = -32 }, /turf/simulated/floor/tiled, @@ -7500,7 +7386,6 @@ }, /obj/structure/cable/green{ d2 = 8; - dir = 2; icon_state = "0-8" }, /turf/simulated/floor/tiled/dark, @@ -7574,7 +7459,6 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor/glass/hidden{ - icon_state = "door_open"; dir = 1 }, /turf/simulated/floor/tiled, @@ -7730,8 +7614,7 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5; - icon_state = "intact" + dir = 5 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, @@ -7754,8 +7637,7 @@ "ol" = ( /obj/machinery/alarm{ dir = 4; - pixel_x = -23; - pixel_y = 0 + pixel_x = -23 }, /obj/machinery/access_button{ frequency = 1452; @@ -7786,7 +7668,6 @@ name = "Science Outpost Personal Quarters" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "intact-scrubbers"; dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -7797,12 +7678,10 @@ /area/rnd/outpost/breakroom) "op" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "intact-scrubbers"; dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 + dir = 9 }, /obj/machinery/light, /turf/simulated/floor/wood, @@ -7886,7 +7765,6 @@ /area/rnd/outpost/breakroom) "oA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "intact-scrubbers"; dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -7904,8 +7782,7 @@ /area/rnd/outpost/breakroom) "oC" = ( /obj/machinery/vending/fitness{ - dir = 8; - icon_state = "fitness" + dir = 8 }, /turf/simulated/floor/tiled, /area/rnd/outpost/breakroom) @@ -7976,7 +7853,6 @@ /area/rnd/outpost/breakroom) "oO" = ( /obj/machinery/power/apc{ - dir = 2; name = "south bump"; pixel_y = -24 }, @@ -8003,7 +7879,6 @@ "oR" = ( /obj/structure/extinguisher_cabinet{ dir = 1; - icon_state = "extinguisher_closed"; pixel_y = -32 }, /turf/simulated/floor/tiled, @@ -8077,11 +7952,9 @@ "pb" = ( /obj/machinery/alarm{ dir = 8; - pixel_x = 22; - pixel_y = 0 + pixel_x = 22 }, /obj/machinery/light{ - icon_state = "tube1"; dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -8097,7 +7970,6 @@ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "intact-supply"; dir = 5 }, /turf/simulated/floor/tiled, @@ -8120,6 +7992,24 @@ }, /turf/simulated/floor/outdoors/grass/sif/virgo3b, /area/mine/explored) +"BS" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/structure/sign/painting/library_secure{ + pixel_x = -30 + }, +/turf/simulated/floor/tiled, +/area/rnd/outpost) "SO" = ( /obj/effect/shuttle_landmark{ base_area = /area/mine/explored; @@ -23865,7 +23755,7 @@ fv eY ft ft -fK +ju eu gx gR @@ -24441,7 +24331,7 @@ hr hr hO ke -ku +BS kA lg lb @@ -25557,7 +25447,7 @@ ab ab ab ab -ju +bt mv mv mv diff --git a/maps/tether/tether_things.dm b/maps/tether/tether_things.dm index 283ec4e9f6..6ae40b8ae9 100644 --- a/maps/tether/tether_things.dm +++ b/maps/tether/tether_things.dm @@ -170,7 +170,7 @@ // Walking on maglev tracks will shock you! Horray! /turf/simulated/floor/maglev/Entered(var/atom/movable/AM, var/atom/old_loc) - if(isliving(AM) && prob(50)) + if(isliving(AM) && !(AM.is_incorporeal()) && prob(50)) track_zap(AM) /turf/simulated/floor/maglev/attack_hand(var/mob/user) if(prob(75)) diff --git a/rust_g.dll b/rust_g.dll index 5e60ff2cd4..ebb6c9fd19 100644 Binary files a/rust_g.dll and b/rust_g.dll differ diff --git a/tgui/packages/tgui/components/Section.tsx b/tgui/packages/tgui/components/Section.tsx index 21048660f9..43317fd43b 100644 --- a/tgui/packages/tgui/components/Section.tsx +++ b/tgui/packages/tgui/components/Section.tsx @@ -39,6 +39,9 @@ export class Section extends Component { if (this.scrollable) { addScrollableNode(this.scrollableRef.current); } + if (this.props.autoFocus) { + setTimeout(() => this.scrollableRef.current.focus(), 1); + } } componentWillUnmount() { diff --git a/tgui/packages/tgui/components/TextArea.js b/tgui/packages/tgui/components/TextArea.js index 00e1605a3b..fb6ee17b12 100644 --- a/tgui/packages/tgui/components/TextArea.js +++ b/tgui/packages/tgui/components/TextArea.js @@ -104,6 +104,9 @@ export class TextArea extends Component { if (input) { input.value = toInputValue(nextValue); } + if (this.props.autoFocus) { + setTimeout(() => input.focus(), 1); + } } componentDidUpdate(prevProps, prevState) { diff --git a/tgui/packages/tgui/index.js b/tgui/packages/tgui/index.js index b2020e8c53..742032ab57 100644 --- a/tgui/packages/tgui/index.js +++ b/tgui/packages/tgui/index.js @@ -17,6 +17,7 @@ import './styles/themes/pda-retro.scss'; import './styles/themes/retro.scss'; import './styles/themes/syndicate.scss'; import './styles/themes/wizard.scss'; +import './styles/themes/abstract.scss'; import { perf } from 'common/perf'; import { setupHotReloading } from 'tgui-dev-server/link/client'; diff --git a/tgui/packages/tgui/interfaces/AlertModal.js b/tgui/packages/tgui/interfaces/AlertModal.js index b929423495..c660c89786 100644 --- a/tgui/packages/tgui/interfaces/AlertModal.js +++ b/tgui/packages/tgui/interfaces/AlertModal.js @@ -70,6 +70,7 @@ export class AlertModal extends Component { return ( 0}> @@ -92,9 +93,9 @@ export class AlertModal extends Component { - + {buttons.map((button, buttonIndex) => ( - +
this.clickwrapper(e)}> + Canvas failed to render. + + ); + } +} + +const getImageSize = value => { + const width = value.length; + const height = width !== 0 ? value[0].length : 0; + return [width, height]; +}; + +export const Canvas = (props, context) => { + const { act, data } = useBackend(context); + const dotsize = PX_PER_UNIT; + const [width, height] = getImageSize(data.grid); + return ( + + + + act("paint", { x, y })} /> + + {!data.finalized && ( + act("finalize")} + content="Finalize" /> + )} +  {data.name} + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/InputModal.js b/tgui/packages/tgui/interfaces/InputModal.js new file mode 100644 index 0000000000..6366e775a0 --- /dev/null +++ b/tgui/packages/tgui/interfaces/InputModal.js @@ -0,0 +1,117 @@ +/** + * @file + * @copyright 2021 Leshana + * @license MIT + */ + +import { clamp01 } from 'common/math'; +import { useBackend, useLocalState } from '../backend'; +import { Box, Button, Section, Input, Stack, TextArea } from '../components'; +import { KEY_ESCAPE } from 'common/keycodes'; +import { Window } from '../layouts'; +import { createLogger } from '../logging'; + +const logger = createLogger('inputmodal'); + +export const InputModal = (props, context) => { + const { act, data } = useBackend(context); + const { title, message, initial, input_type, timeout } = data; + + // Current Input Value + const [curValue, setCurValue] = useLocalState(context, 'curValue', initial); + + const handleKeyDown = e => { + if (e.keyCode === KEY_ESCAPE) { + e.preventDefault(); + act("cancel"); + return; + } + }; + + let initialHeight, initialWidth; + let modalBody; + switch (input_type) { + case 'text': + case 'num': + initialWidth = 325; + initialHeight = Math.max(150, message.length); + modalBody = ( + { + setCurValue(val); + }} + onEnter={(_e, val) => { + act('choose', { choice: val }); + }} + /> + ); + break; + case 'message': + initialWidth = 450; + initialHeight = 350; + modalBody = ( +