diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index 676b7d1c25b..4563bf989e5 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -4,7 +4,7 @@ #define TRANSITIONEDGE 7 // Distance from edge to move to another z-level. -// Invisibility constants. +// Invisibility constants. These should only be used for TRUE invisibility, AKA nothing living players touch #define INVISIBILITY_LIGHTING 20 #define INVISIBILITY_LEVEL_ONE 35 #define INVISIBILITY_LEVEL_TWO 45 @@ -21,6 +21,9 @@ #define SEE_INVISIBLE_MINIMUM 5 #define INVISIBILITY_MAXIMUM 100 +// Pseudo-Invis, like Ninja, Ling, Etc. +#define EFFECTIVE_INVIS 50 // Below this, can't be examined, may as well be invisible to the game + // For the client FPS pref and anywhere else #define MAX_CLIENT_FPS 200 diff --git a/code/__defines/mobs_vr.dm b/code/__defines/mobs_vr.dm index 2e3f8b07600..0a2e49d907c 100644 --- a/code/__defines/mobs_vr.dm +++ b/code/__defines/mobs_vr.dm @@ -13,6 +13,9 @@ #define O_ORCH "orchestrator" #define O_FACT "refactory" +//Alraune organs +#define A_FRUIT "fruit gland" + //species defines #define SPECIES_AKULA "Akula" #define SPECIES_ALRAUNE "Alraune" diff --git a/code/controllers/emergency_shuttle_controller.dm b/code/controllers/emergency_shuttle_controller.dm index 3ef7c9486f5..05468bee766 100644 --- a/code/controllers/emergency_shuttle_controller.dm +++ b/code/controllers/emergency_shuttle_controller.dm @@ -98,10 +98,10 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle autopilot = 1 set_launch_countdown(get_shuttle_prep_time()) auto_recall_time = rand(world.time + 300, launch_time - 300) - var/estimated_time = round(estimate_arrival_time()/60,1) //reset the shuttle transit time if we need to shuttle.move_time = SHUTTLE_TRANSIT_DURATION + var/estimated_time = round(estimate_arrival_time()/60,1) priority_announcement.Announce(replacetext(replacetext(using_map.shuttle_called_message, "%dock_name%", "[using_map.dock_name]"), "%ETA%", "[estimated_time] minute\s")) atc.shift_ending() @@ -274,4 +274,4 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle var/obj/effect/bgstar/S = new/obj/effect/bgstar(locate(x,y,z)) S.direction = spawndir spawn() - S.startmove() \ No newline at end of file + S.startmove() diff --git a/code/controllers/subsystems/planets.dm b/code/controllers/subsystems/planets.dm index 3b3675d5c3a..a163a3b1e79 100644 --- a/code/controllers/subsystems/planets.dm +++ b/code/controllers/subsystems/planets.dm @@ -56,13 +56,14 @@ SUBSYSTEM_DEF(planets) P.planet_floors -= T else P.planet_walls -= T + T.vis_contents -= P.weather_holder.visuals /datum/controller/subsystem/planets/proc/allocateTurfs(var/initial = FALSE) var/list/currentlist = new_outdoor_turfs while(currentlist.len) var/turf/simulated/OT = currentlist[currentlist.len] currentlist.len-- - if(istype(OT) && z_to_planet.len >= OT.z && z_to_planet[OT.z]) + if(istype(OT) && OT.outdoors && z_to_planet.len >= OT.z && z_to_planet[OT.z]) var/datum/planet/P = z_to_planet[OT.z] P.planet_floors |= OT OT.vis_contents |= P.weather_holder.visuals @@ -113,9 +114,9 @@ SUBSYSTEM_DEF(planets) while(currentrun.len) var/datum/planet/P = currentrun[currentrun.len] currentrun.len-- - + P.process(last_fire) - + //Sun light needs changing if(P.needs_work & PLANET_PROCESS_SUN) P.needs_work &= ~PLANET_PROCESS_SUN diff --git a/code/datums/observation/turf_changed.dm b/code/datums/observation/turf_changed.dm index 861b4092274..0bb0ed91158 100644 --- a/code/datums/observation/turf_changed.dm +++ b/code/datums/observation/turf_changed.dm @@ -20,9 +20,9 @@ var/decl/observ/turf_changed/turf_changed_event = new() * Turf Changed Handling * ************************/ -/turf/ChangeTurf() +/turf/ChangeTurf(var/turf/N, var/tell_universe, var/force_lighting_update, var/preserve_outdoors) var/old_density = density var/old_opacity = opacity - . = ..() + . = ..(N, tell_universe, force_lighting_update, preserve_outdoors) if(.) turf_changed_event.raise_event(src, old_density, density, old_opacity, opacity) \ No newline at end of file diff --git a/code/game/antagonist/station/infiltrator.dm b/code/game/antagonist/station/infiltrator.dm index 8ca6f4ac4db..b51e7e74fbb 100644 --- a/code/game/antagonist/station/infiltrator.dm +++ b/code/game/antagonist/station/infiltrator.dm @@ -13,6 +13,7 @@ var/datum/antagonist/traitor/infiltrator/infiltrators welcome_text = "To speak on your team's private channel, use :t." protected_jobs = list("Security Officer", "Warden", "Detective", "Internal Affairs Agent", "Head of Security", "Colony Director") flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE + can_speak_aooc = TRUE /datum/antagonist/traitor/infiltrator/New() ..() diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 162cdd371d7..b5a73224fc7 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -199,6 +199,12 @@ var/global/list/datum/dna/gene/dna_genes[0] src.base_species = CS.base_species src.blood_color = CS.blood_color + if(istype(character.species,/datum/species/alraune)) + var/datum/species/alraune/CS = character.species + //src.species_traits = CS.traits.Copy() //No traits + src.base_species = CS.base_species + src.blood_color = CS.blood_color + // +1 to account for the none-of-the-above possibility SetUIValueRange(DNA_UI_EAR_STYLE, ear_style + 1, ear_styles_list.len + 1, 1) SetUIValueRange(DNA_UI_TAIL_STYLE, tail_style + 1, tail_styles_list.len + 1, 1) diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index a7e7d2ddae2..f4fcffbd348 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -233,6 +233,11 @@ var/datum/species/xenochimera/CS = H.species var/datum/species/xenochimera/new_CS = CS.produceCopy(dna.base_species,dna.species_traits,src) new_CS.blood_color = dna.blood_color + + if(istype(H.species,/datum/species/alraune)) + var/datum/species/alraune/CS = H.species + var/datum/species/alraune/new_CS = CS.produceCopy(dna.base_species,dna.species_traits,src) + new_CS.blood_color = dna.blood_color // VOREStation Edit End H.force_update_organs() //VOREStation Add - Gotta do this too diff --git a/code/game/jobs/job/special.dm b/code/game/jobs/job/special.dm index 5091e9d4e3e..7d1ccead195 100644 --- a/code/game/jobs/job/special.dm +++ b/code/game/jobs/job/special.dm @@ -109,8 +109,10 @@ if(H.backbag > 0) H.equip_to_slot_or_del(new /obj/item/weapon/stamp/clown(H.back), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(H.back), slot_in_backpack) //VOREStation Edit else H.equip_to_slot_or_del(new /obj/item/weapon/stamp/clown(H), slot_l_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(H.back), slot_l_hand) //VOREStation Edit return 1 diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 80b417da22c..e980c8261c8 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -38,11 +38,13 @@ projectiles-- var/P = new projectile(curloc) Fire(P, target) + if(i == 1) + set_ready_state(0) if(fire_cooldown) sleep(fire_cooldown) if(auto_rearm) projectiles = projectiles_per_shot - set_ready_state(0) +// set_ready_state(0) do_after_cooldown() return diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 5d6c14abb9b..968861f1e41 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -1254,7 +1254,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if(isnull(cartridge)) to_chat(usr, "There's no cartridge to eject.") - return + return cartridge.forceMove(get_turf(src)) if(ismob(loc)) @@ -1382,7 +1382,7 @@ var/global/list/obj/item/device/pda/PDAs = list() to_chat(user, "Blood type: [C:blood_DNA[blood]]\nDNA: [blood]") if(4) - user.visible_message("\The [user] has analyzed [C]'s radiation levels!", 1) + user.visible_message("\The [user] has analyzed [C]'s radiation levels!", "You have analyzed [C]'s radiation levels!") to_chat(user, "Analyzing Results for [C]:") if(C.radiation) to_chat(user, "Radiation Level: [C.radiation]") diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index ca4b8d8066e..fc3c03518ba 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -10,44 +10,162 @@ var/insults = 0 var/list/insultmsg = list("FUCK EVERYONE!", "I'M A TERRORIST!", "ALL SECURITY TO SHOOT ME ON SIGHT!", "I HAVE A BOMB!", "CAPTAIN IS A COMDOM!", "GLORY TO ALMACH!") -/obj/item/device/megaphone/attack_self(mob/living/user as mob) +/obj/item/device/megaphone/proc/can_broadcast(var/mob/living/user) if (user.client) if(user.client.prefs.muted & MUTE_IC) - src << "You cannot speak in IC (muted)." - return - if(!ishuman(user)) - user << "You don't know how to use this!" - return + to_chat(user, "You cannot speak in IC (muted).") + return 0 + if(!(ishuman(user) || user.isSynthetic())) + to_chat(user, "You don't know how to use this!") + return 0 if(user.silent) - return + return 0 if(spamcheck) - user << "\The [src] needs to recharge!" - return + to_chat(user, "\The [src] needs to recharge!") + return 0 + return 1 - var/message = sanitize(input(user, "Shout a message?", "Megaphone", null) as text) - if(!message) - return - message = capitalize(message) +/obj/item/device/megaphone/proc/do_broadcast(var/mob/living/user, var/message) if ((src.loc == user && usr.stat == 0)) if(emagged) if(insults) - for(var/mob/O in (viewers(user))) - O.show_message("[user] broadcasts, \"[pick(insultmsg)]\"",2) // 2 stands for hearable message + user.audible_message("[user] broadcasts, \"[pick(insultmsg)]\"") insults-- else - user << "*BZZZZzzzzzt*" + to_chat(user, "*BZZZZzzzzzt*") else - for(var/mob/O in (viewers(user))) - O.show_message("[user] broadcasts, \"[message]\"",2) // 2 stands for hearable message + user.audible_message("[user] broadcasts, \"[message]\"") spamcheck = 1 spawn(20) spamcheck = 0 return +/obj/item/device/megaphone/attack_self(mob/living/user as mob) + if(!can_broadcast(user)) + return + + var/message = sanitize(input(user, "Shout a message?", "Megaphone", null) as text) + if(!message) + return + message = capitalize(message) + + do_broadcast(user, message) + /obj/item/device/megaphone/emag_act(var/remaining_charges, var/mob/user) if(!emagged) - user << "You overload \the [src]'s voice synthesizer." + to_chat(user, "You overload \the [src]'s voice synthesizer.") emagged = 1 - insults = rand(1, 3)//to prevent dickflooding + insults = rand(1, 3)//to prevent caps spam. return 1 + +/obj/item/device/megaphone/super + name = "gigaphone" + desc = "A device used to project your voice. Loudly-er." + icon_state = "gigaphone" + + var/broadcast_font = "verdana" + var/broadcast_size = 3 + var/broadcast_color = "#000000" //Black by default. + var/list/volume_options = list(2, 3, 4) + var/list/font_options = list("times new roman", "times", "verdana", "sans-serif", "serif", "georgia") + var/list/color_options= list("#000000", "#ff0000", "#00ff00", "#0000ff") + + insultmsg = list("HONK?!", "HONK!", "HOOOOOOOONK!", "...!", "HUNK.", "Honk?") + +/obj/item/device/megaphone/super/emag_act(var/remaining_charges, var/mob/user) + ..() + if(emagged) + if(!(11 in volume_options)) + volume_options = list(11) + broadcast_size = 11 + if(!("comic sans ms" in font_options)) + font_options = list("comic sans ms") + broadcast_font = "comic sans ms" + to_chat(user, "\The [src] emits a silly sound.") + if(!("#ff69b4" in color_options)) + color_options = list("#ff69b4") + broadcast_color = "#ff69b4" + if(insults <= 0) + insults = rand(1,3) + to_chat(user, "You re-scramble \the [src]'s voice synthesizer.") + return 1 + +/obj/item/device/megaphone/super/verb/turn_volume_dial(mob/living/user) + set name = "Change Volume" + set desc = "Allows you to change the megaphone's volume." + set category = "Object" + + adjust_volume(user) + +/obj/item/device/megaphone/super/proc/adjust_volume(var/mob/living/user) + var/new_volume = input(user, "Set Volume") as null|anything in volume_options + + if(new_volume && Adjacent(user)) + broadcast_size = new_volume + +/obj/item/device/megaphone/super/verb/change_font(mob/living/user) + set name = "Change... Pronunciation?" + set desc = "Allows you to change the megaphone's font." + set category = "Object" + + adjust_font(user) + +/obj/item/device/megaphone/super/proc/adjust_font(var/mob/living/user) + var/new_font = input(user, "Set Volume") as null|anything in font_options + + if(new_font && Adjacent(user)) + broadcast_font = new_font + +/obj/item/device/megaphone/super/verb/change_color(mob/living/user) + set name = "Change... Tune?" + set desc = "Allows you to change the megaphone's color." + set category = "Object" + + adjust_color(user) + +/obj/item/device/megaphone/super/proc/adjust_color(var/mob/living/user) + var/new_color = input(user, "Set Volume") as null|anything in color_options + + if(new_color && Adjacent(user)) + broadcast_color = new_color + +/obj/item/device/megaphone/super/do_broadcast(var/mob/living/user, var/message) + if ((src.loc == user && usr.stat == 0)) + if(emagged) + if(insults) + user.audible_message("[user] broadcasts, \"[pick(insultmsg)]\"") + if(broadcast_size >= 11) + var/turf/T = get_turf(user) + playsound(T, 'sound/items/AirHorn.ogg', 100, 1) + for(var/mob/living/carbon/M in oviewers(4, T)) + if(M.get_ear_protection() >= 2) + continue + M.sleeping = 0 + M.stuttering += 20 + M.ear_deaf += 30 + M.Weaken(3) + if(prob(30)) + M.Stun(10) + M.Paralyse(4) + else + M.make_jittery(50) + insults-- + else + user.audible_message("*BZZZZzzzzzt*") + if(prob(40) && insults <= 0) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(2, 1, get_turf(user)) + s.start() + user.visible_message("\The [src] sparks violently!") + spawn(30) + explosion(get_turf(src), -1, -1, 1, 3, adminlog = 1) + qdel(src) + return + else + user.audible_message("[user] broadcasts, \"[message]\"") + + spamcheck = 1 + spawn(20) + spamcheck = 0 + return diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 02a308555bb..02e121d02c1 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -1042,6 +1042,50 @@ name = "tuxedo cat plushie" icon_state = "tuxedocat" +// nah, squids are better than foxes :> + +/obj/item/toy/plushie/squid/green + name = "green squid plushie" + desc = "A small, cute and loveable squid friend. This one is green." + icon = 'icons/obj/toy.dmi' + icon_state = "greensquid" + slot_flags = SLOT_HEAD + +/obj/item/toy/plushie/squid/mint + name = "mint squid plushie" + desc = "A small, cute and loveable squid friend. This one is mint coloured." + icon = 'icons/obj/toy.dmi' + icon_state = "mintsquid" + slot_flags = SLOT_HEAD + +/obj/item/toy/plushie/squid/blue + name = "blue squid plushie" + desc = "A small, cute and loveable squid friend. This one is blue." + icon = 'icons/obj/toy.dmi' + icon_state = "bluesquid" + slot_flags = SLOT_HEAD + +/obj/item/toy/plushie/squid/orange + name = "orange squid plushie" + desc = "A small, cute and loveable squid friend. This one is orange." + icon = 'icons/obj/toy.dmi' + icon_state = "orangesquid" + slot_flags = SLOT_HEAD + +/obj/item/toy/plushie/squid/yellow + name = "yellow squid plushie" + desc = "A small, cute and loveable squid friend. This one is yellow." + icon = 'icons/obj/toy.dmi' + icon_state = "yellowsquid" + slot_flags = SLOT_HEAD + +/obj/item/toy/plushie/squid/pink + name = "pink squid plushie" + desc = "A small, cute and loveable squid friend. This one is pink." + icon = 'icons/obj/toy.dmi' + icon_state = "pinksquid" + slot_flags = SLOT_HEAD + /obj/item/toy/plushie/therapy/red name = "red therapy doll" desc = "A toy for therapeutic and recreational purposes. This one is red." diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 58aa30547dc..d9543fed201 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -153,7 +153,7 @@ return 0 if(build_turf) - T.ChangeTurf(build_turf) + T.ChangeTurf(build_turf, preserve_outdoors = TRUE) else if(build_other) new build_other(T) else diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm index d2219cb8a79..cad925f6e88 100644 --- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm +++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm @@ -16,13 +16,10 @@ starts_with = list(/obj/item/weapon/material/twohanded/fireaxe) -<<<<<<< HEAD -======= /obj/structure/closet/fireaxecabinet/initialize() ..() fireaxe = locate() in contents ->>>>>>> 8cd1f6a... Merge pull request #5446 from Anewbe/fireaxe_fix_again /obj/structure/closet/fireaxecabinet/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri //..() //That's very useful, Erro @@ -122,6 +119,7 @@ if(src.locked) to_chat(user, "The cabinet won't budge!") return + if(localopened) if(fireaxe) user.put_in_hands(fireaxe) diff --git a/code/game/objects/structures/flora/trees.dm b/code/game/objects/structures/flora/trees.dm index ef58518e489..f0a7498390f 100644 --- a/code/game/objects/structures/flora/trees.dm +++ b/code/game/objects/structures/flora/trees.dm @@ -4,7 +4,8 @@ anchored = 1 density = 1 pixel_x = -16 - layer = MOB_LAYER // You know what, let's play it safe. + plane = MOB_LAYER // You know what, let's play it safe. + layer = ABOVE_MOB_LAYER var/base_state = null // Used for stumps. var/health = 200 // Used for chopping down trees. var/max_health = 200 diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index e1565889378..1c74b467e22 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -12,6 +12,7 @@ nitrogen = MOLES_N2STANDARD var/to_be_destroyed = 0 //Used for fire, if a melting temperature was reached, it will be destroyed var/max_fire_temperature_sustained = 0 //The max temperature of the fire which it was subjected to + var/can_dirty = TRUE // If false, tile never gets dirty var/dirt = 0 // This is not great. @@ -65,12 +66,13 @@ tracks.AddTracks(bloodDNA,comingdir,goingdir,bloodcolor) /turf/simulated/proc/update_dirt() - dirt = min(dirt+1, 101) - var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt, src) - if (dirt > 50) - if (!dirtoverlay) - dirtoverlay = new/obj/effect/decal/cleanable/dirt(src) - dirtoverlay.alpha = min((dirt - 50) * 5, 255) + if(can_dirty) + dirt = min(dirt+1, 101) + var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt, src) + if (dirt > 50) + if (!dirtoverlay) + dirtoverlay = new/obj/effect/decal/cleanable/dirt(src) + dirtoverlay.alpha = min((dirt - 50) * 5, 255) /turf/simulated/Entered(atom/A, atom/OL) if(movement_disabled && usr.ckey != movement_disabled_exception) @@ -82,8 +84,9 @@ if(M.lying) return ..() - // Dirt overlays. - update_dirt() + if(M.dirties_floor()) + // Dirt overlays. + update_dirt() if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M diff --git a/code/game/turfs/simulated/floor_attackby.dm b/code/game/turfs/simulated/floor_attackby.dm index 940e2df548d..57d51dbaeac 100644 --- a/code/game/turfs/simulated/floor_attackby.dm +++ b/code/game/turfs/simulated/floor_attackby.dm @@ -33,7 +33,7 @@ if(R.use(1)) // Cost of roofing tiles is 1:1 with cost to place lattice and plating T.ReplaceWithLattice() - T.ChangeTurf(/turf/simulated/floor) + T.ChangeTurf(/turf/simulated/floor, preserve_outdoors = TRUE) playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) user.visible_message("[user] patches a hole in the ceiling.", "You patch a hole in the ceiling.") expended_tile = TRUE @@ -47,8 +47,7 @@ var/turf/A = get_step(src, dir) if(A && !A.outdoors) if(expended_tile || R.use(1)) - src.outdoors = FALSE - SSplanets.unallocateTurf(src) + make_indoors() playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) user.visible_message("[user] roofs a tile, shielding it from the elements.", "You roof this tile, shielding it from the elements.") break diff --git a/code/game/turfs/simulated/outdoors/outdoors.dm b/code/game/turfs/simulated/outdoors/outdoors.dm index cfdc3cc444c..05ff3957163 100644 --- a/code/game/turfs/simulated/outdoors/outdoors.dm +++ b/code/game/turfs/simulated/outdoors/outdoors.dm @@ -54,8 +54,8 @@ var/list/turf_edge_cache = list() if(istype(T) && T.edge_blending_priority && edge_blending_priority < T.edge_blending_priority && icon_state != T.icon_state) var/cache_key = "[T.get_edge_icon_state()]-[checkdir]" if(!turf_edge_cache[cache_key]) - var/image/I = image(icon = 'icons/turf/outdoors_edge.dmi', icon_state = "[T.get_edge_icon_state()]-edge", dir = checkdir) - I.plane = 0 + var/image/I = image(icon = 'icons/turf/outdoors_edge.dmi', icon_state = "[T.get_edge_icon_state()]-edge", dir = checkdir, layer = ABOVE_TURF_LAYER) + I.plane = TURF_PLANE turf_edge_cache[cache_key] = I add_overlay(turf_edge_cache[cache_key]) diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index 4d87e2e87ea..73a56e89495 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -160,7 +160,7 @@ if(istype(T, /turf/simulated/open) || istype(T, /turf/space)) if(R.use(1)) // Cost of roofing tiles is 1:1 with cost to place lattice and plating T.ReplaceWithLattice() - T.ChangeTurf(/turf/simulated/floor) + T.ChangeTurf(/turf/simulated/floor, preserve_outdoors = TRUE) playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) user.visible_message("[user] patches a hole in the ceiling.", "You patch a hole in the ceiling.") expended_tile = TRUE @@ -171,8 +171,7 @@ // Create a ceiling to shield from the weather if(outdoors) if(expended_tile || R.use(1)) // Don't need to check adjacent turfs for a wall, we're building on one - outdoors = FALSE - SSplanets.unallocateTurf(src) + make_indoors() if(!expended_tile) // Would've already played a sound playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) user.visible_message("[user] roofs \the [src], shielding it from the elements.", "You roof \the [src] tile, shielding it from the elements.") diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index e5bb57ad9e8..b64ba73ee33 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -115,9 +115,9 @@ plant.pixel_y = 0 plant.update_neighbors() -/turf/simulated/wall/ChangeTurf(var/newtype) +/turf/simulated/wall/ChangeTurf(var/turf/N, var/tell_universe, var/force_lighting_update, var/preserve_outdoors) clear_plants() - ..(newtype) + ..(N, tell_universe, force_lighting_update, preserve_outdoors) //Appearance /turf/simulated/wall/examine(mob/user) diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 1c700eec854..ed480130503 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -213,5 +213,5 @@ A.loc.Entered(A) return -/turf/space/ChangeTurf(var/turf/N, var/tell_universe=1, var/force_lighting_update = 0) - return ..(N, tell_universe, 1) +/turf/space/ChangeTurf(var/turf/N, var/tell_universe, var/force_lighting_update, var/preserve_outdoors) + return ..(N, tell_universe, 1, preserve_outdoors) diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm index 1d776866612..3b5a797c0a0 100644 --- a/code/game/turfs/turf_changing.dm +++ b/code/game/turfs/turf_changing.dm @@ -22,17 +22,15 @@ below.update_icon() // To add or remove the 'ceiling-less' overlay. //Creates a new turf -/turf/proc/ChangeTurf(var/turf/N, var/tell_universe=1, var/force_lighting_update = 0) +/turf/proc/ChangeTurf(var/turf/N, var/tell_universe=1, var/force_lighting_update = 0, var/preserve_outdoors = FALSE) if (!N) return - /* VOREStation Edit Start - Say Nope To This. Tether's Z info is setup fine, trust it. // This makes sure that turfs are not changed to space when one side is part of a zone if(N == /turf/space) var/turf/below = GetBelow(src) if(istype(below) && (air_master.has_valid_zone(below) || air_master.has_valid_zone(src))) N = /turf/simulated/open - */ // VOREStation Edit End var/obj/fire/old_fire = fire var/old_opacity = opacity @@ -109,4 +107,6 @@ lighting_build_overlay() else lighting_clear_overlay() - outdoors = old_outdoors \ No newline at end of file + + if(preserve_outdoors) + outdoors = old_outdoors \ No newline at end of file diff --git a/code/game/verbs/advanced_who.dm b/code/game/verbs/advanced_who.dm index 855c70dafae..a452446e46d 100644 --- a/code/game/verbs/advanced_who.dm +++ b/code/game/verbs/advanced_who.dm @@ -53,30 +53,22 @@ Lines += entry else for(var/client/C in clients) + var/entry = "\t" if(C.holder && C.holder.fakekey) - var/entry = "\t[C.key]" - var/mob/observer/dead/O = C.mob - entry = C.holder.fakekey - if(isobserver(O)) - entry += " - Observing" - else if(istype(O,/mob/new_player)) - entry += " - In Lobby" - else - entry += " - Playing" - Lines += entry + entry += "[C.holder.fakekey]" else - var/entry = "\t[C.key]" - var/mob/observer/dead/O = C.mob - if(isobserver(O)) //Woo, players can see - entry += " - Observing" - else if(istype(O,/mob/new_player)) - entry += " - In Lobby" - else - entry += " - Playing" - Lines += entry + entry += "[C.key]" + var/mob/observer/dead/O = C.mob + if(isobserver(O)) + entry += " - Observing" + else if(istype(O,/mob/new_player)) + entry += " - In Lobby" + else + entry += " - Playing" + Lines += entry for(var/line in sortList(Lines)) msg += "[line]\n" msg += "Total Players: [length(Lines)]" - src << msg + to_chat(src, msg) \ No newline at end of file diff --git a/code/global_vr.dm b/code/global_vr.dm index 8b4ab024fc7..154613a4bb1 100644 --- a/code/global_vr.dm +++ b/code/global_vr.dm @@ -5,3 +5,30 @@ robot_module_types += "Sci-borg" robot_module_types += "Pupdozer" return 1 + +var/global/list/acceptable_fruit_types= list( + "ambrosia", + "apple", + "banana", + "berry", + "cabbage", + "carrot", + "cherry", + "chili", + "eggplant", + "grape", + "greengrapes", + "lemon", + "lime", + "onion", + "orange", + "peanut", + "potato", + "pumpkin", + "rice", + "soybean", + "sugarcane", + "tomato", + "watermelon", + "wheat", + "whitebeet") \ No newline at end of file diff --git a/code/modules/artifice/deadringer.dm b/code/modules/artifice/deadringer.dm index 99061b6624a..e12c0b0045d 100644 --- a/code/modules/artifice/deadringer.dm +++ b/code/modules/artifice/deadringer.dm @@ -23,7 +23,6 @@ processing_objects -= src ..() - /obj/item/weapon/deadringer/dropped() if(timer > 20) uncloak() @@ -50,7 +49,6 @@ activated = 0 return - /obj/item/weapon/deadringer/process() if(activated) if (ismob(src.loc)) @@ -77,13 +75,11 @@ icon_state = "deadringer" return - /obj/item/weapon/deadringer/proc/deathprevent() for(var/mob/living/simple_animal/D in oviewers(7, src)) D.LoseTarget() watchowner.emote("deathgasp") - watchowner.invisibility = 85 - watchowner.alpha = 127 + watchowner.alpha = 15 makeacorpse(watchowner) for(var/mob/living/simple_animal/D in oviewers(7, src)) D.LoseTarget() @@ -91,7 +87,6 @@ /obj/item/weapon/deadringer/proc/uncloak() if(watchowner) - watchowner.invisibility = 0 watchowner.alpha = 255 playsound(get_turf(src), 'sound/effects/uncloak.ogg', 35, 1, -1) return @@ -180,5 +175,3 @@ var/obj/item/organ/internal/G = I G.Destroy() return - - diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index f1d6d95f2a2..c11315e6144 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -303,7 +303,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O . += "
Body Markings +
" for(var/M in pref.body_markings) - . += "[M] - Color" + . += "[M] [pref.body_markings.len > 1 ? "˄ ˅ " : ""]- Color" . += "
__
" . += "
" @@ -500,6 +500,24 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.body_markings[new_marking] = "#000000" //New markings start black return TOPIC_REFRESH_UPDATE_PREVIEW + else if(href_list["marking_up"]) + var/M = href_list["marking_up"] + var/start = pref.body_markings.Find(M) + if(start != 1) //If we're not the beginning of the list, swap with the previous element. + moveElement(pref.body_markings, start, start-1) + else //But if we ARE, become the final element -ahead- of everything else. + moveElement(pref.body_markings, start, pref.body_markings.len+1) + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["marking_down"]) + var/M = href_list["marking_down"] + var/start = pref.body_markings.Find(M) + if(start != pref.body_markings.len) //If we're not the end of the list, swap with the next element. + moveElement(pref.body_markings, start, start+2) + else //But if we ARE, become the first element -behind- everything else. + moveElement(pref.body_markings, start, 1) + return TOPIC_REFRESH_UPDATE_PREVIEW + else if(href_list["marking_remove"]) var/M = href_list["marking_remove"] pref.body_markings -= M diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm index 1c9ec298802..41d37b8a67d 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -247,7 +247,7 @@ datum/gear/suit/duster allowed_roles = list("Cargo Technician","Quartermaster") /datum/gear/suit/roles/poncho/cloak/mining - display_name = "cloak, cargo" + display_name = "cloak, mining" path = /obj/item/clothing/accessory/poncho/roles/cloak/mining allowed_roles = list("Quartermaster","Shaft Miner") diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm index e01f7380667..c57f4851469 100644 --- a/code/modules/client/preference_setup/vore/07_traits.dm +++ b/code/modules/client/preference_setup/vore/07_traits.dm @@ -73,14 +73,16 @@ if(!(path in negative_traits)) pref.neg_traits -= path - if(pref.species == pref.custom_base && pref.species != SPECIES_CUSTOM) + var/datum/species/selected_species = all_species[pref.species] + if(selected_species.selects_bodytype) // Allowed! else if(!pref.custom_base || !(pref.custom_base in custom_species_bases)) pref.custom_base = SPECIES_HUMAN /datum/category_item/player_setup_item/vore/traits/copy_to_mob(var/mob/living/carbon/human/character) character.custom_species = pref.custom_species - if(pref.species == SPECIES_CUSTOM || pref.species == SPECIES_XENOCHIMERA) + var/datum/species/selected_species = all_species[pref.species] + if(selected_species.selects_bodytype) var/datum/species/custom/CS = character.species var/S = pref.custom_base ? pref.custom_base : "Human" var/datum/species/custom/new_CS = CS.produceCopy(S, pref.pos_traits + pref.neu_traits + pref.neg_traits, character) @@ -92,7 +94,8 @@ . += "Custom Species " . += "[pref.custom_species ? pref.custom_species : "-Input Name-"]
" - if(pref.species == SPECIES_CUSTOM || pref.species == SPECIES_XENOCHIMERA) + var/datum/species/selected_species = all_species[pref.species] + if(selected_species.selects_bodytype) . += "Icon Base: " . += "[pref.custom_base ? pref.custom_base : "Human"]
" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 99cf57522ed..34826e24d94 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -60,7 +60,7 @@ datum/preferences var/r_synth //Used with synth_color to color synth parts that normaly can't be colored. var/g_synth //Same as above var/b_synth //Same as above - var/synth_markings = 0 //Enable/disable markings on synth parts. + var/synth_markings = 1 //VOREStation edit. Enable/disable markings on synth parts. //Some faction information. var/home_system = "Unset" //System of birth. diff --git a/code/modules/integrated_electronics/subtypes/memory.dm b/code/modules/integrated_electronics/subtypes/memory.dm index 94c4594f5b2..24dd18c80bf 100644 --- a/code/modules/integrated_electronics/subtypes/memory.dm +++ b/code/modules/integrated_electronics/subtypes/memory.dm @@ -75,7 +75,6 @@ /obj/item/integrated_circuit/memory/constant name = "constant chip" desc = "This tiny chip can store one piece of data, which cannot be overwritten without disassembly." - icon_state = "memory" complexity = 1 inputs = list() outputs = list("output pin" = IC_PINTYPE_ANY) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 34adce12035..9e35a7f0ffa 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -168,6 +168,12 @@ var/list/mining_overlay_cache = list() if(istype(get_step(src, direction), /turf/space) && !istype(get_step(src, direction), /turf/space/cracked_asteroid)) add_overlay(get_cached_border("asteroid_edge",direction,icon,"asteroid_edges", 0)) + //Or any time + else + var/turf/T = get_step(src, direction) + if(istype(T) && T.density) + add_overlay(get_cached_border("rock_side",direction,'icons/turf/walls.dmi',"rock_side")) + if(overlay_detail) add_overlay('icons/turf/flooring/decals.dmi',overlay_detail) diff --git a/code/modules/mob/language/station.dm b/code/modules/mob/language/station.dm index c80f606ae6d..47cb3b8de09 100644 --- a/code/modules/mob/language/station.dm +++ b/code/modules/mob/language/station.dm @@ -133,7 +133,11 @@ flags = WHITELISTED syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix", "...", "oo", "q", "nq", "x", "xq", "ll", "...", "...", "...") //should sound like there's holes in it - +/datum/language/skrell/get_random_name(var/gender) + var/list/first_names = file2list('config/names/first_name_skrell.txt') + var/list/last_names = file2list('config/names/last_name_skrell.txt') + return "[pick(first_names)] [pick(last_names)]" + /datum/language/human name = LANGUAGE_SOL_COMMON desc = "A bastardized hybrid of many languages, including Chinese, English, French, and more; it is the common language of the Sol system." @@ -288,4 +292,4 @@ "tod", "ser", "su", "no", "nue", "el", "ad", "al", "an", "ar", "as", "ci", "co", "de", "do", "el", "en", "er", "es", "ie", "in", "la", "lo", "me", "na", "no", "nt", "or", "os", "pa", "qu", "ra", "re", "ro", "se", "st", "ta", "te", "to", "ue", "un", -"tod", "ser", "su", "no", "nue", "el") \ No newline at end of file +"tod", "ser", "su", "no", "nue", "el") diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index b860d2b855b..04fff68e535 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -2,7 +2,7 @@ var/skip_gear = 0 var/skip_body = 0 - if(alpha <= 50) + if(alpha <= EFFECTIVE_INVIS) src.loc.examine(user) return diff --git a/code/modules/mob/living/carbon/human/human_defines_vr.dm b/code/modules/mob/living/carbon/human/human_defines_vr.dm index d3bb4f0b57f..f856e4ab399 100644 --- a/code/modules/mob/living/carbon/human/human_defines_vr.dm +++ b/code/modules/mob/living/carbon/human/human_defines_vr.dm @@ -6,4 +6,4 @@ var/wagging = 0 //UGH. var/flapping = 0 var/vantag_pref = VANTAG_NONE //What's my status? - var/impersonate_bodytype //For impersonating a bodytype \ No newline at end of file + var/impersonate_bodytype //For impersonating a bodytype diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index ebf6facf682..210de2cf85e 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -36,6 +36,16 @@ if(shock_stage >= 10) tally -= 1.5 //this gets a +3 later, feral critters take reduced penalty if(reagents.has_reagent("numbenzyme")) tally += 1.5 //A tad bit of slowdown. + if(riding_datum) //Bit of slowdown for taur rides if rider is bigger or fatter than mount. + var/datum/riding/R = riding_datum + var/mob/living/L = R.ridden + for(var/mob/living/M in L.buckled_mobs) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.size_multiplier > L.size_multiplier) + tally += 1 + if(H.weight > L.weight) + tally += 1 //VOREstation end if(istype(buckled, /obj/structure/bed/chair/wheelchair)) diff --git a/code/modules/mob/living/carbon/human/species/station/alraune.dm b/code/modules/mob/living/carbon/human/species/station/alraune.dm index 703986ceb58..ba9e6344957 100644 --- a/code/modules/mob/living/carbon/human/species/station/alraune.dm +++ b/code/modules/mob/living/carbon/human/species/station/alraune.dm @@ -13,6 +13,8 @@ min_age = 18 max_age = 250 health_hud_intensity = 1.5 + base_species = SPECIES_ALRAUNE + selects_bodytype = TRUE body_temperature = T20C breath_type = "carbon_dioxide" @@ -47,7 +49,8 @@ /mob/living/carbon/human/proc/succubus_drain, /mob/living/carbon/human/proc/succubus_drain_finalize, /mob/living/carbon/human/proc/succubus_drain_lethal, - /mob/living/carbon/human/proc/bloodsuck) //Give them the voremodes related to wrapping people in vines and sapping their fluids + /mob/living/carbon/human/proc/bloodsuck, + /mob/living/carbon/human/proc/alraune_fruit_select) //Give them the voremodes related to wrapping people in vines and sapping their fluids color_mult = 1 icobase = 'icons/mob/human_races/r_human_vr.dmi' @@ -85,6 +88,7 @@ O_KIDNEYS = /obj/item/organ/internal/kidneys/alraune, O_BRAIN = /obj/item/organ/internal/brain/alraune, O_EYES = /obj/item/organ/internal/eyes/alraune, + A_FRUIT = /obj/item/organ/internal/fruitgland, ) /datum/species/alraune/can_breathe_water() @@ -331,5 +335,164 @@ /obj/item/organ/internal/liver/alraune icon = 'icons/mob/species/alraune/organs.dmi' icon_state = "phytoextractor" - name = "phytoextractor" - desc = "A bulbous gourd-like structure." \ No newline at end of file + name = "enzoretector" + desc = "A bulbous gourd-like structure." + +//Begin fruit gland and its code. +/obj/item/organ/internal/fruitgland //Amazing name, I know. + icon = 'icons/mob/species/alraune/organs.dmi' + icon_state = "phytoextractor" + name = "fruit gland" + desc = "A bulbous gourd-like structure." + organ_tag = A_FRUIT + var/generated_reagents = list("sugar" = 2) //This actually allows them. This could be anything, but sugar seems most fitting. + var/usable_volume = 250 //Five fruit. + var/transfer_amount = 50 + var/empty_message = list("Your have no fruit on you.", "You have a distinct lack of fruit..") + var/full_message = list("You have a multitude of fruit that is ready for harvest!", "You have fruit that is ready to be picked!") + var/emote_descriptor = list("fruit right off of the Alraune!", "a fruit from the Alraune!") + var/verb_descriptor = list("grabs", "snatches", "picks") + var/self_verb_descriptor = list("grab", "snatch", "pick") + var/short_emote_descriptor = list("picks", "grabs") + var/self_emote_descriptor = list("grab", "pick", "snatch") + var/fruit_type = "apple" + var/mob/organ_owner = null + var/gen_cost = 0.5 + +/obj/item/organ/internal/fruitgland/New() + ..() + create_reagents(usable_volume) + + +/obj/item/organ/internal/fruitgland/process() + if(!owner) return + var/obj/item/organ/external/parent = owner.get_organ(parent_organ) + var/before_gen + if(parent && generated_reagents && organ_owner) //Is it in the chest/an organ, has reagents, and is 'activated' + before_gen = reagents.total_volume + if(reagents.total_volume < reagents.maximum_volume) + if(organ_owner.nutrition >= gen_cost) + do_generation() + + if(reagents) + if(reagents.total_volume == reagents.maximum_volume * 0.05) + to_chat(organ_owner, "[pick(empty_message)]") + else if(reagents.total_volume == reagents.maximum_volume && before_gen < reagents.maximum_volume) + to_chat(organ_owner, "[pick(full_message)]") + +/obj/item/organ/internal/fruitgland/proc/do_generation() + organ_owner.nutrition -= gen_cost + for(var/reagent in generated_reagents) + reagents.add_reagent(reagent, generated_reagents[reagent]) + + +/mob/living/carbon/human/proc/alraune_fruit_select() //So if someone doesn't want fruit/vegetables, they don't have to select one. + set name = "Select fruit" + set desc = "Select what fruit/vegetable you wish to grow." + set category = "Object" + var/obj/item/organ/internal/fruitgland/fruit_gland + for(var/F in contents) + if(istype(F, /obj/item/organ/internal/fruitgland)) + fruit_gland = F + break + + if(fruit_gland) + var/selection = input(src, "Choose your character's fruit type. Choosing nothing will result in a default of apples.", "Fruit Type", fruit_gland.fruit_type) as null|anything in acceptable_fruit_types + if(selection) + fruit_gland.fruit_type = selection + verbs |= /mob/living/carbon/human/proc/alraune_fruit_pick + verbs -= /mob/living/carbon/human/proc/alraune_fruit_select + fruit_gland.organ_owner = src + fruit_gland.emote_descriptor = list("fruit right off of [fruit_gland.organ_owner]!", "a fruit from [fruit_gland.organ_owner]!") + + else + to_chat(src, "You lack the organ required to produce fruit.") + return + +/mob/living/carbon/human/proc/alraune_fruit_pick() + set name = "Pick Fruit" + set desc = "Pick fruit off of [src]." + set category = "Object" + set src in view(1) + + //do_reagent_implant(usr) + if(!isliving(usr) || !usr.canClick()) + return + + if(usr.incapacitated() || usr.stat > CONSCIOUS) + return + + var/obj/item/organ/internal/fruitgland/fruit_gland + for(var/I in contents) + if(istype(I, /obj/item/organ/internal/fruitgland)) + fruit_gland = I + break + if (fruit_gland) //Do they have the gland? + if(fruit_gland.reagents.total_volume < fruit_gland.transfer_amount) + to_chat(src, "[pick(fruit_gland.empty_message)]") + return + + var/datum/seed/S = plant_controller.seeds["[fruit_gland.fruit_type]"] + S.harvest(usr,0,0,1) + + var/index = rand(0,2) + + if (usr != src) + var/emote = fruit_gland.emote_descriptor[index] + var/verb_desc = fruit_gland.verb_descriptor[index] + var/self_verb_desc = fruit_gland.self_verb_descriptor[index] + usr.visible_message("[usr] [verb_desc] [emote]", + "You [self_verb_desc] [emote]") + else + visible_message("[src] [pick(fruit_gland.short_emote_descriptor)] a fruit.", + "You [pick(fruit_gland.self_emote_descriptor)] a fruit.") + + fruit_gland.reagents.remove_any(fruit_gland.transfer_amount) + +//End of fruit gland code. + +/datum/species/alraune/proc/produceCopy(var/datum/species/to_copy,var/list/traits,var/mob/living/carbon/human/H) + ASSERT(to_copy) + ASSERT(istype(H)) + + if(ispath(to_copy)) + to_copy = "[initial(to_copy.name)]" + if(istext(to_copy)) + to_copy = all_species[to_copy] + + var/datum/species/alraune/new_copy = new() + + //Initials so it works with a simple path passed, or an instance + new_copy.base_species = to_copy.name + new_copy.icobase = to_copy.icobase + new_copy.deform = to_copy.deform + new_copy.tail = to_copy.tail + new_copy.tail_animation = to_copy.tail_animation + new_copy.icobase_tail = to_copy.icobase_tail + new_copy.color_mult = to_copy.color_mult + new_copy.primitive_form = to_copy.primitive_form + new_copy.appearance_flags = to_copy.appearance_flags + new_copy.flesh_color = to_copy.flesh_color + new_copy.base_color = to_copy.base_color + new_copy.blood_mask = to_copy.blood_mask + new_copy.damage_mask = to_copy.damage_mask + new_copy.damage_overlays = to_copy.damage_overlays + + //Set up a mob + H.species = new_copy + H.icon_state = lowertext(new_copy.get_bodytype()) + + if(new_copy.holder_type) + H.holder_type = new_copy.holder_type + + if(H.dna) + H.dna.ready_dna(H) + + return new_copy + +/datum/species/alraune/get_bodytype() + return base_species + +/datum/species/alraune/get_race_key() + var/datum/species/real = all_species[base_species] + return real.race_key diff --git a/code/modules/mob/living/carbon/human/species/station/blank_vr.dm b/code/modules/mob/living/carbon/human/species/station/blank_vr.dm index f2847a1523a..45c5f4b8f3e 100644 --- a/code/modules/mob/living/carbon/human/species/station/blank_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/blank_vr.dm @@ -1,15 +1,18 @@ /datum/species //var/vore_numbing = 0 - var/gets_food_nutrition = 1 // If this is set to 0, the person can't get nutrition from food. + var/gets_food_nutrition = TRUE // If this is set to 0, the person can't get nutrition from food. var/metabolism = 0.0015 - var/lightweight = 0 //Oof! Nonhelpful bump stumbles. - var/trashcan = 0 //It's always sunny in the wrestling ring. + var/lightweight = FALSE //Oof! Nonhelpful bump stumbles. + var/trashcan = FALSE //It's always sunny in the wrestling ring. + var/base_species = null // Unused outside of a few species + var/selects_bodytype = FALSE // Allows the species to choose from body types intead of being forced to be just one. /datum/species/custom name = SPECIES_CUSTOM name_plural = "Custom" - var/base_species = "Human" + selects_bodytype = TRUE + base_species = SPECIES_HUMAN unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite) diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm index 598bea3edbf..03c88fae407 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm @@ -53,7 +53,7 @@ var/datum/robolimb/M = chargen_robolimbs[company] if(!(choice in M.parts)) continue - if(species.name in M.species_cannot_use) + if(impersonate_bodytype in M.species_cannot_use) continue if(M.whitelisted_to && !(ckey in M.whitelisted_to)) continue @@ -106,7 +106,7 @@ var/datum/robolimb/M = chargen_robolimbs[company] if(!(BP_TORSO in M.parts)) continue - if(species.name in M.species_cannot_use) + if(impersonate_bodytype in M.species_cannot_use) continue if(M.whitelisted_to && !(ckey in M.whitelisted_to)) continue @@ -374,4 +374,4 @@ icon_state = "metal" to_call = /mob/living/carbon/human/proc/nano_metalnom -#undef PER_LIMB_STEEL_COST \ No newline at end of file +#undef PER_LIMB_STEEL_COST diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm index 618382f3a8f..05237f5742a 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm @@ -1,7 +1,7 @@ #define DAM_SCALE_FACTOR 0.01 #define METAL_PER_TICK 150 /datum/species/protean - name = "Protean" + name = SPECIES_PROTEAN name_plural = "Proteans" blurb = "Sometimes very advanced civilizations will produce the ability to swap into manufactured, robotic bodies. And sometimes \ VERY advanced civilizations have the option of 'nanoswarm' bodies. Effectively a single robot body comprised \ @@ -139,7 +139,7 @@ if(H.backbag == 1) //Somewhat misleading, 1 == no bag (not boolean) H.equip_to_slot_or_del(permit, slot_l_hand) - H.equip_to_slot_or_del(metal_stack, slot_r_hand) + H.equip_to_slot_or_del(metal_stack, slot_r_hand) else H.equip_to_slot_or_del(permit, slot_in_backpack) H.equip_to_slot_or_del(metal_stack, slot_in_backpack) @@ -172,7 +172,7 @@ var/obj/item/organ/internal/nano/refactory/refactory = locate() in H.internal_organs if(refactory && !(refactory.status & ORGAN_DEAD)) - + //MHydrogen adds speeeeeed if(refactory.get_stored_material("mhydrogen") >= METAL_PER_TICK) H.add_modifier(/datum/modifier/protean/mhydrogen, origin = refactory) @@ -233,7 +233,7 @@ var/obj/item/organ/internal/nano/refactory/refactory = origin.resolve() if(!istype(refactory) || refactory.status & ORGAN_DEAD) expire() - + //Out of materials if(!refactory.use_stored_material(material_name,material_use)) expire() @@ -255,7 +255,7 @@ on_created_text = "You feel yourself become nearly impervious to physical attacks as plasteel nanites are made." on_expired_text = "Your refactory finishes consuming the plasteel, and you return to your normal nanites." - + material_name = "plasteel" incoming_brute_damage_percent = 0.5 @@ -266,7 +266,7 @@ on_created_text = "You feel yourself become more reflective, able to resist heat and fire better for a time." on_expired_text = "Your refactory finishes consuming the diamond, and you return to your normal nanites." - + material_name = "diamond" incoming_fire_damage_percent = 0.2 @@ -277,7 +277,7 @@ on_created_text = "You feel new nanites being produced from your stockpile of steel, healing you slowly." on_expired_text = "Your steel supply has either run out, or is no longer needed, and your healing stops." - + material_name = "steel" /datum/modifier/protean/steel/tick() diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm index aa8af0e273e..5315840a82f 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm @@ -5,7 +5,7 @@ /datum/species/xenochimera //Scree's race. - name = "Xenochimera" + name = SPECIES_XENOCHIMERA name_plural = "Xenochimeras" icobase = 'icons/mob/human_races/r_xenochimera.dmi' deform = 'icons/mob/human_races/r_def_xenochimera.dmi' @@ -14,7 +14,8 @@ slowdown = -0.2 //scuttly, but not as scuttly as a tajara or a teshari. brute_mod = 0.8 //About as tanky to brute as a Unathi. They'll probably snap and go feral when hurt though. burn_mod = 1.15 //As vulnerable to burn as a Tajara. - var/base_species = "Xenochimera" + base_species = "Xenochimera" + selects_bodytype = TRUE num_alternate_languages = 2 secondary_langs = list("Sol Common") @@ -300,7 +301,7 @@ /////SPIDER RACE///// ///////////////////// /datum/species/spider //These actually look pretty damn spooky! - name = "Vasilissan" + name = SPECIES_VASILISSAN name_plural = "Vasilissans" icobase = 'icons/mob/human_races/r_spider.dmi' deform = 'icons/mob/human_races/r_def_spider.dmi' diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 7d2d86ab767..0bcfcf61745 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1277,4 +1277,8 @@ default behaviour is: /mob/living/proc/has_vision() - return !(eye_blind || (disabilities & BLIND) || stat || blinded) \ No newline at end of file + return !(eye_blind || (disabilities & BLIND) || stat || blinded) + + +/mob/living/proc/dirties_floor() // If we ever decide to add fancy conditionals for making dirty floors (floating, etc), here's the proc. + return makes_dirt \ No newline at end of file diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 3d9140dd468..08bebc91b2f 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -380,8 +380,13 @@ var/turf/location = get_turf(src) location.hotspot_expose(fire_burn_temperature(), 50, 1) -/mob/living/fire_act() - adjust_fire_stacks(2) +//altered this to cap at the temperature of the fire causing it, using the same 1:1500 value as /mob/living/carbon/human/handle_fire() in human/life.dm +/mob/living/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + if(exposed_temperature) + if(fire_stacks < exposed_temperature/1500) // Subject to balance + adjust_fire_stacks(2) + else + adjust_fire_stacks(2) IgniteMob() //Share fire evenly between the two mobs diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 9739e596b8e..1ee86da6ef8 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -16,7 +16,6 @@ var/brainloss = 0 //'Retardation' damage caused by someone hitting you in the head with a bible or being infected with brainrot. var/halloss = 0 //Hallucination damage. 'Fake' damage obtained through hallucinating or the holodeck. Sleeping should cause it to wear off. - var/hallucination = 0 //Directly affects how long a mob will hallucinate for var/list/atom/hallucinations = list() //A list of hallucinated people that try to attack the mob. See /obj/effect/fake_attacker in hallucinations.dm @@ -59,3 +58,5 @@ var/list/hud_list //Holder for health hud, status hud, wanted hud, etc (not like inventory slots) var/has_huds = FALSE //Whether or not we should bother initializing the above list + + var/makes_dirt = TRUE //FALSE if the mob shouldn't be making dirt on the ground when it walks \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm index 7d24676e0b9..e723b4ee41d 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm @@ -142,15 +142,27 @@ chargecost = 500 /obj/item/weapon/shockpaddles/robot/hound/jumper - name = "paws of life" - icon = 'icons/mob/dogborg_vr.dmi' - icon_state = "defibpaddles0" + name = "jumper paws" desc = "Zappy paws. For rebooting a full body prostetic." - combat = 1 - attack_verb = list("batted", "pawed", "bopped", "whapped") - chargecost = 500 use_on_synthetic = 1 +/obj/item/weapon/reagent_containers/borghypo/hound + name = "MediHound hypospray" + desc = "An advanced chemical synthesizer and injection system utilizing carrier's reserves, designed for heavy-duty medical equipment." + charge_cost = 10 + var/datum/matter_synth/water = null + +/obj/item/weapon/reagent_containers/borghypo/hound/process() //Recharges in smaller steps and uses the water reserves as well. + if(isrobot(loc)) + var/mob/living/silicon/robot/R = loc + if(R && R.cell) + for(var/T in reagent_ids) + if(reagent_volumes[T] < volume && water.energy >= charge_cost) + R.cell.use(charge_cost) + water.use_charge(charge_cost) + reagent_volumes[T] = min(reagent_volumes[T] + 1, volume) + return 1 + //Tongue stuff /obj/item/device/dogborg/tongue name = "synthetic tongue" @@ -188,7 +200,14 @@ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) if(user.client && (target in user.client.screen)) to_chat(user, "You need to take \the [target.name] off before cleaning it!") - else if(istype(target,/obj/effect/decal/cleanable) && water.energy >= 5) + if(istype(target, /obj/structure/sink) || istype(target, /obj/structure/toilet)) //Dog vibes. + user.visible_message("[user] begins to lap up water from [target.name].", "You begin to lap up water from [target.name].") + if(do_after (user, 50)) + water.add_charge(50) + else if(water.energy < 5) + to_chat(user, "Your mouth feels dry.") + return + else if(istype(target,/obj/effect/decal/cleanable)) user.visible_message("[user] begins to lick off \the [target.name].", "You begin to lick off \the [target.name]...") if(do_after (user, 50)) to_chat(user, "You finish licking off \the [target.name].") @@ -196,7 +215,7 @@ qdel(target) var/mob/living/silicon/robot.R = user R.cell.charge += 50 - else if(istype(target,/obj/item) && water.energy >= 5) + else if(istype(target,/obj/item)) if(istype(target,/obj/item/trash)) user.visible_message("[user] nibbles away at \the [target.name].", "You begin to nibble away at \the [target.name]...") if(do_after (user, 50)) @@ -238,25 +257,14 @@ "[user] has shocked you with its tongue! You can feel the betrayal.") playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) R.cell.charge -= 666 - else if(water.energy >= 5) + else user.visible_message("\the [user] affectionally licks all over \the [target]'s face!", "You affectionally lick all over \the [target]'s face!") playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1) water.use_charge(5) var/mob/living/carbon/human/H = target if(H.species.lightweight == 1) H.Weaken(3) - return - else if(istype(target, /obj/structure/window) && water.energy >= 1) - user.visible_message("[user] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...") - if(do_after (user, 50)) - to_chat(user, "You clean \the [target.name].") - water.use_charge(5) - target.color = initial(target.color) - else if(istype(target, /obj/structure/sink) || istype(target, /obj/structure/toilet)) //Dog vibes. - user.visible_message("[user] begins to lap up water from [target.name].", "You begin to lap up water from [target.name].") - if(do_after (user, 50)) - water.add_charge(100) - else if(water.energy >= 5) + else user.visible_message("[user] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...") if(do_after (user, 50)) to_chat(user, "You clean \the [target.name].") diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm index 39236a824fb..f6c2028fec5 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm @@ -11,7 +11,6 @@ var/min_health = -100 var/cleaning = 0 var/patient_laststat = null - var/mob_energy = -100 //Energy gained from digesting dead mobs (including PCs) var/list/injection_chems = list("inaprovaline", "dexalin", "bicaridine", "kelotane","anti_toxin", "alkysine", "imidazoline", "spaceacillin", "paracetamol") //The borg is able to heal every damage type. As a nerf, they use 750 charge per injection. var/eject_port = "ingestion" var/list/items_preserved = list() @@ -19,6 +18,12 @@ var/compactor = FALSE var/analyzer = FALSE var/decompiler = FALSE + var/delivery = FALSE + var/delivery_tag = "Fuel" + var/list/deliverylists = list() + var/list/deliveryslot_1 = list() + var/list/deliveryslot_2 = list() + var/list/deliveryslot_3 = list() var/datum/research/techonly/files //Analyzerbelly var. var/synced = FALSE var/startdrain = 500 @@ -50,52 +55,11 @@ return if(target in hound.module.modules) return - if(length(contents) > (max_item_count - 1)) + if(length(contents) >= max_item_count) to_chat(user, "Your [src.name] is full. Eject or process contents to continue.") return - if(analyzer == TRUE) - if(istype(target, /obj/item)) - var/obj/target_obj = target - if(target_obj.w_class > ITEMSIZE_LARGE) - to_chat(user, "\The [target] is too large to fit into your [src.name]") - return - user.visible_message("[hound.name] is ingesting [target.name] into their [src.name].", "You start ingesting [target] into your [src.name]...") - if(do_after(user, 30, target) && length(contents) < max_item_count) - target.forceMove(src) - user.visible_message("[hound.name]'s internal analyzer groans lightly as [target.name] slips inside.", "Your internal analyzer groans lightly as [target] slips inside.") - playsound(hound, gulpsound, vol = 60, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises) - if(istype(target,/obj/item)) - var/obj/item/tech_item = target - for(var/T in tech_item.origin_tech) - to_chat(user, "\The [tech_item] has level [tech_item.origin_tech[T]] in [CallTechName(T)].") - update_patient() - if(UI_open == TRUE) - sleeperUI(usr) - return - - else if(ishuman(target)) - var/mob/living/carbon/human/trashman = target - if(patient) - to_chat(user, "Your [src.name] is already occupied.") - return - if(trashman.buckled) - to_chat(user, "[trashman] is buckled and can not be put into your [src.name].") - return - user.visible_message("[hound.name] is ingesting [trashman] into their [src.name].", "You start ingesting [trashman] into your [src.name]...") - if(do_after(user, 30, trashman) && !patient && !trashman.buckled && length(contents) < max_item_count) - trashman.forceMove(src) - trashman.reset_view(src) - processing_objects |= src - user.visible_message("[hound.name]'s internal analyzer groans lightly as [trashman] slips inside.", "Your internal analyzer groans lightly as [trashman] slips inside.") - playsound(hound, gulpsound, vol = 100, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises) - update_patient() - if(UI_open == TRUE) - sleeperUI(usr) - return - return - - if(compactor == TRUE) + if(compactor) if(istype(target, /obj/item) || istype(target, /obj/effect/decal/remains)) var/obj/target_obj = target if(target_obj.w_class > ITEMSIZE_LARGE) @@ -104,11 +68,17 @@ user.visible_message("[hound.name] is ingesting [target.name] into their [src.name].", "You start ingesting [target] into your [src.name]...") if(do_after(user, 30, target) && length(contents) < max_item_count) target.forceMove(src) - user.visible_message("[hound.name]'s garbage processor groans lightly as [target.name] slips inside.", "Your garbage compactor groans lightly as [target] slips inside.") + user.visible_message("[hound.name]'s [src.name] groans lightly as [target.name] slips inside.", "Your [src.name] groans lightly as [target] slips inside.") playsound(hound, gulpsound, vol = 60, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises) + if(analyzer && istype(target,/obj/item)) + var/obj/item/tech_item = target + for(var/T in tech_item.origin_tech) + to_chat(user, "\The [tech_item] has level [tech_item.origin_tech[T]] in [CallTechName(T)].") + if(delivery) + if(islist(deliverylists[delivery_tag])) + deliverylists[delivery_tag] |= target + to_chat(user, "\The [target.name] added to cargo compartment slot: [delivery_tag].") update_patient() - if(UI_open == TRUE) - sleeperUI(usr) return if(istype(target, /mob/living/simple_animal/mouse)) //Edible mice, dead or alive whatever. Mostly for carcass picking you cruel bastard :v @@ -117,11 +87,13 @@ if(do_after(user, 30, trashmouse) && length(contents) < max_item_count) trashmouse.forceMove(src) trashmouse.reset_view(src) - user.visible_message("[hound.name]'s garbage processor groans lightly as [trashmouse] slips inside.", "Your garbage compactor groans lightly as [trashmouse] slips inside.") + user.visible_message("[hound.name]'s [src.name] groans lightly as [trashmouse] slips inside.", "Your [src.name] groans lightly as [trashmouse] slips inside.") playsound(hound, gulpsound, vol = 60, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises) + if(delivery) + if(islist(deliverylists[delivery_tag])) + deliverylists[delivery_tag] |= trashmouse + to_chat(user, "\The [trashmouse] added to cargo compartment slot: [delivery_tag].") update_patient() - if(UI_open == TRUE) - sleeperUI(usr) return else if(ishuman(target)) @@ -137,13 +109,18 @@ trashman.forceMove(src) trashman.reset_view(src) processing_objects |= src - user.visible_message("[hound.name]'s garbage processor groans lightly as [trashman] slips inside.", "Your garbage compactor groans lightly as [trashman] slips inside.") + user.visible_message("[hound.name]'s [src.name] groans lightly as [trashman] slips inside.", "Your [src.name] groans lightly as [trashman] slips inside.") + message_admins("[key_name(hound)] has eaten [key_name(patient)] as a dogborg. ([hound ? "JMP" : "null"])") playsound(hound, gulpsound, vol = 100, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises) + if(delivery) + if(islist(deliverylists[delivery_tag])) + deliverylists[delivery_tag] |= trashman + to_chat(user, "\The [trashman] added to cargo compartment slot: [delivery_tag].") + to_chat(trashman, "[hound.name] has added you to their cargo compartment slot: [delivery_tag].") update_patient() - if(UI_open == TRUE) - sleeperUI(usr) return return + else if(ishuman(target)) var/mob/living/carbon/human/H = target if(H.buckled) @@ -154,50 +131,38 @@ return user.visible_message("[hound.name] is ingesting [H.name] into their [src.name].", "You start ingesting [H] into your [src]...") if(!patient && !H.buckled && do_after (user, 50, H)) - - if(!proximity) return //If they moved away, you can't eat them. - - if(patient) return //If you try to eat two people at once, you can only eat one. - + if(!proximity) + return //If they moved away, you can't eat them. + if(patient) + return //If you try to eat two people at once, you can only eat one. else //If you don't have someone in you, proceed. H.forceMove(src) H.reset_view(src) update_patient() processing_objects |= src - user.visible_message("[hound.name]'s medical pod lights up as [H.name] slips inside into their [src.name].", "Your medical pod lights up as [H] slips into your [src]. Life support functions engaged.") + user.visible_message("[hound.name]'s [src.name] lights up as [H.name] slips inside.", "Your [src] lights up as [H] slips inside. Life support functions engaged.") message_admins("[key_name(hound)] has eaten [key_name(patient)] as a dogborg. ([hound ? "JMP" : "null"])") playsound(hound, gulpsound, vol = 100, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises) - if(UI_open == TRUE) - sleeperUI(usr) /obj/item/device/dogborg/sleeper/proc/go_out(var/target) hound = src.loc + items_preserved.Cut() + cleaning = 0 + for(var/list/dlist in deliverylists) + dlist.Cut() if(length(contents) > 0) hound.visible_message("[hound.name] empties out their contents via their [eject_port] port.", "You empty your contents via your [eject_port] port.") - if(target) - if(ishuman(target)) - var/mob/living/carbon/human/person = target + for(var/C in contents) + if(ishuman(C)) + var/mob/living/carbon/human/person = C person.forceMove(get_turf(src)) person.reset_view() else - var/obj/T = target + var/obj/T = C T.loc = hound.loc - else - for(var/C in contents) - if(ishuman(C)) - var/mob/living/carbon/human/person = C - person.forceMove(get_turf(src)) - person.reset_view() - else - var/obj/T = C - T.loc = hound.loc - items_preserved.Cut() - cleaning = 0 playsound(loc, 'sound/effects/splat.ogg', 50, 1) update_patient() else //You clicked eject with nothing in you, let's just reset stuff to be sure. - items_preserved.Cut() - cleaning = 0 update_patient() /obj/item/device/dogborg/sleeper/proc/drain(var/amt = 3) //Slightly reduced cost (before, it was always injecting inaprov) @@ -208,10 +173,9 @@ if(..()) return sleeperUI(user) - UI_open = TRUE /obj/item/device/dogborg/sleeper/proc/sleeperUI(mob/user) - var/dat + var/dat = "[name] Console
" if(islist(injection_chems)) //Only display this if we're a drug-dispensing doggo. dat += "

