diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index 6f6f4f9f0a..1531a67d5b 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -43,6 +43,18 @@ if (isarea(A)) return A + +/** Checks if any living humans are in a given area. */ +/proc/area_is_occupied(var/area/myarea) + // Testing suggests looping over human_mob_list is quicker than looping over area contents + for(var/mob/living/carbon/human/H in human_mob_list) + if(H.stat >= DEAD) //Conditions for exclusion here, like if disconnected people start blocking it. + continue + var/area/A = get_area(H) + if(A == myarea) //The loc of a turf is the area it is in. + return 1 + return 0 + /proc/in_range(source, user) if(get_dist(source, user) <= 1) return 1 diff --git a/code/datums/supplypacks/misc_vr.dm b/code/datums/supplypacks/misc_vr.dm new file mode 100644 index 0000000000..144df5163b --- /dev/null +++ b/code/datums/supplypacks/misc_vr.dm @@ -0,0 +1,14 @@ + +/datum/supply_packs/misc/beltminer + name = "Belt-miner gear crate" + contains = list( + /obj/item/weapon/gun/energy/particle = 2, + /obj/item/weapon/cell/device/weapon = 2, + /obj/item/weapon/storage/firstaid/regular = 1, + /obj/item/device/gps = 2, + /obj/item/weapon/storage/box/traumainjectors = 1 + ) + cost = 50 + containertype = /obj/structure/closet/crate/secure/gear + containername = "Belt-miner gear crate" + access = access_mining \ No newline at end of file diff --git a/code/game/machinery/doors/door_vr.dm b/code/game/machinery/doors/door_vr.dm index e38dcd851d..1e0dd1d470 100644 --- a/code/game/machinery/doors/door_vr.dm +++ b/code/game/machinery/doors/door_vr.dm @@ -39,10 +39,8 @@ var/obj/item/stack/stack = I var/transfer var/amount_needed = 2 - if (stack.amount >= amount_needed) - if(stat & BROKEN) - user << "It looks like \the [src] is pretty busted. There's not much point reinforcing it." - return 1 + if(stat & BROKEN) + user << "It looks like \the [src] is pretty busted." if (reinforcing) transfer = stack.transfer_to(reinforcing, amount_needed - reinforcing.amount) if (!transfer) @@ -57,13 +55,50 @@ if (transfer) user << "You fit [transfer] [stack.singular_name]\s to \the [src]." return 1 - return 0 + + if(istype(I, /obj/item/stack/material) && I.get_material_name() == src.get_material_name()) + if(stat & BROKEN) + if(health >= maxhealth && destroy_hits >= 10) + user << "The [src] is about as shored up as it's going to get." + return 1 + if(!density) + user << "\The [src] must be closed before you can repair it." + return 1 + + //figure out how much metal we need + var/amount_needed = (maxhealth - health) / DOOR_REPAIR_AMOUNT + if (destroy_hits < 10) + amount_needed += (20*(10 - destroy_hits) / DOOR_REPAIR_AMOUNT) + amount_needed = (round(amount_needed) == amount_needed)? amount_needed : round(amount_needed) + 1 //Why does BYOND not have a ceiling proc? + + var/obj/item/stack/stack = I + var/transfer + if (repairing) + transfer = stack.transfer_to(repairing, amount_needed - repairing.amount) + if (!transfer) + user << "You must weld or remove \the [repairing] from \the [src] before you can add anything else." + else + repairing = stack.split(amount_needed) + if (repairing) + repairing.loc = src + transfer = repairing.amount + + if (transfer) + user << "\The [src] is completely broken inside, but you manage to fit [transfer] [stack.singular_name]\s to shore it up." + + return 1 + + return 0 + if(reinforcing && istype(I, /obj/item/weapon/weldingtool)) + var/amount_needed = 2 if(!density) user << "\The [src] must be closed before you can repair it." return 1 - + if (reinforcing.amount < amount_needed) + user << "You need [amount_needed] [reinforcing.singular_name]\s to reinforce \the [src]." + return 1 var/obj/item/weapon/weldingtool/welder = I if(welder.remove_fuel(0,user)) user << "You start to weld \the [reinforcing] into place." @@ -76,6 +111,28 @@ reinforcing = null return 1 + if(repairing && istype(I, /obj/item/weapon/weldingtool) && (stat & BROKEN)) + if(!density) + user << "\The [src] must be closed before you can shore it up." + return 1 + + var/obj/item/weapon/weldingtool/welder = I + if(welder.remove_fuel(0,user)) + user << "You start to weld \the [repairing] into place." + playsound(src, 'sound/items/Welder.ogg', 100, 1) + if(do_after(user, 5 * repairing.amount) && welder && welder.isOn()) + user << "You finish shoring up \the [src]. It'll hold for at least a little while." + var/damagerepaired = repairing.amount*DOOR_REPAIR_AMOUNT + if (destroy_hits < 10) + var/severedamage = 10 - destroy_hits + destroy_hits = between(destroy_hits, destroy_hits + (damagerepaired)/20, 10) + damagerepaired -= 20 * severedamage + health = between(health, health + damagerepaired, maxhealth) + update_icon() + qdel(repairing) + repairing = null + return 1 + if(reinforcing && istype(I, /obj/item/weapon/crowbar)) user << "You remove \the [reinforcing]." playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) diff --git a/code/game/machinery/vending_vr.dm b/code/game/machinery/vending_vr.dm index 3ab4133bfb..d3d7dd1163 100644 --- a/code/game/machinery/vending_vr.dm +++ b/code/game/machinery/vending_vr.dm @@ -19,7 +19,7 @@ ..() /obj/machinery/vending/medical/New() - products += list(/obj/item/weapon/storage/box/khcrystal = 4,/obj/item/weapon/storage/box/backup_kit = 2, + products += list(/obj/item/weapon/storage/box/khcrystal = 4,/obj/item/weapon/backup_implanter = 3, /obj/item/clothing/glasses/omnihud/med = 2, /obj/item/device/glasses_kit = 1) ..() diff --git a/code/modules/events/atmos_leak.dm b/code/modules/events/atmos_leak.dm new file mode 100644 index 0000000000..46c28b7adf --- /dev/null +++ b/code/modules/events/atmos_leak.dm @@ -0,0 +1,90 @@ +// +// This event causes a gas leak of phoron, sleeping_agent, or carbon_dioxide in a random unoccupied area. +// One wonders, where did the gas come from? Who knows! Its SPACE! But if you want something a touch +// more "explainable" then check out the canister_leak event instead. +// + +/datum/event/atmos_leak + startWhen = 5 // Nobody will actually be in the room, but still give a bit of warning. + var/area/target_area // Chosen target area + var/area/target_turf // Chosen target turf in target_area + var/gas_type // Chosen gas to release + // Exclude these types and sub-types from targeting eligibilty + var/list/area/excluded = list( + /area/shuttle, + /area/crew_quarters, + /area/holodeck, + /area/engineering/engine_room + ) + +// Decide which area will be targeted! +/datum/event/atmos_leak/setup() + var/gas_choices = list("carbon_dioxide", "sleeping_agent") // Annoying + if(severity >= EVENT_LEVEL_MODERATE) + gas_choices += "phoron" // Dangerous + if(severity >= EVENT_LEVEL_MAJOR) + gas_choices += "volatile_fuel" // Dangerous and no default atmos setup! + gas_type = pick(gas_choices) + + // Assemble areas that all exists (See DM reference if you are confused about loop labels) + var/list/area/grand_list_of_areas = list() + looping_station_areas: + for(var/parentpath in global.the_station_areas) + // Check its not excluded + for(var/excluded_path in excluded) + if(ispath(parentpath, excluded_path)) + continue looping_station_areas + // Otherwise add it and all subtypes that exist on the map to our grand list + for(var/areapath in typesof(parentpath)) + var/area/A = locate(areapath) // Check if it actually exists + if(istype(A) && A.z in using_map.player_levels) + grand_list_of_areas += A + + // Okay, now lets try and pick a target! Lets try 10 times, otherwise give up + for(var/i in 1 to 10) + var/area/A = pick(grand_list_of_areas) + if(is_area_occupied(A)) + log_debug("atmos_leak event: Rejected [A] because it is occupied.") + continue + // A good area, great! Lets try and pick a turf + var/list/turfs = list() + for(var/turf/simulated/floor/F in A) + if(turf_clear(F)) + turfs += F + if(turfs.len == 0) + log_debug("atmos_leak event: Rejected [A] because it has no clear turfs.") + continue + target_area = A + target_turf = pick(turfs) + + // If we can't find a good target, give up + if(!target_area) + log_debug("atmos_leak event: Giving up after too many failures to pick target area") + kill() + return + +/** Checks if any living humans are in a given area! */ +/datum/event/atmos_leak/proc/is_area_occupied(var/area/myarea) + // Testing suggests looping over human_mob_list is quicker than looping over area contents + for(var/mob/living/carbon/human/H in human_mob_list) + if(H.stat >= DEAD) //Conditions for exclusion here, like if disconnected people start blocking it. + continue + var/area/A = get_area(H) + if(A == myarea) //The loc of a turf is the area it is in. + return 1 + return 0 + +/datum/event/atmos_leak/announce() + command_announcement.Announce("Warning, hazardous [gas_data.name[gas_type]] gas leak detected in \the [target_area], evacuate the area and contain the damage!", "Hazard Alert") + +/datum/event/atmos_leak/start() + // Okay, time to actually put the gas in the room! + // TODO - Would be nice to break a waste pipe perhaps? + // TODO - Maybe having it released from a single point and thus causing airflow to blow stuff around + + // Fow now just add a bunch of it to the air + var/datum/gas_mixture/air_contents = new + air_contents.temperature = T20C + ((severity - 1) * rand(-50, 50)) + air_contents.gas[gas_type] = 10 * MOLES_CELLSTANDARD + target_turf.assume_air(air_contents) + playsound(target_turf, 'sound/effects/smoke.ogg', 50, 1) diff --git a/code/modules/events/canister_leak.dm b/code/modules/events/canister_leak.dm new file mode 100644 index 0000000000..956d8a0940 --- /dev/null +++ b/code/modules/events/canister_leak.dm @@ -0,0 +1,30 @@ +// +// This event chooses a random canister on player levels and breaks it, releasing its contents! +// On severity EVENT_LEVEL_MUNDANE or below it checks to make sure nobody is in the area, otherwise... good luck. +// + +/datum/event/canister_leak/start() + // List of all non-destroyed canisters on station levels + var/list/all_canisters = list() + for(var/obj/machinery/portable_atmospherics/canister/C in machines) + if(!C.destroyed && (C.z in using_map.station_levels)) + all_canisters += C + + for(var/i in 1 to 10) + var/obj/machinery/portable_atmospherics/canister/C = pick(all_canisters) + if(severity <= EVENT_LEVEL_MUNDANE && area_is_occupied(get_area(C))) + log_debug("canister_leak event: Rejecting canister [C] ([C.x],[C.y],[C.z]) because area is occupied") + continue + // Okay lets break it + break_canister(C) + return + + // If we got to here we failed to find it + log_debug("canister_leak event: Giving up after too many failures to pick target canister") + kill() + return + +/datum/event/canister_leak/proc/break_canister(var/obj/machinery/portable_atmospherics/canister/C) + log_debug("canister_leak event: Canister [C] ([C.x],[C.y],[C.z]) destroyed.") + C.health = 0 + C.healthcheck() diff --git a/code/modules/gamemaster/actions/canister_leak.dm b/code/modules/gamemaster/actions/canister_leak.dm new file mode 100644 index 0000000000..ed55c0cded --- /dev/null +++ b/code/modules/gamemaster/actions/canister_leak.dm @@ -0,0 +1,24 @@ +// +// This event chooses a random canister on player levels and breaks it, releasing its contents! +// + +/datum/gm_action/canister_leak + name = "Canister Leak" + departments = list(ROLE_ENGINEERING) + chaotic = 20 + +/datum/gm_action/canister_leak/get_weight() + return metric.count_people_in_department(ROLE_ENGINEERING) * 30 + +/datum/gm_action/canister_leak/start() + ..() + // List of all non-destroyed canisters on station levels + var/list/all_canisters = list() + for(var/obj/machinery/portable_atmospherics/canister/C in machines) + if(!C.destroyed && (C.z in using_map.station_levels)) + all_canisters += C + var/obj/machinery/portable_atmospherics/canister/C = pick(all_canisters) + log_debug("canister_leak event: Canister [C] ([C.x],[C.y],[C.z]) destroyed.") + C.health = 0 + C.healthcheck() + return diff --git a/code/modules/projectiles/guns/energy/particle.dm b/code/modules/projectiles/guns/energy/particle.dm index ab20585b49..dc5a6669c7 100644 --- a/code/modules/projectiles/guns/energy/particle.dm +++ b/code/modules/projectiles/guns/energy/particle.dm @@ -1,5 +1,5 @@ /obj/item/weapon/gun/energy/particle //base gun, similar stats to an egun - name = "Antiparticle projector pistol" + name = "Anti-particle projector pistol" icon = 'icons/obj/gun_vr.dmi' icon_state = "ppistol" item_state = "ppistol_item" @@ -18,27 +18,28 @@ slot_flags = SLOT_BELT w_class = ITEMSIZE_NORMAL projectile_type = /obj/item/projectile/bullet/particle - origin_tech = null + origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2, TECH_MATERIAL = 2) fire_delay = 10 - charge_cost = 240 //same cost as lasers + charge_cost = 200 //slightly more shots than lasers var/safetycatch = 0 //if 1, won't let you fire in pressurised environment, rather than malfunctioning var/obj/item/pressurelock/attached_safety /obj/item/weapon/gun/energy/particle/advanced //particle equivalent of AEG - name = "Advanced antiparticle rifle" + name = "Advanced anti-particle rifle" icon_state = "particle" item_state = "particle_item" desc = "An antiparticle projector gun with an enhanced power-generation unit." slot_flags = SLOT_BELT force = 8 //looks heavier than a pistol w_class = ITEMSIZE_LARGE //bigger than a pistol, too. + origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 5, TECH_POWER = 3, TECH_MAGNET = 3) fire_delay = 6 //This one's not a handgun, it should have the same fire delay as everything else self_recharge = 1 modifystate = null battery_lock = 1 - recharge_time = 15 // every 15 ticks, recharge 2 shots. Rather slower than AEG. - charge_delay = 20 //Starts recharging faster after firing than an AEG, but much slower recharge rate. Balances out for a full charge. + recharge_time = 6 // every 6 ticks, recharge 2 shots. Slightly slower than AEG. + charge_delay = 10 //Starts recharging faster after firing than an AEG though. /obj/item/weapon/gun/energy/particle/cannon //particle version of laser cannon name = "Anti-particle cannon" @@ -47,17 +48,18 @@ item_state = "heavyparticle_item" fire_sound = 'sound/weapons/lasercannonfire.ogg' slot_flags = SLOT_BACK + origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 5, TECH_POWER = 4, TECH_MAGNET = 4) projectile_type = /obj/item/projectile/bullet/particle/heavy battery_lock = 1 - fire_delay = 20 + fire_delay = 15 // fires faster than a laser cannon. c'mon, it's an awesome-but-impractical endgame gun. w_class = ITEMSIZE_HUGE // So it can't fit in a backpack. force = 10 - one_handed_penalty = 6 // The thing's heavy and huge. + one_handed_penalty = 8 // The thing's heavy and huge. accuracy = 3 - charge_cost = 480 // 5 shots + charge_cost = 400 // 6 shots self_recharge = 1 - charge_delay = 20 //won't start charging until it's ready to fire again - recharge_time = 20 //100 ticks after that to refill the whole thing. + charge_delay = 15 //won't start charging until it's ready to fire again + recharge_time = 8 //40 ticks after that to refill the whole thing. //special behaviours for particle guns below @@ -161,7 +163,7 @@ icon_state = "pressurelock" desc = "A safety interlock that can be installed in an antiparticle projector. It prevents the weapon from discharging in pressurised environments." w_class = ITEMSIZE_TINY - + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) // projectiles below diff --git a/code/modules/reagents/reagent_containers/hypospray_vr.dm b/code/modules/reagents/reagent_containers/hypospray_vr.dm index d306c97d33..bdf73bb0c2 100644 --- a/code/modules/reagents/reagent_containers/hypospray_vr.dm +++ b/code/modules/reagents/reagent_containers/hypospray_vr.dm @@ -48,3 +48,29 @@ user << "\The [src] already has a vial." else ..() + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/beltminer + name = "Emergency trauma injector" + desc = "A rapid injector for emergency treatment of injuries. The warning label advises that it is not a substitute for proper medical treatment." + icon_state = "autoinjector" + item_state = "autoinjector" + amount_per_transfer_from_this = 10 + volume = 10 + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/beltminer/New() + ..() + reagents.add_reagent("bicaridine", 5) + reagents.add_reagent("tricordrazine", 3) + reagents.add_reagent("tramadol", 2) + update_icon() + return + +/obj/item/weapon/storage/box/traumainjectors + name = "box of emergency trauma injectors" + desc = "Contains emergency trauma autoinjectors." + icon_state = "syringe" + +/obj/item/weapon/storage/box/traumainjectors/New() + ..() + for (var/i = 1 to 7) + new /obj/item/weapon/reagent_containers/hypospray/autoinjector/beltminer(src) diff --git a/code/modules/research/designs_vr.dm b/code/modules/research/designs_vr.dm index dee8eebc77..fc156ca245 100644 --- a/code/modules/research/designs_vr.dm +++ b/code/modules/research/designs_vr.dm @@ -8,27 +8,51 @@ build_path = /obj/item/weapon/pickaxe/excavationdrill /datum/design/item/implant/language - name = "language implant" + name = "Language implant" id = "implant_language" req_tech = list(TECH_MATERIAL = 5, TECH_BIO = 5, TECH_DATA = 4, TECH_ENGINEERING = 4) //This is not an easy to make implant. materials = list(DEFAULT_WALL_MATERIAL = 7000, "glass" = 7000, "gold" = 2000, "diamond" = 3000) build_path = /obj/item/weapon/implantcase/vrlanguage /datum/design/item/implant/backup - name = "backup implant" + name = "Backup implant" id = "implant_backup" req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 2, TECH_DATA = 4, TECH_ENGINEERING = 2) materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 2000) build_path = /obj/item/weapon/implantcase/backup /datum/design/item/weapon/sizegun - name = "shrink ray" + name = "Shrink ray" id = "shrinkray" req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 2000, "uranium" = 2000) build_path = /obj/item/weapon/gun/energy/sizegun sort_string = "TAAAB" +/datum/design/item/item/pressureinterlock + name = "APP pressure interlock" + id = "pressureinterlock" + req_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 250) + build_path = /obj/item/pressurelock + sort_string = "TAADA" + +/datum/design/item/weapon/advparticle + name = "Advanced anti-particle rifle" + id = "advparticle" + req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 5, TECH_POWER = 3, TECH_MAGNET = 3) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 1000, "gold" = 1000, "uranium" = 750) + build_path = /obj/item/weapon/gun/energy/particle/advanced + sort_string = "TAADB" + +/datum/design/item/weapon/particlecannon + name = "Anti-particle cannon" + id = "particlecannon" + req_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 5, TECH_POWER = 4, TECH_MAGNET = 4) + materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 1500, "gold" = 2000, "uranium" = 1000, "diamond" = 2000) + build_path = /obj/item/weapon/gun/energy/particle/cannon + sort_string = "TAADC" + /datum/design/item/hud/omni name = "AR glasses" id = "omnihud" @@ -38,17 +62,24 @@ sort_string = "GAAFB" /datum/design/item/translocator - name = "personal translocator" + name = "Personal translocator" id = "translocator" req_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 5, TECH_ILLEGAL = 7) materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 2000, "uranium" = 4000, "diamond" = 2000) build_path = /obj/item/device/perfect_tele sort_string = "HABAF" +/datum/design/item/translator + name = "handheld translator" + id = "translator" + req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3) + materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 2000) + build_path = /obj/item/device/universal_trans + sort_string = "HABBA" // Resleeving Circuitboards -/datum/design/circuit/comm_server +/datum/design/circuit/transhuman_clonepod name = "grower pod" id = "transhuman_clonepod" req_tech = list(TECH_DATA = 3, TECH_BIO = 3) @@ -63,21 +94,21 @@ sort_string = "HAADB" /datum/design/circuit/transhuman_resleever - name = "resleeving pod" + name = "Resleeving pod" id = "transhuman_resleever" req_tech = list(TECH_ENGINEERING = 4, TECH_BIO = 4) build_path = /obj/item/weapon/circuitboard/transhuman_resleever sort_string = "HAADC" /datum/design/circuit/resleeving_control - name = "resleeving control console" + name = "Resleeving control console" id = "resleeving_control" req_tech = list(TECH_DATA = 5) build_path = /obj/item/weapon/circuitboard/resleeving_control sort_string = "HAADE" /datum/design/circuit/partslathe - name = "parts lathe" + name = "Parts lathe" id = "partslathe" req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) build_path = /obj/item/weapon/circuitboard/partslathe diff --git a/code/modules/resleeving/implant.dm b/code/modules/resleeving/implant.dm index 3c3a6abddd..7c2e5e80c7 100644 --- a/code/modules/resleeving/implant.dm +++ b/code/modules/resleeving/implant.dm @@ -7,6 +7,8 @@ /obj/item/weapon/implant/backup name = "backup implant" desc = "A mindstate backup implant that occasionally stores a copy of one's mind on a central server for backup purposes." + icon = 'icons/vore/custom_items_vr.dmi' + icon_state = "backup_implant" var/last_attempt var/attempt_delay = 5 MINUTES @@ -52,6 +54,90 @@ spawn(attempt_delay) backup() +//New, modern implanter instead of old style implanter. +/obj/item/weapon/backup_implanter + name = "backup implanter" + desc = "After discovering that Nanotrasen was just re-using the same implanters over and over again on organics, leading to cross-contamination, Kitsuhana Heavy industries designed this self-cleaning model. Holds four backup implants at a time." + icon = 'icons/obj/device_alt.dmi' + icon_state = "bimplant" + item_state = "syringe_0" + throw_speed = 1 + throw_range = 5 + w_class = ITEMSIZE_SMALL + matter = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 2000) + var/obj/item/weapon/implant/backup/list/imps = list() + var/max_implants = 4 //Iconstates need to exist due to the update proc! + +/obj/item/weapon/backup_implanter/New() + ..() + for(var/i = 1 to max_implants) + var/obj/item/weapon/implant/backup/imp = new(src) + imps |= imp + imp.germ_level = 0 + update() + +/obj/item/weapon/backup_implanter/proc/update() + icon_state = "[initial(icon_state)][imps.len]" + germ_level = 0 + +/obj/item/weapon/backup_implanter/attack_self(mob/user as mob) + if(!istype(user)) + return + + if(imps.len) + user << "You eject a backup implant." + var/obj/item/weapon/implant/backup/imp = imps[imps.len] + imp.forceMove(get_turf(user)) + imps -= imp + user.put_in_any_hand_if_possible(imp) + update() + else + user << "\The [src] is empty." + + return + +/obj/item/weapon/backup_implanter/attackby(obj/W, mob/user) + if(istype(W,/obj/item/weapon/implant/backup)) + if(imps.len < max_implants) + user.unEquip(W) + imps |= W + W.germ_level = 0 + W.forceMove(src) + update() + user << "You load \the [W] into \the [src]." + else + user << "\The [src] is already full!" + +/obj/item/weapon/backup_implanter/attack(mob/M as mob, mob/user as mob) + if (!istype(M, /mob/living/carbon)) + return + if (user && imps.len) + M.visible_message("[user] is injecting a backup implant into [M].") + + user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) + user.do_attack_animation(M) + + var/turf/T1 = get_turf(M) + if (T1 && ((M == user) || do_after(user, 5 SECONDS))) + if(user && M && (get_turf(M) == T1) && src && src.imps.len) + M.visible_message("[M] has been backup implanted by [user].") + + var/obj/item/weapon/implant/backup/imp = imps[imps.len] + if(imp.implanted(M)) + imp.forceMove(M) + imps -= imp + imp.imp_in = M + imp.implanted = 1 + admin_attack_log(user, M, "Implanted using \the [src.name] ([imp.name])", "Implanted with \the [src.name] ([imp.name])", "used an implanter, [src.name] ([imp.name]), on") + if (ishuman(M)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) + affected.implants += imp + imp.part = affected + BITSET(H.hud_updateflag, BACKUP_HUD) + + update() + //The glass case for the implant /obj/item/weapon/implantcase/backup name = "glass case - 'backup'" diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm index 34e63c1900..d358ac85ba 100644 --- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm @@ -981,6 +981,17 @@ M.update_inv_wear_mask() usr.update_action_buttons() +//Vorrarkul: Theodora Lindt +/obj/item/clothing/suit/chococoat + name = "Chococoat" + desc = "A long coat designed to resemble Getmore Chocolate Corp's namesake chocolate bar wrapper." //A walking advertisement? + icon = 'icons/vore/custom_clothes_vr.dmi' + icon_override = 'icons/vore/custom_clothes_vr.dmi' + item_state = "chococoat_on" + icon_state = "chococoat" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + allowed = list (/obj/item/weapon/material/knife) + /* Departamental Swimsuits, for general use */ diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 9b3bb82145..8da954056f 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -865,3 +865,60 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie B.internal_contents |= src user.visible_message("[user] eats a telebeacon!","You eat the the beacon!") playsound(user, B.vore_sound, 70, 1) + +//Universal translator +/obj/item/device/universal_trans + name = "handheld translator" + desc = "This handy device appears to translate the languages it hears into onscreen text for a user." + icon = 'icons/obj/device_alt.dmi' + icon_state = "atmos" + w_class = ITEMSIZE_SMALL + origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3) + var/listening = 0 + var/datum/language/langset + +/obj/item/device/universal_trans/attack_self(mob/user) + if(!listening) //Turning ON + langset = input(user,"Translate to which of your languages?","Language Selection") as anything|null in user.languages + if(langset) + listening = 1 + listening_objects |= src + icon_state = "[initial(icon_state)]1" + user << "You enable \the [src], translating into [langset.name]." + else //Turning OFF + listening = 0 + listening_objects -= src + langset = null + icon_state = "[initial(icon_state)]" + user << "You disable \the [src]." + + +/obj/item/device/universal_trans/hear_talk(var/mob/speaker,var/message,var/vrb,var/datum/language/language) + if(!listening || !istype(speaker)) + return + + //Show the "I heard something" animation. + flick("[initial(icon_state)]2",src) + + //Handheld or pocket only. + if(!isliving(loc)) + return + + var/mob/living/L = loc + + if (language && (language.flags & NONVERBAL)) + return //Not gonna translate sign language + + //Only translate if they can't understand, otherwise pointlessly spammy + //I'll just assume they don't look at the screen in that case + + //They don't understand the spoken language we're translating FROM + if(!L.say_understands(speaker,language)) + + //They understand the PRINTED language + if(L.say_understands(null,langset)) + L << "[src] displays, \"[message]\"" + + //They don't understand the PRINTED language + else + L << "[src] displays, \"[langset.scramble(message)]\"" diff --git a/config/custom_items.txt b/config/custom_items.txt index d2fe38c36d..c48a65c04b 100644 --- a/config/custom_items.txt +++ b/config/custom_items.txt @@ -478,6 +478,12 @@ character_name: Nyssa Brennan item_path: /obj/item/clothing/suit/storage/hooded/wintercoat/cargo } +{ +ckey: vorrarkul +character_name: Theodora Lindt +item_path: /obj/item/clothing/suit/chococoat +} + { ckey: Viveret character_name: Keturah diff --git a/icons/obj/device_alt.dmi b/icons/obj/device_alt.dmi index a6ab695e74..11d92f2845 100644 Binary files a/icons/obj/device_alt.dmi and b/icons/obj/device_alt.dmi differ diff --git a/icons/vore/custom_clothes_vr.dmi b/icons/vore/custom_clothes_vr.dmi index 042094e67d..919ada16ca 100644 Binary files a/icons/vore/custom_clothes_vr.dmi and b/icons/vore/custom_clothes_vr.dmi differ diff --git a/icons/vore/custom_items_vr.dmi b/icons/vore/custom_items_vr.dmi index 9fc8d80f99..20f983f1c1 100644 Binary files a/icons/vore/custom_items_vr.dmi and b/icons/vore/custom_items_vr.dmi differ diff --git a/maps/virgo/virgo-1.dmm b/maps/virgo/virgo-1.dmm index 7017d55fea..754f1b441a 100644 --- a/maps/virgo/virgo-1.dmm +++ b/maps/virgo/virgo-1.dmm @@ -682,7 +682,7 @@ "anf" = (/obj/structure/closet/secure_closet/security,/obj/machinery/light{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/clothing/glasses/hud/security,/obj/item/clothing/shoes/boots/jackboots/toeless,/turf/simulated/floor/tiled,/area/security/security_lockerroom) "ang" = (/obj/structure/closet/secure_closet/security,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/clothing/glasses/hud/security,/obj/item/clothing/suit/armor/vest/wolftaur,/obj/item/clothing/shoes/boots/jackboots/toeless,/turf/simulated/floor/tiled,/area/security/security_lockerroom) "anh" = (/obj/structure/closet/wardrobe/red,/obj/effect/floor_decal/corner/red/full{dir = 8},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/security/security_lockerroom) -"ani" = (/obj/structure/table/standard,/obj/item/device/taperecorder{pixel_y = 0},/obj/item/device/megaphone,/obj/item/weapon/packageWrap,/obj/item/weapon/storage/box,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/effect/floor_decal/corner/red/full{dir = 1},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/item/weapon/hand_labeler,/turf/simulated/floor/tiled,/area/security/security_lockerroom) +"ani" = (/obj/structure/table/standard,/obj/item/device/taperecorder{pixel_y = 0},/obj/item/device/megaphone,/obj/item/weapon/packageWrap,/obj/item/weapon/storage/box,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/effect/floor_decal/corner/red/full{dir = 1},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/item/weapon/hand_labeler,/obj/item/device/universal_trans,/turf/simulated/floor/tiled,/area/security/security_lockerroom) "anj" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/freezer,/area/security/security_bathroom) "ank" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/tiled/freezer,/area/security/security_bathroom) "anl" = (/obj/structure/table/standard,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/item/weapon/soap/nanotrasen,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/freezer,/area/security/security_bathroom) @@ -3044,7 +3044,7 @@ "bgB" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "bgC" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "bgD" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) -"bgE" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/britcup,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/item/weapon/reagent_containers/food/drinks/britcup,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) +"bgE" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/britcup,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/item/weapon/reagent_containers/food/drinks/britcup,/obj/item/device/universal_trans,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "bgF" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/item/weapon/deck/cards,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "bgG" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "bgH" = (/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/medbay{c_tag = "MED - Break Room"; dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) @@ -3752,7 +3752,7 @@ "buh" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bui" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "buj" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) -"buk" = (/obj/item/weapon/stool/padded,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/item/weapon/storage/box/backup_kit,/turf/simulated/floor/tiled/white,/area/medical/reception) +"buk" = (/obj/structure/table/standard,/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Medical Reception"; req_access = list(5)},/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/item/weapon/backup_implanter,/turf/simulated/floor/tiled/white,/area/medical/reception) "bul" = (/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/medical/morgue) "bum" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue) "bun" = (/obj/structure/closet/secure_closet{name = "Psychiatrist's Locker"; req_access = list(64)},/obj/item/clothing/suit/straight_jacket{layer = 3},/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/pill/methylphenidate,/obj/item/weapon/reagent_containers/pill/citalopram,/obj/item/weapon/reagent_containers/pill/citalopram,/obj/item/weapon/reagent_containers/pill/methylphenidate,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/floor/tiled,/area/medical/morgue) @@ -3800,7 +3800,7 @@ "bvd" = (/turf/simulated/wall,/area/medical/reception) "bve" = (/obj/structure/bed/chair{dir = 4},/obj/structure/sign/nosmoking_1{pixel_x = -32},/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/reception) "bvf" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/reception) -"bvg" = (/obj/structure/table/standard,/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Medical Reception"; req_access = list(5)},/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bvg" = (/obj/item/weapon/stool/padded,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/reception) "bvh" = (/obj/structure/bed/chair/office/light{dir = 8},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/tiled/white,/area/medical/reception) "bvi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/reception) "bvj" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{dir = 4},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/white,/area/medical/reception) @@ -3967,7 +3967,7 @@ "byo" = (/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Lockdown Shutters"; opacity = 0},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_two) "byp" = (/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/reception) "byq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/reception) -"byr" = (/obj/structure/table/standard,/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Medical Reception"; req_access = list(5)},/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = -5},/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/reception) +"byr" = (/obj/structure/table/standard,/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Medical Reception"; req_access = list(5)},/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = -5},/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/item/weapon/backup_implanter,/turf/simulated/floor/tiled/white,/area/medical/reception) "bys" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/reception) "byt" = (/obj/effect/floor_decal/corner/paleblue{dir = 2},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor/tiled/white,/area/medical/reception) "byu" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/floor_decal/corner/paleblue{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) @@ -4258,7 +4258,7 @@ "bDT" = (/obj/structure/closet/secure_closet/hydroponics,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled,/area/hydroponics) "bDU" = (/obj/effect/floor_decal/corner/lime{dir = 5},/obj/machinery/alarm{pixel_y = 22},/obj/structure/closet/crate/hydroponics{desc = "All you need to start your own honey farm."; name = "beekeeping crate"},/obj/item/beehive_assembly,/obj/item/bee_smoker,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/bee_pack,/obj/item/weapon/crowbar,/turf/simulated/floor/tiled,/area/hydroponics) "bDV" = (/turf/simulated/wall/r_wall,/area/maintenance/research_shuttle) -"bDW" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/disposalpipe/segment,/obj/machinery/recharger,/obj/item/device/defib_kit,/obj/item/device/defib_kit,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) +"bDW" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/disposalpipe/segment,/obj/machinery/recharger,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "bDX" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) "bDY" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/sign/directions/medical{dir = 4; pixel_x = 32; pixel_y = 0},/obj/structure/sign/directions/cargo{dir = 2; pixel_x = 32; pixel_z = 8},/obj/structure/sign/directions/engineering{dir = 2; pixel_x = 32; pixel_z = -8},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_two) "bDZ" = (/obj/structure/bed/chair{dir = 4},/obj/effect/landmark/start{name = "Medical Doctor"},/obj/effect/floor_decal/corner/paleblue{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/reception) @@ -4367,7 +4367,7 @@ "bFY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bFZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bGa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bGb" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/simulated/floor/tiled/white,/area/medical/sleeper) +"bGb" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bGc" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4; id = "resleeve_tint"},/obj/structure/window/reinforced/polarized{dir = 8; id = "resleeve_tint"},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced/polarized{dir = 1; id = "resleeve_tint"},/obj/structure/window/reinforced/polarized{id = "resleeve_tint"},/turf/simulated/floor/plating,/area/medical/resleeving) "bGd" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/paleblue{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bGe" = (/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/structure/bed/chair,/turf/simulated/floor/tiled/white,/area/medical/resleeving) @@ -4803,7 +4803,7 @@ "bOs" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/closet/fireaxecabinet{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/tiled/steel,/area/medical/medbay_emt_bay) "bOt" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/medbay{c_tag = "MED - Resleeving"; dir = 1},/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bOu" = (/turf/simulated/floor/carpet/blue,/area/medical/psych) -"bOv" = (/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/structure/table/standard,/obj/item/weapon/storage/box/backup_kit,/obj/item/weapon/storage/box/backup_kit,/turf/simulated/floor/tiled/white,/area/medical/resleeving) +"bOv" = (/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/structure/table/standard,/obj/item/weapon/backup_implanter,/obj/item/weapon/backup_implanter,/obj/item/weapon/backup_implanter,/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bOw" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bOx" = (/obj/effect/floor_decal/corner/pink/full,/obj/machinery/computer/med_data/laptop,/obj/structure/table/glass,/obj/machinery/light,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/white,/area/medical/patient_a) "bOy" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/structure/table/glass,/obj/item/weapon/paper_bin,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/simulated/floor/tiled/white,/area/medical/patient_a) @@ -5296,7 +5296,7 @@ "bXR" = (/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Lockdown Shutters"; opacity = 0},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/medical_emergency_hallway) "bXS" = (/obj/effect/floor_decal/corner/pink{dir = 9},/obj/structure/bed/chair/office/light,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/camera/network/medbay{c_tag = "MED - Patient Room C"; dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_a) "bXT" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Patient Room A"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/patient_a) -"bXU" = (/obj/item/weapon/storage/box/cdeathalarm_kit,/obj/item/bodybag/cryobag{pixel_x = -3},/obj/item/bodybag/cryobag{pixel_x = -3},/obj/structure/table/steel,/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/item/weapon/storage/box/backup_kit,/turf/simulated/floor/tiled/dark,/area/medical/biostorage) +"bXU" = (/obj/item/weapon/storage/box/cdeathalarm_kit,/obj/item/bodybag/cryobag{pixel_x = -3},/obj/item/bodybag/cryobag{pixel_x = -3},/obj/structure/table/steel,/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/item/weapon/storage/box/backup_kit,/obj/item/weapon/backup_implanter,/turf/simulated/floor/tiled/dark,/area/medical/biostorage) "bXV" = (/obj/machinery/status_display{layer = 4; pixel_x = 32; pixel_y = 0},/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/circuitboard/autolathe,/obj/machinery/light/small{dir = 1},/obj/item/weapon/circuitboard/partslathe,/turf/simulated/floor,/area/storage/tech) "bXW" = (/obj/effect/floor_decal/corner/pink{dir = 5},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 36},/obj/machinery/button/windowtint{id = "pr5_window_tint"; pixel_y = 26},/turf/simulated/floor/tiled/white,/area/medical/patient_c) "bXX" = (/obj/structure/window/reinforced/polarized{dir = 1; id = "pr4_window_tint"},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 2; id = "pr4_window_tint"},/obj/structure/window/reinforced/polarized{dir = 4; id = "pr4_window_tint"},/obj/structure/window/reinforced/polarized{dir = 8; id = "pr4_window_tint"},/turf/simulated/floor,/area/medical/patient_d) @@ -10105,8 +10105,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaX aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaaaaaaaayaaaaaeaaaaaaaaaaaaaaeaaeaaaaaaaaeaaeaaaaaeaaeaaeaaaaaeaaeaaeaaaaayaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpWaaiaaibpXblmblnbrubrvblmbrwblqbikbikbikbrxblqbikbiybvSbjQbfEbgTbgUbgVbgWbgXbgYbgZbfEdIXbcEbqhbaZbqibqjbqkbqkbqlbqmbqnbqoboObqpboQbqqbqrbqsboUbqtbquaaiaaiaWEaVGaZhbeIaWEaaiaaiaaiaaiaaiaaiaafaafbhrbhrbnibnjbqvbnlbqwbnlbnkbnjbnmbhrbhraafaafaVeaVOaVeaaiaVPbawaYebqxbdWbnnbqybcXbqzaYjaYjaYjbqybcXbqzbiTbdSbphaYebawaVPaaiaVWaUubbyaPRbplaaiaaibckbckbqAbckbckbjebjebjebqBbqBbqBbqBbqCbqDbqBbqBbqEbqFbqGbqHbqHbqIbqJbqFbqKbqLbqMbpJbqObqPbqQbIZbmobpKbqNbpLbqSbqRbIZaXCaVnaafbdzbqWbqXbkYbqYblabqZblabrabjEbrbbjEbrcbdzbrdbfCbrebrfbrgbrhbribdzaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaaaaaaaayaaabrjbrkbrlaaabrjbrkbrlaaabrjbrkbrlaaabrjbrkbrlaaabrjbrkbrlaaaaayaaeaaeaaaaaaaaaaaaaaaaaabrmbrnbrobrpaaaaaabrqbrrbrsbrqbrqbrtbjGbjHbjIbjHbjGbikaaiaaiaaiaaiaaiaaibrmbsZbrzbtabfEbipbiqbirbisbitbiubivbiwdIZdIYdJabmZbrEbrFbrGbnabrHbbLbrIbrJbrKbrLbrMbrNbrNbrNbrObrPbrQaaiaaiaWEaVGaZhbeIaWEaaiaaiaaiaaiaaiaafaafaafbhrbhrbrRbrSbrTbnlbnlbnlbrUbrVbrWbhrbhraafaafaVeaVOaVeaaiaaiaYqaXdaYebqxbdWbrXbrYbrZbdabdabdabrXbrYbrZbdSbphaYeaWPaYdaaiaaiaXebaAbaBbsabplaaiaaibsbbscbsdbsebsfbsgbshbsibqBbsjbskbslbsmbsnbsobspbsqbsrbssbstbsubsvbqJbqTbsxbsybszbsAbsBbsybsAbIZbqVbqUbOubswbOubOubIZaXCaVnaafbdzbdzbfybsIbicbmsbsJbjEbjxbjEbjEbrhbsKbdzbsLbsMbsNbsObpRbsPbdzbdzaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaaaaaaaaaaaaaayaaebrjbsQbrlaaebrjbsQbrlaaebrjbsQbrlaaebrjbsQbrlaaebrjbsQbrlaaeaazaaaaaeaaeaaaaaaaaaaaaaaabrmbrmbsRbsSbrmbsTbsUbsVbsWbsXbsYbikbikabxabxbilbikbikcxVcxVaaiaaiaaiaaibrmbrmbrzbuJbfEbjKbjLbgVbjMbjNbjObjPbfEdJbbtcbtdboHbtebtfbtgbthbmZbtibtjbtkbtlbtmbtnbtobtpbtqbtrbtsbiHaaiaaiaWAaVGbttbeIaWAaaiaaiaaiaafaafaafaafaafaafbhrbhrbtubrSbtvbtwbtxbtybtzbhrbhraafaafaafaVeaVOaVeaaiaaiaaiaYqaVSbaxbdUbdUbtAbtBbtCbtDbtCbtEbtFbdUbdUbtGaVQaYdaaiaaiaaiaYraUubtHaPRbtIaaiaaibtJbtKbsdbtLbtMbtNbtObtPbqBbtQbtRbtSbtTbtTbtUbtVbtWbtXbtYbtZbtZbuabubbucbudbuebufbugbuhbuibujbIZbsDbsCbsFbsEbsEbsGbIZaXCaVnaafaafbdzbdzbdzbdzbuqburbusbjxbutbuubuvbdzbdzbiebdzbuxbuybuzbdzbdzaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaaaaaaaaaaaaaaaaayaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaaaaeaaaaaaaaeaaeaaaaaaaaaaaabrmbuAbuBbuCbrmbuDbuEbuFbuGbuHbuIdIScxVaaiaaiaaiaaicxVcxVaaiaaiaaiaaiaaiaaibrmbrzdIRbfEbfEbfEbfEbfEbfEbfEbfEbfEdJcbuMbuNbaZbuObuPbuQbuRboHbuSbrIbqhbrKbuTbuUbuVbiHbuWbuXbuWbiHaaibbkbbkbiIbiJbiKaXOaaiaaiaafaafaafaafaafaafaafbhrbhrbhrbuYbuZbvabvbbvcbhrbhrbhraafaafaVeaVeaVOaVeaVeaaiaaiaaiaVPaVQaVRaVSaVPaVPaVQaVRaVSaVPaVPaVQaVRaVSaVPaaiaaiaaiaaiaOKaVkbiVaVmaOKaOKaaibvdbvebvfbtNbvgbvhbvibvjbqBbvkbvlbvmbvnbtTbtTbvobnHbvpbvqbqLbqLbvrbqJbvsbvtbvubvvbvwbvxbvybvzbIZbIZbIZbIZbsHbIZbIZbIZaXCaVnaafaafaafaafaafbdzbvBbvCbdzbvDbdzbvBbvEbdzbvFbvGbdzbvHbvIbdzbdzaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaaaaeaaaaaaaaaaaeaaeaaaaaaaaabrmbvJbvKbvLbrmbvMbvNbvObvPbvQbvRbrqaafaafaafaaiaaiaaiaaiaaiaaiaaiaaiaafaafbrmbvSbuKbuKbvTbvUbvVbvWbvXbvYbvZbuKdJdbwbbwcbaZbwdbwebwfbwgbaZbwhbrIbwibwjbwjbwjbwjbwjbwkbwlbwmbwjbcJbbkbwnaVGaZhbwoaXOaVeaafaafaafaafaafaafaafaafaafbhrbhrbhrbwpbhrbhrbhrbhrbhraafaafaVeaVeaVNaVOaVNaVeaVeaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaVeaOKaUubwqbgibwraOKbwsbwtbwubwvbwwbwxbwybukbwAbwBbwCbwDbwEbwFbtTbwGbqBcsVbqFbwIbwJbwKbwLbwMbwNbwObwPbwQbwRbwSbwTbwUbwVbulbwZbumbwZbwZbunbwVaXCaVnaafaafaafaafaafbdzbxcbxdbxebxfbxgbxhbxibxjbxkbxlbdzbxmbxnbxobdzaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaaaaaaaaaaaaaaaaayaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaaaaeaaaaaaaaeaaeaaaaaaaaaaaabrmbuAbuBbuCbrmbuDbuEbuFbuGbuHbuIdIScxVaaiaaiaaiaaicxVcxVaaiaaiaaiaaiaaiaaibrmbrzdIRbfEbfEbfEbfEbfEbfEbfEbfEbfEdJcbuMbuNbaZbuObuPbuQbuRboHbuSbrIbqhbrKbuTbuUbuVbiHbuWbuXbuWbiHaaibbkbbkbiIbiJbiKaXOaaiaaiaafaafaafaafaafaafaafbhrbhrbhrbuYbuZbvabvbbvcbhrbhrbhraafaafaVeaVeaVOaVeaVeaaiaaiaaiaVPaVQaVRaVSaVPaVPaVQaVRaVSaVPaVPaVQaVRaVSaVPaaiaaiaaiaaiaOKaVkbiVaVmaOKaOKaaibvdbvebvfbtNbukbvhbvibvjbqBbvkbvlbvmbvnbtTbtTbvobnHbvpbvqbqLbqLbvrbqJbvsbvtbvubvvbvwbvxbvybvzbIZbIZbIZbIZbsHbIZbIZbIZaXCaVnaafaafaafaafaafbdzbvBbvCbdzbvDbdzbvBbvEbdzbvFbvGbdzbvHbvIbdzbdzaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaaaaeaaaaaaaaaaaeaaeaaaaaaaaabrmbvJbvKbvLbrmbvMbvNbvObvPbvQbvRbrqaafaafaafaaiaaiaaiaaiaaiaaiaaiaaiaafaafbrmbvSbuKbuKbvTbvUbvVbvWbvXbvYbvZbuKdJdbwbbwcbaZbwdbwebwfbwgbaZbwhbrIbwibwjbwjbwjbwjbwjbwkbwlbwmbwjbcJbbkbwnaVGaZhbwoaXOaVeaafaafaafaafaafaafaafaafaafbhrbhrbhrbwpbhrbhrbhrbhrbhraafaafaVeaVeaVNaVOaVNaVeaVeaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaVeaOKaUubwqbgibwraOKbwsbwtbwubwvbwwbwxbwybvgbwAbwBbwCbwDbwEbwFbtTbwGbqBcsVbqFbwIbwJbwKbwLbwMbwNbwObwPbwQbwRbwSbwTbwUbwVbulbwZbumbwZbwZbunbwVaXCaVnaafaafaafaafaafbdzbxcbxdbxebxfbxgbxhbxibxjbxkbxlbdzbxmbxnbxobdzaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaayaayaaeaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaaaaeaaaaaaaaaaaaaaebxpbxqbxqbxqbxqbxrbrmbrmbrqbxsbxtbxubxvbxwbrqaafaafaafaafaaiaaiaaiaaiaaiaaiaafaafaafbrmbvSbuKbxxbxybxzbxAbxBbxCbxDbxEbxFdJebxHbxIbxJbxKbxLbxMbxNbxObxPbxQbxRbxSbxTbxUbxVbxSbxWbxXbxYbxZbyabybbbiaWBbeHbeIbycaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaafaafbydbyebydbydaVeaVeaVeaVeaVeaVebyfbygbyhbyiaVNaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVebyjbykbylbymaPQbynbyobypbtNbyqbtNbyrbvhbysbytbspbyubyvbywbyxbyybyzbspbyAbyBbnMbyCbyCbyDbqJbyEbudbyFbyGbyHbvybyIbyJbwVbwVbwVbwVbuobwVbwVbwVbyOaVnaafaafaafaafaafbdzbdzbyPbyQbyRbySbyTbyUbyVbyWbyXbyYbyZbzabzbbdzaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaaaaeaaaaaaaaebzcaaeaaaaaebzcaaeaaaaaebzcaaeaaaaaebzcaaeaaaaaebzcaaeaaaaaeaaaaaabzdbzebzebzfbzgbzhbzibzjbzkbzlbzmbrqbznbzobzpbzqbzrbrqaafaafaafaafaafaaiaaiaaiaaiaafaafaafaafbrmbvSbuKbzsbxzbztbzubzvbzwbzxbzwbzybzzbzAbzBbzCbhebzDbhebzEbhebhebzFbzGbzHbzIbzJbzKbzLbzMbzNbzObzPbzQbzRbzSbzTbzUbzVbzWbzXbzYbzZbzZbzZbzZbAabzZbAbaVeaVeaVeaVebAcaVeaVeaVebAdbAebAebAebAebAebAfbAgbAhbAibAibAibAibAibAibAibAjbAibAibAibAkbAlbAlbAlbAlbAlbAlbAlbAlbAmbAlbAnbAobApbAqbAraYvbAsbAtbAubAvbAwbtLbAxbtNbAybAzbtVbAAbupbACbADbAEbAFbtVbAGbAHbAIbAJbAJbAKbALbAMbvtbANbAObAPbAQbARbwVbwVbwzbvAbwXbwWbxabwYbwVbyOaVnaafaafaafaafaafaafbdzbdzbdzbAWbAXbdzbdzbdzbdzbdzbdzbAYbAZbdzbdzaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaebBabBbbBbbBbbBcbBbbBbbBbbBcbBbbBbbBbbBcbBbbBbbBbbBcbBbbBbbBbbBcbBbbBbbBbbBbbBdbBebBfbBgbBhbBibBjbBkbBlbBmbBnbBobrqbrqbBpbrqbrqbBqbrqaafaafaafaafaafaafaafaaiaaiaafaafaafaafbrmbvSbuKbBrbBsbBtbBubBvbBwbBxbBybuKbBzbBAbBBbBCbBDbBEbBFbBGbBHbBIbBJbBKbwjbBLbBMbBNbBObBPbBQbxYbxZbyabybbbibbibBRbBSbBTaVebBUbBVbBWbBXbBYbBZbCabCbbCcbCdbCebCfbCgbzZbzZbzZbChaVeaVeaVeaVeaVNbCibCjbCkbClbClbClbClbClbClbClbCmbClbClbClbCnbCobCobCobCobCobCobCobFpbfYbhtaVebCqaUubbybCraQIbCsbCtbCubCvbCwbCxbCybCzbCAbCBbqBbqCbqDbCCbqCbCDbqDbqBbCEbqFbwIbwJbwKbCFbqJbCGbsxbCHbCIbsxbwVbwVbwVbCJbyKbxbbxbbCNbwZbyLbwVbyOaVnaafaafaafaafaafaafaafbdzbCObCPbCQbdzaafaafaafaafbdzbdzbdzbdzaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/vorestation.dme b/vorestation.dme index a3378dab18..41376b6842 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -234,6 +234,7 @@ #include "code\datums\supplypacks\materials.dm" #include "code\datums\supplypacks\medical.dm" #include "code\datums\supplypacks\misc.dm" +#include "code\datums\supplypacks\misc_vr.dm" #include "code\datums\supplypacks\munitions.dm" #include "code\datums\supplypacks\recreation.dm" #include "code\datums\supplypacks\robotics.dm" @@ -1392,9 +1393,11 @@ #include "code\modules\error_handler\error_viewer.dm" #include "code\modules\error_handler\~defines.dm" #include "code\modules\events\apc_damage.dm" +#include "code\modules\events\atmos_leak.dm" #include "code\modules\events\blob.dm" #include "code\modules\events\brand_intelligence.dm" #include "code\modules\events\camera_damage.dm" +#include "code\modules\events\canister_leak.dm" #include "code\modules\events\carp_migration.dm" #include "code\modules\events\comms_blackout.dm" #include "code\modules\events\communications_blackout.dm" @@ -1454,6 +1457,7 @@ #include "code\modules\gamemaster\game_master.dm" #include "code\modules\gamemaster\helpers.dm" #include "code\modules\gamemaster\actions\action.dm" +#include "code\modules\gamemaster\actions\canister_leak.dm" #include "code\modules\gamemaster\actions\carp_migration.dm" #include "code\modules\gamemaster\actions\comms_blackout.dm" #include "code\modules\gamemaster\actions\dust.dm"