diff --git a/code/game/objects/items/devices/translocator_vr.dm b/code/game/objects/items/devices/translocator_vr.dm new file mode 100644 index 00000000000..a6b4b2583ea --- /dev/null +++ b/code/game/objects/items/devices/translocator_vr.dm @@ -0,0 +1,499 @@ +//The perfect adminboos device? +/obj/item/device/perfect_tele + name = "personal translocator" + desc = "Seems absurd, doesn't it? Yet, here we are. Generally considered dangerous contraband unless the user has permission from Central Command." + icon = 'icons/obj/device_alt.dmi' + icon_state = "hand_tele" + w_class = ITEMSIZE_SMALL + origin_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 5, TECH_ILLEGAL = 7) + + var/cell_type = /obj/item/weapon/cell/device/weapon + var/obj/item/weapon/cell/power_source + var/charge_cost = 800 // cell/device/weapon has 2400 + var/battery_lock = 0 //If set, weapon cannot switch batteries + + var/list/beacons = list() + var/ready = 1 + var/beacons_left = 3 + var/failure_chance = 5 //Percent + var/obj/item/device/perfect_tele_beacon/destination + var/datum/effect/effect/system/spark_spread/spk + var/list/warned_users = list() + var/list/logged_events = list() + +/obj/item/device/perfect_tele/New() + ..() + flags |= NOBLUDGEON + if(cell_type) + power_source = new cell_type(src) + else + power_source = new /obj/item/weapon/cell/device(src) + spk = new(src) + spk.set_up(5, 0, src) + spk.attach(src) + +/obj/item/device/perfect_tele/Destroy() + // Must clear the beacon's backpointer or we won't GC. Someday maybe do something nicer even. + for(var/obj/item/device/perfect_tele_beacon/B in beacons) + B.tele_hand = null + beacons.Cut() + QDEL_NULL(power_source) + QDEL_NULL(spk) + return ..() + +/obj/item/device/perfect_tele/update_icon() + if(!power_source) + icon_state = "[initial(icon_state)]_o" + else if(ready && (power_source.check_charge(charge_cost) || power_source.fully_charged())) + icon_state = "[initial(icon_state)]" + else + icon_state = "[initial(icon_state)]_w" + + ..() + +/obj/item/device/perfect_tele/attack_hand(mob/user) + if(user.get_inactive_hand() == src) + unload_ammo(user) + else + return ..() + +/obj/item/device/perfect_tele/proc/unload_ammo(mob/user) + if(battery_lock) + to_chat(user,"[src] does not have a battery port.") + return + if(user.get_inactive_hand() == src && power_source) + to_chat(user,"You eject \the [power_source] from \the [src].") + user.put_in_hands(power_source) + power_source = null + update_icon() + else + to_chat(user,"[src] does not have a power cell.") + +/obj/item/device/perfect_tele/attack_self(mob/user) + if(!(user.ckey in warned_users)) + warned_users |= user.ckey + alert(user,"This device can be easily used to break ERP preferences due to the nature of teleporting \ + and tele-vore. Make sure you carefully examine someone's OOC prefs before teleporting them if you are \ + going to use this device for ERP purposes. This device records all warnings given and teleport events for \ + admin review in case of pref-breaking, so just don't do it.","OOC WARNING") + + var/choice = alert(user,"What do you want to do?","[src]","Create Beacon","Cancel","Target Beacon") + switch(choice) + if("Create Beacon") + if(beacons_left <= 0) + alert("The translocator can't support any more beacons!","Error") + return + + var/new_name = html_encode(input(user,"New beacon's name (2-20 char):","[src]") as text|null) + + if(length(new_name) > 20 || length(new_name) < 2) + alert("Entered name length invalid (must be longer than 2, no more than than 20).","Error") + return + if(new_name in beacons) + alert("No duplicate names, please. '[new_name]' exists already.","Error") + return + + var/obj/item/device/perfect_tele_beacon/nb = new(get_turf(src)) + nb.tele_name = new_name + nb.tele_hand = src + nb.creator = user.ckey + beacons[new_name] = nb + beacons_left-- + if(isliving(user)) + var/mob/living/L = user + L.put_in_any_hand_if_possible(nb) + + if("Target Beacon") + if(!beacons.len) + to_chat(user,"\The [src] doesn't have any beacons!") + else + var/target = input("Which beacon do you target?","[src]") in beacons|null + if(target && (target in beacons)) + destination = beacons[target] + to_chat(user,"Destination set to '[target]'.") + else + return + +/obj/item/device/perfect_tele/attackby(obj/W, mob/user) + if(istype(W,cell_type) && !power_source) + power_source = W + power_source.update_icon() //Why doesn't a cell do this already? :| + user.unEquip(power_source) + power_source.forceMove(src) + to_chat(user,"You insert \the [power_source] into \the [src].") + update_icon() + + else if(istype(W,/obj/item/device/perfect_tele_beacon)) + var/obj/item/device/perfect_tele_beacon/tb = W + if(tb.tele_name in beacons) + to_chat(user,"You re-insert \the [tb] into \the [src].") + beacons -= tb.tele_name + user.unEquip(tb) + qdel(tb) + beacons_left++ + else + to_chat(user,"\The [tb] doesn't belong to \the [src].") + return + else + ..() + +/obj/item/device/perfect_tele/proc/teleport_checks(mob/living/target,mob/living/user) + //Uhhuh, need that power source + if(!power_source) + to_chat(user,"\The [src] has no power source!") + return FALSE + + //Check for charge + if((!power_source.check_charge(charge_cost)) && (!power_source.fully_charged())) + to_chat(user,"\The [src] does not have enough power left!") + return FALSE + + //Only mob/living need apply. + if(!istype(user) || !istype(target)) + return FALSE + + //No, you can't teleport buckled people. + if(target.buckled) + to_chat(user,"The target appears to be attached to something...") + return FALSE + + //No, you can't teleport if it's not ready yet. + if(!ready) + to_chat(user,"\The [src] is still recharging!") + return FALSE + + //No, you can't teleport if there's no destination. + if(!destination) + to_chat(user,"\The [src] doesn't have a current valid destination set!") + return FALSE + + //No, you can't teleport if there's a jammer. + if(is_jammed(src) || is_jammed(destination)) + to_chat(user,"\The [src] refuses to teleport you, due to strong interference!") + return FALSE + + //No, you can't port to or from away missions. Stupidly complicated check. + var/turf/uT = get_turf(user) + var/turf/dT = get_turf(destination) + var/list/dat = list() + dat["z_level_detection"] = using_map.get_map_levels(uT.z) + + if(!uT || !dT) + return FALSE + + if( (uT.z != dT.z) && (!(dT.z in dat["z_level_detection"])) ) + to_chat(user,"\The [src] can't teleport you that far!") + return FALSE + + if(uT.block_tele || dT.block_tele) + to_chat(user,"Something is interfering with \the [src]!") + return FALSE + + //Seems okay to me! + return TRUE + +/obj/item/device/perfect_tele/afterattack(mob/living/target, mob/living/user, proximity) + //No, you can't teleport people from over there. + if(!proximity) + return + + if(!teleport_checks(target,user)) + return //The checks proc can send them a message if it wants. + + //Bzzt. + ready = 0 + power_source.use(charge_cost) + + //Failure chance + if(prob(failure_chance) && beacons.len >= 2) + var/list/wrong_choices = beacons - destination.tele_name + var/wrong_name = pick(wrong_choices) + destination = beacons[wrong_name] + to_chat(user,"\The [src] malfunctions and sends you to the wrong beacon!") + + //Destination beacon vore checking + var/turf/dT = get_turf(destination) + var/atom/real_dest = dT + + var/atom/real_loc = destination.loc + if(isbelly(real_loc)) + real_dest = real_loc + if(isliving(real_loc)) + var/mob/living/L = real_loc + if(L.vore_selected) + real_dest = L.vore_selected + else if(L.vore_organs.len) + real_dest = pick(L.vore_organs) + + //Confirm televore + var/televored = FALSE + if(isbelly(real_dest)) + var/obj/belly/B = real_dest + if(!target.can_be_drop_prey && B.owner != user) + to_chat(target,"\The [src] narrowly avoids teleporting you right into \a [lowertext(real_dest.name)]!") + real_dest = dT //Nevermind! + else + televored = TRUE + to_chat(target,"\The [src] teleports you right into \a [lowertext(real_dest.name)]!") + + //Phase-out effect + phase_out(target,get_turf(target)) + + //Move them + target.forceMove(real_dest) + + //Phase-in effect + phase_in(target,get_turf(target)) + + //And any friends! + for(var/obj/item/weapon/grab/G in target.contents) + if(G.affecting && (G.state >= GRAB_AGGRESSIVE)) + + //Phase-out effect for grabbed person + phase_out(G.affecting,get_turf(G.affecting)) + + //Move them, and televore if necessary + G.affecting.forceMove(real_dest) + if(televored) + to_chat(target,"\The [src] teleports you right into \a [lowertext(real_dest.name)]!") + + //Phase-in effect for grabbed person + phase_in(G.affecting,get_turf(G.affecting)) + + update_icon() + spawn(30 SECONDS) + ready = 1 + update_icon() + + logged_events["[world.time]"] = "[user] teleported [target] to [real_dest] [televored ? "(Belly: [lowertext(real_dest.name)])" : null]" + +/obj/item/device/perfect_tele/proc/phase_out(var/mob/M,var/turf/T) + + if(!M || !T) + return + + spk.set_up(5, 0, M) + spk.attach(M) + playsound(T, "sparks", 50, 1) + anim(T,M,'icons/mob/mob.dmi',,"phaseout",,M.dir) + +/obj/item/device/perfect_tele/proc/phase_in(var/mob/M,var/turf/T) + + if(!M || !T) + return + + spk.start() + playsound(T, 'sound/effects/phasein.ogg', 25, 1) + playsound(T, 'sound/effects/sparks2.ogg', 50, 1) + anim(T,M,'icons/mob/mob.dmi',,"phasein",,M.dir) + spk.set_up(5, 0, src) + spk.attach(src) + +/obj/item/device/perfect_tele_beacon + name = "translocator beacon" + desc = "That's unusual." + icon = 'icons/obj/device_alt.dmi' + icon_state = "motion2" + w_class = ITEMSIZE_TINY + + var/tele_name + var/obj/item/device/perfect_tele/tele_hand + var/creator + var/warned_users = list() + var/tele_network = null + +/obj/item/device/perfect_tele_beacon/New() + ..() + flags |= NOBLUDGEON + +/obj/item/device/perfect_tele_beacon/Destroy() + tele_name = null + tele_hand = null + return ..() + +/obj/item/device/perfect_tele_beacon/attack_hand(mob/user) + if((user.ckey != creator) && !(user.ckey in warned_users)) + warned_users |= user.ckey + var/choice = alert(user,"This device is a translocator beacon. Having it on your person may mean that anyone \ + who teleports to this beacon gets teleported into your selected vore-belly. If you are prey-only \ + or don't wish to potentially have a random person teleported into you, it's suggested that you \ + not carry this around.","OOC WARNING","Take It","Leave It") + if(choice == "Leave It") + return + + ..() + +/obj/item/device/perfect_tele_beacon/stationary + name = "stationary translocator beacon" + icon = 'icons/obj/radio_vr.dmi' + icon_state = "floor_beacon" + w_class = ITEMSIZE_HUGE + anchored = 1 + +GLOBAL_LIST_BOILERPLATE(premade_tele_beacons, /obj/item/device/perfect_tele_beacon/stationary) + +/obj/item/device/perfect_tele_beacon/attack_self(mob/user) + if(!isliving(user)) + return + var/mob/living/L = user + var/confirm = alert(user, "You COULD eat the beacon...", "Eat beacon?", "Eat it!", "No, thanks.") + if(confirm == "Eat it!") + var/obj/belly/bellychoice = input("Which belly?","Select A Belly") as null|anything in L.vore_organs + if(bellychoice) + user.visible_message("[user] is trying to stuff \the [src] into [user.gender == MALE ? "his" : user.gender == FEMALE ? "her" : "their"] [bellychoice]!","You begin putting \the [src] into your [bellychoice]!") + if(do_after(user,5 SECONDS,src)) + user.unEquip(src) + forceMove(bellychoice) + user.visible_message("[user] eats a telebeacon!","You eat the the beacon!") + +// A single-beacon variant for use by miners (or whatever) +/obj/item/device/perfect_tele/one_beacon + name = "mini-translocator" + desc = "A more limited translocator with a single beacon, useful for some things, like setting the mining department on fire accidentally. Legal for use in the pursuit of NanoTrasen interests, namely mining and exploration." + icon_state = "minitrans" + beacons_left = 1 //Just one + cell_type = /obj/item/weapon/cell/device + origin_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 5) + +/* +/obj/item/device/perfect_tele/one_beacon/teleport_checks(mob/living/target,mob/living/user) + var/turf/T = get_turf(destination) + if(T && user.z != T.z) + to_chat(user,"\The [src] is too far away from the beacon. Try getting closer first!") + return FALSE + return ..() +*/ + +/obj/item/device/perfect_tele/alien + name = "alien translocator" + desc = "This strange device allows one to teleport people and objects across large distances." + + cell_type = /obj/item/weapon/cell/device/weapon/recharge/alien + charge_cost = 400 + beacons_left = 6 + failure_chance = 0 //Percent + +/obj/item/device/perfect_tele/alien/teleport_checks(mob/living/target,mob/living/user) + //Uhhuh, need that power source + if(!power_source) + to_chat(user,"\The [src] has no power source!") + return FALSE + + //Check for charge + if((!power_source.check_charge(charge_cost)) && (!power_source.fully_charged())) + to_chat(user,"\The [src] does not have enough power left!") + return FALSE + + //Only mob/living need apply. + if(!istype(user) || !istype(target)) + return FALSE + + //No, you can't teleport buckled people. + if(target.buckled) + to_chat(user,"The target appears to be attached to something...") + return FALSE + + //No, you can't teleport if it's not ready yet. + if(!ready) + to_chat(user,"\The [src] is still recharging!") + return FALSE + + //No, you can't teleport if there's no destination. + if(!destination) + to_chat(user,"\The [src] doesn't have a current valid destination set!") + return FALSE + + //Seems okay to me! + return TRUE + +/obj/item/device/perfect_tele/frontier + icon_state = "minitrans" + beacons_left = 1 //Just one + battery_lock = 1 + unacidable = 1 + var/loc_network = null + var/phase_power = 75 + var/recharging = 0 + +/obj/item/device/perfect_tele/frontier/unload_ammo(var/mob/user) + if(recharging) + return + recharging = 1 + update_icon() + user.visible_message("[user] opens \the [src] and starts pumping the handle.", \ + "You open \the [src] and start pumping the handle.") + while(recharging) + if(!do_after(user, 10, src)) + break + playsound(get_turf(src),'sound/items/change_drill.ogg',25,1) + if(power_source.give(phase_power) < phase_power) + break + + recharging = 0 + update_icon() + +/obj/item/device/perfect_tele/frontier/update_icon() + if(recharging) + icon_state = "[initial(icon_state)]_o" + update_held_icon() + return + ..() + +/obj/item/device/perfect_tele/frontier/staff + name = "centcom translocator" + desc = "Similar to translocator technology, however, most of its destinations are hardcoded." + loc_network = "centcom" + +/obj/item/device/perfect_tele/frontier/staff/New() + ..() + for(var/obj/item/device/perfect_tele_beacon/stationary/nb in premade_tele_beacons) + if(nb.tele_network == loc_network) + beacons[nb.tele_name] = nb + +/obj/item/device/perfect_tele/frontier/staff/teleport_checks(mob/living/target,mob/living/user) + //Uhhuh, need that power source + if(!power_source) + to_chat(user,"\The [src] has no power source!") + return FALSE + + //Check for charge + if((!power_source.check_charge(charge_cost)) && (!power_source.fully_charged())) + to_chat(user,"\The [src] does not have enough power left!") + return FALSE + + //Only mob/living need apply. + if(!istype(user) || !istype(target)) + return FALSE + + //No, you can't teleport buckled people. + if(target.buckled) + to_chat(user,"The target appears to be attached to something...") + return FALSE + + //No, you can't teleport if it's not ready yet. + if(!ready) + to_chat(user,"\The [src] is still recharging!") + return FALSE + + //No, you can't teleport if there's no destination. + if(!destination) + to_chat(user,"\The [src] doesn't have a current valid destination set!") + return FALSE + + //No, you can't teleport if there's a jammer. + if(is_jammed(src) || is_jammed(destination)) + to_chat(user,"\The [src] refuses to teleport you, due to strong interference!") + return FALSE + + //Can port to and from away areas (required for this to work) but teleporter blockers block it + var/turf/uT = get_turf(user) + var/turf/dT = get_turf(destination) + if(!uT || !dT) + return FALSE + + if(uT.block_tele || dT.block_tele) + to_chat(user,"Something is interfering with \the [src]!") + return FALSE + + //Seems okay to me! + return TRUE diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 25dfc5d6c7e..3541ddca4f4 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -1235,394 +1235,6 @@ slot_flags = SLOT_TIE slot = ACCESSORY_SLOT_DECOR -//The perfect adminboos device? -/obj/item/device/perfect_tele - name = "personal translocator" - desc = "Seems absurd, doesn't it? Yet, here we are. Generally considered dangerous contraband unless the user has permission from Central Command." - icon = 'icons/obj/device_alt.dmi' - icon_state = "hand_tele" - w_class = ITEMSIZE_SMALL - origin_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 5, TECH_ILLEGAL = 7) - - var/cell_type = /obj/item/weapon/cell/device/weapon - var/obj/item/weapon/cell/power_source - var/charge_cost = 800 // cell/device/weapon has 2400 - - var/list/beacons = list() - var/ready = 1 - var/beacons_left = 3 - var/failure_chance = 5 //Percent - var/obj/item/device/perfect_tele_beacon/destination - var/datum/effect/effect/system/spark_spread/spk - var/list/warned_users = list() - var/list/logged_events = list() - -/obj/item/device/perfect_tele/New() - ..() - flags |= NOBLUDGEON - if(cell_type) - power_source = new cell_type(src) - else - power_source = new /obj/item/weapon/cell/device(src) - spk = new(src) - spk.set_up(5, 0, src) - spk.attach(src) - -/obj/item/device/perfect_tele/Destroy() - // Must clear the beacon's backpointer or we won't GC. Someday maybe do something nicer even. - for(var/obj/item/device/perfect_tele_beacon/B in beacons) - B.tele_hand = null - beacons.Cut() - QDEL_NULL(power_source) - QDEL_NULL(spk) - return ..() - -/obj/item/device/perfect_tele/update_icon() - if(!power_source) - icon_state = "[initial(icon_state)]_o" - else if(ready && (power_source.check_charge(charge_cost) || power_source.fully_charged())) - icon_state = "[initial(icon_state)]" - else - icon_state = "[initial(icon_state)]_w" - - ..() - -/obj/item/device/perfect_tele/attack_hand(mob/user) - if(user.get_inactive_hand() == src && power_source) - to_chat(user,"You eject \the [power_source] from \the [src].") - user.put_in_hands(power_source) - power_source = null - update_icon() - else - return ..() - -/obj/item/device/perfect_tele/attack_self(mob/user) - if(!(user.ckey in warned_users)) - warned_users |= user.ckey - alert(user,"This device can be easily used to break ERP preferences due to the nature of teleporting \ - and tele-vore. Make sure you carefully examine someone's OOC prefs before teleporting them if you are \ - going to use this device for ERP purposes. This device records all warnings given and teleport events for \ - admin review in case of pref-breaking, so just don't do it.","OOC WARNING") - - var/choice = alert(user,"What do you want to do?","[src]","Create Beacon","Cancel","Target Beacon") - switch(choice) - if("Create Beacon") - if(beacons_left <= 0) - alert("The translocator can't support any more beacons!","Error") - return - - var/new_name = html_encode(input(user,"New beacon's name (2-20 char):","[src]") as text|null) - - if(length(new_name) > 20 || length(new_name) < 2) - alert("Entered name length invalid (must be longer than 2, no more than than 20).","Error") - return - if(new_name in beacons) - alert("No duplicate names, please. '[new_name]' exists already.","Error") - return - - var/obj/item/device/perfect_tele_beacon/nb = new(get_turf(src)) - nb.tele_name = new_name - nb.tele_hand = src - nb.creator = user.ckey - beacons[new_name] = nb - beacons_left-- - if(isliving(user)) - var/mob/living/L = user - L.put_in_any_hand_if_possible(nb) - - if("Target Beacon") - if(!beacons.len) - to_chat(user,"\The [src] doesn't have any beacons!") - else - var/target = input("Which beacon do you target?","[src]") in beacons|null - if(target && (target in beacons)) - destination = beacons[target] - to_chat(user,"Destination set to '[target]'.") - else - return - -/obj/item/device/perfect_tele/attackby(obj/W, mob/user) - if(istype(W,cell_type) && !power_source) - power_source = W - power_source.update_icon() //Why doesn't a cell do this already? :| - user.unEquip(power_source) - power_source.forceMove(src) - to_chat(user,"You insert \the [power_source] into \the [src].") - update_icon() - - else if(istype(W,/obj/item/device/perfect_tele_beacon)) - var/obj/item/device/perfect_tele_beacon/tb = W - if(tb.tele_name in beacons) - to_chat(user,"You re-insert \the [tb] into \the [src].") - beacons -= tb.tele_name - user.unEquip(tb) - qdel(tb) - beacons_left++ - else - to_chat(user,"\The [tb] doesn't belong to \the [src].") - return - else - ..() - -/obj/item/device/perfect_tele/proc/teleport_checks(mob/living/target,mob/living/user) - //Uhhuh, need that power source - if(!power_source) - to_chat(user,"\The [src] has no power source!") - return FALSE - - //Check for charge - if((!power_source.check_charge(charge_cost)) && (!power_source.fully_charged())) - to_chat(user,"\The [src] does not have enough power left!") - return FALSE - - //Only mob/living need apply. - if(!istype(user) || !istype(target)) - return FALSE - - //No, you can't teleport buckled people. - if(target.buckled) - to_chat(user,"The target appears to be attached to something...") - return FALSE - - //No, you can't teleport if it's not ready yet. - if(!ready) - to_chat(user,"\The [src] is still recharging!") - return FALSE - - //No, you can't teleport if there's no destination. - if(!destination) - to_chat(user,"\The [src] doesn't have a current valid destination set!") - return FALSE - - //No, you can't teleport if there's a jammer. - if(is_jammed(src) || is_jammed(destination)) - to_chat(user,"\The [src] refuses to teleport you, due to strong interference!") - return FALSE - - //No, you can't port to or from away missions. Stupidly complicated check. - var/turf/uT = get_turf(user) - var/turf/dT = get_turf(destination) - var/list/dat = list() - dat["z_level_detection"] = using_map.get_map_levels(uT.z) - - if(!uT || !dT) - return FALSE - - if( (uT.z != dT.z) && (!(dT.z in dat["z_level_detection"])) ) - to_chat(user,"\The [src] can't teleport you that far!") - return FALSE - - if(uT.block_tele || dT.block_tele) - to_chat(user,"Something is interfering with \the [src]!") - return FALSE - - //Seems okay to me! - return TRUE - -/obj/item/device/perfect_tele/afterattack(mob/living/target, mob/living/user, proximity) - //No, you can't teleport people from over there. - if(!proximity) - return - - if(!teleport_checks(target,user)) - return //The checks proc can send them a message if it wants. - - //Bzzt. - ready = 0 - power_source.use(charge_cost) - - //Failure chance - if(prob(failure_chance) && beacons.len >= 2) - var/list/wrong_choices = beacons - destination.tele_name - var/wrong_name = pick(wrong_choices) - destination = beacons[wrong_name] - to_chat(user,"\The [src] malfunctions and sends you to the wrong beacon!") - - //Destination beacon vore checking - var/turf/dT = get_turf(destination) - var/atom/real_dest = dT - - var/atom/real_loc = destination.loc - if(isbelly(real_loc)) - real_dest = real_loc - if(isliving(real_loc)) - var/mob/living/L = real_loc - if(L.vore_selected) - real_dest = L.vore_selected - else if(L.vore_organs.len) - real_dest = pick(L.vore_organs) - - //Confirm televore - var/televored = FALSE - if(isbelly(real_dest)) - var/obj/belly/B = real_dest - if(!target.can_be_drop_prey && B.owner != user) - to_chat(target,"\The [src] narrowly avoids teleporting you right into \a [lowertext(real_dest.name)]!") - real_dest = dT //Nevermind! - else - televored = TRUE - to_chat(target,"\The [src] teleports you right into \a [lowertext(real_dest.name)]!") - - //Phase-out effect - phase_out(target,get_turf(target)) - - //Move them - target.forceMove(real_dest) - - //Phase-in effect - phase_in(target,get_turf(target)) - - //And any friends! - for(var/obj/item/weapon/grab/G in target.contents) - if(G.affecting && (G.state >= GRAB_AGGRESSIVE)) - - //Phase-out effect for grabbed person - phase_out(G.affecting,get_turf(G.affecting)) - - //Move them, and televore if necessary - G.affecting.forceMove(real_dest) - if(televored) - to_chat(target,"\The [src] teleports you right into \a [lowertext(real_dest.name)]!") - - //Phase-in effect for grabbed person - phase_in(G.affecting,get_turf(G.affecting)) - - update_icon() - spawn(30 SECONDS) - ready = 1 - update_icon() - - logged_events["[world.time]"] = "[user] teleported [target] to [real_dest] [televored ? "(Belly: [lowertext(real_dest.name)])" : null]" - -/obj/item/device/perfect_tele/proc/phase_out(var/mob/M,var/turf/T) - - if(!M || !T) - return - - spk.set_up(5, 0, M) - spk.attach(M) - playsound(T, "sparks", 50, 1) - anim(T,M,'icons/mob/mob.dmi',,"phaseout",,M.dir) - -/obj/item/device/perfect_tele/proc/phase_in(var/mob/M,var/turf/T) - - if(!M || !T) - return - - spk.start() - playsound(T, 'sound/effects/phasein.ogg', 25, 1) - playsound(T, 'sound/effects/sparks2.ogg', 50, 1) - anim(T,M,'icons/mob/mob.dmi',,"phasein",,M.dir) - spk.set_up(5, 0, src) - spk.attach(src) - -/obj/item/device/perfect_tele_beacon - name = "translocator beacon" - desc = "That's unusual." - icon = 'icons/obj/device_alt.dmi' - icon_state = "motion2" - w_class = ITEMSIZE_TINY - - var/tele_name - var/obj/item/device/perfect_tele/tele_hand - var/creator - var/warned_users = list() - -/obj/item/device/perfect_tele_beacon/New() - ..() - flags |= NOBLUDGEON - -/obj/item/device/perfect_tele_beacon/Destroy() - tele_name = null - tele_hand = null - return ..() - -/obj/item/device/perfect_tele_beacon/attack_hand(mob/user) - if((user.ckey != creator) && !(user.ckey in warned_users)) - warned_users |= user.ckey - var/choice = alert(user,"This device is a translocator beacon. Having it on your person may mean that anyone \ - who teleports to this beacon gets teleported into your selected vore-belly. If you are prey-only \ - or don't wish to potentially have a random person teleported into you, it's suggested that you \ - not carry this around.","OOC WARNING","Take It","Leave It") - if(choice == "Leave It") - return - - ..() - -/obj/item/device/perfect_tele_beacon/attack_self(mob/user) - if(!isliving(user)) - return - var/mob/living/L = user - var/confirm = alert(user, "You COULD eat the beacon...", "Eat beacon?", "Eat it!", "No, thanks.") - if(confirm == "Eat it!") - var/obj/belly/bellychoice = input("Which belly?","Select A Belly") as null|anything in L.vore_organs - if(bellychoice) - user.visible_message("[user] is trying to stuff \the [src] into [user.gender == MALE ? "his" : user.gender == FEMALE ? "her" : "their"] [bellychoice]!","You begin putting \the [src] into your [bellychoice]!") - if(do_after(user,5 SECONDS,src)) - user.unEquip(src) - forceMove(bellychoice) - user.visible_message("[user] eats a telebeacon!","You eat the the beacon!") - -// A single-beacon variant for use by miners (or whatever) -/obj/item/device/perfect_tele/one_beacon - name = "mini-translocator" - desc = "A more limited translocator with a single beacon, useful for some things, like setting the mining department on fire accidentally. Legal for use in the pursuit of NanoTrasen interests, namely mining and exploration." - icon_state = "minitrans" - beacons_left = 1 //Just one - cell_type = /obj/item/weapon/cell/device - origin_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 5) - -/* -/obj/item/device/perfect_tele/one_beacon/teleport_checks(mob/living/target,mob/living/user) - var/turf/T = get_turf(destination) - if(T && user.z != T.z) - to_chat(user,"\The [src] is too far away from the beacon. Try getting closer first!") - return FALSE - return ..() -*/ - -/obj/item/device/perfect_tele/admin - name = "alien translocator" - desc = "This strange device allows one to teleport people and objects across large distances." - - cell_type = /obj/item/weapon/cell/device/weapon/recharge/alien - charge_cost = 400 - beacons_left = 6 - failure_chance = 0 //Percent - -/obj/item/device/perfect_tele/admin/teleport_checks(mob/living/target,mob/living/user) - //Uhhuh, need that power source - if(!power_source) - to_chat(user,"\The [src] has no power source!") - return FALSE - - //Check for charge - if((!power_source.check_charge(charge_cost)) && (!power_source.fully_charged())) - to_chat(user,"\The [src] does not have enough power left!") - return FALSE - - //Only mob/living need apply. - if(!istype(user) || !istype(target)) - return FALSE - - //No, you can't teleport buckled people. - if(target.buckled) - to_chat(user,"The target appears to be attached to something...") - return FALSE - - //No, you can't teleport if it's not ready yet. - if(!ready) - to_chat(user,"\The [src] is still recharging!") - return FALSE - - //No, you can't teleport if there's no destination. - if(!destination) - to_chat(user,"\The [src] doesn't have a current valid destination set!") - return FALSE - - //Seems okay to me! - return TRUE - //InterroLouis: Ruda Lizden /obj/item/clothing/accessory/badge/holo/detective/ruda name = "Hisstective's Badge" diff --git a/icons/obj/radio_vr.dmi b/icons/obj/radio_vr.dmi index 77d695cf23c..88d6011a7fd 100644 Binary files a/icons/obj/radio_vr.dmi and b/icons/obj/radio_vr.dmi differ diff --git a/maps/tether/tether-10-colony.dmm b/maps/tether/tether-10-colony.dmm index a461b3926bc..b89733b8467 100644 --- a/maps/tether/tether-10-colony.dmm +++ b/maps/tether/tether-10-colony.dmm @@ -3355,6 +3355,14 @@ name = "plating" }, /area/centcom/control) +"gi" = ( +/obj/structure/table/woodentable, +/obj/item/modular_computer/laptop/preset/custom_loadout/elite, +/obj/machinery/status_display{ + pixel_y = -29 + }, +/turf/simulated/floor/wood, +/area/houseboat) "gj" = ( /obj/machinery/computer/HolodeckControl/holodorm/one, /obj/effect/floor_decal/spline/plain{ @@ -4482,6 +4490,11 @@ }, /turf/unsimulated/floor/steel, /area/centcom/evac) +"iR" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/storage/box/gloves, +/turf/simulated/floor/tiled/white, +/area/houseboat) "iT" = ( /obj/structure/table/rack, /obj/item/clothing/under/color/red, @@ -4715,9 +4728,7 @@ /turf/unsimulated/floor/steel, /area/centcom/evac) "jt" = ( -/obj/structure/table/rack/shelf, -/obj/item/device/defib_kit/compact/combat/loaded, -/obj/item/device/defib_kit/compact/combat/loaded, +/obj/structure/closet/secure_closet/medical3, /turf/simulated/floor/tiled/white, /area/houseboat) "ju" = ( @@ -5739,6 +5750,27 @@ }, /turf/unsimulated/floor/steel, /area/centcom/security) +"lk" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/box/evidence, +/obj/item/weapon/storage/box/handcuffs{ + pixel_x = 6; + pixel_y = -2 + }, +/obj/item/clothing/accessory/storage/pouches/large/blue, +/obj/item/clothing/accessory/storage/pouches/large/blue, +/obj/item/clothing/accessory/storage/pouches/large/blue, +/obj/item/clothing/accessory/storage/pouches/large/blue, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) +"lm" = ( +/obj/structure/table/woodentable, +/obj/item/modular_computer/laptop/preset/custom_loadout/elite, +/obj/machinery/status_display{ + pixel_y = 29 + }, +/turf/simulated/floor/wood, +/area/houseboat) "lo" = ( /obj/item/weapon/stool/padded, /turf/unsimulated/floor/steel{ @@ -16133,7 +16165,6 @@ /turf/simulated/floor/bluegrid, /area/houseboat) "Du" = ( -/obj/structure/table/rack/shelf, /obj/item/weapon/gun/energy/gun, /obj/item/weapon/gun/energy/gun, /obj/item/weapon/gun/energy/gun, @@ -16146,6 +16177,7 @@ /obj/item/weapon/cell/device/weapon, /obj/item/weapon/cell/device/weapon, /obj/item/weapon/cell/device/weapon, +/obj/structure/closet/secure_closet/guncabinet, /turf/simulated/floor/tiled/techmaint, /area/houseboat) "Dx" = ( @@ -16157,11 +16189,7 @@ /turf/simulated/shuttle/plating/airless/carry, /area/shuttle/specialops/centcom) "Dy" = ( -/obj/structure/table/rack/shelf, -/obj/item/device/healthanalyzer/advanced, -/obj/item/device/healthanalyzer/advanced, -/obj/item/device/healthanalyzer/advanced, -/obj/item/device/healthanalyzer/advanced, +/obj/structure/closet/secure_closet/sar, /turf/simulated/floor/tiled/white, /area/houseboat) "DB" = ( @@ -16191,6 +16219,13 @@ /obj/machinery/cell_charger, /turf/simulated/floor/tiled/techmaint, /area/houseboat) +"DQ" = ( +/obj/structure/closet/wardrobe/ert, +/obj/item/weapon/storage/box/survival/comp{ + starts_with = list(/obj/item/weapon/tool/prybar/red,/obj/item/clothing/glasses/goggles,/obj/item/weapon/reagent_containers/hypospray/autoinjector,/obj/item/stack/medical/bruise_pack,/obj/item/device/flashlight/glowstick,/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar,/obj/item/clothing/mask/breath,/obj/item/weapon/tank/emergency/oxygen/engi) + }, +/turf/simulated/floor/wood, +/area/houseboat) "DT" = ( /obj/structure/table/rack/shelf, /obj/item/rig_module/device/drill, @@ -16224,8 +16259,14 @@ /area/houseboat) "Ec" = ( /obj/structure/table/rack/shelf, -/obj/item/weapon/storage/backpack/dufflebag/syndie/med, -/obj/item/weapon/storage/backpack/dufflebag/syndie/med, +/obj/item/device/healthanalyzer/advanced, +/obj/item/device/healthanalyzer/advanced, +/obj/item/device/healthanalyzer/advanced, +/obj/item/device/healthanalyzer/advanced, +/obj/item/weapon/reagent_containers/hypospray, +/obj/item/weapon/reagent_containers/hypospray, +/obj/item/weapon/reagent_containers/hypospray, +/obj/item/weapon/reagent_containers/hypospray, /turf/simulated/floor/tiled/white, /area/houseboat) "En" = ( @@ -16272,6 +16313,14 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/houseboat) +"EH" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/glasses/hud/security, +/obj/item/clothing/glasses/hud/security, +/obj/item/clothing/glasses/hud/security, +/obj/item/clothing/glasses/hud/security, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) "EI" = ( /obj/structure/table/rack, /obj/item/weapon/gun/launcher/rocket, @@ -16322,6 +16371,17 @@ "Fg" = ( /turf/simulated/floor/tiled/steel_grid, /area/houseboat) +"Fh" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/chemical_dispenser/bar_alc/full, +/turf/simulated/floor/wood, +/area/houseboat) +"Fi" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) "Fj" = ( /obj/machinery/power/emitter, /turf/unsimulated/floor{ @@ -16329,7 +16389,6 @@ }, /area/centcom/control) "Fl" = ( -/obj/structure/table/rack/shelf, /obj/item/weapon/gun/energy/laser, /obj/item/weapon/gun/energy/laser, /obj/item/weapon/gun/energy/laser, @@ -16342,6 +16401,7 @@ /obj/item/weapon/cell/device/weapon, /obj/item/weapon/cell/device/weapon, /obj/item/weapon/cell/device/weapon, +/obj/structure/closet/secure_closet/guncabinet, /turf/simulated/floor/tiled/techmaint, /area/houseboat) "Fo" = ( @@ -16447,6 +16507,10 @@ name = "Holodeck Projector Floor" }, /area/houseboat) +"Gd" = ( +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/wood, +/area/houseboat) "Ge" = ( /obj/machinery/seed_storage/xenobotany, /turf/simulated/floor/tiled/techmaint, @@ -16478,8 +16542,11 @@ icon_state = "dark" }, /area/centcom/control) +"Gp" = ( +/obj/machinery/chem_master/condimaster, +/turf/simulated/floor/tiled/white, +/area/houseboat) "Gs" = ( -/obj/structure/table/rack/shelf, /obj/item/ammo_magazine/m9mm/large/preban, /obj/item/ammo_magazine/m9mm/large/preban, /obj/item/ammo_magazine/m9mm/large/preban, @@ -16492,17 +16559,13 @@ /obj/item/weapon/gun/projectile/p92x, /obj/item/weapon/gun/projectile/p92x, /obj/item/weapon/gun/projectile/p92x, +/obj/structure/closet/secure_closet/guncabinet, /turf/simulated/floor/tiled/techmaint, /area/houseboat) "Gu" = ( /obj/machinery/door/airlock/highsecurity, /turf/simulated/floor/tiled/techmaint, /area/houseboat) -"Gy" = ( -/obj/machinery/cooker/candy, -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/white, -/area/houseboat) "GB" = ( /obj/structure/table/steel_reinforced, /obj/item/device/camera, @@ -16540,6 +16603,10 @@ }, /turf/unsimulated/floor/steel, /area/centcom/living) +"GX" = ( +/obj/machinery/vending/fitness, +/turf/simulated/floor/wood, +/area/houseboat) "GY" = ( /obj/structure/bed/chair/shuttle{ dir = 8 @@ -16739,7 +16806,6 @@ /turf/simulated/floor/tiled/white, /area/centcom/medical) "Iv" = ( -/obj/structure/table/rack/shelf, /obj/item/weapon/gun/energy/frontier/locked/carbine, /obj/item/weapon/gun/energy/frontier/locked/carbine, /obj/item/weapon/gun/energy/frontier/locked/carbine, @@ -16748,6 +16814,7 @@ /obj/item/weapon/gun/energy/frontier/locked/holdout, /obj/item/weapon/gun/energy/frontier/locked/holdout, /obj/item/weapon/gun/energy/frontier/locked/holdout, +/obj/structure/closet/secure_closet/guncabinet, /turf/simulated/floor/tiled/techmaint, /area/houseboat) "Ix" = ( @@ -16786,7 +16853,6 @@ /turf/simulated/floor/tiled/white, /area/houseboat) "ID" = ( -/obj/structure/table/rack/shelf, /obj/item/weapon/storage/box/flashshells, /obj/item/weapon/storage/box/flashshells, /obj/item/weapon/storage/box/stunshells, @@ -16805,6 +16871,7 @@ /obj/item/weapon/storage/box/shotgunshells/large, /obj/item/weapon/gun/projectile/shotgun/pump/combat, /obj/item/weapon/gun/projectile/shotgun/pump/combat, +/obj/structure/closet/secure_closet/guncabinet, /turf/simulated/floor/tiled/techmaint, /area/houseboat) "IH" = ( @@ -16836,6 +16903,12 @@ }, /turf/unsimulated/floor/steel, /area/centcom/evac) +"Je" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) "Jk" = ( /obj/machinery/computer/gyrotron_control, /turf/simulated/floor/tiled/steel_grid, @@ -16907,6 +16980,13 @@ icon_state = "dark" }, /area/centcom/specops) +"JM" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/table/bench/steel, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) "JN" = ( /obj/structure/table/steel_reinforced, /obj/item/weapon/storage/box/pillbottles, @@ -16915,10 +16995,22 @@ /obj/item/weapon/storage/box/syringes, /obj/item/weapon/storage/box/syringes, /obj/item/weapon/tool/screwdriver, +/obj/item/weapon/storage/box/pillbottles, +/obj/item/weapon/storage/box/pillbottles, /turf/simulated/floor/tiled/white, /area/houseboat) "JR" = ( /obj/structure/table/rack/shelf, +/obj/item/clothing/accessory/storage/white_vest, +/obj/item/clothing/accessory/storage/white_vest, +/obj/item/clothing/accessory/storage/white_vest, +/obj/item/clothing/accessory/storage/white_vest, +/obj/item/clothing/accessory/storage/white_drop_pouches, +/obj/item/clothing/accessory/storage/white_drop_pouches, +/obj/item/clothing/accessory/storage/white_drop_pouches, +/obj/item/clothing/accessory/storage/white_drop_pouches, +/obj/item/weapon/storage/backpack/dufflebag/syndie/med, +/obj/item/weapon/storage/backpack/dufflebag/syndie/med, /turf/simulated/floor/tiled/white, /area/houseboat) "JV" = ( @@ -17100,6 +17192,22 @@ }, /turf/unsimulated/floor/steel, /area/centcom/living) +"KP" = ( +/obj/machinery/biogenerator, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) +"KV" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/box/flashbangs{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) "KY" = ( /obj/effect/floor_decal/derelict/d15, /turf/unsimulated/floor/steel, @@ -17127,6 +17235,14 @@ /obj/structure/table/steel_reinforced, /turf/simulated/floor/tiled/white, /area/houseboat) +"Ll" = ( +/obj/structure/closet/secure_closet/detective, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) +"Lo" = ( +/obj/machinery/vending/snack, +/turf/simulated/floor/wood, +/area/houseboat) "Ls" = ( /obj/machinery/disposal, /turf/simulated/floor/tiled/white, @@ -17186,6 +17302,16 @@ /obj/structure/table/steel_reinforced, /turf/simulated/floor/tiled/white, /area/houseboat) +"Lz" = ( +/obj/structure/closet/crate/freezer/rations, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/turf/simulated/floor/wood, +/area/houseboat) "LD" = ( /obj/machinery/portable_atmospherics/powered/scrubber, /turf/unsimulated/floor{ @@ -17278,6 +17404,15 @@ }, /turf/simulated/floor/carpet/blue, /area/houseboat) +"Ml" = ( +/obj/structure/closet/secure_closet/personal, +/turf/simulated/floor/wood, +/area/houseboat) +"Mr" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/chemical_dispenser/bar_coffee/full, +/turf/simulated/floor/wood, +/area/houseboat) "Mt" = ( /obj/structure/table/rack, /obj/item/weapon/extinguisher/mini, @@ -17292,6 +17427,12 @@ "Mu" = ( /turf/simulated/floor/carpet/blue, /area/houseboat) +"Mv" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/houseboat) "Mw" = ( /obj/machinery/shield_gen/external, /turf/unsimulated/floor{ @@ -17323,27 +17464,63 @@ stripe_color = "#45b3d8" }, /area/houseboat) +"ML" = ( +/obj/machinery/vending/dinnerware, +/turf/simulated/floor/wood, +/area/houseboat) "MO" = ( /obj/machinery/chem_master, /turf/simulated/floor/tiled/white, /area/houseboat) +"MP" = ( +/obj/structure/closet/secure_closet/nanotrasen_commander, +/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hos, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) +"MT" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/book/manual/chef_recipes, +/obj/item/weapon/reagent_containers/food/condiment/enzyme{ + layer = 5 + }, +/obj/item/weapon/reagent_containers/food/condiment/enzyme{ + layer = 5 + }, +/obj/item/weapon/material/knife/butch, +/obj/item/weapon/material/kitchen/rollingpin, +/turf/simulated/floor/tiled/white, +/area/houseboat) "MX" = ( /obj/effect/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/houseboat) +"MZ" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/reagentgrinder, +/obj/item/weapon/storage/box/beakers, +/turf/simulated/floor/tiled/white, +/area/houseboat) "Nd" = ( /obj/effect/floor_decal/industrial/warning/dust/corner, /obj/machinery/light/flamp/noshade, /turf/unsimulated/floor/steel, /area/centcom/evac) +"Ng" = ( +/obj/machinery/vending/fitness, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) "Nh" = ( /obj/effect/floor_decal/spline/plain{ dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/houseboat) +"Ni" = ( +/obj/machinery/vending/cola, +/turf/simulated/floor/wood, +/area/houseboat) "Nj" = ( /obj/structure/table/steel_reinforced, /obj/item/device/defib_kit/compact/combat/loaded, @@ -17369,6 +17546,10 @@ }, /turf/simulated/floor/tiled/white, /area/houseboat) +"Nw" = ( +/obj/machinery/vending/hydronutrients, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) "Nx" = ( /obj/structure/table/rack, /obj/item/weapon/plastique, @@ -17391,6 +17572,22 @@ }, /turf/simulated/floor/tiled/techmaint, /area/houseboat) +"ND" = ( +/obj/structure/table/rack/shelf, +/obj/item/clothing/accessory/storage/black_vest, +/obj/item/clothing/accessory/storage/black_vest, +/obj/item/clothing/accessory/storage/black_vest, +/obj/item/clothing/accessory/storage/black_vest, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/clothing/accessory/storage/black_drop_pouches, +/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo, +/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo, +/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo, +/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) "NE" = ( /obj/structure/table/steel_reinforced, /obj/machinery/door/window/westleft, @@ -17426,9 +17623,9 @@ "NO" = ( /obj/item/weapon/gun/energy/gun/nuclear, /obj/item/weapon/gun/energy/gun/nuclear, -/obj/structure/table/rack/shelf, /obj/item/weapon/gun/energy/gun/nuclear, /obj/item/weapon/gun/energy/gun/nuclear, +/obj/structure/closet/secure_closet/guncabinet, /turf/simulated/floor/tiled/techmaint, /area/houseboat) "NR" = ( @@ -17588,8 +17785,20 @@ "OW" = ( /obj/machinery/cooker/fryer, /obj/structure/table/steel_reinforced, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/houseboat) +"OX" = ( +/obj/structure/sink/kitchen, +/turf/simulated/shuttle/wall/voidcraft/blue{ + hard_corner = 1; + icon_state = "void-hc"; + name = "small craft wall hc"; + stripe_color = "#45b3d8" + }, +/area/houseboat) "Pc" = ( /obj/machinery/status_display{ pixel_y = 29 @@ -17610,8 +17819,14 @@ /area/centcom/evac) "Pm" = ( /obj/structure/table/rack/shelf, -/obj/item/weapon/rig/ert/medical, -/obj/item/weapon/rig/ert/medical, +/obj/item/weapon/storage/belt/medical/emt, +/obj/item/weapon/storage/belt/medical/emt, +/obj/item/weapon/storage/belt/medical/emt, +/obj/item/weapon/storage/belt/medical/emt, +/obj/item/weapon/storage/belt/medical/emt, +/obj/item/weapon/storage/belt/medical/emt, +/obj/item/device/defib_kit/compact/combat/loaded, +/obj/item/device/defib_kit/compact/combat/loaded, /turf/simulated/floor/tiled/white, /area/houseboat) "Po" = ( @@ -17662,16 +17877,30 @@ /obj/item/weapon/storage/backpack/ert/engineer, /turf/simulated/floor/tiled/techmaint, /area/houseboat) +"Pu" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/retail_scanner/security, +/obj/item/device/retail_scanner/security, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) "Pz" = ( /obj/structure/closet/crate/secure/weapon, /obj/item/weapon/rig/ert/assetprotection, /obj/item/weapon/rig/ert/assetprotection, /obj/item/clothing/glasses/thermal, /obj/item/clothing/glasses/thermal, -/obj/item/weapon/gun/energy/protector, -/obj/item/weapon/gun/energy/protector, -/obj/item/weapon/cell/device/weapon, -/obj/item/weapon/cell/device/weapon, +/obj/item/clothing/suit/armor/pcarrier/merc, +/obj/item/clothing/suit/armor/pcarrier/merc, +/obj/item/clothing/head/helmet/merc, +/obj/item/clothing/head/helmet/merc, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) +"PC" = ( +/obj/structure/table/rack/shelf, +/obj/item/clothing/suit/armor/pcarrier/blue/sol, +/obj/item/clothing/suit/armor/pcarrier/blue/sol, +/obj/item/clothing/suit/armor/pcarrier/blue/sol, +/obj/item/clothing/suit/armor/pcarrier/blue/sol, /turf/simulated/floor/tiled/techmaint, /area/houseboat) "PI" = ( @@ -17696,6 +17925,9 @@ "PO" = ( /obj/machinery/cooker/oven, /obj/structure/table/steel_reinforced, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/houseboat) "PP" = ( @@ -17703,9 +17935,10 @@ icon_state = "dark" }, /area/centcom/control) -"PQ" = ( -/obj/machinery/vending/dinnerware, -/turf/simulated/floor/tiled/white, +"PS" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/chemical_dispenser/bar_soft/full, +/turf/simulated/floor/wood, /area/houseboat) "PY" = ( /obj/structure/shuttle/engine/propulsion{ @@ -17734,6 +17967,10 @@ }, /turf/simulated/floor/tiled/techmaint, /area/houseboat) +"Qw" = ( +/obj/machinery/door/airlock/voidcraft/vertical, +/turf/simulated/floor/tiled/white, +/area/houseboat) "Qy" = ( /obj/structure/closet/crate/freezer, /turf/simulated/floor/tiled/white, @@ -17792,6 +18029,8 @@ /obj/item/weapon/storage/firstaid/adv{ pixel_x = -2 }, +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose, /turf/simulated/floor/tiled/white, /area/houseboat) "QQ" = ( @@ -17827,7 +18066,6 @@ }, /area/centcom/specops) "Rg" = ( -/obj/structure/closet/secure_closet/personal, /obj/machinery/button/remote/airlock{ id = "dorm1"; name = "Room 1 Lock"; @@ -17885,7 +18123,6 @@ /turf/simulated/floor/tiled/white, /area/houseboat) "RC" = ( -/obj/structure/table/rack/shelf, /obj/item/ammo_magazine/m9mm/compact, /obj/item/ammo_magazine/m9mm/compact, /obj/item/ammo_magazine/m9mm/compact, @@ -17904,6 +18141,7 @@ /obj/item/weapon/gun/projectile/pistol, /obj/item/weapon/gun/projectile/pistol, /obj/item/weapon/gun/projectile/pistol, +/obj/structure/closet/secure_closet/guncabinet, /turf/simulated/floor/tiled/techmaint, /area/houseboat) "RD" = ( @@ -17940,7 +18178,6 @@ /turf/simulated/floor/tiled/techmaint, /area/houseboat) "RI" = ( -/obj/structure/table/rack/shelf, /obj/item/ammo_magazine/m545/ap, /obj/item/ammo_magazine/m545/ap, /obj/item/ammo_magazine/m545/ap, @@ -17961,6 +18198,7 @@ /obj/item/weapon/gun/projectile/automatic/sts35, /obj/item/weapon/gun/projectile/automatic/sts35, /obj/item/weapon/gun/projectile/automatic/sts35, +/obj/structure/closet/secure_closet/guncabinet, /turf/simulated/floor/tiled/techmaint, /area/houseboat) "RJ" = ( @@ -17991,6 +18229,10 @@ icon_state = "dark" }, /area/centcom/control) +"RZ" = ( +/obj/machinery/vending/coffee, +/turf/simulated/floor/wood, +/area/houseboat) "Sc" = ( /obj/machinery/atm{ pixel_x = 0; @@ -18015,6 +18257,8 @@ /obj/item/weapon/cell/device/weapon, /obj/item/weapon/cell/device/weapon, /obj/item/weapon/cell/device/weapon, +/obj/item/weapon/gun/energy/protector, +/obj/item/weapon/gun/energy/protector, /turf/simulated/floor/tiled/techmaint, /area/houseboat) "Sg" = ( @@ -18064,6 +18308,22 @@ }, /turf/simulated/floor/tiled/techmaint, /area/houseboat) +"SE" = ( +/obj/machinery/vending/sovietsoda, +/turf/simulated/floor/wood, +/area/houseboat) +"SG" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/accessory/badge/holo/cord, +/obj/item/clothing/accessory/badge/holo/cord, +/obj/item/clothing/accessory/badge/holo/cord, +/obj/item/clothing/accessory/badge/holo/cord, +/obj/item/clothing/accessory/badge/holo, +/obj/item/clothing/accessory/badge/holo, +/obj/item/clothing/accessory/badge/holo, +/obj/item/clothing/accessory/badge/holo, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) "SJ" = ( /obj/structure/closet/crate/secure/weapon, /obj/item/weapon/storage/box/frags, @@ -18106,6 +18366,9 @@ "SW" = ( /obj/machinery/cooker/grill, /obj/structure/table/steel_reinforced, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/houseboat) "SY" = ( @@ -18118,7 +18381,6 @@ /turf/simulated/floor/tiled/techmaint, /area/houseboat) "Ta" = ( -/obj/structure/table/rack/shelf, /obj/item/ammo_magazine/m9mmp90, /obj/item/ammo_magazine/m9mmp90, /obj/item/ammo_magazine/m9mmp90, @@ -18137,6 +18399,7 @@ /obj/item/ammo_magazine/m9mmt/rubber, /obj/item/ammo_magazine/m9mmt/rubber, /obj/item/ammo_magazine/m9mmt/rubber, +/obj/structure/closet/secure_closet/guncabinet, /turf/simulated/floor/tiled/techmaint, /area/houseboat) "Te" = ( @@ -18160,7 +18423,10 @@ }, /area/houseboat) "Tn" = ( -/obj/machinery/biogenerator, +/obj/machinery/cooker/cereal, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 9 + }, /turf/simulated/floor/tiled/white, /area/houseboat) "Tp" = ( @@ -18187,13 +18453,13 @@ }, /area/centcom/specops) "Tz" = ( -/obj/structure/closet/secure_closet/warden, /obj/item/weapon/gun/projectile/shotgun/pump/combat{ ammo_type = /obj/item/ammo_casing/a12g/beanbag; desc = "Built for close quarters combat, the Hesphaistos Industries KS-40 is widely regarded as a weapon of choice for repelling boarders. This one has 'Property of the Warden' inscribed on the stock."; name = "warden's shotgun" }, /obj/item/weapon/book/manual/security_space_law, +/obj/structure/closet/secure_closet/nanotrasen_warden, /turf/simulated/floor/tiled/techmaint, /area/houseboat) "TC" = ( @@ -18308,6 +18574,11 @@ }, /turf/simulated/floor/tiled/techmaint, /area/houseboat) +"UA" = ( +/obj/item/device/holowarrant, +/obj/structure/closet/secure_closet/nanotrasen_security, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) "UC" = ( /obj/structure/table/steel_reinforced, /obj/item/stack/cable_coil, @@ -18413,6 +18684,30 @@ }, /obj/item/device/survivalcapsule/military, /obj/item/device/survivalcapsule/military, +/obj/item/weapon/storage/secure/briefcase/money{ + desc = "An sleek tidy briefcase."; + name = "secure briefcase" + }, +/obj/item/weapon/storage/secure/briefcase/money{ + desc = "An sleek tidy briefcase."; + name = "secure briefcase" + }, +/obj/item/weapon/storage/secure/briefcase/money{ + desc = "An sleek tidy briefcase."; + name = "secure briefcase" + }, +/obj/item/weapon/storage/secure/briefcase/money{ + desc = "An sleek tidy briefcase."; + name = "secure briefcase" + }, +/obj/item/weapon/storage/secure/briefcase/money{ + desc = "An sleek tidy briefcase."; + name = "secure briefcase" + }, +/obj/item/weapon/storage/secure/briefcase/money{ + desc = "An sleek tidy briefcase."; + name = "secure briefcase" + }, /turf/simulated/floor/tiled/techmaint, /area/houseboat) "UY" = ( @@ -18442,6 +18737,10 @@ }, /turf/simulated/floor/plating, /area/houseboat) +"UZ" = ( +/obj/machinery/vending/coffee, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) "Vd" = ( /obj/item/weapon/reagent_containers/glass/bucket, /obj/item/weapon/reagent_containers/glass/bucket, @@ -18468,6 +18767,10 @@ /obj/effect/floor_decal/derelict/d16, /turf/unsimulated/floor/steel, /area/centcom/evac) +"Vp" = ( +/obj/structure/table/bench/steel, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) "Vq" = ( /turf/unsimulated/wall/planetary/virgo3b, /area/centcom/bathroom) @@ -18551,6 +18854,17 @@ /obj/machinery/mineral/equipment_vendor/survey, /turf/simulated/floor/tiled/techmaint, /area/houseboat) +"Wb" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/white, +/area/houseboat) "Wc" = ( /obj/machinery/organ_printer/flesh, /turf/simulated/floor/tiled/white, @@ -18575,6 +18889,14 @@ /obj/machinery/suit_cycler, /turf/simulated/floor/tiled/techmaint, /area/houseboat) +"Ws" = ( +/obj/structure/table/rack/shelf, +/obj/item/clothing/head/helmet/solgov, +/obj/item/clothing/head/helmet/solgov, +/obj/item/clothing/head/helmet/solgov, +/obj/item/clothing/head/helmet/solgov, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) "WI" = ( /turf/simulated/floor/wood, /area/houseboat) @@ -18659,6 +18981,18 @@ }, /turf/simulated/floor/reinforced/airless, /area/houseboat) +"Xr" = ( +/obj/machinery/cooker/candy, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/houseboat) +"Xs" = ( +/obj/item/weapon/bedsheet/captaindouble, +/obj/structure/bed/double, +/turf/simulated/floor/wood, +/area/houseboat) "Xu" = ( /obj/structure/closet{ name = "materials" @@ -18728,6 +19062,15 @@ /obj/machinery/smartfridge, /turf/simulated/floor/tiled/techmaint, /area/houseboat) +"XP" = ( +/obj/machinery/vending/nifsoft_shop{ + categories = 111; + emagged = 1; + name = "Hacked NIFSoft Shop"; + prices = list() + }, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) "XR" = ( /obj/structure/table/steel_reinforced, /obj/fiftyspawner/steel, @@ -18745,6 +19088,23 @@ name = "Holodeck Projector Floor" }, /area/houseboat) +"XU" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/lockbox, +/obj/item/clothing/mask/gas{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/gas{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/gas{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) "XX" = ( /obj/structure/closet/crate/secure/weapon, /obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid_combat, @@ -18850,10 +19210,13 @@ /obj/item/device/multitool, /turf/simulated/floor/tiled/techmaint, /area/houseboat) -"Yt" = ( -/obj/machinery/cooker/cereal, -/obj/structure/table/steel_reinforced, -/turf/simulated/floor/tiled/white, +"Ys" = ( +/obj/structure/window/reinforced{ + dir = 4; + health = 1e+006 + }, +/obj/structure/table/bench/steel, +/turf/simulated/floor/tiled/techmaint, /area/houseboat) "Yv" = ( /obj/structure/table/rack/shelf, @@ -18864,6 +19227,10 @@ /obj/item/clothing/mask/breath, /turf/simulated/floor/tiled/techmaint, /area/houseboat) +"Yz" = ( +/obj/structure/closet/wardrobe/red, +/turf/simulated/floor/tiled/techmaint, +/area/houseboat) "YE" = ( /obj/machinery/shieldwallgen, /turf/unsimulated/floor{ @@ -18944,6 +19311,10 @@ /area/centcom/specops) "Zz" = ( /obj/effect/floor_decal/industrial/hatch/yellow, +/obj/item/device/perfect_tele_beacon/stationary{ + tele_name = "Mothership"; + tele_network = "centcom" + }, /turf/simulated/floor/tiled/techmaint, /area/houseboat) "ZC" = ( @@ -18961,13 +19332,7 @@ /turf/unsimulated/floor/steel, /area/centcom/evac) "ZK" = ( -/obj/structure/table/rack/shelf, -/obj/item/weapon/storage/belt/medical/emt, -/obj/item/weapon/storage/belt/medical/emt, -/obj/item/weapon/storage/belt/medical/emt, -/obj/item/weapon/storage/belt/medical/emt, -/obj/item/weapon/storage/belt/medical/emt, -/obj/item/weapon/storage/belt/medical/emt, +/obj/structure/closet/secure_closet/CMO, /turf/simulated/floor/tiled/white, /area/houseboat) "ZL" = ( @@ -18976,6 +19341,19 @@ name = "outer hull" }, /area/space) +"ZN" = ( +/obj/item/device/perfect_tele_beacon/stationary{ + tele_name = "CentCom"; + tele_network = "centcom" + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"ZP" = ( +/obj/machinery/disposal, +/turf/simulated/floor/wood, +/area/houseboat) "ZQ" = ( /obj/effect/floor_decal/steeldecal/steel_decals9{ dir = 1 @@ -20192,11 +20570,13 @@ MJ MJ UL Yc -LE +Yc Fx Gu Fx MJ +MJ +MJ ZL OF OF @@ -20267,8 +20647,6 @@ OF OF OF OF -OF -OF "} (10,1,1) = {" OF @@ -20338,6 +20716,8 @@ lE MJ Yc Yc +Yc +Yc Xq iJ OF @@ -20409,8 +20789,6 @@ OF OF OF OF -OF -OF "} (11,1,1) = {" OF @@ -20447,7 +20825,7 @@ MJ Ey OV OV -Li +iR MJ OV OV @@ -20480,6 +20858,8 @@ lE MJ Yc Yc +Yc +Yc Xq iJ OF @@ -20551,8 +20931,6 @@ OF OF OF OF -OF -OF "} (12,1,1) = {" OF @@ -20622,6 +21000,8 @@ Sg MJ Yc Yc +Yc +Yc Xq iJ OF @@ -20693,8 +21073,6 @@ OF OF OF OF -OF -OF "} (13,1,1) = {" OF @@ -20764,6 +21142,8 @@ Dq MJ Yc Yc +Yc +Yc Xq iJ OF @@ -20835,8 +21215,6 @@ OF OF OF OF -OF -OF "} (14,1,1) = {" OF @@ -20857,7 +21235,7 @@ Fx MJ MJ Ge -Dn +Nw MJ MJ Fx @@ -20867,8 +21245,8 @@ MJ MJ MJ MJ -Yc -Yc +Ml +Xs MJ OP DK @@ -20906,6 +21284,8 @@ XD MJ Yc Yc +Yc +Yc Xq iJ OF @@ -20977,8 +21357,6 @@ OF OF OF OF -OF -OF "} (15,1,1) = {" OF @@ -20995,12 +21373,12 @@ Fx WI WI WI -WI +RZ MJ -Vd +KP Yc Yc -LE +Dn MJ YV Yc @@ -21009,8 +21387,8 @@ MJ Yc Yc MJ -Yc -Yc +lm +Mv MJ MO YY @@ -21046,7 +21424,6 @@ Dq XD Dq MJ -Yc MJ MJ MJ @@ -21055,8 +21432,9 @@ MJ MJ MJ MJ -OF -OF +MJ +MJ +MJ OF OF OF @@ -21137,12 +21515,12 @@ Gu WI WI WI -WI +GX MJ -Uw +Vd Yc Yc -Uw +LE MJ Kh Yc @@ -21151,8 +21529,8 @@ MJ Yc Yc MJ -Yc -Yc +DQ +WI MJ NY Gh @@ -21194,6 +21572,8 @@ Yc Yc Yc Yc +Yc +Yc Gu Lu cJ @@ -21261,8 +21641,6 @@ OF OF OF OF -OF -OF "} (17,1,1) = {" OF @@ -21279,7 +21657,7 @@ Fx WI WI WI -WI +Ni MJ Uw Yc @@ -21294,7 +21672,7 @@ Yc MJ MJ MJ -Fg +Qw Fx MJ MJ @@ -21308,7 +21686,7 @@ Xe Li OV MJ -OV +GN OV OV Ls @@ -21336,6 +21714,8 @@ Yc Yc Yc Yc +Yc +Yc Fx MJ MJ @@ -21403,8 +21783,6 @@ OF OF OF OF -OF -OF "} (18,1,1) = {" OF @@ -21421,7 +21799,7 @@ WI WI WI WI -WI +Lo MJ Uw Yc @@ -21471,7 +21849,9 @@ Yc Yc Yc Yc -MJ +Yc +Yc +Yc Yc Yc Yc @@ -21545,8 +21925,6 @@ OF OF OF OF -OF -OF "} (19,1,1) = {" OF @@ -21563,7 +21941,7 @@ WI WI WI WI -WI +SE MJ Uw Yc @@ -21588,8 +21966,8 @@ Yc Yc Yc MJ -Yc -Yc +Xs +Ml MJ Ol Yc @@ -21597,8 +21975,8 @@ Yc Yc RU MJ -Yc -Yc +Xs +Ml MJ Yc Yc @@ -21613,7 +21991,9 @@ Yc Yc Yc Yc -MJ +Yc +Yc +Yc Yc Yc Yc @@ -21687,8 +22067,6 @@ OF OF OF OF -OF -OF "} (20,1,1) = {" OF @@ -21701,11 +22079,11 @@ OF OF ZL LR -Sx WI WI WI WI +Lz MJ Uw Yc @@ -21730,8 +22108,8 @@ Fx Yc Yc MJ -Yc -Yc +Gd +gi MJ Yc Yc @@ -21739,8 +22117,8 @@ Yc Yc Yc MJ -Yc -Yc +lm +Mv MJ Yc Yc @@ -21754,7 +22132,7 @@ MJ MJ Fx Yc -Yc +Je MJ Yc Yc @@ -21762,6 +22140,8 @@ Yc Yc Yc Yc +Yc +Yc Xq iJ OF @@ -21829,8 +22209,6 @@ OF OF OF OF -OF -OF "} (21,1,1) = {" OF @@ -21849,7 +22227,7 @@ Mu Mu Mu Fx -Fx +OX Yc Yc Fx @@ -21872,8 +22250,8 @@ MJ Yc Yc MJ -Yc -Yc +WI +DQ MJ QA QA @@ -21881,8 +22259,8 @@ QA QA QA MJ -Yc -Yc +DQ +WI MJ Yc Yc @@ -21896,7 +22274,7 @@ Fg Fg MJ Yc -Yc +RU MJ Yc Yc @@ -21904,6 +22282,8 @@ Yc Yc Yc Yc +Yc +Yc Xq iJ OF @@ -21971,8 +22351,6 @@ OF OF OF OF -OF -OF "} (22,1,1) = {" OF @@ -22014,7 +22392,7 @@ MJ Yc Yc MJ -Yc +Qw MJ MJ MJ @@ -22024,7 +22402,7 @@ MJ MJ MJ MJ -Yc +Qw MJ Yc Yc @@ -22038,7 +22416,7 @@ Mf Mf MJ Yc -Yc +Fi MJ Yc Yc @@ -22046,6 +22424,8 @@ Yc Yc Yc Yc +Yc +Yc Xq iJ OF @@ -22113,8 +22493,6 @@ OF OF OF OF -OF -OF "} (23,1,1) = {" OF @@ -22180,6 +22558,8 @@ Ft Xj MJ Yc +Ng +MJ Yc Yc Yc @@ -22255,8 +22635,6 @@ OF OF OF OF -OF -OF "} (24,1,1) = {" OF @@ -22322,6 +22700,8 @@ EG iA MJ Yc +UZ +MJ Yc Yc Yc @@ -22397,8 +22777,6 @@ OF OF OF OF -OF -OF "} (25,1,1) = {" OF @@ -22440,7 +22818,7 @@ MJ Yc Yc MJ -Yc +Qw MJ MJ MJ @@ -22450,7 +22828,7 @@ MJ MJ MJ MJ -Yc +Qw MJ Yc Yc @@ -22464,7 +22842,7 @@ GY GY MJ Yc -Yc +Je MJ Yc Yc @@ -22472,6 +22850,8 @@ Yc Yc Yc Yc +Yc +Yc Xq iJ OF @@ -22539,8 +22919,6 @@ OF OF OF OF -OF -OF "} (26,1,1) = {" OF @@ -22559,7 +22937,7 @@ Mu Mu Mu Fx -Fx +OX Yc Yc XN @@ -22582,8 +22960,8 @@ MJ Yc Yc MJ -Yc -Yc +WI +DQ MJ Yc Yc @@ -22591,8 +22969,8 @@ MJ Yc Yc MJ -Yc -Yc +DQ +WI MJ Yc Yc @@ -22606,7 +22984,7 @@ Fg Fg MJ Yc -Yc +RU MJ Yc Yc @@ -22614,6 +22992,8 @@ Yc Yc Yc Yc +Yc +Yc Xq iJ OF @@ -22681,8 +23061,6 @@ OF OF OF OF -OF -OF "} (27,1,1) = {" OF @@ -22699,9 +23077,9 @@ WI WI WI WI -WI +ML MJ -Hp +Gp OV OV OV @@ -22724,8 +23102,8 @@ Fx Yc Yc MJ -Yc -Yc +Gd +gi MJ Yc Yc @@ -22733,8 +23111,8 @@ MJ Yc Yc MJ -Yc -Yc +lm +Mv MJ Yc Yc @@ -22748,7 +23126,7 @@ MJ MJ Fx Yc -Yc +Fi MJ Yc Yc @@ -22756,6 +23134,8 @@ Yc Yc Yc Yc +Yc +Yc Xq iJ OF @@ -22823,8 +23203,6 @@ OF OF OF OF -OF -OF "} (28,1,1) = {" OF @@ -22841,9 +23219,9 @@ WI WI WI WI -WI +Fh MJ -PQ +Hp OV OV Tn @@ -22866,8 +23244,8 @@ Yc Yc Yc MJ -Yc -Yc +Xs +Ml MJ Yc Yc @@ -22875,8 +23253,8 @@ MJ Yc Yc MJ -Yc -Yc +Ml +Xs MJ Yc Yc @@ -22891,7 +23269,9 @@ Yc Yc Yc Yc -MJ +Yc +Yc +Yc Yc Yc Yc @@ -22965,8 +23345,6 @@ OF OF OF OF -OF -OF "} (29,1,1) = {" OF @@ -22979,7 +23357,7 @@ OF OF HQ MJ -WI +Sx WI WI WI @@ -23033,7 +23411,9 @@ Yc Yc Yc Yc -MJ +Yc +Yc +Yc Yc Yc Yc @@ -23107,8 +23487,6 @@ OF OF OF OF -OF -OF "} (30,1,1) = {" OF @@ -23125,9 +23503,9 @@ Fx WI WI WI -WI +PS MJ -Li +Wb OV OV PO @@ -23140,7 +23518,7 @@ Yc MJ MJ MJ -Yc +Qw Fx MJ MJ @@ -23182,6 +23560,8 @@ Yc Yc Yc Yc +Yc +Yc Fx MJ MJ @@ -23249,8 +23629,6 @@ OF OF OF OF -OF -OF "} (31,1,1) = {" OF @@ -23267,9 +23645,9 @@ Gu WI WI WI -WI +Mr MJ -Li +MT OV OV SW @@ -23281,12 +23659,12 @@ MJ Yc Yc MJ -Yc -Yc +DQ +WI MJ Yc -Yc -Yc +EH +XU Yc Yc Yc @@ -23324,6 +23702,8 @@ Yc Yc Yc Yc +Yc +Yc Gu VJ cJ @@ -23391,8 +23771,6 @@ OF OF OF OF -OF -OF "} (32,1,1) = {" OF @@ -23409,12 +23787,12 @@ Fx WI WI WI -WI +ZP MJ -NU +MZ OV OV -TO +Xr MJ YV Yc @@ -23423,12 +23801,12 @@ MJ Yc Yc MJ -Yc -Yc +lm +Mv MJ Yc -Yc -Yc +Ll +MP Yc MJ MJ @@ -23460,7 +23838,6 @@ gj Nh PI MJ -Yc MJ MJ MJ @@ -23469,8 +23846,9 @@ MJ MJ MJ MJ -OF -OF +MJ +MJ +MJ OF OF OF @@ -23554,8 +23932,8 @@ UI Fx MJ MJ -Gy -Yt +TO +NU MJ MJ Fx @@ -23565,14 +23943,14 @@ MJ MJ MJ MJ -Yc -Yc +Ml +Xs MJ Yc Yc Yc Yc -Yc +ND MJ Yc MJ @@ -23604,6 +23982,8 @@ XT MJ Yc Yc +Yc +Yc Xq iJ OF @@ -23675,8 +24055,6 @@ OF OF OF OF -OF -OF "} (34,1,1) = {" OF @@ -23710,11 +24088,11 @@ MJ MJ MJ MJ +Ys +Ys +Vp Yc -Yc -Yc -Yc -Yc +Yz MJ Yc MJ @@ -23746,6 +24124,8 @@ XT MJ Yc Yc +Yc +Yc Xq iJ OF @@ -23817,8 +24197,6 @@ OF OF OF OF -OF -OF "} (35,1,1) = {" OF @@ -23849,12 +24227,12 @@ OF OF OF MJ -Yc -Yc -Yc -Yc -Yc -Yc +lk +KV +MJ +JM +JM +Vp Yc Yc Yc @@ -23888,6 +24266,8 @@ XT MJ Yc Yc +Yc +Yc Xq iJ OF @@ -23959,8 +24339,6 @@ OF OF OF OF -OF -OF "} (36,1,1) = {" OF @@ -23991,14 +24369,14 @@ OF OF OF MJ +Zg Yc Yc Yc Yc Yc Yc -Yc -Yc +Pu MJ Yc MJ @@ -24014,7 +24392,7 @@ EC TE EQ MJ -Yc +XP Yc Yc Yc @@ -24030,6 +24408,8 @@ FY MJ Yc Yc +Yc +Yc Xq iJ OF @@ -24101,8 +24481,6 @@ OF OF OF OF -OF -OF "} (37,1,1) = {" OF @@ -24133,14 +24511,14 @@ OF OF OF MJ +Ws +PC +MJ +UA +UA +UA Yc -Yc -Yc -Yc -Yc -Yc -Yc -Yc +SG MJ Yc MJ @@ -24172,6 +24550,8 @@ XT MJ Yc Yc +Yc +Yc Xq iJ OF @@ -24243,8 +24623,6 @@ OF OF OF OF -OF -OF "} (38,1,1) = {" OF @@ -24314,6 +24692,8 @@ XT Fx Gu Fx +MJ +MJ Fx ZL OF @@ -24385,8 +24765,6 @@ OF OF OF OF -OF -OF "} (39,1,1) = {" OF @@ -38197,7 +38575,7 @@ co ah cF aG -aG +ZN dm dU eh diff --git a/vorestation.dme b/vorestation.dme index d03d45e439e..f04f6930755 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1011,6 +1011,7 @@ #include "code\game\objects\items\devices\traitordevices.dm" #include "code\game\objects\items\devices\transfer_valve.dm" #include "code\game\objects\items\devices\translator.dm" +#include "code\game\objects\items\devices\translocator_vr.dm" #include "code\game\objects\items\devices\tvcamera.dm" #include "code\game\objects\items\devices\uplink.dm" #include "code\game\objects\items\devices\uplink_random_lists.dm"