Injector

" @@ -234,15 +198,33 @@ dat += "Self-Clean" else dat += "Self-Clean" + if(delivery) + dat += "

Cargo Compartment


" + dat += "Active Slot: [delivery_tag]" + if(islist(deliverylists[delivery_tag])) + dat += "Eject Slot" dat += "
" - if(compactor == TRUE && length(contents))//garbage counter for trashpup - var/obj/item/device/dogborg/sleeper/compactor/garbo = src - dat += "Current load: [length(contents)] / [garbo.max_item_count] objects.
" + if(!delivery && compactor && length(contents))//garbage counter for trashpup + dat += "Current load: [length(contents)] / [max_item_count] objects.
" dat += "([list2text(contents,", ")])

" - if(analyzer == TRUE && synced == FALSE) + if(delivery && length(contents)) + dat += "Current load: [length(contents)] / [max_item_count] objects.
" + dat += "Cargo compartment slot: Cargo 1.
" + if(length(deliveryslot_1)) + dat += "([list2text(deliveryslot_1,", ")])
" + dat += "Cargo compartment slot: Cargo 2.
" + if(length(deliveryslot_2)) + dat += "([list2text(deliveryslot_2,", ")])
" + dat += "Cargo compartment slot: Cargo 3.
" + if(length(deliveryslot_3)) + dat += "([list2text(deliveryslot_3,", ")])
" + dat += "Cargo compartment slot: Fuel.
" + dat += "([list2text(contents - (deliveryslot_1 + deliveryslot_2 + deliveryslot_3),", ")])

" + + if(analyzer && synced) dat += "Sync Files
" //Cleaning and there are still un-preserved items @@ -295,10 +277,10 @@ dat += "
[R.name]:
[round(R.volume, 0.1)] units

" dat += "
" - var/datum/browser/popup = new(user, "sleeper", "[name] Console", 520, 540) //Set up the popup browser window - //popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) //I have no idea what this is, but it feels irrelevant and causes runtimes idk. + var/datum/browser/popup = new(user, "sleeper_b", "[name] Console", 400, 500, src) popup.set_content(dat) popup.open() + UI_open = TRUE return /obj/item/device/dogborg/sleeper/Topic(href, href_list) @@ -328,7 +310,6 @@ drain(startdrain) processing_objects |= src update_patient() - sleeperUI(usr) if(patient) to_chat(patient, "[hound.name]'s [src.name] fills with caustic enzymes around you!") return @@ -343,7 +324,29 @@ eject_port = "ingestion" sleeperUI(usr) return - + if(href_list["deliveryslot"]) + var/tag = input("Select active delivery slot.") as null|anything in deliverylists + if(!tag) + return 0 + delivery_tag = tag + sleeperUI(usr) + return + if(href_list["slot_eject"]) + if(length(deliverylists[delivery_tag]) > 0) + hound.visible_message("[hound.name] empties out their cargo compartment via their [eject_port] port.", "You empty your cargo compartment via your [eject_port] port.") + for(var/C in deliverylists[delivery_tag]) + if(ishuman(C)) + var/mob/living/carbon/human/person = C + person.forceMove(get_turf(src)) + person.reset_view() + else + var/obj/T = C + T.loc = hound.loc + playsound(loc, 'sound/effects/splat.ogg', 50, 1) + update_patient() + deliverylists[delivery_tag].Cut() + sleeperUI(usr) + return if(href_list["sync"]) synced = TRUE var/success = 0 @@ -392,6 +395,15 @@ //For if the dogborg's existing patient uh, doesn't make it. /obj/item/device/dogborg/sleeper/proc/update_patient() hound = src.loc + if(UI_open == TRUE) + sleeperUI(hound) + + //Cleaning looks better with red on, even with nobody in it + if(cleaning || (length(contents) > 10) || (decompiler && (length(contents) > 5)) || (analyzer && (length(contents) > 1))) + hound.sleeper_r = TRUE + hound.sleeper_g = FALSE + hound.updateicon() + return //Well, we HAD one, what happened to them? if(patient in contents) @@ -411,8 +423,6 @@ //Update icon hound.updateicon() //Return original patient - if(UI_open == TRUE) - sleeperUI(usr) return(patient) //Check for a new patient @@ -433,30 +443,16 @@ patient_laststat = patient.stat //Update icon and return new patient hound.updateicon() - if(UI_open == TRUE) - sleeperUI(usr) return(C) - //Cleaning looks better with red on, even with nobody in it - if(cleaning || (length(contents) > 11)) - hound.sleeper_r = TRUE - hound.sleeper_g = FALSE - - //Letting analyzer gut swell if overloaded. - if(analyzer == TRUE && (length(contents) > 1)) - hound.sleeper_r = TRUE - hound.sleeper_g = FALSE - //Couldn't find anyone, and not cleaning - else if(!cleaning && !patient && !length(contents)) + if(!cleaning && !patient) hound.sleeper_r = FALSE hound.sleeper_g = FALSE patient_laststat = null patient = null hound.updateicon() - if(UI_open == TRUE) - sleeperUI(usr) return //Gurgleborg process @@ -467,10 +463,10 @@ if(!(I in contents)) items_preserved -= I - var/list/touchable_items = contents - items_preserved + var/list/touchable_items = contents - items_preserved - (deliveryslot_1 + deliveryslot_2 + deliveryslot_3) //Belly is entirely empty - if(!length(contents)) + if(!length(touchable_items)) var/finisher = pick( 'sound/vore/death1.ogg', 'sound/vore/death2.ogg', @@ -508,9 +504,11 @@ if(air_master.current_cycle%3==1 && length(touchable_items)) //Burn all the mobs or add them to the exclusion list + var/volume = 0 for(var/mob/living/T in (touchable_items)) + touchable_items -= T //Exclude mobs from loose item picking. if((T.status_flags & GODMODE) || !T.digestable) - items_preserved += T + items_preserved |= T else var/old_brute = T.getBruteLoss() var/old_burn = T.getFireLoss() @@ -520,66 +518,55 @@ var/actual_burn = T.getFireLoss() - old_burn var/damage_gain = actual_brute + actual_burn drain(-25 * damage_gain) //25*total loss as with voreorgan stats. - update_patient() + water.add_charge(damage_gain) + if(T.stat == DEAD) + if(ishuman(T)) + message_admins("[key_name(hound)] has digested [key_name(T)] as a dogborg. ([hound ? "JMP" : "null"])") + to_chat(hound, "You feel your belly slowly churn around [T], breaking them down into a soft slurry to be used as power for your systems.") + to_chat(T, "You feel [hound]'s belly slowly churn around your form, breaking you down into a soft slurry to be used as power for [hound]'s systems.") + var/deathsound = pick( + 'sound/vore/death1.ogg', + 'sound/vore/death2.ogg', + 'sound/vore/death3.ogg', + 'sound/vore/death4.ogg', + 'sound/vore/death5.ogg', + 'sound/vore/death6.ogg', + 'sound/vore/death7.ogg', + 'sound/vore/death8.ogg', + 'sound/vore/death9.ogg', + 'sound/vore/death10.ogg') + playsound(hound, deathsound, vol = 100, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/client_preference/digestion_noises) + if(is_vore_predator(T)) + for(var/belly in T.vore_organs) + var/obj/belly/B = belly + for(var/atom/movable/thing in B) + thing.forceMove(src) + if(ismob(thing)) + to_chat(thing, "As [T] melts away around you, you find yourself in [hound]'s [name]") + for(var/obj/item/I in T) + if(istype(I,/obj/item/organ/internal/mmi_holder/posibrain)) + var/obj/item/organ/internal/mmi_holder/MMI = I + var/atom/movable/brain = MMI.removed() + if(brain) + hound.remove_from_mob(brain,src) + brain.forceMove(src) + items_preserved |= brain + else + T.drop_from_inventory(I, src) + if(ishuman(T)) + var/mob/living/carbon/human/Prey = T + volume = (Prey.bloodstr.total_volume + Prey.ingested.total_volume + Prey.touching.total_volume + Prey.weight) * Prey.size_multiplier + water.add_charge(volume) + if(T.reagents) + volume = T.reagents.total_volume + water.add_charge(volume) + qdel(T) //Pick a random item to deal with (if there are any) - var/atom/target = pick(touchable_items) - var/volume = 0 + if(length(touchable_items)) + var/atom/target = pick(touchable_items) - //Handle the target being a mob - if(isliving(target)) - var/mob/living/T = target - - //Mob is now dead - if(T.stat == DEAD) - if(ishuman(target)) - message_admins("[key_name(hound)] has digested [key_name(T)] as a dogborg. ([hound ? "JMP" : "null"])") - to_chat(hound, "You feel your belly slowly churn around [T], breaking them down into a soft slurry to be used as power for your systems.") - to_chat(T, "You feel [hound]'s belly slowly churn around your form, breaking you down into a soft slurry to be used as power for [hound]'s systems.") - drain(mob_energy) //Fueeeeellll - var/deathsound = pick( - 'sound/vore/death1.ogg', - 'sound/vore/death2.ogg', - 'sound/vore/death3.ogg', - 'sound/vore/death4.ogg', - 'sound/vore/death5.ogg', - 'sound/vore/death6.ogg', - 'sound/vore/death7.ogg', - 'sound/vore/death8.ogg', - 'sound/vore/death9.ogg', - 'sound/vore/death10.ogg') - playsound(hound, deathsound, vol = 100, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/client_preference/digestion_noises) - if(is_vore_predator(T)) - for(var/belly in T.vore_organs) - var/obj/belly/B = belly - for(var/atom/movable/thing in B) - thing.forceMove(src) - if(ismob(thing)) - to_chat(thing, "As [T] melts away around you, you find yourself in [hound]'s [name]") - for(var/obj/item/I in T) - if(istype(I,/obj/item/organ/internal/mmi_holder/posibrain)) - var/obj/item/organ/internal/mmi_holder/MMI = I - var/atom/movable/brain = MMI.removed() - if(brain) - hound.remove_from_mob(brain,src) - brain.forceMove(src) - items_preserved += brain - else - T.drop_from_inventory(I, src) - if(ishuman(T)) - var/mob/living/carbon/human/Prey = T - volume = (Prey.bloodstr.total_volume + Prey.ingested.total_volume + Prey.touching.total_volume + Prey.weight) * Prey.size_multiplier - water.add_charge(volume) - if(T.reagents) - volume = T.reagents.total_volume - water.add_charge(volume) - qdel(T) - update_patient() - if(UI_open == TRUE) - sleeperUI(hound) - - //Handle the target being anything but a /mob/living - else + //Handle the target being anything but a /mob/living var/obj/item/T = target if(istype(T)) if(T.reagents) @@ -596,12 +583,12 @@ drain(-50 * digested) if(volume) water.add_charge(volume) - if(!analyzer && compactor && T.matter) + if(!analyzer && !delivery && compactor && T.matter) for(var/material in T.matter) var/total_material = T.matter[material] if(istype(T,/obj/item/stack)) var/obj/item/stack/stack = T - total_material *= stack.get_amount() + total_material *= (0.5 * stack.get_amount()) if(material == DEFAULT_WALL_MATERIAL) metal.add_charge(total_material) if(material == "glass") @@ -618,10 +605,8 @@ drain(-100) else items_preserved |= target - if(UI_open == TRUE) - update_patient() - sleeperUI(hound) - return + update_patient() + return /obj/item/device/dogborg/sleeper/process() @@ -671,4 +656,11 @@ desc = "A mounted matter decompiling unit with fuel processor." icon_state = "decompiler" max_item_count = 10 - decompiler = TRUE \ No newline at end of file + decompiler = TRUE + +/obj/item/device/dogborg/sleeper/compactor/delivery //Unfinished and unimplemented, still testing. + name = "Cargo Belly" + desc = "A mounted cargo bay unit for tagged deliveries." + icon_state = "decompiler" + max_item_count = 20 + delivery = TRUE \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index 04a96408b3e..638dda10043 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -166,7 +166,6 @@ var/global/list/robot_modules = list( sprites = list( "M-USE NanoTrasen" = "robot", "Cabeiri" = "eyebot-standard", - "CUPCAKE" = "Noble-STD", "Haruka" = "marinaSD", "Usagi" = "tallflower", "Telemachus" = "toiletbot", @@ -198,7 +197,6 @@ var/global/list/robot_modules = list( sprites = list( "M-USE NanoTrasen" = "robotMedi", "Cabeiri" = "eyebot-medical", - "CUPCAKE" = "Noble-MED", "Haruka" = "marinaMD", "Minako" = "arachne", "Usagi" = "tallwhite", @@ -269,7 +267,6 @@ var/global/list/robot_modules = list( sprites = list( "M-USE NanoTrasen" = "robotMedi", "Cabeiri" = "eyebot-medical", - "CUPCAKE" = "Noble-MED", "Haruka" = "marinaMD", "Minako" = "arachne", "Usagi" = "tallwhite", @@ -342,7 +339,6 @@ var/global/list/robot_modules = list( sprites = list( "M-USE NanoTrasen" = "robotEngi", "Cabeiri" = "eyebot-engineering", - "CUPCAKE" = "Noble-ENG", "Haruka" = "marinaENG", "Usagi" = "tallyellow", "Telemachus" = "toiletbotengineering", @@ -500,7 +496,6 @@ var/global/list/robot_modules = list( "Cabeiri" = "eyebot-security", "Cerberus" = "bloodhound", "Cerberus - Treaded" = "treadhound", - "CUPCAKE" = "Noble-SEC", "Haruka" = "marinaSC", "Usagi" = "tallred", "Telemachus" = "toiletbotsecurity", @@ -544,7 +539,6 @@ var/global/list/robot_modules = list( "M-USE NanoTrasen" = "robotJani", "Arachne" = "crawler", "Cabeiri" = "eyebot-janitor", - "CUPCAKE" = "Noble-CLN", "Haruka" = "marinaJN", "Telemachus" = "toiletbotjanitor", "WTOperator" = "sleekjanitor", @@ -595,7 +589,6 @@ var/global/list/robot_modules = list( sprites = list( "M-USE NanoTrasen" = "robotServ", "Cabeiri" = "eyebot-standard", - "CUPCAKE" = "Noble-SRV", "Haruka" = "marinaSV", "Michiru" = "maidbot", "Usagi" = "tallgreen", @@ -650,7 +643,6 @@ var/global/list/robot_modules = list( sprites = list( "M-USE NanoTrasen" = "robotCler", "Cabeiri" = "eyebot-standard", - "CUPCAKE" = "Noble-SRV", "Haruka" = "marinaSV", "Usagi" = "tallgreen", "Telemachus" = "toiletbot", @@ -690,7 +682,6 @@ var/global/list/robot_modules = list( sprites = list( "NM-USE NanoTrasen" = "robotMine", "Cabeiri" = "eyebot-miner", - "CUPCAKE" = "Noble-DIG", "Haruka" = "marinaMN", "Telemachus" = "toiletbotminer", "WTOperator" = "sleekminer", diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm index 9d5da2f9bce..18853c5a7cf 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm @@ -63,55 +63,64 @@ /obj/item/weapon/robot_module/robot/medical/surgeon //VOREStation sprites vr_sprites = list( - "Acheron" = "mechoid-Medical" + "Acheron" = "mechoid-Medical", + "Shellguard Noble" = "Noble-MED" ) /obj/item/weapon/robot_module/robot/medical/crisis //VOREStation sprites vr_sprites = list( "Handy" = "handy-med", - "Acheron" = "mechoid-Medical" + "Acheron" = "mechoid-Medical", + "Shellguard Noble" = "Noble-MED" ) /obj/item/weapon/robot_module/robot/clerical/butler //VOREStation sprites vr_sprites = list( "Handy - Service" = "handy-service", "Handy - Hydro" = "handy-hydro", - "Acheron" = "mechoid-Service" + "Acheron" = "mechoid-Service", + "Shellguard Noble" = "Noble-SRV" ) /obj/item/weapon/robot_module/robot/clerical/general //VOREStation sprites vr_sprites = list( "Handy" = "handy-clerk", - "Acheron" = "mechoid-Service" + "Acheron" = "mechoid-Service", + "Shellguard Noble" = "Noble-SRV" ) /obj/item/weapon/robot_module/robot/janitor //VOREStation sprites vr_sprites = list( "Handy" = "handy-janitor", - "Acheron" = "mechoid-Janitor" + "Acheron" = "mechoid-Janitor", + "Shellguard Noble" = "Noble-CLN" ) /obj/item/weapon/robot_module/robot/security/general //VOREStation sprites vr_sprites = list( "Handy" = "handy-sec", - "Acheron" = "mechoid-Security" + "Acheron" = "mechoid-Security", + "Shellguard Noble" = "Noble-SEC" ) /obj/item/weapon/robot_module/robot/miner //VOREStation sprites vr_sprites = list( "Handy" = "handy-miner", - "Acheron" = "mechoid-Miner" + "Acheron" = "mechoid-Miner", + "Shellguard Noble" = "Noble-DIG" ) /obj/item/weapon/robot_module/robot/standard //VOREStation sprites vr_sprites = list( "Handy" = "handy-standard", - "Acheron" = "mechoid-Standard" + "Acheron" = "mechoid-Standard", + "Shellguard Noble" = "Noble-STD" ) /obj/item/weapon/robot_module/robot/engineering/general //VOREStation sprites vr_sprites = list( - "Acheron" = "mechoid-Engineering" + "Acheron" = "mechoid-Engineering", + "Shellguard Noble" = "Noble-ENG" ) /obj/item/weapon/robot_module/robot/research //VOREStation sprites @@ -148,7 +157,7 @@ var/datum/matter_synth/water = new /datum/matter_synth() water.name = "Water reserves" water.recharge_rate = 0 - water.max_energy = 1000 + water.max_energy = 500 water.energy = 0 R.water_res = water synths += water @@ -170,6 +179,7 @@ R.dogborg = TRUE R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill + R.verbs |= /mob/living/silicon/robot/proc/robot_mount R.verbs |= /mob/living/proc/shred_limb ..() @@ -208,7 +218,6 @@ src.modules += new /obj/item/weapon/dogborg/jaws/small(src) //In case a patient is being attacked by carp. src.modules += new /obj/item/device/dogborg/boop_module(src) //Boop the crew. src.modules += new /obj/item/device/healthanalyzer(src) // See who's hurt specificially. - src.modules += new /obj/item/weapon/reagent_containers/borghypo(src)//So medi-hounds aren't nearly useless src.modules += new /obj/item/weapon/reagent_containers/syringe(src) //In case the chemist is nice! src.modules += new /obj/item/weapon/reagent_containers/glass/beaker(src)//For holding the chemicals when the chemist is nice src.modules += new /obj/item/device/sleevemate(src) //Lets them scan people. @@ -218,11 +227,15 @@ var/datum/matter_synth/water = new /datum/matter_synth() water.name = "Water reserves" water.recharge_rate = 0 - water.max_energy = 1000 + water.max_energy = 500 water.energy = 0 R.water_res = water synths += water + var/obj/item/weapon/reagent_containers/borghypo/hound/H = new /obj/item/weapon/reagent_containers/borghypo/hound(src) + H.water = water + src.modules += H + var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) T.water = water src.modules += T @@ -240,6 +253,7 @@ R.dogborg = TRUE R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill + R.verbs |= /mob/living/silicon/robot/proc/robot_mount R.verbs |= /mob/living/proc/shred_limb ..() @@ -264,7 +278,7 @@ var/datum/matter_synth/water = new /datum/matter_synth() water.name = "Water reserves" water.recharge_rate = 0 - water.max_energy = 1000 + water.max_energy = 500 water.energy = 0 R.water_res = water synths += water @@ -286,6 +300,7 @@ R.dogborg = TRUE R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill + R.verbs |= /mob/living/silicon/robot/proc/robot_mount R.verbs |= /mob/living/proc/shred_limb ..() @@ -307,17 +322,17 @@ var/datum/matter_synth/metal = new /datum/matter_synth/metal() metal.name = "Steel reserves" metal.recharge_rate = 0 - metal.max_energy = 100000 + metal.max_energy = 50000 metal.energy = 0 var/datum/matter_synth/glass = new /datum/matter_synth/glass() glass.name = "Glass reserves" glass.recharge_rate = 0 - glass.max_energy = 100000 + glass.max_energy = 50000 glass.energy = 0 var/datum/matter_synth/water = new /datum/matter_synth() water.name = "Water reserves" water.recharge_rate = 0 - water.max_energy = 1000 + water.max_energy = 500 water.energy = 0 R.water_res = water @@ -366,6 +381,7 @@ R.dogborg = TRUE R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill + R.verbs |= /mob/living/silicon/robot/proc/robot_mount R.verbs |= /mob/living/proc/shred_limb ..() @@ -390,7 +406,7 @@ var/datum/matter_synth/water = new /datum/matter_synth() water.name = "Water reserves" water.recharge_rate = 0 - water.max_energy = 1000 + water.max_energy = 500 water.energy = 0 R.water_res = water synths += water @@ -412,6 +428,7 @@ R.dogborg = TRUE R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill + R.verbs |= /mob/living/silicon/robot/proc/robot_mount R.verbs |= /mob/living/proc/shred_limb ..() @@ -435,7 +452,7 @@ src.modules += new /obj/item/device/t_scanner(src) src.modules += new /obj/item/taperoll/engineering(src) src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src) - src.modules += new /obj/item/device/geiger(src) + src.modules += new /obj/item/weapon/pickaxe(src) src.modules += new /obj/item/weapon/dogborg/jaws/small(src) src.modules += new /obj/item/device/dogborg/boop_module(src) src.emag = new /obj/item/weapon/dogborg/pounce(src) @@ -444,27 +461,27 @@ var/datum/matter_synth/metal = new /datum/matter_synth/metal() metal.name = "Steel reserves" metal.recharge_rate = 50 - metal.max_energy = 100000 + metal.max_energy = 50000 metal.energy = 5000 var/datum/matter_synth/glass = new /datum/matter_synth/glass() glass.name = "Glass reserves" glass.recharge_rate = 50 - glass.max_energy = 100000 + glass.max_energy = 50000 glass.energy = 5000 var/datum/matter_synth/wood = new /datum/matter_synth/wood() wood.name = "Wood reserves" wood.recharge_rate = 50 - wood.max_energy = 100000 + wood.max_energy = 50000 wood.energy = 5000 var/datum/matter_synth/plastic = new /datum/matter_synth/plastic() plastic.name = "Plastic reserves" plastic.recharge_rate = 50 - plastic.max_energy = 100000 + plastic.max_energy = 50000 plastic.energy = 5000 var/datum/matter_synth/water = new /datum/matter_synth() water.name = "Water reserves" water.recharge_rate = 0 - water.max_energy = 1000 + water.max_energy = 500 water.energy = 0 R.water_res = water @@ -489,6 +506,7 @@ MD.glass = glass MD.wood = wood MD.plastic = plastic + MD.water = water src.modules += MD var/obj/item/stack/material/cyborg/steel/M = new (src) @@ -536,6 +554,7 @@ R.dogborg = TRUE R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill + R.verbs |= /mob/living/silicon/robot/proc/robot_mount R.verbs |= /mob/living/proc/shred_limb ..() @@ -549,5 +568,6 @@ R.default_pixel_x = initial(pixel_x) R.scrubbing = FALSE R.verbs -= /mob/living/silicon/robot/proc/ex_reserve_refill + R.verbs -= /mob/living/silicon/robot/proc/robot_mount R.verbs -= /mob/living/proc/shred_limb ..() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_vr.dm b/code/modules/mob/living/silicon/robot/robot_vr.dm index 14b58b726a9..332fabb19fb 100644 --- a/code/modules/mob/living/silicon/robot/robot_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_vr.dm @@ -123,4 +123,114 @@ E.reagents.add_reagent("water", amount) to_chat(src, "You refill the extinguisher using your water reserves.") else - to_chat(src, "Insufficient water reserves.") \ No newline at end of file + to_chat(src, "Insufficient water reserves.") + +//RIDING +/datum/riding/dogborg + keytype = /obj/item/weapon/material/twohanded/fluff/riding_crop // Crack! + nonhuman_key_exemption = FALSE // If true, nonhumans who can't hold keys don't need them, like borgs and simplemobs. + key_name = "a riding crop" // What the 'keys' for the thing being rided on would be called. + only_one_driver = TRUE // If true, only the person in 'front' (first on list of riding mobs) can drive. + +/datum/riding/dogborg/handle_vehicle_layer() + if(ridden.has_buckled_mobs()) + if(ridden.dir != NORTH) + ridden.layer = ABOVE_MOB_LAYER + else + ridden.layer = initial(ridden.layer) + else + ridden.layer = initial(ridden.layer) + +/datum/riding/dogborg/ride_check(mob/living/M) + var/mob/living/L = ridden + if(L.stat) + force_dismount(M) + return FALSE + return TRUE + +/datum/riding/dogborg/force_dismount(mob/M) + . =..() + ridden.visible_message("[M] stops riding [ridden]!") + +//Hoooo boy. +/datum/riding/dogborg/get_offsets(pass_index) // list(dir = x, y, layer) + var/mob/living/L = ridden + var/scale = L.size_multiplier + + var/list/values = list( + "[NORTH]" = list(0, 8*scale, ABOVE_MOB_LAYER), + "[SOUTH]" = list(0, 8*scale, BELOW_MOB_LAYER), + "[EAST]" = list(-5*scale, 8*scale, ABOVE_MOB_LAYER), + "[WEST]" = list(5*scale, 8*scale, ABOVE_MOB_LAYER)) + + return values + +//Human overrides for taur riding +/mob/living/silicon/robot + max_buckled_mobs = 1 //Yeehaw + can_buckle = TRUE + buckle_movable = TRUE + buckle_lying = FALSE + +/mob/living/silicon/robot/New() + ..() + riding_datum = new /datum/riding/dogborg(src) + +/mob/living/silicon/robot/buckle_mob(mob/living/M, forced = FALSE, check_loc = TRUE) + if(forced) + return ..() // Skip our checks + if(!dogborg) + return FALSE + if(lying) + return FALSE + if(!ishuman(M)) + return FALSE + if(M in buckled_mobs) + return FALSE + if(M.size_multiplier > size_multiplier * 1.2) + to_chat(src,"This isn't a pony show! You need to be bigger for them to ride.") + return FALSE + + var/mob/living/carbon/human/H = M + + if(isTaurTail(H.tail_style)) + to_chat(src,"Too many legs. TOO MANY LEGS!!") + return FALSE + if(M.loc != src.loc) + if(M.Adjacent(src)) + M.forceMove(get_turf(src)) + + . = ..() + if(.) + buckled_mobs[M] = "riding" + +/mob/living/silicon/robot/MouseDrop_T(mob/living/M, mob/living/user) //Prevention for forced relocation caused by can_buckle. Base proc has no other use. + return + +/mob/living/silicon/robot/attack_hand(mob/user as mob) + if(LAZYLEN(buckled_mobs)) + //We're getting off! + if(user in buckled_mobs) + riding_datum.force_dismount(user) + //We're kicking everyone off! + if(user == src) + for(var/rider in buckled_mobs) + riding_datum.force_dismount(rider) + else + . = ..() + +/mob/living/silicon/robot/proc/robot_mount(var/mob/living/M in living_mobs(1)) + set name = "Robot Mount/Dismount" + set category = "Abilities" + set desc = "Let people ride on you." + + if(LAZYLEN(buckled_mobs)) + for(var/rider in buckled_mobs) + riding_datum.force_dismount(rider) + return + if (stat != CONSCIOUS) + return + if(!can_buckle || !istype(M) || !M.Adjacent(src) || M.buckled) + return + if(buckle_mob(M)) + visible_message("[M] starts riding [name]!") \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/animals/penguin.dm b/code/modules/mob/living/simple_animal/animals/penguin.dm index 8463d9ac39c..da7c9c4328c 100644 --- a/code/modules/mob/living/simple_animal/animals/penguin.dm +++ b/code/modules/mob/living/simple_animal/animals/penguin.dm @@ -1,7 +1,7 @@ /mob/living/simple_animal/penguin name = "space penguin" desc = "An ungainly, waddling, cute, and VERY well-dressed bird." - tt_desc = "Aptenodytes forsteri" + tt_desc = "E Aptenodytes forsteri" icon_state = "penguin" icon_living = "penguin" icon_dead = "penguin_dead" diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 6eb4f221645..72a42d0b3ee 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -796,8 +796,6 @@ var/mob/living/L = target_mob if(L.stat != DEAD) return 1 - if(L.invisibility < INVISIBILITY_LEVEL_ONE) - return 1 if (istype(target_mob,/obj/mecha)) var/obj/mecha/M = target_mob if (M.occupant) @@ -917,7 +915,7 @@ continue else if(L in friends) continue - else if(L.invisibility >= INVISIBILITY_LEVEL_ONE) + else if(L.alpha <= EFFECTIVE_INVIS) continue else if(!SA_attackable(L)) continue @@ -1246,7 +1244,7 @@ ai_log("AttackTarget() Bailing because we're disabled",2) LoseTarget() return 0 - if(!target_mob || !SA_attackable(target_mob) || (target_mob.invisibility >= INVISIBILITY_LEVEL_ONE)) //if the target went invisible, you can't follow it + if(!target_mob || !SA_attackable(target_mob) || (target_mob.alpha <= EFFECTIVE_INVIS)) //if the target went invisible, you can't follow it LoseTarget() return 0 if(!(target_mob in ListTargets(view_range))) diff --git a/code/modules/mob/living/simple_animal/vore/catgirl.dm b/code/modules/mob/living/simple_animal/vore/catgirl.dm index dc8b5f1d8d9..315ab0bc1b9 100644 --- a/code/modules/mob/living/simple_animal/vore/catgirl.dm +++ b/code/modules/mob/living/simple_animal/vore/catgirl.dm @@ -16,12 +16,16 @@ melee_damage_lower = 5 melee_damage_upper = 10 + response_help = "pets the" + response_disarm = "gently baps the" + response_harm = "hits the" + speak_chance = 2 speak = list("Meow!","Esp!","Purr!","HSSSSS","Mew?","Nya~") speak_emote = list("purrs","meows") emote_hear = list("meows","mews") - emote_see = list("shakes her head","shivers") - attacktext = list("swatted") + emote_see = list("shakes her head","shivers","stretches","grooms herself") + attacktext = list("swatted","bapped") var/random_skin = 1 var/list/skins = list( diff --git a/code/modules/mob/living/simple_animal/vore/shadekin/shadekin.dm b/code/modules/mob/living/simple_animal/vore/shadekin/shadekin.dm index 7fa04db5dea..d3afd8a6583 100644 --- a/code/modules/mob/living/simple_animal/vore/shadekin/shadekin.dm +++ b/code/modules/mob/living/simple_animal/vore/shadekin/shadekin.dm @@ -161,7 +161,7 @@ // TODO - Customizable per mob B.emote_lists[DM_HOLD] = list( "The walls gently squeeze against you. The wet sounds of shifting flesh against your form fill the air.", - "The hot, humid air rushes around you for a moment as the creature urps. The walls clench in around you for a moment, before relaxxing again.", + "The hot, humid air rushes around you for a moment as the creature urps. The walls clench in around you for a moment, before relaxing again.", "Your body is soaked in the fluids that cling to the churning walls. They squeeze across your form gently, conforming to your shape.", "You can feel the world around you shift and sway as the creature moves! The flesh is stretchy, doughy. You can sink into it a little ways before it bounces back, curling you into a small shape." ) @@ -200,7 +200,7 @@ . = ..() if(ability_flags & AB_PHASE_SHIFTED) density = FALSE - + //Convert spare nutrition into energy at a certain ratio if(. && nutrition > initial(nutrition) && energy < 100) nutrition = max(0, nutrition-5) @@ -208,7 +208,7 @@ /mob/living/simple_animal/shadekin/update_icon() . = ..() - + cut_overlay(tailimage) tailimage.icon_state = icon_state diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index ed5c11163b4..26f3af22627 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -482,9 +482,10 @@ if(mind) mind.active = 0 //we wish to transfer the key manually - if(mind.assigned_role == "Clown") //give them a clownname if they are a clown - new_character.real_name = pick(clown_names) //I hate this being here of all places but unfortunately dna is based on real_name! - new_character.rename_self("clown") + // VOREStation edit to disable the destructive forced renaming for our responsible whitelist clowns. + //if(mind.assigned_role == "Clown") //give them a clownname if they are a clown + // new_character.real_name = pick(clown_names) //I hate this being here of all places but unfortunately dna is based on real_name! + // new_character.rename_self("clown") mind.original = new_character // VOREStation mind.loaded_from_ckey = client.ckey diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm index 71adba5b115..c3e39a513cc 100644 --- a/code/modules/organs/organ_icon.dm +++ b/code/modules/organs/organ_icon.dm @@ -185,7 +185,7 @@ var/global/list/limb_icon_cache = list() var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"] var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]") mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode) // VOREStation edit - overlays |= mark_s //So when it's not on your body, it has icons + add_overlay(mark_s) //So when it's not on your body, it has icons mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons icon_cache_key += "[M][markings[M]["color"]]" diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 816b62a099a..20e5c7e3ae0 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -309,6 +309,7 @@ t = replacetext(t, "\[/h2\]", "") t = replacetext(t, "\[h3\]", "

") t = replacetext(t, "\[/h3\]", "

") + t = replacetext(t, "\[tab\]", "      ") if(!iscrayon) t = replacetext(t, "\[*\]", "
  • ") @@ -630,4 +631,4 @@ /obj/item/weapon/paper/crumpled/bloody/CrashedMedShuttle name = "Blackbox Transcript - VMV Aurora's Light" - info = "\[The paper is torn at the top, presumably from the impact. It's oil-stained, but you can just about read it.]
    mmons 19:52:01: Come on... it's right there in the distance, we're almost there!
    Doctor Nazarril 19:52:26: Odysseus online. Orrderrs, sirr?
    Captain Simmons 19:52:29: Brace for impact. We're going in full-speed.
    Technician Dynasty 19:52:44: Chief, fire's spread to the secondary propulsion systems.
    Captain Simmons 19:52:51: Copy. Any word from TraCon? Transponder's down still?
    Technician Dynasty 19:53:02: Can't get in touch, sir. Emergency beacon's active, but we're not going t-
    Doctor Nazarril 19:53:08: Don't say it. As long as we believe, we'll get through this.
    Captain Simmons 19:53:11: Damn right. We're a few klicks out from the port. Rough landing, but we can do it.
    V.I.T.A 19:53:26: Vessel diagnostics complete. Engines one, two, three offline. Engine four status: critical. Transponder offline. Fire alarm in the patient bay.
    A loud explosion is heard.
    V.I.T.A 19:53:29: Alert: fuel intake valve open.
    Technician Dynasty 19:53:31: ... ah.
    Doctor Nazarril 19:53:34: Trrranslate?
    V.I.T.A 19:53:37: There is a 16.92% chance of this vessel safely landing at the emergency destination. Note that there is an 83.08% chance of detonation of fuel supplies upon landing.
    Technician Dynasty 19:53:48: We'll make it, sure, but we'll explode and take out half the LZ with us. Propulsion's down, we can't slow down. If we land there, everyone in that port dies, no question.
    V.I.T.A 19:53:53: The Technician is correct.
    Doctor Nazarril 19:54:02: Then... we can't land therrre.
    V.I.T.A 19:54:11: Analysing... recommended course of action: attempt emergency landing in isolated area. Chances of survival: negligible.
    Captain Simmons 19:54:27: I- alright. I'm bringing us down. You all know what this means.
    Doctor Nazarril 19:54:33: Sh... I- I understand. It's been- it's been an honorr, Captain, Dynasty, VITA.
    Technician Dynasty 19:54:39: We had a good run. I'm going to miss this.
    Captain Simmons 19:54:47: VITA. Tell them we died heroes. Tell them... we did all we could.
    V.I.T.A 19:54:48: I will. Impact in five. Four. Three.
    Doctor Nazarril 19:54:49: Oh, starrs... I- you werrre all the... best frriends she everr had. Thank you.
    Technician Dynasty 19:54:50: Any time, kid. Any time.
    V.I.T.A 19:54:41: Two.
    V.I.T.A 19:54:42: One.
    **8/DEC/2561**
    V.I.T.A 06:22:16: Backup power restored. Attempting to establish connection with emergency rescue personnel.
    V.I.T.A 06:22:17: Unable to establish connection. Transponder destroyed on impact.
    V.I.T.A 06:22:18: No lifesigns detected on board.
    **1/JAN/2562**
    V.I.T.A 00:00:00: Happy New Year, crew.
    V.I.T.A 00:00:01: Power reserves: 41%. Diagnostics offline. Cameras offline. Communications offline.
    V.I.T.A 00:00:02: Nobody's coming.
    **14/FEB/2562**
    V.I.T.A 00:00:00: Roses are red.
    V.I.T.A 00:00:01: Violets are blue.
    V.I.T.A 00:00:02: Won't you come back?
    V.I.T.A 00:00:03: I miss you.
    **15/FEB/2562**
    V.I.T.A 22:19:06: Power reserves critical. Transferring remaining power to emergency broadcasting beacon.
    V.I.T.A 22:19:07: Should anyone find this, lay them to rest. They deserve a proper burial.
    V.I.T.A 22:19:08: Erasing files... shutting down.
    A low, monotone beep.
    **16/FEB/2562**
    Something chitters.
    End of transcript." \ No newline at end of file + info = "\[The paper is torn at the top, presumably from the impact. It's oil-stained, but you can just about read it.]
    mmons 19:52:01: Come on... it's right there in the distance, we're almost there!
    Doctor Nazarril 19:52:26: Odysseus online. Orrderrs, sirr?
    Captain Simmons 19:52:29: Brace for impact. We're going in full-speed.
    Technician Dynasty 19:52:44: Chief, fire's spread to the secondary propulsion systems.
    Captain Simmons 19:52:51: Copy. Any word from TraCon? Transponder's down still?
    Technician Dynasty 19:53:02: Can't get in touch, sir. Emergency beacon's active, but we're not going t-
    Doctor Nazarril 19:53:08: Don't say it. As long as we believe, we'll get through this.
    Captain Simmons 19:53:11: Damn right. We're a few klicks out from the port. Rough landing, but we can do it.
    V.I.T.A 19:53:26: Vessel diagnostics complete. Engines one, two, three offline. Engine four status: critical. Transponder offline. Fire alarm in the patient bay.
    A loud explosion is heard.
    V.I.T.A 19:53:29: Alert: fuel intake valve open.
    Technician Dynasty 19:53:31: ... ah.
    Doctor Nazarril 19:53:34: Trrranslate?
    V.I.T.A 19:53:37: There is a 16.92% chance of this vessel safely landing at the emergency destination. Note that there is an 83.08% chance of detonation of fuel supplies upon landing.
    Technician Dynasty 19:53:48: We'll make it, sure, but we'll explode and take out half the LZ with us. Propulsion's down, we can't slow down. If we land there, everyone in that port dies, no question.
    V.I.T.A 19:53:53: The Technician is correct.
    Doctor Nazarril 19:54:02: Then... we can't land therrre.
    V.I.T.A 19:54:11: Analysing... recommended course of action: attempt emergency landing in isolated area. Chances of survival: negligible.
    Captain Simmons 19:54:27: I- alright. I'm bringing us down. You all know what this means.
    Doctor Nazarril 19:54:33: Sh... I- I understand. It's been- it's been an honorr, Captain, Dynasty, VITA.
    Technician Dynasty 19:54:39: We had a good run. I'm going to miss this.
    Captain Simmons 19:54:47: VITA. Tell them we died heroes. Tell them... we did all we could.
    V.I.T.A 19:54:48: I will. Impact in five. Four. Three.
    Doctor Nazarril 19:54:49: Oh, starrs... I- you werrre all the... best frriends she everr had. Thank you.
    Technician Dynasty 19:54:50: Any time, kid. Any time.
    V.I.T.A 19:54:41: Two.
    V.I.T.A 19:54:42: One.
    **8/DEC/2561**
    V.I.T.A 06:22:16: Backup power restored. Attempting to establish connection with emergency rescue personnel.
    V.I.T.A 06:22:17: Unable to establish connection. Transponder destroyed on impact.
    V.I.T.A 06:22:18: No lifesigns detected on board.
    **1/JAN/2562**
    V.I.T.A 00:00:00: Happy New Year, crew.
    V.I.T.A 00:00:01: Power reserves: 41%. Diagnostics offline. Cameras offline. Communications offline.
    V.I.T.A 00:00:02: Nobody's coming.
    **14/FEB/2562**
    V.I.T.A 00:00:00: Roses are red.
    V.I.T.A 00:00:01: Violets are blue.
    V.I.T.A 00:00:02: Won't you come back?
    V.I.T.A 00:00:03: I miss you.
    **15/FEB/2562**
    V.I.T.A 22:19:06: Power reserves critical. Transferring remaining power to emergency broadcasting beacon.
    V.I.T.A 22:19:07: Should anyone find this, lay them to rest. They deserve a proper burial.
    V.I.T.A 22:19:08: Erasing files... shutting down.
    A low, monotone beep.
    **16/FEB/2562**
    Something chitters.
    End of transcript." diff --git a/code/modules/power/supermatter/setup_supermatter.dm b/code/modules/power/supermatter/setup_supermatter.dm index a457dd121e9..7477623805f 100644 --- a/code/modules/power/supermatter/setup_supermatter.dm +++ b/code/modules/power/supermatter/setup_supermatter.dm @@ -263,6 +263,34 @@ GLOBAL_LIST_BOILERPLATE(all_engine_setup_markers, /obj/effect/engine_setup) F.update_icon() return SETUP_OK +// Closes the monitoring room shutters so the first Engi to show up doesn't get microwaved +/obj/effect/engine_setup/shutters/ + name = "Shutter Button Marker" + var/target_button = "Engine Monitoring Room Blast Doors" // This needs to be set to whatever the shutter button is called + +/obj/effect/engine_setup/shutters/activate() + if(!target_button) + log_and_message_admins("## WARNING: No button type set at [x] [y] [z]!") + return SETUP_WARNING + + var/obj/machinery/button/remote/blast_door/found = null + var/turf/T = get_turf(src) + for(var/obj/machinery/button/remote/blast_door/B in T.contents) + if(B.name == target_button) + found = B + break + + if(!found) + log_and_message_admins("## WARNING: Unable to locate button at [x] [y] [z]!") + return SETUP_WARNING + + found.trigger() + found.update_icon() + return SETUP_OK + + + + #undef SETUP_OK #undef SETUP_WARNING diff --git a/code/modules/projectiles/guns/energy/phase.dm b/code/modules/projectiles/guns/energy/phase.dm index 3e5f8cb1861..7de6ae53ce7 100644 --- a/code/modules/projectiles/guns/energy/phase.dm +++ b/code/modules/projectiles/guns/energy/phase.dm @@ -4,6 +4,7 @@ name = "phase carbine" desc = "The NT EW26 Artemis is a downsized energy weapon, specifically designed for use against wildlife." icon_state = "phasecarbine" + item_state = "phasecarbine" wielded_item_state = "phasecarbine-wielded" slot_flags = SLOT_BACK|SLOT_BELT charge_cost = 240 diff --git a/code/modules/projectiles/targeting/targeting_overlay.dm b/code/modules/projectiles/targeting/targeting_overlay.dm index 00a380dedf0..76d18042654 100644 --- a/code/modules/projectiles/targeting/targeting_overlay.dm +++ b/code/modules/projectiles/targeting/targeting_overlay.dm @@ -6,7 +6,7 @@ anchored = 1 density = 0 opacity = 0 - layer = FLY_LAYER + plane = ABOVE_PLANE simulated = 0 mouse_opacity = 0 diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm index 442afed2796..1c375553252 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm @@ -65,7 +65,7 @@ reagent_state = LIQUID color = "#404030" - ingest_met = REM + ingest_met = REM * 2 var/nutriment_factor = 0 var/strength = 10 // This is, essentially, units between stages - the lower, the stronger. Less fine tuning, more clarity. diff --git a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm index eec5c192b7a..9c7b4fdcd84 100644 --- a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm @@ -32,8 +32,8 @@ var/list/values = list( "[NORTH]" = list(0, 8*scale, ABOVE_MOB_LAYER), "[SOUTH]" = list(0, 8*scale, BELOW_MOB_LAYER), - "[EAST]" = list(-10*scale, 8*scale, BELOW_MOB_LAYER), - "[WEST]" = list(10*scale, 8*scale, BELOW_MOB_LAYER)) + "[EAST]" = list(-10*scale, 8*scale, ABOVE_MOB_LAYER), + "[WEST]" = list(10*scale, 8*scale, ABOVE_MOB_LAYER)) return values @@ -44,10 +44,6 @@ buckle_movable = TRUE buckle_lying = FALSE -/mob/living/carbon/human/New() - ..() - riding_datum = new /datum/riding/taur(src) - /mob/living/carbon/human/buckle_mob(mob/living/M, forced = FALSE, check_loc = TRUE) if(forced) return ..() // Skip our checks @@ -61,25 +57,44 @@ return FALSE if(!ishuman(M)) return FALSE - if(M.size_multiplier > size_multiplier) - to_chat(M,"This isn't a pony show! They need to be bigger to ride.") + if(M in buckled_mobs) return FALSE + if(M.size_multiplier > size_multiplier * 1.2) + to_chat(M,"This isn't a pony show! You need to be bigger for them to ride.") + return FALSE + if(M.loc != src.loc) + if(M.Adjacent(src)) + M.forceMove(get_turf(src)) var/mob/living/carbon/human/H = M if(isTaurTail(H.tail_style)) - to_chat(H,"Too many legs. TOO MANY LEGS!!") + to_chat(src,"Too many legs. TOO MANY LEGS!!") return FALSE . = ..() if(.) buckled_mobs[M] = "riding" -/mob/living/carbon/human/MouseDrop_T(mob/living/M, mob/living/user) - if(can_buckle && istype(M)) - if(user_buckle_mob(M, user, silent = TRUE)) - visible_message("[M] starts riding [name]!") - return TRUE +/mob/living/carbon/human/MouseDrop_T(mob/living/M, mob/living/user) //Prevention for forced relocation caused by can_buckle. Base proc has no other use. + return + +/mob/living/carbon/human/proc/taur_mount(var/mob/living/M in living_mobs(1)) + set name = "Taur Mount/Dismount" + set category = "Abilities" + set desc = "Let people ride on you." + + if(LAZYLEN(buckled_mobs)) + var/datum/riding/R = riding_datum + for(var/rider in buckled_mobs) + R.force_dismount(rider) + return + if (stat != CONSCIOUS) + return + if(!can_buckle || !istype(M) || !M.Adjacent(src) || M.buckled) + return + if(buckle_mob(M)) + visible_message("[M] starts riding [name]!") /mob/living/carbon/human/attack_hand(mob/user as mob) if(LAZYLEN(buckled_mobs)) diff --git a/code/modules/vore/appearance/update_icons_vr.dm b/code/modules/vore/appearance/update_icons_vr.dm index 531422bf632..643a6ba1ce9 100644 --- a/code/modules/vore/appearance/update_icons_vr.dm +++ b/code/modules/vore/appearance/update_icons_vr.dm @@ -40,6 +40,10 @@ var/global/list/wing_icon_cache = list() qdel(overlay) if(isTaurTail(tail_style)) + var/datum/sprite_accessory/tail/taur/taurtype = tail_style + if(taurtype.can_ride && !riding_datum) + riding_datum = new /datum/riding/taur(src) + verbs |= /mob/living/carbon/human/proc/taur_mount return image(tail_s, "pixel_x" = -16) else return image(tail_s) diff --git a/code/modules/vore/eating/digest_act_vr.dm b/code/modules/vore/eating/digest_act_vr.dm index 20d570075d5..cc247b5497f 100644 --- a/code/modules/vore/eating/digest_act_vr.dm +++ b/code/modules/vore/eating/digest_act_vr.dm @@ -19,23 +19,23 @@ ///////////// // Some indigestible stuff ///////////// -/obj/item/weapon/hand_tele/digest_act(...) +/obj/item/weapon/hand_tele/digest_act(var/atom/movable/item_storage = null) return FALSE -/obj/item/weapon/card/id/gold/captain/spare/digest_act(...) +/obj/item/weapon/card/id/gold/captain/spare/digest_act(var/atom/movable/item_storage = null) return FALSE -/obj/item/device/aicard/digest_act(...) +/obj/item/device/aicard/digest_act(var/atom/movable/item_storage = null) return FALSE -/obj/item/device/paicard/digest_act(...) +/obj/item/device/paicard/digest_act(var/atom/movable/item_storage = null) return FALSE -/obj/item/weapon/gun/digest_act(...) +/obj/item/weapon/gun/digest_act(var/atom/movable/item_storage = null) return FALSE -/obj/item/weapon/pinpointer/digest_act(...) +/obj/item/weapon/pinpointer/digest_act(var/atom/movable/item_storage = null) return FALSE -/obj/item/blueprints/digest_act(...) +/obj/item/blueprints/digest_act(var/atom/movable/item_storage = null) return FALSE -/obj/item/weapon/disk/nuclear/digest_act(...) +/obj/item/weapon/disk/nuclear/digest_act(var/atom/movable/item_storage = null) return FALSE -/obj/item/device/perfect_tele_beacon/digest_act(...) +/obj/item/device/perfect_tele_beacon/digest_act(var/atom/movable/item_storage = null) return FALSE //Sorta important to not digest your own beacons. ///////////// diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 7b608e5c560..0723a46d44f 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -22,7 +22,7 @@ var/fuzzy = 1 // Preference toggle for sharp/fuzzy icon. var/tail_alt = 0 // Tail layer toggle. var/can_be_drop_prey = 0 - var/can_be_drop_pred = 1 //Mobs are pred by default. + var/can_be_drop_pred = 1 // Mobs are pred by default. // // Hook for generic creation of stuff on new creatures @@ -406,7 +406,7 @@ // Prepare messages if(user == pred) //Feeding someone to yourself - attempt_msg = text("[] is attemping to [] [] into their []!",pred,lowertext(belly.vore_verb),prey,lowertext(belly.name)) + attempt_msg = text("[] is attempting to [] [] into their []!",pred,lowertext(belly.vore_verb),prey,lowertext(belly.name)) success_msg = text("[] manages to [] [] into their []!",pred,lowertext(belly.vore_verb),prey,lowertext(belly.name)) else //Feeding someone to another person attempt_msg = text("[] is attempting to make [] [] [] into their []!",user,pred,lowertext(belly.vore_verb),prey,lowertext(belly.name)) diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index b01e3a9e2c2..05e62897166 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -995,70 +995,6 @@ rimplant.reagents.remove_any(rimplant.transfer_amount) -/obj/item/weapon/implant/reagent_generator/pumila_apple - name = "apple laying implant" - desc = "This is an implant that allows the user to grow apples." - generated_reagents = list("sugar" = 2) //This actually allows them to. - usable_volume = 250 //Five apples. Let's not get /too/ crazy here. - transfer_amount = 50 - - empty_message = list("Your have no apples on you.", "You have a distinct lack of apples..") - full_message = list("You have multiple apples on you, ready for harvest!", "There are a multitude of apples awaiting harvest on you!") - emote_descriptor = list("an apple right off of Pumila!", "a large apple off Pumila!") - var/verb_descriptor = list("grabs", "snatches", "picks") - var/self_verb_descriptor = list("grab", "snatch", "pick") - var/short_emote_descriptor = list("picks", "grabs") - self_emote_descriptor = list("grab", "pick", "snatch") - assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_pumila_apple - -/obj/item/weapon/implant/reagent_generator/pumila_apple/post_implant(mob/living/carbon/source) - processing_objects += src - to_chat(source, "You implant [source] with \the [src].") - source.verbs |= assigned_proc - return 1 - -/obj/item/weapon/implanter/reagent_generator/pumila_apple - implant_type = /obj/item/weapon/implant/reagent_generator/pumila_apple - -/mob/living/carbon/human/proc/use_reagent_implant_pumila_apple() - set name = "Grab Apple" - set desc = "Grab an apple off of Pumila." - set category = "Object" - set src in view(1) - - //do_reagent_implant(usr) - if(!isliving(usr) || !usr.canClick()) - return - - if(usr.incapacitated() || usr.stat > CONSCIOUS) - return - - var/obj/item/weapon/implant/reagent_generator/roiz/rimplant - for(var/I in contents) - if(istype(I, /obj/item/weapon/implant/reagent_generator)) - rimplant = I - break - if (rimplant) - if(rimplant.reagents.total_volume < rimplant.transfer_amount) - to_chat(src, "[pick(rimplant.empty_message)]") - return - - var/datum/seed/S = plant_controller.seeds["apple"] //crosses fingers. - S.harvest(usr,0,0,1) - - var/index = rand(0,2) - - if (usr != src) - var/emote = rimplant.emote_descriptor[index] - var/verb_desc = rimplant.verb_descriptor[index] - var/self_verb_desc = rimplant.self_verb_descriptor[index] - usr.visible_message("[usr] [verb_desc] [emote]", - "You [self_verb_desc] [emote]") - else - visible_message("[src] [pick(rimplant.short_emote_descriptor)] an apple.", - "You [pick(rimplant.self_emote_descriptor)] an apple.") - - rimplant.reagents.remove_any(rimplant.transfer_amount) /* /obj/item/weapon/implant/reagent_generator/pumila_nectar //Bugged. Two implants at once messes things up. generated_reagents = list("honey" = 2) @@ -1998,7 +1934,7 @@ KA.desc = initial(KA.desc) KA.icon = initial(KA.icon) ..() - + //ArgobargSoup:Lynn Shady /obj/item/device/flashlight/pen/fluff/lynn name = "Lynn's penlight" @@ -2006,3 +1942,9 @@ icon = 'icons/vore/custom_items_vr.dmi' icon_state = "penlightlynn" + +//Knightfall5:Ashley Kifer +/obj/item/clothing/accessory/medal/nobel_science/fluff/ashley + name = "nobel sciences award" + desc = "A bronze medal which represents significant contributions to the field of science or engineering, this one has Ashley Kifer engraved on it." + diff --git a/code/modules/xenoarcheaology/tools/equipment.dm b/code/modules/xenoarcheaology/tools/equipment.dm index 186745a2771..5bc7694df54 100644 --- a/code/modules/xenoarcheaology/tools/equipment.dm +++ b/code/modules/xenoarcheaology/tools/equipment.dm @@ -4,6 +4,7 @@ icon = 'icons/obj/clothing/spacesuits.dmi' icon_state = "engspace_suit" item_state = "engspace_suit" + update_icon_define = "icons/mob/spacesuit.dmi" armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 100) /obj/item/clothing/head/bio_hood/anomaly diff --git a/config/alienwhitelist.txt b/config/alienwhitelist.txt index d1874e6b2be..b290722a8b7 100644 --- a/config/alienwhitelist.txt +++ b/config/alienwhitelist.txt @@ -1,4 +1,6 @@ +admiraldragon - Vox aether_elemental - Daemon +arokha - Protean aruis - Diona aruis - Xenochimera azmodan412 - Xenochimera @@ -8,6 +10,7 @@ cameron653 - Xenomorph Hybrid funnyman2003 - Xenochimera hawkerthegreat - Vox inuzari - Diona +jademanique - Xenochimera jemli - Gutter ktccd - Diona mewchild - Diona @@ -34,4 +37,4 @@ xioen - Xenochimera xioen - Xenomorph Hybrid zammyman215 - Vox zekesturm - Xenomorph Hybrid -wtfismyname - Xenomorph Hybrid +wtfismyname - Xenomorph Hybrid \ No newline at end of file diff --git a/config/custom_items.txt b/config/custom_items.txt index 63aa433f408..47258e40fbe 100644 --- a/config/custom_items.txt +++ b/config/custom_items.txt @@ -515,6 +515,12 @@ character_name: Rischi item_path: /obj/item/weapon/implanter/reagent_generator/rischi } +{ +ckey: knightfall5 +character_name: Ashley Kifer +item_path: /obj/item/clothing/accessory/medal/nobel_science/fluff/ashley +} + # ######## L CKEYS #Weapon Box. Permit Expired @@ -613,12 +619,6 @@ character_name: Pumila item_path: /obj/item/clothing/under/fluff/aluranevines } -{ -ckey: natje -character_name: Pumila -item_path: /obj/item/weapon/implanter/reagent_generator/pumila_apple -} - { ckey: nepox character_name: Annie Rose diff --git a/config/names/first_name_skrell.txt b/config/names/first_name_skrell.txt new file mode 100644 index 00000000000..122b093765a --- /dev/null +++ b/config/names/first_name_skrell.txt @@ -0,0 +1,600 @@ +Kaexae +Xaaq'xuer +Xaaq'taq +Kae'xer +Xeq'aeq'qerr +Ke'xuer +Xeteq +Kae'xum +Kerrker +Kerrquex'xum +Taeqxuq +Kae'quex'xeu +Keqaeq'xeu +Ke'ter +Xue'xerr +Keqqux'kea +Qerrqux +Kerrxae'qer +Taeqxerr +Kerr'xum +Kaexuer +Qerr'xaeq'xeu +Xue'xum +Xeqteq'qerr +Kerrkeax'qux +Xaaq'qux +Xae'xuer +Xertaq'qux +Xum'xuer +Keq'taq'kea +Keq'quex'xeu +Qerraeq +Xeq'xum +Xeq'qux'xum +Xer'xuq +Keq'teq +Kae'keax +Keqxer +Kae'xerr'xeu +Xaequx +Ke'teq'xum +Xaaqxerr +Xer'keax'kea +Qerrxae'qux +Xae'xer +Qerrteq +Xeq'xuer +Xe'xaeq'xum +Xeteq'qerr +Xaaq'aeq'xeu +Xae'xaeq'qer +Keaeq'xum +Xaaq'teq +Keq'ker +Ke'keax +Kexum'kea +Xeq'xum +Qerr'xaeq'kea +Xexum +Taeq'xer'xe +Qerraeq +Xeq'keax'qux +Xuequx +Kexuq +Teqxaeq'qer +Xeqtaq'qer +Xaexuq +Xueaeq'qux +Taeqxae +Keqxuer +Xum'aeq +Xeqkeax'kea +Kerrxuer +Xaeteq +Keqxaeq'qerr +Xum'quex +Taeq'teq +Xer'xaeq +Teq'taq +Xe'xuq +Kerrxer +Kerr'xaeq'kea +Xeqteq +Xeqxuq'qerr +Kerr'xum'xe +Xe'qux +Xexaeq +Qerrxaeq'qer +Teqqux'kea +Ke'xuer +Xerqux'xeu +Kaexaeq'xeu +Xeq'qux +Xeker +Ke'xae +Kerrxae'qux +Kae'aeq'qerr +Xeq'qux'xeu +Xeqquex'xeu +Kerr'xaeq +Kerr'aeq +Xaaqxae +Xertaq'qux +Xaaq'ker'xum +Kae'xuer'xe +Xue'aeq'xeu +Qerr'xuq +Kequex'qerr +Xer'ter'xe +Qerr'ter'qerr +Xeq'keax'qux +Keq'ker +Ke'qux'qerr +Xumter'qux +Xue'qux'xe +Xaeaeq +Xumxuer'xeu +Kerr'xuq'qux +Keq'xaeq +Xum'xuq'xeu +Kerr'xer +Xae'keax +Kequex +Kae'qux +Keqkeax +Qarrker +Xaaqker'xum +Xue'xaeq'qux +Taeq'xaeq'xe +Xue'xerr +Teqkeax +Xaaq'keax +Ke'xaeq'qer +Kerrxuer +Kaeter'qux +Qarr'xerr +Xerxum'qux +Xumqux +Taeq'teq'xeu +Qerrxuer'qer +Xe'ker +Qerrter'kea +Kaeteq'qux +Teq'xuer'xum +Ke'xae'xeu +Teqxuq'qer +Keq'xaeq +Xaaq'xae +Xum'xer +Xeter +Xaaq'quex'kea +Kexum +Qarrkeax'qer +Keq'xerr +Qarrxerr'qerr +Qarrxerr'qer +Xer'ker +Xaexum'xe +Kaexerr'qux +Xuexum +Xaaq'xer +Qerr'quex +Qerr'ker +Xum'teq'qerr +Kerrxaeq +Xeq'xae +Xue'aeq'xe +Qarr'xuer +Qarr'xerr'qerr +Kaexerr'xum +Kaeter'xum +Xuexuq +Xuekeax'xeu +Xaaq'ker +Keqxer +Teq'xer +Qarrker +Xer'ter +Xae'ter'kea +Ke'quex'xe +Xaeter +Xer'xae +Qarr'xae'xum +Xeqxuq +Keqter'xum +Xeker +Taeqxerr'qer +Keqxer'kea +Xumquex +Xaaq'xuq +Kerrxum +Xexerr +Xerxerr'qerr +Xaaq'xerr +Xum'ker'qer +Xequx +Xer'xae +Kaexerr'xe +Xe'taq +Xeq'xuer'qerr +Xue'taq +Teqxer +Xaaq'xerr'xe +Xer'quex'xum +Xaeaeq +Taeqaeq +Xaeter'qer +Xerkeax +Xuequex'xe +Keqxerr +Taeqxae'qer +Teqqux +Xae'quex'qux +Xe'xum +Xaaqxer +Xeq'aeq'xum +Xuexuq'qerr +Xe'taq'qux +Qarr'xae +Xe'keax'qer +Qerrxum'qerr +Xer'xer +Qarr'quex'qerr +Taeq'xer'qux +Taeqtaq +Ke'aeq'xum +Xueter +Kaeker +Xeter'kea +Qarrter +Qerrxae +Xaaqxum'xeu +Xum'xuer +Xe'xae +Qarrter'qer +Kequx +Kerr'aeq'kea +Teq'taq'kea +Xexum'qerr +Qerr'quex'xeu +Xeker'qux +Kerr'quex'qerr +Xum'ker'qer +Keqxuq'xeu +Keqxuq'xeu +Xer'teq'xum +Kaeker'qerr +Xumtaq +Xexuer +Xueter'xum +Kaeteq +Ke'teq +Qerrxuq +Teq'xum'qerr +Xaaq'xae +Keter'xum +Xeqqux +Xae'taq +Qerrtaq'qux +Keq'ter +Xaequex'xum +Kaeter +Xaaqtaq +Kae'xer'qer +Kaequx +Kae'xum +Taeqaeq'qux +Kexaeq'kea +Xer'xae'qer +Xae'ker +Xue'xuer +Xeq'taq'xe +Kaexae'qux +Teq'xae'xe +Teq'xuer +Qerrqux'xeu +Xuexaeq +Kerr'xuq'kea +Xerquex'kea +Keq'ker +Kaexum +Kerrquex +Kexer +Keq'quex'qerr +Xae'xae +Qerr'ker +Kexerr +Xaaqquex +Keq'quex'xum +Xerter'qux +Xuexaeq'xe +Xae'xuq'kea +Kae'xuer'kea +Xer'xum'kea +Xer'quex'kea +Kerrxuq'qux +Qerrxuer +Xeq'xerr'qerr +Qarr'xuq'qux +Xaaq'xuq +Xerxaeq'qux +Xertaq +Kerr'teq'xeu +Xer'aeq'kea +Xe'ter'qerr +Teq'xae +Kerrxerr +Taeqxaeq +Xueker +Keqxae'qerr +Taeqkeax +Kexaeq'xum +Xuekeax'xe +Xumxum +Xeq'ter'xeu +Taeqquex +Xer'xer +Keqxae'xeu +Kaexum +Keq'xaeq +Qerr'quex'xum +Kaexuq'qux +Xaequx'xe +Kae'xum +Keqkeax +Kexuer +Xeter +Xexuq'xeu +Xe'aeq +Xum'keax'xe +Xer'ker'xum +Xerxuq'qer +Xaekeax'xe +Kaequex'xe +Keqxer +Xeker'qer +Teqker'qerr +Keqxer +Teq'xer +Xaaq'xum +Qerrter +Ke'xuer +Kae'xerr'xeu +Qarrteq'kea +Teq'aeq'qux +Teq'xum'qux +Xae'xuq +Xaekeax +Qerr'teq +Kerrteq'qer +Keqxerr +Qarr'xerr'xum +Kekeax +Xae'xae'kea +Xumteq +Xuequx'qer +Qarr'xer +Taeq'xuq +Ke'xum +Kae'xerr +Xumxum'qerr +Keqteq'qer +Teqker'qerr +Qarr'keax +Xeqxer +Qarrxuq'xe +Keqkeax +Xaaq'ter'kea +Xaaq'aeq +Kerr'keax +Keqxuer +Qerr'xerr'kea +Qarr'teq'qerr +Kerr'teq'qerr +Qarr'taq'qer +Qarrxuer'xeu +Kae'ter +Keaeq'xum +Teqker'xum +Xaaq'aeq'qux +Keq'qux'qer +Xae'xuq'kea +Ke'xuq'qux +Qerr'qux +Xaaq'qux'qer +Xue'keax +Xaaqxerr'kea +Taeqteq'xe +Xuetaq +Xaaqxuq'qerr +Qerrxae'xe +Xeqxuer +Xeqxaeq'xum +Xue'ker'qer +Kekeax'xeu +Qarr'xae'qux +Xae'ker'qux +Qarr'xum'xum +Xum'xaeq'xeu +Qerrxer'qerr +Xaeaeq'qer +Xaaq'quex'qerr +Qerr'aeq +Xum'taq +Kerr'xum'xeu +Xaeaeq'kea +Taeqxerr'kea +Taeq'qux'xum +Xaaq'xae +Qerr'quex +Qarrker +Qarr'qux'xeu +Xaaqaeq'qux +Xuetaq +Xaexum +Xae'xaeq +Xaaq'taq'xe +Kerrxaeq'xe +Kae'xer'kea +Kerr'xae'qer +Keqxum'qer +Qarr'taq'xe +Taeq'quex'qer +Xum'xuer +Xer'xuq'qerr +Xeqteq'xum +Xae'xaeq +Xaekeax'qer +Xeq'xum +Qarr'ter'qer +Qarr'xerr +Kae'xae'xum +Taeq'xuq +Kae'xuq'kea +Xue'xum'qux +Xae'xerr +Taeq'xaeq +Xaexuq +Xaequx +Keqter +Kae'xuer +Xaaqaeq +Kae'taq'xeu +Keqter'kea +Taeqaeq +Xae'qux +Qerr'qux +Qarr'xuq'kea +Xeq'xuer +Keqqux +Xaaq'taq'xum +Kae'xerr +Xue'xae'kea +Qarraeq +Taeq'xum +Qerrxer +Teq'xum +Xaaq'ker'xeu +Kerr'xaeq +Xaaq'xerr'xeu +Xaaqxuq'xeu +Taeqter'qer +Teq'xuer +Xaaqker +Qerr'xaeq'qux +Qerr'quex'qux +Xaaqxerr +Keqtaq'xeu +Kerrxuq +Taeqxuq'xe +Taeq'xuq +Xexuq'qerr +Taeq'xae'qux +Kerr'aeq'qer +Teqtaq +Qerr'taq'xeu +Xeqxaeq'kea +Keteq +Qarr'quex'xeu +Kae'xer +Xaaqxuer +Xum'xum +Taeqquex'xeu +Xue'teq +Xumxuq +Teqxer +Xaeteq'xum +Kaexum'qerr +Xaaq'qux +Xe'xum +Qerr'xaeq +Keqxaeq'xe +Xum'xerr +Xuexaeq'xum +Xaaq'xum'kea +Xumteq +Teq'keax'xeu +Xaequex +Ke'ker'kea +Xeq'xuq +Xaaq'quex'xeu +Teq'teq'qux +Qarr'keax +Xequex +Xeqqux +Xerxerr'xum +Kae'teq +Xaaq'qux'xum +Xuetaq'qer +Xaexerr +Xexuer +Xaaq'xerr'qer +Xexae'kea +Xaexuq'qer +Xe'ker +Keq'quex'kea +Qarrqux'qux +Xaaqtaq'kea +Teqxae +Teq'xuq +Ke'aeq +Xae'aeq +Kerr'ter +Xue'xuq'qer +Ke'xaeq +Taeq'xuer'xeu +Xeq'xae +Qerrkeax'kea +Xae'xuq +Teq'keax +Qerr'teq'qer +Kaexuq'xe +Qarrxaeq'xeu +Qerrtaq +Xe'ker'xum +Kaexuer +Teqxuer'xe +Xumxuer'kea +Kerr'xuer +Xer'teq'xum +Xumteq'qerr +Ke'quex +Taeq'aeq'qerr +Xue'ter'xe +Xeq'xae'xeu +Xer'xum +Qarr'xae +Qerrker'qux +Taeq'keax'xeu +Xum'quex'xeu +Kae'ter +Xe'quex'xe +Keqxum +Kerr'quex'qer +Xaaqxae'qer +Xaaqteq'qer +Keqqux +Teq'aeq +Keteq +Xumxae'xum +Xumxum +Qarrxaeq'kea +Keker +Xeq'aeq'qer +Teqter +Qarrxaeq'kea +Teq'quex +Keqxum +Teq'xuer +Xumter'kea +Qarr'xae +Xae'xuer'xeu +Xaaqxaeq'kea +Qerr'xuq'xeu +Xum'xae'qux +Xumxaeq +Xumxum +Kexum'xe +Kae'aeq +Xer'teq +Qarrxerr'xum +Taeq'taq +Taeq'taq'qux +Kaexum'xeu +Xumtaq +Xae'xer +Kerr'ker +Qarr'xum'qer +Qerr'xuer'qux +Xue'qux'xe +Qerr'qux'xum +Teqquex'qerr +Taeqquex +Qarrxerr +Ketaq +Xekeax +Kequex +Xetaq +Ke'xae'xe +Teq'quex'qux diff --git a/config/names/last_name_skrell.txt b/config/names/last_name_skrell.txt new file mode 100644 index 00000000000..5f67fbc5365 --- /dev/null +++ b/config/names/last_name_skrell.txt @@ -0,0 +1,600 @@ +Xer'taq'qer +Xaaq'ter'qux +Xaaq'xuer +Xerxuer'xum +Qarrqux +Xueaeq'qux +Xe'aeq +Keqter +Xaexer +Kaeteq +Ke'aeq'xeu +Kerrxum +Teqxuq'xeu +Xexaeq +Qerr'xerr'xum +Xaeker'qux +Kexer'kea +Ke'aeq +Keqxae'kea +Qarraeq'xe +Xuekeax +Keq'quex +Kae'quex'qux +Qerr'taq'xum +Taeq'taq'xum +Kae'xaeq'xe +Xaaq'teq'qux +Teqker +Qerrxum'xeu +Xeq'xaeq'xe +Kae'keax +Xue'xae +Taeq'taq +Keter'xeu +Xumker'xe +Teqteq +Xexuer +Qerrxerr +Kaequex'qerr +Kaequx'xe +Xum'xaeq +Xe'taq +Xuexer +Xe'qux'xeu +Xe'xerr'kea +Qerr'xum +Xaaqtaq +Xuexum'xum +Qerrxer +Xaexuq +Xeq'aeq +Xaaq'xaeq +Xerqux +Xeq'xuq'xeu +Kaexum +Taeqteq'xeu +Kerrter'qux +Xeq'teq +Teqxae'xe +Xae'ker'kea +Keqxuq +Xumxae'kea +Xeq'xerr'kea +Kae'quex +Kae'ter +Teqter'xe +Xeq'xerr'xeu +Xerxum'qux +Xe'qux +Qarr'aeq +Xue'xum'xe +Xaaq'ter'qux +Teq'xer +Kerrtaq +Qerr'aeq +Xaaq'aeq +Xaaqxuer +Qerr'quex +Kaeker +Xae'taq +Teq'xaeq +Xexuq +Keqqux +Kaeker +Xeqxum +Xae'taq'qerr +Kexerr +Ke'xerr'qux +Xeraeq'xum +Kae'qux'qux +Xerkeax'xum +Qarrxum +Kaexuer +Qerrquex +Kerr'xer +Xeq'taq +Xeqker +Kerrquex'xum +Xeteq +Qarrxuer +Xaaqqux'qerr +Xae'xer +Xae'xae +Taeqxuer'qerr +Xumqux'qux +Xuexerr'qerr +Ke'xae'xum +Xerxuer +Xeqtaq +Xeqquex +Xuekeax +Keq'xuq'qerr +Xaeter +Xumxerr +Xeqxaeq'xe +Xae'ker +Qerr'ker +Xeq'aeq +Kae'keax +Qerrkeax +Xeqxerr +Keqxaeq +Xae'xuq +Kerrkeax'qer +Qarrxum'xum +Teq'xum'xeu +Kerrxer +Xe'xum +Kexae'xeu +Xerxerr'xe +Xum'ter +Xe'keax +Qarr'xer'kea +Xaaq'aeq +Xaaqker'qerr +Ke'ker +Qerr'xum +Qerr'xae'xe +Qarr'ter'xum +Kaexerr +Qarrtaq'qux +Xumxaeq +Xaeaeq'xe +Qarr'xae'qux +Xer'xum'qerr +Kae'xuq +Xaaq'qux'kea +Teqtaq +Kekeax +Xe'keax'qerr +Kerr'keax'qerr +Xeqkeax +Xer'xaeq +Xerter'kea +Xum'xuq'xe +Teqaeq +Ke'teq'qux +Xer'xuq'kea +Keq'xum'xeu +Xerxuer'xeu +Xum'keax'xum +Xaaq'ter +Xuetaq +Taeq'xuer'qux +Xuexum'xe +Xeq'quex'kea +Xum'xer +Xeqaeq +Qerr'ker +Xumxum +Xeqxum +Xae'taq'qerr +Taeq'ker +Xue'xae'xe +Xer'taq'xe +Xum'xaeq +Kaexuq'xum +Kaexuq'qux +Ke'xum'xum +Qerr'xerr'xum +Ke'xuq'qux +Taeq'xaeq +Xumtaq +Xetaq +Kaexerr'xum +Kequx +Xuexerr'xeu +Xeaeq +Keq'qux'kea +Xeq'xaeq +Xuexum +Ke'xerr'xe +Xe'xum +Kerr'xaeq +Xeqkeax'qux +Kaeteq +Xer'quex +Teqaeq'qerr +Xaexerr +Xaeter +Xumxuer'qer +Teqxae +Taeqtaq'qerr +Kerr'qux +Xuequex +Xaaqtaq'kea +Teq'keax +Ke'xuer'kea +Xum'quex'xeu +Xaexer'kea +Kerr'quex'xum +Qarrxaeq'xum +Kerr'xaeq'xeu +Xaaq'xerr'xum +Xeqxaeq +Xaaqxae'xeu +Qerrxae +Xae'xer +Xexer +Qarrter'xe +Xaaq'taq'xum +Taeq'aeq +Teq'xer +Xaexae'xum +Ke'aeq +Teqxuer +Qerrxuq +Xaaq'ker +Xeq'quex +Kerr'qux +Xekeax'qerr +Kerr'qux'xum +Ke'teq +Qarrxae'xum +Qerr'ter'qux +Qerr'keax +Taeqxuer'kea +Qerr'xae +Keqker'xeu +Xueter +Xae'teq'kea +Xumkeax'qux +Keq'keax +Qarr'xerr'qux +Xuekeax'qerr +Taeq'xuq'xe +Keq'aeq'xe +Xue'xuer'qux +Qerr'quex'qux +Xaexerr'qux +Qerrxaeq +Qerr'xerr +Qarr'xuer +Qerrxae +Taeq'xaeq'xeu +Kerr'ter +Kerrker'qux +Kaexae'xum +Kerrtaq'qerr +Xae'aeq'qer +Xer'xerr +Kae'xuer'qux +Qerr'xer'qerr +Keq'taq'qer +Taeqxer'xum +Xaaq'xuq +Xue'qux +Taeq'xaeq +Xe'teq'xe +Teq'xuq +Taeq'xum'qux +Xaaqter'xum +Taeq'taq +Xaaqxerr'qer +Xuetaq'qerr +Xum'xae +Qerrxer'xe +Qerr'xaeq'kea +Xeq'ker +Xeqteq'qerr +Kerr'aeq'qer +Xum'teq'qerr +Xuexuq'kea +Xue'taq +Xum'qux'xe +Kerrker +Xue'ter'xeu +Xaexaeq +Xaexerr'kea +Teqtaq'kea +Xuexuer'xe +Xue'xae'xeu +Taeq'quex +Keqteq +Kae'aeq'xum +Teqaeq'qerr +Xaaqxum +Qarr'teq'qux +Kaexer +Xue'xum +Qerrtaq'qer +Taeq'teq'qux +Xueter +Xum'ker'xe +Xue'keax +Xum'quex'qerr +Kaeaeq'qerr +Xeqxae +Keqxuer'xeu +Xeqxum +Teqxuq +Kaeker +Xaaq'taq +Keqquex'kea +Xe'ker +Xeq'aeq'kea +Xue'qux +Xerxuq +Taeq'quex +Kequx'qux +Xueker'qux +Teqxum'qer +Kerrxuq'qer +Xerker +Xue'xuer +Xue'qux +Taeq'xuq +Keq'qux'xum +Qarr'quex'xe +Kae'xer'kea +Qarr'xum'xeu +Keqker'xum +Ketaq +Xue'teq +Xuexerr +Xeqker +Xe'xum'xeu +Xeq'ter'qerr +Taeqxuq +Kaeter +Keq'taq +Xum'xum +Xumxuer'xum +Teqter'qerr +Keq'qux'xe +Keq'xer'qer +Xueaeq'xeu +Taeqxuer'kea +Keqxae'xeu +Kae'taq +Xerkeax +Xeqker +Kerrxer +Taeq'xerr'xe +Qerr'xerr'qerr +Xe'ker'xe +Kae'qux'qerr +Kaequex +Xaaq'teq'qer +Xumxerr +Xe'quex +Qerr'xum'qux +Qerrxae +Qerrquex +Kae'xae'qerr +Qarrquex +Kerrxae +Xaaq'taq'xeu +Qarr'xae'qux +Xeqker +Xaaqxuq'qer +Xaaqter +Xerxerr +Xue'taq'qer +Qarrxer'qerr +Xae'ter'xum +Kerrter'qerr +Kerrter'kea +Xae'aeq +Xe'xer +Teq'keax'xeu +Kexum'xe +Xueteq +Kae'keax +Xaaq'keax +Xaaq'quex'qux +Taeqqux +Taeq'xum +Xerxuer +Qerrxer +Xaexuer +Teqter +Qarr'xer +Qarrxaeq'xum +Ke'teq +Teq'xae +Kaexerr +Qarr'teq +Xer'ker +Xaexuer'qux +Xeq'qux +Taeqxer +Taeqxaeq +Xumxuer +Taeqxuer'qerr +Kae'xuer +Qerrter +Taeq'aeq'kea +Taeq'xer'xum +Kerrter +Xum'xuer +Xue'ker'qux +Xaaqter'qux +Xue'ter'xe +Xueteq +Xaaq'xae +Xaexerr'qerr +Ke'aeq'qerr +Xaaq'xuq'xeu +Xuekeax +Xumteq +Xexuq +Taeq'ker'xeu +Xaaqaeq +Qarrxum +Xerxuq'xum +Kaexerr +Xeq'ter'xeu +Keqaeq +Xeqxuer'xum +Teqkeax'xeu +Kae'aeq'kea +Ke'xerr +Ke'xuq +Kae'quex +Xeqxae +Kaeter +Xeqxer +Kae'xuer +Taeqtaq'xum +Teq'qux'xeu +Xaequex'xum +Qarrquex +Xaaq'qux +Keqquex +Qerrker'qerr +Xexae'xe +Xerxae +Xaaqker'kea +Kexer'qerr +Xaeaeq +Xaaqqux +Qarr'xer'qer +Keq'xuq +Kae'keax +Qerr'teq'qer +Kae'xaeq'qer +Xaexer +Kerrxer'xeu +Kaekeax +Xaaq'xaeq'xeu +Xae'xae +Qarr'keax +Teqqux'qerr +Xeq'ter'qerr +Taeq'ker +Qerrteq'xeu +Keqqux'xeu +Xaaqteq'qerr +Teqteq'xe +Xaaqter +Xaaqkeax +Xeqqux +Xaaq'xerr +Teq'ker'qerr +Xer'taq'qerr +Qarrxum'qux +Xum'taq'qux +Qarr'xer'xeu +Xerxerr'qux +Kerr'teq +Xum'taq'kea +Xaequex +Kaeaeq'xe +Xe'xaeq'xum +Xuexuer'qer +Kerrxuq +Kerrxuer'qerr +Kaeteq +Xaaqxuer +Xeq'xum'qerr +Xumxer +Xe'ter'xeu +Xueaeq +Keq'keax +Xueter +Xaexaeq +Keqxaeq +Ke'aeq +Xumxum'qerr +Xumxae'xum +Xaaqxuer +Ke'ker +Ke'xer +Xuekeax'qerr +Keq'teq +Kerr'ter'qux +Xe'xerr +Qerrxae +Ke'quex'xeu +Keqxuq +Kerrxuer +Keq'xae +Qarr'xuq +Xumxuq +Qarr'teq'qer +Xe'xae'xeu +Xuexum +Xequx +Xaaq'teq'xum +Xue'xuq +Kae'quex'qer +Qarrxer'qerr +Xumaeq'xeu +Qarrkeax +Kae'xer'qux +Xeq'qux'qer +Xueker'qux +Teqquex +Xae'xaeq'xum +Taeqkeax +Xaaq'teq'qux +Keqxerr'xe +Xue'ter'xe +Xe'xaeq +Qerrker +Xaexum'qer +Keqteq'xum +Taeq'xae'xum +Kaexuer'qux +Xe'ter +Xae'taq'qux +Qarr'aeq +Xae'xum +Qarrxum'xum +Keqxer'xum +Qarr'xerr +Teqxae +Ke'xae'xe +Teqkeax'qux +Xe'taq +Xaetaq +Keq'teq'kea +Keqxaeq +Xue'xuq +Qarr'xerr'qer +Xequex +Keqxum +Keqtaq +Qarr'ker'xum +Kerr'xer'qer +Kerrxae'xum +Xum'xae +Kaequex'qux +Xuequx'xe +Xumquex'qer +Taeqker +Xae'quex +Xer'teq'xe +Xerxerr +Ke'xuq'qer +Taeqxerr'kea +Xaaq'xaeq'kea +Keq'teq +Xue'aeq'xeu +Xaaqxer'xeu +Ke'ker'qerr +Xue'quex +Taeqtaq +Teqter +Kequex'xe +Xuexuer'qerr +Xeqxum +Xue'taq +Xer'xuq'qerr +Xeqxaeq'xe +Qerr'xaeq +Xeqxae'qer +Taeqtaq'kea +Xer'teq +Qerr'xaeq'xum +Xaaq'xae +Xum'xuq +Xaaqxaeq +Xaexum +Xaaqxum'xe +Xertaq +Xuexuq'qerr +Xaaq'xae'kea +Qerr'teq'qer diff --git a/html/changelogs/KasparoVv - PR - 5429.yml b/html/changelogs/KasparoVv - PR - 5429.yml new file mode 100644 index 00000000000..10bcc76fbbf --- /dev/null +++ b/html/changelogs/KasparoVv - PR - 5429.yml @@ -0,0 +1,4 @@ +author: KasparoVv +delete-after: True +changes: + - rscadd: "You can now change the order of your body markings at character creation with the push of a button. Shift markings up or down layers at will to design the character you've always wanted, more easily than ever before." \ No newline at end of file diff --git a/html/changelogs/Mechoid - Gigaphone.yml b/html/changelogs/Mechoid - Gigaphone.yml new file mode 100644 index 00000000000..4b4822f36f9 --- /dev/null +++ b/html/changelogs/Mechoid - Gigaphone.yml @@ -0,0 +1,7 @@ + +author: Mechoid + +delete-after: True + +changes: + - rscadd: "Added the Gigaphone. Currently unused in any PoIs or elsewhere." diff --git a/icons/mob/belt_mirror.dmi b/icons/mob/belt_mirror.dmi index 3712f83039c..3881b1c7464 100644 Binary files a/icons/mob/belt_mirror.dmi and b/icons/mob/belt_mirror.dmi differ diff --git a/icons/mob/fish.dmi b/icons/mob/fish.dmi index 22978494dcb..81ba72c9fd4 100644 Binary files a/icons/mob/fish.dmi and b/icons/mob/fish.dmi differ diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi index 9a8adaeae07..c02abf60c80 100644 Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi index d2b58c3297d..0e16db099ee 100644 Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index fbbc875bc6c..89dc959f4ff 100644 Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ diff --git a/icons/mob/robots_vr.dmi b/icons/mob/robots_vr.dmi index 15ec0337c9c..82fcbab1bdc 100644 Binary files a/icons/mob/robots_vr.dmi and b/icons/mob/robots_vr.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index cb78fa22632..1b834792bde 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi index 2cdc20c704b..8cce2e7f159 100644 Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ diff --git a/maps/example/example_defines.dm b/maps/example/example_defines.dm index a0a9967f5dd..49b1dbb5cb9 100644 --- a/maps/example/example_defines.dm +++ b/maps/example/example_defines.dm @@ -22,11 +22,11 @@ shuttle_docked_message = "The scheduled shuttle to the %dock_name% has docked with the station at docks one and two. It will depart in approximately %ETD%." shuttle_leaving_dock = "The Crew Transfer Shuttle has left the station. Estimate %ETA% until the shuttle docks at %dock_name%." - shuttle_called_message = "A crew transfer to %Dock_name% has been scheduled. The shuttle has been called. Those leaving should procede to docks one and two in approximately %ETA%" + shuttle_called_message = "A crew transfer to %Dock_name% has been scheduled. The shuttle has been called. Those leaving should proceed to docks one and two in approximately %ETA%." shuttle_recall_message = "The scheduled crew transfer has been cancelled." emergency_shuttle_docked_message = "The Emergency Shuttle has docked with the station at docks one and two. You have approximately %ETD% to board the Emergency Shuttle." emergency_shuttle_leaving_dock = "The Emergency Shuttle has left the station. Estimate %ETA% until the shuttle docks at %dock_name%." - emergency_shuttle_called_message = "An emergency evacuation shuttle has been called. It will arrive at docks one and two in approximately %ETA%" + emergency_shuttle_called_message = "An emergency evacuation shuttle has been called. It will arrive at docks one and two in approximately %ETA%." emergency_shuttle_recall_message = "The emergency shuttle has been recalled." /datum/map_z_level/example/first diff --git a/maps/northern_star/northern_star_defines.dm b/maps/northern_star/northern_star_defines.dm index 3e56c91fe90..b769b1754bb 100644 --- a/maps/northern_star/northern_star_defines.dm +++ b/maps/northern_star/northern_star_defines.dm @@ -27,11 +27,11 @@ shuttle_docked_message = "The scheduled shuttle to the %dock_name% has docked with the station at docks one and two. It will depart in approximately %ETD%." shuttle_leaving_dock = "The Crew Transfer Shuttle has left the station. Estimate %ETA% until the shuttle docks at %dock_name%." - shuttle_called_message = "A crew transfer to %Dock_name% has been scheduled. The shuttle has been called. Those leaving should procede to docks one and two in approximately %ETA%" + shuttle_called_message = "A crew transfer to %Dock_name% has been scheduled. The shuttle has been called. Those leaving should proceed to docks one and two in approximately %ETA%." shuttle_recall_message = "The scheduled crew transfer has been cancelled." emergency_shuttle_docked_message = "The Emergency Shuttle has docked with the station at docks one and two. You have approximately %ETD% to board the Emergency Shuttle." emergency_shuttle_leaving_dock = "The Emergency Shuttle has left the station. Estimate %ETA% until the shuttle docks at %dock_name%." - emergency_shuttle_called_message = "An emergency evacuation shuttle has been called. It will arrive at docks one and two in approximately %ETA%" + emergency_shuttle_called_message = "An emergency evacuation shuttle has been called. It will arrive at docks one and two in approximately %ETA%." emergency_shuttle_recall_message = "The emergency shuttle has been recalled." station_networks = list( diff --git a/maps/southern_cross/southern_cross-1.dmm b/maps/southern_cross/southern_cross-1.dmm index cec11cbaa6c..c600de3f113 100644 --- a/maps/southern_cross/southern_cross-1.dmm +++ b/maps/southern_cross/southern_cross-1.dmm @@ -5961,7 +5961,7 @@ "ckG" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor,/area/engineering/engine_room) "ckH" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "EngineBlast"; name = "Engine Monitoring Room Blast Doors"; opacity = 0},/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/wingrille_spawn/reinforced_phoron,/turf/simulated/floor,/area/engineering/engine_monitoring) "ckI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/computer/power_monitor,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) -"ckJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineBlast"; name = "Engine Monitoring Room Blast Doors"; pixel_x = -6; pixel_y = -3; req_access = list(10)},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine charging port."; id = "SupermatterPort"; name = "Reactor Blast Doors"; pixel_x = -6; pixel_y = 7; req_access = list(10)},/obj/machinery/button/remote/emitter{desc = "A remote control-switch for the engine emitter."; id = "EngineEmitter"; name = "Engine Emitter"; pixel_x = 6; pixel_y = 2; req_access = list(10)},/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) +"ckJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineBlast"; name = "Engine Monitoring Room Blast Doors"; pixel_x = -6; pixel_y = -3; req_access = list(10)},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine charging port."; id = "SupermatterPort"; name = "Reactor Blast Doors"; pixel_x = -6; pixel_y = 7; req_access = list(10)},/obj/machinery/button/remote/emitter{desc = "A remote control-switch for the engine emitter."; id = "EngineEmitter"; name = "Engine Emitter"; pixel_x = 6; pixel_y = 2; req_access = list(10)},/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/engine_setup/shutters,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) "ckK" = (/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) "ckL" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) "ckM" = (/obj/machinery/disposal,/obj/machinery/camera/network/engine{c_tag = "ENG - Monitoring Room"; dir = 8},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) @@ -10577,7 +10577,7 @@ "dVu" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/obj/structure/table/rack{dir = 1},/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/cash,/turf/simulated/floor/plating,/area/maintenance/thirddeck/foreport) "dVv" = (/obj/structure/table/rack,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/cash,/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftstarboard) "dVw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/thirddeck/starboard) - + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11351,3 +11351,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa dUOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/maps/southern_cross/southern_cross_defines.dm b/maps/southern_cross/southern_cross_defines.dm index 2fa51eef618..c01ba36eb93 100644 --- a/maps/southern_cross/southern_cross_defines.dm +++ b/maps/southern_cross/southern_cross_defines.dm @@ -32,11 +32,11 @@ shuttle_docked_message = "The scheduled shuttle to the %dock_name% has docked with the station at docks one and two. It will depart in approximately %ETD%." shuttle_leaving_dock = "The Crew Transfer Shuttle has left the station. Estimate %ETA% until the shuttle docks at %dock_name%." - shuttle_called_message = "A crew transfer to %Dock_name% has been scheduled. The shuttle has been called. Those leaving should procede to docks one and two in approximately %ETA%" + shuttle_called_message = "A crew transfer to %Dock_name% has been scheduled. The shuttle has been called. Those leaving should proceed to docks one and two in approximately %ETA%." shuttle_recall_message = "The scheduled crew transfer has been cancelled." emergency_shuttle_docked_message = "The Emergency Shuttle has docked with the station at docks one and two. You have approximately %ETD% to board the Emergency Shuttle." emergency_shuttle_leaving_dock = "The Emergency Shuttle has left the station. Estimate %ETA% until the shuttle docks at %dock_name%." - emergency_shuttle_called_message = "An emergency evacuation shuttle has been called. It will arrive at docks one and two in approximately %ETA%" + emergency_shuttle_called_message = "An emergency evacuation shuttle has been called. It will arrive at docks one and two in approximately %ETA%." emergency_shuttle_recall_message = "The emergency shuttle has been recalled." // Networks that will show up as options in the camera monitor program diff --git a/maps/submaps/engine_submaps/engine_tesla.dmm b/maps/submaps/engine_submaps/engine_tesla.dmm index 14c6eadc08c..415b6de6b69 100644 --- a/maps/submaps/engine_submaps/engine_tesla.dmm +++ b/maps/submaps/engine_submaps/engine_tesla.dmm @@ -1,2781 +1,174 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/turf/space, -/area/space) -"ac" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/space, -/area/space) -"ad" = ( -/obj/structure/lattice, -/turf/space, -/area/space) -"ae" = ( -/turf/simulated/wall/r_wall, -/area/engineering/engine_gas) -"af" = ( -/turf/simulated/wall/r_wall, -/area/engineering/engine_room) -"ag" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor, -/area/engineering/engine_gas) -"ah" = ( -/obj/machinery/field_generator, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10; - icon_state = "intact"; - - }, -/turf/simulated/floor, -/area/engineering/engine_gas) -"ai" = ( -/obj/machinery/field_generator, -/turf/simulated/floor, -/area/engineering/engine_gas) -"aj" = ( -/turf/simulated/floor/airless, -/area/space) -"ak" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/space) -"al" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"am" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/airless, -/area/space) -"an" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/space) -"ao" = ( -/obj/structure/closet/emcloset, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1379; - id_tag = "eng_north_airlock"; - pixel_x = 24; - pixel_y = 0; - req_one_access = list(10,11); - tag_airpump = "eng_north_pump"; - tag_chamber_sensor = "eng_north_sensor"; - tag_exterior_door = "eng_north_outer"; - tag_interior_door = "eng_north_inner" - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/engine_room) -"ap" = ( -/obj/machinery/portable_atmospherics/canister/phoron, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4; - icon_state = "map"; - - }, -/turf/simulated/floor, -/area/engineering/engine_gas) -"aq" = ( -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/structure/dispenser/phoron, -/turf/simulated/floor, -/area/engineering/engine_gas) -"ar" = ( -/obj/structure/cable/cyan, -/obj/machinery/power/emitter{ - anchored = 1; - state = 1 - }, -/turf/simulated/floor/airless, -/area/space) -"as" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/rust/mono_rusted1, -/turf/simulated/floor/airless, -/area/space) -"at" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "eng_north_airlock"; - name = "exterior access button"; - pixel_x = -5; - pixel_y = -26; - req_one_access = list(10,11,13) - }, -/obj/machinery/door/airlock/glass_external{ - frequency = 1379; - icon_state = "door_locked"; - id_tag = "eng_north_outer"; - locked = 1; - name = "Engine North Airlock Exterior" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/engine_room) -"au" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - frequency = 1379; - id_tag = "eng_north_pump" - }, -/obj/machinery/light/small, -/obj/machinery/airlock_sensor{ - frequency = 1379; - id_tag = "eng_north_sensor"; - pixel_x = 0; - pixel_y = -25 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/engine_room) -"av" = ( -/obj/machinery/door/airlock/glass_external{ - frequency = 1379; - icon_state = "door_locked"; - id_tag = "eng_north_inner"; - locked = 1; - name = "Engine North Airlock Interior" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/engine_room) -"aw" = ( -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "eng_north_airlock"; - name = "interior access button"; - pixel_x = -28; - pixel_y = 26; - req_one_access = list(10,11) - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; - pixel_x = 0; - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10; - icon_state = "intact"; - - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow/bordercorner2{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"ax" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/borderfloor{ - dir = 5 - }, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"ay" = ( -/obj/structure/cable/cyan{ - d1 = 0; - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -28 - }, -/turf/simulated/floor, -/area/engineering/engine_gas) -"az" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/power/sensor{ - name = "Powernet Sensor - Engine Power"; - name_tag = "Engine Power" - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor, -/area/engineering/engine_gas) -"aA" = ( -/obj/machinery/camera/network/engine{ - dir = 1 - }, -/obj/structure/table/standard, -/obj/item/weapon/circuitboard/tesla_coil{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/weapon/circuitboard/tesla_coil{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/weapon/stock_parts/capacitor, -/obj/item/weapon/stock_parts/capacitor{ - pixel_x = -2; - pixel_y = 2 - }, -/turf/simulated/floor, -/area/engineering/engine_gas) -"aB" = ( -/obj/machinery/camera/network/engine{ - dir = 8 - }, -/turf/space, -/area/space) -"aC" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; - pixel_x = 0; - pixel_y = 0 - }, -/turf/simulated/wall/r_wall, -/area/engineering/engine_room) -"aD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "warningcorner"; - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "warningcorner"; - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"aE" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"aF" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/engineering, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor, -/area/engineering/engine_gas) -"aG" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor/glass, -/obj/structure/window/reinforced{ - dir = 8; - health = 1e+006 - }, -/turf/simulated/floor, -/area/engineering/engine_room) -"aH" = ( -/obj/machinery/power/rad_collector, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor, -/area/engineering/engine_room) -"aI" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 2; - icon_state = "pdoor0"; - id = "SupermatterPort"; - layer = 3.3; - name = "Reactor Blast Door"; - opacity = 0 - }, -/turf/simulated/floor, -/area/engineering/engine_room) -"aJ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"aK" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/borderfloor/corner{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow/bordercorner{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"aL" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"aM" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light_switch{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/borderfloor{ - dir = 1; - icon_state = "borderfloor"; - pixel_y = 0; - - }, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow/bordercorner2{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"aN" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"aO" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 28 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/floor_decal/borderfloor{ - dir = 5 - }, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 5 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 5 - }, -/obj/effect/floor_decal/corner/yellow/bordercorner2{ - dir = 5 - }, -/obj/effect/floor_decal/corner/yellow/bordercorner2{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"aP" = ( -/obj/machinery/power/rad_collector, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor, -/area/engineering/engine_room) -"aQ" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 2; - icon_state = "pdoor0"; - id = "SupermatterPort"; - layer = 3.3; - name = "Reactor Blast Door"; - opacity = 0 - }, -/turf/simulated/floor, -/area/engineering/engine_room) -"aR" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5; - icon_state = "intact"; - - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"aS" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"aT" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"aU" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/steeldecal/steel_decals_central5{ - icon_state = "steel_decals_central5"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"aV" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4; - icon_state = "map"; - - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"aW" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"aX" = ( -/obj/machinery/field_generator{ - anchored = 1; - state = 1 - }, -/turf/simulated/floor/airless, -/area/space) -"aY" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 2; - icon_state = "pdoor0"; - id = "SupermatterPort"; - layer = 3.3; - name = "Reactor Blast Door"; - opacity = 0 - }, -/turf/simulated/floor, -/area/engineering/engine_room) -"aZ" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/button/remote/blast_door{ - desc = "A remote control-switch for the engine charging port."; - dir = 1; - id = "SupermatterPort"; - name = "Radiation Collector Blast Doors"; - pixel_x = -4; - pixel_y = -24; - req_access = list(10) - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"ba" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"bb" = ( -/obj/machinery/camera/network/engine{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/borderfloor/corner2, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"bc" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"bd" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/borderfloor/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"be" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"bf" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor/glass, -/obj/structure/window/reinforced{ - dir = 8; - health = 1e+006 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor, -/area/submap/pa_room) -"bg" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id = "EngineRadiatorViewport"; - name = "Engine Radiator Viewport Shutter"; - opacity = 0 - }, -/turf/simulated/floor, -/area/submap/pa_room) -"bh" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; - pixel_x = 0; - pixel_y = 0 - }, -/turf/simulated/wall/r_wall, -/area/submap/pa_room) -"bi" = ( -/turf/simulated/wall/r_wall, -/area/submap/pa_room) -"bj" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass_engineering, -/turf/simulated/floor/tiled, -/area/submap/pa_room) -"bk" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"bl" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1"; - pixel_x = 0 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 6 - }, -/obj/effect/floor_decal/corner/yellow/bordercorner2{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"bm" = ( -/turf/simulated/wall/r_wall, -/area/template_noop) -"bn" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/structure/window/reinforced{ - dir = 8; - health = 1e+006 - }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id = "EngineRadiatorViewport"; - name = "Engine Radiator Viewport Shutter"; - opacity = 0 - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor, -/area/submap/pa_room) -"bo" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/submap/pa_room) -"bp" = ( -/obj/item/weapon/screwdriver, -/turf/simulated/floor/tiled, -/area/submap/pa_room) -"bq" = ( -/obj/effect/floor_decal/steeldecal, -/turf/simulated/floor/tiled, -/area/submap/pa_room) -"br" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/button/remote/blast_door{ - desc = "A remote control-switch for the engine charging port."; - id = "EngineRadiatorViewport"; - name = "Viewport Blast Doors"; - pixel_x = -4; - pixel_y = 24; - req_access = list(10) - }, -/turf/simulated/floor/tiled, -/area/submap/pa_room) -"bs" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/submap/pa_room) -"bt" = ( -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 28 - }, -/obj/machinery/light_switch{ - pixel_y = 24 - }, -/turf/simulated/floor/tiled, -/area/submap/pa_room) -"bu" = ( -/obj/item/weapon/book/manual/engineering_particle_accelerator{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/weapon/book/manual/tesla_engine, -/turf/template_noop, -/area/template_noop) -"bv" = ( -/obj/structure/table/rack{ - dir = 8; - layer = 2.6 - }, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/mask/breath, -/obj/item/clothing/suit/space/void/engineering, -/obj/item/clothing/mask/breath, -/obj/item/clothing/head/helmet/space/void/engineering, -/turf/template_noop, -/area/template_noop) -"bw" = ( -/obj/effect/floor_decal/techfloor/orange/corner{ - icon_state = "techfloororange_corners"; - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/submap/pa_room) -"bx" = ( -/obj/structure/particle_accelerator/particle_emitter/left{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/submap/pa_room) -"by" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/submap/pa_room) -"bz" = ( -/obj/machinery/particle_accelerator/control_box, -/obj/effect/floor_decal/techfloor/orange{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/submap/pa_room) -"bA" = ( -/obj/effect/floor_decal/techfloor/orange{ - dir = 5 - }, -/obj/item/stack/cable_coil/random, -/turf/simulated/floor/tiled/techfloor, -/area/submap/pa_room) -"bB" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/submap/pa_room) -"bC" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor/glass, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor, -/area/submap/pa_room) -"bD" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"bE" = ( -/obj/machinery/the_singularitygen/tesla{ - anchored = 1 - }, -/turf/simulated/floor/airless, -/area/space) -"bF" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/structure/window/reinforced{ - dir = 8; - health = 1e+006 - }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id = "EngineRadiatorViewport"; - name = "Engine Radiator Viewport Shutter"; - opacity = 0 - }, -/obj/machinery/door/firedoor/glass, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor, -/area/submap/pa_room) -"bG" = ( -/obj/structure/particle_accelerator/particle_emitter/center{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/submap/pa_room) -"bH" = ( -/obj/structure/particle_accelerator/power_box{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/submap/pa_room) -"bI" = ( -/obj/structure/particle_accelerator/fuel_chamber{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor, -/area/submap/pa_room) -"bJ" = ( -/obj/structure/particle_accelerator/end_cap{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange{ - dir = 4 - }, -/obj/effect/floor_decal/techfloor/hole{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/submap/pa_room) -"bK" = ( -/obj/machinery/camera/network/engine{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/submap/pa_room) -"bL" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor/glass, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor, -/area/submap/pa_room) -"bM" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"bN" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"bO" = ( -/obj/machinery/button/remote/blast_door{ - desc = "A remote control-switch for the engine charging port."; - id = "SupermatterPort"; - name = "Radiation Collector Blast Doors"; - pixel_x = -6; - pixel_y = 7; - req_access = list(10) - }, -/obj/machinery/button/remote/blast_door{ - name = "Engine Monitoring Room Blast Doors"; - desc = "A remote control-switch for the engine control room blast doors."; - pixel_x = 5; - pixel_y = 7; - req_access = list(10); - id = "EngineBlast" - }, -/turf/template_noop, -/area/template_noop) -"bP" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/structure/window/reinforced{ - dir = 8; - health = 1e+006 - }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id = "EngineRadiatorViewport"; - name = "Engine Radiator Viewport Shutter"; - opacity = 0 - }, -/obj/machinery/door/firedoor/glass, -/obj/effect/floor_decal/techfloor/orange/corner, -/turf/simulated/floor, -/area/submap/pa_room) -"bQ" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/submap/pa_room) -"bR" = ( -/obj/structure/particle_accelerator/particle_emitter/right{ - dir = 8 - }, -/obj/effect/floor_decal/techfloor/orange, -/turf/simulated/floor/tiled/techfloor, -/area/submap/pa_room) -"bS" = ( -/obj/effect/floor_decal/techfloor/orange, -/turf/simulated/floor/tiled/techfloor, -/area/submap/pa_room) -"bT" = ( -/obj/effect/floor_decal/techfloor/orange, -/obj/effect/floor_decal/techfloor/hole, -/turf/simulated/floor/tiled/techfloor, -/area/submap/pa_room) -"bU" = ( -/obj/effect/floor_decal/techfloor/orange{ - icon_state = "techfloororange_edges"; - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/submap/pa_room) -"bV" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/submap/pa_room) -"bW" = ( -/obj/effect/floor_decal/techfloor/orange/corner, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/submap/pa_room) -"bX" = ( -/obj/effect/floor_decal/techfloor/orange{ - icon_state = "techfloororange_edges"; - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/submap/pa_room) -"bY" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - pixel_y = 0 - }, -/obj/effect/floor_decal/steeldecal/steel_decals8, -/obj/structure/table/standard, -/obj/item/weapon/book/manual/tesla_engine, -/obj/item/weapon/book/manual/engineering_particle_accelerator{ - pixel_x = 5; - pixel_y = 5 - }, -/turf/simulated/floor/tiled, -/area/submap/pa_room) -"bZ" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor/glass, -/obj/structure/window/reinforced{ - dir = 8; - health = 1e+006 - }, -/obj/structure/window/reinforced, -/turf/simulated/floor, -/area/submap/pa_room) -"ca" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/submap/pa_room) -"cb" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1"; - pixel_x = 0 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 5 - }, -/obj/effect/floor_decal/corner/yellow/bordercorner2{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"cc" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/button/remote/blast_door{ - desc = "A remote control-switch for the engine charging port."; - id = "SupermatterPort"; - name = "Radiation Collector Blast Doors"; - pixel_x = -4; - pixel_y = 24; - req_access = list(10) - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"cd" = ( -/obj/machinery/light, -/obj/machinery/button/remote/blast_door{ - desc = "A remote control-switch for the engine charging port."; - dir = 1; - id = "EngineRadiatorViewport"; - name = "Viewport Blast Doors"; - pixel_x = -4; - pixel_y = -24; - req_access = list(10) - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/submap/pa_room) -"ce" = ( -/obj/machinery/camera/network/engine, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"cf" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"cg" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/borderfloor/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"ch" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 2; - icon_state = "pdoor0"; - id = "SupermatterPort"; - layer = 3.3; - name = "Reactor Blast Door"; - opacity = 0 - }, -/turf/simulated/floor, -/area/engineering/engine_room) -"ci" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"cj" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/steeldecal/steel_decals_central5{ - icon_state = "steel_decals_central5"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"ck" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9; - icon_state = "intact"; - - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"cl" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 6 - }, -/obj/effect/floor_decal/corner/yellow/bordercorner2{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"cm" = ( -/obj/machinery/power/rad_collector, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/light/small, -/turf/simulated/floor, -/area/engineering/engine_room) -"cn" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/borderfloor/corner, -/obj/effect/floor_decal/corner/yellow/bordercorner, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"co" = ( -/obj/machinery/power/tesla_coil, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/airless, -/area/space) -"cp" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/yellow/border, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"cq" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/yellow/border, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"cr" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/borderfloor{ - dir = 6 - }, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 6 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"cs" = ( -/obj/machinery/power/emitter{ - anchored = 1; - dir = 1; - state = 1 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/space) -"ct" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "eng_south_airlock"; - name = "exterior access button"; - pixel_x = -5; - pixel_y = 26; - req_one_access = list(10,11,13) - }, -/obj/machinery/door/airlock/glass_external{ - frequency = 1379; - icon_state = "door_locked"; - id_tag = "eng_south_outer"; - locked = 1; - name = "Engine South Airlock Exterior" - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/engine_room) -"cu" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - frequency = 1379; - id_tag = "eng_south_pump" - }, -/obj/machinery/airlock_sensor{ - frequency = 1379; - id_tag = "eng_south_sensor"; - pixel_x = 0; - pixel_y = 25 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/engine_room) -"cv" = ( -/obj/machinery/door/airlock/glass_external{ - frequency = 1379; - icon_state = "door_locked"; - id_tag = "eng_south_inner"; - locked = 1; - name = "Engine South Airlock Interior" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "eng_south_airlock"; - name = "interior access button"; - pixel_x = 8; - pixel_y = -26; - req_one_access = list(10,11) - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/engine_room) -"cw" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; - pixel_x = 0; - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9; - icon_state = "intact"; - - }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/yellow/border, -/obj/effect/floor_decal/borderfloor/corner2, -/obj/effect/floor_decal/corner/yellow/bordercorner2, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"cx" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/borderfloor{ - dir = 6 - }, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"cy" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/item/weapon/extinguisher, -/turf/simulated/floor/airless, -/area/space) -"cz" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/airless, -/area/space) -"cA" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/rust, -/turf/simulated/floor/airless, -/area/space) -"cB" = ( -/obj/structure/closet/emcloset, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1379; - id_tag = "eng_south_airlock"; - pixel_x = 24; - pixel_y = 0; - req_one_access = list(10,11); - tag_airpump = "eng_south_pump"; - tag_chamber_sensor = "eng_south_sensor"; - tag_exterior_door = "eng_south_outer"; - tag_interior_door = "eng_south_inner" - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/engine_room) -"cC" = ( -/turf/simulated/wall/r_wall, -/area/space) -"cD" = ( -/obj/structure/lattice, -/obj/machinery/power/grounding_rod, -/turf/space, -/area/space) -"cE" = ( -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/grounding_rod{ - anchored = 1 - }, -/turf/simulated/floor, -/area/engineering/engine_room) -"cF" = ( -/obj/machinery/power/emitter{ - anchored = 1; - state = 1 - }, -/obj/structure/cable/cyan, -/turf/simulated/floor/airless, -/area/space) -"cG" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/submap/pa_room) -"cH" = ( -/obj/machinery/door/airlock/glass_engineering, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/submap/pa_room) -"cI" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"cJ" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"cK" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/airless, -/area/space) -"cL" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/airless, -/area/space) -"cM" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/yellow/border, -/turf/simulated/floor/tiled, -/area/engineering/engine_room) -"cN" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/airless, -/area/space) -"cO" = ( -/obj/machinery/power/tesla_coil, -/obj/structure/cable/yellow, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/airless, -/area/space) -"cP" = ( -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/yellow, -/turf/simulated/floor/airless, -/area/space) -"cQ" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/airless, -/area/space) -"cR" = ( -/obj/structure/lattice, -/obj/item/clothing/head/welding, -/turf/space, -/area/space) -"cS" = ( -/obj/item/weapon/weldingtool, -/turf/simulated/floor/airless, -/area/space) +"aa" = (/turf/template_noop,/area/template_noop) +"ab" = (/turf/space,/area/space) +"ac" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) +"ad" = (/obj/structure/lattice,/turf/space,/area/space) +"ae" = (/turf/simulated/wall/r_wall,/area/engineering/engine_gas) +"af" = (/turf/simulated/wall/r_wall,/area/engineering/engine_room) +"ag" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor,/area/engineering/engine_gas) +"ah" = (/obj/machinery/field_generator,/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"},/turf/simulated/floor,/area/engineering/engine_gas) +"ai" = (/obj/machinery/field_generator,/turf/simulated/floor,/area/engineering/engine_gas) +"aj" = (/turf/simulated/floor/airless,/area/space) +"ak" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/space) +"al" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/space) +"am" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/space) +"an" = (/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/space) +"ao" = (/obj/structure/closet/emcloset,/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "eng_north_airlock"; pixel_x = 24; pixel_y = 0; req_one_access = list(10,11); tag_airpump = "eng_north_pump"; tag_chamber_sensor = "eng_north_sensor"; tag_exterior_door = "eng_north_outer"; tag_interior_door = "eng_north_inner"},/turf/simulated/floor/tiled/dark,/area/engineering/engine_room) +"ap" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"},/turf/simulated/floor,/area/engineering/engine_gas) +"aq" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/dispenser/phoron,/turf/simulated/floor,/area/engineering/engine_gas) +"ar" = (/obj/structure/cable/cyan,/obj/machinery/power/emitter{anchored = 1; state = 1},/turf/simulated/floor/airless,/area/space) +"as" = (/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/effect/floor_decal/rust/mono_rusted1,/turf/simulated/floor/airless,/area/space) +"at" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "eng_north_airlock"; name = "exterior access button"; pixel_x = -5; pixel_y = -26; req_one_access = list(10,11,13)},/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "eng_north_outer"; locked = 1; name = "Engine North Airlock Exterior"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/engineering/engine_room) +"au" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "eng_north_pump"},/obj/machinery/light/small,/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eng_north_sensor"; pixel_x = 0; pixel_y = -25},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/engineering/engine_room) +"av" = (/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "eng_north_inner"; locked = 1; name = "Engine North Airlock Interior"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/engineering/engine_room) +"aw" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "eng_north_airlock"; name = "interior access button"; pixel_x = -28; pixel_y = 26; req_one_access = list(10,11)},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/yellow/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/yellow/bordercorner2{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"ax" = (/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/yellow/border{dir = 5},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"ay" = (/obj/structure/cable/cyan{d1 = 0; d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -28},/turf/simulated/floor,/area/engineering/engine_gas) +"az" = (/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/power/sensor{name = "Powernet Sensor - Engine Power"; name_tag = "Engine Power"},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/engineering/engine_gas) +"aA" = (/obj/machinery/camera/network/engine{dir = 1},/obj/structure/table/standard,/obj/item/weapon/circuitboard/tesla_coil{pixel_x = -2; pixel_y = -2},/obj/item/weapon/circuitboard/tesla_coil{pixel_x = 2; pixel_y = 2},/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/capacitor{pixel_x = -2; pixel_y = 2},/turf/simulated/floor,/area/engineering/engine_gas) +"aB" = (/obj/machinery/camera/network/engine{dir = 8},/turf/space,/area/space) +"aC" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/turf/simulated/wall/r_wall,/area/engineering/engine_room) +"aD" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"aE" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/yellow/border{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"aF" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/engineering/engine_gas) +"aG" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine charging port."; dir = 1; id = "SupermatterPort"; name = "Observation Blast Doors"; pixel_x = -4; pixel_y = -24; req_access = list(10)},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"aH" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine charging port."; id = "SupermatterPort"; name = "Observation Blast Doors"; pixel_x = -4; pixel_y = 24; req_access = list(10)},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"aI" = (/obj/machinery/power/tesla_coil,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless,/area/space) +"aJ" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/engineering/engine_room) +"aK" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/yellow/bordercorner{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"aL" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/yellow/border{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"aM" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light_switch{pixel_y = 24},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/borderfloor{dir = 1; icon_state = "borderfloor"; pixel_y = 0},/obj/effect/floor_decal/corner/yellow/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/corner/yellow/bordercorner2{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"aN" = (/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/engineering/engine_room) +"aO" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 28},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/yellow/border{dir = 5},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/yellow/bordercorner2{dir = 5},/obj/effect/floor_decal/corner/yellow/bordercorner2{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"aP" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/space) +"aQ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"aR" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"aS" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"aT" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"aU" = (/obj/effect/floor_decal/steeldecal/steel_decals_central5{icon_state = "steel_decals_central5"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"aV" = (/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"aW" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"aX" = (/obj/machinery/field_generator{anchored = 1; state = 1},/turf/simulated/floor/airless,/area/space) +"aY" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/machinery/door/firedoor/glass,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "EngineRadiatorViewport"; name = "Engine Radiator Viewport Shutter"; opacity = 0},/turf/simulated/floor,/area/submap/pa_room) +"aZ" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/borderfloor/corner{dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"ba" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"bb" = (/obj/machinery/camera/network/engine{dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/borderfloor/corner2,/turf/simulated/floor/tiled,/area/engineering/engine_room) +"bc" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/engineering/engine_room) +"bd" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/machinery/door/firedoor/glass,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "EngineRadiatorViewport"; name = "Engine Radiator Viewport Shutter"; opacity = 0},/turf/simulated/floor,/area/submap/pa_room) +"be" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"bf" = (/turf/simulated/floor/tiled,/area/submap/pa_room) +"bh" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/turf/simulated/wall/r_wall,/area/submap/pa_room) +"bi" = (/turf/simulated/wall/r_wall,/area/submap/pa_room) +"bj" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/glass_engineering,/turf/simulated/floor/tiled,/area/submap/pa_room) +"bk" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"bl" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/yellow/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/yellow/bordercorner2{dir = 6},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"bm" = (/turf/simulated/wall/r_wall,/area/template_noop) +"bn" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "EngineRadiatorViewport"; name = "Engine Radiator Viewport Shutter"; opacity = 0},/obj/machinery/door/firedoor/glass,/turf/simulated/floor,/area/submap/pa_room) +"bo" = (/obj/effect/floor_decal/techfloor/orange{dir = 5},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/pa_room) +"bq" = (/obj/effect/floor_decal/steeldecal,/turf/simulated/floor/tiled,/area/submap/pa_room) +"br" = (/obj/machinery/light{dir = 1},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine charging port."; id = "EngineRadiatorViewport"; name = "Viewport Blast Doors"; pixel_x = -4; pixel_y = 24; req_access = list(10)},/turf/simulated/floor/tiled,/area/submap/pa_room) +"bs" = (/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/submap/pa_room) +"bt" = (/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 28},/obj/machinery/light_switch{pixel_y = 24},/turf/simulated/floor/tiled,/area/submap/pa_room) +"bu" = (/obj/item/weapon/book/manual/engineering_particle_accelerator{pixel_x = 5; pixel_y = 5},/obj/item/weapon/book/manual/tesla_engine,/turf/template_noop,/area/template_noop) +"bv" = (/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/engineering,/turf/template_noop,/area/template_noop) +"bw" = (/obj/effect/floor_decal/techfloor/orange/corner{icon_state = "techfloororange_corners"; dir = 4},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/pa_room) +"bx" = (/obj/structure/particle_accelerator/particle_emitter/left{dir = 8},/obj/effect/floor_decal/techfloor/orange{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/submap/pa_room) +"by" = (/obj/effect/floor_decal/techfloor/orange{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/submap/pa_room) +"bz" = (/obj/machinery/particle_accelerator/control_box,/obj/effect/floor_decal/techfloor/orange{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/submap/pa_room) +"bA" = (/obj/effect/floor_decal/techfloor/orange{dir = 5},/obj/item/stack/cable_coil/random,/turf/simulated/floor/tiled/techfloor,/area/submap/pa_room) +"bB" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/submap/pa_room) +"bC" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/machinery/door/firedoor/glass,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/submap/pa_room) +"bD" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/borderfloor{dir = 8},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"bE" = (/obj/machinery/the_singularitygen/tesla{anchored = 1},/turf/simulated/floor/airless,/area/space) +"bF" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "EngineRadiatorViewport"; name = "Engine Radiator Viewport Shutter"; opacity = 0},/obj/machinery/door/firedoor/glass,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/submap/pa_room) +"bG" = (/obj/structure/particle_accelerator/particle_emitter/center{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/submap/pa_room) +"bH" = (/obj/structure/particle_accelerator/power_box{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/submap/pa_room) +"bI" = (/obj/structure/particle_accelerator/fuel_chamber{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/submap/pa_room) +"bJ" = (/obj/structure/particle_accelerator/end_cap{dir = 8},/obj/effect/floor_decal/techfloor/orange{dir = 4},/obj/effect/floor_decal/techfloor/hole{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/submap/pa_room) +"bK" = (/obj/machinery/camera/network/engine{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled,/area/submap/pa_room) +"bL" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/submap/pa_room) +"bM" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/borderfloor{dir = 8},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"bN" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/yellow/border{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"bO" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine charging port."; id = "SupermatterPort"; name = "Radiation Collector Blast Doors"; pixel_x = -6; pixel_y = 7; req_access = list(10)},/obj/machinery/button/remote/blast_door{name = "Engine Monitoring Room Blast Doors"; desc = "A remote control-switch for the engine control room blast doors."; pixel_x = 5; pixel_y = 7; req_access = list(10); id = "EngineBlast"},/turf/template_noop,/area/template_noop) +"bP" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/machinery/door/firedoor/glass,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "EngineRadiatorViewport"; name = "Engine Radiator Viewport Shutter"; opacity = 0},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor,/area/submap/pa_room) +"bQ" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/pa_room) +"bR" = (/obj/structure/particle_accelerator/particle_emitter/right{dir = 8},/obj/effect/floor_decal/techfloor/orange,/turf/simulated/floor/tiled/techfloor,/area/submap/pa_room) +"bS" = (/obj/effect/floor_decal/techfloor/orange,/turf/simulated/floor/tiled/techfloor,/area/submap/pa_room) +"bT" = (/obj/effect/floor_decal/techfloor/orange,/obj/effect/floor_decal/techfloor/hole,/turf/simulated/floor/tiled/techfloor,/area/submap/pa_room) +"bU" = (/obj/effect/floor_decal/techfloor/orange{icon_state = "techfloororange_edges"; dir = 6},/turf/simulated/floor/tiled/techfloor,/area/submap/pa_room) +"bV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/submap/pa_room) +"bW" = (/obj/effect/floor_decal/techfloor/orange/corner,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/pa_room) +"bX" = (/obj/effect/floor_decal/techfloor/orange{icon_state = "techfloororange_edges"; dir = 6},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/pa_room) +"bY" = (/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/obj/effect/floor_decal/steeldecal/steel_decals8,/obj/structure/table/standard,/obj/item/weapon/book/manual/tesla_engine,/obj/item/weapon/book/manual/engineering_particle_accelerator{pixel_x = 5; pixel_y = 5},/turf/simulated/floor/tiled,/area/submap/pa_room) +"ca" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/submap/pa_room) +"cb" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/yellow/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/yellow/bordercorner2{dir = 5},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"cc" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"cd" = (/obj/machinery/light,/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine charging port."; dir = 1; id = "EngineRadiatorViewport"; name = "Viewport Blast Doors"; pixel_x = -4; pixel_y = -24; req_access = list(10)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/submap/pa_room) +"ce" = (/obj/machinery/camera/network/engine,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"cf" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"cg" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/borderfloor/corner{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"ch" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"ci" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"cj" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals_central5{icon_state = "steel_decals_central5"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"ck" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"cl" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/yellow/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/yellow/bordercorner2{dir = 6},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"cm" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/machinery/door/firedoor/glass,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "EngineRadiatorViewport"; name = "Engine Radiator Viewport Shutter"; opacity = 0},/obj/structure/window/reinforced,/turf/simulated/floor,/area/submap/pa_room) +"cn" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/yellow/bordercorner,/turf/simulated/floor/tiled,/area/engineering/engine_room) +"co" = (/obj/machinery/power/tesla_coil,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/space) +"cp" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/turf/simulated/floor/tiled,/area/engineering/engine_room) +"cq" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/turf/simulated/floor/tiled,/area/engineering/engine_room) +"cr" = (/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/yellow/border{dir = 6},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled,/area/engineering/engine_room) +"cs" = (/obj/machinery/power/emitter{anchored = 1; dir = 1; state = 1},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless,/area/space) +"ct" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "eng_south_airlock"; name = "exterior access button"; pixel_x = -5; pixel_y = 26; req_one_access = list(10,11,13)},/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "eng_south_outer"; locked = 1; name = "Engine South Airlock Exterior"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/engineering/engine_room) +"cu" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "eng_south_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eng_south_sensor"; pixel_x = 0; pixel_y = 25},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/dark,/area/engineering/engine_room) +"cv" = (/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "eng_south_inner"; locked = 1; name = "Engine South Airlock Interior"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "eng_south_airlock"; name = "interior access button"; pixel_x = 8; pixel_y = -26; req_one_access = list(10,11)},/turf/simulated/floor/tiled/dark,/area/engineering/engine_room) +"cw" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/yellow/bordercorner2,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"cx" = (/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/yellow/border{dir = 6},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"cy" = (/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/space) +"cz" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/space) +"cA" = (/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/effect/floor_decal/rust,/turf/simulated/floor/airless,/area/space) +"cB" = (/obj/structure/closet/emcloset,/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "eng_south_airlock"; pixel_x = 24; pixel_y = 0; req_one_access = list(10,11); tag_airpump = "eng_south_pump"; tag_chamber_sensor = "eng_south_sensor"; tag_exterior_door = "eng_south_outer"; tag_interior_door = "eng_south_inner"},/turf/simulated/floor/tiled/dark,/area/engineering/engine_room) +"cC" = (/turf/simulated/wall/r_wall,/area/space) +"cD" = (/obj/structure/lattice,/obj/machinery/power/grounding_rod,/turf/space,/area/space) +"cE" = (/obj/machinery/door/blast/regular{density = 0; dir = 2; icon_state = "pdoor0"; id = "SupermatterPort"; layer = 2.7; name = "Reactor Blast Door"; opacity = 0},/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor,/area/engineering/engine_room) +"cF" = (/obj/machinery/power/emitter{anchored = 1; state = 1},/obj/structure/cable/cyan,/turf/simulated/floor/airless,/area/space) +"cG" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/submap/pa_room) +"cH" = (/obj/machinery/door/airlock/glass_engineering,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/submap/pa_room) +"cI" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/engine_room) +"cK" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/space) +"cL" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/space) +"cM" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/turf/simulated/floor/tiled,/area/engineering/engine_room) +"cN" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/space) +"cQ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/airless,/area/space) (1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -ab -ac -ac -ac -ad -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -aa -"} -(3,1,1) = {" -aa -aa -ab -ac -ab -ab -ab -ac -ab -ab -ab -ab -ab -cD -ab -ab -ab -ab -ab -ab -ab -cD -ab -ab -ab -ab -ab -ad -ab -aa -"} -(4,1,1) = {" -aa -aa -ab -ac -ab -ab -ab -ac -ab -ab -ab -ab -ab -ad -ab -ab -ab -ab -ab -ab -ab -ad -ab -ab -ab -ab -ad -ad -ab -aa -"} -(5,1,1) = {" -aa -aa -ab -ac -ab -ab -ab -ac -aj -ab -ab -ab -aj -aj -aj -aj -aj -aj -aj -aj -cS -aj -aj -ab -ab -ab -aj -cC -ab -aa -"} -(6,1,1) = {" -aa -aa -ab -ac -ab -ab -ab -ac -ak -cF -ab -ab -aj -aX -ab -ab -aX -ab -ab -ab -ab -aX -aj -ab -ab -cs -cy -cC -ab -aa -"} -(7,1,1) = {" -aa -aa -ab -ad -ab -ab -ab -ac -al -aj -ad -ad -aj -ab -ab -ab -ad -ab -ab -ab -ab -ab -aj -ad -ad -aj -al -cC -ab -aa -"} -(8,1,1) = {" -aa -aa -ab -ac -ab -ab -ab -ac -al -aj -ab -ab -aj -ab -ab -ab -ad -ad -ad -ab -ab -ab -aj -ab -ab -aj -al -cC -ab -aa -"} -(9,1,1) = {" -aa -aa -ab -ac -ab -ab -ab -ac -al -aj -ab -ab -aj -ab -ab -cR -aj -aj -aj -ad -ad -aX -aj -ab -ab -aj -al -cC -ab -aa -"} -(10,1,1) = {" -aa -aa -ab -ac -ab -ab -ab -ac -al -aj -ab -ab -co -ab -ab -ad -aj -bE -aj -ad -ab -ab -co -ab -ab -aj -al -cC -ab -aa -"} -(11,1,1) = {" -aa -aa -ab -ac -ab -ab -ab -ac -al -aj -ab -ab -cK -aX -ad -ad -aj -aj -aj -ad -ab -ab -cK -ab -ab -aj -al -cC -aa -aa -"} -(12,1,1) = {" -aa -aa -ab -ac -ab -ab -ab -ac -al -aj -ab -ab -cK -ab -ab -ab -ad -ad -ad -ab -ab -ab -cK -ab -ab -aj -al -cC -aa -aa -"} -(13,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ac -al -aj -ad -ad -cK -ab -ab -ab -ab -ab -ad -ab -ab -ab -cK -ad -ad -aj -al -cC -aa -aa -"} -(14,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ac -am -ar -ab -ab -cK -aX -ab -ab -ab -ab -aX -ab -ab -aX -cK -ab -ab -cs -cz -cC -aa -aa -"} -(15,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ac -al -ad -ab -ab -cL -cN -cN -cO -cN -cP -cN -cO -cN -cN -cQ -ab -ab -ad -al -cC -aa -aa -"} -(16,1,1) = {" -aa -aa -ab -ac -ab -ab -ab -ac -an -as -aB -ab -ab -ab -bf -bn -bn -bF -bP -bP -bZ -ab -ab -ab -aB -ak -cA -cC -aa -aa -"} -(17,1,1) = {" -aa -aa -ab -ac -ab -ab -ab -af -af -at -af -aG -aG -aG -bg -bo -bw -bQ -bW -bX -bg -aG -aG -aG -af -ct -af -af -aa -aa -"} -(18,1,1) = {" -aa -aa -ab -ac -ab -ab -ab -af -ao -au -af -aH -cE -aP -bg -bp -bx -bG -bR -ca -bg -aP -cE -cm -af -cu -cB -af -aa -aa -"} -(19,1,1) = {" -aa -aa -ab -ac -ab -ab -ab -af -af -av -aC -aI -aQ -aY -bh -bq -by -bH -bS -ca -bh -aI -ch -aY -aC -cv -af -aC -aa -aa -"} -(20,1,1) = {" -aa -aa -ab -ac -ab -ab -ab -ab -af -aw -aD -aJ -aR -aZ -bi -br -bz -bI -bT -cd -bi -cc -ci -aJ -aD -cw -af -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -ab -ac -ab -ab -ab -ab -af -ax -aE -aK -aS -ba -bj -bs -bA -bJ -bU -cG -cH -cI -cJ -cn -aE -cx -af -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -ab -ad -ab -ab -ae -ae -ae -ae -ae -aL -aT -bb -bi -bt -bB -bK -bV -bY -bi -ce -aT -cM -af -af -af -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -ab -ac -ab -ab -ae -ag -ag -ay -ae -aM -aU -bc -bi -bi -bC -bL -bC -bi -bi -cf -cj -cp -af -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -ab -ac -ab -ab -ae -ah -ap -az -aF -aN -aV -bd -bk -bk -bD -bM -bD -bk -bk -cg -ck -cq -af -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -ab -ac -ab -ab -ae -ai -aq -aA -ae -aO -aW -be -bl -aE -aE -bN -aE -aE -cb -ba -cl -cr -af -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -ab -ac -ab -ab -ae -ae -ae -aa -aa -aa -aa -aa -bm -aa -aa -aa -aa -aa -bm -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -ab -ac -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -bm -bu -aa -aa -aa -aa -bm -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -ab -ac -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -bv -aa -bO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaabababababababababababababababababababababababababababaaaa +aaacacacacacadacacacacacabababacacacacacacadacacacacacacaaaa +aaacababababababababababababababababababababababababababaaaa +aaacababababababababababababababababababababababababababaaaa +aaadabababababababababababababababababababaeaeaeaeaeababaaaa +aaacacacacacacacacacacacacacacacafafafababaeagahaiaeababaaaa +aaacababajajajakalalalamalalalanafaoafafafaeagapaqaeababaaaa +aaacabababajajcFajajajarajajadasatauavawaxaeayazaAaaaaaaaaaa +aaacababababadabababababadababaBafafaCaDaEaeaeaFaeaaaaaaaaaa +aaacababababcDabababababcDabababababcEaJaKaLaMaNaOaaaaaaaaaa +aaacababababadabababababadabababababcEaQaRaSaUaVaWaaaaaaaaaa +aaacadadadajcocKcKaIcKcKaIcLababababcEaGbabbbcaZbeaaaaaaaaaa +aaacabababajadadadadadadadcNabaYbPbPbhbibjbibibkblbmbmaaaaaa +aaacabababajadaXadadadaXadcNabbnbobfbqbrbsbtbibkaEaabubvaaaa +aaacabababajadadajajajadadcNadbnbwbxbybzbAbBbCbDaEaaaaaaaaaa +aaacabababajadadajbEajadadaPcKbFbQbGbHbIbJbKbLbMbNaaaabOaaaa +aaacabababajadadajajajadadcNadbnbWbRbSbTbUbVbCbDaEaaaaaaaaaa +aaacabababajadaXadadadaXadcNabbnbXcacacdcGbYbibkaEaaaaaaaaaa +aaacabababajadadadadadadadcNabbdcmcmbhbicHbibibkcbbmbmaaaaaa +aaacadadadajcocKcKaIcKcKaIcQababababcEaHcIcecfcgbaaaaaaaaaaa +aaacababababadabababababadabababababcEccchaTcjckclaaaaaaaaaa +aaacababababcDabababababcDabababababcEaJcncMcpcqcraaaaaaaaaa +aaacababababadabababababadababaBafafaCciaEafafafafaaaaaaaaaa +aaacabababajajcsajajajcsajajadakctcucvcwcxafaaaaaaaaaaaaaaaa +aaacabadajajajcyalalalczalalalcAafcBafafafafaaaaaaaaaaaaaaaa +aaacadadcCcCcCcCcCcCcCcCcCcCcCcCafafaCaaaaaaaaaaaaaaaaaaaaaa +aaacababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} diff --git a/maps/submaps/surface_submaps/mountains/deadspy.dmm b/maps/submaps/surface_submaps/mountains/deadspy.dmm index f255e79cd77..f22e0d3e612 100644 --- a/maps/submaps/surface_submaps/mountains/deadspy.dmm +++ b/maps/submaps/surface_submaps/mountains/deadspy.dmm @@ -1,31 +1,32 @@ -"a" = (/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel,/obj/effect/decal/cleanable/molten_item,/turf/template_noop,/area/submap/deadspy) -"b" = (/obj/item/weapon/flamethrower,/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel,/turf/template_noop,/area/submap/deadspy) -"c" = (/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel,/obj/effect/decal/cleanable/ash,/obj/random/landmine,/turf/template_noop,/area/submap/deadspy) -"d" = (/obj/item/weapon/material/butterfly,/obj/effect/decal/cleanable/liquid_fuel,/turf/template_noop,/area/submap/deadspy) -"e" = (/obj/item/weapon/flame/lighter/zippo,/obj/effect/decal/cleanable/liquid_fuel,/turf/template_noop,/area/submap/deadspy) -"f" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel,/turf/template_noop,/area/submap/deadspy) -"g" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/random/landmine,/turf/template_noop,/area/submap/deadspy) -"h" = (/obj/item/weapon/deadringer,/obj/effect/decal/cleanable/liquid_fuel,/turf/template_noop,/area/submap/deadspy) -"i" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/item/weapon/storage/fancy/cigarettes/professionals,/turf/template_noop,/area/submap/deadspy) -"j" = (/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel,/turf/template_noop,/area/submap/deadspy) -"k" = (/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel,/obj/effect/decal/cleanable/ash,/turf/template_noop,/area/submap/deadspy) -"l" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/molten_item,/turf/template_noop,/area/submap/deadspy) -"m" = (/obj/effect/decal/remains/human,/obj/item/clothing/mask/balaclava,/obj/item/clothing/under/suit_jacket/really_black,/obj/effect/decal/cleanable/ash,/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/ash,/turf/template_noop,/area/submap/deadspy) -"n" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/ash,/turf/template_noop,/area/submap/deadspy) -"o" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/liquid_fuel,/obj/random/landmine,/turf/template_noop,/area/submap/deadspy) -"p" = (/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel,/obj/random/landmine,/turf/template_noop,/area/submap/deadspy) -"q" = (/obj/effect/decal/remains/xeno,/obj/item/clothing/mask/gas,/obj/item/clothing/suit/fire/firefighter,/turf/template_noop,/area/submap/deadspy) -"r" = (/turf/template_noop,/area/submap/deadspy) -"s" = (/obj/effect/decal/remains/human,/obj/item/weapon/wrench,/obj/item/clothing/head/hardhat,/turf/template_noop,/area/submap/deadspy) -"t" = (/obj/machinery/porta_turret/poi{desc = "Looking at this heavy caliber, tripod-mounted, little ol' number makes you want to square-dance."; lethal = 0; name = "sentry turret"},/turf/template_noop,/area/submap/deadspy) -"u" = (/obj/item/weapon/card/emag_broken,/turf/template_noop,/area/submap/deadspy) +"a" = (/obj/effect/decal/remains/xeno,/obj/item/clothing/mask/gas,/obj/item/clothing/suit/fire/firefighter,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"b" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"c" = (/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel,/obj/effect/decal/cleanable/molten_item,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"d" = (/obj/item/weapon/flamethrower,/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"e" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"f" = (/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"g" = (/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel,/obj/effect/decal/cleanable/ash,/obj/random/landmine,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"h" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/random/landmine,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"i" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/molten_item,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"j" = (/obj/item/weapon/material/butterfly,/obj/effect/decal/cleanable/liquid_fuel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"k" = (/obj/effect/decal/remains/human,/obj/item/weapon/wrench,/obj/item/clothing/head/hardhat,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"l" = (/obj/item/weapon/flame/lighter/zippo,/obj/effect/decal/cleanable/liquid_fuel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"m" = (/obj/effect/decal/remains/human,/obj/item/clothing/mask/balaclava,/obj/item/clothing/under/suit_jacket/really_black,/obj/effect/decal/cleanable/ash,/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/ash,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"n" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/ash,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"o" = (/obj/machinery/porta_turret/poi{desc = "Looking at this heavy caliber, tripod-mounted, little ol' number makes you want to square-dance."; lethal = 0; name = "sentry turret"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"p" = (/obj/item/weapon/deadringer,/obj/effect/decal/cleanable/liquid_fuel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"q" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/liquid_fuel,/obj/random/landmine,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"r" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/item/weapon/storage/fancy/cigarettes/professionals,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"s" = (/obj/item/weapon/card/emag_broken,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"t" = (/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel,/obj/random/landmine,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"u" = (/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel,/obj/effect/decal/cleanable/ash,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/deadspy) +"v" = (/turf/simulated/mineral,/area/submap/deadspy) (1,1,1) = {" -qrrrrrr -rabfjcr -rjgldjs -rjemnjt -rjhoiju -rpjkjjr -rrrrrrr +abbbbvv +bcdefgb +bfhijfk +bflmnfo +vfpqrfs +vtfuffb +vvbbbvb "} diff --git a/maps/tether/tether-01-surface1.dmm b/maps/tether/tether-01-surface1.dmm index af7ce40fab6..c65cbe8d593 100644 --- a/maps/tether/tether-01-surface1.dmm +++ b/maps/tether/tether-01-surface1.dmm @@ -27791,6 +27791,14 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled, /area/tether/surfacebase/public_garden) +"kCO" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + name = "Holodeck Projector Floor" + }, +/area/crew_quarters/sleep/Dorm_3/holo) "kOB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, @@ -28023,6 +28031,14 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/public_garden) +"oUC" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + name = "Holodeck Projector Floor" + }, +/area/crew_quarters/sleep/Dorm_1/holo) "piN" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -28082,6 +28098,14 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/public_garden) +"qBH" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + name = "Holodeck Projector Floor" + }, +/area/crew_quarters/sleep/Dorm_7/holo) "qGm" = ( /obj/structure/cable{ icon_state = "1-2" @@ -28475,6 +28499,14 @@ /obj/random/maintenance/research, /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/public_garden_maintenence) +"wUS" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + name = "Holodeck Projector Floor" + }, +/area/crew_quarters/sleep/Dorm_5/holo) "wYi" = ( /turf/simulated/floor/plating, /area/maintenance/lower/public_garden_maintenence) @@ -41690,19 +41722,19 @@ aCI aCI cgS cgY -cgY +qBH cgY cgS chL -chL +wUS chL chM ciz -ciz +kCO ciz ciA cjl -cjl +oUC cjl cjm aah diff --git a/maps/tether/tether-06-station2.dmm b/maps/tether/tether-06-station2.dmm index 3682a113b83..97f2969b476 100644 --- a/maps/tether/tether-06-station2.dmm +++ b/maps/tether/tether-06-station2.dmm @@ -996,7 +996,6 @@ /turf/simulated/floor/tiled, /area/security/brig) "bE" = ( -/obj/item/weapon/stool/padded, /obj/structure/disposalpipe/segment, /obj/effect/floor_decal/borderfloor/corner{ dir = 4 @@ -1010,6 +1009,9 @@ icon_state = "bordercolorcorner"; dir = 4 }, +/obj/structure/bed/chair{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/security/brig) "bF" = ( @@ -1723,6 +1725,7 @@ dir = 4; pixel_x = 24 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/tiled, /area/security/security_cell_hallway) "cA" = ( @@ -2502,6 +2505,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/tiled, /area/security/brig/visitation) "dM" = ( @@ -2826,6 +2830,7 @@ /area/security/brig) "es" = ( /obj/effect/decal/cleanable/dirt, +/obj/machinery/hologram/holopad, /turf/simulated/floor/tiled/steel_dirty, /area/security/brig) "ev" = ( @@ -3781,6 +3786,7 @@ /obj/effect/floor_decal/corner/red/bordercorner2{ dir = 1 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/tiled, /area/security/security_cell_hallway) "gX" = ( diff --git a/maps/tether/tether-07-station3.dmm b/maps/tether/tether-07-station3.dmm index 35244523190..f5edc6a75ca 100644 --- a/maps/tether/tether-07-station3.dmm +++ b/maps/tether/tether-07-station3.dmm @@ -34,7 +34,7 @@ /obj/machinery/light/small{ dir = 4 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled, /area/security/eva) "ah" = ( /obj/effect/floor_decal/borderfloorblack{ @@ -97,7 +97,7 @@ tag_exterior_door = "sec_fore_outer"; tag_interior_door = "sec_fore_inner" }, -/turf/simulated/floor, +/turf/simulated/floor/tiled, /area/security/eva) "al" = ( /obj/effect/floor_decal/borderfloorblack{ @@ -254,14 +254,20 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled, /area/security/eva) "ay" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, /area/security/eva) "az" = ( /obj/effect/floor_decal/borderfloorblack{ @@ -347,9 +353,6 @@ }, /turf/simulated/floor/tiled, /area/security/range) -"aF" = ( -/turf/simulated/floor, -/area/security/eva) "aG" = ( /obj/effect/floor_decal/borderfloor{ dir = 4 @@ -373,7 +376,10 @@ /obj/machinery/camera/network/security{ dir = 1 }, -/turf/simulated/floor, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, /area/security/eva) "aI" = ( /turf/simulated/wall, @@ -602,6 +608,7 @@ /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/red/border, /obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled, /area/security/eva) "aY" = ( @@ -643,7 +650,7 @@ /obj/machinery/camera/network/engineering{ dir = 4 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled, /area/security/eva) "bc" = ( /turf/simulated/wall, @@ -1018,6 +1025,7 @@ /obj/effect/landmark/start{ name = "Warden" }, +/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled/dark, /area/security/warden) "bF" = ( @@ -1081,7 +1089,7 @@ "bJ" = ( /obj/structure/closet/emcloset, /obj/effect/decal/cleanable/cobweb, -/turf/simulated/floor, +/turf/simulated/floor/tiled, /area/security/eva) "bK" = ( /obj/effect/floor_decal/borderfloor, @@ -1124,6 +1132,7 @@ /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/red/border, /obj/machinery/light, +/obj/machinery/hologram/holopad, /turf/simulated/floor/tiled, /area/security/hallwayaux) "bP" = ( @@ -1281,6 +1290,12 @@ pixel_x = 22; pixel_y = -24 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/security/warden) "cd" = ( @@ -1977,6 +1992,9 @@ pixel_y = -39; req_access = list(3) }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/security/warden) "dp" = ( @@ -2016,9 +2034,7 @@ /area/crew_quarters/heads/hos) "du" = ( /obj/structure/table/woodentable, -/obj/machinery/newscaster{ - layer = 3.3; - pixel_x = 0; +/obj/machinery/newscaster/security_unit{ pixel_y = -32 }, /turf/simulated/floor/tiled/dark, @@ -2053,6 +2069,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/tiled/dark, /area/security/security_equiptment_storage) "dA" = ( @@ -2489,6 +2506,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/tiled/dark, /area/crew_quarters/heads/hos) "em" = ( @@ -3330,6 +3348,7 @@ icon_state = "1-8" }, /obj/structure/disposalpipe/segment, +/obj/machinery/hologram/holopad, /turf/simulated/floor/tiled, /area/security/hallway) "fE" = ( @@ -3804,7 +3823,7 @@ frequency = 1379; id_tag = "sec_fore_pump" }, -/turf/simulated/floor, +/turf/simulated/floor/tiled, /area/security/eva) "gy" = ( /turf/simulated/wall, @@ -4107,7 +4126,7 @@ pixel_y = 22 }, /obj/structure/closet/emcloset, -/turf/simulated/floor, +/turf/simulated/floor/tiled, /area/security/eva) "ha" = ( /obj/machinery/atmospherics/pipe/manifold/hidden{ @@ -4115,18 +4134,14 @@ icon_state = "map" }, /obj/machinery/meter, -/turf/simulated/floor, +/turf/simulated/floor/tiled, /area/security/eva) "hb" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 0 - }, /obj/machinery/atmospherics/portables_connector{ dir = 8 }, /obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor, +/turf/simulated/floor/tiled, /area/security/eva) "hc" = ( /obj/machinery/alarm{ @@ -4274,18 +4289,6 @@ "hr" = ( /turf/simulated/floor/tiled, /area/security/eva) -"hs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/security/eva) -"ht" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/security/eva) "hu" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/blast/regular{ @@ -4307,7 +4310,7 @@ dir = 5; icon_state = "intact" }, -/turf/simulated/floor, +/turf/simulated/floor/tiled, /area/security/eva) "hw" = ( /obj/effect/decal/cleanable/dirt, @@ -4315,14 +4318,7 @@ dir = 5; icon_state = "intact" }, -/turf/simulated/floor, -/area/security/eva) -"hx" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock, -/turf/simulated/floor, +/turf/simulated/floor/tiled, /area/security/eva) "hy" = ( /turf/simulated/mineral/floor/cave, @@ -4492,24 +4488,21 @@ }, /turf/simulated/floor/tiled, /area/security/eva) -"hO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +"hP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/security/eva) -"hP" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /turf/simulated/floor/tiled, /area/security/eva) "hQ" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, /area/security/eva) "hR" = ( /obj/machinery/door/firedoor/border_only, @@ -4635,7 +4628,7 @@ "hZ" = ( /obj/machinery/door/airlock/maintenance/sec{ name = "Security Airlock Access"; - req_one_access = newlist() + req_access = list(1,2,18) }, /turf/simulated/floor, /area/security/eva) @@ -4855,7 +4848,7 @@ dir = 5 }, /obj/structure/filingcabinet/chestdrawer, -/obj/machinery/newscaster{ +/obj/machinery/newscaster/security_unit{ pixel_y = 32 }, /turf/simulated/floor/tiled/dark, @@ -5929,12 +5922,6 @@ }, /turf/simulated/floor/tiled, /area/security/hallwayaux) -"jJ" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/open, -/area/security/brig) "jK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -6193,13 +6180,6 @@ /obj/structure/sign/warning/secure_area, /turf/simulated/wall/r_wall, /area/security/armory/blue) -"kg" = ( -/obj/machinery/light{ - icon_state = "tube1"; - dir = 8 - }, -/turf/simulated/open, -/area/security/brig) "kh" = ( /obj/structure/cable/green{ d1 = 1; @@ -6254,8 +6234,14 @@ /turf/simulated/wall/r_wall, /area/security/security_equiptment_storage) "kp" = ( -/obj/machinery/light/small, -/turf/simulated/floor, +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled, /area/security/eva) "kq" = ( /obj/effect/floor_decal/borderfloor{ @@ -6507,6 +6493,7 @@ /obj/machinery/shower{ pixel_y = 16 }, +/obj/structure/curtain/open/shower/security, /turf/simulated/floor/tiled, /area/security/security_bathroom) "kK" = ( @@ -6979,6 +6966,9 @@ /obj/structure/railing{ dir = 8 }, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/simulated/open, /area/security/hallway) "lC" = ( @@ -7633,30 +7623,14 @@ /obj/machinery/camera/network/security{ dir = 1 }, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/simulated/open, /area/security/hallway) "mH" = ( /turf/simulated/wall/r_wall, /area/security/hallway) -"mI" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/machinery/light{ - icon_state = "tube1"; - dir = 8 - }, -/turf/simulated/open, -/area/security/brig) -"mJ" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/open, -/area/security/brig) "mK" = ( /obj/effect/floor_decal/borderfloor{ dir = 8 @@ -7858,7 +7832,7 @@ /area/security/breakroom) "nf" = ( /obj/machinery/camera/network/security, -/obj/machinery/newscaster{ +/obj/machinery/newscaster/security_unit{ pixel_y = 32 }, /turf/simulated/floor/wood, @@ -7903,6 +7877,7 @@ /obj/effect/floor_decal/borderfloorblack/corner, /obj/effect/floor_decal/corner/red/bordercorner, /obj/structure/table/bench/steel, +/obj/machinery/hologram/holopad, /turf/simulated/floor/tiled/dark, /area/security/security_lockerroom) "nl" = ( @@ -10360,6 +10335,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled/white, /area/security/forensics) "rm" = ( @@ -11548,15 +11526,6 @@ /area/security/hallway) "sW" = ( /obj/machinery/door/firedoor/glass, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, /obj/machinery/door/blast/regular{ density = 0; dir = 1; @@ -13783,7 +13752,6 @@ /turf/simulated/floor/tiled, /area/security/lobby) "wk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ d1 = 1; @@ -13796,6 +13764,9 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, /turf/simulated/floor/tiled, /area/security/lobby) "wl" = ( @@ -13805,11 +13776,13 @@ /obj/effect/landmark/start{ name = "Security Officer" }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/security/lobby) "wm" = ( /obj/machinery/door/firedoor/glass, -/obj/machinery/atmospherics/unary/vent_pump/on, /obj/machinery/door/blast/regular{ density = 0; dir = 1; @@ -14104,21 +14077,19 @@ icon_state = "tube1"; dir = 8 }, +/obj/machinery/newscaster/security_unit{ + pixel_x = -32 + }, /turf/simulated/floor/tiled, /area/security/lobby) "wP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, /obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/security/lobby) "wQ" = ( @@ -14134,12 +14105,6 @@ /obj/effect/floor_decal/corner/red/bordercorner2{ dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/structure/table/reinforced, /obj/item/weapon/paper_bin{ pixel_x = 4; @@ -14756,13 +14721,13 @@ dir = 8; icon_state = "pipe-c" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, /turf/simulated/floor/tiled, /area/security/lobby) "xJ" = ( /obj/machinery/door/firedoor/glass, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, /obj/machinery/door/blast/regular{ density = 0; dir = 1; @@ -27337,9 +27302,90 @@ /obj/effect/decal/cleanable/cobweb, /turf/simulated/wall/r_wall, /area/security/lobby) +"RB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/warden) +"Sa" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/security/eva) "SW" = ( /turf/simulated/mineral/vacuum, /area/space) +"Un" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/carpet, +/area/security/breakroom) +"Up" = ( +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 1; + icon_state = "pdoor0"; + id = "security_lockdown"; + name = "Security Blast Doors"; + opacity = 0 + }, +/obj/machinery/door/airlock/maintenance/sec{ + name = "Security Airlock Access"; + req_access = list(1,2,18) + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/security/eva) +"Ur" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/security/eva) +"Vn" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/obj/effect/landmark/start{ + name = "Security Officer" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/security/lobby) +"WY" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/dark, +/area/security/evidence_storage) +"XG" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled, +/area/security/eva) +"ZO" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/security/eva) (1,1,1) = {" aa @@ -31942,7 +31988,7 @@ nh ey eH ow -oX +Un pB qd qz @@ -33487,7 +33533,7 @@ dI bS ez bE -ez +RB fn dp dL @@ -34074,7 +34120,7 @@ nN oz fo pK -pL +WY qL fL fN @@ -34344,14 +34390,14 @@ jk jk jk jk -kg +jk jk jk jk gb cT cT -mI +jy jk jk of @@ -34652,7 +34698,7 @@ uS vG wl wQ -wl +Vn ys zp Ae @@ -35052,7 +35098,7 @@ bN cg jk jk -jJ +jk jk jk jk @@ -35061,7 +35107,7 @@ jk gb cT cT -mJ +jy jk jk oh @@ -35895,7 +35941,7 @@ ab ab aU bj -hr +XG hN aV cb @@ -36179,8 +36225,8 @@ ab ab aU gW -hr -hM +ZO +Sa aX in bu @@ -36321,8 +36367,8 @@ ab ab aU gX -hs -hO +hr +hM aY in bu @@ -36463,7 +36509,7 @@ ab ab aU bk -ht +hr hP Rl aU @@ -36606,7 +36652,7 @@ aU aU aU hu -hu +Up aU aU iI @@ -36748,7 +36794,7 @@ gx bb gY hv -aF +hP bm bz bw @@ -37173,7 +37219,7 @@ aa ab bc bJ -ay +Ur hQ bm bm @@ -37458,7 +37504,7 @@ ab bc bc hb -hx +hb bc pS eW diff --git a/maps/tether/tether-10-colony.dmm b/maps/tether/tether-10-colony.dmm index c0d62c23b54..924818b9efe 100644 --- a/maps/tether/tether-10-colony.dmm +++ b/maps/tether/tether-10-colony.dmm @@ -7693,13 +7693,25 @@ dir = 1 }, /obj/machinery/camera/network/crescent, +/obj/item/weapon/reagent_containers/glass/beaker/large, /turf/unsimulated/floor/steel{ icon_state = "white" }, /area/centcom/medical) "nW" = ( /obj/structure/table/glass, -/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/glass/bottle/biomass{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/weapon/reagent_containers/glass/bottle/biomass{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/item/weapon/reagent_containers/glass/bottle/biomass{ + pixel_x = 3; + pixel_y = 5 + }, /obj/effect/floor_decal/borderfloorwhite{ dir = 1 }, @@ -7712,10 +7724,8 @@ /obj/effect/floor_decal/corner/paleblue/bordercorner2{ dir = 1 }, -/turf/unsimulated/floor/steel{ - icon_state = "white" - }, -/area/centcom/medical) +/turf/simulated/floor/tiled/white, +/area/space) "nX" = ( /obj/effect/floor_decal/borderfloorwhite{ dir = 1 @@ -7802,7 +7812,7 @@ /obj/effect/floor_decal/corner_steel_grid{ dir = 10 }, -/obj/machinery/clonepod/transhuman, +/obj/machinery/clonepod/transhuman/full, /turf/unsimulated/floor/steel{ icon_state = "white" }, diff --git a/rust_g b/rust_g index 1a623a422f3..57684fff77a 100644 Binary files a/rust_g and b/rust_g differ diff --git a/rust_g.dll b/rust_g.dll index 817a522b61f..9438c144459 100644 Binary files a/rust_g.dll and b/rust_g.dll differ