diff --git a/.travis.yml b/.travis.yml index 478896d7b1..3bd1c71a17 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,8 +4,8 @@ sudo: false env: global: - - BYOND_MAJOR="512" - - BYOND_MINOR="1453" + - BYOND_MAJOR="513" + - BYOND_MINOR="1502" - MACRO_COUNT=4 matrix: - TEST_DEFINE="MAP_TEST" TEST_FILE="code/_map_tests.dm" RUN="0" diff --git a/code/__defines/__513_compatibility.dm b/code/__defines/__513_compatibility.dm new file mode 100644 index 0000000000..7f8d7eb4e6 --- /dev/null +++ b/code/__defines/__513_compatibility.dm @@ -0,0 +1,31 @@ +#if DM_VERSION < 513 + +#define ismovableatom(A) (istype(A, /atom/movable)) + +#define islist(L) (istype(L, /list)) + +#define CLAMP01(x) (CLAMP(x, 0, 1)) + +#define CLAMP(CLVALUE,CLMIN,CLMAX) ( max( (CLMIN), min((CLVALUE), (CLMAX)) ) ) + +#define ATAN2(x, y) ( !(x) && !(y) ? 0 : (y) >= 0 ? arccos((x) / sqrt((x)*(x) + (y)*(y))) : -arccos((x) / sqrt((x)*(x) + (y)*(y))) ) + +#define TAN(x) (sin(x) / cos(x)) + +#define arctan(x) (arcsin(x/sqrt(1+x*x))) + +////////////////////////////////////////////////// + +#else + +#define ismovableatom(A) ismovable(A) + +#define CLAMP01(x) clamp(x, 0, 1) + +#define CLAMP(CLVALUE, CLMIN, CLMAX) clamp(CLVALUE, CLMIN, CLMAX) + +#define TAN(x) tan(x) + +#define ATAN2(x, y) arctan(x, y) + +#endif \ No newline at end of file diff --git a/code/__defines/is_helpers.dm b/code/__defines/is_helpers.dm index ed4a0dd10f..d3222965a9 100644 --- a/code/__defines/is_helpers.dm +++ b/code/__defines/is_helpers.dm @@ -2,7 +2,7 @@ #define isdatum(D) istype(D, /datum) #define isweakref(A) istype(A, /weakref) -#define islist(D) istype(D, /list) +//#define islist(D) istype(D, /list) //Built in //--------------- #define isatom(D) istype(D, /atom) diff --git a/code/__defines/lighting.dm b/code/__defines/lighting.dm index 0425c3fa63..60513c5a8f 100644 --- a/code/__defines/lighting.dm +++ b/code/__defines/lighting.dm @@ -84,4 +84,4 @@ #define LIGHT_COLOR_INCANDESCENT_FLASHLIGHT "#FFCC66" //Fake ambient occlusion filter -#define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, border=4, color="#04080FAA") +#define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, offset=4, color="#04080FAA") diff --git a/code/__defines/math.dm b/code/__defines/math.dm index 88c459ba78..2053b762d2 100644 --- a/code/__defines/math.dm +++ b/code/__defines/math.dm @@ -16,7 +16,6 @@ #define TICK_USAGE_TO_MS(starting_tickusage) (TICK_DELTA_TO_MS(world.tick_usage - starting_tickusage)) #define PERCENT(val) (round((val)*100, 0.1)) -#define CLAMP01(x) (CLAMP(x, 0, 1)) //time of day but automatically adjusts to the server going into the next day within the same round. //for when you need a reliable time number that doesn't depend on byond time. @@ -30,17 +29,12 @@ // round() acts like floor(x, 1) by default but can't handle other values #define FLOOR(x, y) ( round((x) / (y)) * (y) ) -#define CLAMP(CLVALUE,CLMIN,CLMAX) ( max( (CLMIN), min((CLVALUE), (CLMAX)) ) ) - // Similar to clamp but the bottom rolls around to the top and vice versa. min is inclusive, max is exclusive #define WRAP(val, min, max) ( min == max ? min : (val) - (round(((val) - (min))/((max) - (min))) * ((max) - (min))) ) // Real modulus that handles decimals #define MODULUS(x, y) ( (x) - (y) * round((x) / (y)) ) -// Tangent -#define TAN(x) (sin(x) / cos(x)) - // Cotangent #define COT(x) (1 / TAN(x)) @@ -50,8 +44,6 @@ // Cosecant #define CSC(x) (1 / sin(x)) -#define ATAN2(x, y) ( !(x) && !(y) ? 0 : (y) >= 0 ? arccos((x) / sqrt((x)*(x) + (y)*(y))) : -arccos((x) / sqrt((x)*(x) + (y)*(y))) ) - // Greatest Common Divisor - Euclid's algorithm /proc/GCD(a, b) return b ? GCD(b, (a) % (b)) : a diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index de9ffa6cf9..d43faaf4a5 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -325,6 +325,8 @@ #define SPECIES_SKELETON "Skeleton" #define SPECIES_GOLEM "Golem" #define SPECIES_EVENT1 "X Occursus" +#define SPECIES_EVENT2 "X Anomalous" +#define SPECIES_EVENT3 "X Unowas" // Replicant types. Currently only used for alien pods and events. #define SPECIES_REPLICANT "Replicant" diff --git a/code/__defines/typeids.dm b/code/__defines/typeids.dm index 9af310012b..53028be294 100644 --- a/code/__defines/typeids.dm +++ b/code/__defines/typeids.dm @@ -2,5 +2,5 @@ #define TYPEID_NULL "0" #define TYPEID_NORMAL_LIST "f" //helper macros -#define GET_TYPEID(ref) ( ( (lentext(ref) <= 10) ? "TYPEID_NULL" : copytext(ref, 4, lentext(ref)-6) ) ) -#define IS_NORMAL_LIST(L) (GET_TYPEID("\ref[L]") == TYPEID_NORMAL_LIST) \ No newline at end of file +#define GET_TYPEID(ref) ( ( (length(ref) <= 10) ? "TYPEID_NULL" : copytext(ref, 4, length(ref)-6) ) ) +#define IS_NORMAL_LIST(L) (GET_TYPEID("\ref[L]") == TYPEID_NORMAL_LIST) diff --git a/code/_compatibility/509/JSON Reader.dm b/code/_compatibility/509/JSON Reader.dm index 544d197ccd..18f739c5ef 100644 --- a/code/_compatibility/509/JSON Reader.dm +++ b/code/_compatibility/509/JSON Reader.dm @@ -28,7 +28,7 @@ json_reader src.json = json . = new/list() src.i = 1 - while(src.i <= lentext(json)) + while(src.i <= length(json)) var/char = get_char() if(is_whitespace(char)) i++ @@ -46,7 +46,7 @@ json_reader read_word() var/val = "" - while(i <= lentext(json)) + while(i <= length(json)) var/char = get_char() if(is_whitespace(char) || symbols.Find(char)) i-- // let scanner handle this character @@ -58,7 +58,7 @@ json_reader var escape = FALSE val = "" - while(++i <= lentext(json)) + while(++i <= length(json)) var/char = get_char() if(escape) switch(char) diff --git a/code/_compatibility/509/JSON Writer.dm b/code/_compatibility/509/JSON Writer.dm index de3bb54a3e..80e4976687 100644 --- a/code/_compatibility/509/JSON Writer.dm +++ b/code/_compatibility/509/JSON Writer.dm @@ -43,7 +43,7 @@ json_writer var/static/list/json_escape = list("\\" = "\\\\", "\"" = "\\\"", "\n" = "\\n") for(var/targ in json_escape) var/start = 1 - while(start <= lentext(txt)) + while(start <= length(txt)) var/i = findtext(txt, targ, start) if(!i) break diff --git a/code/_global_vars/lists/misc.dm b/code/_global_vars/lists/misc.dm new file mode 100644 index 0000000000..aa9680a5f6 --- /dev/null +++ b/code/_global_vars/lists/misc.dm @@ -0,0 +1 @@ +GLOBAL_LIST_INIT(speech_toppings, list("|" = "i", "+" = "b", "_" = "u")) diff --git a/code/_global_vars/lists/species.dm b/code/_global_vars/lists/species.dm new file mode 100644 index 0000000000..780ce3fb70 --- /dev/null +++ b/code/_global_vars/lists/species.dm @@ -0,0 +1,8 @@ +//Languages/species/whitelist. +GLOBAL_LIST_INIT(all_species, list()) +GLOBAL_LIST_INIT(all_languages, list()) +GLOBAL_LIST_INIT(language_keys, list()) // Table of say codes for all languages +GLOBAL_LIST_INIT(whitelisted_species, list(SPECIES_HUMAN)) // Species that require a whitelist check. +// VOREStation edit - include custom species +GLOBAL_LIST_INIT(playable_species, list(SPECIES_HUMAN, SPECIES_CUSTOM)) // A list of ALL playable species, whitelisted, latejoin or otherwise. +// VOREStation edit end \ No newline at end of file diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 9d3de5c2f8..4c98e06c4d 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -24,13 +24,6 @@ var/global/list/turfs = list() //list of all turfs #define all_genders_define_list list(MALE,FEMALE,PLURAL,NEUTER,HERM) //VOREStaton Edit #define all_genders_text_list list("Male","Female","Plural","Neuter","Herm") //VOREStation Edit -//Languages/species/whitelist. -var/global/list/all_species[0] -var/global/list/all_languages[0] -var/global/list/language_keys[0] // Table of say codes for all languages -var/global/list/whitelisted_species = list(SPECIES_HUMAN) // Species that require a whitelist check. -var/global/list/playable_species = list(SPECIES_CUSTOM, SPECIES_HUMAN) // A list of ALL playable species, whitelisted, latejoin or otherwise. //VOREStation Edit - Making sure custom species is obvious. - var/list/mannequins_ // Posters @@ -164,12 +157,12 @@ var/global/list/string_slot_flags = list( paths = typesof(/datum/language)-/datum/language for(var/T in paths) var/datum/language/L = new T - all_languages[L.name] = L + GLOB.all_languages[L.name] = L - for (var/language_name in all_languages) - var/datum/language/L = all_languages[language_name] + for (var/language_name in GLOB.all_languages) + var/datum/language/L = GLOB.all_languages[language_name] if(!(L.flags & NONGLOBAL)) - language_keys[lowertext(L.key)] = L + GLOB.language_keys[lowertext(L.key)] = L var/rkey = 0 paths = typesof(/datum/species) @@ -183,12 +176,12 @@ var/global/list/string_slot_flags = list( S = new T S.race_key = rkey //Used in mob icon caching. - all_species[S.name] = S + GLOB.all_species[S.name] = S if(!(S.spawn_flags & SPECIES_IS_RESTRICTED)) - playable_species += S.name + GLOB.playable_species += S.name if(S.spawn_flags & SPECIES_IS_WHITELISTED) - whitelisted_species += S.name + GLOB.whitelisted_species += S.name //Posters paths = typesof(/datum/poster) - /datum/poster diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index 702cca5139..8eb428c764 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -470,10 +470,10 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN, // Custom species icon bases var/list/blacklisted_icons = list(SPECIES_CUSTOM,SPECIES_PROMETHEAN) //Just ones that won't work well. - for(var/species_name in playable_species) + for(var/species_name in GLOB.playable_species) if(species_name in blacklisted_icons) continue - var/datum/species/S = all_species[species_name] + var/datum/species/S = GLOB.all_species[species_name] if(S.spawn_flags & SPECIES_IS_WHITELISTED) continue custom_species_bases += species_name diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm index 220f896436..9320c29272 100644 --- a/code/_helpers/mobs.dm +++ b/code/_helpers/mobs.dm @@ -75,7 +75,7 @@ proc/random_facial_hair_style(gender, species = SPECIES_HUMAN) proc/sanitize_name(name, species = SPECIES_HUMAN, robot = 0) var/datum/species/current_species if(species) - current_species = all_species[species] + current_species = GLOB.all_species[species] return current_species ? current_species.sanitize_name(name, robot) : sanitizeName(name, MAX_NAME_LEN, robot) @@ -83,7 +83,7 @@ proc/random_name(gender, species = SPECIES_HUMAN) var/datum/species/current_species if(species) - current_species = all_species[species] + current_species = GLOB.all_species[species] if(!current_species || current_species.name_language == null) if(gender==FEMALE) diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index eb363c08cb..688e1c2a68 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -16,7 +16,7 @@ // Run all strings to be used in an SQL query through this proc first to properly escape out injection attempts. /proc/sanitizeSQL(var/t as text) var/sqltext = dbcon.Quote(t); - return copytext(sqltext, 2, lentext(sqltext));//Quote() adds quotes around input, we already do that + return copytext(sqltext, 2, length(sqltext));//Quote() adds quotes around input, we already do that /* * Text sanitization @@ -249,9 +249,9 @@ //This is used for fingerprints /proc/stringmerge(var/text,var/compare,replace = "*") var/newtext = text - if(lentext(text) != lentext(compare)) + if(length(text) != length(compare)) return 0 - for(var/i = 1, i < lentext(text), i++) + for(var/i = 1, i < length(text), i++) var/a = copytext(text,i,i+1) var/b = copytext(compare,i,i+1) //if it isn't both the same letter, or if they are both the replacement character @@ -271,7 +271,7 @@ if(!text || !character) return 0 var/count = 0 - for(var/i = 1, i <= lentext(text), i++) + for(var/i = 1, i <= length(text), i++) var/a = copytext(text,i,i+1) if(a == character) count++ @@ -286,8 +286,8 @@ //Used in preferences' SetFlavorText and human's set_flavor verb //Previews a string of len or less length proc/TextPreview(var/string,var/len=40) - if(lentext(string) <= len) - if(!lentext(string)) + if(length(string) <= len) + if(!length(string)) return "\[...\]" else return string diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 38773ce621..da92fd0d6d 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -590,10 +590,6 @@ Turf and target are seperate in case you want to teleport some distance from a t /proc/between(var/low, var/middle, var/high) return max(min(middle, high), low) -proc/arctan(x) - var/y=arcsin(x/sqrt(1+x*x)) - return y - //returns random gauss number proc/GaussRand(var/sigma) var/x,y,rsq diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 8d107e8f64..f8bce398a6 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -40,7 +40,7 @@ face_atom(A) // change direction to face what you clicked on - if(aiCamera.in_camera_mode) + if(aiCamera && aiCamera.in_camera_mode) aiCamera.camera_mode_off() if(is_component_functioning("camera")) aiCamera.captureimage(A, usr) diff --git a/code/controllers/subsystems/timer.dm b/code/controllers/subsystems/timer.dm index 3dcc64db28..64a347336a 100644 --- a/code/controllers/subsystems/timer.dm +++ b/code/controllers/subsystems/timer.dm @@ -71,7 +71,6 @@ SUBSYSTEM_DEF(timer) for(var/I in second_queue) log_world(get_timer_debug_string(I)) - var/cut_start_index = 1 var/next_clienttime_timer_index = 0 var/len = length(clienttime_timers) @@ -101,7 +100,7 @@ SUBSYSTEM_DEF(timer) if (next_clienttime_timer_index) - clienttime_timers.Cut(cut_start_index,next_clienttime_timer_index+1) + clienttime_timers.Cut(1, next_clienttime_timer_index+1) if (MC_TICK_CHECK) return @@ -259,7 +258,7 @@ SUBSYSTEM_DEF(timer) if (!length(alltimers)) return - sortTim(alltimers, .proc/cmp_timer) + sortTim(alltimers, /proc/cmp_timer) var/datum/timedevent/head = alltimers[1] @@ -342,8 +341,8 @@ SUBSYSTEM_DEF(timer) if (flags & TIMER_STOPPABLE) id = num2text(nextid, 100) - if (nextid >= SHORT_REAL_LIMIT) - nextid += min(1, 2**round(nextid/SHORT_REAL_LIMIT)) + if (nextid >= TIMER_ID_MAX) + nextid += min(1, 2**round(nextid/TIMER_ID_MAX)) else nextid++ SStimer.timer_id_dict[id] = src @@ -519,4 +518,4 @@ SUBSYSTEM_DEF(timer) #undef BUCKET_LEN #undef BUCKET_POS #undef TIMER_MAX -#undef TIMER_ID_MAX +#undef TIMER_ID_MAX \ No newline at end of file diff --git a/code/datums/outfits/jobs/cargo.dm b/code/datums/outfits/jobs/cargo.dm index 3423efcf33..10ddb9b7b0 100644 --- a/code/datums/outfits/jobs/cargo.dm +++ b/code/datums/outfits/jobs/cargo.dm @@ -14,7 +14,7 @@ /decl/hierarchy/outfit/job/cargo/cargo_tech name = OUTFIT_JOB_NAME("Cargo technician") uniform = /obj/item/clothing/under/rank/cargotech - id_type = /obj/item/weapon/card/id/cargo/cargo_tech + id_type = /obj/item/weapon/card/id/cargo pda_type = /obj/item/device/pda/cargo /decl/hierarchy/outfit/job/cargo/mining @@ -23,7 +23,7 @@ l_ear = /obj/item/device/radio/headset/headset_mine backpack = /obj/item/weapon/storage/backpack/industrial satchel_one = /obj/item/weapon/storage/backpack/satchel/eng - id_type = /obj/item/weapon/card/id/cargo/mining + id_type = /obj/item/weapon/card/id/cargo pda_type = /obj/item/device/pda/shaftminer backpack_contents = list(/obj/item/weapon/tool/crowbar = 1, /obj/item/weapon/storage/bag/ore = 1) flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL diff --git a/code/datums/outfits/jobs/civilian.dm b/code/datums/outfits/jobs/civilian.dm index c6d6194f17..f5b94145ff 100644 --- a/code/datums/outfits/jobs/civilian.dm +++ b/code/datums/outfits/jobs/civilian.dm @@ -18,7 +18,7 @@ /decl/hierarchy/outfit/job/service/bartender name = OUTFIT_JOB_NAME("Bartender") uniform = /obj/item/clothing/under/rank/bartender - id_type = /obj/item/weapon/card/id/civilian/bartender + id_type = /obj/item/weapon/card/id/civilian pda_type = /obj/item/device/pda/bar backpack_contents = list(/obj/item/clothing/accessory/permit/gun/bar = 1) @@ -37,7 +37,7 @@ uniform = /obj/item/clothing/under/rank/chef suit = /obj/item/clothing/suit/chef head = /obj/item/clothing/head/chefhat - id_type = /obj/item/weapon/card/id/civilian/chef + id_type = /obj/item/weapon/card/id/civilian pda_type = /obj/item/device/pda/chef /decl/hierarchy/outfit/job/service/chef/cook @@ -61,20 +61,20 @@ backpack = /obj/item/weapon/storage/backpack/hydroponics satchel_one = /obj/item/weapon/storage/backpack/satchel/hyd messenger_bag = /obj/item/weapon/storage/backpack/messenger/hyd - id_type = /obj/item/weapon/card/id/civilian/botanist + id_type = /obj/item/weapon/card/id/civilian pda_type = /obj/item/device/pda/botanist /decl/hierarchy/outfit/job/service/janitor name = OUTFIT_JOB_NAME("Janitor") uniform = /obj/item/clothing/under/rank/janitor - id_type = /obj/item/weapon/card/id/civilian/janitor + id_type = /obj/item/weapon/card/id/civilian pda_type = /obj/item/device/pda/janitor /decl/hierarchy/outfit/job/librarian name = OUTFIT_JOB_NAME("Librarian") uniform = /obj/item/clothing/under/suit_jacket/red l_hand = /obj/item/weapon/barcodescanner - id_type = /obj/item/weapon/card/id/civilian/librarian + id_type = /obj/item/weapon/card/id/civilian pda_type = /obj/item/device/pda/librarian /decl/hierarchy/outfit/job/internal_affairs_agent @@ -85,14 +85,14 @@ shoes = /obj/item/clothing/shoes/brown glasses = /obj/item/clothing/glasses/sunglasses/big l_hand = /obj/item/weapon/clipboard - id_type = /obj/item/weapon/card/id/civilian/internal_affairs_agent + id_type = /obj/item/weapon/card/id/civilian pda_type = /obj/item/device/pda/lawyer /decl/hierarchy/outfit/job/chaplain name = OUTFIT_JOB_NAME("Chaplain") uniform = /obj/item/clothing/under/rank/chaplain l_hand = /obj/item/weapon/storage/bible - id_type = /obj/item/weapon/card/id/civilian/chaplain + id_type = /obj/item/weapon/card/id/civilian pda_type = /obj/item/device/pda/chaplain /decl/hierarchy/outfit/job/explorer diff --git a/code/datums/outfits/jobs/command.dm b/code/datums/outfits/jobs/command.dm index eec17452ad..18b198a3c2 100644 --- a/code/datums/outfits/jobs/command.dm +++ b/code/datums/outfits/jobs/command.dm @@ -7,7 +7,7 @@ backpack = /obj/item/weapon/storage/backpack/captain satchel_one = /obj/item/weapon/storage/backpack/satchel/cap messenger_bag = /obj/item/weapon/storage/backpack/messenger/com - id_type = /obj/item/weapon/card/id/gold/captain + id_type = /obj/item/weapon/card/id/gold pda_type = /obj/item/device/pda/captain /decl/hierarchy/outfit/job/captain/post_equip(var/mob/living/carbon/human/H) @@ -28,14 +28,14 @@ uniform = /obj/item/clothing/under/rank/head_of_personnel l_ear = /obj/item/device/radio/headset/heads/hop shoes = /obj/item/clothing/shoes/brown - id_type = /obj/item/weapon/card/id/silver/hop + id_type = /obj/item/weapon/card/id/silver pda_type = /obj/item/device/pda/heads/hop /decl/hierarchy/outfit/job/secretary name = OUTFIT_JOB_NAME("Command Secretary") l_ear = /obj/item/device/radio/headset/headset_com shoes = /obj/item/clothing/shoes/brown - id_type = /obj/item/weapon/card/id/silver/secretary + id_type = /obj/item/weapon/card/id/silver pda_type = /obj/item/device/pda/heads r_hand = /obj/item/weapon/clipboard diff --git a/code/datums/outfits/jobs/engineering.dm b/code/datums/outfits/jobs/engineering.dm index 3804bcb4c0..3da60103c2 100644 --- a/code/datums/outfits/jobs/engineering.dm +++ b/code/datums/outfits/jobs/engineering.dm @@ -23,12 +23,12 @@ name = OUTFIT_JOB_NAME("Engineer") head = /obj/item/clothing/head/hardhat uniform = /obj/item/clothing/under/rank/engineer - id_type = /obj/item/weapon/card/id/engineering/engineer + id_type = /obj/item/weapon/card/id/engineering pda_type = /obj/item/device/pda/engineering /decl/hierarchy/outfit/job/engineering/atmos name = OUTFIT_JOB_NAME("Atmospheric technician") uniform = /obj/item/clothing/under/rank/atmospheric_technician belt = /obj/item/weapon/storage/belt/utility/atmostech - id_type = /obj/item/weapon/card/id/engineering/atmos + id_type = /obj/item/weapon/card/id/engineering pda_type = /obj/item/device/pda/atmos diff --git a/code/datums/outfits/jobs/job.dm b/code/datums/outfits/jobs/job.dm index a989311153..5c419f8fb2 100644 --- a/code/datums/outfits/jobs/job.dm +++ b/code/datums/outfits/jobs/job.dm @@ -13,8 +13,11 @@ flags = OUTFIT_HAS_BACKPACK -/decl/hierarchy/outfit/job/equip_id(mob/living/carbon/human/H) +/decl/hierarchy/outfit/job/equip_id(mob/living/carbon/human/H, rank, assignment) var/obj/item/weapon/card/id/C = ..() + var/datum/job/J = job_master.GetJob(rank) + if(J) + C.access = J.get_access() if(H.mind) var/datum/mind/M = H.mind if(M.initial_account) diff --git a/code/datums/outfits/jobs/medical.dm b/code/datums/outfits/jobs/medical.dm index 1fdd020fcf..ae996b2f08 100644 --- a/code/datums/outfits/jobs/medical.dm +++ b/code/datums/outfits/jobs/medical.dm @@ -25,7 +25,7 @@ suit = /obj/item/clothing/suit/storage/toggle/labcoat l_hand = /obj/item/weapon/storage/firstaid/regular r_pocket = /obj/item/device/flashlight/pen - id_type = /obj/item/weapon/card/id/medical/doctor + id_type = /obj/item/weapon/card/id/medical /decl/hierarchy/outfit/job/medical/doctor/emergency_physician name = OUTFIT_JOB_NAME("Emergency Physician") @@ -65,7 +65,7 @@ suit = /obj/item/clothing/suit/storage/toggle/labcoat/chemist backpack = /obj/item/weapon/storage/backpack/chemistry satchel_one = /obj/item/weapon/storage/backpack/satchel/chem - id_type = /obj/item/weapon/card/id/medical/chemist + id_type = /obj/item/weapon/card/id/medical pda_type = /obj/item/device/pda/chemist /decl/hierarchy/outfit/job/medical/geneticist @@ -75,7 +75,7 @@ backpack = /obj/item/weapon/storage/backpack/genetics r_pocket = /obj/item/device/flashlight/pen satchel_one = /obj/item/weapon/storage/backpack/satchel/gen - id_type = /obj/item/weapon/card/id/medical/geneticist + id_type = /obj/item/weapon/card/id/medical pda_type = /obj/item/device/pda/geneticist /decl/hierarchy/outfit/job/medical/psychiatrist @@ -83,7 +83,7 @@ uniform = /obj/item/clothing/under/rank/psych suit = /obj/item/clothing/suit/storage/toggle/labcoat shoes = /obj/item/clothing/shoes/laceup - id_type = /obj/item/weapon/card/id/medical/psychiatrist + id_type = /obj/item/weapon/card/id/medical /decl/hierarchy/outfit/job/medical/psychiatrist/psychologist name = OUTFIT_JOB_NAME("Psychologist") @@ -97,7 +97,7 @@ l_hand = /obj/item/weapon/storage/firstaid/regular belt = /obj/item/weapon/storage/belt/medical/emt pda_slot = slot_l_store - id_type = /obj/item/weapon/card/id/medical/paramedic + id_type = /obj/item/weapon/card/id/medical flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL /decl/hierarchy/outfit/job/medical/paramedic/emt diff --git a/code/datums/outfits/jobs/science.dm b/code/datums/outfits/jobs/science.dm index abca107024..8920db9b7b 100644 --- a/code/datums/outfits/jobs/science.dm +++ b/code/datums/outfits/jobs/science.dm @@ -20,13 +20,13 @@ /decl/hierarchy/outfit/job/science/scientist name = OUTFIT_JOB_NAME("Scientist") uniform = /obj/item/clothing/under/rank/scientist - id_type = /obj/item/weapon/card/id/science/scientist + id_type = /obj/item/weapon/card/id/science suit = /obj/item/clothing/suit/storage/toggle/labcoat/science /decl/hierarchy/outfit/job/science/xenobiologist name = OUTFIT_JOB_NAME("Xenobiologist") uniform = /obj/item/clothing/under/rank/scientist - id_type = /obj/item/weapon/card/id/science/xenobiologist + id_type = /obj/item/weapon/card/id/science suit = /obj/item/clothing/suit/storage/toggle/labcoat/science /decl/hierarchy/outfit/job/science/roboticist @@ -34,7 +34,7 @@ uniform = /obj/item/clothing/under/rank/roboticist shoes = /obj/item/clothing/shoes/black belt = /obj/item/weapon/storage/belt/utility/full - id_type = /obj/item/weapon/card/id/science/roboticist + id_type = /obj/item/weapon/card/id/science pda_slot = slot_r_store pda_type = /obj/item/device/pda/roboticist backpack = /obj/item/weapon/storage/backpack diff --git a/code/datums/outfits/jobs/security.dm b/code/datums/outfits/jobs/security.dm index f0a44cd416..9f127a2701 100644 --- a/code/datums/outfits/jobs/security.dm +++ b/code/datums/outfits/jobs/security.dm @@ -20,7 +20,7 @@ name = OUTFIT_JOB_NAME("Warden") uniform = /obj/item/clothing/under/rank/warden l_pocket = /obj/item/device/flash - id_type = /obj/item/weapon/card/id/security/warden + id_type = /obj/item/weapon/card/id/security pda_type = /obj/item/device/pda/warden /decl/hierarchy/outfit/job/security/detective @@ -31,7 +31,7 @@ l_pocket = /obj/item/weapon/flame/lighter/zippo shoes = /obj/item/clothing/shoes/laceup r_hand = /obj/item/weapon/storage/briefcase/crimekit - id_type = /obj/item/weapon/card/id/security/detective + id_type = /obj/item/weapon/card/id/security pda_type = /obj/item/device/pda/detective backpack = /obj/item/weapon/storage/backpack satchel_one = /obj/item/weapon/storage/backpack/satchel/norm @@ -46,5 +46,5 @@ name = OUTFIT_JOB_NAME("Security Officer") uniform = /obj/item/clothing/under/rank/security l_pocket = /obj/item/device/flash - id_type = /obj/item/weapon/card/id/security/officer + id_type = /obj/item/weapon/card/id/security pda_type = /obj/item/device/pda/security diff --git a/code/datums/outfits/jobs/special_vr.dm b/code/datums/outfits/jobs/special_vr.dm new file mode 100644 index 0000000000..dd8316358b --- /dev/null +++ b/code/datums/outfits/jobs/special_vr.dm @@ -0,0 +1,34 @@ +/decl/hierarchy/outfit/job/centcom_officer + name = OUTFIT_JOB_NAME("CentCom Officer") + uniform = /obj/item/clothing/under/rank/centcom + gloves = /obj/item/clothing/gloves/white + shoes = /obj/item/clothing/shoes/laceup + head = /obj/item/clothing/head/beret/centcom/officer + l_ear = /obj/item/device/radio/headset/centcom + glasses = /obj/item/clothing/glasses/omnihud/all + id_type = /obj/item/weapon/card/id/centcom + pda_type = /obj/item/device/pda/centcom + +/decl/hierarchy/outfit/job/clown + name = OUTFIT_JOB_NAME("Clown") + uniform = /obj/item/clothing/under/rank/clown + back = /obj/item/weapon/storage/backpack/clown + shoes = /obj/item/clothing/shoes/clown_shoes + mask = /obj/item/clothing/mask/gas/clown_hat + backpack_contents = list(/obj/item/weapon/stamp/clown = 1, /obj/item/weapon/bikehorn = 1) + pda_type = /obj/item/device/pda/clown + flags = 0 + +/decl/hierarchy/outfit/job/mime + name = OUTFIT_JOB_NAME("Mime") + uniform = /obj/item/clothing/under/mime + shoes = /obj/item/clothing/shoes/mime + head = /obj/item/clothing/head/soft/mime + mask = /obj/item/clothing/mask/gas/mime + backpack_contents = list(/obj/item/weapon/pen/crayon/mime = 1) + pda_type = /obj/item/device/pda/mime + + post_equip(var/mob/living/carbon/human/H) + ..() + if(H.backbag == 1) + H.equip_to_slot_or_del(new /obj/item/weapon/pen/crayon/mime(H), slot_l_hand) diff --git a/code/datums/underwear/undershirts.dm b/code/datums/underwear/undershirts.dm index 1f91d1222c..7da82fa580 100644 --- a/code/datums/underwear/undershirts.dm +++ b/code/datums/underwear/undershirts.dm @@ -1,180 +1,189 @@ -/datum/category_item/underwear/undershirt/none - is_default = TRUE - name = "None" - always_last = TRUE - -/datum/category_item/underwear/undershirt/shirt - name = "Shirt" - icon_state = "undershirt" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shirt_fem - name = "Babydoll shirt" - icon_state = "undershirt_fem" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shirt_long - name = "Longsleeve Shirt" - icon_state = "undershirt_long" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shirt_long_s - name = "Shirt, button-down" - icon_state = "shirt_long_s" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shirt_long_fem - name = "Longsleeve Shirt, feminine" - icon_state = "undershirt_long_fem" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shirt_long_female_s - name = "Button-down Shirt, feminine" - icon_state = "shirt_long_female_s" - has_color = TRUE - - -/datum/category_item/underwear/undershirt/tank_top - name = "Tank top" - icon_state = "tanktop" - has_color = TRUE - -/datum/category_item/underwear/undershirt/tank_top_alt - name = "Tank top, alt" - icon_state = "tanktop_alt" - has_color = TRUE - -/datum/category_item/underwear/undershirt/tank_top_alt_fem - name = "Tank top, alt, feminine" - icon_state = "tanktop_alt_fem" - has_color = TRUE - -/datum/category_item/underwear/undershirt/tank_top_alt_fem_vneck - name = "Tank top, feminine, v-neck" - icon_state = "tanktop_alt_fem_vneck" - has_color = TRUE - -/datum/category_item/underwear/undershirt/tank_top_fire - name = "Tank top, fire" - icon_state = "tank_fire_s" - -/datum/category_item/underwear/undershirt/tank_top_fire_fem - name = "Tank top, fire, feminine" - icon_state = "tank_fire_fem_s" - -/datum/category_item/underwear/undershirt/tank_top_rainbow - name = "Tank top, rainbow" - icon_state = "tank_rainbow_s" - -/datum/category_item/underwear/undershirt/tank_top_stripes - name = "Tank top, striped" - icon_state = "tank_stripes_s" - -/datum/category_item/underwear/undershirt/tank_top_sun - name = "Tank top, sun" - icon_state = "tank_sun_s" - -/datum/category_item/underwear/undershirt/shirt_heart - name = "Shirt, heart" - icon_state = "lover_s" - -/datum/category_item/underwear/undershirt/shirt_heart_fem - name = "Shirt, heart, babydoll" - icon_state = "lover_fem_s" - -/datum/category_item/underwear/undershirt/shirt_nt - name = "Shirt, NT" - icon_state = "shirt_nano_s" - -/datum/category_item/underwear/undershirt/shirt_love_nt - name = "Shirt, I<3NT" - icon_state = "ilovent_s" - -/datum/category_item/underwear/undershirt/shirt_love_nt_fem - name = "Shirt, I<3NT, babydoll" - icon_state = "ilovent_fem_s" - -/datum/category_item/underwear/undershirt/shortsleeve_shirt - name = "Shortsleeve shirt" - icon_state = "shortsleeve" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shortsleeve_shirt_fem - name = "Shortsleeve babydoll shirt" - icon_state = "shortsleeve_fem" - has_color = TRUE - -/datum/category_item/underwear/undershirt/shortsleeve_shirt_fem_vneck - name = "Shortsleeve babydoll shirt, v-neck" - icon_state = "shortsleeve_fem_vneck" - has_color = TRUE - -/datum/category_item/underwear/undershirt/polo_shirt - name = "Polo shirt" - icon_state = "polo" - has_color = TRUE - -/datum/category_item/underwear/undershirt/sport_shirt_green - name = "Sport shirt, green" - icon_state = "greenshirtsport_s" - -/datum/category_item/underwear/undershirt/sport_shirt_red - name = "Sport shirt, red" - icon_state = "redshirtsport_s" - -/datum/category_item/underwear/undershirt/sport_shirt_blue - name = "Sport shirt, blue" - icon_state = "blueshirtsport_s" - -/datum/category_item/underwear/undershirt/shirt_tiedye - name = "Shirt, tiedye" - icon_state = "shirt_tiedye_s" - -/datum/category_item/underwear/undershirt/shirt_blue_striped - name = "Shirt, blue stripes" - icon_state = "shirt_stripes_s" - -/datum/category_item/underwear/undershirt/bowling - name = "Bowling Shirt, Red" - icon_state = "bowling" - -/datum/category_item/underwear/undershirt/bowlingp - name = "Bowling Shirt, Pink" - icon_state = "bowlingp" - -/datum/category_item/underwear/undershirt/bowlinga - name = "Bowling Shirt, Aqua" - icon_state = "bowlinga" - -/datum/category_item/underwear/undershirt/bowlingw - name = "Bowling Shirt, White" - icon_state = "bowlingw" - -/datum/category_item/underwear/undershirt/longjon - name = "Long John Shirt" - icon_state = "ljont" - has_color = TRUE - -/datum/category_item/underwear/undershirt/longstripe_black - name = "Longsleeve Striped Shirt, Black" - icon_state = "longstripe" - -/datum/category_item/underwear/undershirt/longstripe_blue - name = "Longsleeve Striped Shirt, Blue" - icon_state = "longstripe_blue" - -/datum/category_item/underwear/undershirt/tiedye - name = "Tiedye Shirt" - icon_state = "tiedye" - -/datum/category_item/underwear/undershirt/longstripe_pink - name = "Longsleeve Striped Shirt, Pink" - icon_state = "longstripe_pink_s" - -/datum/category_item/underwear/undershirt/wingshirt - name = "Pink Wing Shirt" - icon_state = "wing_shirt_s" - -/datum/category_item/underwear/undershirt/pinkblack_tshirt - name = "Pink and Black T-Shirt" +/datum/category_item/underwear/undershirt/none + is_default = TRUE + name = "None" + always_last = TRUE + +/datum/category_item/underwear/undershirt/shirt + name = "Shirt" + icon_state = "undershirt" + has_color = TRUE + +/datum/category_item/underwear/undershirt/shirt_fem + name = "Babydoll shirt" + icon_state = "undershirt_fem" + has_color = TRUE + +/datum/category_item/underwear/undershirt/shirt_long + name = "Longsleeve Shirt" + icon_state = "undershirt_long" + has_color = TRUE + +/datum/category_item/underwear/undershirt/shirt_long_s + name = "Shirt, button-down" + icon_state = "shirt_long_s" + has_color = TRUE + +/datum/category_item/underwear/undershirt/shirt_long_fem + name = "Longsleeve Shirt, feminine" + icon_state = "undershirt_long_fem" + has_color = TRUE + +/datum/category_item/underwear/undershirt/shirt_long_female_s + name = "Button-down Shirt, feminine" + icon_state = "shirt_long_female_s" + has_color = TRUE + + +/datum/category_item/underwear/undershirt/fishnet_simple + name = "Fishnet shirt" + icon_state = "fishnet_simple" + +/datum/category_item/underwear/undershirt/tank_top + name = "Tank top" + icon_state = "tanktop" + has_color = TRUE + +/datum/category_item/underwear/undershirt/tank_top_alt + name = "Tank top, alt" + icon_state = "tanktop_alt" + has_color = TRUE + +/datum/category_item/underwear/undershirt/tank_top_alt_fem + name = "Tank top, alt, feminine" + icon_state = "tanktop_alt_fem" + has_color = TRUE + +/datum/category_item/underwear/undershirt/tank_top_alt_fem_vneck + name = "Tank top, feminine, v-neck" + icon_state = "tanktop_alt_fem_vneck" + has_color = TRUE + +/datum/category_item/underwear/undershirt/tank_cropped_vneck + name = "Tank top, feminine, cropped & v-neck" + icon_state = "tanktop_cropped_vneck" + has_color = TRUE + +/datum/category_item/underwear/undershirt/tank_top_fire + name = "Tank top, fire" + icon_state = "tank_fire_s" + +/datum/category_item/underwear/undershirt/tank_top_fire_fem + name = "Tank top, fire, feminine" + icon_state = "tank_fire_fem_s" + +/datum/category_item/underwear/undershirt/tank_top_rainbow + name = "Tank top, rainbow" + icon_state = "tank_rainbow_s" + +/datum/category_item/underwear/undershirt/tank_top_stripes + name = "Tank top, striped" + icon_state = "tank_stripes_s" + +/datum/category_item/underwear/undershirt/tank_top_sun + name = "Tank top, sun" + icon_state = "tank_sun_s" + +/datum/category_item/underwear/undershirt/shirt_heart + name = "Shirt, heart" + icon_state = "lover_s" + +/datum/category_item/underwear/undershirt/shirt_heart_fem + name = "Shirt, heart, babydoll" + icon_state = "lover_fem_s" + +/datum/category_item/underwear/undershirt/shirt_nt + name = "Shirt, NT" + icon_state = "shirt_nano_s" + +/datum/category_item/underwear/undershirt/shirt_love_nt + name = "Shirt, I<3NT" + icon_state = "ilovent_s" + +/datum/category_item/underwear/undershirt/shirt_love_nt_fem + name = "Shirt, I<3NT, babydoll" + icon_state = "ilovent_fem_s" + +/datum/category_item/underwear/undershirt/shortsleeve_shirt + name = "Shortsleeve shirt" + icon_state = "shortsleeve" + has_color = TRUE + +/datum/category_item/underwear/undershirt/shortsleeve_shirt_fem + name = "Shortsleeve babydoll shirt" + icon_state = "shortsleeve_fem" + has_color = TRUE + +/datum/category_item/underwear/undershirt/shortsleeve_shirt_fem_vneck + name = "Shortsleeve babydoll shirt, v-neck" + icon_state = "shortsleeve_fem_vneck" + has_color = TRUE + +/datum/category_item/underwear/undershirt/polo_shirt + name = "Polo shirt" + icon_state = "polo" + has_color = TRUE + +/datum/category_item/underwear/undershirt/sport_shirt_green + name = "Sport shirt, green" + icon_state = "greenshirtsport_s" + +/datum/category_item/underwear/undershirt/sport_shirt_red + name = "Sport shirt, red" + icon_state = "redshirtsport_s" + +/datum/category_item/underwear/undershirt/sport_shirt_blue + name = "Sport shirt, blue" + icon_state = "blueshirtsport_s" + +/datum/category_item/underwear/undershirt/shirt_tiedye + name = "Shirt, tiedye" + icon_state = "shirt_tiedye_s" + +/datum/category_item/underwear/undershirt/shirt_blue_striped + name = "Shirt, blue stripes" + icon_state = "shirt_stripes_s" + +/datum/category_item/underwear/undershirt/bowling + name = "Bowling Shirt, Red" + icon_state = "bowling" + +/datum/category_item/underwear/undershirt/bowlingp + name = "Bowling Shirt, Pink" + icon_state = "bowlingp" + +/datum/category_item/underwear/undershirt/bowlinga + name = "Bowling Shirt, Aqua" + icon_state = "bowlinga" + +/datum/category_item/underwear/undershirt/bowlingw + name = "Bowling Shirt, White" + icon_state = "bowlingw" + +/datum/category_item/underwear/undershirt/longjon + name = "Long John Shirt" + icon_state = "ljont" + has_color = TRUE + +/datum/category_item/underwear/undershirt/longstripe_black + name = "Longsleeve Striped Shirt, Black" + icon_state = "longstripe" + +/datum/category_item/underwear/undershirt/longstripe_blue + name = "Longsleeve Striped Shirt, Blue" + icon_state = "longstripe_blue" + +/datum/category_item/underwear/undershirt/tiedye + name = "Tiedye Shirt" + icon_state = "tiedye" + +/datum/category_item/underwear/undershirt/longstripe_pink + name = "Longsleeve Striped Shirt, Pink" + icon_state = "longstripe_pink_s" + +/datum/category_item/underwear/undershirt/wingshirt + name = "Pink Wing Shirt" + icon_state = "wing_shirt_s" + +/datum/category_item/underwear/undershirt/pinkblack_tshirt + name = "Pink and Black T-Shirt" icon_state = "pinkblack_tshirt" \ No newline at end of file diff --git a/code/game/antagonist/station/changeling.dm b/code/game/antagonist/station/changeling.dm index 4f60792810..a7bed0a2af 100644 --- a/code/game/antagonist/station/changeling.dm +++ b/code/game/antagonist/station/changeling.dm @@ -68,7 +68,7 @@ return 1 else if(isnewplayer(player.current)) if(player.current.client && player.current.client.prefs) - var/datum/species/S = all_species[player.current.client.prefs.species] + var/datum/species/S = GLOB.all_species[player.current.client.prefs.species] if(S && (S.flags & NO_SCAN)) return 0 if(player.current.client.prefs.organ_data["torso"] == "cyborg") // Full synthetic. diff --git a/code/game/gamemodes/technomancer/spells/aura/fire_aura.dm b/code/game/gamemodes/technomancer/spells/aura/fire_aura.dm index c205cb76be..947cad7140 100644 --- a/code/game/gamemodes/technomancer/spells/aura/fire_aura.dm +++ b/code/game/gamemodes/technomancer/spells/aura/fire_aura.dm @@ -23,7 +23,7 @@ var/list/nearby_things = range(round(calculate_spell_power(4)),owner) var/temp_change = calculate_spell_power(25) - var/datum/species/baseline = all_species["Human"] + var/datum/species/baseline = GLOB.all_species["Human"] var/temp_cap = baseline.heat_level_3 * 1.5 var/fire_power = calculate_spell_power(2) diff --git a/code/game/gamemodes/technomancer/spells/aura/frost_aura.dm b/code/game/gamemodes/technomancer/spells/aura/frost_aura.dm index 240265cfa4..c73e010232 100644 --- a/code/game/gamemodes/technomancer/spells/aura/frost_aura.dm +++ b/code/game/gamemodes/technomancer/spells/aura/frost_aura.dm @@ -23,7 +23,7 @@ var/list/nearby_mobs = range(round(calculate_spell_power(4)),owner) var/temp_change = calculate_spell_power(40) - var/datum/species/baseline = all_species["Human"] + var/datum/species/baseline = GLOB.all_species["Human"] var/temp_cap = baseline.cold_level_2 - 5 if(check_for_scepter()) diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm index 397ba71882..9e2f5121d1 100644 --- a/code/game/jobs/job/captain.dm +++ b/code/game/jobs/job/captain.dm @@ -11,7 +11,6 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) spawn_positions = 1 supervisors = "company officials and Corporate Regulations" selection_color = "#1D1D4F" - idtype = /obj/item/weapon/card/id/gold req_admin_notify = 1 access = list() //See get_access() minimal_access = list() //See get_access() @@ -44,7 +43,6 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) spawn_positions = 1 supervisors = "the Colony Director" selection_color = "#2F2F7F" - idtype = /obj/item/weapon/card/id/silver/hop req_admin_notify = 1 minimal_player_age = 10 economic_modifier = 10 @@ -79,7 +77,6 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) spawn_positions = 2 supervisors = "command staff" selection_color = "#2F2F7F" - idtype = /obj/item/weapon/card/id/silver/secretary minimal_player_age = 5 economic_modifier = 7 diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index d31a551726..d5a099af8c 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -9,7 +9,6 @@ spawn_positions = 2 supervisors = "the head of personnel" selection_color = "#515151" - idtype = /obj/item/weapon/card/id/civilian/bartender access = list(access_hydroponics, access_bar, access_kitchen) minimal_access = list(access_bar) @@ -27,7 +26,6 @@ spawn_positions = 2 supervisors = "the head of personnel" selection_color = "#515151" - idtype = /obj/item/weapon/card/id/civilian/chef access = list(access_hydroponics, access_bar, access_kitchen) minimal_access = list(access_kitchen) @@ -44,7 +42,6 @@ spawn_positions = 1 supervisors = "the head of personnel" selection_color = "#515151" - idtype = /obj/item/weapon/card/id/civilian/botanist access = list(access_hydroponics, access_bar, access_kitchen) minimal_access = list(access_hydroponics) @@ -63,7 +60,6 @@ spawn_positions = 1 supervisors = "the head of personnel" selection_color = "#7a4f33" - idtype = /obj/item/weapon/card/id/cargo/head economic_modifier = 5 access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) @@ -83,7 +79,6 @@ spawn_positions = 2 supervisors = "the quartermaster and the head of personnel" selection_color = "#9b633e" - idtype = /obj/item/weapon/card/id/cargo/cargo_tech access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_mining, access_mining_station) minimal_access = list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting) @@ -99,7 +94,6 @@ spawn_positions = 3 supervisors = "the quartermaster and the head of personnel" selection_color = "#9b633e" - idtype = /obj/item/weapon/card/id/cargo/mining economic_modifier = 5 access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_mining, access_mining_station) minimal_access = list(access_mining, access_mining_station, access_mailsorting) @@ -118,7 +112,6 @@ spawn_positions = 2 supervisors = "the head of personnel" selection_color = "#515151" - idtype = /obj/item/weapon/card/id/civilian/janitor access = list(access_janitor, access_maint_tunnels) minimal_access = list(access_janitor, access_maint_tunnels) @@ -136,7 +129,6 @@ spawn_positions = 1 supervisors = "the head of personnel" selection_color = "#515151" - idtype = /obj/item/weapon/card/id/civilian/librarian access = list(access_library, access_maint_tunnels) minimal_access = list(access_library) @@ -154,7 +146,6 @@ spawn_positions = 2 supervisors = "company officials and Corporate Regulations" selection_color = "#515151" - idtype = /obj/item/weapon/card/id/civilian/internal_affairs_agent economic_modifier = 7 access = list(access_lawyer, access_sec_doors, access_maint_tunnels, access_heads) minimal_access = list(access_lawyer, access_sec_doors, access_heads) diff --git a/code/game/jobs/job/civilian_chaplain.dm b/code/game/jobs/job/civilian_chaplain.dm index 65943380bc..12c2c9419d 100644 --- a/code/game/jobs/job/civilian_chaplain.dm +++ b/code/game/jobs/job/civilian_chaplain.dm @@ -9,7 +9,6 @@ spawn_positions = 1 supervisors = "the head of personnel" selection_color = "#515151" - idtype = /obj/item/weapon/card/id/civilian/chaplain access = list(access_morgue, access_chapel_office, access_crematorium, access_maint_tunnels) minimal_access = list(access_chapel_office, access_crematorium) alt_titles = list("Counselor") diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index bbc1903fd4..cfa79ffc25 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -9,7 +9,6 @@ spawn_positions = 1 supervisors = "the Colony Director" selection_color = "#7F6E2C" - idtype = /obj/item/weapon/card/id/engineering/head req_admin_notify = 1 economic_modifier = 10 @@ -39,7 +38,6 @@ spawn_positions = 5 supervisors = "the chief engineer" selection_color = "#5B4D20" - idtype = /obj/item/weapon/card/id/engineering/engineer economic_modifier = 5 access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics) minimal_access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction) @@ -59,7 +57,6 @@ spawn_positions = 2 supervisors = "the chief engineer" selection_color = "#5B4D20" - idtype = /obj/item/weapon/card/id/engineering/atmos economic_modifier = 5 access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_external_airlocks) minimal_access = list(access_eva, access_engine, access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction, access_external_airlocks) diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index f154b02094..d138a0e1c9 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -13,7 +13,6 @@ var/current_positions = 0 // How many players have this job var/supervisors = null // Supervisors, who this person answers to directly var/selection_color = "#ffffff" // Selection screen color - var/idtype = /obj/item/weapon/card/id // The type of the ID the player will have var/list/alt_titles // List of alternate titles, if any var/req_admin_notify // If this is set to 1, a text is printed to the player when jobs are assigned, telling him that he should let admins know that he has to disconnect. var/minimal_player_age = 0 // If you have use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.) @@ -21,6 +20,7 @@ var/head_position = 0 // Is this position Command? var/minimum_character_age = 0 var/ideal_character_age = 30 + var/has_headset = TRUE //Do people with this job need to be given headsets and told how to use them? E.g. Cyborgs don't. var/account_allowed = 1 // Does this job type come with a station account? var/economic_modifier = 2 // With how much does this job modify the initial account amount? @@ -40,13 +40,6 @@ . = . || outfit_type . = outfit_by_type(.) -/datum/job/proc/equip_backpack(var/mob/living/carbon/human/H) - switch(H.backbag) - if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) - if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back) - if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) - if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back) - /datum/job/proc/setup_account(var/mob/living/carbon/human/H) if(!account_allowed || (H.mind && H.mind.initial_account)) return diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index a8e5d6a3fc..c855411303 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -9,7 +9,6 @@ spawn_positions = 1 supervisors = "the Colony Director" selection_color = "#026865" - idtype = /obj/item/weapon/card/id/medical/head req_admin_notify = 1 economic_modifier = 10 access = list(access_medical, access_medical_equip, access_morgue, access_genetics, access_heads, @@ -35,7 +34,6 @@ spawn_positions = 3 supervisors = "the chief medical officer" selection_color = "#013D3B" - idtype = /obj/item/weapon/card/id/medical/doctor economic_modifier = 7 access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_eva) minimal_access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_virology, access_eva) @@ -57,7 +55,6 @@ spawn_positions = 2 supervisors = "the chief medical officer" selection_color = "#013D3B" - idtype = /obj/item/weapon/card/id/medical/chemist economic_modifier = 5 access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics) minimal_access = list(access_medical, access_medical_equip, access_chemistry) @@ -78,7 +75,6 @@ spawn_positions = 0 supervisors = "the chief medical officer and research director" selection_color = "#013D3B" - idtype = /obj/item/weapon/card/id/medical/geneticist economic_modifier = 7 access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_research) minimal_access = list(access_medical, access_morgue, access_genetics, access_research) @@ -97,7 +93,6 @@ economic_modifier = 5 supervisors = "the chief medical officer" selection_color = "#013D3B" - idtype = /obj/item/weapon/card/id/medical/psychiatrist access = list(access_medical, access_medical_equip, access_morgue, access_psychiatrist) minimal_access = list(access_medical, access_medical_equip, access_psychiatrist) outfit_type = /decl/hierarchy/outfit/job/medical/psychiatrist @@ -113,7 +108,6 @@ spawn_positions = 2 supervisors = "the chief medical officer" selection_color = "#013D3B" - idtype = /obj/item/weapon/card/id/medical/paramedic economic_modifier = 4 access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_eva, access_maint_tunnels, access_external_airlocks, access_psychiatrist) minimal_access = list(access_medical, access_medical_equip, access_morgue, access_eva, access_maint_tunnels, access_external_airlocks) diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index 8ceacde5b6..c7ed91a5f9 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -9,7 +9,6 @@ spawn_positions = 1 supervisors = "the Colony Director" selection_color = "#AD6BAD" - idtype = /obj/item/weapon/card/id/science/head req_admin_notify = 1 economic_modifier = 15 access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue, @@ -39,7 +38,6 @@ spawn_positions = 3 supervisors = "the research director" selection_color = "#633D63" - idtype = /obj/item/weapon/card/id/science/scientist economic_modifier = 7 access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_xenoarch) minimal_access = list(access_tox, access_tox_storage, access_research, access_xenoarch) @@ -59,7 +57,6 @@ spawn_positions = 2 supervisors = "the research director" selection_color = "#633D63" - idtype = /obj/item/weapon/card/id/science/xenobiologist economic_modifier = 7 access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_hydroponics) minimal_access = list(access_research, access_xenobiology, access_hydroponics, access_tox_storage) @@ -79,7 +76,6 @@ spawn_positions = 2 supervisors = "research director" selection_color = "#633D63" - idtype = /obj/item/weapon/card/id/science/roboticist economic_modifier = 5 access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access. minimal_access = list(access_robotics, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access. diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 6b753f519c..fccac1a4af 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -9,7 +9,6 @@ spawn_positions = 1 supervisors = "the Colony Director" selection_color = "#8E2929" - idtype = /obj/item/weapon/card/id/security/head req_admin_notify = 1 economic_modifier = 10 access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, @@ -36,7 +35,6 @@ spawn_positions = 1 supervisors = "the head of security" selection_color = "#601C1C" - idtype = /obj/item/weapon/card/id/security/warden economic_modifier = 5 access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_morgue, access_external_airlocks) minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_external_airlocks) @@ -53,7 +51,6 @@ spawn_positions = 2 supervisors = "the head of security" selection_color = "#601C1C" - idtype = /obj/item/weapon/card/id/security/detective access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks) minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks) economic_modifier = 5 @@ -71,7 +68,6 @@ spawn_positions = 4 supervisors = "the head of security" selection_color = "#601C1C" - idtype = /obj/item/weapon/card/id/security/officer economic_modifier = 4 access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_morgue, access_external_airlocks) minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_external_airlocks) diff --git a/code/game/jobs/job/silicon.dm b/code/game/jobs/job/silicon.dm index 1b063894ba..9aed52c023 100644 --- a/code/game/jobs/job/silicon.dm +++ b/code/game/jobs/job/silicon.dm @@ -11,18 +11,11 @@ minimal_player_age = 7 account_allowed = 0 economic_modifier = 0 + has_headset = FALSE /datum/job/ai/equip(var/mob/living/carbon/human/H) if(!H) return 0 return 1 -/* -/datum/job/ai/equip_survival(var/mob/living/carbon/human/H) - if(!H) return 0 - return 1 -*/ -/datum/job/ai/equip_backpack(var/mob/living/carbon/human/H) - if(!H) return 0 - return 1 /datum/job/ai/is_position_available() return (empty_playable_ai_cores.len != 0) @@ -45,19 +38,11 @@ alt_titles = list("Robot", "Drone") account_allowed = 0 economic_modifier = 0 + has_headset = FALSE /datum/job/cyborg/equip(var/mob/living/carbon/human/H) if(!H) return 0 return 1 -/* -/datum/job/cyborg/equip_survival(var/mob/living/carbon/human/H) - if(!H) return 0 - return 1 -*/ -/datum/job/cyborg/equip_backpack(var/mob/living/carbon/human/H) - if(!H) return 0 - return 1 - return 1 /datum/job/cyborg/equip_preview(mob/living/carbon/human/H) H.equip_to_slot_or_del(new /obj/item/clothing/suit/cardborg(H), slot_wear_suit) diff --git a/code/game/jobs/job/special_vr.dm b/code/game/jobs/job/special_vr.dm index fbed745240..8369ebba46 100644 --- a/code/game/jobs/job/special_vr.dm +++ b/code/game/jobs/job/special_vr.dm @@ -7,35 +7,17 @@ spawn_positions = 1 supervisors = "company officials and Corporate Regulations" selection_color = "#1D1D4F" - idtype = /obj/item/weapon/card/id/centcom access = list() minimal_access = list() minimal_player_age = 14 economic_modifier = 20 whitelist_only = 1 latejoin_only = 1 + outfit_type = /decl/hierarchy/outfit/job/centcom_officer minimum_character_age = 25 ideal_character_age = 40 - equip(var/mob/living/carbon/human/H) - if(!H) return 0 - H.equip_to_slot_or_del(new /obj/item/device/radio/headset/centcom(H), slot_l_ear) - switch(H.backbag) - if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) - if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) - if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom, slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/device/pda/centcom(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/gloves/white(H), slot_gloves) - H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/centcom/officer(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/glasses/omnihud/all(H), slot_l_store) - - H.implant_loyalty() - - return 1 - get_access() return get_all_accesses().Copy() @@ -97,23 +79,7 @@ alt_titles = list("Comedian","Jester") whitelist_only = 1 latejoin_only = 1 - - equip(var/mob/living/carbon/human/H) - if(!H) return 0 - H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/clown(H), slot_back) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), slot_wear_mask) - H.equip_to_slot_or_del(new /obj/item/device/pda/clown(H), slot_belt) - - 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 + outfit_type = /decl/hierarchy/outfit/job/clown /datum/job/clown/get_access() if(config.assistant_maint) @@ -137,22 +103,7 @@ alt_titles = list("Performer","Interpretive Dancer") whitelist_only = 1 latejoin_only = 1 - - equip(var/mob/living/carbon/human/H) - if(!H) return 0 - H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) - H.equip_to_slot_or_del(new /obj/item/clothing/under/mime(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/mime(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/head/soft/mime(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/mime(H), slot_wear_mask) - H.equip_to_slot_or_del(new /obj/item/device/pda/mime(H), slot_belt) - - if(H.backbag > 0) - H.equip_to_slot_or_del(new /obj/item/weapon/pen/crayon/mime(H.back), slot_in_backpack) - else - H.equip_to_slot_or_del(new /obj/item/weapon/pen/crayon/mime(H), slot_l_hand) - - return 1 + outfit_type = /decl/hierarchy/outfit/job/mime /datum/job/mime/get_access() if(config.assistant_maint) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index b5d42ba2f6..b527be4aad 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -380,7 +380,7 @@ var/global/datum/controller/occupations/job_master else permitted = 1 - if(G.whitelisted && !is_alien_whitelisted(H, all_species[G.whitelisted])) + if(G.whitelisted && !is_alien_whitelisted(H, GLOB.all_species[G.whitelisted])) //if(G.whitelisted && (G.whitelisted != H.species.name || !is_alien_whitelisted(H, G.whitelisted))) permitted = 0 @@ -411,8 +411,6 @@ var/global/datum/controller/occupations/job_master //Equip job items. job.setup_account(H) job.equip(H, H.mind ? H.mind.role_alt_title : "") - job.equip_backpack(H) -// job.equip_survival(H) job.apply_fingerprints(H) if(job.title != "Cyborg" && job.title != "AI") H.equip_post_job() @@ -499,9 +497,7 @@ var/global/datum/controller/occupations/job_master if(job.supervisors) H << "As the [alt_title ? alt_title : rank] you answer directly to [job.supervisors]. Special circumstances may change this." - - if(job.idtype) - spawnId(H, rank, alt_title) + if(job.has_headset) H.equip_to_slot_or_del(new /obj/item/device/radio/headset(H), slot_l_ear) H << "To speak on your department's radio channel use :h. For the use of other channels, examine your headset." @@ -543,48 +539,6 @@ var/global/datum/controller/occupations/job_master BITSET(H.hud_updateflag, SPECIALROLE_HUD) return H - - proc/spawnId(var/mob/living/carbon/human/H, rank, title) - if(!H) return 0 - var/obj/item/weapon/card/id/C = H.get_equipped_item(slot_wear_id) - if(istype(C)) return 0 - - var/datum/job/job = null - for(var/datum/job/J in occupations) - if(J.title == rank) - job = J - break - - if(job) - if(job.title == "Cyborg") - return - else - C = new job.idtype(H) - C.access = job.get_access() - else - C = new /obj/item/weapon/card/id(H) - if(C) - C.rank = rank - C.assignment = title ? title : rank - H.set_id_info(C) - - //put the player's account number onto the ID - if(H.mind && H.mind.initial_account) - C.associated_account_number = H.mind.initial_account.account_number - - H.equip_to_slot_or_del(C, slot_wear_id) - -// H.equip_to_slot_or_del(new /obj/item/device/pda(H), slot_belt) - if(locate(/obj/item/device/pda,H)) - var/obj/item/device/pda/pda = locate(/obj/item/device/pda,H) - pda.owner = H.real_name - pda.ownjob = C.assignment - pda.ownrank = C.rank - pda.name = "PDA-[H.real_name] ([pda.ownjob])" - - return 1 - - proc/LoadJobs(jobsfile) //ran during round setup, reads info from jobs.txt -- Urist if(!config.load_jobs_from_txt) return 0 diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm index 6c630b3827..60143fadd3 100644 --- a/code/game/machinery/bioprinter.dm +++ b/code/game/machinery/bioprinter.dm @@ -236,9 +236,9 @@ malfunctioned = TRUE var/possible_species = list(SPECIES_HUMAN, SPECIES_VOX, SPECIES_SKRELL, SPECIES_ZADDAT, SPECIES_UNATHI, SPECIES_GOLEM, SPECIES_SHADOW) var/new_species = pick(possible_species) - if(!all_species[new_species]) + if(!GLOB.all_species[new_species]) new_species = SPECIES_HUMAN - O.species = all_species[new_species] + O.species = GLOB.all_species[new_species] if(istype(O, /obj/item/organ/external) && !malfunctioned) var/obj/item/organ/external/E = O diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 7e25bb2df9..a15887cc58 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -314,7 +314,7 @@ //Stolen from status_display /obj/machinery/door_timer/proc/texticon(var/tn, var/px = 0, var/py = 0) var/image/I = image('icons/obj/status_display.dmi', "blank") - var/len = lentext(tn) + var/len = length(tn) for(var/d = 1 to len) var/char = copytext(tn, len-d+1, len-d+2) diff --git a/code/game/machinery/supply_display.dm b/code/game/machinery/supply_display.dm index d1be70e754..211918c5e6 100644 --- a/code/game/machinery/supply_display.dm +++ b/code/game/machinery/supply_display.dm @@ -11,7 +11,7 @@ message2 = "Error" else if(shuttle.has_arrive_time()) message2 = get_supply_shuttle_timer() - if(lentext(message2) > CHARS_PER_LINE) + if(length(message2) > CHARS_PER_LINE) message2 = "Error" else if(shuttle.is_launching()) if(shuttle.at_station()) diff --git a/code/game/machinery/vending_vr.dm b/code/game/machinery/vending_vr.dm index 6b7d245a98..08f2c90b0c 100644 --- a/code/game/machinery/vending_vr.dm +++ b/code/game/machinery/vending_vr.dm @@ -1246,3 +1246,64 @@ premium = list(/obj/item/clothing/suit/imperium_monk = 3) contraband = list(/obj/item/clothing/head/syndicatefake = 1, /obj/item/clothing/suit/syndicatefake = 1) + +//TFF 19/12/19 - Brig version of a seed storage vendor +/obj/machinery/seed_storage/brig + name = "Prisoners' food seed storage" + starting_seeds = list( + /obj/item/seeds/appleseed = 3, + /obj/item/seeds/bananaseed = 3, + /obj/item/seeds/berryseed = 3, + /obj/item/seeds/cabbageseed = 3, + /obj/item/seeds/carrotseed = 3, + /obj/item/seeds/celery = 3, + /obj/item/seeds/chantermycelium = 3, + /obj/item/seeds/cherryseed = 3, + /obj/item/seeds/chiliseed = 3, + /obj/item/seeds/cocoapodseed = 3, + /obj/item/seeds/cornseed = 3, + /obj/item/seeds/durian = 3, + /obj/item/seeds/eggplantseed = 3, + /obj/item/seeds/grapeseed = 3, + /obj/item/seeds/grassseed = 3, + /obj/item/seeds/replicapod = 3, + /obj/item/seeds/lavenderseed = 3, + /obj/item/seeds/lemonseed = 3, + /obj/item/seeds/lettuce = 3, + /obj/item/seeds/limeseed = 3, + /obj/item/seeds/mtearseed = 2, + /obj/item/seeds/orangeseed = 3, + /obj/item/seeds/onionseed = 3, + /obj/item/seeds/peanutseed = 3, + /obj/item/seeds/plumpmycelium = 3, + /obj/item/seeds/poppyseed = 3, + /obj/item/seeds/potatoseed = 3, + /obj/item/seeds/pumpkinseed = 3, + /obj/item/seeds/rhubarb = 3, + /obj/item/seeds/riceseed = 3, + /obj/item/seeds/rose = 3, + /obj/item/seeds/soyaseed = 3, + /obj/item/seeds/spineapple = 3, + /obj/item/seeds/sugarcaneseed = 3, + /obj/item/seeds/sunflowerseed = 3, + /obj/item/seeds/shandseed = 2, + /obj/item/seeds/tobaccoseed = 3, + /obj/item/seeds/tomatoseed = 3, + /obj/item/seeds/towermycelium = 3, + /obj/item/seeds/vanilla = 3, + /obj/item/seeds/watermelonseed = 3, + /obj/item/seeds/wheatseed = 3, + /obj/item/seeds/whitebeetseed = 3, + /obj/item/seeds/wabback = 2) + +//TFF 19/12/19 - Brig version of a Nutrimax +/obj/machinery/vending/hydronutrients/brig + name = "Brig NutriMax" + desc = "A plant nutrients vendor. Seems some items aren't included." + product_slogans = "Aren't you glad you don't have to fertilize the natural way?;Now with 50% less stink!;Plants are people too!" + product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..." + icon_state = "nutri" + icon_deny = "nutri-deny" + products = list(/obj/item/weapon/reagent_containers/glass/bottle/eznutrient = 6,/obj/item/weapon/reagent_containers/glass/bottle/left4zed = 4,/obj/item/weapon/reagent_containers/glass/bottle/robustharvest = 3,/obj/item/weapon/plantspray/pests = 20, + /obj/item/weapon/reagent_containers/glass/beaker = 4,/obj/item/weapon/storage/bag/plants = 5) + premium = list(/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 10,/obj/item/weapon/reagent_containers/glass/bottle/diethylamine = 5) diff --git a/code/game/objects/effects/decals/posters/polarisposters.dm b/code/game/objects/effects/decals/posters/polarisposters.dm index 39e44e17e7..d40cdd0db0 100644 --- a/code/game/objects/effects/decals/posters/polarisposters.dm +++ b/code/game/objects/effects/decals/posters/polarisposters.dm @@ -180,10 +180,14 @@ The poster's captions explain the importance of knowing how to operate a mechatronic vehicle safely, especially near other personnel.\ The image seems important." +//VOREStation Removal Start TFF 17/12/19 - lore not used in our station's own lore. +/* /datum/poster/nanotrasen/nt_4 icon_state = "ntposter04" name = "Beware Aetotheans" desc = "This poster displays a distinctly hostile-looking red Promethean in a black coat. The fine-print around the edges warns the reader about the dangers posed by Almachi Prometheans." +*/ +//VOREstation Removal End /datum/poster/nanotrasen/nt_5 icon_state = "ntposter05" diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index ff47cab3ca..1e31744e26 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -74,16 +74,22 @@ switch(drawtype) if("letter") drawtype = input("Choose the letter.", "Crayon scribbles") in list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z") - if(get_dist(target, user) > 1 || !(user.z == target.z)) + if(get_dist(target, user) > 1 || !(user.z == target.z) || !drawtype) return to_chat(user, "You start drawing a letter on the [target.name].") if("graffiti") + drawtype = input("Choose the graffiti.", "Crayon scribbles") in list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa") + if(get_dist(target, user) > 1 || !(user.z == target.z) || !drawtype) + return to_chat(user, "You start drawing graffiti on the [target.name].") if("rune") + drawtype = input("Choose the rune.", "Crayon scribbles") in list("rune1", "rune2", "rune3", "rune4", "rune5", "rune6") + if(get_dist(target, user) > 1 || !(user.z == target.z) || !drawtype) + return to_chat(user, "You start drawing a rune on the [target.name].") if("arrow") drawtype = input("Choose the arrow.", "Crayon scribbles") in list("left", "right", "up", "down") - if(get_dist(target, user) > 1 || !(user.z == target.z)) + if(get_dist(target, user) > 1 || !(user.z == target.z) || !drawtype) return to_chat(user, "You start drawing an arrow on the [target.name].") if(instant || do_after(user, 50)) diff --git a/code/game/objects/items/devices/communicator/UI.dm b/code/game/objects/items/devices/communicator/UI.dm index a4859c08a5..e972cd1210 100644 --- a/code/game/objects/items/devices/communicator/UI.dm +++ b/code/game/objects/items/devices/communicator/UI.dm @@ -63,6 +63,11 @@ if(ghost.exonet) im_contacts_ui[++im_contacts_ui.len] = list("name" = sanitize(ghost.name), "address" = ghost.exonet.address, "ref" = "\ref[ghost]") + for(var/obj/item/integrated_circuit/input/EPv2/CIRC in im_contacts) + if(CIRC.exonet && CIRC.assembly) + im_contacts_ui[++im_contacts_ui.len] = list("name" = sanitize(CIRC.assembly.name), "address" = CIRC.exonet.address, "ref" = "\ref[CIRC]") + + //Actual messages. for(var/I in im_list) im_list_ui[++im_list_ui.len] = list("address" = I["address"], "to_address" = I["to_address"], "im" = I["im"]) diff --git a/code/game/objects/items/devices/communicator/messaging.dm b/code/game/objects/items/devices/communicator/messaging.dm index fffa0407f8..e50540acb0 100644 --- a/code/game/objects/items/devices/communicator/messaging.dm +++ b/code/game/objects/items/devices/communicator/messaging.dm @@ -1,162 +1,166 @@ -// Proc: receive_exonet_message() -// Parameters: 4 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received, -// text - message text to send if message is of type "text") -// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response and IM function. -/obj/item/device/communicator/receive_exonet_message(var/atom/origin_atom, origin_address, message, text) - if(message == "voice") - if(isobserver(origin_atom) || istype(origin_atom, /obj/item/device/communicator)) - if(origin_atom in voice_invites) - var/user = null - if(ismob(origin_atom.loc)) - user = origin_atom.loc - open_connection(user, origin_atom) - return - else if(origin_atom in voice_requests) - return //Spam prevention - else - request(origin_atom) - if(message == "ping") - if(network_visibility) - var/random = rand(200,350) - random = random / 10 - exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms") - if(message == "text") - request_im(origin_atom, origin_address, text) - return - -// Proc: receive_exonet_message() -// Parameters: 3 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received) -// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response. -/mob/observer/dead/receive_exonet_message(origin_atom, origin_address, message, text) - if(message == "voice") - if(istype(origin_atom, /obj/item/device/communicator)) - var/obj/item/device/communicator/comm = origin_atom - if(src in comm.voice_invites) - comm.open_connection(src) - return - to_chat(src, "\icon[origin_atom] Receiving communicator request from [origin_atom]. To answer, use the Call Communicator \ - verb, and select that name to answer the call.") - src << 'sound/machines/defib_SafetyOn.ogg' - comm.voice_invites |= src - if(message == "ping") - if(client && client.prefs.communicator_visibility) - var/random = rand(450,700) - random = random / 10 - exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms") - if(message == "text") - to_chat(src, "\icon[origin_atom] Received text message from [origin_atom]: \"[text]\"") - src << 'sound/machines/defib_safetyOff.ogg' - exonet_messages.Add("From [origin_atom]:
[text]") - return - -// Proc: request_im() -// Parameters: 3 (candidate - the communicator wanting to message the device, origin_address - the address of the sender, text - the message) -// Description: Response to a communicator trying to message the device. -// Adds them to the list of people that have messaged this device and adds the message to the message list. -/obj/item/device/communicator/proc/request_im(var/atom/candidate, var/origin_address, var/text) - var/who = null - if(isobserver(candidate)) - var/mob/observer/dead/ghost = candidate - who = ghost - im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text)) - else if(istype(candidate, /obj/item/device/communicator)) - var/obj/item/device/communicator/comm = candidate - who = comm.owner - comm.im_contacts |= src - im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text)) - else return - - im_contacts |= candidate - - if(!who) - return - - if(ringer) - playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) - for (var/mob/O in hearers(2, loc)) - O.show_message(text("\icon[src] *beep*")) - - alert_called = 1 - update_icon() - - //Search for holder of the device. - var/mob/living/L = null - if(loc && isliving(loc)) - L = loc - - if(L) - to_chat(L, "\icon[src] Message from [who].") - -// Verb: text_communicator() -// Parameters: None -// Description: Allows a ghost to send a text message to a communicator. -/mob/observer/dead/verb/text_communicator() - set category = "Ghost" - set name = "Text Communicator" - set desc = "If there is a communicator available, send a text message to it." - - if(ticker.current_state < GAME_STATE_PLAYING) - to_chat(src, "The game hasn't started yet!") - return - - if (!src.stat) - return - - if (usr != src) - return //something is terribly wrong - - for(var/mob/living/L in mob_list) //Simple check so you don't have dead people calling. - if(src.client.prefs.real_name == L.real_name) - to_chat(src, "Your identity is already present in the game world. Please load in a different character first.") - return - - var/obj/machinery/exonet_node/E = get_exonet_node() - if(!E || !E.on || !E.allow_external_communicators) - to_chat(src, "The Exonet node at telecommunications is down at the moment, or is actively blocking you, \ - so your call can't go through.") - return - - var/list/choices = list() - for(var/obj/item/device/communicator/comm in all_communicators) - if(!comm.network_visibility || !comm.exonet || !comm.exonet.address) - continue - choices.Add(comm) - - if(!choices.len) - to_chat(src, "There are no available communicators, sorry.") - return - - var/choice = input(src,"Send a text message to whom?") as null|anything in choices - if(choice) - var/obj/item/device/communicator/chosen_communicator = choice - var/mob/observer/dead/O = src - var/text_message = sanitize(input(src, "What do you want the message to say?")) as message - if(text_message && O.exonet) - O.exonet.send_message(chosen_communicator.exonet.address, "text", text_message) - - to_chat(src, "You have sent '[text_message]' to [chosen_communicator].") - exonet_messages.Add("To [chosen_communicator]:
[text_message]") - log_pda("(DCOMM: [src]) sent \"[text_message]\" to [chosen_communicator]", src) - for(var/mob/M in player_list) - if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) - if(istype(M, /mob/new_player) || M.forbid_seeing_deadchat) - continue - if(M == src) - continue - M.show_message("Comm IM - [src] -> [chosen_communicator]: [text_message]") - - - -// Verb: show_text_messages() -// Parameters: None -// Description: Lets ghosts review messages they've sent or received. -/mob/observer/dead/verb/show_text_messages() - set category = "Ghost" - set name = "Show Text Messages" - set desc = "Allows you to see exonet text messages you've sent and received." - - var/HTML = "Exonet Message Log" - for(var/line in exonet_messages) - HTML += line + "
" - HTML +="" - usr << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0") \ No newline at end of file +// Proc: receive_exonet_message() +// Parameters: 4 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received, +// text - message text to send if message is of type "text") +// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response and IM function. +/obj/item/device/communicator/receive_exonet_message(var/atom/origin_atom, origin_address, message, text) + if(message == "voice") + if(isobserver(origin_atom) || istype(origin_atom, /obj/item/device/communicator)) + if(origin_atom in voice_invites) + var/user = null + if(ismob(origin_atom.loc)) + user = origin_atom.loc + open_connection(user, origin_atom) + return + else if(origin_atom in voice_requests) + return //Spam prevention + else + request(origin_atom) + if(message == "ping") + if(network_visibility) + var/random = rand(200,350) + random = random / 10 + exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms") + if(message == "text") + request_im(origin_atom, origin_address, text) + return + +// Proc: receive_exonet_message() +// Parameters: 3 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received) +// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response. +/mob/observer/dead/receive_exonet_message(origin_atom, origin_address, message, text) + if(message == "voice") + if(istype(origin_atom, /obj/item/device/communicator)) + var/obj/item/device/communicator/comm = origin_atom + if(src in comm.voice_invites) + comm.open_connection(src) + return + to_chat(src, "\icon[origin_atom] Receiving communicator request from [origin_atom]. To answer, use the Call Communicator \ + verb, and select that name to answer the call.") + src << 'sound/machines/defib_SafetyOn.ogg' + comm.voice_invites |= src + if(message == "ping") + if(client && client.prefs.communicator_visibility) + var/random = rand(450,700) + random = random / 10 + exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms") + if(message == "text") + to_chat(src, "\icon[origin_atom] Received text message from [origin_atom]: \"[text]\"") + src << 'sound/machines/defib_safetyOff.ogg' + exonet_messages.Add("From [origin_atom]:
[text]") + return + +// Proc: request_im() +// Parameters: 3 (candidate - the communicator wanting to message the device, origin_address - the address of the sender, text - the message) +// Description: Response to a communicator trying to message the device. +// Adds them to the list of people that have messaged this device and adds the message to the message list. +/obj/item/device/communicator/proc/request_im(var/atom/candidate, var/origin_address, var/text) + var/who = null + if(isobserver(candidate)) + var/mob/observer/dead/ghost = candidate + who = ghost + im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text)) + else if(istype(candidate, /obj/item/device/communicator)) + var/obj/item/device/communicator/comm = candidate + who = comm.owner + comm.im_contacts |= src + im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text)) + else if(istype(candidate, /obj/item/integrated_circuit)) + var/obj/item/integrated_circuit/CIRC = candidate + who = CIRC + im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text)) + else return + + im_contacts |= candidate + + if(!who) + return + + if(ringer) + playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) + for (var/mob/O in hearers(2, loc)) + O.show_message(text("\icon[src] *beep*")) + + alert_called = 1 + update_icon() + + //Search for holder of the device. + var/mob/living/L = null + if(loc && isliving(loc)) + L = loc + + if(L) + to_chat(L, "\icon[src] Message from [who].") + +// Verb: text_communicator() +// Parameters: None +// Description: Allows a ghost to send a text message to a communicator. +/mob/observer/dead/verb/text_communicator() + set category = "Ghost" + set name = "Text Communicator" + set desc = "If there is a communicator available, send a text message to it." + + if(ticker.current_state < GAME_STATE_PLAYING) + to_chat(src, "The game hasn't started yet!") + return + + if (!src.stat) + return + + if (usr != src) + return //something is terribly wrong + + for(var/mob/living/L in mob_list) //Simple check so you don't have dead people calling. + if(src.client.prefs.real_name == L.real_name) + to_chat(src, "Your identity is already present in the game world. Please load in a different character first.") + return + + var/obj/machinery/exonet_node/E = get_exonet_node() + if(!E || !E.on || !E.allow_external_communicators) + to_chat(src, "The Exonet node at telecommunications is down at the moment, or is actively blocking you, \ + so your call can't go through.") + return + + var/list/choices = list() + for(var/obj/item/device/communicator/comm in all_communicators) + if(!comm.network_visibility || !comm.exonet || !comm.exonet.address) + continue + choices.Add(comm) + + if(!choices.len) + to_chat(src, "There are no available communicators, sorry.") + return + + var/choice = input(src,"Send a text message to whom?") as null|anything in choices + if(choice) + var/obj/item/device/communicator/chosen_communicator = choice + var/mob/observer/dead/O = src + var/text_message = sanitize(input(src, "What do you want the message to say?")) as message + if(text_message && O.exonet) + O.exonet.send_message(chosen_communicator.exonet.address, "text", text_message) + + to_chat(src, "You have sent '[text_message]' to [chosen_communicator].") + exonet_messages.Add("To [chosen_communicator]:
[text_message]") + log_pda("(DCOMM: [src]) sent \"[text_message]\" to [chosen_communicator]", src) + for(var/mob/M in player_list) + if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) + if(istype(M, /mob/new_player) || M.forbid_seeing_deadchat) + continue + if(M == src) + continue + M.show_message("Comm IM - [src] -> [chosen_communicator]: [text_message]") + + + +// Verb: show_text_messages() +// Parameters: None +// Description: Lets ghosts review messages they've sent or received. +/mob/observer/dead/verb/show_text_messages() + set category = "Ghost" + set name = "Show Text Messages" + set desc = "Allows you to see exonet text messages you've sent and received." + + var/HTML = "Exonet Message Log" + for(var/line in exonet_messages) + HTML += line + "
" + HTML +="" + usr << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0") diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 4686aee807..f85e424604 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -54,6 +54,11 @@ var/failmsg = "" var/charge = 0 + // Eating used bulbs gives us bulb shards + var/bulb_shards = 0 + // when we get this many shards, we get a free bulb. + var/shards_required = 4 + /obj/item/device/lightreplacer/New() failmsg = "The [name]'s refill light blinks red." ..() @@ -76,18 +81,55 @@ to_chat(user, "You need one sheet of glass to replace lights.") if(istype(W, /obj/item/weapon/light)) + var/new_bulbs = 0 var/obj/item/weapon/light/L = W if(L.status == 0) // LIGHT OKAY if(uses < max_uses) + if(!user.unEquip(W)) + return add_uses(1) - to_chat(user, "You insert \the [L.name] into \the [src.name]. You have [uses] light\s remaining.") - user.drop_item() qdel(L) - return else - to_chat(user, "You need a working light.") + if(!user.unEquip(W)) + return + new_bulbs += AddShards(1) + qdel(L) + if(new_bulbs != 0) + playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) + to_chat(user, "You insert \the [L.name] into \the [src.name]. You have [uses] light\s remaining.") + return + + if(istype(W, /obj/item/weapon/storage)) + var/obj/item/weapon/storage/S = W + var/found_lightbulbs = FALSE + var/replaced_something = TRUE + + for(var/obj/item/I in S.contents) + if(istype(I,/obj/item/weapon/light)) + var/obj/item/weapon/light/L = I + found_lightbulbs = TRUE + if(src.uses >= max_uses) + break + if(L.status == LIGHT_OK) + replaced_something = TRUE + add_uses(1) + qdel(L) + + else if(L.status == LIGHT_BROKEN || L.status == LIGHT_BURNED) + replaced_something = TRUE + AddShards(1) + qdel(L) + + if(!found_lightbulbs) + to_chat(user, "\The [S] contains no bulbs.") return + if(!replaced_something && src.uses == max_uses) + to_chat(user, "\The [src] is full!") + return + + to_chat(user, "You fill \the [src] with lights from \the [S].") + /obj/item/device/lightreplacer/attack_self(mob/user) /* // This would probably be a bit OP. If you want it though, uncomment the code. if(isrobot(user)) @@ -113,6 +155,15 @@ /obj/item/device/lightreplacer/proc/add_uses(var/amount = 1) uses = min(max(uses + amount, 0), max_uses) + +/obj/item/device/lightreplacer/proc/AddShards(amount = 1) + bulb_shards += amount + var/new_bulbs = round(bulb_shards / shards_required) + if(new_bulbs > 0) + add_uses(new_bulbs) + bulb_shards = bulb_shards % shards_required + return new_bulbs + /obj/item/device/lightreplacer/proc/Charge(var/mob/user, var/amount = 1) charge += amount if(charge > 6) @@ -121,18 +172,41 @@ /obj/item/device/lightreplacer/proc/ReplaceLight(var/obj/machinery/light/target, var/mob/living/U) - if(target.status == LIGHT_OK) + if(target.status != LIGHT_OK) + if(CanUse(U)) + if(!Use(U)) return + to_chat(U, "You replace the [target.get_fitting_name()] with the [src].") + + if(target.status != LIGHT_EMPTY) + var/new_bulbs = AddShards(1) + if(new_bulbs != 0) + to_chat(U, "\The [src] has fabricated a new bulb from the broken bulbs it has stored. It now has [uses] uses.") + playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) + target.status = LIGHT_EMPTY + target.update() + + var/obj/item/weapon/light/L2 = new target.light_type() + + target.status = L2.status + target.switchcount = L2.switchcount + target.rigged = emagged + target.brightness_range = L2.brightness_range + target.brightness_power = L2.brightness_power + target.brightness_color = L2.brightness_color + target.on = target.has_power() + target.update() + qdel(L2) + + if(target.on && target.rigged) + target.explode() + return + + else + to_chat(U, failmsg) + return + else to_chat(U, "There is a working [target.get_fitting_name()] already inserted.") - else if(!CanUse(U)) - to_chat(U, failmsg) - else if(Use(U)) - to_chat(U, "You replace the [target.get_fitting_name()] with the [src].") - - if(target.status != LIGHT_EMPTY) - target.remove_bulb() - - var/obj/item/weapon/light/L = new target.light_type() - target.insert_bulb(L) + return /obj/item/device/lightreplacer/emag_act(var/remaining_charges, var/mob/user) emagged = !emagged @@ -153,4 +227,4 @@ #undef LIGHT_OK #undef LIGHT_EMPTY #undef LIGHT_BROKEN -#undef LIGHT_BURNED +#undef LIGHT_BURNED \ No newline at end of file diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index b0c1113ba8..fc3f69dd22 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -51,10 +51,10 @@ return ..() /obj/item/device/multitool/proc/mode_switch(mob/living/user) - if(++mode_index > modes.len) mode_index = 1 + if(mode_index + 1 > modes.len) mode_index = 1 else - mode_index++ + mode_index += 1 toolmode = modes[mode_index] to_chat(user,"\The [src] is now set to [toolmode].") diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 51d7e0a4b6..67ad07567f 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -46,10 +46,10 @@ /obj/item/device/radio/headset/handle_message_mode(mob/living/M as mob, message, channel) if (channel == "special") if (translate_binary) - var/datum/language/binary = all_languages["Robot Talk"] + var/datum/language/binary = GLOB.all_languages["Robot Talk"] binary.broadcast(M, message) if (translate_hive) - var/datum/language/hivemind = all_languages["Hivemind"] + var/datum/language/hivemind = GLOB.all_languages["Hivemind"] hivemind.broadcast(M, message) return null diff --git a/code/game/objects/items/weapons/id cards/station_ids.dm b/code/game/objects/items/weapons/id cards/station_ids.dm index 8ccd6f70c1..7a2e39014c 100644 --- a/code/game/objects/items/weapons/id cards/station_ids.dm +++ b/code/game/objects/items/weapons/id cards/station_ids.dm @@ -23,8 +23,6 @@ var/primary_color = rgb(0,0,0) // Obtained by eyedroppering the stripe in the middle of the card var/secondary_color = rgb(0,0,0) // Likewise for the oval in the top-left corner - var/datum/job/job_access_type = /datum/job/assistant // Job type to acquire access rights from, if any - //alt titles are handled a bit weirdly in order to unobtrusively integrate into existing ID system var/assignment = null //can be alt title or the actual job var/rank = null //actual job @@ -134,16 +132,6 @@ icon_state = "silver" item_state = "silver_id" -/obj/item/weapon/card/id/silver/secretary - assignment = "Command Secretary" - rank = "Command Secretary" - job_access_type = /datum/job/secretary - -/obj/item/weapon/card/id/silver/hop - assignment = "Head of Personnel" - rank = "Head of Personnel" - job_access_type = /datum/job/hop - /obj/item/weapon/card/id/gold name = "identification card" desc = "A golden card which shows power and might." @@ -154,14 +142,11 @@ /obj/item/weapon/card/id/gold/captain assignment = "Colony Director" rank = "Colony Director" - job_access_type = /datum/job/captain - preserve_item = 0 /obj/item/weapon/card/id/gold/captain/spare name = "\improper Colony Director's spare ID" desc = "The spare ID of the High Lord himself." registered_name = "Colony Director" - job_access_type = /datum/job/captain /obj/item/weapon/card/id/synthetic name = "\improper Synthetic ID" @@ -206,31 +191,6 @@ primary_color = rgb(189,237,237) secondary_color = rgb(223,255,255) -/obj/item/weapon/card/id/medical/doctor - assignment = "Medical Doctor" - rank = "Medical Doctor" - job_access_type = /datum/job/doctor - -/obj/item/weapon/card/id/medical/chemist - assignment = "Chemist" - rank = "Chemist" - job_access_type = /datum/job/chemist - -/obj/item/weapon/card/id/medical/geneticist - assignment = "Geneticist" - rank = "Geneticist" - job_access_type = /datum/job/doctor //geneticist - -/obj/item/weapon/card/id/medical/psychiatrist - assignment = "Psychiatrist" - rank = "Psychiatrist" - job_access_type = /datum/job/psychiatrist - -/obj/item/weapon/card/id/medical/paramedic - assignment = "Paramedic" - rank = "Paramedic" - job_access_type = /datum/job/paramedic - /obj/item/weapon/card/id/medical/head name = "identification card" desc = "A card which represents care and compassion." @@ -239,7 +199,6 @@ secondary_color = rgb(255,223,127) assignment = "Chief Medical Officer" rank = "Chief Medical Officer" - job_access_type = /datum/job/cmo /obj/item/weapon/card/id/security name = "identification card" @@ -248,21 +207,6 @@ primary_color = rgb(189,47,0) secondary_color = rgb(223,127,95) -/obj/item/weapon/card/id/security/officer - assignment = "Security Officer" - rank = "Security Officer" - job_access_type = /datum/job/officer - -/obj/item/weapon/card/id/security/detective - assignment = "Detective" - rank = "Detective" - job_access_type = /datum/job/detective - -/obj/item/weapon/card/id/security/warden - assignment = "Warden" - rank = "Warden" - job_access_type = /datum/job/warden - /obj/item/weapon/card/id/security/head name = "identification card" desc = "A card which represents honor and protection." @@ -271,7 +215,6 @@ secondary_color = rgb(255,223,127) assignment = "Head of Security" rank = "Head of Security" - job_access_type = /datum/job/hos /obj/item/weapon/card/id/engineering name = "identification card" @@ -280,16 +223,6 @@ primary_color = rgb(189,94,0) secondary_color = rgb(223,159,95) -/obj/item/weapon/card/id/engineering/engineer - assignment = "Station Engineer" - rank = "Station Engineer" - job_access_type = /datum/job/engineer - -/obj/item/weapon/card/id/engineering/atmos - assignment = "Atmospheric Technician" - rank = "Atmospheric Technician" - job_access_type = /datum/job/atmos - /obj/item/weapon/card/id/engineering/head name = "identification card" desc = "A card which represents creativity and ingenuity." @@ -298,7 +231,6 @@ secondary_color = rgb(255,223,127) assignment = "Chief Engineer" rank = "Chief Engineer" - job_access_type = /datum/job/chief_engineer /obj/item/weapon/card/id/science name = "identification card" @@ -307,21 +239,6 @@ primary_color = rgb(142,47,142) secondary_color = rgb(191,127,191) -/obj/item/weapon/card/id/science/scientist - assignment = "Scientist" - rank = "Scientist" - job_access_type = /datum/job/scientist - -/obj/item/weapon/card/id/science/xenobiologist - assignment = "Xenobiologist" - rank = "Xenobiologist" - job_access_type = /datum/job/xenobiologist - -/obj/item/weapon/card/id/science/roboticist - assignment = "Roboticist" - rank = "Roboticist" - job_access_type = /datum/job/roboticist - /obj/item/weapon/card/id/science/head name = "identification card" desc = "A card which represents knowledge and reasoning." @@ -330,7 +247,6 @@ secondary_color = rgb(255,223,127) assignment = "Research Director" rank = "Research Director" - job_access_type = /datum/job/rd /obj/item/weapon/card/id/cargo name = "identification card" @@ -339,16 +255,6 @@ primary_color = rgb(142,94,0) secondary_color = rgb(191,159,95) -/obj/item/weapon/card/id/cargo/cargo_tech - assignment = "Cargo Technician" - rank = "Cargo Technician" - job_access_type = /datum/job/cargo_tech - -/obj/item/weapon/card/id/cargo/mining - assignment = "Shaft Miner" - rank = "Shaft Miner" - job_access_type = /datum/job/mining - /obj/item/weapon/card/id/cargo/head name = "identification card" desc = "A card which represents service and planning." @@ -357,12 +263,10 @@ secondary_color = rgb(255,223,127) assignment = "Quartermaster" rank = "Quartermaster" - job_access_type = /datum/job/qm /obj/item/weapon/card/id/assistant assignment = USELESS_JOB //VOREStation Edit - Visitor not Assistant rank = USELESS_JOB //VOREStation Edit - Visitor not Assistant - job_access_type = /datum/job/assistant /obj/item/weapon/card/id/civilian name = "identification card" @@ -372,42 +276,6 @@ secondary_color = rgb(95,159,191) assignment = "Civilian" rank = "Assistant" - job_access_type = /datum/job/assistant - -/obj/item/weapon/card/id/civilian/bartender - assignment = "Bartender" - rank = "Bartender" - job_access_type = /datum/job/bartender - -/obj/item/weapon/card/id/civilian/botanist - assignment = "Botanist" - rank = "Botanist" - job_access_type = /datum/job/hydro - -/obj/item/weapon/card/id/civilian/chaplain - assignment = "Chaplain" - rank = "Chaplain" - job_access_type = /datum/job/chaplain - -/obj/item/weapon/card/id/civilian/chef - assignment = "Chef" - rank = "Chef" - job_access_type = /datum/job/chef - -/obj/item/weapon/card/id/civilian/internal_affairs_agent - assignment = "Internal Affairs Agent" - rank = "Internal Affairs Agent" - job_access_type = /datum/job/lawyer - -/obj/item/weapon/card/id/civilian/janitor - assignment = "Janitor" - rank = "Janitor" - job_access_type = /datum/job/janitor - -/obj/item/weapon/card/id/civilian/librarian - assignment = "Librarian" - rank = "Librarian" - job_access_type = /datum/job/librarian /obj/item/weapon/card/id/civilian/head //This is not the HoP. There's no position that uses this right now. name = "identification card" diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index d3f269abaf..8e1699c800 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -27,7 +27,7 @@ var/global/list/cached_icons = list() return ..() New() - if(paint_type && lentext(paint_type) > 0) + if(paint_type && length(paint_type) > 0) name = paint_type + " " + name ..() reagents.add_reagent("water", volume*3/5) diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 3011d2c61d..07cc774fb0 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -134,7 +134,7 @@ spawn(1) var/newname = sanitizeSafe(input(vox,"Enter a name, or leave blank for the default name.", "Name change","") as text, MAX_NAME_LEN) if(!newname || newname == "") - var/datum/language/L = all_languages[vox.species.default_language] + var/datum/language/L = GLOB.all_languages[vox.species.default_language] newname = L.get_random_name() vox.real_name = newname vox.name = vox.real_name diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm index 1e35264ffc..bf9e811b3d 100644 --- a/code/game/objects/structures/musician.dm +++ b/code/game/objects/structures/musician.dm @@ -115,12 +115,12 @@ if(!playing || shouldStopPlaying(user))//If the instrument is playing, or special case playing = 0 return - if(lentext(note) == 0) + if(length(note) == 0) continue var/cur_note = text2ascii(note) - 96 if(cur_note < 1 || cur_note > 7) continue - for(var/i=2 to lentext(note)) + for(var/i=2 to length(note)) var/ni = copytext(note,i,i+1) if(!text2num(ni)) if(ni == "#" || ni == "b" || ni == "n") @@ -208,11 +208,11 @@ t = html_encode(input(usr, "Please paste the entire song, formatted:", text("[]", name), t) as message) if(!in_range(instrumentObj, usr)) return - if(lentext(t) >= INSTRUMENT_MAX_LINE_LENGTH*INSTRUMENT_MAX_LINE_NUMBER) + if(length(t) >= INSTRUMENT_MAX_LINE_LENGTH*INSTRUMENT_MAX_LINE_NUMBER) var/cont = input(usr, "Your message is too long! Would you like to continue editing it?", "", "yes") in list("yes", "no") if(cont == "no") break - while(lentext(t) > INSTRUMENT_MAX_LINE_LENGTH*INSTRUMENT_MAX_LINE_NUMBER) + while(length(t) > INSTRUMENT_MAX_LINE_LENGTH*INSTRUMENT_MAX_LINE_NUMBER) //split into lines spawn() lines = splittext(t, "\n") @@ -226,7 +226,7 @@ lines.Cut(INSTRUMENT_MAX_LINE_NUMBER+1) var/linenum = 1 for(var/l in lines) - if(lentext(l) > INSTRUMENT_MAX_LINE_LENGTH) + if(length(l) > INSTRUMENT_MAX_LINE_LENGTH) to_chat(usr, "Line [linenum] too long!") lines.Remove(l) else @@ -256,7 +256,7 @@ return if(lines.len > INSTRUMENT_MAX_LINE_NUMBER) return - if(lentext(newline) > INSTRUMENT_MAX_LINE_LENGTH) + if(length(newline) > INSTRUMENT_MAX_LINE_LENGTH) newline = copytext(newline, 1, INSTRUMENT_MAX_LINE_LENGTH) lines.Add(newline) else if(href_list["deleteline"]) @@ -269,7 +269,7 @@ var/content = html_encode(input("Enter your line: ", instrumentObj.name, lines[num]) as text|null) if(!content || !in_range(instrumentObj, usr)) return - if(lentext(content) > INSTRUMENT_MAX_LINE_LENGTH) + if(length(content) > INSTRUMENT_MAX_LINE_LENGTH) content = copytext(content, 1, INSTRUMENT_MAX_LINE_LENGTH) if(num > lines.len || num < 1) return diff --git a/code/modules/admin/DB ban/functions.dm b/code/modules/admin/DB ban/functions.dm index d9e1efc972..dd52884833 100644 --- a/code/modules/admin/DB ban/functions.dm +++ b/code/modules/admin/DB ban/functions.dm @@ -377,13 +377,13 @@ datum/admins/proc/DB_ban_unban_by_id(var/id) if(playercid) cidsearch = "AND computerid = '[playercid]' " else - if(adminckey && lentext(adminckey) >= 3) + if(adminckey && length(adminckey) >= 3) adminsearch = "AND a_ckey LIKE '[adminckey]%' " - if(playerckey && lentext(playerckey) >= 3) + if(playerckey && length(playerckey) >= 3) playersearch = "AND ckey LIKE '[playerckey]%' " - if(playerip && lentext(playerip) >= 3) + if(playerip && length(playerip) >= 3) ipsearch = "AND ip LIKE '[playerip]%' " - if(playercid && lentext(playercid) >= 7) + if(playercid && length(playercid) >= 7) cidsearch = "AND computerid LIKE '[playercid]%' " if(dbbantype) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 671520fbf8..878671b0e2 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -192,8 +192,8 @@ proc/admin_notice(var/message, var/rights) // language toggles body += "

Languages:
" var/f = 1 - for(var/k in all_languages) - var/datum/language/L = all_languages[k] + for(var/k in GLOB.all_languages) + var/datum/language/L = GLOB.all_languages[k] if(!(L.flags & INNATE)) if(!f) body += " | " else f = 0 diff --git a/code/modules/admin/secrets/fun_secrets/paintball_mode.dm b/code/modules/admin/secrets/fun_secrets/paintball_mode.dm index 8225b96b29..16438ad195 100644 --- a/code/modules/admin/secrets/fun_secrets/paintball_mode.dm +++ b/code/modules/admin/secrets/fun_secrets/paintball_mode.dm @@ -6,8 +6,8 @@ if(!.) return - for(var/species in all_species) - var/datum/species/S = all_species[species] + for(var/species in GLOB.all_species) + var/datum/species/S = GLOB.all_species[species] S.blood_color = "rainbow" for(var/obj/effect/decal/cleanable/blood/B in world) B.basecolor = "rainbow" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 8a3022f989..284db26a7f 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1882,7 +1882,7 @@ usr << "[M] is illegal type, must be /mob!" return var/lang2toggle = href_list["lang"] - var/datum/language/L = all_languages[lang2toggle] + var/datum/language/L = GLOB.all_languages[lang2toggle] if(L in M.languages) if(!M.remove_language(lang2toggle)) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index d501e53370..c32fd68a11 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -175,7 +175,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) message_admins("Ticket [TicketHref("#[id]")] created") else MessageNoRecipient(parsed_message) - + send2adminchat() //VOREStation Add //show it to the person adminhelping too to_chat(C, "PM to-Admins: [name]") diff --git a/code/modules/admin/view_variables/modify_variables.dm b/code/modules/admin/view_variables/modify_variables.dm index b964339aa9..8878318fd6 100644 --- a/code/modules/admin/view_variables/modify_variables.dm +++ b/code/modules/admin/view_variables/modify_variables.dm @@ -55,11 +55,11 @@ GLOBAL_PROTECT(VVpixelmovement) // the type with the base type removed from the begaining var/fancytype = types[D.type] if (findtext(fancytype, types[type])) - fancytype = copytext(fancytype, lentext(types[type])+1) - var/shorttype = copytext("[D.type]", lentext("[type]")+1) - if (lentext(shorttype) > lentext(fancytype)) + fancytype = copytext(fancytype, length(types[type])+1) + var/shorttype = copytext("[D.type]", length("[type]")+1) + if (length(shorttype) > length(fancytype)) shorttype = fancytype - if (!lentext(shorttype)) + if (!length(shorttype)) shorttype = "/" .["[D]([shorttype])\ref[D]#[i]"] = D diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm index 8d547b76e1..28eea3707b 100644 --- a/code/modules/admin/view_variables/topic.dm +++ b/code/modules/admin/view_variables/topic.dm @@ -289,7 +289,7 @@ usr << "This can only be done to instances of type /mob/living/carbon/human" return - var/new_species = input("Please choose a new species.","Species",null) as null|anything in all_species + var/new_species = input("Please choose a new species.","Species",null) as null|anything in GLOB.all_species if(!H) usr << "Mob doesn't exist anymore" @@ -308,7 +308,7 @@ usr << "This can only be done to instances of type /mob" return - var/new_language = input("Please choose a language to add.","Language",null) as null|anything in all_languages + var/new_language = input("Please choose a language to add.","Language",null) as null|anything in GLOB.all_languages if(!new_language) return diff --git a/code/modules/blob2/overmind/types.dm b/code/modules/blob2/overmind/types.dm index 49b968cfcc..24ffbd6b1b 100644 --- a/code/modules/blob2/overmind/types.dm +++ b/code/modules/blob2/overmind/types.dm @@ -423,7 +423,7 @@ var/protection = H.get_cold_protection(50) if(protection < 1) var/temp_change = 80 // Each hit can reduce temperature by up to 80 kelvin. - var/datum/species/baseline = all_species["Human"] + var/datum/species/baseline = GLOB.all_species["Human"] var/temp_cap = baseline.cold_level_3 - 5 // Can't go lower than this. var/cold_factor = abs(protection - 1) diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm index 6b93b33faf..12c3aef2f5 100644 --- a/code/modules/client/preference_setup/general/01_basic.dm +++ b/code/modules/client/preference_setup/general/01_basic.dm @@ -150,9 +150,9 @@ datum/preferences/proc/set_biological_gender(var/gender) /datum/category_item/player_setup_item/general/basic/proc/get_genders() var/datum/species/S if(pref.species) - S = all_species[pref.species] + S = GLOB.all_species[pref.species] else - S = all_species[SPECIES_HUMAN] + S = GLOB.all_species[SPECIES_HUMAN] var/list/possible_genders = S.genders if(!pref.organ_data || pref.organ_data[BP_TORSO] != "cyborg") return possible_genders diff --git a/code/modules/client/preference_setup/general/02_language.dm b/code/modules/client/preference_setup/general/02_language.dm index 22c8fd1267..0481affd17 100644 --- a/code/modules/client/preference_setup/general/02_language.dm +++ b/code/modules/client/preference_setup/general/02_language.dm @@ -13,7 +13,7 @@ /datum/category_item/player_setup_item/general/language/sanitize_character() if(!islist(pref.alternate_languages)) pref.alternate_languages = list() if(pref.species) - var/datum/species/S = all_species[pref.species] + var/datum/species/S = GLOB.all_species[pref.species] if(S && pref.alternate_languages.len > S.num_alternate_languages) pref.alternate_languages.len = S.num_alternate_languages // Truncate to allowed length if(isnull(pref.language_prefixes) || !pref.language_prefixes.len) @@ -21,7 +21,7 @@ /datum/category_item/player_setup_item/general/language/content() . += "Languages
" - var/datum/species/S = all_species[pref.species] + var/datum/species/S = GLOB.all_species[pref.species] if(S.language) . += "- [S.language]
" if(S.default_language && S.default_language != S.language) @@ -46,13 +46,13 @@ pref.alternate_languages.Cut(index, index+1) return TOPIC_REFRESH else if(href_list["add_language"]) - var/datum/species/S = all_species[pref.species] + var/datum/species/S = GLOB.all_species[pref.species] if(pref.alternate_languages.len >= S.num_alternate_languages) alert(user, "You have already selected the maximum number of alternate languages for this species!") else var/list/available_languages = S.secondary_langs.Copy() - for(var/L in all_languages) - var/datum/language/lang = all_languages[L] + for(var/L in GLOB.all_languages) + var/datum/language/lang = GLOB.all_languages[L] if(!(lang.flags & RESTRICTED) && (is_lang_whitelisted(user, lang))) available_languages |= L diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index 55535b89bf..0472f6cd46 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -72,7 +72,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O S["body_descriptors"] << pref.body_descriptors /datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S) - if(!pref.species || !(pref.species in playable_species)) + if(!pref.species || !(pref.species in GLOB.playable_species)) pref.species = SPECIES_HUMAN pref.r_hair = sanitize_integer(pref.r_hair, 0, 255, initial(pref.r_hair)) pref.g_hair = sanitize_integer(pref.g_hair, 0, 255, initial(pref.g_hair)) @@ -174,7 +174,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O last_descriptors = pref.body_descriptors.Copy() pref.body_descriptors = list() - var/datum/species/mob_species = all_species[pref.species] + var/datum/species/mob_species = GLOB.all_species[pref.species] if(LAZYLEN(mob_species.descriptors)) for(var/entry in mob_species.descriptors) var/datum/mob_descriptor/descriptor = mob_species.descriptors[entry] @@ -192,7 +192,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.update_preview_icon() user << browse_rsc(pref.preview_icon, "previewicon.png") - var/datum/species/mob_species = all_species[pref.species] + var/datum/species/mob_species = GLOB.all_species[pref.species] . += "
Body " . += "(®)" . += "
" @@ -355,7 +355,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O return mob_species && (mob_species.appearance_flags & flag) /datum/category_item/player_setup_item/general/body/OnTopic(var/href,var/list/href_list, var/mob/user) - var/datum/species/mob_species = all_species[pref.species] + var/datum/species/mob_species = GLOB.all_species[pref.species] if(href_list["random"]) pref.randomize_appearance_and_body_for() @@ -379,7 +379,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O else if(href_list["show_species"]) // Actual whitelist checks are handled elsewhere, this is just for accessing the preview window. - var/choice = input("Which species would you like to look at?") as null|anything in playable_species + var/choice = input("Which species would you like to look at?") as null|anything in GLOB.playable_species if(!choice) return pref.species_preview = choice SetSpecies(preference_mob()) @@ -388,13 +388,13 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O else if(href_list["set_species"]) user << browse(null, "window=species") - if(!pref.species_preview || !(pref.species_preview in all_species)) + if(!pref.species_preview || !(pref.species_preview in GLOB.all_species)) return TOPIC_NOACTION var/datum/species/setting_species - if(all_species[href_list["set_species"]]) - setting_species = all_species[href_list["set_species"]] + if(GLOB.all_species[href_list["set_species"]]) + setting_species = GLOB.all_species[href_list["set_species"]] else return TOPIC_NOACTION @@ -595,7 +595,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O var/list/limb_selection_list = list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand","Full Body") // Full prosthetic bodies without a brain are borderline unkillable so make sure they have a brain to remove/destroy. - var/datum/species/current_species = all_species[pref.species] + var/datum/species/current_species = GLOB.all_species[pref.species] if(!current_species.has_organ["brain"]) limb_selection_list -= "Full Body" else if(pref.organ_data[BP_TORSO] == "cyborg") @@ -827,9 +827,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.real_name = random_name(pref.identifying_gender, pref.species) /datum/category_item/player_setup_item/general/body/proc/SetSpecies(mob/user) - if(!pref.species_preview || !(pref.species_preview in all_species)) + if(!pref.species_preview || !(pref.species_preview in GLOB.all_species)) pref.species_preview = SPECIES_HUMAN - var/datum/species/current_species = all_species[pref.species_preview] + var/datum/species/current_species = GLOB.all_species[pref.species_preview] var/dat = "" dat += "

[current_species.name] \[change\]


" dat += "" diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index 285856d0cf..295038c2b1 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -66,7 +66,7 @@ var/list/gear_datums = list() for(var/gear_name in gear_datums) var/datum/gear/G = gear_datums[gear_name] - if(G.whitelisted && !is_alien_whitelisted(preference_mob, all_species[G.whitelisted])) + if(G.whitelisted && !is_alien_whitelisted(preference_mob, GLOB.all_species[G.whitelisted])) continue if(max_cost && G.cost > max_cost) continue diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm index 5e667b49e2..deedbe0a04 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm @@ -45,11 +45,11 @@ /datum/gear/accessory/brown_vest display_name = "webbing, brown (Eng, Sec, Med, Exploration, Miner)" - allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Pathfinder","Shaft Miner", "Blueshield Guard") + allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner", "Blueshield Guard") /datum/gear/accessory/black_vest display_name = "webbing, black (Eng, Sec, Med, Exploration, Miner)" - allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Pathfinder","Shaft Miner", "Blueshield Guard") + allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner", "Blueshield Guard") /datum/gear/accessory/white_vest display_name = "webbing, white (Medical)" @@ -57,11 +57,11 @@ /datum/gear/accessory/brown_drop_pouches display_name = "drop pouches, brown (Eng, Sec, Med, Exploration, Miner)" - allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Pathfinder","Shaft Miner", "Blueshield Guard") + allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner", "Blueshield Guard") /datum/gear/accessory/black_drop_pouches display_name = "drop pouches, black (Eng, Sec, Med, Exploration, Miner)" - allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Pathfinder","Shaft Miner", "Blueshield Guard") + allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner", "Blueshield Guard") /datum/gear/accessory/white_drop_pouches display_name = "drop pouches, white (Medical)" diff --git a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm index c2faea0171..c0dc19841f 100644 --- a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm @@ -471,7 +471,7 @@ path = /obj/item/clothing/accessory/medal/silver/unity display_name = "Rana's Unity Medal" ckeywhitelist = list("kitchifox") - character_name = list("Rana Uma") + character_name = list("Rana Starsong-Uma") /datum/gear/fluff/taiga_uniform path = /obj/item/clothing/under/fluff/taiga diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm index cf7dbc1084..0c1fc106f5 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm @@ -517,3 +517,43 @@ /datum/gear/uniform/lilacdress display_name = "lilac dress" path = /obj/item/clothing/under/dress/lilacdress + +/datum/gear/uniform/polka + display_name = "polka dot dress" + path = /obj/item/clothing/under/dress/polka + +/datum/gear/uniform/twistfront + display_name = "twistfront crop dress" + path = /obj/item/clothing/under/dress/twistfront + +/datum/gear/uniform/cropdress + display_name = "crop dress" + path = /obj/item/clothing/under/dress/cropdress + +/datum/gear/uniform/vneckdress + display_name = "v-neck dress" + path = /obj/item/clothing/under/dress/vneck + +/datum/gear/uniform/bluedress + display_name = "blue dress" + path = /obj/item/clothing/under/dress/bluedress + +/datum/gear/uniform/wench + display_name = "wench's dress" + path = /obj/item/clothing/under/dress/wench + +/datum/gear/uniform/littleblackdress + display_name = "little black dress" + path = /obj/item/clothing/under/dress/littleblackdress + +/datum/gear/uniform/pinktutu + display_name = "pink tutu" + path = /obj/item/clothing/under/dress/pinktutu + +/datum/gear/uniform/festivedress + display_name = "festive dress" + path = /obj/item/clothing/under/dress/festivedress + +/datum/gear/uniform/haltertop + display_name = "halter top" + path = /obj/item/clothing/under/haltertop \ No newline at end of file diff --git a/code/modules/client/preference_setup/preference_setup.dm b/code/modules/client/preference_setup/preference_setup.dm index 60bc58031a..a55ca0ccca 100644 --- a/code/modules/client/preference_setup/preference_setup.dm +++ b/code/modules/client/preference_setup/preference_setup.dm @@ -279,7 +279,7 @@ return 0 //Something went wrong! /datum/category_item/player_setup_item/proc/get_min_age() - var/datum/species/S = all_species[pref.species ? pref.species : "Human"] + var/datum/species/S = GLOB.all_species[pref.species ? pref.species : "Human"] if(!is_FBP()) return S.min_age // If they're not a robot, we can just use the species var. var/FBP_type = get_FBP_type() @@ -293,7 +293,7 @@ return S.min_age // welp /datum/category_item/player_setup_item/proc/get_max_age() - var/datum/species/S = all_species[pref.species ? pref.species : "Human"] + var/datum/species/S = GLOB.all_species[pref.species ? pref.species : "Human"] if(!is_FBP()) return S.max_age // If they're not a robot, we can just use the species var. var/FBP_type = get_FBP_type() diff --git a/code/modules/client/preference_setup/preference_setup_vr.dm b/code/modules/client/preference_setup/preference_setup_vr.dm index 67c1d1792a..2379875910 100644 --- a/code/modules/client/preference_setup/preference_setup_vr.dm +++ b/code/modules/client/preference_setup/preference_setup_vr.dm @@ -1,7 +1,7 @@ //Minimum limit is 18 /datum/category_item/player_setup_item/get_min_age() var/min_age = 18 - var/datum/species/S = all_species[pref.species ? pref.species : "Human"] + var/datum/species/S = GLOB.all_species[pref.species ? pref.species : "Human"] if(!is_FBP() && S.min_age > 18) min_age = S.min_age return min_age diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm index 06b748f359..6462a142c7 100644 --- a/code/modules/client/preference_setup/vore/07_traits.dm +++ b/code/modules/client/preference_setup/vore/07_traits.dm @@ -73,7 +73,7 @@ if(!(path in negative_traits)) pref.neg_traits -= path - var/datum/species/selected_species = all_species[pref.species] + var/datum/species/selected_species = GLOB.all_species[pref.species] if(selected_species.selects_bodytype) // Allowed! else if(!pref.custom_base || !(pref.custom_base in custom_species_bases)) @@ -81,7 +81,7 @@ /datum/category_item/player_setup_item/vore/traits/copy_to_mob(var/mob/living/carbon/human/character) character.custom_species = pref.custom_species - var/datum/species/selected_species = all_species[pref.species] + var/datum/species/selected_species = GLOB.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" @@ -99,7 +99,7 @@ . += "Custom Species Name: " . += "[pref.custom_species ? pref.custom_species : "-Input Name-"]
" - var/datum/species/selected_species = all_species[pref.species] + var/datum/species/selected_species = GLOB.all_species[pref.species] if(selected_species.selects_bodytype) . += "Icon Base: " . += "[pref.custom_base ? pref.custom_base : "Human"]
" diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index c7ccb6a31a..fc7c458bf3 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -458,6 +458,82 @@ desc = "A simple black dress adorned in fake purple lilacs." icon_state = "lilacdress" +/obj/item/clothing/under/dress/white + name = "white wedding dress" + desc = "A fancy white dress with a blue underdress." + icon_state = "whitedress1" + flags_inv = HIDESHOES + +/obj/item/clothing/under/dress/white2 + name = "long dress" + desc = "A long dress." + icon_state = "whitedress2" + addblends = "whitedress2_a" + flags_inv = HIDESHOES + +/obj/item/clothing/under/dress/white3 + name = "short dress" + desc = "A short, plain dress." + icon_state = "whitedress3" + addblends = "whitedress3_a" + +/obj/item/clothing/under/dress/white4 + name = "long flared dress" + desc = "A long white dress that flares out at the bottom." + icon_state = "whitedress4" + addblends = "whitedress4_a" + flags_inv = HIDESHOES + +/obj/item/clothing/under/dress/darkred + name = "fancy dark red dress" + desc = "A short, red dress with a black belt. Fancy." + icon_state = "darkreddress" + +/obj/item/clothing/under/dress/polka + name = "polka dot dress" + desc = "A sleeveless, cream colored dress with red polka dots." + icon_state = "polka" + +/obj/item/clothing/under/dress/twistfront + name = "twistfront crop dress" + desc = "A black skirt and red twistfront croptop. Fancy!" + icon_state = "twistfront" + +/obj/item/clothing/under/dress/cropdress + name = "crop dress" + desc = "A red skirt and longsleeved button-up crop top." + icon_state = "cropdress" + +/obj/item/clothing/under/dress/vneck + name = "v-neck dress" + desc = "A black v-neck dress with an exaggerated neckline covered in a sheer mesh." + icon_state = "vneckdress" + +/obj/item/clothing/under/dress/bluedress + name = "blue dress" + desc = "A plain blue dress with a white belt." + icon_state = "bluedress" + +/obj/item/clothing/under/dress/wench + name = "wench's dress" + desc = "A white dress styled like a Ye Old Barmaid. Saucy!" + icon_state = "wench" + +/obj/item/clothing/under/dress/littleblackdress + name = "little black dress" + desc = "A little strapless black dress with a red ribbon and flower accessory." + icon_state = "littleblackdress" + +/obj/item/clothing/under/dress/pinktutu + name = "pink tutu" + desc = "A black leotard with a pink mesh tutu. Perfect for ballet practice." + icon_state = "pinktutu" + +/obj/item/clothing/under/dress/festivedress + name = "festive dress" + desc = "A red and white dress themed after some winter holidays. Tastefully festive!" + icon_state = "festivedress" + /* * wedding stuff */ @@ -495,6 +571,10 @@ flags_inv = HIDESHOES body_parts_covered = UPPER_TORSO|LOWER_TORSO +/* +Uniforms and such +*/ + /obj/item/clothing/under/sundress name = "sundress" desc = "Makes you want to frolic in a field of daisies." @@ -681,36 +761,10 @@ icon_state = "gear_harness" body_parts_covered = 0 -/obj/item/clothing/under/dress/white - name = "white wedding dress" - desc = "A fancy white dress with a blue underdress." - icon_state = "whitedress1" - flags_inv = HIDESHOES - -/obj/item/clothing/under/dress/white2 - name = "long dress" - desc = "A long dress." - icon_state = "whitedress2" - addblends = "whitedress2_a" - flags_inv = HIDESHOES - -/obj/item/clothing/under/dress/white3 - name = "short dress" - desc = "A short, plain dress." - icon_state = "whitedress3" - addblends = "whitedress3_a" - -/obj/item/clothing/under/dress/white4 - name = "long flared dress" - desc = "A long white dress that flares out at the bottom." - icon_state = "whitedress4" - addblends = "whitedress4_a" - flags_inv = HIDESHOES - -/obj/item/clothing/under/dress/darkred - name = "fancy dark red dress" - desc = "A short, red dress with a black belt. Fancy." - icon_state = "darkreddress" +/obj/item/clothing/under/haltertop + name = "halter top" + desc = "Jean shorts and a black halter top. Perfect for casual Fridays!" + icon_state = "haltertop" /* * swimsuit @@ -909,7 +963,7 @@ desc = "An orange cohesion suit with yellow hazard stripes intended to assist Prometheans in maintaining their form and prevent direct skin exposure." icon_state = "cohesionsuit_hazard" -//Uniforms +//Ranger uniforms //On-mob sprites go in icons\mob\uniform.dmi with the format "white_ranger_uniform_s" - with 'white' replaced with green, cyan, etc... of course! Note the _s - this is not optional. //Item sprites go in icons\obj\clothing\ranger.dmi with the format "white_ranger_uniform" /obj/item/clothing/under/color/ranger diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm index 9cfcc648b5..037ee9dfd5 100644 --- a/code/modules/events/rogue_drones.dm +++ b/code/modules/events/rogue_drones.dm @@ -22,20 +22,21 @@ /datum/event/rogue_drone/announce() var/msg var/rng = rand(1,5) + //VOREStation Edit Start TFF 16/12/19 - Sif -> Virgo 3b switch(rng) if(1) - msg = "A combat drone wing operating in close orbit above Sif has failed to return from a anti-piracy sweep. If any are sighted, \ + msg = "A combat drone wing operating in close orbit above Virgo 3b has failed to return from a anti-piracy sweep. If any are sighted, \ approach with caution." if(2) - msg = "Contact has been lost with a combat drone wing in Sif orbit. If any are sighted in the area, approach with \ + msg = "Contact has been lost with a combat drone wing in Virgo 3b orbit. If any are sighted in the area, approach with \ caution." if(3) - msg = "Unidentified hackers have targeted a combat drone wing deployed around Sif. If any are sighted in the area, approach with caution." + msg = "Unidentified hackers have targeted a combat drone wing deployed around Virgo 3b. If any are sighted in the area, approach with caution." if(4) msg = "A passing derelict ship's drone defense systems have just activated. If any are sighted in the area, use caution." if(5) msg = "We're detecting a swarm of small objects approaching your station. Most likely a bunch of drones. Please exercise caution if you see any." - + //VOREStation Edit End command_announcement.Announce(msg, "Rogue drone alert") /datum/event/rogue_drone/end() diff --git a/code/modules/flufftext/TextFilters.dm b/code/modules/flufftext/TextFilters.dm index 5a40ea1934..c7582fe952 100644 --- a/code/modules/flufftext/TextFilters.dm +++ b/code/modules/flufftext/TextFilters.dm @@ -2,8 +2,8 @@ proc/Intoxicated(phrase) phrase = html_decode(phrase) - var/leng=lentext(phrase) - var/counter=lentext(phrase) + var/leng=length(phrase) + var/counter=length(phrase) var/newphrase="" var/newletter="" while(counter>=1) diff --git a/code/modules/gamemaster/actions/supply_conversion.dm b/code/modules/gamemaster/actions/supply_conversion.dm index 5f05a8cb04..40ed820462 100644 --- a/code/modules/gamemaster/actions/supply_conversion.dm +++ b/code/modules/gamemaster/actions/supply_conversion.dm @@ -11,8 +11,11 @@ var/thaler_earned -/datum/gm_action/nanotrasen_budget_allocation/set_up() +/datum/gm_action/nanotrasen_budget_allocation/New() + ..() SC = supply_controller + +/datum/gm_action/nanotrasen_budget_allocation/set_up() running = TRUE return diff --git a/code/modules/holomap/holomap_area.dm b/code/modules/holomap/holomap_area.dm index 2cc755dfa5..a9677c562e 100644 --- a/code/modules/holomap/holomap_area.dm +++ b/code/modules/holomap/holomap_area.dm @@ -33,7 +33,8 @@ /area/engineering holomap_color = HOLOMAP_AREACOLOR_ENGINEERING -/area/engineering/atmos/intake +//TFF 11/12/19 - Minor refactor, makes mice spawn only in Atmos. +/area/engineering/atmos_intake holomap_color = null /area/maintenance/substation/engineering holomap_color = HOLOMAP_AREACOLOR_ENGINEERING diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index 4ac81ea4cc..74ed4d224e 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -423,7 +423,9 @@ desc = "Enables the sending and receiving of messages on the Exonet with the EPv2 protocol." extended_desc = "An EPv2 address is a string with the format of XXXX:XXXX:XXXX:XXXX. Data can be send or received using the \ second pin on each side, with additonal data reserved for the third pin. When a message is received, the second activaiton pin \ - will pulse whatever's connected to it. Pulsing the first activation pin will send a message." + will pulse whatever's connected to it. Pulsing the first activation pin will send a message.\ + \ + When messaging Communicators, you must set data to send to the string `text` to avoid errors in reception." icon_state = "signal" complexity = 4 inputs = list( @@ -571,7 +573,7 @@ /obj/item/integrated_circuit/input/microphone/sign/Initialize() ..() for(var/lang in readable_langs) - var/datum/language/newlang = all_languages[lang] + var/datum/language/newlang = GLOB.all_languages[lang] my_langs |= newlang /obj/item/integrated_circuit/input/microphone/sign/hear_talk(mob/living/M, msg, var/verb="says", datum/language/speaking=null) diff --git a/code/modules/library/hardcode_library/fiction/APsychonaut.dm b/code/modules/library/hardcode_library/fiction/APsychonaut.dm new file mode 100644 index 0000000000..eb8f34f09d --- /dev/null +++ b/code/modules/library/hardcode_library/fiction/APsychonaut.dm @@ -0,0 +1,153 @@ +/* +CKEY: APsychonaut +CATEGORY: Fiction +*/ + +/// A Purrrrfect Man by Karla. + +/obj/item/weapon/book/bundle/custom_library/fiction/apurrrrfectman + + name = "A Purrrrfect Man" + desc = "A hardbound book titled \"A Purrrrfect Man\" Karla." + description_info = "This book is titled \"A Purrrrfect Man\" Karla. There's a blurb on the back:
\ + A Tajaran woman and a Human man find warmth in each other to ward off the chill of Sif's night." + + title = "A Purrrrfect Man" + icon_state = "book7" + origkey = "APsychonaut" + author = "Karla" + + pages = list({" + + + + +
+
+

A
Purrrrfect Man

+

+ by
Karla

+
+
+
+ + + "}, + {" + + + + +
+ Sasha set down his wrench with a sigh, wiping his toned forearm along his brow to clear the thin sheet of sweat that he'd built up, properly preparing the heating system. It had been a hard day of work for him so far, near alone on the cold plains of Sif. He, along with a scant few other men had been hired to help build a Tajaran lady a secretive cabin amongst the frosty tundra.

+ Katya was a shy young thing, barely breaking twenty-five and already wanting to hide from the world, but if Sasha had learned anything in the last few weeks, it was that her shyness had done nothing to dull how sweet she could be. Seeing he had finished a sizeable section of work, she emerged from the blizzard tent being used as temporary shelter with a steaming hot mug of coco in hand for both of them.

+ Handing over one of the little cups of warmth, she swayed her dark brown furred hips back and forth, watching Sasha take a cautious sip to test the temperature, leaving a thin milk moustache atop his stubbled lip. The little Tajaran smiled at him, and pulled a handkerchief from the waistband of her skirt to dab away at the mark.

+ "Carrreful~" she said, "You'll catch yourrr death of a cold out herrrre if you're not."

+ Sasha smiled back at her, one of his muscular hands going to ruffle at her hair.

+ "You're so kind, miss Katya" he replied, "I just wish there was something I could do to repay such gestures."

+ Katya gave a pleased little sigh at the gesture of affection, the warmth from the coco having seeped into Sasha's hand, and now flowing into her. She took him by the wrist with a cheeky smile, guiding his palm to her cheek instead. His touch was gentle as she redirected him, his tender grasp doing as much to warm her as the steaming milk in her hand.

+ "It gets cold and lonely out herrre all alone. If you rrreally wish to do something morrre forrr herrrr, perrrhaps we can spend some time by the firrre tonight, togetherrrr. Beforrre you go to bed."

+
- 1 -
+
+ + + "}, + {" + + + + +
+ How could Sasha refuse such a request? He gave a bassy chuckle, leaning forward to set an affectionate kiss on the Tajaran's forehead before letting her cheek free.

+ "Of course, miss Katya" he answered, "I've already split the logs from the tree I felled earlier, why don't you set up the fire and I'll finish weather proofing what I've done for the evening? It should be getting dark soon after all."

+ She nodded cheerfuly and wandered off to the firepit by the tents, her tail flicking happily at the prospect of her evening's plans while Sasha lingered with his coco, appreciating every chocolatey second of the kind gesture from his employer. In near no time at all, there was a roaring fire burning at the construction site, providing nearly all the light for the evening as the sun dipped low beyond the horizon. Sasha, having finished his promised work, made his way over to join Katya.

+ Sasha set himself down by the fire and leaned back against his palms spread out behind him, stretching out his weary, muscular back with a growl of satisfaction before twisting slightly to watch the Tajaran prepare for the evening proper. In one hand she carried the ingredients for s'mores, while under that same arm she lugged over a pair of weighty woolen blankets. In her other's grasp, she once again held two steaming mugs, this time filled with decaff tea to settle them in for the night.

+ Katya wasted no time in getting herself close to Sasha, sitting in his lap while setting the mugs aside before spreading the blanket over them. Her tail curled up behind her, the tip wrapping its way around the back of Sasha's neck like a warm, furry scarf, sheltering the sensitive skin from the cold as he was sheltering the rest of her. He wrapped his strong arms around her, taking a moment to rest his nose and chin in her clean, but windswept hair, catching the scent of honey and vanilla from her shampoo.

+
- 2 -
+
+ + + "}, + {" + + + + +
+ There they sat for hours, first in silence as they simply appreciated each other's presence, then amidst a flurry of discussion. He asked of the woman she was, how she grew to be so reserved, why she was so sweet to those around her, what she did to whittle away the hours when she was alone with nothing but her thoughts. She asked of the man he wanted to be, where he wanted to be in the future, who the sort of person was that he envisioned himself being with, and when he wanted to settle down in the future.

+ As the fires of their interest in each other grew, the fire warming the pair slowly petered out into nothingness, neither willing to get up to feed the flames of anything but their desires. Sasha had barely even been willing to relent his graps around Katya's waist, not that she had complained. She had acted the hands for both of them most of the evening, toasting s'mores and leaning back into his toned chest to reach up and pop the marshmellowy goodness into his mouth, usually accompanied by a giggle sweeter than the treat she'd just offered. Sasha had not even touched his tea, all thirst but one sated already.

+ Katya had not anticipated this, however, and as the embers finally died into nothing and she begrudgingly relinquished the intimacy, she was caught off guard while whisking the now chilled mug up to clean it out. The tea spilled everywhere, most of the cool liquid soaking Sasha's work clothing, drawing a gasp of surprise from both of them.

+ "She is so sorrrrry!" Katya exclaimed, hand covering her mouth in a mixture of shock and embaressment, "It was a complete accident!"

+ Though Sasha did not seem remotely angry at the mistake, he was quickly losing body heat in his now soaked clothing, especially now that there was no fire to warm them.

+ His teeth chattered as he replied, "I'm n-n-n-not m-m-m-mad" he replied calmly, "b-b-b-ut that was my only p-p-p-pair of d-d-d-dry clothes!"

+ The Tajaran, experienced with many nights in the cold, sprung into action. "You must get out of yourrrr clothes beforrre you frrrreeze!" she said, panicing.

+ "B-b-but I only h-h-have a s-s-sleeping bag!" he replied, slightly fearful.

+ The Tajaran quickly helped him from his wet clothing, unperturbed by his worries.

+ "You can stay in herrrr tent tonight! We will sharrre body heat, and keep you safe!"

+ Now free from his chilling clothing, she quickly ushered him inside her temporary abode, and bundled under the covers with him.

+
- 3 -
+
+ + + "}, + {" + + + + +
+


\[This page has been torn out of the book by someone.\]



+
+ + + "}, + {" + + + + +
+


\[This page, too.\]



+
+ + + "}, + {" + + + + +
+ The pair of them collapsed breathlessly against each other, each basking in the afterglow of the evening. He gave a quiet, pleased growl, and she a soft purr of satisfaction while cuddling up against Sasha's heaving, sweaty pecs.

+ "I hope--" he said, between growls and breaths, "I hope that you had a nice night, miss Katya..."

+ Having gotten her breath back first, she gave a light nod and tilted her head back, pressing a line of affectionate kisses from chin, to temple, her teeth sinking lightly into her earlobe while she gave her reply, ASMR sending a shiver down his spine from her whispered reply.

+ "It. Was. Purrrrfect..."

+ Outside the wind howled, and the shantaks called to each other in the darkness, but Katya and Sasha blocked it all from their minds as they drifted off to sleep, safe and comfortable in each other's arms.

+
- 6 -
+
+ + + "}) \ No newline at end of file diff --git a/code/modules/library/hardcode_library/fiction/PortedBooks.dm b/code/modules/library/hardcode_library/fiction/PortedBooks.dm new file mode 100644 index 0000000000..e90d36ff53 --- /dev/null +++ b/code/modules/library/hardcode_library/fiction/PortedBooks.dm @@ -0,0 +1,1268 @@ +/* +Here is where we're putting any books being ported from our old database. Should only be used for books submitted by an unknown or inactive player to try and keep ckeys tied to their authors. +Try and keep formatting clean. Also, if you add books with ugly font or color mixes, I WILL destroy you. -- Schnayy + +Category: Fiction +*/ + +/// The Tale of the Rainbow Cat by Miyahara Koichiro, translated by Emily Balistrieri. + +/obj/item/weapon/book/bundle/custom_library/fiction/taleoftherainbowcat + name = "The Tale of the Rainbow Cat" + desc = "A hardbound book titled \"The Tale of the Rainbow Cat\" by Miyahara Koichiro." + description_info = "This book is titled \"The Tale of the Rainbow Cat\" by Miyahara Koichiro. There is a blurb on the back:
\
\ + A wildly imaginative tale of powerful gods and a mischievous cat. Written originally in Japanese, it has been translated to GalCom." + + title = "The Tale of the Rainbow Cat" + icon_state = "book2" + origkey = "Schnayy" + author = "Miyahara Koichiro" + + pages = list({" + + + + + +


+
+

The Tale of the Rainbow Cat +

+ by Miyahara Koichiro

+
+ + + "}, + {" + + + + + +

+ Once upon a time there was a cat, but he wasn’t the kind of cat you’re thinking of. He was from the land of the fairies and his fur was completely unexpected colors. For starters, his nose was violet. His eyes were indigo, his ears were sky blue, his front paws were green, his body was yellow, his back paws were orange, and his tail was red. So he was a mysterious cat of seven colors arranged just like a rainbow. +

+ That rainbow cat went on all sorts of strange adventures. The following story is one of them. +

+ One day while the rainbow cat was sunbathing, he was suddenly vexed by boredom. That is to say, peace reigned in the land of the fairies, so nothing much was going on. +

+ It’s not good for my health to spend all my time idling about as if I haven’t got a care in the world, he thought. Perhaps I should head out and go on an adventure. +

+ So he put a note up on his door: "Dear Mr. Post Man, I will be gone for two or three days, so if any packages or letters come, please throw them down the chimney." +

+ Then he packed a small bag, hung it on his tail, and wobbled off to the border of the land of the fairies. When he arrived, a thick cloud billowed up. +

+ "Well, maybe I’ll drop by the cloud people’s place," he chattered to himself, climbing up the cloud embankment. +

+ The people who lived in cloud country were quite pleasant folks. They didn’t do any work, in particular, but just because they were lazy didn’t mean that they didn’t find the world interesting. They all lived in splendid palaces, of which the ones you couldn’t see from Earth were far more beautiful than the ones you could. +

+ The people of the cloud country sometimes drove pearly gray carriages or went sailing in lightweight boats. They lived in the sky, so the only person they had to fear was Sir Thunder. It’s quite understandable given that he was quick to anger -- he would make the sky rumble with his stomping and go around knocking down their houses. +

+ The people of the cloud country were very happy to have the rainbow cat visit and greeted him politely. +

+ "You’ve come at a great time," they said. "We’re having a big celebration at the Wind God’s house. His eldest son, North Wind is taking the daughter of the King of the Magic Isle as his wife." +

+ The rainbow cat, having thought just such a thing might happen, was prepared with various goods in the bag on his tail. +

+ It was a truly magnificent wedding. +

+ Everyone came. Even Comet showed up. You wouldn’t see Comet unless it was a very fine banquet indeed. +

+ And Aurora came in the most indescribably beautiful garments of light. Of course, the bride’s parents, the King of Magic Isle and his Pearl Oyster Queen, were in attendance. +

+ A feast was served and everyone was in a lively mood, having interesting conversations and drinking, when all of the sudden a swallow flew in. According to him, the giant Sir Thunder was rushing towards them at a tremendous speed. Apparently, when Trade Wind was hurrying by, he had tripped over sleeping Sir Thunder’s toes and Sir Thunder was furious. +

+ "What’ll we do?" everyone wondered at once, their faces pale. "The celebration will be ruined!" +

+ All the guests and the master of the house began to scatter in a panic. +

+ However, the rainbow cat remained calm. He had quite a bit of sense. +

+ The cat crept under the table, opened the small bag he had brought, and gave everything inside renewed consideration. +

+ A moment later, he came back out. +

+ "I’ll find a way to keep Sir Thunder from coming here," said the cat. "So please continue the celebration as you were. I’ll go to him and see what I can do." +

+ Everyone was surprised at how brave and composed the rainbow cat was, but it sounded like their celebration wouldn’t be intruded upon partway through, so they were happy to gather and see off the cat as he raced towards the far-off rumblings of Sir Thunder. +

+ + + "}, + {" + + + + + +

+ The rainbow cat ran until he caught sight of the giant off in the distance. Then he stopped, opened his bag, and took out a big mantle. He put it on with the hood snuggly over his ears, sat down, and pretended to be deep in thought about something or other. +

+ Sir Thunder came upon this mysterious-looking figure in the middle of the celestial road and stopped. +

+ "Hey, who are you and what are you doing here?" he shouted. +

+ "Me? I’m the famed magician Mewpuu," replied the rainbow cat in a voice made to sound serious and important. "Take a look at my bag, here. There are magic seeds inside. Mr. Thunder, I’ve known about you for a while now. You’re quite famous." +

+ Hearing this Sir Thunder felt a bit proud, but his foot was sore, so he was soon angry again. +

+ "Hrmph! I don’t think too highly of magicians. What can you do, anyways?" +

+ "I can read your mind." +

+ "Oh? Is that so? Then try to guess what I’m thinking right now." +

+ "A simple matter. You’re angry because your foot hurts and you want to catch the fellow who kicked your blister, right?" +

+ The rainbow cat had heard all that from the swallow. Sir Thunder was flabbergasted. +

+ "Wow, that’s right. Will you teach me your magic?" +

+ "Sure I will. But first I must test your potential. Have a seat." +

+ Sir Thunder sat down. The rainbow cat walked in a circle around him three times mumbling gibberish under his breath. +

+ "Now then, try to tell me what I am thinking right now," said the cat. +

+ Sir Thunder the giant looked blankly at the cat’s face. He was not very bright. +

+ "You must be thinking that I look pretty foolish sitting here." +

+ "Excellent. Astonishing! You have more than enough talent to begin the training. You may be my brightest disciple yet." +

+ "Then maybe I’ll try one more time." Sir Thunder now thought himself terribly sharp. +

+ "Very well. Try to guess what I’m thinking." +

+ Sir Thunder tried to look wise and peered at the cat’s face with his small, goofy eyes. +

+ "Beef steak and onions," he announced abruptly. +

+ "Brilliant!" the cat feigned surprise and purposely lost his footing to land on his rump. "You’re exactly right. But how did you know?" +

+ "Oh, how do you say...? I guess it just came to me," replied Sir Thunder. +

+ The cat assumed a serious air. "We must cultivate that fine talent of yours!" +

+ "How do we cultivate it?" asked Sir Thunder. He thought being able to read people’s minds was quite fun. +

+ "It’s a cinch," said the cat, finally telling a blatant lie now that he thought he had the giant where he wanted him. "Go home and sleep for two or three hours. Then have some cake and sleep another two or three hours. Then, when you wake up, drink one cup of hot tea. But you have to be as still as possible or it won’t work. If you do all that, by tomorrow morning you’ll be reading people’s minds like it’s nothing." +

+ Sir Thunder wanted to go running straight home, but of course, he couldn’t forget his manners. "Thanks a lot. But Master Mewpuu, what can I offer you in return for teaching me this?" +

+ The rainbow cat thought a moment and said, "I’d like a tiny bit of lightning. Please give me just a smidge." +

+ Sir Thunder the giant put his hand in his pocket and said, "No problem. If that’s all, I have a bundle of it right here, so please take this. When you need it, just undo the string and the lightning will come out in a most amusing way." +

+ "Thank you very much." +

+ Then the cat accepted the bundle of lightning and the two of them courteously shook hands. +

+ Sir Thunder the giant hurried home and did as he was told. Thereafter, he believed that he could guess whatever anyone was thinking. As such, he was quite content, and never caused any more harm. +

+ The rainbow cat took his bundle of lightning and returned to the castle straight away. Everyone was grateful for all he had done for them and thanked him unanimously. The rainbow cat, immensely satisfied, remained at the cloud palace for one week before returning home to the land of the fairies. +

+ What happened after that... is another story. +

+ + + "}) + +/// Woody's Got Wood by Unknown. Literally just a meme entry, a memory of a different time. + +/obj/item/weapon/book/custom_library/fiction/woodysgotwood + name = "Woody's Got Wood" + desc = "A barely held together book titled \"Woody's Got Wood\". There doesn't seem to be an author listed." + description_info = "This worn book is titled \"Woody's Got Wood\" and has no author visibly listed. Just holding it gives you a sense this is from a different time." + + title = "Woody's Got Wood" + icon_state = "book1" + origkey = "Schnayy" + author = "Unknown" + + dat = {" + + + + + +
+
+

Woody's Got Wood

+
+

+ One day while Andy was mas +





+ It fades out quickly into worn, blank pages. You feel as though you've found a relic of times long past. +
+ + + "} + +///Song from Arcadia: My True Love Hath My Heart by Sir Philip Sidney. + +/obj/item/weapon/book/custom_library/fiction/truelovehathmyheart + name = "My True Love Hath My Heart" + desc = "A hardbound book titled \"Song from Arcadia: My True Love Hath My Heart\" by Sir Philip Sidney." + description_info = "This book is titled \"Song from Arcadia: My True Love Hath My Heart\" by Sir Philip Sidney. It appears to be a short poem." + + title = "My True Love Hath My Heart" + icon_state = "book6" + origkey = "Schnayy" + author = "Sir Philip Sidney" + + dat = {" + + + + +

Song from Arcadia:
"My True Love Hath My Heart"

+ by Sir Philip Sidney +
+
+ My true-love hath my heart and I have his,
+ By just exchange one for the other given:
+ I hold his dear, and mine he cannot miss;
+ There never was a bargain better driven.
+ His heart in me keeps me and him in one;
+ My heart in him his thoughts and senses guides:
+ He loves my heart, for once it was his own;
+ I cherish his because in me it bides.
+ His heart his wound received from my sight;
+ My heart was wounded with his wounded heart;
+ For as from me on him his hurt did light,
+ So still, methought, in me his hurt did smart:
+ Both equal hurt, in this change sought our bliss,
+ My true love hath my heart and I have his.
+
+ + + "} + +/// An Irish Airman Forsees His Death by W.B. Yeats. + +/obj/item/weapon/book/custom_library/fiction/irishairmanforseesdeath + name = "An Irish Airman Forsees His Death" + desc = "A hardbound book titled \"An Irish Airman Forsees His Death\" by W.B. Yeats." + description_info = "This book is titled \"An Irish Airman Forsees His Death\" by W.B. Yeats. It is a poem from the point of view of an aircraft pilot in Earth's First World War." + + title = "An Irish Airman Forsees His Death" + icon_state = "book2" + origkey = "Schnayy" + author = "W.B. Yeats" + + dat = {" + + + + +

An Irish Airman Forsees His Death

+ by W.B. Yeats +
+
+ I know that I shall meet my fate
+ Somewhere among the clouds above;
+ Those that I fight I do not hate
+ Those that I guard I do not love;
+ My country is Kiltartan Cross,
+ My countrymen Kiltartan’s poor,
+ No likely end could bring them loss
+ Or leave them happier than before.
+ Nor law, nor duty bade me fight,
+ Nor public men, nor cheering crowds,
+ A lonely impulse of delight
+ Drove to this tumult in the clouds;
+ I balanced all, brought all to mind,
+ The years to come seemed waste of breath,
+ A waste of breath the years behind
+ In balance with this life, this death. +
+ + + "} + +/// Poems by Wilfred Owen, renamed to "Poems for a Rainy Day: A Collection of Poetry by Wilfred Owen". + +/obj/item/weapon/book/bundle/custom_library/fiction/poemsforarainyday + name = "Poems for a Rainy Day" + desc = "A hardbound book titled \"Poems for a Rainy Day\" by Wilfred Owen." + description_info = "This book is titled \"Poems for a Rainy Day\" by Wilfred Owen. It's a collection of three poems by an old Earth poet by the name of Wilfred Owen." + + title = "Poems for a Rainy Day" + icon_state = "book3" + origkey = "Schnayy" + author = "Wilfred Owen" + + pages = list({" + + + + +


+
+

Poems for a Rainy Day


+ A Collection of Poetry
by Wilfred Owen


+
+ + + "}, + {" + + + + + Anthem for Doomed Youth +
+
+ What passing-bells for these who die as cattle? +

-- Only the monstrous anger of the guns.

+

Only the stuttering rifles' rapid rattle

+ Can patter out their hasty orisons.

+ No mockeries now for them; no prayers nor bells; +

Nor any voice of mourning save the choirs,--

+ The shrill, demented choirs of wailing shells; +

And bugles calling for them from sad shires.


+ What candles may be held to speed them all? +

Not in the hands of boys, but in their eyes

+ Shall shine the holy glimmers of goodbyes. +

The pallor of girls' brows shall be their pall;

+ Their flowers the tenderness of patient minds,

+ And each slow dusk a drawing-down of blinds. +
+ + + "}, + {" + + + + + The Send-Off +
+
+ Down the close, darkening lanes they sang their way
+ To the siding-shed,
+ And lined the train with faces grimly gay.

+ Their breasts were stuck all white with wreath and spray
+ As men's are, dead.

+ Dull porters watched them, and a casual tramp
+ Stood staring hard,
+ Sorry to miss them from the upland camp.
+ Then, unmoved, signals nodded, and a lamp
+ Winked to the guard.

+ So secretly, like wrongs hushed-up, they went.
+ They were not ours:
+ We never heard to which front these were sent.

+ Nor there if they yet mock what women meant
+ Who gave them flowers.

+ Shall they return to beatings of great bells
+ In wild trainloads?
+ A few, a few, too few for drums and yells,
+ May creep back, silent, to still village wells
+ Up half-known roads.
+
+ + + "}, + {" + + + + + Dulce et Decorum Est +
+
+ Bent double, like old beggars under sacks,
+ Knock-kneed, coughing like hags, we cursed through sludge,
+ Till on the haunting flares we turned our backs,
+ And towards our distant rest began to trudge.
+ Men marched asleep. Many had lost their boots,
+ But limped on, blood-shod. All went lame; all blind;
+ Drunk with fatigue; deaf even to the hoots
+ Of gas-shells dropping softly behind.

+ Gas! GAS! Quick, boys! -- An ecstasy of fumbling
+ Fitting the clumsy helmets just in time,
+ But someone still was yelling out and stumbling
+ And flound’ring like a man in fire or lime.--
+ Dim through the misty panes and thick green light,
+ As under a green sea, I saw him drowning.

+ In all my dreams before my helpless sight,
+ He plunges at me, guttering, choking, drowning.

+ If in some smothering dreams, you too could pace
+ Behind the wagon that we flung him in,
+ And watch the white eyes writhing in his face,
+ His hanging face, like a devil’s sick of sin;
+ If you could hear, at every jolt, the blood
+ Come gargling from the froth-corrupted lungs,
+ Obscene as cancer, bitter as the cud
+ Of vile, incurable sores on innocent tongues,--
+ My friend, you would not tell with such high zest
+ To children ardent for some desperate glory,
+ The old Lie: Dulce et decorum est
+ Pro patria mori.

+
+ + + "}) + +///Silence by Samara McCollough. + +/obj/item/weapon/book/bundle/custom_library/fiction/silence + name = "Silence" + desc = "A hardbound book titled \"Silence\" by Samara McCollough." + description_info = "This book is titled \"Silence\" by Samara McCollough. It appears to be an excerpt from a longer novel." + + title = "Silence" + icon_state = "book1" + origkey = "Schnayy" + author = "Samara McCollough" + + pages = list({" + + + + + +

+

Silence

+



+ By
Samara McCollough
+ + + "}, + {" + + + + +
+ The door gave under Sergei's gloved fist and crashed silently to the floor, twisted around its remaining plastic hinge.

+ "Whoops," Sergei's voice mumbled through the earpiece. Michael didn't need to look at the his partner to know that beneath his helmet, the Texan was cringing.

+ "S'all right." A pristine environment would make their job easier, but salvaging didn't require perfection. Michael softly shouldered past the younger man and moved into the abandoned living quarters, careful not to snag his suit. Other than the ruined door, the room was in mint condition. Depressurization had clearly been a gentle process here; air slowly leaking through seals that had been designed for hours of vacuum exposure, not years. The left side of the room was taken up by a desk, with a bunk bed situated at a comfortable height above. On the right was what appeared to a be a closet set into the wall, as well as a recessed table with some kind of lab equipment on it which Michael's salvaging experience immediately filed away as valuable.

+ The cabin's walls, floors, furniture, and even bed sheets were an almost uniform gray. Any discernible difference in shade was whitewashed out by the harsh light emanating from a large rounded rectangle in the wall opposite to the door. Michael stared at the rectangle, not sure he believed what he was seeing. Behind him, Sergei swore softly.

+ "That's a real window." He murmured. "Like, not a screen. I've never seen one of those on a starship before."

+ "Me neither." Michael wondered what it was made of. Even from the doorway he could see that the material had to be more than half a meter thick, completely penetrating the inner and outer hull of the ship. Suddenly anxious, he checked his Geiger; the rad count was unchanged. He grunted in surprise. "Well, it's shielded, whatever it is. Let's get what we came for." +
+ + + "}) + +///My Rock by Roman Pilduski + +/obj/item/weapon/book/custom_library/fiction/myrock + + name = "My Rock" + desc = "A hardbound book titled \"My Rock\" by Roman Pilduski." + description_info = "This book is titled \"My Rock\" by Roman Pilduski." + + title = "My Rock" + icon_state = "book7" + origkey = "Schnayy" + author = "Roman Pilduski" + + dat = {" + + + + + My Rock
+ by Roman Pilduski

+
+
I have a rock. It is with me anywhere I go.

+ I'm accustomed to my rock, its weight is always present.

+ Sometimes, I dream of it not crushing me so.

+ But those are fantasies, my rock will not relent.

+ Other people have rocks too, some different I suppose.

+ Documenting everyone's rocks though is difficult in prose.

+ A few I know have boulders, so heavy it crushes them.

+ Many, their rocks are so small they do not notice they exist.

+ But everyone has a rock, big or small, acute or numb.

+ I chip away at my rock, hoping one day it will be missed.

+ I have a rock, it is with me everywhere I go;

+ and if anyone asks, of this rock I do not know.

+
+ + + "} + +/// Ghost Ship by Ogawa Mimei + +/obj/item/weapon/book/bundle/custom_library/fiction/ghostship + + name = "Ghost Ship" + desc = "A hardbound book titled \"Ghost Ship\" by Ogawa Mimei." + description_info = "This book is titled \"Ghost Ship\" by Ogawa Mimei. It seems to be a fictional story about three fishermen." + + title = "Ghost Ship" + icon_state = "bookHacking" + origkey = "Schnayy" + author = "Ogawa Mimei" + + pages = list({" + + + + + +


+
+

Ghost Ship

+ by Ogawa Mimei

+
+ + + "}, + {" + + + + +
+ You can see lights shining far out at sea. In an area like this one, right around the arctic, the blue-black water of the ocean is immense and it's always cold. Once a shining light in the distance was coming closer and closer to the shore. The closer it came, the more clearly it could be seen. It was an iceberg. The iceberg was big, pointed upwards like a mountain and reflected a piercing light, and also had an area flat and wide enough to carry a large number of people. And of course there is no way of telling how far down the iceberg continued below the surface of the water. All icebergs are formed from crystal-like ice and drift with the currents of the sea. It seemed as if a new iceberg came into sight almost every day. Once there was a huge, slow-moving hunk of ice flowing aimlessly, and even from far off, we were afforded a view of its glittering peak. The lonesome setting sun broke through the clouds and the light which shone from the iceberg reflected in the eyes of those who stood on the shore, all gazing upon the mountain of ice as it moved further and further away. Another time an iceberg came towards us with frightening speed, like a frozen steam ship. Up upon this white, shining piece of ice was not a shadow of a living thing to be seen.

+ Once an iceberg came in close to the shore and everyone saw a small black silhouette fall into the ocean.

+ "Some kind of black bird, maybe?"

+ "A bird? More like a sea lion or a seal."

+ So said the people standing on the shore looking out over the sea. However, when it came in even closer, they could see that it was a bear. It was angry and trying its hardest to get to the shore. Most likely the bear had ventured out onto the ice to play, but while the bear was playing the sheet of ice would have become separated and the bear would have found itself lost at sea. Everyone knew nothing good would come from that bear making it onto land. It would probably lash out.

+ "Alright, everyone, just keep your guard up. If that bear makes it to the shore there is no telling what might happen," was what the people had said. And so the people brought with them rifles and spears. But the iceberg never came close enough to the shore, and eventually it floated back out to sea. Everyone was relieved that the bear never made it ashore, but it was actually a little depressing to think about where that bear would have ended up.

+ These are the kinds of things that happen in the north. And that is the kind of story I'll tell you today. +

+
I
+ + + "}, + {" + + + + +
+ "There haven't been any icebergs lately and the sea is so calm. Why don't we go on a fishing trip?" said one of three fishermen one day. So they boarded their boat and headed out to sea. The three fishermen eventually came close to an island. No one lived on the island and it had a little inlet where there was often some good fishing to be had. So they decided to stop and try to catch some fish, all the while mindful of the time. When they did catch fish, they normally caught a surprising amount. Just when the three fishermen were wondering if they should move on to the next fishing spot, they could see signs that today's catch would be a good one.

+ "Looks like we're in luck"

+ "Luck indeed!"

+ The three fishermen were in high spirits. They dropped their net into the water and when they pulled it back up, they found themselves with a bigger catch of fish than ever before. It was such a big catch, in fact, that they left the fish on the shore of the island to pick up on the way home, as too much fish in the boat would only slow them down.

+ One of the three fishermen remained on the island. In the evening he would light a fire to let the other two know where he was as they sailed home. So the first fisherman stood on the shore and watched as the second and third fisherman pushed off from the island and into the sea with a heave and a ho. + "Hurry back, alright?!" the first fisherman called out to his two friends.

+ "Miss us already? Don't worry, we'll drag ourselves back your way," the pair called back with a chuckle as they floated further and further away. A quiet evening began to set in as the first fisherman watched the boat drift out to sea until it disappeared into the blue-black of the ocean. When he was a child he thought the surface of the ocean looked flat as a straw mat, but the rippling, violent sea was nothing like that now. The wind picked up as the sun went down. It was sudden and unexpected. Soon the waves grew high and howling. The first fisherman began to worry about his two friends who were still out at sea.

+ "Bring my friends back in one piece, as quickly as you can," he prayed as he set about starting a bonfire to guide his friends through the dark of the night. The weather turned to wind and rain. The fire that the first fisherman had started was eventually blown out. So the first fishermen set about feverishly starting another fire. But the boat he was waiting to arrive never did. +

+
II
+ + + "}, + {" + + + + +
+ "I wonder where they might be taking shelter from the storm. There is no where else to go in this wide, wide ocean. They must have sunk...”

+ The first fisherman had started to worry as the stormy night turned to complete darkness. Whenever he looked out, the waves of the ocean were winding into the skies above. He could see no sign of a boat. The first fisherman had been abandoned on the small, deserted island. He stood on the rocks of the shore and waited a full day for his friends to return. But perhaps because the winds from yesterday had made the ocean rough, the sun that day went down without any sign of the boat he had been waiting for.

+ Three days passed. The first fisherman had started to grow weak. Finally, after standing on the beach looking intently out over the ocean for three days, the boat carrying his friends cut through the waves and sailed towards the beach. It felt like a thousand years since he had seen them last. He could see that the second fisherman and the third fisherman were fine and moving about on the boat.

+ "Hey!" the first fisherman called out over the water, raising both of his hands high in the air. When he did, it looked like they too had thrown their hands in the air and called back. Only he couldn't hear their voices. Just then as the setting sun illuminated the tips of the waves, the two fishermen on the boat came into sight, red in the face.

+ "Ahh, here's a sight for sore eyes, my two friends! They made it back alive," said the first fisherman, warm tears of joy swelling in his eyes. Before long the boat was nearly on the sand.

+ "Hey!" the first fisherman called out, his hand in the air. He thought the other to fishermen would respond, but just as the pair were about to turn to the side and bring their boat in, they disappeared like a puff of smoke. The first fisherman was shocked.

+ "A ghost ship!” +

+
III
+ + + "}, + {" + + + + +
+ The first fisherman lost all hope, threw himself down on the sand and began to cry. His imagination was running wild, and his nightmares ran through the night. When he awoke the next morning his eyes were blood-shot and his heart was pounding. It was just past midday. The first fisherman raised his head and looked out over the sea only to spot the same boat in the distance. But it was the same as yesterday, a ghost ship, that had come to the island. For a moment he was relieved, and happiness danced in his chest, but in the next instant his body shook with fear.

+ "Damn it. Are they trying to kill me?” said the first fisherman, as he started to lose his mind. The boat cut through the waves and came in closer and closer to the island. The first fisherman pulled out his pistol, aimed at the boat and pulled the trigger. But this time the boat wasn't a ghost, and it didn't disappear. Once the boat was docked at the beach, the two other fishermen scrambled up onto land.

+ "Have you gone completely mad?” yelled one, which was enough to snap the first fisherman back to reality.

+ The first fisherman had gone completely mad. That night the winds had caused the boat to be pushed back against a nearby island. Once the waves had died down, the two fishermen went back to the island to rescue their friend. The two fishermen got their crazy friend back on the boat and returned to the mainland. The pair cared for their weakened friend, and through their care he was able to lose his madness and returned to how he used to be. And from there the three friends went on to be even better friends for a very long time. This story is still told in the harbors to the north where the head of that deserted island still pokes up from between those blue black waves. +

+
IV
+ + + "}) + +///The Metal Glen by Jawn Mancer + +/obj/item/weapon/book/bundle/custom_library/fiction/metalglen + + name = "The Metal Glen" + desc = "A hardbound book titled \"The Metal Glen\" by Jawn Mancer." + description_info = "This book is titled \"The Metal Glen\" by Jawn Mancer. It is a poem about a hare and a cat." + + title = "The Metal Glen" + icon_state = "book1" + origkey = "Schnayy" + author = "Jawn Mancer" + + pages = list({" + + + + + +


+
+

The Metal Glen



+ Jawn Mancer

+
+ + + "}, + {" + + + + +
+ My mother told me once of when
+ A young hare ventured from her den
+ And as she danced in field and glen
+ The world sang joy about her.
+ But wicked hateful things abound
+ And that young hare these evils found
+ Then whisked her up from off the ground
+ And glen was left without her.

+ The wicked power tore asunder
+ And with this cruel and fateful blunder
+ Cast her to a world of wonder
+ Would she e'er see home again?
+ And so hare flew that mournful day
+ Over the sky and far away
+ And down and down, beneath the sea
+ To a place unlike the glen.

+ A world of men and man's design
+ A place where God's light would not shine
+ A Hell of steel beneath the brine
+ Where misery's echoes boomed.
+ And all around her there were others
+ Beasts like her, all sisters, brothers,
+ Locked up, all, with one another,
+ In deep sea-dark, entombed.

+ And in this crypt far from the shore
+ The hare lay down upon the floor
+ Imprisoned there forever more
+ And left to all her sorrow.
+ Her tender world was lost and gone
+ So joy and happiness foregone
+ She slept and cried and prayed for dawn
+ To wait the coming morrow.

+ The hound was still, the birds said naught,
+ The fox denied he had been caught,
+ The bear cried "This is just our lot",
+ And surrendered to his pain.
+ But the cat stood up and shook his head
+ And rising from his metal bed
+ He said: "For now, I am not dead,
+ And I will not die in vain!
"

+ He cried aloud with much disdain
+ And tore about his stark domain
+ And said "These walls cannot contain
+ A force as strong as I!
"
+ And the fox just laughed, and the birds all cried
+ And the bear knotted up himself and died
+ But the hare looked on as the poor cat tried
+ To break him free and fly.

+ He shook his chain with all his rage
+ And flew in anger 'round his cage
+ Decrying this dark mournful stage
+ And the hare stood up as well.
+ With passion did she then respond,
+ She chewed her ropes and broke her bonds,
+ And freed the cat, they ran beyond,
+ The ran to flee that Hell.

+ And what became of cat and hare?
+ Did they break free to purer air?
+ To guess their fate we shouldn't dare
+ Perhaps their tale closed well.
+ But for all the beasts trapped in the Nether
+ All life from out of loch and heather
+ The flock that could not work together
+ Are sure still trapped in Hell.

+ Incense sweet, and cradled warm
+ Like lovers coddled, arm in arm
+ Two souls, nomadic, fleeing harm:
+ That wicked, metal glen.
+ Now coming morn drives off the curse
+ Too startled still to dare converse
+ Both praying they have seen the worst
+ So ends their tale -- +
+
+ + + "}) + +/// RA - Issue 142 by Jawn Mancer + +/obj/item/weapon/book/bundle/custom_library/fiction/raissue142 + + name = "RA - Issue 142" + desc = "A hardbound book titled \"RA - Issue 142\" by Jawn Mancer." + description_info = "This book is titled \"RA - Issue 142\" by Jawn Mancer. It appears to be part of an apocalyptic series." + + title = "RA - Issue 142" + icon_state = "book7" + origkey = "Schnayy" + author = "Jawn Mancer" + + pages = list({" + + + + + +


+
+

RA
-
Issue 142
+

+ by Jawn Mancer

+
+ + + "}, + {" + + + + +
RA - Issue 142

+
+
"Engie! You must be calm when waking the animals! I hope you are better at ice-skating and making nests!" was the Captain's critique when I explained where and why I had left the "most precious shovel".

+ "Do you how the cost of shovel replacement?! I'd have to take on another business loan and the bank manager is already giving me dirty looks and not talking to me!" Captain had continued to rant. If the Photoshop worm monster ate me instead of the shovel, I think Captain would be slightly less upset.

***

+ Was that even Photoshop? It seemed slightly bigger and longer. Can't be sure of anything these days. I'm afraid that someday I'll finally succumb to botulism or some sort of other poisoning and that will be the end.


+ I'll see something that's not there and fall off a cliff. Or slip into a snow crevice and slowly sink deeper and deeper... and nobody will find me or help me.

+ Brrr.

***


+ I find myself developing a severe paranoia of snow in addition to my severe hypochondria.

+ After my encounter with the shovel-eating monster, I started to throw rocks ahead of me and then walk only onto the spots where the rocks didn't sink into the snow.

+ You can never be sure that there isn't something horrible under there.

+ EVER. +
+ + + "}, + {" + + + + +
+ Thank god my Chionophobia isn't anywhere like Snippy's. He seems calm on the surface, except some times.... Eeesh.

+ I recollect that one time he went completely bonkers when a large snowflake fell onto his lens. Freaking out, flailing and screaming, total full psychotic breakdown. Thank god Captain poured tea onto his mask as a distraction of sorts.

+ He even ranted afterwards about living snowflakes and how they planned to shatter his lenses, cut him up and drill into his head to sample his organic juices.

+ "Watch out for the snowflakes," he later told me. "They cannot be trusted!"

+ "What are they gonna do? Pick me up and carry me away to the North Pole?" I jokingly commented.

+ "I am serious!! I'm not crazy! I know it sounds crazy, but the snowflakes were planning to kill us all!" He shouted, flapping his arms psychotically.

***


+ Snippy's mental condition worries me. I think Captain is only aggravating it with nonsensical demands.

+ I hope that Snippy doesn't stab me with a trowel, while my back is turned. What if he's extremely jealous of my shovel's size and if it only takes a little snowflake to push him over the edge...

+ What if he discovers, remembers who I am?

+ What if he suspects things? What if he already knows my real name and is waiting for the right moment to strike, to take revenge on his old boss for all the things I've done to him?

+
+ + + "}, + {" + + + + +
+ I'm afraid of Charles Snippy. So very afraid.

+ He always keeps glancing at that little Captain's heart cup like that thing is about to grow legs and walk off or something.

+ "Jeez. It's just a cup man, relax," I told him.

+ "No" he answered, "It is something abhorrent! It's motives are unclear! I know whether not to trust it!" He began to postulate.

***


+ I think that Snippy's mental state is slowly sliding towards Captain's. Talking to inanimate objects, inventing strange stories, shouting at nothing.

+ Recently I overheard Snippy yelling:

+
"I'm ALIVE! WHAT? No! You did WHAT?! I'm alive, I don't care what it is you did!"


+ I looked through a crack in the wall at him. He was definitely having another episode. From the one sided conversation and his hand poses I deduced that he was talking to his scarf.

***

+ "I am human! I just want to be normal!"

+ Snippy shouted;

+
"STOP ASKING!"
+ "TOO LATE?!"
+ "WOULD YOU PLEASE LEAVE MY SPINE ALONE!"
+ "PUT MY LIVER BACK!"
+ "STOP SLIDING MY ORGANS AROUND!"
+ "WHAT?!"
+ "DON'T DO THAT!"
+ "NO, I DON'T WANT TO EAT METAL!"
+ "I DON'T CARE HOW CONVENIENT IT IS TO HAVE SEVENTEEN APPENDAGES!"

+ I figured Snippy imagined that the scarf kept offering him some kind of super-powers, including immortality and he was rejecting them. +
+ + + "}, + {" + + + + +
+ When I was young, I often wished somebody offered me superpowers.

+ Sigh.

+ I'd be like "Hells yeah, I'd like to be immortal and have the strength of 10". I always hated the novels in which characters chose to be human instead of accepting greatness. This was one of the reasons I've created Project Seven- to find someone who is truly great... even if lacking the human condition. I really should have known that a super with powers of luck would turn out to be a highly confused, carefree imbecile.

***


+ Was I wrong? Maybe.

+ Did I doom humanity by launching that search query?
+
Perhaps.

***

+ Now that the city is dead and my hopes and dreams lay shattered and radioactive, I've nothing to hang onto, except my own life. I must survive. I am afraid of death. Terribly afraid.

+ I must not give up. I must choke down another decade-old tuna can, no matter how foul it tastes.

+ ...I'll still have a chance to survive, to avoid death's dark embrace as long as I stick close to Captain. As long as I am in Captain's general vicinity or on Captain's missions, as long as I am needed by Captain, everything will probably be fine. +
+ + + "}) + + +/// RA - Issue 147 by Jawn Mancer + +/obj/item/weapon/book/bundle/custom_library/fiction/raissue147 + + name = "RA - Issue 147" + desc = "A hardbound book titled \"RA - Issue 147\" by Jawn Mancer." + description_info = "This book is titled \"RA - Issue 147\" by Jawn Mancer. It seems to be part of an apocalyptic series." + + title = "RA - Issue 147" + icon_state = "book7" + origkey = "Schnayy" + author = "Jawn Mancer" + + pages = list({" + + + + + +


+
+

RA
-
Issue 147
+

+ by Jawn Mancer

+
+ + + "}, + {" + + + + +

RA - ISSUE 147

+
+

ENTRY 57893__3342 : PRIORITY 1 ADMIN : DR ALEXANDER GROMOV :

+ "I am immune to the broadcasting signal." Snippy said and it suddenly dawned on me.

+ The weak broadcasting signal that was coming from the Undead... it reactivated my own neural receivers!

+ It meant that I could potentially access some sort of useful information via the G-Directorate subnet drive in my backpack.

+ Information that I presumed lost. Information about ANNET's new army of spam-bots, their positions, their weaknesses.

+ Anything that could help me survive this mess.

+ "R:/login admin control... launch grid browser protocol... private browsing, full control," I whispered.

+ The broadcasting signal responded! A little G appeared in my right eye, with signal strength signage.

+ It showed one and a half signal bars. Good enough!

+ Glowing letters formed in my right eye.

+
+ + + "}, + {" + + + + +
+
***
+ YOUR NEURAL GRID BROWSER IS NOW LOADING.
+ PLEASE ATTEMPT RIGHT CLICKING A RANDOM OBJECT FOR INTERFACE SYNCHRONIZATION
+ ***


+ I blinked with my right eye on Snippy.

+ Terrifyingly enough, it actually worked! A little menu popped up in my right eye, highlighting Snippy.

+
***
+ ATTEMPTING NEURAL CONNECTION WITH SUBJECT.

+ NO NEURAL RESPONSE RECEIVED FROM SUBJECT'S MIND.

+ WARNING! FAILURE TO DETECT NEURAL WAVE ON ALL KNOWN BANDS.
+ SUBJECT'S MENTAL NEURAL PATTERN DEEMED... UNSCANNABLE.
+ SUBJECT IS CONFIRMED TO BE BRAIN-DEAD.
+ ***


+ "Wait... you are... UNSCANNABLE?!" I cried out in surprise.

+ What did Snippy just ramble back? He's the last one? What?

+ Does he not even realize that he's theoretically brain dead?

+ Has nobody ever told him that?

+ Perfect un-scannability while still breathing is biologically impossible!

+ The menu in my right eye was expanding:

+
***
+ VISUAL SCAN OF SUBJECT COMPLETED.
+ PERSONAL ID 04477645 HOLOGRAPHIC TAG LOCATED ON JACKET.

+ HUMAN SUBJECT -- CHARLES SNIPPY --
+ DEAD ZONE TOUR GUIDE EMPLOYEE
+ TRANSFERRED FROM EUREKA, G-CUBE 15.
+ IF FOUND DECEASED, PLEASE CONTACT D.Z.R.&T. OFFICE 24-12.

+ WARNING: TRACKER-IMPLANT NOT FOUND/DEACTIVATED!
+ WARNING: MASSIVE VIOLATION OF AUTHORIZED TOURIST ROUTE!
+ NOTICE: IF THIS IS YOUR TOUR GUIDE, YOU ARE NOW CONSIDERED LOST.

+ WARNING: DO NOT HIRE. CREDIT SCORE IS MINUS INFINITY.
+ ***
+
+ + + "}, + {" + + + + +
+ I quickly began to digest this information.

+ Cube 15... Dead Zone Research and Tourism Department? ... Charles... is Unscannable?

+ What does that even mean? How can someone's mind be completely unscannable? That would mean what... That he has no readable brain-wave?!

+ I've never met my employees face to face, and I simply assumed that he was simply a bothersome fellow on disability status that kept filing complaints and then got transferred to DZRT.

+ I assumed he perished with the others when the Dead Zone "Godcatchers" experiment went horribly wrong.

+ When Captain introduced me to him, I was shocked, but my current shock doesn't even compare to this.

+ I didn't realize he was "unscannable", such is simply improbable!

+ I mean come on! I saw him eating beans this morning!. He's not brain-dead!

+ Is he?!

+ There were those who could not use the Neural Interface, but fully Unscannable? What the hell?!

+ I have to calm myself. Unscannability is impossible. The Grid must be broken.

+ It is giving me illogical answers.

+ Oh.. and... Minus infinity credits? How is that even mathematically possible? I've heard of bad credit scores, but this is ridiculous!

+ This scan and information is simply full of errors. That's it. Stupid errors. Ha ha Har.

+ As I speculated wildly, the neural signal had decided to respond to my rabidly circular thought patterns:

+
+ + + "}, + {" + + + + +
+
***
+ CUBE 15. EMPLOYMENT RECORDS OF DECEASED CHARLES SNIPPY:
+ FORMER CLERK, LEVEL 24.

+ ERROR CORRECTION:
+ SCAN CONFIRMS HEAT SIGNATURE/HEARTBEAT.
+ "DECEASED" STATUS HAS BEEN TEMPORARILY UPDATED TO "LIVING".

+ NOTICE:
+ GREETINGS ANNET USER!
+ PLEASE CONSIDER THE FOLLOWING IF YOU ARE TO ATTEMPT COMMUNICATION WITH THIS PARTICULAR INDIVIDUAL.
+ INDIVIDUAL KNOWN AS CHARLES SNIPPY IS IN FACT NOT BRAIN-DEAD,
+ AS IT MIGHT SEEM AT FIRST, BUT HAS THE STATUS OF A MENTALLY DISABLED USER.
+ THIS MEANS THAT HE CANNOT INSTANTLY READ YOUR MIND-TEXTS, NOR TEXT BACK TO YOU!


+ IF YOU WISH TO COMMUNICATE WITH CHARLES, PLEASE FORWARD YOUR TEXTS TO WATCHER DRONE 17-94-15, HOVERING ABOVE SNIPPY.
+ THE DRONE WILL AUDIBLY TELL CHARLES WHAT IT IS YOU WANT FROM HIM.

+ ERROR: WE ARE SORRY. ASSIGNED DRONE # 17-94-15 IS CURRENTLY UNAVAILABLE.
+ A REPORT HAS BEEN FILED TO ANNET.
+ PLEASE REMAIN CALM!

+ CONSIDER USING YOUR MOUTH MUSCLES OR DRAWING SOMETHING ON PAPER TO COMMUNICATE WITH THE DISABLED INDIVIDUAL.
+ BE AWARE THAT BY AGREEMENT OF USAGE OF SUCH COPYRIGHTED FORMS OF DIRECT COMMUNICATION, YOU WILL BE CHARGED 173 CREDITS PER LETTER.


+ MAINTAIN A RELAXED STATE OF POSTERIOR!
+ BE AWARE THAT WHEN CONFUSED OR THREATENED BY YOUR SUPERIOR METHODS OF NEURAL PROXY COMMUNICATION,
+ THIS INDIVIDUAL MAY VIOLENTLY VIOLATE YOUR PERSONAL SPACE.
+ ***


+ There was much more informative gibberish to read in my right eye about Charles Snippy, but Snippy suddenly smacked me right in the head, breaking my concentration.

+ Ouch!

+ He told me to go downstairs (obviously) and when I begged him to join me, he simply forcibly shoved me down the stairs and ran off into the smoke.

+ Argh!

+ I descended into the building's basement, tripping on rubbish and quickly left the burning skyscraper, avoiding the Zombie-bots by constantly looking at the neural signal bars.

+ If I had more time I'd put together a program that would track their movements in a 3D space, but alas, I was far too busy escaping and gasping for air. + As I jogged across the ruined street I pondered about Snippy's fate... +
+ + + "}) + +///Serenity by Hold Hill (Cold Mountain). Renamed and reauthored to match original writer. + +/obj/item/weapon/book/bundle/custom_library/fiction/coldmountain + + name = "Cold Mountain" + desc = "A hardbound book titled \"Cold Mountain\" by Han Shan." + description_info = "This book is titled \"Cold Mountain\" by Han Shan. It is a collection of three poems." + + title = "Cold Mountain" + icon_state = "book5" + origkey = "Schnayy" + author = "Han Shan" + + pages = list({" + + + + + +


+
+

Cold Mountain



+ by Han Shan

+
+ + + "}, + {" + + + + + I +
+
+ My father and mother left me a good living;
+ I need not envy the fields of other men.
+ Clack-dack: my wife works her loom,
+ Jabber, jabber: goes my son at play.
+ I clap hands, urging on the swirling petals,
+ Chin in hand, I listen to singing birds.
+ Who comes to commend me on my way of life?
+ Well, the woodcutter sometimes passes by. +
+
+ + + "}, + {" + + + + + II +
+
+ A thatched hut is home for a country man;
+ Horse or carriage seldom pass my gate:
+ Forests so still all the birds come to roost,
+ Broad valley streams always full of fish.
+ I pick wild fruit in hand with my child,
+ Till the hillside fields with my wife.
+ And in my house what do I have?
+ Only a bed piled high with books.
+
+
+ + + "}, + {" + + + + + III +
+
+ You have seen the blossoms among the leaves;
+ Tell me, how long will they stay?
+ Today they tremble before the hand that
+ picks them;
+ Tomorrow they wait someone's garden broom.
+ Wonderful is the bright heart of youth,
+ But with the years it grows old.
+ Is the world not like these flowers?
+ Ruddy faces, how can they last?
+
+
+ + + "}) + +/// Tha' Story o' tha' Blacksmith an' tha' Kingly Bloke by Haggis MacDougall + +/obj/item/weapon/book/custom_library/fiction/blacksmithandkinglybloke + + name = "Tha' Story o' tha' Blacksmith an' tha' Kingly Bloke" + desc = "A hardbound book titled \"Tha' Story o' tha' Blacksmith an' tha' Kingly Bloke\" by Haggis MacDougall." + description_info = "This book is titled \"Tha' Story o' tha' Blacksmith an' tha' Kingly Bloke\" by Haggis MacDougall. It seems to be some ancient, unknown dialect detailing the dangers of a different era." + + title = "Tha' Story o' tha' Blacksmith an' tha' Kingly Bloke" + icon_state = "book3" + origkey = "Schnayy" + author = "Haggis MacDougall" + + dat = {" + + + + +
+

Tha' Story o'
tha' Blacksmith an'
tha' Kingly Bloke

+
~~~~~~~~~

+ It's about a man in an age undreamed o', a man who came frae tha' savage lands o' tha' north. Let me tell ye o' tha' days o' high adventure!

+ Now, there once wos a man 'ho really, really liked swords. E' hated people, but loved swords. Loved stabbin' people wif 'em too, but mostly e' liked makin' them.

+ So, one day, outside 'is smithin' hut, a man came ter 'im. E' wos a big man, wif a big crown atop 'is head. One of tha' kingly sorts, tha' smith figured, so e' decided not ter stab 'im an' instead asked 'im wot e' wanted.

+ Tha' big man replied that e' wanted a sword. Not jus' any sword tha' any arseclown could make, but one o' tha' blacksmith's. 'Ad ter be perfect, wif' engravin's o' tha' king's deeds an' such.

+ Tha' smith nodded politely, wonderin' 'ow tha' hell e' wos s'posed ter know anythin' about this sod.

+ Tha' sod soon left on 'is white steed, an' the smith began 'is finest labor yet.

+ After many moons, tha' smith finally finished tha' sword. A thing o' beauty it wos, majestic in its sheen an' ever keen o' blade. Balance coulda used some work, but ye do wot ye can.

+ Tha' sod came back on 'is white horse an' demanded tha' sword. Tha' smith decided tha' e' wos done playin' second fiddle ter kingly types an' stabbed 'is horse, then stabbed tha' sod an' then stabbed tha' sod's wife, child, butler, goat, other horse, wagon, an' castle, in tha' precise order.

+ So, tha' moral of the story is ne'er trust a blacksmith and fuck tha' nobiliteh.

+
+ + + "} + +///Stars and Sometimes Falling Ones by Henry Clement Fandango + +/obj/item/weapon/book/custom_library/fiction/starsandsometimesfallingones + + name = "Stars and Sometimes Falling Ones" + desc = "A hardbound book titled \"Stars and Sometimes Falling Ones\" by Henry Clement Fandango." + description_info = "This book is titled \"Stars and Sometimes Falling Ones\" by Henry Clement Fandango. It is a poem on the life of a spaceman." + + title = "Stars and Sometimes Falling Ones" + icon_state = "stasis" + origkey = "Schnayy" + author = "Henry Clement Fandango" + + dat = {" + + + + +
+

Stars and Sometimes Falling Ones

+

by Henry Clement Fandango

+
+ Behind my desk,
+ this morning,
+ someone else

+ New shift,
+ hungover still
+ from our drinks last night.

+ On the holodeck-
+ spring then winter
+ autumn then summer.

+ Over station chatter,
+ No cry
+ of shuttle departing.

+ "Yield, Assistant,"
+ bowing -
+ at gun point.

+ Not even mice
+ dare to brave
+ maintenance this morning.

+ Storming meteors
+ over Mars, whirlwinds
+ of sparkling debris. +
+ + + "} \ No newline at end of file diff --git a/code/modules/library/hardcode_library/fiction/battlefieldcommander.dm b/code/modules/library/hardcode_library/fiction/battlefieldcommander.dm new file mode 100644 index 0000000000..2f3aad2d46 --- /dev/null +++ b/code/modules/library/hardcode_library/fiction/battlefieldcommander.dm @@ -0,0 +1,207 @@ +/* +CKEY: BattlefieldCommander +CATEGORY: Fiction +*/ + +/// The Chronicles of Margata: Volume I by Molly Highlander + +/obj/item/weapon/book/bundle/custom_library/fiction/chroniclesofmargatavol1 + name = "The Chronicles of Margata: Volume I" + desc = "A hardbound book titled \"The Chronicles of Margata: Volume I\" by Molly Highlander." + description_info = "This book is titled \"The Chronicles of Margata: Volume I\" by Molly Highlander. There's a blurb on the back:
\ + In this first volume in the series of the Chronicles of Margata, follow a young man's journey to dispel a curse of pure evil." + + title = "The Chronicles of Margata: Volume I" + icon_state = "chronicles1_battlefieldcommander" + origkey = "battlefieldcommander" + author = "Molly Highlander" + + pages = list({" + + + + +
+
+

+ The
+

+ CHRONICLES
+

+ of
+

+ MARGATA
+

+ VOLUME I +



+ MOLLY
HIGHLANDER
+


+
+ + + "}, + {" + + + + +

The Chronicles of Margata

+ Volume I: The Wolf and the Blacksmith +

By Molly Highlander

+ + + "}, + {" + + + + +

+ For Mercurie;
in the hopes that you'll be able to come up with
better jokes than me when you grow up.
+

+ + + "}, + {" + + + + +
In the land of Margata, nothing is ever as it seems. There have been many verifiable cases of local bakers having a secret double life as DJs. The correlation between exposure to bread and wanting to scratch out some sick beats has never been quantified, quite possibly to science being illegal in the region. That didn't happen to be the case of a young boy named Gadroc, who was neither a baker nor a DJ. In fact, his story happens to have nothing to do with either of the two. Poor Gadroc was afflicted with a terrible curse. It had been that way ever since he was born, because a witch had cursed his mother for saying "Keep the change," when there was only one cent of change left. Gadroc’s curse was horrible, one that no human being should suffer through: he couldn’t look at butts. Whenever someone showed him a full moon, he transformed into a horrible beast with astoundingly fresh breath. Whenever this happened, he would always run to the nearest cornfield and begin uncontrollably eating corn. Why corn? Because magic, that’s why. That's just how it fucking works. Don't you know anything?
+
After coming home with corn stuck in his teeth for three days straight, and only having one more pair of pants that weren’t destroyed, Gadroc knew that he needed to do something about his curse. He went to the first person he could think of for help.
+
Carne was the town’s blacksmith. He wasn’t very wise, but he always spoke as though he was. It was for this reason that Gadroc often came to Carne for help, despite the fact that he could probably go to basically anyone else. The town beggar, who was constantly sitting in a puddle of his own pee, gave better advice than the blacksmith. Carne was the only one who knew about Gadroc’s affliction. No one else knew who was ravaging the town’s corn population, and riots had already broken out over the severe deficit in cornbread supply.
+
"Carne, you have to help me!" Gadroc shouted as he burst through the doors of the smithy. Carne was in the middle of forging a pair of iron gauntlets, and had his back turned to Gadroc. He did not turn around.
+
"Do you need my help? Or do you need my help to help yourself?" Carne said, spouting his signature wisdom.
+
"Yes. No. What? Did you get that from a fortune cookie?" replied Gadroc.
+
"Yes, actually." Carne turned around. He was loudly crunching on some fortune cookie and inexplicably wearing the gauntlets he was working on, still glowing red hot. He held up the fortune, but Gadroc didn’t have time to read it, as it immediately caught fire and fell into a pile of ashes on the floor.
+
Gadroc was concerned. "Doesn’t that... you know... hurt?"
+
"Oh yes, extremely," Carne said with a smile. They both stared at each other for a moment.
+ + + "}, + {" + + + + +
"AHHHHHHHHHHHHHHHHHHHH!" screamed Carne. He flailed his arms around wildly until the gauntlets flew off. One of them flew across the room and hit a painting hanging on the wall. The painting was of our lord and president, Orcbama, and the gauntlet punched him in the face. The painting had a large scorch mark in the same place where the gauntlet had hit, indicating that this was a common occurrence.
+
"Anyways," Carne said casually, hands blistered and burnt, "What do you need to help me with?"
+
"That’s not what I... you know what, nevermind. Listen. I am sick and tired of this stupid werewolf bullshit! Corn used to be my favorite, and now I can’t stand it! I miss the days when I enjoyed cornbread..."
+
"Yeah, so do the townsfolk," the blacksmith replied.
+
"That's not helpful," Gadroc said, but Carne went on.
+
"I've always been more of a corn casserole kind of guy myself. Easier on the old gut. Y'know, when I was a boy-"
+
"Would you shut up and listen? We need to do something about this!"
+
"Right... What’s the problem again?" Gadroc smacked his forehead. He pointed to his own butt.
+
"Listen, son, if that's the way you're swingin', you don't have to play charades about it. Old Carne won't judge," Carne said.
+
"No, the werewolf problem!" Gadroc screamed. He fell to his knees, tears welling up in his eyes. He sniffed. "I just want to be able to look at butts. That’s all I want."
+
Carne walked up and put his gross, burnt hand on Gadroc’s shoulder. "It’s alright. I’ll help you with your problem."
+
Gadroc sniffed again. "Really?"
+
"Yes. Even if it means I’m helping myself to help you help me-"
+
"Carne, you’re not helping again."
+
+
CUT TO: Gadroc and Carne, scaling a mountain. Both men were equipped with the finest blades from Carne’s smithy. Gadroc was feeling a little indignant, considering Carne had only given him a foam sword. Carne had taken the only finished blade in the smithy.
+
"You see that up there?" Carne said to Gadroc as they climbed. "That’s the ancient temple whose name is really hard to pronounce."
+
"Really?" Gadroc asked. "What's it called?"
+
"I’d tell you, but it’s really hard to pronounce," explained the smith. He continued. "From what I understand, there’s a mystical artifact that can cure any curse. We’re going to use it to cure your werewolf problem."
+
"Why didn’t you tell me any of this on the way here? I’ve been following you up this mountain for hours with no idea of what we’re doing."
+
"We took that part out in post. It was a really long and not very funny bit that didn't get much of a reaction out of anyone the first time this story was read out loud. It's a little trick the boys back home call 'the Director's Cut.'"
+
"Ah. That makes a lot of sense."
+
"Right?" The two laughed at that, looked at the camera for a moment, then back to each other. A laugh track played during this. It lasted for an uncomfortable amount of time. It was the kind of laughter that you think is about to die down, but then it kicks right back up again. There’s also that one lady who’s cackling like a hyena having a tea party with a witch. You try to unhear her, but you just keep noticing her. Why do sitcoms think laugh tracks add anything to the show? It doesn't. That shit just doesn’t sit right with me.
+ + + "}, + {" + + + + +
They continued to hike up the mountain. After a little while, they reached the temple. The door was guarded by two dog-men holding spears.
+
"Who are these guys?" Gadroc asked.
+
"Let me handle this," assured Carne. "How’s it going gentlemen?" The dog-men stepped closer and crossed their spears across the door.
+
"Listen boys, there’s no need for the attitude," said the smith. The dog-men began to growl at him.
+
Carne frowned. "Hey now, that’s just rude." The dog-men responded to this by shoulder-checking Carne, knocking him to the ground. Gadroc sighed and walked up to the armored, bipedal golden retriever.
+
"Who’s a good boy?" Gadroc said as he began to scratch the dog behind his cutie ears. The dog-man turned his head into Gadroc’s hand and began to pant.
+
Gadroc continued. "You are! You’re a good boy! Oh it’s you!" The dog barked as if to say, "YES IT IS ME, I AM THE GOOD BOY." The dog-man eventually got down on all fours, stomped around in a circle a bit, and promptly fell asleep. The other guard whimpered. He had felt that he had been a good boy too, and that he deserved scratchies just as much as his partner, if not more. He conveyed this to Gadroc in a single bark. Gadroc turned to him.
+
"Oh I know! You’ve been a good boy too!" He pet the guard for a little bit, then pulled an ear of corn out of his pocket.
+
"You want a treat boy?" Gadroc asked, as he held up the corn. The dog nodded violently and made a couple of attempts to nibble on the corn, but Gadroc pulled it away before he could.
+
"Go get it!" shouted Gadroc as he threw the corn down the mountain. The dog guard threw his spear to the side as he bounded after the corn bouncing down the path. Certain the guard had made it out of sight, Gadroc went to help Carne up.
+
"Where did you learn to deal with Canine-sapiens like that?" Carne asked.
+
"Well, if you think about it, werewolves are technically part dog. Plus, I just know a good boy when I see one."
+
The two stepped through the doors of the temple. At the end of the long, church-like room was a marble altar on a platform, with a set of stairs leading up to it. On the altar sat a small, simple wooden box. From above, a light fell gently on the box, giving it a soft, almost holy glow. The stained glass windows at the back of the room were arranged in such a way that they almost seemed to be pointing at the box. Many different flowers were arranged on either side of the box and at the foot of the altar.
+
"Call it a hunch," Carne said slowly, "but I think those flowers might be important somehow. I just get that feeling, I couldn’t tell you why."
+
"It’s the box that’s important, or whatever's in it," Gadroc said dryly. "The only thing that could make it more obvious is if a huge, luminescent sign dropped down with blinking arrows that read, ‘There’s probably a magic artifact in this box.’" Just then, a huge luminescent sign with blinking arrows that read, "There’s probably a magic artifact in this box." dropped down. Gadroc pinched the bridge of his nose.
+
"Do you think there might be a secret compartment in the altar? I bet that’s where the artifact is," pondered the smith.
+ + + "}, + {" + + + + +
"Welcome to the temple of Ivyechneyoveen Kah’al, my children," came a voice.
+
"Who said that?" Gadroc asked. "So that’s how it’s pronounced," mused Carne. A figure stepped out from behind a pillar. It was a robed dog-woman, an ancient St. Bernard.
+
The dog lady spoke again. "Have you come to give your thanks to Orcville?"
+
"I’m sorry, who?" Gadroc asked, confused.
+
"Yes, Orcville Redenbacher. He blessed the world with his glorious popcorn and saved our souls."
+
"Wait," interrupted Carne. "Then why is it called the temple of Itchyville Cable?"
+
"Ivyechneyoveen Kah’al," corrected the priestess with a polite smile.
+
"Yeah, that’s what I said."
+
"I’d be glad to enlighten you, my child. It all started when..." The priestess lengthy explanation on the history and fine points of the religion of the dog people. It didn’t make the slightest bit of sense, though Carne did have a bit of a chuckle at the part where Orcville defeated the demon lord who wouldn't stop pretending to throw a ball to go fetch and then never actually throw the ball. Gadroc nearly fell asleep on his feet. He decided not to take part in the theological discussion and turned his attention back to the box. He walked up to the altar platform and climbed the steps. Carefully he opened the two small, wooden doors on the front of the box. Words could not describe his excitement. Inside the box was...
+
"A hot dog?" Gadroc asked aloud. He was thoroughly baffled. Inside the box was a golden hot dog that sparkled in the light. He couldn’t tell whether or not it had ketchup, mustard, or even relish on it; it was all gold.
+
"What are you doing with our sacred artifact?" shouted the dog priestess. Gadroc jumped, startled. He was too busy thinking about what gold tasted like.
+
"Uh... I need it... for... a friend," Gadroc lied, incredibly convincingly.
+
"You’d better not eat that because that’s totally not how a magic artifact shaped like a hot dog would work!" screeched the priestess.
+
Gadroc looked again at the supposed cure to all his problems. It was right there in his hands! "You’re not my mom!" he shouted, and promptly shoved the entire hot dog in his mouth and made a break for the door. Carne seemed impressed.
+
"Damn," he said. "Wish I could run that fast after stuffing an entire hot dog in my mouth. Last time I did that I got a hernia." He turned to the dog priestess.
+
"So, uh... wanna go grab some popcorn later?" The priestess slapped him across the face. "Right. I'll get goin', then. Sorry about the hot dog. We'll make you a new one." Carne began to head in Gadroc's direction.
+ + + "}, + {" + + + + +
"Gadroc, where are you?" Carne shouted. "You can come out now, she didn’t follow us." Gadroc looked around and slowly stepped out from behind a tree that didn't even come close to consealing him whatsoever.
+
"I... I don’t know if it worked, Carne," the boy said nervously.
+
"Here," said the smith. He handed Gadroc a small, folded up piece of paper. Almost the exact moment Gadroc’s fingers touched it, Carne leapt like an orc-lympic death hurdle sprinter and combat rolled to take cover behind a nearby fallen tree. Gadroc unfolded the paper, hands trembling. On it was a pin up of a real buff orc dude. His shirtless body was ripped and glistening with sweat. He held a wrench and his jeans were not tight around his waist. Another shot showed him crouched down in front of a sink, which was confusing because plumbing was not very popular yet. The orc’s loose jeans were sagging down his pants, and they revealed the glowing, firm cheeks of his fine behind. A single tear rolled down Gadroc’s face.
+
"Carne," he sniffed. "It worked." Carne came out from behind the log and wiped the sweat from his brow with a "Phew!"
+
"It’s beautiful, Carne," Gadroc went on.
+
"Keep it, kid," the blacksmith said with a smile. "You need it more than I do. Let’s go home."
+
Gadroc had gold poop for a week.
+
+
+

Fin.

+ + + "}) \ No newline at end of file diff --git a/code/modules/library/hardcode_library/fiction/schnayy.dm b/code/modules/library/hardcode_library/fiction/schnayy.dm new file mode 100644 index 0000000000..14381e0ace --- /dev/null +++ b/code/modules/library/hardcode_library/fiction/schnayy.dm @@ -0,0 +1,386 @@ +/* +CKEY: Schnayy +CATEGORY: Fiction +*/ + +/// Beyond the Door - Philip K. Dick + +/obj/item/weapon/book/bundle/custom_library/fiction/beyondthedoor + name = "Beyond the Door" + desc = "A hardbound book titled 'Beyond the Door' by Philip K. Dick." + description_info = "This book is titled 'Beyond the Door' by Philip K. Dick. There is a blurb on the back:
\ + Larry Thomas bought a cuckoo clock for his wife - without knowing the price he would have to pay." + + title = "Beyond the Door" + icon_state = "book1" + origkey = "Schnayy" + author = "Philip K. Dick" + + pages = list({" + + + + + +

Beyond the Door

+

by Philip K. Dick

+ + + "}, + {" + + + + + + That night at the dinner table he brought it out and set it down beside her plate. Doris stared at it, her hand to her mouth. "My God, what is it?" She looked up at him, bright-eyed. +

+ "Well, open it." +

+ Doris tore the ribbon and paper from the square package with her sharp nails, her bosom rising and falling. Larry stood watching her as she lifted the lid. He lit a cigarette and leaned against the wall. +

+ "A cuckoo clock!" Doris cried. "A real old cuckoo clock like my mother had." She turned the clock over and over. "Just like my mother had, when Pete was still alive." Her eyes sparkled with tears. +

+ "It's made in Germany," Larry said. After a moment he added, "Carl got it for me wholesale. He knows some guy in the clock business. Otherwise I wouldn't have-" He stopped. +

+ Doris made a funny little sound. +

+ "I mean, otherwise I wouldn't have been able to afford it." He scowled. "What's the matter with you? You've got your clock, haven't you? Isn't that what you want?" +

+ Doris sat holding onto the clock, her fingers pressed against the brown wood. +

+ "Well," Larry said, "what's the matter?" +

+ He watched in amazement as she leaped up and ran from the room, still clutching the clock. He shook his head. "Never satisfied. They're all that way. Never get enough." +

+ He sat down at the table and finished his meal. +

+ The cuckoo clock was not very large. It was hand-made, however, and there were countless frets on it, little indentations and ornaments scored in the soft wood. Doris sat on the bed drying her eyes and winding the clock. She set the hands by her wristwatch. Presently she carefully moved the hands to two minutes of ten. She carried the clock over to the dresser and propped it up. +

+ Then she sat waiting, her hands twisted together in her lap - waiting for the cuckoo to come out, for the hour to strike. +

+ As she sat she thought about Larry and what he had said. And what she had said, too, for that matter - not that she could be blamed for any of it. After all, she couldn't keep listening to him forever without defending herself; you had to blow your own trumpet in the world. +

+ She touched her handkerchief to her eyes suddenly. Why did he have to say that, about getting it wholesale? Why did he have to spoil it all? If he felt that way he needn't have got it in the first place. She clenched her fists. He was so mean, so damn mean. +

+ But she was glad of the little clock sitting there ticking to itself, with its funny grilled edges and the door. Inside the door was the cuckoo, waiting to come out. Was he listening, his head cocked on one side, listening to hear the clock strike so that he would know to come out? +

+ Did he sleep between hours? Well, she would soon see him: she could ask him. And she would show the clock to Bob. He would love it; Bob loved old things, even old stamps and buttons. He liked to go with her to the stores. Of course, it was a little awkward, but Larry had been staying at the office so much, and that helped. If only Larry didn't call up sometimes to- +

+ There was a whirr. The clock shuddered and all at once the door opened. The cuckoo came out, sliding swiftly. He paused and looked around solemnly, scrutinizing her, the room, the furniture. +

+ It was the first time he had seen her, she realized, smiling to herself in pleasure. She stood up, coming toward him shyly. "Go on," she said. "I'm waiting." +

+ The cuckoo opened his bill. He whirred and chirped, quickly, rhythmically. Then, after a moment of contemplation, he retired. And the door snapped shut. +

+ She was delighted. She clapped her hands and spun in a little circle. He was marvelous, perfect! And the way he had looked around, studying her, sizing her up. He liked her; she was certain of it. And she, of course, loved him at once, completely. He was just what she had hoped would come out of the little door. +

+ Doris went to the clock. She bent over the little door, her lips close to the wood. "Do you hear me?" she whispered. "I think you're the most wonderful cuckoo in the world." She paused, embarrassed. "I hope you'll like it here." +

+ Then she went downstairs again, slowly, her head high. +

+ Larry and the cuckoo clock really never got along well from the start. Doris said it was because he didn't wind it right, and it didn't like being only half-wound all the time. Larry turned the job of winding over to her; the cuckoo came out every quarter hour and ran the spring down without remorse, and someone had to be ever after it, winding it up again. +

+ Doris did her best, but she forgot a good deal of the time. Then Larry would throw his newspaper down with an elaborate weary motion and stand up. He would go into the dining-room where the clock was mounted on the wall over the fireplace. He would take the clock down and making sure that he had his thumb over the little door, he would wind it up. +

+ "Why do you put your thumb over the door?" Doris asked once. +

+ "You're supposed to." +

+ She raised an eyebrow. "Are you sure? I wonder if it isn't that you don't want him to come out while you're standing so close." +

+ "Why not?" +

+ "Maybe you're afraid of him." +

+ Larry laughed. He put the clock back on the wall and gingerly removed his thumb. When Doris wasn't looking he examined his thumb. +

+ There was still a trace of the nick cut out of the soft part of it. Who - or what - had pecked at him? +

+ One Saturday morning, when Larry was down at the office working over some important special accounts, Bob Chambers came to the front porch and rang the bell. +

+ Doris was taking a quick shower. She dried herself and slipped into her robe. When she opened the door Bob stepped inside, grinning. +

+ "Hi," he said, looking around. +

+ "It's all right. Larry's at the office." +

+ "Fine." Bob gazed at her slim legs below the hem of the robe. "How nice you look today." +

+ She laughed. "Be careful! Maybe I shouldn't let you in after all." +

+ They looked at one another, half amused half frightened. Presently Bob said, "If you want, I'll--" +

+ "No, for God's sake." She caught hold of his sleeve. "Just get out of the doorway so I can close it. Mrs. Peters across the street, you know." +

+ She closed the door. "And I want to show you something," she said. "You haven't seen it." +

+ He was interested. "An antique? Or what?" +

+ She took his arm, leading him toward the dining-room. "You'll love it, Bobby." She stopped, wide-eyed. "I hope you will. You must; you must love it. It means so much to me - he means so much." +
+ + + "}, + {" + + + + + + "He?" Bob frowned. "Who is he?" +

+ Doris laughed. "You're jealous! Come on." A moment later they stood before the clock, looking up at it. "He'll come out in a few minutes. Wait until you see him. I know you two will get along just fine." +

+ "What does Larry think of him?" +

+ "They don't like each other. Sometimes when Larry's here he won't come out. Larry gets mad if he doesn't come out on time. He says--" +

+ "Says what?" +

+ Doris looked down. "He always says he's been robbed, even if he did get it wholesale." She brightened. "But I know he won't come out because he doesn't like Larry. When I'm here alone he comes right out for me, every fifteen minutes, even though he really only has to come out on the hour." +

+ She gazed up at the clock. "He comes out for me because he wants to. We talk; I tell him things. Of course, I'd like to have him upstairs in my room, but it wouldn't be right." +

+ There was the sound of footsteps on the front porch. They looked at each other, horrified. +

+ Larry pushed the front door open, grunting. He set his briefcase down and took off his hat. Then he saw Bob for the first time. +

+ "Chambers. I'll be damned." His eyes narrowed. "What are you doing here?" He came into the dining-room. Doris drew her robe about her helplessly, backing away. +

+ "I-" Bob began. "That is, we-" He broke off, glancing at Doris. Suddenly the clock began to whirr. The cuckoo came rushing out, bursting into sound. Larry moved toward him. +

+ "Shut that din off," he said. He raised his fist toward the clock. The cuckoo snapped into silence and retreated. The door closed. "That's better." Larry studied Doris and Bob, standing mutely together. +

+ "I came over to look at the clock," Bob said. "Doris told me that it's a rare antique and that--" +

+ "Nuts. I bought it myself." Larry walked up to him. "Get out of here." He turned to Doris. "You too. And take that damn clock with you." +

+ He paused, rubbing his chin. "No. Leave the clock here. It's mine; I bought it and paid for it." +

+ In the weeks that followed after Doris left, Larry and the cuckoo clock got along even worse than before. For one thing, the cuckoo stayed inside most of the time, sometimes even at twelve o'clock when he should have been busiest. And if he did come out at all he usually spoke only once or twice, never the correct number of times. And there was a sullen, uncooperative note in his voice, a jarring sound that made Larry uneasy and a little angry. +

+ But he kept the clock wound, because the house was very still and quiet and it got on his nerves not to hear someone running around, talking and dropping things. And even the whirring of a clock sounded good to him. +

+ But he didn't like the cuckoo at all. And sometimes he spoke to him. +

+ "Listen," he said late one night to the closed little door. "I know you can hear me. I ought to give you back to the Germans-- back to the Black Forest." He paced back and forth. "I wonder what they're doing now, the two of them. That young punk with his books and his antiques. A man shouldn't be interested in antiques; that's for women." +

+ He set his jaw. "Isn't that right?" +

+ The clock said nothing. Larry walked up in front of it. "Isn't that right?" he demanded. "Don't you have anything to say?" +

+ He looked at the face of the clock. It was almost eleven, just a few seconds before the hour. "All right. I'll wait until eleven. Then I want to hear what you have to say. You've been pretty quiet the last few weeks since she left." +

+ He grinned wryly. "Maybe you don't like it here since she's gone." He scowled. "Well, I paid for you, and you're coming out whether you like it or not. You hear me?" +

+ Eleven o'clock came. Far off, at the end of town, the great tower clock boomed sleepily to itself. But the little door remained shut. Nothing moved. The minute hand passed on and the cuckoo did not stir. He was someplace inside the clock, beyond the door, silent and remote. +

+ "All right, if that's the way you feel," Larry murmured, his lips twisting. "But it isn't fair. It's your job to come out. We all have to do things we don't like." +

+ He went unhappily into the kitchen and opened the great gleaming refrigerator. As he poured himself a drink he thought about the clock. +

+ There was no doubt about it - the cuckoo should come out, Doris or no Doris. He had always liked her, from the very start. They had got along well, the two of them. Probably he liked Bob too - probably he had seen enough of Bob to get to know him. They would be quite happy together, Bob and Doris and the cuckoo. +

+ Larry finished his drink. He opened the drawer at the sink and took out the hammer. He carried it carefully into the dining-room. The clock was ticking gently to itself on the wall. +

+ "Look," he said, waving the hammer. "You know what I have here? You know what I'm going to do with it? I'm going to start on you - first." He smiled. "Birds of a feather, that's what you are - the three of you." +

+ The room was silent. +

+ "Are you coming out? Or do I have to come in and get you?" +

+ The clock whirred a little. +

+ "I hear you in there. You've got a lot of talking to do, enough for the last three weeks. As I figure it, you owe me--" +

+ The door opened. The cuckoo came out fast, straight at him. Larry was looking down, his brow wrinkled in thought. He glanced up, and the cuckoo caught him squarely in the eye. +

+ Down he went, hammer and chair and everything, hitting the floor with a tremendous crash. For a moment the cuckoo paused, its small body poised rigidly. Then it went back inside its house. The door snapped tight-shut after it. +

+ The man lay on the floor, stretched out grotesquely, his head bent over to one side. Nothing moved or stirred. The room was completely silent, except, of course, for the ticking of the clock. +

+ "I see," Doris said, her face tight. Bob put his arm around her, steadying her. +

+ "Doctor," Bob said, "can I ask you something?" +

+ "Of course," the doctor said. +

+ "Is it very easy to break your neck, falling from so low a chair? It wasn't very far to fall. I wonder if it might not have been an accident. Is there any chance it might have been--" +

+ "Suicide?" the doctor rubbed his jaw. "I never heard of anyone committing suicide that way. It was an accident; I'm positive." +

+ "I don't mean suicide," Bob murmured under his breath, looking up at the clock on the wall. "I meant something else." +

+
But no one heard him.
+
+ + + "}) + +/// The Man From Snowy River by A.B. "Banjo" Paterson + +/obj/item/weapon/book/bundle/custom_library/fiction/manfromsnowyriver + name = "The Man From Snowy River" + desc = "A hardbound book titled 'The Man From Snowy River' by A.B. 'Banjo' Paterson." + description_info = "This book is titled 'The Man From Snowy River' by A.B. 'Banjo' Paterson." + + title = "The Man From Snowy River" + icon_state = "book3" + origkey = "Schnayy" + author = "A.B. Paterson" + + pages = list({" + + + + + +


+

The Man From Snowy River

+ A.B. Paterson

+ + + "}, + {" + + + + + +
+
+ There was movement at the station, for the word had passed around
+ That the colt from old Regret had got away,
+ And had joined the wild bush horses - he was worth a thousand pound,
+ So all the cracks had gathered to the fray.
+ All the tried and noted riders from the stations near and far
+ Had mustered at the homestead overnight,
+ For the bushmen love hard riding where the wild bush horses are,
+ And the stockhorse snuffs the battle with delight.
+

+ There was Harrison, who made his pile when Pardon won the cup,
+ The old man with his hair as white as snow;
+ But few could ride beside him when his blood was fairly up -
+ He would go wherever horse and man could go.
+ And Clancy of the Overflow came down to lend a hand,
+ No better horseman ever held the reins;
+ For never horse could throw him while the saddle girths would stand,
+ He learnt to ride while droving on the plains.
+

+ And one was there, a stripling on a small and weedy beast,
+ He was something like a racehorse undersized,
+ With a touch of Timor pony - three parts thoroughbred at least -
+ And such as are by mountain horsemen prized.
+ He was hard and tough and wiry - just the sort that won't say die -
+ There was courage in his quick impatient tread;
+ And he bore the badge of gameness in his bright and fiery eye,
+ And the proud and lofty carriage of his head.
+

+ But still so slight and weedy, one would doubt his power to stay,
+ And the old man said, "That horse will never do
+ For a long a tiring gallop - lad, you'd better stop away,
+ Those hills are far too rough for such as you."
+ So he waited sad and wistful - only Clancy stood his friend -
+ "I think we ought to let him come," he said;
+ "I warrant he'll be with us when he's wanted at the end,
+ For both his horse and he are mountain bred.
+

+ "He hails from Snowy River, up by Kosciusko's side,
+ Where the hills are twice as steep and twice as rough,
+ Where a horse's hoofs strike firelight from the flint stones every stride,
+ The man that holds his own is good enough.
+ And the Snowy River riders on the mountains make their home,
+ Where the river runs those giant hills between;
+ I have seen full many horsemen since I first commenced to roam,
+ But nowhere yet such horsemen have I seen."
+

+ So he went - they found the horses by the big mimosa clump -
+ They raced away towards the mountain's brow,
+ And the old man gave his orders, "Boys, go at them from the jump,
+ No use to try for fancy riding now.
+ And, Clancy, you must wheel them, try and wheel them to the right.
+ Ride boldly, lad, and never fear the spills,
+ For never yet was rider that could keep the mob in sight,
+ If once they gain the shelter of those hills."
+

+ So Clancy rode to wheel them - he was racing on the wing
+ Where the best and boldest riders take their place,
+ And he raced his stockhorse past them, and he made the ranges ring
+ With the stockwhip, as he met them face to face.
+ Then they halted for a moment, while he swung the dreaded lash,
+ But they saw their well-loved mountain full in view,
+ And they charged beneath the stockwhip with a sharp and sudden dash,
+ And off into the mountain scrub they flew.
+

+ Then fast the horsemen followed, where the gorges deep and black
+ Resounded to the thunder of their tread,
+ And the stockwhips woke the echoes, and they fiercely answered back
+ From cliffs and crags that beetled overhead.
+ And upward, ever upward, the wild horses held their way,
+ Where mountain ash and kurrajong grew wide;
+ And the old man muttered fiercely, "We may bid the mob good day,
+ No man can hold them down the other side."
+

+ When they reached the mountain's summit, even Clancy took a pull,
+ It well might make the boldest hold their breath,
+ The wild hop scrub grew thickly, and the hidden ground was full
+ Of wombat holes, and any slip was death.
+ But the man from Snowy River let the pony have his head,
+ And he swung his stockwhip round and gave a cheer,
+ And he raced him down the mountain like a torrent down its bed,
+ While the others stood and watched in very fear.
+

+ He sent the flint stones flying, but the pony kept his feet,
+ He cleared the fallen timber in his stride,
+ And the man from Snowy River never shifted in his seat -
+ It was grand to see that mountain horseman ride.
+ Through the stringybarks and saplings, on the rough and broken ground,
+ Down the hillside at a racing pace he went;
+ And he never drew the bridle till he landed safe and sound,
+ At the bottom of that terrible descent.
+

+ He was right among the horses as they climbed the further hill,
+ And the watchers on the mountain standing mute,
+ Saw him ply the stockwhip fiercely, he was right among them still,
+ As he raced across the clearing in pursuit.
+ Then they lost him for a moment, where two mountain gullies met
+ In the ranges, but a final glimpse reveals
+ On a dim and distant hillside the wild horses racing yet,
+ With the man from Snowy River at their heels.
+

+ And he ran them single-handed till their sides were white with foam.
+ He followed like a bloodhound on their track,
+ Till they halted cowed and beaten, then he turned their heads for home,
+ And alone and unassisted brought them back.
+ But his hardy mountain pony he could scarcely raise a trot,
+ He was blood from hip to shoulder from the spur;
+ But his pluck was still undaunted, and his courage fiery hot,
+ For never yet was mountain horse a cur.
+

+ And down by Kosciusko, where the pine-clad ridges raise
+ Their torn and rugged battlements on high,
+ Where the air is clear as crystal, and the white stars fairly blaze
+ At midnight in the cold and frosty sky,
+ And where around The Overflow the reed beds sweep and sway
+ To the breezes, and the rolling plains are wide,
+ The man from Snowy River is a household word today,
+ And the stockmen tell the story of his ride.
+
+
+ + + "}) \ No newline at end of file diff --git a/code/modules/library/hardcode_library/non-fiction/PortedBooks.dm b/code/modules/library/hardcode_library/non-fiction/PortedBooks.dm new file mode 100644 index 0000000000..86287503b8 --- /dev/null +++ b/code/modules/library/hardcode_library/non-fiction/PortedBooks.dm @@ -0,0 +1,285 @@ +/* +Here is where we're putting any books being ported from our old database. Should only be used for books submitted by an unknown or inactive player to try and keep ckeys tied to their authors. +Try and keep formatting clean. Also, if you add books with ugly font or color mixes, I WILL destroy you. -- Schnayy + +Category: Non-Fiction +*/ + +/// Free Sirisai: Light Bulbs by Sene of Sheraeshi. + +/obj/item/weapon/book/custom_library/nonfiction/freesirisailightbulbs + name = "Free Sirisai: Light Bulbs" + desc = "A hardbound book titled \"Free Sirisai: Light Bulbs\" by Sene of Sheraeshi." + description_info = "This book is titled \"Free Sirisai: Light Bulbs\" by Sene of Sheraeshi. It appears to be about the different lighting needs of different sapient species, written from a Teshari author's view." + + title = "Free Sirisai: Light Bulbs" + icon_state = "book5" + origkey = "Schnayy" + author = "Sene of Sheraeshi" + + dat = {" + + + + + +

LIGHT BULBS


+ by Sene of Sheraeshi.
+
+

+ One may find the problems inherent in co-habitation well illustrated through the ubiquity of light bulbs among virtually all settlements. In colonies like the NCS Northern Star, where I make my residence, the bulbs are uniform in design and output. But it is clear to see that various species require different amounts of light for proper vision -- we Teshari and our Tajaran comrades require less, while Dionaea require more. In addition, these light bulbs are low-heat, which the cold-blooded Unathi would certainly not prefer. +

+ In short-- the standard light bulbs aboard even a cosmopolitan space station in the Vir Cluster are calibrated for the preferences and biology of humans and Skrell. It is obvious that we Teshari would benefit greatly from having structures tailored to our own culture and anatomy, from hallway redesign to the very filaments of the light-bulbs. +

+
+ + + "} + +/// The Viability of Corporate Government by Yang Simiao + +/obj/item/weapon/book/bundle/custom_library/nonfiction/viabilityofcorporategov + name = "The Viability of Corporate Government" + desc = "A harbound book titled \"The Viability of Corporate Government\" by Yang Simiao." + description_info = "This book is titled \"The Viability of Corporate Government\" by Yang Simiao. It seems to be an opinion piece on the relationship between corporations and the stations they own." + + title = "The Viability of Corporate Government" + icon_state = "book5" + origkey = "Schnayy" + author = "Yang Simiao" + + pages = list({" + + + + +


+

The Viability of Corporate Government
by Yang Simiao

+ + + "}, + {" + + + + +
+ Corporations frequently act as the local government of space stations that they own and operate. This works fine for small stations - in fact, it might even be necessary, with the amount of support they tend to need. However, when stations get larger, and larger, and their populations soar to five and six digits, the situation becomes untenable.

+ Representative democracies have been the most stable form of government for a variety of reasons. Firstly, they are a system that is not subject to the whims of a single person, or even a few, but are controlled by the general population, which is not as likely to shift rapidly and disastrously, not to mention far less likely to cause strife for the people. The second and more critical reason is that people, especially educated people with access to proper communications, desire the ability to rule their own lives. They may surrender this for material goods, but once material needs are satisfied, they will seek out the ability to fulfill their own purposes.

+ Corporate government denies the ability to do this. It denies even the possibility, as why would a company give up a position that is giving them such amazing profits? The situation is untenable. Already we can see in some stations a small but growing element that is dissatisfied with the situation. Phrases like "tyranny" and "corporate dictatorship" are thrown around, and not without justification. If corporations do not act to give people control over the rule of their homes, things will go badly - for the companies. +
+ + + "}, + {" + + + + +
+ In a fringe system, the Relan system, there is a history of these actions. Because of the poverty of the system, companies neglected to provide properly for stations housing families - systems such as power and gravity failed regularly, and even life support was not nearly as reliable as is required in Sol space. This pushed the natural tension between the people and the faraway rulers to the breaking point far more quickly. The people won, and companies were greatly neutered, losing about 85% of their operations on moons and asteroids within the system. There are now two governments within the system - the Relan System Authority, based on the system's only garden world, Taron, essentially a puppet-state of the companies, and the Free Relan Alliance, the 'spacer' government of the stations, asteroids, and moons that rebelled and won their freedom. Despite the planet being wealthier, and the spacers having far tougher conditions, standards of living are much higher for the spacers.

+ It is without a doubt that this will happen in Solar space if nothing changes. Corporations such as NanoTrasen and Grayson must, must give the people of their stations the authority to govern themselves. +
+ + + "}) + +///A Brief History Of The Rise And Fall Of The Persian Empire by Satrap. + +/obj/item/weapon/book/bundle/custom_library/nonfiction/riseandfallofpersianempire + name = "The Rise And Fall Of The Persian Empire" + desc = "A hardbound book titled \"A Brief History Of The Rise And Fall Of The Persian Empire\" by Satrap." + description_info = "This book is titled \"A Brief History Of The Rise And Fall Of The Persian Empire\" by Satrap. It covers the beginning and end of Earth's Persian Empire." + + title = "The Rise And Fall Of The Persian Empire" + icon_state = "book6" + origkey = "Schnayy" + author = "Satrap" + + pages = list({" + + + + + +


+
+

A Brief History Of
The Rise And Fall Of The Persian Empire

+ by Satrap

+
+ + + "}, + {" + + + + +
+
The Persian empire was the world's first superpower. Under the rule of Cyrus II (also known as Cyrus The Great), the Persian empire spanned from three continents, and created a lasting legacy for empires of the future. Here, I will try to briefly explain how the empire came to be, and how it collapsed.
+
+ + + "}, + {" + + + + +
Beginnings
+
+ The Persian empire first started as a vassal to the Median empire. In the year 612 B.C., the Medes had conquered much land, including the Assyrian capital of Nineveh. The Median king, Astyges, decided that he would arrange his daughter, Mandane, to the Persian king, Cambyses I. At this time, the Persians were little more than a tribe. With this marriage, he secured an alliance with the Persian people, and they soon bore a son they named Cyrus.

+ Astyges had a dream, which his priests interpreted as a bad omen. They claimed that his grandson would one day overthrow him and grow an army to spread around the continent. To challenge this dream, he assigned his general, Harpagus, to kill his daughter's first child. He was ordered to take the infant and leave him to the mountainside to be eaten by the beasts, but he could not do that. Instead, he decided to give the child to an adoptive family. +
+ + + "}, + {" + + + + +
Conquests
+
+ The young Cyrus was indeed an ambitious figure. As historical records show, the Median general Harpagus decided to betray the king and assisted Cyrus in speedily taking over the throne. By capturing the Median capital of Ecbtana, Cyrus became king of both the Persians and the Medes, uniting the people as one. The neighboring country of Lydia had threatened the Medes in the past, to which Cyrus used as a justification to invade and conquered them as well. Cyrus would then be known as Cyrus the Great, and would be praised by his people for his exploits. His actions earned him the admiration of his people and rivals alike.

+ Cyrus' most famous conquest would be historical Babylon. The Babylonian empire was built along the river of the Euphrates, and was regarded as a treasure of the world. Tempted by the prize, Cyrus set his course.

+ Babylon was surrounded by a massive wall, with some two-hundred manned arching posts alongside it. Attacking the city head on would surely result in failure. However, since the Euphrates river also flew directly inside parts of the city, Cyrus saw his chance. He instructed his men to dam the river, allowing his troops to advance through the lowered waters. A brief surprise attack followed, and Babylon was conquered.

+ What's significant about the fall of Babylon, was how the Babylonians actually praised Cyrus for it. Nabondius, the former king, was at odds with the priests. They had claimed that he had not been facilitating religious ceremonies properly, and was interfering for his own benefit. When Cyrus came to power, he immediately ordered a reconstruction of all damaged temples and allowed religious practices to be commenced of any kind; Even though the Persians followed the religion of Zoroastrianism, they never forced any of their subjects to worship the same. Because of this, Persia was one of the first lands of religious tolerance, and many different beliefs could be found. The Jews, who had been slaves to Babylon, were released and given safe passage back to Jerusalem. Cyrus had been established as perhaps the earliest believer of human rights in the world. +
+ + + "}, + {" + + + + +
A Superpower
+
+ By conquering Babylon, Cyrus had ultimately defeated the major threats to his empire, and expanded his borders to cover the Middle East, parts of Modern-day Turkey, Greece, Egypt, and Asia. Not only this, but his people were infatuated with him and how smoothly he ran his empire. Cyrus never ceased to expand his empire, until his death.

+ Nearing his sixties, Cyrus continued to lead his troops to conquer more land and wealth for his people. Traveling up north, he encountered a tribe of people known as the Massagetae. According to legend, the tribal queen, Tomyris, witnessed Cyrus kill her son in battle. Tomyris proceeded to decapitate Cyrus and douse his head in a bucket of his own blood. A beautiful painting by the 18th century French Renaissance painter Jean-Simon Berthelemy depicts this gruesome scene. +
+ + + "}, + {" + + + + +
Dynasty
+
+ Despite the death of their leader, the Persian empire remained a stable one. Cyrus' grandson, Darius I had immediately seized the throne. Darius wasted no time to carry on his grandfather's honor. He continued to expand the empire even further, all the way to the western hemisphere, right at the doorstep of the Greeks. Darius would be famous for his administrative prowess. He introduced the Satrap system to govern his lands. Since the territories were so vast, it was difficult for one man to effectively govern it all. Many rebellions would rise and would need to be quelled. Satraps were representatives of the king himself. They would serve as a governor of each Persian city-state. They would often enjoy the luxury of complete control of their lands if the king was away. This autocratic system of government would catch on in the form of autocracy in the western world. +
+ + + "}, + {" + + + + +
Collapse
+
+ Unfortunately, the empire would not last forever. After Darius The Great passed away, his heir Xerxes had much difficulties fending off the Greeks from his empire. A series of failures both in land and in naval combat marked a decline in Persian power. Suddenly, the whole world would be shocked, as a young Macedonian king named Alexander The Great would sweep through Persia and destroy the entire empire in a single campaign. By 330 B.C., the Persian empire had collapsed into several sprawling states, never to fully see the glory of it's legacy again.

+ The empire lasted approximately 250 years through several generations, and the contributions it has made to society as we know it is immeasurable. +
+ + + "}) + +/// An Explanation of the Skrellian Caste System by Jyotirao Phule. + +/obj/item/weapon/book/bundle/custom_library/nonfiction/skrelliancastesystem + + name = "An Explanation of the Skrellian Caste System" + desc = "A hardbound book titled \"An Explanation of the Skrellian Caste System\" by Jyotirao Phule." + description_info = "This book is titled \"An Explanation of the Skrellian Caste System\" by Jyotirao Phule." + + title = "An Explanation of the Skrellian Caste System" + icon_state = "book7" + origkey = "Schayy" + author = "Jyotirao Phule" + + pages = list({" + + + + + +


+
+

An Explanation of the Skrellian Caste System

+ by Jyotirao Phule

+
+ + + "}, + {" + + + + +
+ Many Humans and Tajaran consider the Skrellian Caste system to be a relatively egalitarian social model, as it is seemingly unaccompanied by the political and economic subjugation that follows historical human and Tajaran modes of oppression. This is the model of the Caste system presented by the wealthiest parts of Skrellian space, and to judge the Caste system by how it operates on Qerr'Balak would be akin to judging laissez-faire economics based on how it operates on Luna, or the Overseer political system based on how it operated for the Overseers. In order to understand the repercussions of a social system, one must understand how it operated for the most marginalized - the out-caste.

+ Skrellian education is viewed to be a life-long endeavor, and it is expected that a well-educated individual stay in formal schooling, known as Keri-Gloa, until the age of twenty-five. Keri-Gloa is not universal, however, but rather segregated into castes with education carefully selected to teach Skrell only what is befitting to someone of their social status. My own education as a member of the Kanin-Katish, for example, was heavy on education on architecture and engineering while the social sciences, arts, and research-based sciences were untouched. To drop out of this education leaves one a stigmatized Qrri-Mog, for which a very rough translation into Galactic Common would be a "lesser worker", but this does not fully encapsulate the stigma surrounding it. Qrri-Mog are viewed as unenlightened, stupid, and unworthy of job opportunities that involve any level of mental capacity, even if such a person has education from other sources. Thus, those unsatisfied with their caste's occupation is given two choices - conform, or face unemployment. Though there is no political mechanism to force conformity, there is an economic mechanism which enforces the status quo. +
+ + + "}, + {" + + + + +
+ Qrri-Mog are also denied political opportunity to change the social structure from within. Most Skrellian city-states have a two-pronged political system, with a head of state known as the Qerr-Skria who has both executive and judiciary power, and a legislative body known as the Xaq Moglar. Both of these are highly exclusive. Let us begin with the Qerr-Skria, which is the clearest sign of caste inequality, as the Qerr-Skria is selected only from the Qerr-Katish caste, which translates roughly to "Highest Caste". A quick note on Skrellian linguistics is that the two most common prefixs are Qerr, which is high or good, and Qrii, which is low or bad. The Qerr-Katish represent a small minority of Skrell, receive the highest education available separate from other castes from the earliest levels, and are the only Skrell eligible for the position of Qerr-Skria. I hope that I do not need to explain to the reader the inequity of that. The nature of the position of Qerr-Skria, specifically their advisers, also structurally enforces caste conformity. The Qerr-Skria appoints a body of advisers known as the Qerr-Koal from the members of each caste considered to be the wisest, which directly correlates to those who best succeeded in their assigned educational path. Out-castes who pursue education outside of this path are illegible. This is true of the Xaq Moglar as well, which is composed entirely of academics, which is to say that Qrri-Mog, and thus out-castes as well, cannot be heard in legislature. With no internal voice in politics, out-castes have no choice but to either suffer in silence or make change from outside of the political system.

+ Thus, the Caste system perpetuates itself and its inequity. All Skrellian citizens are given a single choice and no other options - conform, or exist outside of all available power structures. By restricting power only to those who fit within the caste system, no internal change has been possible, and the only way that it can be changed is by creating forces outside of the existing power structure, be it revolution, protest, or garnering the support of outside governments. +
+ + + "}) \ No newline at end of file diff --git a/code/modules/library/hardcode_library/reference/PortedBooks.dm b/code/modules/library/hardcode_library/reference/PortedBooks.dm new file mode 100644 index 0000000000..27b1af9509 --- /dev/null +++ b/code/modules/library/hardcode_library/reference/PortedBooks.dm @@ -0,0 +1,371 @@ +/* +Here is where we're putting any books being ported from our old database. Should only be used for books submitted by an unknown or inactive player to try and keep ckeys tied to their authors. +Try and keep formatting clean. Also, if you add books with ugly font or color mixes, I WILL destroy you. -- Schnayy + +Category: Reference +*/ + +/// Recycling Procedures by 'Astrid Morton'. + +/obj/item/weapon/book/bundle/custom_library/reference/recyclingprocedures + name = "Recycling Procedures" + desc = "A hardbound book titled \"Recycling Procedures\" by Astrid Morton." + description_info = "This book is titled \"Recycling Procedures\" by Astrid Morton. It appears to be about ways you can help recycle on your average space station." + + title = "Recycling Procedures" + icon_state = "book7" + origkey = "Schnayy" + author = "Astrid Morton" + + pages = list({" + + + + + +


+
+

Recycling Procedures
+ Penned by Astrid Morton

+
+ + + "}, + {" + + + + + +
+

Station-Side Recycling Procedures

+
+
+
+

Resource Re-purposing

+
+

+ Cardboard Products
+ Most cardboard-based products, especially any boxes you may find, can be broken down to a sheet and stacked up. From there, you can reuse it to make folders, more boxes, or anything else you may need (such as a clever disguise). +

+ Glass Bulbs
+ Do not throw away your burnt out, broken light bulbs: collect them! These bulbs can be inserted into the nearest autolathe where their glass can be re-purposed. Broken bulbs and tubes both fit inside: just mind the sharp edges if they've been shattered. +

+ Glass Shards
+ Did somebody break a window again? No matter, put on your welding goggles and you can re-purpose those glass shards right there on the spot by melting it down back to a more useful state. +

+
+ + + "}, + {" + + + + + +
+
+

Disposals Reclamation

+

+ Sifting through ...stuff.
+ You would be amazed at the amount of materials that get flushed down disposals: and nearly half of it isn't garbage. People flush things down disposals all the time just to get rid of it: bags, tools, boxes. For one reason or another, some idiot in medbay has thrown away a perfectly good lab coat again. The engineer? They've thrown down an entire toolbox: empty, because they've probably stuffed its contents into their own tool belt. +

+ What. A. Tool. +

+ All theses objects need is a quick clean and then they can be redistributed or reused by someone else, so put on some gloves and start digging! +

+
+
+

Maintenance Meandering

+
+
+

+ Searching for Treasure
+ Like disposals, maintenance can be a 117th wonder of the universe. Lord knows how this stuff ends up in these tunnels: Drills. Shades. Cuffs. All these things can get organized and replaced in appropriate storage areas, but keep in mind: Some of that stuff's there for a reason, such as the emergency internals, gas masks, fire extinguishers, and flashlights. These types of objects should stay there: But if you find a bottle of liquor in a crate somewhere? Hell, why not bring that on home for a good time? +

+
+
+ + + "}) + +///A Guide to FBP and Prosthetic Maintenance by Yuki Matsuda. Was edited to be more accurate and fixed typos. + +/obj/item/weapon/book/bundle/custom_library/reference/fbpandprostheticmaintenance + name = "A Guide to FBP and Prosthetic Maintenance" + desc = "A hardbound book titled \"A Guide to FBP and Prosthetic Maintenance\" by Yuki Matsuda." + description_info = "This book is titled \"A Guide to FBP and Prosthetic Maintenance\" by Yuki Matsuda. It appears to cover general steps for repairing prosthetics." + + title = "A Guide to FBP and Prosthetic Maintenance" + icon_state = "bookEngineering" + origkey = "Schnayy" + author = "Yuki Matsuda" + + pages = list({" + + + + +

+
+


A Guide to
FBP and Prosthetic Maintenance

+ by Yuki Matsuda

+

+
+ + + "}, + {" + + + + + +

Introduction

+
+ This is a guide for anyone interested in the field of robotics, specifically in the field of FBP and prosthetic repair and maintenance, or anyone who is looking to learn how to care for themselves or others. +

+ In this guide will go through the basics of how to repair physical damage, electrical damage as well as more complex things such as repairing damage to the internal structure of the prosthetic, rewiring the inner workings of a prosthetic. +

+ On top of all that we will also go over how to repair prosthetic hearts or eyes, as well as how to initiate a hard reset on an FBP's systems after a large amount of damage has been inflicted on the individual. +
+

Tools

+
+ Before you start working on repairs, you should have the following parts on hand:
+
    +
  • Cyborg Scanner.
  • +
  • Welder.
  • +
  • Wire Cable
  • +
  • Screwdriver
  • +
  • Crowbar
  • +
  • Wire cutters
  • +
  • Multitool
  • +
+
+ + + "}, + {" + + + + +

Basic Repairs

+
+ When the damage is superficial, the following steps can be taken. +
    +
  • Scan the patient with your cyborg scanner.
  • +
  • If the damage is physical in nature, weld the affected area free of dents. Don't forget your welding protection.
  • +
  • If the damage appears electrical, search for burnt or damaged wires and replace them.
  • +
+
+

Advanced Repairs

+
+ When the damage is severe and extends past the surface, the following steps can be taken. +
    +
  • Ensure the damage is internal. If an area registers as 30 or higher on your scanners, it is internal.
  • +
  • Use a screwdriver to remove screws from the appropriate maintenance panel. + Crowbar the panel open.
  • +
  • Follow the basic steps appropriate to the damage: inner structures can be repaired through welding, while electrical damages can be rewired.
  • +
  • Crowbar the panel closed to finish.
  • +
+ Additionally, more delicate parts of the FBP may be damaged. For things such as the microbatteries, eyes, and brain, the following steps may help you. +
    +
  • Open the appropriate segment: either the head or the torso.
  • +
  • Using a screwdriver -- or preferably, nanopaste -- you may repair these parts.
  • +
  • Remember to close the segment when you are finished.
  • +
+
+ + + "}, + {" + + + + +

Jumper Cables

+
+ Should your patient be damaged to the point where their systems need to be jump started, you'll need your nearby jumper cables. +
    +
  • Repair the damages as explained above.
  • +
  • Prepare your jumper cables. You should hold the device on your back and take the paddles into both hands.
  • +
  • Place the paddles on their chest and give them a shock.
  • +
  • Sometimes, damage to the brain does not register until a jump start. Always check after a failure and repair as necessary before trying again.
  • +
+
+

Conclusion

+
+ And with that, you have all the essential steps to repairing and maintaining FBP's and prosthetics. These steps are applicable to any prosthetic limb, regardless of if the patient is an FBP. However, if an organic has a prosthetic organ and needs it repaired, it is best you refer them to medical and their team of highly trained surgeons to repair it. +
+ + + "}) + +///A Fistful of D6's: Player's Guide by Ray Rogers + +/obj/item/weapon/book/custom_library/reference/fistfulofd6splayersguide + + name = "A Fistful of D6's: Player's Guide" + desc = "A hardbound book titled \"A Fistful of D6's: Player's Guide\" by Ray Rogers." + description_info = "This book is titled \"A Fistful of D6's: Player's Guide\" by Ray Rogers. It is a player's guide to a TTRPG." + + title = "A Fistful of D6's: Player's Guide" + icon_state = "corp_regs" + origkey = "Schnayy" + author = "Ray Rogers" + + dat = {" + + + + +

A Fistful of D6's:
+ Player's Guide

+
by Ray Rogers

+
+ Each player starts with three attributes: Vigor, Grit, and Giddyup. Vigor counts how strong, how healthy, and how in-shape a cowpoke is. Grit defines how well a cowpoke can deal with wounds, how gritty his stare is, and how much ice cold water runs through their veins. Giddyup controls how agile a cowpoke is, how well they can dodge a bullet, and how well they can sling.

+ When rolling an attribute, a cowpoke uses one d6. If they roll a 4 or above, they succeed. A cowpoke can roll more or less d6s depending on situational advantages/disadvantages, items they may be carrying, or abilities they may have accrued in their time moseying. As long as a cowpoke has one more success than failure, they succeed. For each additional success, up to 6, that success is enhanced or modified in some way.

+ In combat, initiative is gained by pulling poker cards. Initiative is then resolved from highest to lowest suit and number. In the event of tying cards, suits are resolved in this order: Hearts, Spades, Diamonds, and then Clubs. Then the cowpoke who gets highest goes on his turn. During their turn, they can do anything they please. Whatever action they want to achieve, they describe it narratively, and then the storyteller tells them how many d6s they may roll to achieve this task. +
+
+
The player's guide to player A Fistful of D6s, a TTRPG (Tabletop Role-Playing Game) set in the Earth's past, inspired by early North American history.
+ + + "} + +///The Space Survival Guide: Depressurization by Lachina Green. + +/obj/item/weapon/book/custom_library/reference/spacesurvivalguidedespressurization + + name = "The Space Survival Guide: Depressurization" + desc = "A hardbound book titled \"The Space Survival Guide: Depressurization\" by Lachina Green." + description_info = "This book is titled \"The Space Survival Guide: Depressurization\" by Lachina Green. It is a guide on how to handle being in a depressurized room on a space station." + + title = "The Space Survival Guide: Depressurization" + icon_state = "evabook" + origkey = "Schnayy" + author = "Lachina Green" + + dat = {" + + + + +

The Space Survival Guide

+
+

How to Survive a Mass Depressurization Event

+
+
    +
  • Don your internals.
  • +
+

This is the first thing you should do in a mass depressurization event. Take out the breath mask and emergency air tank from the emergency box in your backpack. Put on the mask and clip the air tank securely to your belt; this way, you will not lose it if you fall over or pass out. Set the distribution pressure on your air tank to at least 18 kPA to conserve air. This represents the minimum threshold for a human to maintain consciousness.

+
    +
  • Find more oxygen.
  • +
+

You may find that your air tank will soon run out. Do not worry. There are numerous emergency oxygen closets placed throughout the station, blue in color with 'O2' written on the front in white. You can also retrieve an oxygen tank from a fire closet. When possible, fill up your air tank in one of the large, blue O2 canisters by inserting your air tank, setting the distribution pressure to max, and turning on the release valve. Just make sure to turn the release valve off before removing your oxygen tank.

+
    +
  • Stay aware of your surroundings.
  • +
+

Keep track of the local atmosphere. What is the pressure? Is it rising or falling? A pressure of 101 kPA is optimal for human survival, but you can survive conditions as low as 80 kPA for extended periods. You can check the pressure on the air alarms placed throughout the station or with your PDA's atmospheric scanner function. Make sure to check the pressure several times in quick succession, so you can know whether it is rising or falling.

+
    +
  • Avoid opening fire locks.
  • +
+

In the event of depressurization, the station's fire locks automatically drop in an attempt to contain the breach. However, this can also impede movement. If possible, find an alternate route to your destination or find a safe place to wait until the station's engineering team repairs the station. Do not open a fire lock without an engineer's express permission unless you are in immediate mortal danger. After you have opened a fire lock, make sure to close it immediately so as to prevent the breach from spreading.

+
    +
  • Listen to emergency personnel.
  • +
+

Follow the instructions of engineering, medical, and security personnel, as well as the orders of the heads of staff. Engineering personnel are trained to fix these situations, and medical personnel will likely be conducting search and rescue operations. Do not impede them and follow their instructions; you are more likely to survive, and less likely to endanger your fellow crew members.

+
+ + + "} + +///Security Guidelines by NanoTrasen. + +/obj/item/weapon/book/custom_library/reference/securityguidelines + + name = "Security Guidelines" + desc = "A hardbound book titled \"Security Guidelines\" as provided by NanoTrasen." + description_info = "This book is titled \"Security Guidelines\" as provided by NanoTrasen. It covers the basic security etiquette on NanoTrasen stations and vessels." + + title = "Security Guidelines" + icon_state = "bookSpaceLaw" + origkey = "Schnayy" + author = "NanoTrasen" + + dat = {" + + + + +

Security Guidelines

+
+
+

Golden Rule

+ Keep communications up at all times on the security channel and report all movements, arrests and all security matters over the radio. +
+
+
+

Guidelines

+
    +
  • Talk first, stun second.
  • +
  • Always call for backup before attempting to confront a possibly dangerous criminal.
  • +
  • Charge your weapons after every usage.
  • +
  • Stay calm under all circumstances, anger and fear show weakness.
  • +
  • Always lock security lockers and logout of security terminals after each use.
  • +
  • Seal off crime scenes and wait for forensics personnel to arrive.
  • +
  • Avoid using force where possible.
  • +
  • Inform the warden when a criminal is wanted and set their wanted status via your security HUD if possible. Beepsky is a force to be reckoned with.
  • +
  • Respect the chain of command! The warden outranks you within the brig itself. Obey the Head of Security, but remember that the Overseer outranks him.
  • +
  • Remember your priorities: one punch is hardly something to arrest anyone over if there is a hostage situation.
  • +
+
+
Security Guidelines as issued by NT
+ + + "} \ No newline at end of file diff --git a/code/modules/library/hardcode_library/reference/Schnayy.dm b/code/modules/library/hardcode_library/reference/Schnayy.dm new file mode 100644 index 0000000000..7d9c4c993c --- /dev/null +++ b/code/modules/library/hardcode_library/reference/Schnayy.dm @@ -0,0 +1,163 @@ +/* +CKEY: Schnayy +CATEGORY: Reference +*/ + +///Thermodynamic Reactions and Research: A Guide to Phoron Studies and Safety by I.R.I.S. + +/obj/item/weapon/book/bundle/custom_library/reference/ThermodynamicReactionsandResearch + name = "Thermodynamic Reactions and Research" + desc = "A hardbound book titled \"Thermodynamic Reactions and Research: A Guide to Phoron Studies and Safety\" by I.R.I.S.." + description_info = "This book is titled \"Thermodynamic Reactions and Research: A Guide to Phoron Studies and Safety\" by I.R.I.S.. It appears to cover the fundamentals of phoron and thermodynamic research." + + icon_state = "bookParticleAccelerator" + origkey = "Schnayy" + author = "I.R.I.S." + + pages = list({" + + + + + +


+
+


Thermodynamic Reactions and Research:
+ A Guide to Phoron Studies and Safety
+ by I.R.I.S.


+
+ + + "}, + {" + + + + + +
+
+

Foreword

+
+
+ Phoron research and study is a vital subject of research -- it has been a pillar of humanity's progress, a staple of the technology that has shaped our society. To work on expanding our knowledge and shape our future in the cosmos is a noble cause, but it should be done with caution. +

+ This is not to speak on safety in your lab, but the consequences of action. Many times has man created the unthinkable, and many times we have not been prepared for such discoveries. We should not censor ourselves from advancement, but we should shape the world to be ready for what comes with it – and know that it is an invariable consequence there will be those who seek to abuse it. +

+ You cannot take back what you give to the world. +
+
+ + + "}, + {" + + + + + +
+
+ Understanding and Operating Research +

+ As a phoron researcher, you will likely operate within two separate labs. The first is your department's research and development lab -- this is where you will study the elements of existing technology and build upon it. The second is your department's toxin's lab, in which all thermodynamic phoron research takes place. +

+ To begin, your standard research lab will contain several machines: an autolathe, a protolathe, a circuit printer, a destructive analyzer, and a console of some form to access your database. +

+ An autolathe and protolathe are similar machines in concept, but are operated in different ways. Both require materials to function: an autolathe is equipped to manipulate steel and glass, while a protolathe can make use of many more exotic kinds -- notably phoron. In order to operate an autolathe, you will interact with the machine directly. It is limited to a number of preset designs, some of which are more dangerous and locked behind internal safeties. A protolathe, however, is operated through your research console. Where an autolathe is limited in designs, a protolathe is intended to develop new ones. Through each item we analyze, our data grows, and as our data grows so too do potential designs in our protolathe. +

+ The circuit printer is much the same, requiring glass and sulphuric acid to operate. It, too, will expand on designs with research from analysis, and it is operated through your console. +

+ But to analyze new data, we must understand how the destructive analyzer works. This, too, is operated through your research console. In order to collect the data, the item must be destroyed through the delicate works of the analyzer. Once you are sure you wish to destroy an item for a final analysis, place it within the analyzer and open its menu on your console. Here it should predict what kind of data will be obtained from its destruction and how it compares to the existing research stored in the database. Simply confirm the analysis and the machine will activate. +

+ As you advance your database, new designs will require more kinds of materials. Many research stations are affiliated with a mining outpost or department. It is advised to contact them regarding any material needs. +

+ Remember that your research is valuable to your whole department -- even more so if there is a robotics division. Frequently access the settings on your console and sync your data with the database servers. +
+
+ + + "}, + {" + + + + + +
+
+ Thermodynamic Studies: Preparation +

+ While the research and development department is quite important to phoron studies, the toxins lab covers the relations between heat, energy, and phoron. Preparing and outfitting your lab is crucial to a successful study. +

+ If your lab is not already equipped with a gas cooling system, it is recommended you seek out one to use. With some work, these are obtainable in your research lab, but aid from your station's engineering team or using an existing one -- such as those that can be found in a medical bay - are also suitable. +

+ Next, note the pipes, ports, and where they all connect. Three ports should lead directly in to your mixing chamber. Two of these will pump in to it, while the third pumps out. There should be pumps within the airlock leading to the chamber that help operate these pipes. Two additional ports should lead to a heat exchanger. One side of the exchange should run pipes directly into the chamber, while the other only connects to the exchange. The former will heat up from an active mixing chamber, while the latter will heat the gas -- normally phoron -- in the canister attached to the port. +

+ Finally, you should note where the vent control is on your mixing chamber, as it may be needed in emergencies, and where the air scrubbers are in your lab. It is advised to have these in operation when working. +

+ All labs should come equipped with emergency gear. The most commonly used will be your fire safety locker -- containing a fire suit, helmet, and air tanks. Make sure to wear your safety gear before beginning any mix. +
+
+ + + "}, + {" + + + + + +
+
+ Thermodynamic Studies: The Mixing Chamber +

+ Before you start your mix, ensure the chamber is empty and clear. You can rid it of any contaminating gases in two ways: pumping it through the output port and into a canister, or venting the chamber of it. +

+ Next, collect the necessary gas canisters. The gases going into the chamber should be able to ignite and heat the pipes lining the floor and walls. Then a canister should be hooked to the port leading to said pipe lines. The gas pumped into these will heat the exchanger. Finally, a canister of phoron should be attached to the other side of the heat exchanger. This canister will be heated to use for study. +

+ Be warned that the burn chamber has limits. Once you are ready and ignite the gas, you should monitor the temperature. Once it begins to exceed 6,000K, the chamber walls will begin melting. Do not leave it unattended if there is an active fire inside. +

+ If all steps are done correctly, you will have a heated canister of phoron for study. +
+
+ + + "}, + {" + + + + + +
+
+ Thermodynamic Studies: What Next? +

+ Here is where the guidance ends. You have your heated phoron, and you have access to a gas cooling system. You may cool your available oxygen canisters and test the interaction of temperature and pressure variation. +

+ A word of warning and a reminder: smaller tanks for these tests are not built for high pressures. Before filling them the pressure release valves must be welded shut. Failure to do so will result in a potentially fatal gas leak. +
+
+ + + "}) \ No newline at end of file diff --git a/code/modules/library/hardcode_library/religious/PortedBooks.dm b/code/modules/library/hardcode_library/religious/PortedBooks.dm new file mode 100644 index 0000000000..36c4e65702 --- /dev/null +++ b/code/modules/library/hardcode_library/religious/PortedBooks.dm @@ -0,0 +1,291 @@ +/* +Here is where we're putting any books being ported from our old database. Should only be used for books submitted by an unknown or inactive player to try and keep ckeys tied to their authors. +Try and keep formatting clean. Also, if you add books with ugly font or color mixes, I WILL destroy you. -- Schnayy + +Category: Religion +*/ + +///A Basic Understanding of Zoroastrianism by Satrap + +/obj/item/weapon/book/bundle/custom_library/religious/zoroastrianism + name = "A Basic Understanding of Zoroastrianism" + desc = "A hardbound book titled \"A Basic Understanding of Zoroastrianism\" by Satrap." + description_info = "This book is titled \"A Basic Understanding of Zoroastrianism\" by Satrap. It covers the basics of Zoroastrianism -- an old religion originating on Earth -- as well as its influence on other religions." + + title = "A Basic Understanding of Zoroastrianism" + icon_state = "triangulate" + origkey = "Schnayy" + author = "Satrap" + + pages = list({" + + + + + +


+
+

A Basic Understanding of Zoroastrianism
+ by Satrap

+
+ + + "}, + {" + + + + + +

+ Zoroastrianism is one of the world's oldest founded religions. Founded about 4000 years ago in what is now known as Iran, it was one of the first religions to preach monotheism, and is considered the inspiration for Judaism, Christianity, and Islam. +

+ Zoroastrianism was founded by the prophet, Zoroaster. Zoroaster was a priest in an area that preached mostly polytheistic religions. He rejected these beliefs, mostly because they were used to classify people in a rigid social structure with priests controlling the ordinary people. One day, while bathing in a river, Zoroaster received a vision from God. +

+ Zoroaster reportedly found the visions of a God named Ahura Mazda, or the "Wise Lord". Ahura Mazda came down to Zoroaster in the form of his Amesha Spentas, or "Divine Immortals". This experience changed his worldview, and he sought to spread his religion through the lands. Despite some struggles, he was successful in that the Persian Empire picked up his beliefs, and spread them far and wide (but did not do so forcefully). +

+ Zoroastrianism is a simple religion. There is one God, Ahura Mazda. He is omnipotent, omnipresent, and the force behind all creation. His six Amesha Spentas are representations of himself in various aspects and forms. An analogy to think of is that he is the sun, and they are all rays of the sun. Ahura Mazda is opposed by a devil named Angra Mainyu, or the "Destructive Spirit". While Ahura Mazda seeks to create life and beauty, Angra Mainyu only seeks to destroy his greatness and glory at every turn. +


+

+ + + "}, + {" + + + + + +

+ There are three pillars of Zoroastrianism for all followers to practice. Simply put: they are good thoughts, good words, and good deeds. By following all three of these pillars to the best of your abilities, Ahura Mazda blessed you with a life of immortality in the next life, where you'll spend your times happily in paradise. +

+ Dualism plays an important role in the beliefs of a Zoroastrian. Ahura Mazda is good, while Angra Mainyu is evil. He is the sun, while she is the moon. Day and night, fire and water, life and death. The struggle between these two creates balance. However, one cannot be understood without the other. There is no day without night, no warmth if there is never cold, and so on. A balance must always exist. +

+ Happiness and sadness are also important to balance. Happiness is found by following Ahura Mazda's light, while sadness is found by giving in to the demons of Angra Mainyu. Heaven and Hell, the decision must be made by every man. Zoroastrianism appeases to the good in men, claiming that overall, mankind is of good nature, and will eventually triumph over evil. +

+ Funerals in Zoroastrian culture are rather usual. The corpse of the deceased is considered unholy, and a work of evil. To put this evil in contact with nature would corrupt the goodness of nature. As such, burials are strictly prohibited. The bodies of the dead are typically either preserved in stone tombs or mausoleums, or in sky towers of stone. These methods of funerals are increasingly inconvenient in the modern age, and thus, many Zoroastrians opt for cremation instead. +

+ There are no specific rituals for prayer, or how often a prayer must be commenced every day. But all that is demanded is that the faithful pray to Ahura Mazda every day. If possible, they may pray to a candle or a fire, as the fire represents his warmth and guidance. +

+
+ + + "}) + + +/// The Way of the Bleeding Swan by Shra'ziir Krin Enai-Rinrijar. I have no idea what this is about but it was in religion. + +/obj/item/weapon/book/custom_library/religious/wayofbleedingswan + name = "The Way of the Bleeding Swan" + desc = "A hardbound book titled \"The Way of the Bleeding Swan\" by Shra'ziir Krin Enai-Rinrijar." + description_info = "This book is titled \"The Way of the Bleeding Swan\" by Shra'ziir Krin Enai-Rinrijar. It appears religious in nature." + + title = "The Way of the Bleeding Swan" + icon_state = "book" + origkey = "Schnayy" + author = "Shra'ziir Krin Enai-Rinrijar" + + dat = {" + + + + +

Qoii'Jar Vahk
The Way of the Bleeding Swan

+
+

I

+ The curse of life is the cure of want,
+ for we are creatures of desire, cast upon the world like grains of sand in the storm.
+ These desires are merely the fuel, mark this,
+ it is the fuel to the fire, and we are the flame.
+ The Way is to find meaning in balance, not in pure indulgence or abstinence.
+
+
+
+

II

+ How little you know of the world, you joyous, free folk
+ who turn thy gaze from the sight of the suffering,
+ who blind themselves for want of an excuse to stagnate.
+ The Way is to engrave the image of injustice upon thy eye.
+
+
+
+

III

+ How vain the one, upon the gallows, wails and whines their time away.
+ Hath we not said our piece? Hath we lived in such delusional immortality?
+ The Coward dies many deaths, for he never prepares himself for his final rest
+ The Way is to consider the end, with clarity and respect.
+
+
+
+

IV

+ Woe be stricken upon the spectator, who cries aloud when he is centerfold;
+ Who cries "What wrong have I done?" when the blade falls down.
+ Every action provokes change, but inaction surrenders to change the same.
+ The Way is to hold thyself accountable without self-deceit.
+
+
+
+

V

+ Eii Aj Yokiija
+ "Petals Must Fall"
+ In your haste to save the seed
+ remember you cannot catch them all.
+ The Way is not the absence of fear, or love
+ The Way is the way of letting go.
+
+
+
+

VI

+ Hope is the most durable of illusions;
+ standing true of whatever might array against it.
+ But once it breaks, the One is lost in it's absence.
+ The Royal Swan is born stark white, like the full moon,
+ yet walks into the red waters and bloodies it's feathers.
+ The Way is to let go of the need for hope and embrace Yokii.
+
+
+
+

VII

+ All religions claim the same god under different names -- + and yet we call to her still, in the dark, a myriad of tongues. + There is only one God, Yokii, "Death". + The Way is to know the long dark, so the light may be appreciated. +
+ + + "} + +/// The Sun Goddess of Korea by Korean Folklore + +/obj/item/weapon/book/custom_library/religious/sungoddessofkorea + + name = "The Sun Goddess of Korea" + desc = "A hardbound book titled \"The Sun Goddess of Korea\" as provided by the Earth Religion Preservation Team." + description_info = "This book is titled \"The Sun Goddess of Korea\" as provided by the Earth Religious Preservation Team. It covers the Korean sun goddess, Hae-soon." + + title = "The Sun Goddess of Korea" + icon_state = "book3" + origkey = "Schnayy" + author = "Earth Religion Preservation" + + dat = {" + + + + +

The Sun Goddess of Korea

+

+ Let us enjoy reading this Korean mythological story of the Sun-Goddess of Korea.

+ Byun-soon, Dael-soon and Hae-soon were three sisters. One day a tiger came to their house, and on seeing him the girls ran out of the back door and climbed a tree.

+ When the tiger began to climb the tree, the sisters prayed to the gods to save them. Their prayers were answered.

+ An iron chain descended from the skies and the sisters climbed up to safety.

+ They lived happily in the land of the gods, and in time, Byun-soon was transformed into a star, Dael-soon into the moon and Hae-soon into the sun.

+ When Hae-soon set out across the skies on her first day out as the sun, people on earth came out of their homes to stare at her. Hae-soon was an extremely shy girl and she turned bright with embarrassment when she saw the people looking up at her.

+ The more they stared, the brighter she became, till finally she became so bright that the people were blinded by her radiance and could no longer look up. This suited the shy Hae-soon and she continued to glow brightly from then on. +

+
+ + + "} + +/// The Story of Lord Ganesha by Hindu Folklore + +/obj/item/weapon/book/custom_library/religious/storyoflordganesha + + name = "The Story of Lord Ganesha" + desc = "A hardbound book titled \"The Story of Lord Ganesha\" as provided by the Earth Religion Preservation Team." + description_info = "This book is titled \"The Story of Lord Ganesha\" as provided by the Earth Religion Preservation Team." + + title = "The Story of Lord Ganesha" + icon_state = "book3" + origkey = "Schnayy" + author = "Earth Religion Preservation" + + dat = {" + + + + +

The Story of Lord Ganesha

+

+ One day, Goddess Parvathi, the wife of Lord Shiva, was getting ready for her bath and needed someone to guard her chamber.

+ Therefore she made a beautiful, young boy from the sandalwood from her body. She gave him life by sprinkling the Holy Ganges water on him and entrusted him with guarding the door.

+ While she was away, Lord Shiva returned and was surprised to find a little boy standing at the entrance to his wife's chamber. When he tried to enter, the boy blocked his path.

+ "Who are you and why are you blocking my path?" demanded Lord Shiva.

+ "No one enters my mother's chamber," declared the boy boldly.

+ Taken aback, Lord Shiva replied, "Step away; I have the right to enter my wife's chamber."

+ But the young and courageous boy did not move but stood his ground.

+ Not knowing that this was his own son, Lord Shiva who was quick to anger grew enraged. Not used to be disobeyed he cut off the boy's head.

+ Goddess Parvathi on returning from her bath saw her son lying dead and was overcome with grief. She was filled with both anger and sorrow.

+ Seeing this Lord Shiva sent his soldiers to fetch the head of the first beast that they saw. The men rushed and finally came upon an elephant. They immediately took the head to Lord Shiva, who quickly attached it onto the body of the slain boy and gave him life once again.

+ To further appease his grief-stricken wife he promised that her son would be worshiped first, before all other Gods.

+ Even today at the entrance of all temples one would find the idol of the elephant-headed God, Lord Ganesha. +

+ + + "} + +/// Feast of Kubera by Hindu Folklore + +/obj/item/weapon/book/custom_library/religious/feastofkubera + + name = "Feast of Kubera" + desc = "A hardbound book titled \"The Story of Lord Ganesha\" as provided by the Earth Religion Preservation Team." + description_info = "This book is titled \"The Story of Lord Ganesha\" as provided by the Earth Religion Preservation Team." + + title = "Feast of Kubera" + icon_state = "book3" + origkey = "Schnayy" + author = "Earth Religion Preservation" + + dat = {" + + + + +

Feast of Kubera

+

+ Kubera, god of wealth, had become arrogant. One day he decided to host an extravagant feast for the gods, such a feast as never had been hosted before. It would increase his prestige and show all men and gods the extent of his wealth and influence.

+ Accordingly, he went to Mount Kailash to invite Lord Shiva. Shiva was his patron. Kubera owed all his wealth to Shiva who, pleased with his devotion, had given him the boon that his wealth would never diminish, no matter how much he spent.

+ Shiva declined to come but said he would send his son, Ganesha. Kubera was disappointed. Shiva's presence would have been a feather in his cap. But at least he was sending Ganesha. It would have been a terrible snub if no one from the family were to come. Kubera resolved to make the feast so grand that Shiva's absence would not be felt.

+ The guests were many, thousands of them, both gods and men. They were accommodated in a huge hall built especially for the purpose. The chief guest, Ganesha, was the last to come.

+ The moment he entered, he began to ask for food. He was shown to a seat of honor and tantalizing dishes were set before him. He gulped them down and asked for more. He was given a second helping and then a third but his appetite remained undiminished.

+ Kubera ordered his army of cooks to produce more food but they could not keep pace with Ganesha's eating frenzy. The elephant-god was eating food meant for thousands. When he had finished all the food set before him, he began to shout, "Give me more, give me more!" and then getting impatiently to his feet, rushed to the enormous kitchen and devoured all the food there.

+ Kubera was aghast. All the food was gone and the guests had not been fed. Worse, Ganesha was still hungry.

+ "You call this a feast?" Ganesha admonished Kubera. "There's no food here. I'm going home."

+ Kubera pleaded with him to stay, promising him more food in a little while but his young guest was in no mood to listen. He got on his mount and sped away. Kubera, fearing Shiva's wrath, followed in his own vehicle. When he arrived at Kailash, he found Ganesha complaining loudly to his father about the lack of food at his feast.

+ "What's this I hear, Kubera?" asked Shiva, turning to the god. "No food at your feast?"

+ "I... I...," mumbled Kubera.

+ "Go in and ask your mother for some food," said Shiva to his son. "I'm sure Kubera did his best."

+ "I did, I did, my lord," said Kubera, feeling miserable. His feast had turned into a farce. Instead of adding to his prestige it had made him a laughing stock. But he was relieved to see that Shiva did not appear to be angry.

+ He fell at his patron's feet and begged forgiveness for his pride. +

+ + + "} \ No newline at end of file diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 39070779ca..e86ed026b7 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -527,17 +527,34 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f density = 1 /obj/machinery/bookbinder/attackby(var/obj/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/weapon/paper)) - user.drop_item() - O.loc = src - user.visible_message("[user] loads some paper into [src].", "You load some paper into [src].") - src.visible_message("[src] begins to hum as it warms up its printing drums.") - sleep(rand(200,400)) - src.visible_message("[src] whirs as it prints and binds a new book.") - var/obj/item/weapon/book/b = new(src.loc) - b.dat = O:info - b.name = "Print Job #" + "[rand(100, 999)]" - b.icon_state = "book[rand(1,7)]" - qdel(O) + if(istype(O, /obj/item/weapon/paper) || istype(O, /obj/item/weapon/paper_bundle)) + if(istype(O, /obj/item/weapon/paper)) + user.drop_item() + O.loc = src + user.visible_message("[user] loads some paper into [src].", "You load some paper into [src].") + src.visible_message("[src] begins to hum as it warms up its printing drums.") + sleep(rand(200,400)) + src.visible_message("[src] whirs as it prints and binds a new book.") + var/obj/item/weapon/book/b = new(src.loc) + b.dat = O:info + b.name = "Print Job #" + "[rand(100, 999)]" + b.icon_state = "book[rand(1,7)]" + qdel(O) + else + user.drop_item() + O.loc = src + user.visible_message("[user] loads some paper into [src].", "You load some paper into [src].") + src.visible_message("[src] begins to hum as it warms up its printing drums.") + sleep(rand(300,500)) + src.visible_message("[src] whirs as it prints and binds a new book.") + var/obj/item/weapon/book/bundle/b = new(src.loc) + b.pages = O:pages + for(var/obj/item/weapon/paper/P in O.contents) + P.forceMove(b) + for(var/obj/item/weapon/photo/P in O.contents) + P.forceMove(b) + b.name = "Print Job #" + "[rand(100, 999)]" + b.icon_state = "book[rand(1,7)]" + qdel(O) else ..() diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/dead/corpse.dm similarity index 96% rename from code/modules/mob/living/simple_animal/corpse.dm rename to code/modules/mob/dead/corpse.dm index 62b2c43fe8..81a51214a7 100644 --- a/code/modules/mob/living/simple_animal/corpse.dm +++ b/code/modules/mob/dead/corpse.dm @@ -1,170 +1,170 @@ -//Meant for simple animals to drop lootable human bodies. - -//If someone can do this in a neater way, be my guest-Kor - -//This has to be seperate from the Away Mission corpses, because New() doesn't work for those, and initialize() doesn't work for these. - -//To do: Allow corpses to appear mangled, bloody, etc. Allow customizing the bodies appearance (they're all bald and white right now). - - -/obj/effect/landmark/mobcorpse - name = "Unknown" - var/mobname = "Unknown" //Unused now but it'd fuck up maps to remove it now - var/corpseuniform = null //Set this to an object path to have the slot filled with said object on the corpse. - var/corpsesuit = null - var/corpseshoes = null - var/corpsegloves = null - var/corpseradio = null - var/corpseglasses = null - var/corpsemask = null - var/corpsehelmet = null - var/corpsebelt = null - var/corpsepocket1 = null - var/corpsepocket2 = null - var/corpseback = null - var/corpseid = 0 //Just set to 1 if you want them to have an ID - var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access - var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access. - var/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID - -/obj/effect/landmark/mobcorpse/New() - createCorpse() - -/obj/effect/landmark/mobcorpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it. - var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc) - M.real_name = src.name - M.stat = 2 //Kills the new mob - if(src.corpseuniform) - M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform) - if(src.corpsesuit) - M.equip_to_slot_or_del(new src.corpsesuit(M), slot_wear_suit) - if(src.corpseshoes) - M.equip_to_slot_or_del(new src.corpseshoes(M), slot_shoes) - if(src.corpsegloves) - M.equip_to_slot_or_del(new src.corpsegloves(M), slot_gloves) - if(src.corpseradio) - M.equip_to_slot_or_del(new src.corpseradio(M), slot_l_ear) - if(src.corpseglasses) - M.equip_to_slot_or_del(new src.corpseglasses(M), slot_glasses) - if(src.corpsemask) - M.equip_to_slot_or_del(new src.corpsemask(M), slot_wear_mask) - if(src.corpsehelmet) - M.equip_to_slot_or_del(new src.corpsehelmet(M), slot_head) - if(src.corpsebelt) - M.equip_to_slot_or_del(new src.corpsebelt(M), slot_belt) - if(src.corpsepocket1) - M.equip_to_slot_or_del(new src.corpsepocket1(M), slot_r_store) - if(src.corpsepocket2) - M.equip_to_slot_or_del(new src.corpsepocket2(M), slot_l_store) - if(src.corpseback) - M.equip_to_slot_or_del(new src.corpseback(M), slot_back) - if(src.corpseid == 1) - var/obj/item/weapon/card/id/W = new(M) - W.name = "[M.real_name]'s ID Card" - var/datum/job/jobdatum - for(var/jobtype in typesof(/datum/job)) - var/datum/job/J = new jobtype - if(J.title == corpseidaccess) - jobdatum = J - break - if(src.corpseidicon) - W.icon_state = corpseidicon - if(src.corpseidaccess) - if(jobdatum) - W.access = jobdatum.get_access() - else - W.access = list() - if(corpseidjob) - W.assignment = corpseidjob - W.registered_name = M.real_name - M.equip_to_slot_or_del(W, slot_wear_id) - delete_me = 1 - qdel(src) - - - -//List of different corpse types - -/obj/effect/landmark/mobcorpse/syndicatesoldier - name = "Mercenary" - corpseuniform = /obj/item/clothing/under/syndicate - corpsesuit = /obj/item/clothing/suit/armor/vest - corpseshoes = /obj/item/clothing/shoes/boots/swat - corpsegloves = /obj/item/clothing/gloves/swat - corpseradio = /obj/item/device/radio/headset - corpsemask = /obj/item/clothing/mask/gas - corpsehelmet = /obj/item/clothing/head/helmet/swat - corpseback = /obj/item/weapon/storage/backpack - corpseid = 1 - corpseidjob = "Operative" - corpseidaccess = "Syndicate" - -/obj/effect/landmark/mobcorpse/solarpeacekeeper - name = "Mercenary" - corpseuniform = /obj/item/clothing/under/syndicate - corpsesuit = /obj/item/clothing/suit/armor/pcarrier/blue/sol - corpseshoes = /obj/item/clothing/shoes/boots/swat - corpsegloves = /obj/item/clothing/gloves/swat - corpseradio = /obj/item/device/radio/headset - corpsemask = /obj/item/clothing/mask/gas - corpsehelmet = /obj/item/clothing/head/helmet/swat - corpseback = /obj/item/weapon/storage/backpack - corpseid = 1 - corpseidjob = "Peacekeeper" - corpseidaccess = "Syndicate" - -/obj/effect/landmark/mobcorpse/syndicatecommando - name = "Syndicate Commando" - corpseuniform = /obj/item/clothing/under/syndicate - corpsesuit = /obj/item/clothing/suit/space/void/merc - corpseshoes = /obj/item/clothing/shoes/boots/swat - corpsegloves = /obj/item/clothing/gloves/swat - corpseradio = /obj/item/device/radio/headset - corpsemask = /obj/item/clothing/mask/gas/syndicate - corpsehelmet = /obj/item/clothing/head/helmet/space/void/merc - corpseback = /obj/item/weapon/tank/jetpack/oxygen - corpsepocket1 = /obj/item/weapon/tank/emergency/oxygen - corpseid = 1 - corpseidjob = "Operative" - corpseidaccess = "Syndicate" - - - -/obj/effect/landmark/mobcorpse/clown - name = "Clown" - corpseuniform = /obj/item/clothing/under/rank/clown - corpseshoes = /obj/item/clothing/shoes/clown_shoes - corpseradio = /obj/item/device/radio/headset - corpsemask = /obj/item/clothing/mask/gas/clown_hat - corpsepocket1 = /obj/item/weapon/bikehorn - corpseback = /obj/item/weapon/storage/backpack/clown - corpseid = 1 - corpseidjob = "Clown" - corpseidaccess = "Clown" - - - -/obj/effect/landmark/mobcorpse/pirate - name = "Pirate" - corpseuniform = /obj/item/clothing/under/pirate - corpseshoes = /obj/item/clothing/shoes/boots/jackboots - corpseglasses = /obj/item/clothing/glasses/eyepatch - corpsehelmet = /obj/item/clothing/head/bandana - - - -/obj/effect/landmark/mobcorpse/pirate/ranged - name = "Pirate Gunner" - corpsesuit = /obj/item/clothing/suit/pirate - corpsehelmet = /obj/item/clothing/head/pirate - - - -/obj/effect/landmark/mobcorpse/russian - name = "Russian" - corpseuniform = /obj/item/clothing/under/soviet - corpseshoes = /obj/item/clothing/shoes/boots/jackboots - corpsehelmet = /obj/item/clothing/head/bearpelt - -/obj/effect/landmark/mobcorpse/russian/ranged +//Meant for simple animals to drop lootable human bodies. + +//If someone can do this in a neater way, be my guest-Kor + +//This has to be seperate from the Away Mission corpses, because New() doesn't work for those, and initialize() doesn't work for these. + +//To do: Allow corpses to appear mangled, bloody, etc. Allow customizing the bodies appearance (they're all bald and white right now). + + +/obj/effect/landmark/mobcorpse + name = "Unknown" + var/mobname = "Unknown" //Unused now but it'd fuck up maps to remove it now + var/corpseuniform = null //Set this to an object path to have the slot filled with said object on the corpse. + var/corpsesuit = null + var/corpseshoes = null + var/corpsegloves = null + var/corpseradio = null + var/corpseglasses = null + var/corpsemask = null + var/corpsehelmet = null + var/corpsebelt = null + var/corpsepocket1 = null + var/corpsepocket2 = null + var/corpseback = null + var/corpseid = 0 //Just set to 1 if you want them to have an ID + var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access + var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access. + var/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID + +/obj/effect/landmark/mobcorpse/New() + createCorpse() + +/obj/effect/landmark/mobcorpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it. + var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc) + M.real_name = src.name + M.stat = 2 //Kills the new mob + if(src.corpseuniform) + M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform) + if(src.corpsesuit) + M.equip_to_slot_or_del(new src.corpsesuit(M), slot_wear_suit) + if(src.corpseshoes) + M.equip_to_slot_or_del(new src.corpseshoes(M), slot_shoes) + if(src.corpsegloves) + M.equip_to_slot_or_del(new src.corpsegloves(M), slot_gloves) + if(src.corpseradio) + M.equip_to_slot_or_del(new src.corpseradio(M), slot_l_ear) + if(src.corpseglasses) + M.equip_to_slot_or_del(new src.corpseglasses(M), slot_glasses) + if(src.corpsemask) + M.equip_to_slot_or_del(new src.corpsemask(M), slot_wear_mask) + if(src.corpsehelmet) + M.equip_to_slot_or_del(new src.corpsehelmet(M), slot_head) + if(src.corpsebelt) + M.equip_to_slot_or_del(new src.corpsebelt(M), slot_belt) + if(src.corpsepocket1) + M.equip_to_slot_or_del(new src.corpsepocket1(M), slot_r_store) + if(src.corpsepocket2) + M.equip_to_slot_or_del(new src.corpsepocket2(M), slot_l_store) + if(src.corpseback) + M.equip_to_slot_or_del(new src.corpseback(M), slot_back) + if(src.corpseid == 1) + var/obj/item/weapon/card/id/W = new(M) + W.name = "[M.real_name]'s ID Card" + var/datum/job/jobdatum + for(var/jobtype in typesof(/datum/job)) + var/datum/job/J = new jobtype + if(J.title == corpseidaccess) + jobdatum = J + break + if(src.corpseidicon) + W.icon_state = corpseidicon + if(src.corpseidaccess) + if(jobdatum) + W.access = jobdatum.get_access() + else + W.access = list() + if(corpseidjob) + W.assignment = corpseidjob + W.registered_name = M.real_name + M.equip_to_slot_or_del(W, slot_wear_id) + delete_me = 1 + qdel(src) + + + +//List of different corpse types + +/obj/effect/landmark/mobcorpse/syndicatesoldier + name = "Mercenary" + corpseuniform = /obj/item/clothing/under/syndicate + corpsesuit = /obj/item/clothing/suit/armor/vest + corpseshoes = /obj/item/clothing/shoes/boots/swat + corpsegloves = /obj/item/clothing/gloves/swat + corpseradio = /obj/item/device/radio/headset + corpsemask = /obj/item/clothing/mask/gas + corpsehelmet = /obj/item/clothing/head/helmet/swat + corpseback = /obj/item/weapon/storage/backpack + corpseid = 1 + corpseidjob = "Operative" + corpseidaccess = "Syndicate" + +/obj/effect/landmark/mobcorpse/solarpeacekeeper + name = "Mercenary" + corpseuniform = /obj/item/clothing/under/syndicate + corpsesuit = /obj/item/clothing/suit/armor/pcarrier/blue/sol + corpseshoes = /obj/item/clothing/shoes/boots/swat + corpsegloves = /obj/item/clothing/gloves/swat + corpseradio = /obj/item/device/radio/headset + corpsemask = /obj/item/clothing/mask/gas + corpsehelmet = /obj/item/clothing/head/helmet/swat + corpseback = /obj/item/weapon/storage/backpack + corpseid = 1 + corpseidjob = "Peacekeeper" + corpseidaccess = "Syndicate" + +/obj/effect/landmark/mobcorpse/syndicatecommando + name = "Syndicate Commando" + corpseuniform = /obj/item/clothing/under/syndicate + corpsesuit = /obj/item/clothing/suit/space/void/merc + corpseshoes = /obj/item/clothing/shoes/boots/swat + corpsegloves = /obj/item/clothing/gloves/swat + corpseradio = /obj/item/device/radio/headset + corpsemask = /obj/item/clothing/mask/gas/syndicate + corpsehelmet = /obj/item/clothing/head/helmet/space/void/merc + corpseback = /obj/item/weapon/tank/jetpack/oxygen + corpsepocket1 = /obj/item/weapon/tank/emergency/oxygen + corpseid = 1 + corpseidjob = "Operative" + corpseidaccess = "Syndicate" + + + +/obj/effect/landmark/mobcorpse/clown + name = "Clown" + corpseuniform = /obj/item/clothing/under/rank/clown + corpseshoes = /obj/item/clothing/shoes/clown_shoes + corpseradio = /obj/item/device/radio/headset + corpsemask = /obj/item/clothing/mask/gas/clown_hat + corpsepocket1 = /obj/item/weapon/bikehorn + corpseback = /obj/item/weapon/storage/backpack/clown + corpseid = 1 + corpseidjob = "Clown" + corpseidaccess = "Clown" + + + +/obj/effect/landmark/mobcorpse/pirate + name = "Pirate" + corpseuniform = /obj/item/clothing/under/pirate + corpseshoes = /obj/item/clothing/shoes/boots/jackboots + corpseglasses = /obj/item/clothing/glasses/eyepatch + corpsehelmet = /obj/item/clothing/head/bandana + + + +/obj/effect/landmark/mobcorpse/pirate/ranged + name = "Pirate Gunner" + corpsesuit = /obj/item/clothing/suit/pirate + corpsehelmet = /obj/item/clothing/head/pirate + + + +/obj/effect/landmark/mobcorpse/russian + name = "Russian" + corpseuniform = /obj/item/clothing/under/soviet + corpseshoes = /obj/item/clothing/shoes/boots/jackboots + corpsehelmet = /obj/item/clothing/head/bearpelt + +/obj/effect/landmark/mobcorpse/russian/ranged corpsehelmet = /obj/item/clothing/head/ushanka \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/corpse_vr.dm b/code/modules/mob/dead/corpse_vr.dm similarity index 100% rename from code/modules/mob/living/simple_animal/corpse_vr.dm rename to code/modules/mob/dead/corpse_vr.dm diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index fc269a3120..0fc9cbae36 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -22,7 +22,7 @@ if (message) - message = say_emphasis(message) + message = encode_html_emphasis(message) // Hearing gasp and such every five seconds is not good emotes were not global for a reason. // Maybe some people are okay with that. @@ -81,7 +81,7 @@ else input = message - input = say_emphasis(input) + input = encode_html_emphasis(input) if(input) log_ghostemote(input, src) diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index f316797dc2..ad3689e8c5 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -45,7 +45,7 @@ if(italics) message = "[message]" - message = say_emphasis(message) + message = encode_html_emphasis(message) var/track = null if(istype(src, /mob/observer/dead)) @@ -115,36 +115,14 @@ /mob/living/silicon/ai/special_mentions() return list("AI") // AI door! -// Converts specific characters, like +, |, and _ to formatted output. -/mob/proc/say_emphasis(var/message) - message = encode_html_emphasis(message, "|", "i") - message = encode_html_emphasis(message, "+", "b") - message = encode_html_emphasis(message, "_", "u") - return message - -// Replaces a character inside message with html tags. Note that html var must not include brackets. -// Will not create an open html tag if it would not have a closing one. -/proc/encode_html_emphasis(var/message, var/char, var/html) - var/i = 20 // Infinite loop safety. - var/pattern = "(?") - 1 - - // Now replace both. - message = replacetext(message, char, "<[html]>", first, first + 1) - message = replacetext(message, char, "", second + length_increase, second + length_increase + 1) - - // Check again to see if we need to keep going. - first = re.Find(message) - second = re.Find(message, first + 1) - i-- - if(!i) - CRASH("Possible infinite loop occured in encode_html_emphasis().") - return message +/proc/encode_html_emphasis(message) + var/tagged_message = message + for(var/delimiter in GLOB.speech_toppings) + var/regex/R = new("\\[delimiter](.+?)\\[delimiter]","g") + var/tag = GLOB.speech_toppings[delimiter] + tagged_message = R.Replace(tagged_message,"<[tag]>$1") + + return tagged_message /mob/proc/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="") @@ -240,7 +218,7 @@ speaker_name = "[speaker.real_name] ([speaker_name])" track = "[speaker_name] ([ghost_follow_link(speaker, src)])" - message = say_emphasis(message) + message = encode_html_emphasis(message) var/formatted if(language) @@ -317,7 +295,7 @@ if(copytext(heardword,1, 1) in punctuation) heardword = copytext(heardword,2) if(copytext(heardword,-1) in punctuation) - heardword = copytext(heardword,1,lentext(heardword)) + heardword = copytext(heardword,1,length(heardword)) heard = "...You hear something about...[heardword]" else diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm index 9bc0a68653..6aba8228fd 100644 --- a/code/modules/mob/language/language.dm +++ b/code/modules/mob/language/language.dm @@ -179,7 +179,7 @@ // Language handling. /mob/proc/add_language(var/language) - var/datum/language/new_language = all_languages[language] + var/datum/language/new_language = GLOB.all_languages[language] if(!istype(new_language) || (new_language in languages)) return 0 @@ -188,12 +188,12 @@ return 1 /mob/proc/remove_language(var/rem_language) - var/datum/language/L = all_languages[rem_language] + var/datum/language/L = GLOB.all_languages[rem_language] . = (L in languages) languages.Remove(L) /mob/living/remove_language(rem_language) - var/datum/language/L = all_languages[rem_language] + var/datum/language/L = GLOB.all_languages[rem_language] if(default_language == L) default_language = null return ..() @@ -205,10 +205,10 @@ log_debug("[src] attempted to speak a null language.") return 0 - if(speaking == all_languages["Noise"]) + if(speaking == GLOB.all_languages["Noise"]) return 1 - if (only_species_language && speaking != all_languages[species_language]) + if (only_species_language && speaking != GLOB.all_languages[species_language]) return 0 if(speaking.can_speak_special(src)) @@ -268,7 +268,7 @@ if(href_list["default_lang"]) if(href_list["default_lang"] == "reset") if (species_language) - set_default_language(all_languages[species_language]) + set_default_language(GLOB.all_languages[species_language]) else set_default_language(null) else diff --git a/code/modules/mob/language/synthetic.dm b/code/modules/mob/language/synthetic.dm index 36dd57bc69..e39674e037 100644 --- a/code/modules/mob/language/synthetic.dm +++ b/code/modules/mob/language/synthetic.dm @@ -18,7 +18,7 @@ if (!message) return - message = speaker.say_emphasis(message) + message = encode_html_emphasis(message) var/message_start = "[name], [speaker.name]" var/message_body = "[speaker.say_quote(message)], \"[message]\"" diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm index 3ba745a014..7d71c92343 100644 --- a/code/modules/mob/living/bot/bot.dm +++ b/code/modules/mob/living/bot/bot.dm @@ -45,7 +45,7 @@ ..() update_icons() - default_language = all_languages[LANGUAGE_GALCOM] + default_language = GLOB.all_languages[LANGUAGE_GALCOM] botcard = new /obj/item/weapon/card/id(src) botcard.access = botcard_access.Copy() diff --git a/code/modules/mob/living/carbon/alien/diona/diona.dm b/code/modules/mob/living/carbon/alien/diona/diona.dm index 3d09887f34..01f1d2f57d 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona.dm @@ -22,7 +22,7 @@ /mob/living/carbon/alien/diona/Initialize() . = ..() - species = all_species[SPECIES_DIONA] + species = GLOB.all_species[SPECIES_DIONA] add_language(LANGUAGE_ROOTGLOBAL) add_language(LANGUAGE_GALCOM) verbs += /mob/living/carbon/alien/diona/proc/merge diff --git a/code/modules/mob/living/carbon/alien/diona/progression.dm b/code/modules/mob/living/carbon/alien/diona/progression.dm index e259b18f27..b4eb85f090 100644 --- a/code/modules/mob/living/carbon/alien/diona/progression.dm +++ b/code/modules/mob/living/carbon/alien/diona/progression.dm @@ -1,6 +1,6 @@ /mob/living/carbon/alien/diona/confirm_evolution() - if(!is_alien_whitelisted(src, all_species[SPECIES_DIONA])) + if(!is_alien_whitelisted(src, GLOB.all_species[SPECIES_DIONA])) src << alert("You are currently not whitelisted to play as a full diona.") return null diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 4d58c094ce..6b218c6e5f 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -6,7 +6,7 @@ touching = new/datum/reagents/metabolism/touch(500, src) reagents = bloodstr if (!default_language && species_language) - default_language = all_languages[species_language] + default_language = GLOB.all_languages[species_language] /mob/living/carbon/Life() ..() @@ -378,12 +378,12 @@ if(can_speak(default_language)) return default_language else - return all_languages[LANGUAGE_GIBBERISH] + return GLOB.all_languages[LANGUAGE_GIBBERISH] if(!species) return null - return species.default_language ? all_languages[species.default_language] : null + return species.default_language ? GLOB.all_languages[species.default_language] : null /mob/living/carbon/proc/should_have_organ(var/organ_check) return 0 diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index 454ce677a8..86b8c27da6 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -10,7 +10,7 @@ if(species == new_species) return - if(!(new_species in all_species)) + if(!(new_species in GLOB.all_species)) return set_species(new_species) @@ -144,8 +144,8 @@ /mob/living/carbon/human/proc/generate_valid_species(var/check_whitelist = 1, var/list/whitelist = list(), var/list/blacklist = list()) var/list/valid_species = new() - for(var/current_species_name in all_species) - var/datum/species/current_species = all_species[current_species_name] + for(var/current_species_name in GLOB.all_species) + var/datum/species/current_species = GLOB.all_species[current_species_name] if(check_whitelist && config.usealienwhitelist && !check_rights(R_ADMIN, 0, src)) //If we're using the whitelist, make sure to check it! if(!(current_species.spawn_flags & SPECIES_CAN_JOIN)) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index e1974acf12..f1efd4933d 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1120,7 +1120,7 @@ dna.species = new_species // No more invisible screaming wheelchairs because of set_species() typos. - if(!all_species[new_species]) + if(!GLOB.all_species[new_species]) new_species = SPECIES_HUMAN if(species) @@ -1137,7 +1137,7 @@ species.remove_inherent_verbs(src) holder_type = null - species = all_species[new_species] + species = GLOB.all_species[new_species] if(species.language) add_language(species.language) diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 8c4eba8a33..446c399c9a 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -97,6 +97,7 @@ var/obj/item/organ/external/T = organs_by_name[BP_TORSO] if(T && T.robotic >= ORGAN_ROBOT) src.verbs += /mob/living/carbon/human/proc/self_diagnostics + src.verbs += /mob/living/carbon/human/proc/reagent_purge //VOREStation Add var/datum/robolimb/R = all_robolimbs[T.model] synthetic = R return synthetic diff --git a/code/modules/mob/living/carbon/human/human_powers_vr.dm b/code/modules/mob/living/carbon/human/human_powers_vr.dm new file mode 100644 index 0000000000..1d1954ac33 --- /dev/null +++ b/code/modules/mob/living/carbon/human/human_powers_vr.dm @@ -0,0 +1,16 @@ +/mob/living/carbon/human/proc/reagent_purge() + set name = "Purge Reagents" + set desc = "Empty yourself of any reagents you may have consumed or come into contact with." + set category = "IC" + + if(stat == DEAD) return + + to_chat(src, "Performing reagent purge, please wait...") + sleep(50) + src.bloodstr.clear_reagents() + src.ingested.clear_reagents() + src.touching.clear_reagents() + to_chat(src, "Reagents purged!") + + return TRUE + diff --git a/code/modules/mob/living/carbon/human/species/outsider/event.dm b/code/modules/mob/living/carbon/human/species/outsider/event.dm index 477b14c0c4..a156d2dc9f 100644 --- a/code/modules/mob/living/carbon/human/species/outsider/event.dm +++ b/code/modules/mob/living/carbon/human/species/outsider/event.dm @@ -220,3 +220,11 @@ Variables you may want to make use of are: /datum/species/event1/can_fall(var/mob/living/carbon/human/H) return hover + +/datum/species/event1/sub1 + name = SPECIES_EVENT2 + name_plural = SPECIES_EVENT2 + +/datum/species/event1/sub2 + name = SPECIES_EVENT3 + name_plural = SPECIES_EVENT3 diff --git a/code/modules/mob/living/carbon/human/species/outsider/vox.dm b/code/modules/mob/living/carbon/human/species/outsider/vox.dm index 414d230b77..8100291e26 100644 --- a/code/modules/mob/living/carbon/human/species/outsider/vox.dm +++ b/code/modules/mob/living/carbon/human/species/outsider/vox.dm @@ -88,7 +88,7 @@ ) /datum/species/vox/get_random_name(var/gender) - var/datum/language/species_language = all_languages[default_language] + var/datum/language/species_language = GLOB.all_languages[default_language] return species_language.get_random_name(gender) /datum/species/vox/equip_survival_gear(var/mob/living/carbon/human/H, var/extendedtank = 0,var/comprehensive = 0) diff --git a/code/modules/mob/living/carbon/human/species/species_getters.dm b/code/modules/mob/living/carbon/human/species/species_getters.dm index 421d614882..5802472c55 100644 --- a/code/modules/mob/living/carbon/human/species/species_getters.dm +++ b/code/modules/mob/living/carbon/human/species/species_getters.dm @@ -97,9 +97,9 @@ else return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) - var/datum/language/species_language = all_languages[name_language] + var/datum/language/species_language = GLOB.all_languages[name_language] if(!species_language) - species_language = all_languages[default_language] + species_language = GLOB.all_languages[default_language] if(!species_language) return "unknown" return species_language.get_random_name(gender) diff --git a/code/modules/mob/living/carbon/human/species/species_shapeshift.dm b/code/modules/mob/living/carbon/human/species/species_shapeshift.dm index fd167fc2da..48e7cb8375 100644 --- a/code/modules/mob/living/carbon/human/species/species_shapeshift.dm +++ b/code/modules/mob/living/carbon/human/species/species_shapeshift.dm @@ -20,7 +20,7 @@ var/list/wrapped_species_by_ref = list() /datum/species/shapeshifter/get_icobase(var/mob/living/carbon/human/H, var/get_deform) if(!H) return ..(null, get_deform) - var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] + var/datum/species/S = GLOB.all_species[wrapped_species_by_ref["\ref[H]"]] return S.get_icobase(H, get_deform) /datum/species/shapeshifter/get_race_key(var/mob/living/carbon/human/H) @@ -28,37 +28,37 @@ var/list/wrapped_species_by_ref = list() /datum/species/shapeshifter/get_bodytype(var/mob/living/carbon/human/H) if(!H) return ..() - var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] + var/datum/species/S = GLOB.all_species[wrapped_species_by_ref["\ref[H]"]] return S.get_bodytype(H) /datum/species/shapeshifter/get_blood_mask(var/mob/living/carbon/human/H) if(!H) return ..() - var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] + var/datum/species/S = GLOB.all_species[wrapped_species_by_ref["\ref[H]"]] return S.get_blood_mask(H) /datum/species/shapeshifter/get_damage_mask(var/mob/living/carbon/human/H) if(!H) return ..() - var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] + var/datum/species/S = GLOB.all_species[wrapped_species_by_ref["\ref[H]"]] return S.get_damage_mask(H) /datum/species/shapeshifter/get_damage_overlays(var/mob/living/carbon/human/H) if(!H) return ..() - var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] + var/datum/species/S = GLOB.all_species[wrapped_species_by_ref["\ref[H]"]] return S.get_damage_overlays(H) /datum/species/shapeshifter/get_tail(var/mob/living/carbon/human/H) if(!H) return ..() - var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] + var/datum/species/S = GLOB.all_species[wrapped_species_by_ref["\ref[H]"]] return S.get_tail(H) /datum/species/shapeshifter/get_tail_animation(var/mob/living/carbon/human/H) if(!H) return ..() - var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] + var/datum/species/S = GLOB.all_species[wrapped_species_by_ref["\ref[H]"]] return S.get_tail_animation(H) /datum/species/shapeshifter/get_tail_hair(var/mob/living/carbon/human/H) if(!H) return ..() - var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] + var/datum/species/S = GLOB.all_species[wrapped_species_by_ref["\ref[H]"]] return S.get_tail_hair(H) /datum/species/shapeshifter/handle_post_spawn(var/mob/living/carbon/human/H) @@ -151,7 +151,7 @@ var/list/wrapped_species_by_ref = list() var/new_species = null new_species = input("Please select a species to emulate.", "Shapeshifter Body") as null|anything in species.get_valid_shapeshifter_forms(src) - if(!new_species || !all_species[new_species] || wrapped_species_by_ref["\ref[src]"] == new_species) + if(!new_species || !GLOB.all_species[new_species] || wrapped_species_by_ref["\ref[src]"] == new_species) return shapeshifter_change_shape(new_species) @@ -268,14 +268,14 @@ var/list/wrapped_species_by_ref = list() limb_exists[O.organ_tag] = 1 wounds_by_limb[O.organ_tag] = O.wounds - species = all_species[new_species] + species = GLOB.all_species[new_species] species.create_organs(src) // species.handle_post_spawn(src) for(var/limb in organs_by_name) var/obj/item/organ/external/O = organs_by_name[limb] if(limb_exists[O.organ_tag]) - O.species = all_species[new_species] + O.species = GLOB.all_species[new_species] O.wounds = wounds_by_limb[O.organ_tag] // sync the organ's damage with its wounds O.update_damages() 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 a26c15ad46..14a9d61679 100644 --- a/code/modules/mob/living/carbon/human/species/station/alraune.dm +++ b/code/modules/mob/living/carbon/human/species/station/alraune.dm @@ -459,7 +459,7 @@ if(ispath(to_copy)) to_copy = "[initial(to_copy.name)]" if(istext(to_copy)) - to_copy = all_species[to_copy] + to_copy = GLOB.all_species[to_copy] var/datum/species/alraune/new_copy = new() @@ -495,5 +495,5 @@ return base_species /datum/species/alraune/get_race_key() - var/datum/species/real = all_species[base_species] + var/datum/species/real = GLOB.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 c187450734..5374d21b33 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 @@ -51,7 +51,7 @@ return base_species /datum/species/custom/get_race_key() - var/datum/species/real = all_species[base_species] + var/datum/species/real = GLOB.all_species[base_species] return real.race_key /datum/species/custom/proc/produceCopy(var/datum/species/to_copy,var/list/traits,var/mob/living/carbon/human/H) @@ -61,7 +61,7 @@ if(ispath(to_copy)) to_copy = "[initial(to_copy.name)]" if(istext(to_copy)) - to_copy = all_species[to_copy] + to_copy = GLOB.all_species[to_copy] var/datum/species/custom/new_copy = new() diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans.dm b/code/modules/mob/living/carbon/human/species/station/prometheans.dm index 965be6b503..b55bb03094 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans.dm @@ -132,6 +132,7 @@ var/datum/species/shapeshifter/promethean/prometheans /obj/item/weapon/storage/toolbox/lunchbox/syndicate)) //Only pick the empty types var/obj/item/weapon/storage/toolbox/lunchbox/L = new boxtype(get_turf(H)) new /obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar(L) + new /obj/item/weapon/tool/prybar/red(L) //VOREStation Add, if(H.backbag == 1) H.equip_to_slot_or_del(L, slot_r_hand) else 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 4172a4be3b..e8f83e5f19 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 @@ -260,7 +260,7 @@ to_chat(src,"You must be awake and standing to perform this action!") return - var/new_species = input("Please select a species to emulate.", "Shapeshifter Body") as null|anything in playable_species + var/new_species = input("Please select a species to emulate.", "Shapeshifter Body") as null|anything in GLOB.playable_species if(new_species) impersonate_bodytype = new_species regenerate_icons() //Expensive, but we need to recrunch all the icons we're wearing 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 ca77170b20..a87b85e3d4 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 @@ -276,7 +276,7 @@ if(ispath(to_copy)) to_copy = "[initial(to_copy.name)]" if(istext(to_copy)) - to_copy = all_species[to_copy] + to_copy = GLOB.all_species[to_copy] var/datum/species/xenochimera/new_copy = new() @@ -312,7 +312,7 @@ return base_species /datum/species/xenochimera/get_race_key() - var/datum/species/real = all_species[base_species] + var/datum/species/real = GLOB.all_species[base_species] return real.race_key diff --git a/code/modules/mob/living/default_language.dm b/code/modules/mob/living/default_language.dm index f5388f4735..94b08207b8 100644 --- a/code/modules/mob/living/default_language.dm +++ b/code/modules/mob/living/default_language.dm @@ -5,11 +5,11 @@ set name = "Set Default Language" set category = "IC" - if (only_species_language && language != all_languages[src.species_language]) + if (only_species_language && language != GLOB.all_languages[src.species_language]) to_chat(src, "You can only speak your species language, [src.species_language].") return 0 - if(language == all_languages[src.species_language]) + if(language == GLOB.all_languages[src.species_language]) to_chat(src, "You will now speak your standard default language, [language], if you do not specify a language when speaking.") else if (language) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 1190080ef8..f15ca63904 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -183,7 +183,7 @@ proc/get_radio_key_from_channel(var/channel) speaking = get_default_language() if(!can_speak(speaking)) - speaking = all_languages[LANGUAGE_GIBBERISH] + speaking = GLOB.all_languages[LANGUAGE_GIBBERISH] var/babble_key = ",r" message = babble_key + message diff --git a/code/modules/mob/living/silicon/pai/examine.dm b/code/modules/mob/living/silicon/pai/examine.dm index 876b9aacf1..11a970cfe8 100644 --- a/code/modules/mob/living/silicon/pai/examine.dm +++ b/code/modules/mob/living/silicon/pai/examine.dm @@ -19,7 +19,7 @@ if(print_flavor_text()) msg += "\n[print_flavor_text()]\n" if (pose) - if( findtext(pose,".",lentext(pose)) == 0 && findtext(pose,"!",lentext(pose)) == 0 && findtext(pose,"?",lentext(pose)) == 0 ) + if( findtext(pose,".",length(pose)) == 0 && findtext(pose,"!",length(pose)) == 0 && findtext(pose,"?",length(pose)) == 0 ) pose = addtext(pose,".") //Makes sure all emotes end with a period. msg += "\nIt is [pose]" diff --git a/code/modules/mob/living/silicon/robot/drone/drone_say.dm b/code/modules/mob/living/silicon/robot/drone/drone_say.dm index 26a78351ef..71d9857442 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_say.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_say.dm @@ -14,7 +14,7 @@ return emote(copytext(message,2)) if(copytext(message,1,2) == ";") - var/datum/language/L = all_languages["Drone Talk"] + var/datum/language/L = GLOB.all_languages["Drone Talk"] if(istype(L)) return L.broadcast(src,trim(copytext(message,2))) diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm index fa24e9ae91..33ec3183be 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -44,7 +44,7 @@ if(print_flavor_text()) msg += "\n[print_flavor_text()]\n" if (pose) - if( findtext(pose,".",lentext(pose)) == 0 && findtext(pose,"!",lentext(pose)) == 0 && findtext(pose,"?",lentext(pose)) == 0 ) + if( findtext(pose,".",length(pose)) == 0 && findtext(pose,"!",length(pose)) == 0 && findtext(pose,"?",length(pose)) == 0 ) pose = addtext(pose,".") //Makes sure all emotes end with a period. msg += "\nIt is [pose]" 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 568cc5b3af..b017f7d403 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -46,6 +46,7 @@ var/global/list/robot_modules = list( add_languages(R) add_subsystems(R) apply_status_flags(R) + handle_shell(R) if(R.radio) if(R.shell) @@ -153,6 +154,19 @@ var/global/list/robot_modules = list( if(!can_be_pushed) R.status_flags |= CANPUSH +/obj/item/weapon/robot_module/proc/handle_shell(var/mob/living/silicon/robot/R) + if(R.braintype == BORG_BRAINTYPE_AI_SHELL) + channels = list( + "Medical" = 1, + "Engineering" = 1, + "Security" = 1, + "Service" = 1, + "Supply" = 1, + "Science" = 1, + "Command" = 1, + "Explorer" = 1 + ) + // Cyborgs (non-drones), default loadout. This will be given to every module. /obj/item/weapon/robot_module/robot/New() ..() @@ -177,7 +191,8 @@ var/global/list/robot_modules = list( "Basic" = "robot_old", "Android" = "droid", "Drone" = "drone-standard", - "Insekt" = "insekt-Default" + "Insekt" = "insekt-Default", + "Usagi-II" = "tall2standard" ) @@ -211,7 +226,8 @@ var/global/list/robot_modules = list( "Needles" = "medicalrobot", "Drone" = "drone-surgery", "Handy" = "handy-med", - "Insekt" = "insekt-Med" + "Insekt" = "insekt-Med", + "Usagi-II" = "tall2medical" ) /obj/item/weapon/robot_module/robot/medical/surgeon/New() @@ -284,7 +300,8 @@ var/global/list/robot_modules = list( "Needles" = "medicalrobot", "Drone - Medical" = "drone-medical", "Drone - Chemistry" = "drone-chemistry", - "Insekt" = "insekt-Med" + "Insekt" = "insekt-Med", + "Usagi-II" = "tall2medical" ) /obj/item/weapon/robot_module/robot/medical/crisis/New() @@ -359,7 +376,8 @@ var/global/list/robot_modules = list( "Landmate - Treaded" = "engiborg+tread", "Drone" = "drone-engineer", "Treadwell" = "treadwell", - "Handy" = "handy-engineer" + "Handy" = "handy-engineer", + "Usagi-II" = "tall2engineer" ) /obj/item/weapon/robot_module/robot/engineering/construction @@ -518,7 +536,8 @@ var/global/list/robot_modules = list( "Basic" = "secborg", "Black Knight" = "securityrobot", "Drone" = "drone-sec", - "Insekt" = "insekt-Sec" + "Insekt" = "insekt-Sec", + "Usagi-II" = "tall2security" ) /obj/item/weapon/robot_module/robot/security/general/New() @@ -561,7 +580,8 @@ var/global/list/robot_modules = list( "Basic" = "JanBot2", "Mopbot" = "janitorrobot", "Mop Gear Rex" = "mopgearrex", - "Drone" = "drone-janitor" + "Drone" = "drone-janitor", + "Usagi-II" = "tall2janitor" ) /obj/item/weapon/robot_module/robot/janitor/New() @@ -583,7 +603,10 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/robot/clerical name = "service robot module" - channels = list("Service" = 1) + channels = list( + "Service" = 1, + "Command" = 1 + ) languages = list( LANGUAGE_SOL_COMMON = 1, LANGUAGE_UNATHI = 1, @@ -619,7 +642,7 @@ var/global/list/robot_modules = list( "Rich" = "maximillion", "Drone - Service" = "drone-service", "Drone - Hydro" = "drone-hydro", - "Bovtender" = "bovtender-base" + "Usagi-II" = "tall2service" ) /obj/item/weapon/robot_module/robot/clerical/butler/New() @@ -671,7 +694,8 @@ var/global/list/robot_modules = list( "Bro" = "Brobot", "Rich" = "maximillion", "Default" = "Service2", - "Drone" = "drone-blu" + "Drone" = "drone-blu", + "Usagi-II" = "tall2service" ) /obj/item/weapon/robot_module/robot/clerical/general/New() @@ -708,7 +732,7 @@ var/global/list/robot_modules = list( "Advanced Droid" = "droid-miner", "Treadhead" = "Miner", "Drone" = "drone-miner", - "Mole" = "moleminer" + "Usagi-II" = "tall2miner" ) /obj/item/weapon/robot_module/robot/miner/New() @@ -736,7 +760,8 @@ var/global/list/robot_modules = list( "Droid" = "droid-science", "Drone" = "drone-science", "Handy" = "handy-science", - "Insekt" = "insekt-Sci" + "Insekt" = "insekt-Sci", + "Usagi-II" = "tall2peace" ) /obj/item/weapon/robot_module/robot/research/New() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index a84e4597e6..cf3adb17ca 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -31,7 +31,7 @@ silicon_mob_list |= src ..() add_language(LANGUAGE_GALCOM) - set_default_language(all_languages[LANGUAGE_GALCOM]) + set_default_language(GLOB.all_languages[LANGUAGE_GALCOM]) init_id() init_subsystems() @@ -196,7 +196,7 @@ return universal_speak || (speaking in src.speech_synthesizer_langs) || (speaking.name == "Noise") //need speech synthesizer support to vocalize a language /mob/living/silicon/add_language(var/language, var/can_speak=1) - var/var/datum/language/added_language = all_languages[language] + var/var/datum/language/added_language = GLOB.all_languages[language] if(!added_language) return @@ -206,7 +206,7 @@ return 1 /mob/living/silicon/remove_language(var/rem_language) - var/var/datum/language/removed_language = all_languages[rem_language] + var/var/datum/language/removed_language = GLOB.all_languages[rem_language] if(!removed_language) return diff --git a/code/modules/mob/living/simple_animal/animals/cat.dm b/code/modules/mob/living/simple_animal/animals/cat.dm deleted file mode 100644 index 140deb0b24..0000000000 --- a/code/modules/mob/living/simple_animal/animals/cat.dm +++ /dev/null @@ -1,193 +0,0 @@ -//Cat -/mob/living/simple_animal/cat - name = "cat" - desc = "A domesticated, feline pet. Has a tendency to adopt crewmembers." - tt_desc = "E Felis silvestris catus" - intelligence_level = SA_ANIMAL - icon_state = "cat2" - item_state = "cat2" - icon_living = "[initial(icon_state)]" - icon_dead = "[initial(icon_state)]_dead" - icon_rest = "[initial(icon_state)]_rest" - - investigates = 1 - specific_targets = 1 //Only targets with Found() - run_at_them = 0 //DOMESTICATED - view_range = 5 - - turns_per_move = 5 - see_in_dark = 6 - - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - - min_oxy = 16 //Require atleast 16kPA oxygen - minbodytemp = 223 //Below -50 Degrees Celcius - maxbodytemp = 323 //Above 50 Degrees Celcius - - holder_type = /obj/item/weapon/holder/cat - mob_size = MOB_SMALL - - has_langs = list("Cat") - speak_chance = 1 - speak = list("Meow!","Esp!","Purr!","HSSSSS") - speak_emote = list("purrs", "meows") - emote_hear = list("meows","mews") - emote_see = list("shakes their head", "shivers") - say_maybe_target = list("Meow?","Mew?","Mao?") - say_got_target = list("MEOW!","HSSSS!","REEER!") - - meat_amount = 1 - meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat - - var/turns_since_scan = 0 - var/mob/flee_target - -/mob/living/simple_animal/cat/Life() - . = ..() - if(!.) return - - if(prob(2)) //spooky - var/mob/observer/dead/spook = locate() in range(src,5) - if(spook) - var/turf/T = spook.loc - var/list/visible = list() - for(var/obj/O in T.contents) - if(!O.invisibility && O.name) - visible += O - if(visible.len) - var/atom/A = pick(visible) - visible_emote("suddenly stops and stares at something unseen[istype(A) ? " near [A]":""].") - - handle_flee_target() - -/mob/living/simple_animal/cat/PunchTarget() - if(ismouse(target_mob)) - var/mob/living/simple_mob/animal/passive/mouse/mouse = target_mob - mouse.splat() - visible_emote(pick("bites \the [mouse]!","toys with \the [mouse].","chomps on \the [mouse]!")) - return mouse - else - ..() - -/mob/living/simple_animal/cat/Found(var/atom/found_atom) - if(ismouse(found_atom) && SA_attackable(found_atom)) - return found_atom - -/mob/living/simple_animal/cat/proc/handle_flee_target() - //see if we should stop fleeing - if (flee_target && !(flee_target in ListTargets(view_range))) - flee_target = null - GiveUpMoving() - - if (flee_target && !stat && !buckled) - if (resting) - lay_down() - if(prob(25)) say("HSSSSS") - stop_automated_movement = 1 - walk_away(src, flee_target, 7, 2) - -/mob/living/simple_animal/cat/react_to_attack(var/atom/A) - if(A == src) return - flee_target = A - turns_since_scan = 5 - -/mob/living/simple_animal/cat/ex_act() - . = ..() - react_to_attack(src.loc) - -//Basic friend AI -/mob/living/simple_animal/cat/fluff - var/mob/living/carbon/human/friend - var/befriend_job = null - var/friend_name = null - -/mob/living/simple_animal/cat/fluff/Life() - . = ..() - if(!. || ai_inactive || !friend) return - - var/friend_dist = get_dist(src,friend) - - if (friend_dist <= 4) - if(stance == STANCE_IDLE) - if(set_follow(friend)) - handle_stance(STANCE_FOLLOW) - - if (friend_dist <= 1) - if (friend.stat >= DEAD || friend.health <= config.health_threshold_softcrit) - if (prob((friend.stat < DEAD)? 50 : 15)) - var/verb = pick("meows", "mews", "mrowls") - audible_emote(pick("[verb] in distress.", "[verb] anxiously.")) - else - if (prob(5)) - visible_emote(pick("nuzzles [friend].", - "brushes against [friend].", - "rubs against [friend].", - "purrs.")) - else if (friend.health <= 50) - if (prob(10)) - var/verb = pick("meows", "mews", "mrowls") - audible_emote("[verb] anxiously.") - -/mob/living/simple_animal/cat/fluff/verb/become_friends() - set name = "Become Friends" - set category = "IC" - set src in view(1) - - if(!friend) - var/mob/living/carbon/human/H = usr - if(istype(H) && (!befriend_job || H.job == befriend_job) && (!friend_name || H.real_name == friend_name)) - friend = usr - . = 1 - else if(usr == friend) - . = 1 //already friends, but show success anyways - - if(.) - set_dir(get_dir(src, friend)) - visible_emote(pick("nuzzles [friend].", - "brushes against [friend].", - "rubs against [friend].", - "purrs.")) - else - usr << "[src] ignores you." - return - -//RUNTIME IS ALIVE! SQUEEEEEEEE~ -/mob/living/simple_animal/cat/fluff/Runtime - name = "Runtime" - desc = "Her fur has the look and feel of velvet, and her tail quivers occasionally." - tt_desc = "E Felis silvestris medicalis" //a hypoallergenic breed produced by NT for... medical purposes? Sure. - gender = FEMALE - icon_state = "cat" - item_state = "cat" - befriend_job = "Chief Medical Officer" - -/mob/living/simple_animal/cat/kitten - name = "kitten" - desc = "D'aaawwww" - icon_state = "kitten" - item_state = "kitten" - icon_living = "kitten" - icon_dead = "kitten_dead" - gender = NEUTER - -// Leaving this here for now. -/obj/item/weapon/holder/cat/fluff/bones - name = "Bones" - desc = "It's Bones! Meow." - gender = MALE - icon_state = "cat3" - -/mob/living/simple_animal/cat/fluff/bones - name = "Bones" - desc = "That's Bones the cat. He's a laid back, black cat. Meow." - gender = MALE - icon_state = "cat3" - item_state = "cat3" - holder_type = /obj/item/weapon/holder/cat/fluff/bones - friend_name = "Erstatz Vryroxes" - -/mob/living/simple_animal/cat/kitten/New() - gender = pick(MALE, FEMALE) - ..() diff --git a/code/modules/mob/living/simple_animal/animals/farm_animals.dm b/code/modules/mob/living/simple_animal/animals/farm_animals.dm deleted file mode 100644 index 534bbf6000..0000000000 --- a/code/modules/mob/living/simple_animal/animals/farm_animals.dm +++ /dev/null @@ -1,292 +0,0 @@ -//goat -/mob/living/simple_animal/retaliate/goat - name = "goat" - desc = "Not known for their pleasant disposition." - tt_desc = "E Oreamnos americanus" - icon_state = "goat" - icon_living = "goat" - icon_dead = "goat_dead" - - faction = "goat" - intelligence_level = SA_ANIMAL - - health = 40 - turns_per_move = 5 - see_in_dark = 6 - - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - - melee_damage_lower = 1 - melee_damage_upper = 5 - attacktext = list("kicked") - - speak_chance = 1 - speak = list("EHEHEHEHEH","eh?") - speak_emote = list("brays") - emote_hear = list("brays") - emote_see = list("shakes its head", "stamps a foot", "glares around") - - meat_amount = 4 - meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat - - var/datum/reagents/udder = null - -/mob/living/simple_animal/retaliate/goat/New() - udder = new(50) - udder.my_atom = src - ..() - -/mob/living/simple_animal/retaliate/goat/Life() - . = ..() - if(.) - if(stat == CONSCIOUS) - if(udder && prob(5)) - udder.add_reagent("milk", rand(5, 10)) - - if(locate(/obj/effect/plant) in loc) - var/obj/effect/plant/SV = locate() in loc - SV.die_off(1) - - if(locate(/obj/machinery/portable_atmospherics/hydroponics/soil/invisible) in loc) - var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/SP = locate() in loc - qdel(SP) - - if(!pulledby) - var/obj/effect/plant/food - food = locate(/obj/effect/plant) in oview(5,loc) - if(food) - var/step = get_step_to(src, food, 0) - Move(step) - -/mob/living/simple_animal/retaliate/goat/react_to_attack() - . = ..() - if(.) - visible_message("[src] gets an evil-looking gleam in their eye.") - -/mob/living/simple_animal/retaliate/goat/Move() - ..() - if(!stat) - for(var/obj/effect/plant/SV in loc) - SV.die_off(1) - -/mob/living/simple_animal/retaliate/goat/attackby(var/obj/item/O as obj, var/mob/user as mob) - var/obj/item/weapon/reagent_containers/glass/G = O - if(stat == CONSCIOUS && istype(G) && G.is_open_container()) - user.visible_message("[user] milks [src] using \the [O].") - var/transfered = udder.trans_id_to(G, "milk", rand(5,10)) - if(G.reagents.total_volume >= G.volume) - user << "The [O] is full." - if(!transfered) - user << "The udder is dry. Wait a bit longer..." - else - ..() -//cow -/mob/living/simple_animal/cow - name = "cow" - desc = "Known for their milk, just don't tip them over." - tt_desc = "E Bos taurus" - icon_state = "cow" - icon_living = "cow" - icon_dead = "cow_dead" - icon_gib = "cow_gib" - intelligence_level = SA_ANIMAL - - health = 50 - turns_per_move = 5 - see_in_dark = 6 - - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - attacktext = list("kicked") - - speak_chance = 1 - speak = list("moo?","moo","MOOOOOO") - speak_emote = list("moos","moos hauntingly") - emote_hear = list("brays") - emote_see = list("shakes its head") - - meat_amount = 6 - meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat - - var/datum/reagents/udder = null - -/mob/living/simple_animal/cow/New() - udder = new(50) - udder.my_atom = src - ..() - -/mob/living/simple_animal/cow/attackby(var/obj/item/O as obj, var/mob/user as mob) - var/obj/item/weapon/reagent_containers/glass/G = O - if(stat == CONSCIOUS && istype(G) && G.is_open_container()) - user.visible_message("[user] milks [src] using \the [O].") - var/transfered = udder.trans_id_to(G, "milk", rand(5,10)) - if(G.reagents.total_volume >= G.volume) - user << "The [O] is full." - if(!transfered) - user << "The udder is dry. Wait a bit longer..." - else - ..() - -/mob/living/simple_animal/cow/Life() - . = ..() - if(stat == CONSCIOUS) - if(udder && prob(5)) - udder.add_reagent("milk", rand(5, 10)) - -/mob/living/simple_animal/cow/attack_hand(mob/living/carbon/M as mob) - if(!stat && M.a_intent == I_DISARM && icon_state != icon_dead) - M.visible_message("[M] tips over [src].","You tip over [src].") - Weaken(30) - icon_state = icon_dead - spawn(rand(20,50)) - if(!stat && M) - icon_state = icon_living - var/list/responses = list( "[src] looks at you imploringly.", - "[src] looks at you pleadingly", - "[src] looks at you with a resigned expression.", - "[src] seems resigned to its fate.") - M << pick(responses) - else - ..() - -/mob/living/simple_animal/chick - name = "\improper chick" - desc = "Adorable! They make such a racket though." - tt_desc = "E Gallus gallus" - icon_state = "chick" - icon_living = "chick" - icon_dead = "chick_dead" - icon_gib = "chick_gib" - intelligence_level = SA_ANIMAL - - health = 1 - turns_per_move = 2 - - pass_flags = PASSTABLE | PASSGRILLE - mob_size = MOB_MINISCULE - - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - attacktext = list("kicked") - - has_langs = list("Bird") - speak_chance = 2 - speak = list("Cherp.","Cherp?","Chirrup.","Cheep!") - speak_emote = list("cheeps") - emote_hear = list("cheeps") - emote_see = list("pecks at the ground","flaps its tiny wings") - - meat_amount = 1 - meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat - - var/amount_grown = 0 - -/mob/living/simple_animal/chick/New() - ..() - pixel_x = rand(-6, 6) - pixel_y = rand(0, 10) - -/mob/living/simple_animal/chick/Life() - . =..() - if(!.) - return - if(!stat) - amount_grown += rand(1,2) - if(amount_grown >= 100) - new /mob/living/simple_animal/chicken(src.loc) - qdel(src) - -var/const/MAX_CHICKENS = 50 -var/global/chicken_count = 0 - -/mob/living/simple_animal/chicken - name = "\improper chicken" - desc = "Hopefully the eggs are good this season." - tt_desc = "E Gallus gallus" - icon_state = "chicken" - icon_living = "chicken" - icon_dead = "chicken_dead" - intelligence_level = SA_ANIMAL - - health = 10 - turns_per_move = 3 - pass_flags = PASSTABLE - mob_size = MOB_SMALL - - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - attacktext = list("kicked") - - has_langs = list("Bird") - speak_chance = 2 - speak = list("Cluck!","BWAAAAARK BWAK BWAK BWAK!","Bwaak bwak.") - speak_emote = list("clucks","croons") - emote_hear = list("clucks") - emote_see = list("pecks at the ground","flaps its wings viciously") - - meat_amount = 2 - meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat - - var/eggsleft = 0 - var/body_color - -/mob/living/simple_animal/chicken/New() - ..() - if(!body_color) - body_color = pick( list("brown","black","white") ) - icon_state = "chicken_[body_color]" - icon_living = "chicken_[body_color]" - icon_dead = "chicken_[body_color]_dead" - pixel_x = rand(-6, 6) - pixel_y = rand(0, 10) - chicken_count += 1 - -/mob/living/simple_animal/chicken/death() - ..() - chicken_count -= 1 - -/mob/living/simple_animal/chicken/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) //feedin' dem chickens - var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O - if(G.seed && G.seed.kitchen_tag == "wheat") - if(!stat && eggsleft < 8) - user.visible_message("[user] feeds [O] to [name]! It clucks happily.","You feed [O] to [name]! It clucks happily.") - user.drop_item() - qdel(O) - eggsleft += rand(1, 4) - else - user << "[name] doesn't seem hungry!" - else - user << "[name] doesn't seem interested in that." - else - ..() - -/mob/living/simple_animal/chicken/Life() - . =..() - if(!.) - return - if(!stat && prob(3) && eggsleft > 0) - visible_message("[src] [pick("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.")]") - eggsleft-- - var/obj/item/weapon/reagent_containers/food/snacks/egg/E = new(get_turf(src)) - E.pixel_x = rand(-6,6) - E.pixel_y = rand(-6,6) - if(chicken_count < MAX_CHICKENS && prob(10)) - START_PROCESSING(SSobj, E) - -/obj/item/weapon/reagent_containers/food/snacks/egg/var/amount_grown = 0 -/obj/item/weapon/reagent_containers/food/snacks/egg/process() - if(isturf(loc)) - amount_grown += rand(1,2) - if(amount_grown >= 100) - visible_message("[src] hatches with a quiet cracking sound.") - new /mob/living/simple_animal/chick(get_turf(src)) - STOP_PROCESSING(SSobj, src) - qdel(src) - else - STOP_PROCESSING(SSobj, src) diff --git a/code/modules/mob/living/simple_animal/borer/borer.dm b/code/modules/mob/living/simple_animal/borer/borer.dm deleted file mode 100644 index 8b28544b9e..0000000000 --- a/code/modules/mob/living/simple_animal/borer/borer.dm +++ /dev/null @@ -1,213 +0,0 @@ -/mob/living/simple_mob/animal/borer - name = "cortical borer" - real_name = "cortical borer" - desc = "A small, quivering sluglike creature." - speak_emote = list("chirrups") - emote_hear = list("chirrups") - intelligence_level = SA_HUMANOID // Player controlled. - response_help = "pokes" - response_disarm = "prods" - response_harm = "stomps on" - icon_state = "brainslug" - item_state = "brainslug" - icon_living = "brainslug" - icon_dead = "brainslug_dead" - speed = 5 - a_intent = I_HURT - stop_automated_movement = 1 - status_flags = CANPUSH - attacktext = list("nipped") - friendly = "prods" - wander = 0 - pass_flags = PASSTABLE - universal_understand = 1 - holder_type = /obj/item/weapon/holder/borer - - var/used_dominate - var/chemicals = 10 // Chemicals used for reproduction and spitting neurotoxin. - var/mob/living/carbon/human/host // Human host for the brain worm. - var/truename // Name used for brainworm-speak. - var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth. - var/controlling // Used in human death check. - var/docile = 0 // Sugar can stop borers from acting. - var/has_reproduced - var/roundstart - - can_be_antagged = TRUE - -/mob/living/simple_mob/animal/borer/roundstart - roundstart = 1 - -/mob/living/simple_mob/animal/borer/Login() - ..() - if(mind) - borers.add_antagonist(mind) - -/mob/living/simple_mob/animal/borer/New() - ..() - - add_language("Cortical Link") - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide - - truename = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]" - if(!roundstart) request_player() - -/mob/living/simple_mob/animal/borer/Life() - - ..() - - if(host) - - if(!stat && !host.stat) - - if(host.reagents.has_reagent("sugar")) - if(!docile) - if(controlling) - host << "You feel the soporific flow of sugar in your host's blood, lulling you into docility." - else - to_chat(src, "You feel the soporific flow of sugar in your host's blood, lulling you into docility.") - docile = 1 - else - if(docile) - if(controlling) - host << "You shake off your lethargy as the sugar leaves your host's blood." - else - to_chat(src, "You shake off your lethargy as the sugar leaves your host's blood.") - docile = 0 - - if(chemicals < 250) - chemicals++ - if(controlling) - - if(docile) - host << "You are feeling far too docile to continue controlling your host..." - host.release_control() - return - - if(prob(5)) - host.adjustBrainLoss(0.1) - - if(prob(host.brainloss/20)) - host.say("*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_v","gasp"))]") - -/mob/living/simple_mob/animal/borer/Stat() - ..() - statpanel("Status") - - if(emergency_shuttle) - var/eta_status = emergency_shuttle.get_status_panel_eta() - if(eta_status) - stat(null, eta_status) - - if (client.statpanel == "Status") - stat("Chemicals", chemicals) - -/mob/living/simple_mob/animal/borer/proc/detatch() - - if(!host || !controlling) return - - if(istype(host,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = host - var/obj/item/organ/external/head = H.get_organ(BP_HEAD) - head.implants -= src - - controlling = 0 - - host.remove_language("Cortical Link") - host.verbs -= /mob/living/carbon/proc/release_control - host.verbs -= /mob/living/carbon/proc/punish_host - host.verbs -= /mob/living/carbon/proc/spawn_larvae - - if(host_brain) - - // these are here so bans and multikey warnings are not triggered on the wrong people when ckey is changed. - // computer_id and IP are not updated magically on their own in offline mobs -walter0o - - // host -> self - var/h2s_id = host.computer_id - var/h2s_ip= host.lastKnownIP - host.computer_id = null - host.lastKnownIP = null - - src.ckey = host.ckey - - if(!src.computer_id) - src.computer_id = h2s_id - - if(!host_brain.lastKnownIP) - src.lastKnownIP = h2s_ip - - // brain -> host - var/b2h_id = host_brain.computer_id - var/b2h_ip= host_brain.lastKnownIP - host_brain.computer_id = null - host_brain.lastKnownIP = null - - host.ckey = host_brain.ckey - - if(!host.computer_id) - host.computer_id = b2h_id - - if(!host.lastKnownIP) - host.lastKnownIP = b2h_ip - - qdel(host_brain) - -/mob/living/simple_mob/animal/borer/proc/leave_host() - - if(!host) return - - if(host.mind) - borers.remove_antagonist(host.mind) - - src.forceMove(get_turf(host)) - - reset_view(null) - machine = null - - host.reset_view(null) - host.machine = null - host = null - return - -//Procs for grabbing players. -/mob/living/simple_mob/animal/borer/proc/request_player() - for(var/mob/observer/dead/O in player_list) - if(jobban_isbanned(O, "Borer")) - continue - if(O.client) - if(O.client.prefs.be_special & BE_ALIEN) - question(O.client) - -/mob/living/simple_mob/animal/borer/proc/question(var/client/C) - spawn(0) - if(!C) return - var/response = alert(C, "A cortical borer needs a player. Are you interested?", "Cortical borer request", "Yes", "No", "Never for this round") - if(!C || ckey) - return - if(response == "Yes") - transfer_personality(C) - else if (response == "Never for this round") - C.prefs.be_special ^= BE_ALIEN - -/mob/living/simple_mob/animal/borer/proc/transfer_personality(var/client/candidate) - - if(!candidate || !candidate.mob || !candidate.mob.mind) - return - - src.mind = candidate.mob.mind - candidate.mob.mind.current = src - src.ckey = candidate.ckey - - if(src.mind) - src.mind.assigned_role = "Cortical Borer" - src.mind.special_role = "Cortical Borer" - - to_chat(src, "You are a cortical borer! You are a brain slug that worms its way \ - into the head of its victim. Use stealth, persuasion and your powers of mind control to keep you, \ - your host and your eventual spawn safe and warm.") - to_chat(src, "You can speak to your victim with say, to other borers with say :x, and use your Abilities tab to access powers.") - -/mob/living/simple_mob/animal/borer/cannot_use_vents() - return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/borer/borer_captive.dm b/code/modules/mob/living/simple_animal/borer/borer_captive.dm deleted file mode 100644 index c7088bc715..0000000000 --- a/code/modules/mob/living/simple_animal/borer/borer_captive.dm +++ /dev/null @@ -1,57 +0,0 @@ -/mob/living/captive_brain - name = "host brain" - real_name = "host brain" - universal_understand = 1 - -/mob/living/captive_brain/say(var/message) - - if (src.client) - if(client.prefs.muted & MUTE_IC) - to_chat(src, "You cannot speak in IC (muted).") - return - - if(istype(src.loc,/mob/living/simple_mob/animal/borer)) - - message = sanitize(message) - if (!message) - return - log_say(message,src) - if (stat == 2) - return say_dead(message) - - var/mob/living/simple_mob/animal/borer/B = src.loc - to_chat(src, "You whisper silently, \"[message]\"") - B.host << "The captive mind of [src] whispers, \"[message]\"" - - for (var/mob/M in player_list) - if (istype(M, /mob/new_player)) - continue - else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) - M << "The captive mind of [src] whispers, \"[message]\"" - -/mob/living/captive_brain/emote(var/message) - return - -/mob/living/captive_brain/process_resist() - //Resisting control by an alien mind. - if(istype(src.loc,/mob/living/simple_mob/animal/borer)) - var/mob/living/simple_mob/animal/borer/B = src.loc - var/mob/living/captive_brain/H = src - - H << "You begin doggedly resisting the parasite's control (this will take approximately sixty seconds)." - B.host << "You feel the captive mind of [src] begin to resist your control." - - spawn(rand(200,250)+B.host.brainloss) - if(!B || !B.controlling) return - - B.host.adjustBrainLoss(rand(0.1,0.5)) - H << "With an immense exertion of will, you regain control of your body!" - B.host << "You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you." - B.detatch() - verbs -= /mob/living/carbon/proc/release_control - verbs -= /mob/living/carbon/proc/punish_host - verbs -= /mob/living/carbon/proc/spawn_larvae - - return - - ..() diff --git a/code/modules/mob/living/simple_animal/borer/borer_powers.dm b/code/modules/mob/living/simple_animal/borer/borer_powers.dm deleted file mode 100644 index d5575f78e7..0000000000 --- a/code/modules/mob/living/simple_animal/borer/borer_powers.dm +++ /dev/null @@ -1,337 +0,0 @@ -/mob/living/simple_mob/animal/borer/verb/release_host() - set category = "Abilities" - set name = "Release Host" - set desc = "Slither out of your host." - - if(!host) - to_chat(src, "You are not inside a host body.") - return - - if(stat) - to_chat(src, "You cannot leave your host in your current state.") - - if(docile) - to_chat(src, "You are feeling far too docile to do that.") - return - - if(!host || !src) return - - to_chat(src, "You begin disconnecting from [host]'s synapses and prodding at their internal ear canal.") - - if(!host.stat) - host << "An odd, uncomfortable pressure begins to build inside your skull, behind your ear..." - - spawn(100) - - if(!host || !src) return - - if(src.stat) - to_chat(src, "You cannot release your host in your current state.") - return - - to_chat(src, "You wiggle out of [host]'s ear and plop to the ground.") - if(host.mind) - if(!host.stat) - host << "Something slimy wiggles out of your ear and plops to the ground!" - host << "As though waking from a dream, you shake off the insidious mind control of the brain worm. Your thoughts are your own again." - - detatch() - leave_host() - -/mob/living/simple_mob/animal/borer/verb/infest() - set category = "Abilities" - set name = "Infest" - set desc = "Infest a suitable humanoid host." - - if(host) - to_chat(src, "You are already within a host.") - return - - if(stat) - to_chat(src, "You cannot infest a target in your current state.") - return - - var/list/choices = list() - for(var/mob/living/carbon/C in view(1,src)) - if(src.Adjacent(C)) - choices += C - - if(!choices.len) - to_chat(src, "There are no viable hosts within range...") - return - - var/mob/living/carbon/M = input(src,"Who do you wish to infest?") in null|choices - - if(!M || !src) return - - if(!(src.Adjacent(M))) return - - if(M.has_brain_worms()) - to_chat(src, "You cannot infest someone who is already infested!") - return - - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - - var/obj/item/organ/external/E = H.organs_by_name[BP_HEAD] - if(!E || E.is_stump()) - to_chat(src, "\The [H] does not have a head!") - - if(!H.should_have_organ("brain")) - to_chat(src, "\The [H] does not seem to have an ear canal to breach.") - return - - if(H.check_head_coverage()) - to_chat(src, "You cannot get through that host's protective gear.") - return - - M << "Something slimy begins probing at the opening of your ear canal..." - to_chat(src, "You slither up [M] and begin probing at their ear canal...") - - if(!do_after(src,30)) - to_chat(src, "As [M] moves away, you are dislodged and fall to the ground.") - return - - if(!M || !src) return - - if(src.stat) - to_chat(src, "You cannot infest a target in your current state.") - return - - if(M in view(1, src)) - to_chat(src, "You wiggle into [M]'s ear.") - if(!M.stat) - M << "Something disgusting and slimy wiggles into your ear!" - - src.host = M - src.forceMove(M) - - //Update their traitor status. - if(host.mind) - borers.add_antagonist_mind(host.mind, 1, borers.faction_role_text, borers.faction_welcome) - - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/I = H.internal_organs_by_name["brain"] - if(!I) // No brain organ, so the borer moves in and replaces it permanently. - replace_brain() - else - // If they're in normally, implant removal can get them out. - var/obj/item/organ/external/head = H.get_organ(BP_HEAD) - head.implants += src - - return - else - to_chat(src, "They are no longer in range!") - return - -/* -/mob/living/simple_mob/animal/borer/verb/devour_brain() - set category = "Abilities" - set name = "Devour Brain" - set desc = "Take permanent control of a dead host." - - if(!host) - to_chat(src, "You are not inside a host body.") - return - - if(host.stat != 2) - to_chat(src, "Your host is still alive.") - return - - if(stat) - to_chat(src, "You cannot do that in your current state.") - - if(docile) - to_chat(src, "You are feeling far too docile to do that.") - return - - - to_chat(src, "It only takes a few moments to render the dead host brain down into a nutrient-rich slurry...") - replace_brain() -*/ - -// BRAIN WORM ZOMBIES AAAAH. -/mob/living/simple_mob/animal/borer/proc/replace_brain() - - var/mob/living/carbon/human/H = host - - if(!istype(host)) - to_chat(src, "This host does not have a suitable brain.") - return - - to_chat(src, "You settle into the empty brainpan and begin to expand, fusing inextricably with the dead flesh of [H].") - - H.add_language("Cortical Link") - - if(host.stat == 2) - H.verbs |= /mob/living/carbon/human/proc/jumpstart - - H.verbs |= /mob/living/carbon/human/proc/psychic_whisper - H.verbs |= /mob/living/carbon/human/proc/tackle - H.verbs |= /mob/living/carbon/proc/spawn_larvae - - if(H.client) - H.ghostize(0) - - if(src.mind) - src.mind.special_role = "Borer Husk" - src.mind.transfer_to(host) - - H.ChangeToHusk() - - var/obj/item/organ/internal/borer/B = new(H) - H.internal_organs_by_name["brain"] = B - H.internal_organs |= B - - var/obj/item/organ/external/affecting = H.get_organ(BP_HEAD) - affecting.implants -= src - - var/s2h_id = src.computer_id - var/s2h_ip= src.lastKnownIP - src.computer_id = null - src.lastKnownIP = null - - if(!H.computer_id) - H.computer_id = s2h_id - - if(!H.lastKnownIP) - H.lastKnownIP = s2h_ip - -/mob/living/simple_mob/animal/borer/verb/secrete_chemicals() - set category = "Abilities" - set name = "Secrete Chemicals" - set desc = "Push some chemicals into your host's bloodstream." - - if(!host) - to_chat(src, "You are not inside a host body.") - return - - if(stat) - to_chat(src, "You cannot secrete chemicals in your current state.") - - if(docile) - to_chat(src, "You are feeling far too docile to do that.") - return - - if(chemicals < 50) - to_chat(src, "You don't have enough chemicals!") - - var/chem = input("Select a chemical to secrete.", "Chemicals") as null|anything in list("alkysine","bicaridine","hyperzine","tramadol") - - if(!chem || chemicals < 50 || !host || controlling || !src || stat) //Sanity check. - return - - to_chat(src, "You squirt a measure of [chem] from your reservoirs into [host]'s bloodstream.") - host.reagents.add_reagent(chem, 10) - chemicals -= 50 - -/mob/living/simple_mob/animal/borer/verb/dominate_victim() - set category = "Abilities" - set name = "Paralyze Victim" - set desc = "Freeze the limbs of a potential host with supernatural fear." - - if(world.time - used_dominate < 150) - to_chat(src, "You cannot use that ability again so soon.") - return - - if(host) - to_chat(src, "You cannot do that from within a host body.") - return - - if(src.stat) - to_chat(src, "You cannot do that in your current state.") - return - - var/list/choices = list() - for(var/mob/living/carbon/C in view(3,src)) - if(C.stat != 2) - choices += C - - if(world.time - used_dominate < 150) - to_chat(src, "You cannot use that ability again so soon.") - return - - var/mob/living/carbon/M = input(src,"Who do you wish to dominate?") in null|choices - - if(!M || !src) return - - if(M.has_brain_worms()) - to_chat(src, "You cannot infest someone who is already infested!") - return - - to_chat(src, "You focus your psychic lance on [M] and freeze their limbs with a wave of terrible dread.") - M << "You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing." - M.Weaken(10) - - used_dominate = world.time - -/mob/living/simple_mob/animal/borer/verb/bond_brain() - set category = "Abilities" - set name = "Assume Control" - set desc = "Fully connect to the brain of your host." - - if(!host) - to_chat(src, "You are not inside a host body.") - return - - if(src.stat) - to_chat(src, "You cannot do that in your current state.") - return - - if(docile) - to_chat(src, "You are feeling far too docile to do that.") - return - - to_chat(src, "You begin delicately adjusting your connection to the host brain...") - - spawn(100+(host.brainloss*5)) - - if(!host || !src || controlling) - return - else - - to_chat(src, "You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system.") - host << "You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours." - host.add_language("Cortical Link") - - // host -> brain - var/h2b_id = host.computer_id - var/h2b_ip= host.lastKnownIP - host.computer_id = null - host.lastKnownIP = null - - qdel(host_brain) - host_brain = new(src) - - host_brain.ckey = host.ckey - - host_brain.name = host.name - - if(!host_brain.computer_id) - host_brain.computer_id = h2b_id - - if(!host_brain.lastKnownIP) - host_brain.lastKnownIP = h2b_ip - - // self -> host - var/s2h_id = src.computer_id - var/s2h_ip= src.lastKnownIP - src.computer_id = null - src.lastKnownIP = null - - host.ckey = src.ckey - - if(!host.computer_id) - host.computer_id = s2h_id - - if(!host.lastKnownIP) - host.lastKnownIP = s2h_ip - - controlling = 1 - - host.verbs += /mob/living/carbon/proc/release_control - host.verbs += /mob/living/carbon/proc/punish_host - host.verbs += /mob/living/carbon/proc/spawn_larvae - - return diff --git a/code/modules/mob/living/simple_animal/borer/say.dm b/code/modules/mob/living/simple_animal/borer/say.dm deleted file mode 100644 index 41229d9bd2..0000000000 --- a/code/modules/mob/living/simple_animal/borer/say.dm +++ /dev/null @@ -1,40 +0,0 @@ -/mob/living/simple_mob/animal/borer/say(var/message) - - message = sanitize(message) - message = capitalize(message) - - if(!message) - return - - if (stat == 2) - return say_dead(message) - - if (stat) - return - - if (src.client) - if(client.prefs.muted & MUTE_IC) - to_chat(src, "You cannot speak in IC (muted).") - return - - if (copytext(message, 1, 2) == "*") - return emote(copytext(message, 2)) - - var/datum/language/L = parse_language(message) - if(L && L.flags & HIVEMIND) - L.broadcast(src,trim(copytext(message,3)),src.truename) - return - - if(!host) - //TODO: have this pick a random mob within 3 tiles to speak for the borer. - to_chat(src, "You have no host to speak to.") - return //No host, no audible speech. - - to_chat(src, "You drop words into [host]'s mind: \"[message]\"") - host << "Your own thoughts speak: \"[message]\"" - - for (var/mob/M in player_list) - if (istype(M, /mob/new_player)) - continue - else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) - M << "[src.truename] whispers to [host], \"[message]\"" \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/slime/subtypes.dm b/code/modules/mob/living/simple_animal/slime/subtypes.dm deleted file mode 100644 index 75f33cdcef..0000000000 --- a/code/modules/mob/living/simple_animal/slime/subtypes.dm +++ /dev/null @@ -1,748 +0,0 @@ -// Tier 1 - -/mob/living/simple_animal/slime/purple - desc = "This slime is rather toxic to handle, as it is poisonous." - color = "#CC23FF" - slime_color = "purple" - coretype = /obj/item/slime_extract/purple - reagent_injected = "toxin" - - description_info = "This slime spreads a toxin when it attacks. A biosuit or other thick armor can protect from the toxic attack." - - slime_mutation = list( - /mob/living/simple_animal/slime/dark_purple, - /mob/living/simple_animal/slime/dark_blue, - /mob/living/simple_animal/slime/green, - /mob/living/simple_animal/slime - ) - - -/mob/living/simple_animal/slime/orange - desc = "This slime is known to be flammable and can ignite enemies." - color = "#FFA723" - slime_color = "orange" - coretype = /obj/item/slime_extract/orange - - description_info = "Attacks from this slime can ignite you. A firesuit can protect from the burning attacks of this slime." - - slime_mutation = list( - /mob/living/simple_animal/slime/dark_purple, - /mob/living/simple_animal/slime/yellow, - /mob/living/simple_animal/slime/red, - /mob/living/simple_animal/slime - ) - -/mob/living/simple_animal/slime/orange/post_attack(mob/living/L, intent) - if(intent != I_HELP) - L.adjust_fire_stacks(1) - if(prob(25)) - L.IgniteMob() - ..() - -/mob/living/simple_animal/slime/blue - desc = "This slime produces 'cryotoxin' and uses it against their foes. Very deadly to other slimes." - color = "#19FFFF" - slime_color = "blue" - coretype = /obj/item/slime_extract/blue - reagent_injected = "cryotoxin" - - description_info = "Attacks from this slime can chill you. A biosuit or other thick armor can protect from the chilling attack." - - slime_mutation = list( - /mob/living/simple_animal/slime/dark_blue, - /mob/living/simple_animal/slime/silver, - /mob/living/simple_animal/slime/pink, - /mob/living/simple_animal/slime - ) - - -/mob/living/simple_animal/slime/metal - desc = "This slime is a lot more resilient than the others, due to having a metamorphic metallic and sloped surface." - color = "#5F5F5F" - slime_color = "metal" - shiny = 1 - coretype = /obj/item/slime_extract/metal - - description_info = "This slime is a lot more durable and tough to damage than the others." - - resistance = 10 // Sloped armor is strong. - maxHealth = 250 - maxHealth_adult = 350 - - slime_mutation = list( - /mob/living/simple_animal/slime/silver, - /mob/living/simple_animal/slime/yellow, - /mob/living/simple_animal/slime/gold, - /mob/living/simple_animal/slime - ) - -// Tier 2 - -/mob/living/simple_animal/slime/yellow - desc = "This slime is very conductive, and is known to use electricity as a means of defense moreso than usual for slimes." - color = "#FFF423" - slime_color = "yellow" - coretype = /obj/item/slime_extract/yellow - - ranged = 1 - shoot_range = 3 - firing_lines = 1 - projectiletype = /obj/item/projectile/beam/lightning/slime - projectilesound = 'sound/weapons/gauss_shoot.ogg' // Closest thing to a 'thunderstrike' sound we have. - glows = TRUE - - description_info = "This slime will fire lightning attacks at enemies if they are at range, and generate electricity \ - for their stun attack faster than usual. Insulative or reflective armor can protect from the lightning." - - slime_mutation = list( - /mob/living/simple_animal/slime/bluespace, - /mob/living/simple_animal/slime/bluespace, - /mob/living/simple_animal/slime/metal, - /mob/living/simple_animal/slime/orange - ) - -/mob/living/simple_animal/slime/yellow/handle_regular_status_updates() - if(stat == CONSCIOUS) - if(prob(25)) - power_charge = between(0, power_charge + 1, 10) - ..() - -/obj/item/projectile/beam/lightning/slime - power = 15 - -/mob/living/simple_animal/slime/yellow/ClosestDistance() // Needed or else they won't eat monkeys outside of melee range. - if(target_mob && ishuman(target_mob)) - var/mob/living/carbon/human/H = target_mob - if(istype(H.species, /datum/species/monkey)) - return 1 - return ..() - - -/mob/living/simple_animal/slime/dark_purple - desc = "This slime produces ever-coveted phoron. Risky to handle but very much worth it." - color = "#660088" - slime_color = "dark purple" - coretype = /obj/item/slime_extract/dark_purple - reagent_injected = "phoron" - - description_info = "This slime applies phoron to enemies it attacks. A biosuit or other thick armor can protect from the toxic attack. \ - If hit with a burning attack, it will erupt in flames." - - slime_mutation = list( - /mob/living/simple_animal/slime/purple, - /mob/living/simple_animal/slime/orange, - /mob/living/simple_animal/slime/ruby, - /mob/living/simple_animal/slime/ruby - ) - -/mob/living/simple_animal/slime/dark_purple/proc/ignite() - visible_message("\The [src] erupts in an inferno!") - for(var/turf/simulated/target_turf in view(2, src)) - target_turf.assume_gas("phoron", 30, 1500+T0C) - spawn(0) - target_turf.hotspot_expose(1500+T0C, 400) - qdel(src) - -/mob/living/simple_animal/slime/dark_purple/ex_act(severity) - log_and_message_admins("[src] ignited due to a chain reaction with an explosion.") - ignite() - -/mob/living/simple_animal/slime/dark_purple/fire_act(datum/gas_mixture/air, temperature, volume) - log_and_message_admins("[src] ignited due to exposure to fire.") - ignite() - -/mob/living/simple_animal/slime/dark_purple/bullet_act(var/obj/item/projectile/P, var/def_zone) - if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security. - log_and_message_admins("[src] ignited due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].") - ignite() - else - ..() - -/mob/living/simple_animal/slime/dark_purple/attackby(var/obj/item/weapon/W, var/mob/user) - if(istype(W) && W.force && W.damtype == BURN) - log_and_message_admins("[src] ignited due to being hit with a burning weapon ([W]) by [key_name(user)].") - ignite() - else - ..() - - - - -/mob/living/simple_animal/slime/dark_blue - desc = "This slime makes other entities near it feel much colder, and is more resilient to the cold. It tends to kill other slimes rather quickly." - color = "#2398FF" - glows = TRUE - slime_color = "dark blue" - coretype = /obj/item/slime_extract/dark_blue - - description_info = "This slime is immune to the cold, however water will still kill it. A winter coat or other cold-resistant clothing can protect from the chilling aura." - - slime_mutation = list( - /mob/living/simple_animal/slime/purple, - /mob/living/simple_animal/slime/blue, - /mob/living/simple_animal/slime/cerulean, - /mob/living/simple_animal/slime/cerulean - ) - - minbodytemp = 0 - cold_damage_per_tick = 0 - -/mob/living/simple_animal/slime/dark_blue/Life() - if(stat != DEAD) - cold_aura() - ..() - -/mob/living/simple_animal/slime/dark_blue/proc/cold_aura() - for(var/mob/living/L in view(2, src)) - var/protection = L.get_cold_protection() - - if(protection < 1) - var/cold_factor = abs(protection - 1) - var/delta = -20 - delta *= cold_factor - L.bodytemperature = max(50, L.bodytemperature + delta) - var/turf/T = get_turf(src) - var/datum/gas_mixture/env = T.return_air() - if(env) - env.add_thermal_energy(-10 * 1000) - -/mob/living/simple_animal/slime/dark_blue/get_cold_protection() - return 1 // This slime is immune to cold. - -// Surface variant -/mob/living/simple_animal/slime/dark_blue/feral - name = "feral slime" - desc = "The result of slimes escaping containment from some xenobiology lab. The slime makes other entities near it feel much colder, \ - and it is more resilient to the cold. These qualities have made this color of slime able to thrive on a harsh, cold world and is able to rival \ - the ferocity of other apex predators in this region of Sif. As such, it is a very invasive species." - description_info = "This slime makes other entities near it feel much colder, and is more resilient to the cold. It also has learned advanced combat tactics from \ - having to endure the harsh world outside its lab. Note that processing this large slime will give six cores." - icon_scale_x = 2 - icon_scale_y = 2 - optimal_combat = TRUE // Gotta be sharp to survive out there. - rabid = TRUE - rainbow_core_candidate = FALSE - cores = 6 - maxHealth = 150 - maxHealth_adult = 250 - type_on_death = /mob/living/simple_animal/slime/dark_blue // Otherwise infinite slimes might occur. - pixel_y = -10 // Since the base sprite isn't centered properly, the pixel auto-adjustment needs some help. - -/mob/living/simple_animal/slime/dark_blue/feral/New() - ..() - make_adult() - -/mob/living/simple_animal/slime/silver - desc = "This slime is shiny, and can deflect lasers or other energy weapons directed at it." - color = "#AAAAAA" - slime_color = "silver" - coretype = /obj/item/slime_extract/silver - shiny = TRUE - - description_info = "Tasers, including the slime version, are ineffective against this slime. The slimebation still works." - - slime_mutation = list( - /mob/living/simple_animal/slime/metal, - /mob/living/simple_animal/slime/blue, - /mob/living/simple_animal/slime/amber, - /mob/living/simple_animal/slime/amber - ) - -/mob/living/simple_animal/slime/silver/bullet_act(var/obj/item/projectile/P, var/def_zone) - if(istype(P,/obj/item/projectile/beam) || istype(P, /obj/item/projectile/energy)) - visible_message("\The [src] reflects \the [P]!") - - // Find a turf near or on the original location to bounce to - var/new_x = P.starting.x + pick(0, 0, 0, -1, 1, -2, 2) - var/new_y = P.starting.y + pick(0, 0, 0, -1, 1, -2, 2) - var/turf/curloc = get_turf(src) - - // redirect the projectile - P.redirect(new_x, new_y, curloc, src) - return PROJECTILE_CONTINUE // complete projectile permutation - else - ..() - - -// Tier 3 - -/mob/living/simple_animal/slime/bluespace - desc = "Trapping this slime in a cell is generally futile, as it can teleport at will." - color = null - slime_color = "bluespace" - icon_state_override = "bluespace" - coretype = /obj/item/slime_extract/bluespace - - description_info = "This slime will teleport to attack something if it is within a range of seven tiles. The teleport has a cooldown of five seconds." - - slime_mutation = list( - /mob/living/simple_animal/slime/bluespace, - /mob/living/simple_animal/slime/bluespace, - /mob/living/simple_animal/slime/yellow, - /mob/living/simple_animal/slime/yellow - ) - - spattack_prob = 100 - spattack_min_range = 3 - spattack_max_range = 7 - var/last_tele = null // Uses world.time - var/tele_cooldown = 5 SECONDS - -/mob/living/simple_animal/slime/bluespace/ClosestDistance() // Needed or the SA AI won't ever try to teleport. - if(world.time > last_tele + tele_cooldown) - return spattack_max_range - 1 - return ..() - -/mob/living/simple_animal/slime/bluespace/SpecialAtkTarget() - // Teleport attack. - if(!target_mob) - to_chat(src, "There's nothing to teleport to.") - return FALSE - - if(world.time < last_tele + tele_cooldown) - to_chat(src, "You can't teleport right now, wait a few seconds.") - return FALSE - - var/list/nearby_things = range(1, target_mob) - var/list/valid_turfs = list() - - // All this work to just go to a non-dense tile. - for(var/turf/potential_turf in nearby_things) - var/valid_turf = TRUE - if(potential_turf.density) - continue - for(var/atom/movable/AM in potential_turf) - if(AM.density) - valid_turf = FALSE - if(valid_turf) - valid_turfs.Add(potential_turf) - - - - var/turf/T = get_turf(src) - var/turf/target_turf = pick(valid_turfs) - - if(!target_turf) - to_chat(src, "There wasn't an unoccupied spot to teleport to.") - return FALSE - - var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/spark_spread - s1.set_up(5, 1, T) - var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/spark_spread - s2.set_up(5, 1, target_turf) - - - T.visible_message("\The [src] vanishes!") - s1.start() - - forceMove(target_turf) - playsound(target_turf, 'sound/effects/phasein.ogg', 50, 1) - to_chat(src, "You teleport to \the [target_turf].") - - target_turf.visible_message("\The [src] appears!") - s2.start() - - last_tele = world.time - - if(Adjacent(target_mob)) - PunchTarget() - return TRUE - -/mob/living/simple_animal/slime/ruby - desc = "This slime has great physical strength." - color = "#FF3333" - slime_color = "ruby" - shiny = TRUE - glows = TRUE - coretype = /obj/item/slime_extract/ruby - - description_info = "This slime is unnaturally stronger, allowing it to hit much harder, take less damage, and be stunned for less time. \ - Their glomp attacks also send the victim flying." - - slime_mutation = list( - /mob/living/simple_animal/slime/dark_purple, - /mob/living/simple_animal/slime/dark_purple, - /mob/living/simple_animal/slime/ruby, - /mob/living/simple_animal/slime/ruby - ) - -/mob/living/simple_animal/slime/ruby/New() - ..() - add_modifier(/datum/modifier/slime_strength, null, src) // Slime is always swole. - -/mob/living/simple_animal/slime/ruby/DoPunch(var/mob/living/L) - ..() // Do regular attacks. - - if(istype(L)) - if(a_intent == I_HURT) - visible_message("\The [src] sends \the [L] flying with the impact!") - playsound(src, "punch", 50, 1) - L.Weaken(1) - var/throwdir = get_dir(src, L) - L.throw_at(get_edge_target_turf(L, throwdir), 3, 1, src) - - -/mob/living/simple_animal/slime/amber - desc = "This slime seems to be an expert in the culinary arts, as they create their own food to share with others. \ - They would probably be very important to other slimes, if the other colors didn't try to kill them." - color = "#FFBB00" - slime_color = "amber" - shiny = TRUE - glows = TRUE - coretype = /obj/item/slime_extract/amber - - description_info = "This slime feeds nearby entities passively while it is alive. This can cause uncontrollable \ - slime growth and reproduction if not kept in check. The amber slime cannot feed itself, but can be fed by other amber slimes." - - slime_mutation = list( - /mob/living/simple_animal/slime/silver, - /mob/living/simple_animal/slime/silver, - /mob/living/simple_animal/slime/amber, - /mob/living/simple_animal/slime/amber - ) - -/mob/living/simple_animal/slime/amber/Life() - if(stat != DEAD) - feed_aura() - ..() - -/mob/living/simple_animal/slime/amber/proc/feed_aura() - for(var/mob/living/L in view(2, src)) - if(L == src) // Don't feed themselves, or it is impossible to stop infinite slimes without killing all of the ambers. - continue - if(isslime(L)) - var/mob/living/simple_animal/slime/S = L - S.adjust_nutrition(rand(15, 25)) - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(H.isSynthetic()) - continue - H.nutrition = between(0, H.nutrition + rand(15, 25), 600) - - - -/mob/living/simple_animal/slime/cerulean - desc = "This slime is generally superior in a wide range of attributes, compared to the common slime. The jack of all trades, but master of none." - color = "#4F7EAA" - slime_color = "cerulean" - coretype = /obj/item/slime_extract/cerulean - - // Less than the specialized slimes, but higher than the rest. - maxHealth = 200 - maxHealth_adult = 250 - - melee_damage_lower = 10 - melee_damage_upper = 30 - - move_to_delay = 3 - - - - slime_mutation = list( - /mob/living/simple_animal/slime/dark_blue, - /mob/living/simple_animal/slime/dark_blue, - /mob/living/simple_animal/slime/cerulean, - /mob/living/simple_animal/slime/cerulean - ) - -// Tier 4 - -/mob/living/simple_animal/slime/red - desc = "This slime is full of energy, and very aggressive. 'The red ones go faster.' seems to apply here." - color = "#FF3333" - slime_color = "red" - coretype = /obj/item/slime_extract/red - move_to_delay = 3 // The red ones go faster. - - description_info = "This slime is faster than the others. Attempting to discipline this slime will always cause it to go berserk." - - slime_mutation = list( - /mob/living/simple_animal/slime/red, - /mob/living/simple_animal/slime/oil, - /mob/living/simple_animal/slime/oil, - /mob/living/simple_animal/slime/orange - ) - - -/mob/living/simple_animal/slime/red/adjust_discipline(amount) - if(amount > 0) - if(!rabid) - enrage() // How dare you try to control the red slime. - say("Grrr...!") - -/mob/living/simple_animal/slime/red/enrage() - ..() - add_modifier(/datum/modifier/berserk, 30 SECONDS) - - -/mob/living/simple_animal/slime/green - desc = "This slime is radioactive." - color = "#14FF20" - slime_color = "green" - coretype = /obj/item/slime_extract/green - glows = TRUE - reagent_injected = "radium" - var/rads = 25 - - description_info = "This slime will irradiate anything nearby passively, and will inject radium on attack. \ - A radsuit or other thick and radiation-hardened armor can protect from this. It will only radiate while alive." - - slime_mutation = list( - /mob/living/simple_animal/slime/purple, - /mob/living/simple_animal/slime/green, - /mob/living/simple_animal/slime/emerald, - /mob/living/simple_animal/slime/emerald - ) - -/mob/living/simple_animal/slime/green/Life() - if(stat != DEAD) - irradiate() - ..() - -/mob/living/simple_animal/slime/green/proc/irradiate() - SSradiation.radiate(src, rads) - - -/mob/living/simple_animal/slime/pink - desc = "This slime has regenerative properties." - color = "#FF0080" - slime_color = "pink" - coretype = /obj/item/slime_extract/pink - glows = TRUE - - description_info = "This slime will passively heal nearby entities within two tiles, including itself. It will only do this while alive." - - slime_mutation = list( - /mob/living/simple_animal/slime/blue, - /mob/living/simple_animal/slime/light_pink, - /mob/living/simple_animal/slime/light_pink, - /mob/living/simple_animal/slime/pink - ) - -/mob/living/simple_animal/slime/pink/Life() - if(stat != DEAD) - heal_aura() - ..() - -/mob/living/simple_animal/slime/pink/proc/heal_aura() - for(var/mob/living/L in view(src, 2)) - if(L.stat == DEAD || L == target_mob) - continue - L.add_modifier(/datum/modifier/slime_heal, 5 SECONDS, src) - -/datum/modifier/slime_heal - name = "slime mending" - desc = "You feel somewhat gooy." - mob_overlay_state = "pink_sparkles" - - on_created_text = "Twinkling spores of goo surround you. It makes you feel healthier." - on_expired_text = "The spores of goo have faded, although you feel much healthier than before." - stacks = MODIFIER_STACK_EXTEND - -/datum/modifier/slime_heal/tick() - if(holder.stat == DEAD) // Required or else simple animals become immortal. - expire() - - if(ishuman(holder)) // Robolimbs need this code sadly. - var/mob/living/carbon/human/H = holder - for(var/obj/item/organ/external/E in H.organs) - var/obj/item/organ/external/O = E - O.heal_damage(2, 2, 0, 1) - else - holder.adjustBruteLoss(-2) - holder.adjustFireLoss(-2) - - holder.adjustToxLoss(-2) - holder.adjustOxyLoss(-2) - holder.adjustCloneLoss(-1) - - - -/mob/living/simple_animal/slime/gold - desc = "This slime absorbs energy, and cannot be stunned by normal means." - color = "#EEAA00" - shiny = TRUE - slime_color = "gold" - coretype = /obj/item/slime_extract/gold - description_info = "This slime is immune to the slimebaton and taser, and will actually charge the slime, however it will still discipline the slime." - - slime_mutation = list( - /mob/living/simple_animal/slime/metal, - /mob/living/simple_animal/slime/gold, - /mob/living/simple_animal/slime/sapphire, - /mob/living/simple_animal/slime/sapphire - ) - -/mob/living/simple_animal/slime/gold/Weaken(amount) - power_charge = between(0, power_charge + amount, 10) - return - -/mob/living/simple_animal/slime/gold/Stun(amount) - power_charge = between(0, power_charge + amount, 10) - return - -/mob/living/simple_animal/slime/gold/get_description_interaction() // So it doesn't say to use a baton on them. - return list() - - -// Tier 5 - -/mob/living/simple_animal/slime/oil - desc = "This slime is explosive and volatile. Smoking near it is probably a bad idea." - color = "#333333" - slime_color = "oil" - shiny = TRUE - coretype = /obj/item/slime_extract/oil - - description_info = "If this slime suffers damage from a fire or heat based source, or if it is caught inside \ - an explosion, it will explode. Rabid oil slimes will charge at enemies, then suicide-bomb themselves. \ - Bomb suits can protect from the explosion." - - slime_mutation = list( - /mob/living/simple_animal/slime/oil, - /mob/living/simple_animal/slime/oil, - /mob/living/simple_animal/slime/red, - /mob/living/simple_animal/slime/red - ) - -/mob/living/simple_animal/slime/oil/proc/explode() - if(stat != DEAD) - // explosion(src.loc, 1, 2, 4) - explosion(src.loc, 0, 2, 4) // A bit weaker since the suicide charger tended to gib the poor sod being targeted. - if(src) // Delete ourselves if the explosion didn't do it. - qdel(src) - -/mob/living/simple_animal/slime/oil/post_attack(var/mob/living/L, var/intent = I_HURT) - if(!rabid) - return ..() - if(intent == I_HURT || intent == I_GRAB) - say(pick("Sacrifice...!", "Sssss...", "Boom...!")) - sleep(2 SECOND) - log_and_message_admins("[src] has suicide-bombed themselves while trying to kill \the [L].") - explode() - -/mob/living/simple_animal/slime/oil/ex_act(severity) - log_and_message_admins("[src] exploded due to a chain reaction with another explosion.") - explode() - -/mob/living/simple_animal/slime/oil/fire_act(datum/gas_mixture/air, temperature, volume) - log_and_message_admins("[src] exploded due to exposure to fire.") - explode() - -/mob/living/simple_animal/slime/oil/bullet_act(var/obj/item/projectile/P, var/def_zone) - if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security. - log_and_message_admins("[src] exploded due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].") - explode() - else - ..() - -/mob/living/simple_animal/slime/oil/attackby(var/obj/item/weapon/W, var/mob/user) - if(istype(W) && W.force && W.damtype == BURN) - log_and_message_admins("[src] exploded due to being hit with a burning weapon ([W]) by [key_name(user)].") - explode() - else - ..() - - -/mob/living/simple_animal/slime/sapphire - desc = "This slime seems a bit brighter than the rest, both figuratively and literally." - color = "#2398FF" - slime_color = "sapphire" - shiny = TRUE - glows = TRUE - coretype = /obj/item/slime_extract/sapphire - - optimal_combat = TRUE // Lift combat AI restrictions to look smarter. - run_at_them = FALSE // Use fancy A* pathing. - astar_adjacent_proc = /turf/proc/TurfsWithAccess // Normal slimes don't care about cardinals (because BYOND) so smart slimes shouldn't as well. - move_to_delay = 3 // A* chasing is slightly slower in terms of movement speed than regular pathing so reducing this hopefully makes up for that. - - description_info = "This slime uses more robust tactics when fighting and won't hold back, so it is dangerous to be alone \ - with one if hostile, and especially dangerous if they outnumber you." - - slime_mutation = list( - /mob/living/simple_animal/slime/sapphire, - /mob/living/simple_animal/slime/sapphire, - /mob/living/simple_animal/slime/gold, - /mob/living/simple_animal/slime/gold - ) - -/mob/living/simple_animal/slime/emerald - desc = "This slime is faster than usual, even more so than the red slimes." - color = "#22FF22" - shiny = TRUE - glows = TRUE - slime_color = "emerald" - coretype = /obj/item/slime_extract/emerald - - description_info = "This slime will make everything around it, and itself, faster for a few seconds, if close by." - move_to_delay = 2 - - slime_mutation = list( - /mob/living/simple_animal/slime/green, - /mob/living/simple_animal/slime/green, - /mob/living/simple_animal/slime/emerald, - /mob/living/simple_animal/slime/emerald - ) - -/mob/living/simple_animal/slime/emerald/Life() - if(stat != DEAD) - zoom_aura() - ..() - -/mob/living/simple_animal/slime/emerald/proc/zoom_aura() - for(var/mob/living/L in view(src, 2)) - if(L.stat == DEAD || L == target_mob) - continue - L.add_modifier(/datum/modifier/technomancer/haste, 5 SECONDS, src) - -/mob/living/simple_animal/slime/light_pink - desc = "This slime seems a lot more peaceful than the others." - color = "#FF8888" - slime_color = "light pink" - coretype = /obj/item/slime_extract/light_pink - - description_info = "This slime is effectively always disciplined initially." - obedience = 5 - discipline = 5 - - slime_mutation = list( - /mob/living/simple_animal/slime/pink, - /mob/living/simple_animal/slime/pink, - /mob/living/simple_animal/slime/light_pink, - /mob/living/simple_animal/slime/light_pink - ) - -// Special -/mob/living/simple_animal/slime/rainbow - desc = "This slime changes colors constantly." - color = null // Only slime subtype that uses a different icon_state. - slime_color = "rainbow" - coretype = /obj/item/slime_extract/rainbow - icon_state_override = "rainbow" - unity = TRUE - - description_info = "This slime is considered to be the same color as all other slime colors at the same time for the purposes of \ - other slimes being friendly to them, and therefore will never be harmed by another slime. \ - Attacking this slime will provoke the wrath of all slimes within range." - - slime_mutation = list( - /mob/living/simple_animal/slime/rainbow, - /mob/living/simple_animal/slime/rainbow, - /mob/living/simple_animal/slime/rainbow, - /mob/living/simple_animal/slime/rainbow - ) - -/mob/living/simple_animal/slime/rainbow/New() - unify() - ..() - -// The RD's pet slime. -/mob/living/simple_animal/slime/rainbow/kendrick - name = "Kendrick" - desc = "The Research Director's pet slime. It shifts colors constantly." - rainbow_core_candidate = FALSE - -/mob/living/simple_animal/slime/rainbow/kendrick/New() - pacify() - ..() \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/simple_mob.dm b/code/modules/mob/living/simple_mob/simple_mob.dm index 7cfb5d4156..c80a6b7329 100644 --- a/code/modules/mob/living/simple_mob/simple_mob.dm +++ b/code/modules/mob/living/simple_mob/simple_mob.dm @@ -160,7 +160,7 @@ health = maxHealth for(var/L in has_langs) - languages |= all_languages[L] + languages |= GLOB.all_languages[L] if(languages.len) default_language = languages[1] diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm b/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm index 717d00cca9..1a776b4e15 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm @@ -21,7 +21,7 @@ mimic_active = FALSE if(prob(mimic_chance)) var/mob/living/simple_mob/vore/aggressive/mimic/new_mimic = new(loc, src) - visible_message("The [new_mimic] suddenly growls as it turns out to be a mimic!") + visible_message("[new_mimic] suddenly growls as it turns out to be a mimic!") forceMove(new_mimic) new_mimic.real_crate = src new_mimic.name = name @@ -42,7 +42,7 @@ /obj/structure/closet/crate/mimic/damage(var/damage) if(contents.len) - visible_message("The [src] makes out a crunchy noise as its contents are destroyed!") + visible_message("[src] makes out a crunchy noise as its contents are destroyed!") for(var/obj/O in src.contents) qdel(O) ..() @@ -128,4 +128,4 @@ else new/obj/structure/closet/crate(loc) real_crate = null - qdel(src) \ No newline at end of file + qdel(src) diff --git a/code/modules/mob/living/voice/voice.dm b/code/modules/mob/living/voice/voice.dm index 8d7337df07..9639f5a320 100644 --- a/code/modules/mob/living/voice/voice.dm +++ b/code/modules/mob/living/voice/voice.dm @@ -9,7 +9,7 @@ /mob/living/voice/New(loc) add_language(LANGUAGE_GALCOM) - set_default_language(all_languages[LANGUAGE_GALCOM]) + set_default_language(GLOB.all_languages[LANGUAGE_GALCOM]) if(istype(loc, /obj/item/device/communicator)) comm = loc diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 45e009876d..25092e6d01 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -330,7 +330,7 @@ /mob/proc/print_flavor_text() if (flavor_text && flavor_text != "") var/msg = replacetext(flavor_text, "\n", " ") - if(lentext(msg) <= 40) + if(length(msg) <= 40) return "[msg]" else return "[copytext_preserve_html(msg, 1, 37)]... More..." diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 4cb44c6e82..2b74151cdd 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -186,8 +186,8 @@ proc/getsensorlevel(A) proc/slur(phrase) phrase = html_decode(phrase) - var/leng=lentext(phrase) - var/counter=lentext(phrase) + var/leng=length(phrase) + var/counter=length(phrase) var/newphrase="" var/newletter="" while(counter>=1) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index a8c613c725..1bcafd6e45 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -185,12 +185,13 @@ else if(ticker && ticker.mode && ticker.mode.explosion_in_progress) usr << "The station is currently exploding. Joining would go poorly." return -/* - if(!is_alien_whitelisted(src, all_species[client.prefs.species])) + + if(!is_alien_whitelisted(src, GLOB.all_species[client.prefs.species])) src << alert("You are currently not whitelisted to play [client.prefs.species].") return 0 -*/ - var/datum/species/S = all_species[client.prefs.species] + + var/datum/species/S = GLOB.all_species[client.prefs.species] + if(!(S.spawn_flags & SPECIES_CAN_JOIN)) src << alert("Your current species, [client.prefs.species], is not available for play on the station.") return 0 @@ -466,7 +467,7 @@ var/use_species_name var/datum/species/chosen_species if(client.prefs.species) - chosen_species = all_species[client.prefs.species] + chosen_species = GLOB.all_species[client.prefs.species] use_species_name = chosen_species.get_station_variant() //Only used by pariahs atm. if(chosen_species && use_species_name) @@ -513,7 +514,7 @@ new_character.disabilities |= NEARSIGHTED for(var/lang in client.prefs.alternate_languages) - var/datum/language/chosen_language = all_languages[lang] + var/datum/language/chosen_language = GLOB.all_languages[lang] if(chosen_language) if(is_lang_whitelisted(src,chosen_language) || (new_character.species && (chosen_language.name in new_character.species.secondary_langs))) new_character.add_language(lang) @@ -553,7 +554,7 @@ /mob/new_player/get_species() var/datum/species/chosen_species if(client.prefs.species) - chosen_species = all_species[client.prefs.species] + chosen_species = GLOB.all_species[client.prefs.species] if(!chosen_species) return SPECIES_HUMAN diff --git a/code/modules/mob/new_player/new_player_vr.dm b/code/modules/mob/new_player/new_player_vr.dm index b18e66fd83..711332e692 100644 --- a/code/modules/mob/new_player/new_player_vr.dm +++ b/code/modules/mob/new_player/new_player_vr.dm @@ -22,7 +22,7 @@ to_chat(src,"You have not set your scale yet. Do this on the VORE tab in character setup.") //Can they play? - if(!is_alien_whitelisted(src,all_species[client.prefs.species]) && !check_rights(R_ADMIN, 0)) + if(!is_alien_whitelisted(src,GLOB.all_species[client.prefs.species]) && !check_rights(R_ADMIN, 0)) pass = FALSE to_chat(src,"You are not allowed to spawn in as this species.") diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 8260a67a9c..d8ad2a1297 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -1,7 +1,7 @@ /datum/preferences //The mob should have a gender you want before running this proc. Will run fine without H /datum/preferences/proc/randomize_appearance_and_body_for(var/mob/living/carbon/human/H) - var/datum/species/current_species = all_species[species ? species : "Human"] + var/datum/species/current_species = GLOB.all_species[species ? species : "Human"] set_biological_gender(pick(current_species.genders)) h_style = random_hair_style(biological_gender, species) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 73ce4ca04b..31aa13b542 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -52,45 +52,62 @@ eighties name = "80's" icon_state = "hair_80s" + flags = HAIR_TIEABLE afro name = "Afro" icon_state = "hair_afro" + flags = HAIR_TIEABLE afro2 name = "Afro 2" icon_state = "hair_afro2" + flags = HAIR_TIEABLE afro_large name = "Big Afro" icon_state = "hair_bigafro" + flags = HAIR_TIEABLE + + amazon + name = "Amazon" + icon_state = "hair_amazon" + flags = HAIR_TIEABLE + + antenna + name = "Antenna" + icon_state = "hair_antenna" bald name = "Bald" icon_state = "bald" - gender = MALE flags = HAIR_VERY_SHORT species_allowed = list(SPECIES_HUMAN,SPECIES_UNATHI,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_VOX) baldfade name = "Balding Fade" icon_state = "hair_baldfade" - gender = MALE flags = HAIR_VERY_SHORT balding name = "Balding Hair" icon_state = "hair_e" - gender = MALE flags = HAIR_VERY_SHORT + beachwave + name = "Beach Waves" + icon_state = "hair_beachwave" + flags = HAIR_TIEABLE + bedhead name = "Bedhead" icon_state = "hair_bedhead" + flags = HAIR_TIEABLE bedhead2 name = "Bedhead 2" icon_state = "hair_bedheadv2" + flags = HAIR_TIEABLE bedhead3 name = "Bedhead 3" @@ -147,6 +164,10 @@ name = "Bowl 2" icon_state = "hair_bowlcut2" + bowlcut2 + name = "Bowl, Overeye" + icon_state = "hair_overeyebowl" + grandebraid name = "Braid Grande" icon_state = "hair_grande" @@ -167,21 +188,34 @@ icon_state = "hair_braid" flags = HAIR_TIEABLE + front_braid + name = "Braided front" + icon_state = "hair_braidfront" + flags = HAIR_TIEABLE + + braidtail + name = "Braided Tail" + icon_state = "hair_braidtail" + flags = HAIR_TIEABLE + bun name = "Bun" icon_state = "hair_bun" + flags = HAIR_TIEABLE bun2 name = "Bun 2" icon_state = "hair_bun2" + flags = HAIR_TIEABLE bun3 name = "Bun 3" icon_state = "hair_bun3" + flags = HAIR_TIEABLE - bun - name = "Bun Casual" - icon_state = "hair_bun" + bunhead + name = "Bun Head " + icon_state = "hair_bunhead" flags = HAIR_TIEABLE doublebun @@ -192,18 +226,43 @@ tightbun name = "Bun Tight" icon_state = "hair_tightbun" - gender = FEMALE flags = HAIR_VERY_SHORT | HAIR_TIEABLE + business + name = "Business Hair" + icon_state = "hair_business" + flags = HAIR_VERY_SHORT + + business2 + name = "Business Hair 2" + icon_state = "hair_business2" + flags = HAIR_VERY_SHORT + + business3 + name = "Business Hair 3" + icon_state = "hair_business3" + flags = HAIR_VERY_SHORT + + business4 + name = "Business Hair 4" + icon_state = "hair_business4" + flags = HAIR_VERY_SHORT + buzz name = "Buzzcut" icon_state = "hair_buzzcut" flags = HAIR_VERY_SHORT species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI) + celebcurls + name = "Celeb Curls" + icon_state = "hair_celebcurls" + flags = HAIR_TIEABLE + crono name = "Chrono" icon_state = "hair_toriyama" + flags = HAIR_TIEABLE cia name = "CIA" @@ -222,6 +281,7 @@ country name = "Country" icon_state = "hair_country" + flags = HAIR_TIEABLE crew name = "Crewcut" @@ -246,21 +306,29 @@ name = "Devil Lock" icon_state = "hair_devilock" + donutbun + name = "Donut Bun" + icon_state = "hair_donutbun" + dreadlocks name = "Dreadlocks" icon_state = "hair_dreads" + flags = HAIR_TIEABLE mahdrills name = "Drillruru" icon_state = "hair_drillruru" + flags = HAIR_TIEABLE emo name = "Emo" icon_state = "hair_emo" + flags = HAIR_TIEABLE emo2 name = "Emo Alt" icon_state = "hair_emo2" + flags = HAIR_TIEABLE fringeemo name = "Emo Fringe" @@ -270,6 +338,7 @@ halfshaved name = "Emo Half-Shaved" icon_state = "hair_halfshaved" + flags = HAIR_TIEABLE longemo name = "Emo Long" @@ -344,12 +413,18 @@ gelled name = "Gelled Back" icon_state = "hair_gelled" + flags = HAIR_TIEABLE gentle name = "Gentle" icon_state = "hair_gentle" flags = HAIR_TIEABLE + gentle + name = "Gentle 2, Long" + icon_state = "hair_gentle2long" + flags = HAIR_TIEABLE + glossy name = "Glossy" icon_state = "hair_glossy" @@ -373,6 +448,11 @@ icon_state = "hair_himecut" flags = HAIR_TIEABLE + himeup + name = "Hime Updo" + icon_state = "hair_himeup" + flags = HAIR_TIEABLE + shorthime name = "Hime Cut Short" icon_state = "hair_shorthime" @@ -385,11 +465,18 @@ jade name = "Jade" icon_state = "hair_jade" + flags = HAIR_TIEABLE jensen name = "Jensen" icon_state = "hair_jensen" + + jessica + name = "Jessica" + icon_state = "hair_jessica" + flags = HAIR_TIEABLE + joestar name = "Joestar" icon_state = "hair_joestar" @@ -399,6 +486,10 @@ icon_state = "hair_kagami" flags = HAIR_TIEABLE + keanu + name = "Keanu Hair" + icon_state = "hair_keanu" + kusangi name = "Kusanagi Hair" icon_state = "hair_kusanagi" @@ -423,19 +514,38 @@ icon_state = "hair_longeralt2" flags = HAIR_TIEABLE + sidepartlongalt + name = "Long Side Part" + icon_state = "hair_longsidepart" + flags = HAIR_TIEABLE + longest name = "Very Long Hair" icon_state = "hair_longest" flags = HAIR_TIEABLE + lowbraid + name = "Low Braid" + icon_state = "hair_hbraid" + flags = HAIR_TIEABLE + manbun name = "Manbun" icon_state = "hair_manbun" flags = HAIR_TIEABLE + marysue + name = "Mary Sue" + icon_state = "hair_marysue" + + miles + name = "Miles Hair" + icon_state = "hair_miles" + modern name = "Modern" icon_state = "hair_modern" + flags = HAIR_TIEABLE mohawk name = "Mohawk" @@ -467,6 +577,7 @@ nia name = "Nia" icon_state = "hair_nia" + flags = HAIR_TIEABLE nitori name = "Nitori" @@ -495,6 +606,7 @@ shortovereye name = "Overeye Short" icon_state = "hair_shortovereye" + flags = HAIR_TIEABLE veryshortovereyealternate name = "Overeye Very Short, Alternate" @@ -512,13 +624,20 @@ name = "Parted Alt" icon_state = "hair_partedalt" + + pixie + name = "Pixie Cut" + icon_state = "hair_pixie" + pompadour name = "Pompadour" icon_state = "hair_pompadour" + flags = HAIR_TIEABLE dandypomp name = "Pompadour Dandy" icon_state = "hair_dandypompadour" + flags = HAIR_TIEABLE ponytail1 name = "Ponytail 1" @@ -570,6 +689,10 @@ icon_state = "hair_poofy2" flags = HAIR_TIEABLE + proper + name = "Proper" + icon_state = "hair_proper" + quiff name = "Quiff" icon_state = "hair_quiff" @@ -580,6 +703,11 @@ gender = MALE flags = HAIR_VERY_SHORT + newyou + name = "New You" + icon_state = "hair_newyou" + flags = HAIR_TIEABLE + ronin name = "Ronin" icon_state = "hair_ronin" @@ -588,6 +716,7 @@ rosa name = "Rosa" icon_state = "hair_rosa" + flags = HAIR_TIEABLE rows name = "Rows" @@ -645,6 +774,7 @@ shy name = "Shy" icon_state = "hair_shy" + flags = HAIR_TIEABLE sideponytail name = "Side Ponytail" @@ -666,6 +796,11 @@ icon_state = "hair_tressshoulder" flags = HAIR_TIEABLE + sideundercut + name = "Side Undercut" + icon_state = "hair_sideundercut" + flags = HAIR_VERY_SHORT + skinhead name = "Skinhead" icon_state = "hair_skinhead" @@ -676,11 +811,25 @@ icon_state = "hair_sleeze" flags = HAIR_VERY_SHORT + protagonist + name = "Slightly Long" + icon_state = "hair_protagonist" + flags = HAIR_TIEABLE + spiky name = "Spiky" icon_state = "hair_spikey" species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI) + straightlong + name = "Straight Long" + icon_state = "hair_straightlong" + flags = HAIR_TIEABLE + + sweepshave + name = "Sweep Shave" + icon_state = "hair_sweepshave" + thinning name = "Thinning" icon_state = "hair_thinning" @@ -739,6 +888,7 @@ unkept name = "Unkept" icon_state = "hair_unkept" + flags = HAIR_TIEABLE updo name = "Updo" @@ -749,6 +899,10 @@ name = "Vegeta" icon_state = "hair_toriyama2" + vivi + name = "Vivi" + icon_state = "hair_vivi" + volaju name = "Volaju" icon_state = "hair_volaju" @@ -1465,6 +1619,14 @@ body_parts = list(BP_TORSO) species_allowed = list(SPECIES_UNATHI) + //Tesh stuff. + + teshi_fluff + name = "Underfluff (Teshari)" + icon_state = "teshi_fluff" + body_parts = list(BP_HEAD, BP_TORSO, BP_GROIN, BP_R_LEG, BP_L_LEG) + species_allowed = list(SPECIES_TESHARI) + //skin styles - WIP //going to have to re-integrate this with surgery //let the icon_state hold an icon preview for now diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm index 12847837f7..f15a9f18f0 100644 --- a/code/modules/mob/new_player/sprite_accessories_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_vr.dm @@ -378,7 +378,7 @@ gender = NEUTER vulp_hair_bun - name = "Bun" + name = "Vulp Bun" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "bun" @@ -1027,12 +1027,6 @@ color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG) - teshi_fluff - name = "Teshari underfluff" - icon_state = "teshi_fluff" - color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_GROIN,BP_TORSO,BP_HEAD) - teshi_small_feathers name = "Teshari small wingfeathers" icon_state = "teshi_sf" diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 2d1dc5d101..72b1d52b06 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -51,7 +51,7 @@ usr << "You have deadchat muted." return - message = say_emphasis(message) + message = encode_html_emphasis(message) say_dead_direct("[pick("complains","moans","whines","laments","blubbers")], \"[message]\"", src) @@ -145,13 +145,13 @@ var/prefix = copytext(message,1,2) // This is for audible emotes if(length(message) >= 1 && prefix == "!") - return all_languages["Noise"] + return GLOB.all_languages["Noise"] if(length(message) >= 2 && is_language_prefix(prefix)) var/language_prefix = lowertext(copytext(message, 2 ,3)) - var/datum/language/L = language_keys[language_prefix] + var/datum/language/L = GLOB.language_keys[language_prefix] if (can_speak(L)) return L else - return all_languages[LANGUAGE_GIBBERISH] + return GLOB.all_languages[LANGUAGE_GIBBERISH] return null diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index 3fe73e3475..0e5bd02d45 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -42,7 +42,7 @@ return if (message) - message = say_emphasis(message) + message = encode_html_emphasis(message) var/list/vis = get_mobs_and_objs_in_view_fast(get_turf(src),1,2) //Turf, Range, and type 2 is emote var/list/vis_mobs = vis["mobs"] diff --git a/code/modules/nifsoft/nif_softshop.dm b/code/modules/nifsoft/nif_softshop.dm index 818a53d38c..6abbeff162 100644 --- a/code/modules/nifsoft/nif_softshop.dm +++ b/code/modules/nifsoft/nif_softshop.dm @@ -217,3 +217,8 @@ currently_vending = null SSnanoui.update_uis(src) return 1 + +//Can't throw intangible software at people. +/obj/machinery/vending/nifsoft_shop/throw_item() + //TODO: Make it throw disks at people with random software? That might be fun. EVEN THE ILLEGAL ONES? ;o + return 0 diff --git a/code/modules/nifsoft/nifsoft.dm b/code/modules/nifsoft/nifsoft.dm index 6f110de856..0df241799f 100644 --- a/code/modules/nifsoft/nifsoft.dm +++ b/code/modules/nifsoft/nifsoft.dm @@ -61,13 +61,15 @@ //Called when the software is installed in the NIF /datum/nifsoft/proc/install() + if(!nif) + return return nif.install(src) //Called when the software is removed from the NIF /datum/nifsoft/proc/uninstall() - if(active) - deactivate() if(nif) + if(active) + deactivate() . = nif.uninstall(src) nif = null if(!QDESTROYING(src)) diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index 48ca432420..1dd2c354c6 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -55,10 +55,14 @@ nif.human.verbs -= /mob/living/carbon/human/proc/nme proc/save_settings() + if(!nif) + return nif.save_data["[list_pos]"] = inside_flavor return TRUE proc/load_settings() + if(!nif) + return var/load = nif.save_data["[list_pos]"] if(load) inside_flavor = load diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index ccef2fb79c..0a3685d61e 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -303,8 +303,8 @@ proc/blood_incompatible(donor,receiver,donor_species,receiver_species) if(donor_species != receiver_species) return 1 - var/donor_antigen = copytext(donor,1,lentext(donor)) - var/receiver_antigen = copytext(receiver,1,lentext(receiver)) + var/donor_antigen = copytext(donor,1,length(donor)) + var/receiver_antigen = copytext(receiver,1,length(receiver)) var/donor_rh = (findtext(donor,"+")>0) var/receiver_rh = (findtext(receiver,"+")>0) diff --git a/code/modules/organs/internal/voicebox.dm b/code/modules/organs/internal/voicebox.dm index 2cf264f780..a9bad7dcd8 100644 --- a/code/modules/organs/internal/voicebox.dm +++ b/code/modules/organs/internal/voicebox.dm @@ -18,7 +18,7 @@ /obj/item/organ/internal/voicebox/proc/amend_assist_langs() // Adds the list of language datums assisted by the voicebox to the list used in speaking for(var/L in will_assist_languages) - assists_languages |= all_languages[L] + assists_languages |= GLOB.all_languages[L] /obj/item/organ/internal/voicebox/proc/add_assistable_langs(var/language) // Adds a new language (by string/define) to the list of things the voicebox can assist will_assist_languages |= language diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index b9aecbe250..efdf8efd3e 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -65,7 +65,7 @@ var/list/organ_cache = list() if(istype(holder)) src.owner = holder src.w_class = max(src.w_class + mob_size_difference(holder.mob_size, MOB_MEDIUM), 1) //smaller mobs have smaller organs. - species = all_species[SPECIES_HUMAN] + species = GLOB.all_species[SPECIES_HUMAN] if(holder.dna) dna = holder.dna.Clone() species = holder.species //VOREStation Edit - For custom species @@ -87,7 +87,7 @@ var/list/organ_cache = list() if(internal) holder.internal_organs |= src else - species = all_species["Human"] + species = GLOB.all_species["Human"] handle_organ_mod_special() diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 433dfae84e..bd4317787a 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -1032,7 +1032,7 @@ Note that amputating the affected organ does in fact remove the infection from t W.germ_level = 0 return rval -/obj/item/organ/external/proc/clamp() +/obj/item/organ/external/proc/organ_clamp() var/rval = 0 src.status &= ~ORGAN_BLEEDING for(var/datum/wound/W in wounds) diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm index 58716745a7..4445f1ed67 100644 --- a/code/modules/organs/organ_icon.dm +++ b/code/modules/organs/organ_icon.dm @@ -71,7 +71,8 @@ var/global/list/limb_icon_cache = list() if(should_have_eyes) //And we have them if(eyes) - eyes_icon.Blend(rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3]), ICON_ADD) + if(has_eye_color) + eyes_icon.Blend(rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3]), ICON_ADD) //They're gone! else eyes_icon.Blend(rgb(128,0,0), ICON_ADD) diff --git a/code/modules/organs/robolimbs_vr.dm b/code/modules/organs/robolimbs_vr.dm index 3a872ea690..8f0de65d43 100644 --- a/code/modules/organs/robolimbs_vr.dm +++ b/code/modules/organs/robolimbs_vr.dm @@ -202,7 +202,7 @@ suggested_species = "Teshari" /datum/robolimb/dsi_teshari/New() - species_cannot_use = all_species.Copy() + species_cannot_use = GLOB.all_species.Copy() species_cannot_use -= SPECIES_TESHARI ..() diff --git a/code/modules/organs/subtypes/standard_vr.dm b/code/modules/organs/subtypes/standard_vr.dm index 16f49361ae..ce6eaf9d9f 100644 --- a/code/modules/organs/subtypes/standard_vr.dm +++ b/code/modules/organs/subtypes/standard_vr.dm @@ -20,7 +20,8 @@ if(eye_icon) var/icon/eyes_icon = new/icon(eye_icons_vr, eye_icon_vr) if(eyes) - eyes_icon.Blend(rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3]), ICON_ADD) + if(owner.species.appearance_flags & HAS_EYE_COLOR) + eyes_icon.Blend(rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3]), ICON_ADD) else eyes_icon.Blend(rgb(128,0,0), ICON_ADD) mob_icon.Blend(eyes_icon, ICON_OVERLAY) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 238aaa3196..15c5fd11f6 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -34,7 +34,7 @@ charge = maxcharge update_icon() if(self_recharge) - START_PROCESSING(SSobj, src) + START_PROCESSING(SSobj, src) /obj/item/weapon/cell/Destroy() if(self_recharge) @@ -145,18 +145,11 @@ /obj/item/weapon/cell/examine(mob/user) - var/msg = desc - + ..() if(get_dist(src, user) <= 1) - msg += " It has a power rating of [maxcharge].\nThe charge meter reads [round(src.percent() )]%." + to_chat(user, " It has a power rating of [maxcharge].\nThe charge meter reads [round(src.percent() )]%.") + return - to_chat(user, msg) -/* - if(maxcharge <= 2500) - to_chat(user, "[desc]\nThe manufacturer's label states this cell has a power rating of [maxcharge], and that you should not swallow it.\nThe charge meter reads [round(src.percent() )]%.") - else - to_chat(user, "This power cell has an exciting chrome finish, as it is an uber-capacity cell type! It has a power rating of [maxcharge]!\nThe charge meter reads [round(src.percent() )]%.") -*/ /obj/item/weapon/cell/attackby(obj/item/W, mob/user) ..() if(istype(W, /obj/item/weapon/reagent_containers/syringe)) diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm index df802f4bb5..9c30436930 100644 --- a/code/modules/projectiles/projectile/change.dm +++ b/code/modules/projectiles/projectile/change.dm @@ -32,7 +32,7 @@ var/mob/living/new_mob var/options = list("robot", "slime") - for(var/t in all_species) + for(var/t in GLOB.all_species) options += t if(ishuman(M)) var/mob/living/carbon/human/H = M diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index b2bb2ec8c3..2255860547 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -2478,13 +2478,13 @@ id = "virginsexonthebeach" result = "virginsexonthebeach" required_reagents = list("orangejuice" = 3, "grenadine" = 2) - result_amount = 4 + result_amount = 5 /datum/chemical_reaction/drinks/sexonthebeach name = "Sex On The Beach" id = "sexonthebeach" result = "sexonthebeach" - required_reagents = list("orangejuice" = 3, "grenadine" = 2, "vodka" = 1) + required_reagents = list("virginsexonthebeach" = 5, "vodka" = 1) result_amount = 6 /datum/chemical_reaction/drinks/eggnog diff --git a/code/modules/research/prosfab_designs.dm b/code/modules/research/prosfab_designs.dm index 75c691dbd8..50a5d6db0d 100644 --- a/code/modules/research/prosfab_designs.dm +++ b/code/modules/research/prosfab_designs.dm @@ -16,7 +16,7 @@ if(prosfab.manufacturer) var/datum/robolimb/manf = all_robolimbs[prosfab.manufacturer] newspecies = manf.suggested_species - O.species = all_species[newspecies] + O.species = GLOB.all_species[newspecies] if(istype(O,/obj/item/organ/external)) var/obj/item/organ/external/EO = O if(EO.species.base_color) @@ -54,7 +54,7 @@ EO.remove_rejuv() for(var/obj/item/organ/external/O in H.organs) - O.species = all_species[newspecies] //VOREStation Edit with species suggestion above + O.species = GLOB.all_species[newspecies] O.robotize(prosfab.manufacturer) O.dna = new/datum/dna() O.dna.ResetUI() diff --git a/code/modules/resleeving/designer.dm b/code/modules/resleeving/designer.dm index f4dc1e2095..bdb6b5872a 100644 --- a/code/modules/resleeving/designer.dm +++ b/code/modules/resleeving/designer.dm @@ -68,8 +68,8 @@ if(menu == "3") var/stock_bodyrecords_list_ui[0] - for (var/N in all_species) - var/datum/species/S = all_species[N] + for (var/N in GLOB.all_species) + var/datum/species/S = GLOB.all_species[N] if((S.spawn_flags & (SPECIES_IS_WHITELISTED|SPECIES_CAN_JOIN)) != SPECIES_CAN_JOIN) continue stock_bodyrecords_list_ui += N if(stock_bodyrecords_list_ui.len) @@ -172,7 +172,7 @@ temp = "ERROR: Record missing." else if(href_list["view_stock_brec"]) - var/datum/species/S = all_species[href_list["view_stock_brec"]] + var/datum/species/S = GLOB.all_species[href_list["view_stock_brec"]] if(S && (S.spawn_flags & (SPECIES_IS_WHITELISTED|SPECIES_CAN_JOIN)) == SPECIES_CAN_JOIN) // Generate body record from species! mannequin = new(null, S.name) diff --git a/code/modules/resleeving/infocore_records.dm b/code/modules/resleeving/infocore_records.dm index 134d2be87d..e32c28e66b 100644 --- a/code/modules/resleeving/infocore_records.dm +++ b/code/modules/resleeving/infocore_records.dm @@ -108,7 +108,7 @@ locked = ckeylock //Prevent people from printing restricted and whitelisted species - var/datum/species/S = all_species["[M.dna.species]"] + var/datum/species/S = GLOB.all_species["[M.dna.species]"] if(S) toocomplex = (S.spawn_flags & SPECIES_IS_WHITELISTED) || (S.spawn_flags & SPECIES_IS_RESTRICTED) diff --git a/code/modules/resleeving/infomorph.dm b/code/modules/resleeving/infomorph.dm index 099f3c0a95..9f5528d547 100644 --- a/code/modules/resleeving/infomorph.dm +++ b/code/modules/resleeving/infomorph.dm @@ -563,7 +563,7 @@ var/global/list/default_infomorph_software = list() if(print_flavor_text()) msg += "\n[print_flavor_text()]\n" if (pose) - if( findtext(pose,".",lentext(pose)) == 0 && findtext(pose,"!",lentext(pose)) == 0 && findtext(pose,"?",lentext(pose)) == 0 ) + if( findtext(pose,".",length(pose)) == 0 && findtext(pose,"!",length(pose)) == 0 && findtext(pose,"?",length(pose)) == 0 ) pose = addtext(pose,".") //Makes sure all emotes end with a period. msg += "\nIt is [pose]" diff --git a/code/modules/scripting/Implementations/_Logic.dm b/code/modules/scripting/Implementations/_Logic.dm index aa4080d440..5522d0e2aa 100644 --- a/code/modules/scripting/Implementations/_Logic.dm +++ b/code/modules/scripting/Implementations/_Logic.dm @@ -141,7 +141,7 @@ proc/string_tolist(var/string) var/list/L = new/list() var/i - for(i=1, i<=lentext(string), i++) + for(i=1, i<=length(string), i++) L.Add(copytext(string, i, i)) return L @@ -154,12 +154,12 @@ proc/string_explode(var/string, var/separator) var/lasti = 1 var/list/L = new/list() - for(i=1, i<=lentext(string)+1, i++) + for(i=1, i<=length(string)+1, i++) if(copytext(string, i, i+1) == separator) // We found a separator L.Add(copytext(string, lasti, i)) lasti = i+1 - L.Add(copytext(string, lasti, lentext(string)+1)) // Adds the last segment + L.Add(copytext(string, lasti, length(string)+1)) // Adds the last segment return L @@ -186,7 +186,7 @@ proc/n_reverse(var/string) if(istext(string)) var/newstring = "" var/i - for(i=lentext(string), i>0, i--) + for(i=length(string), i>0, i--) if(i>=1000) break newstring = newstring + copytext(string, i, i+1) @@ -250,9 +250,9 @@ proc/n_inrange(var/num, var/min=-1, var/max=1) /proc/string_replacetext(var/haystack,var/a,var/b) if(istext(haystack)&&istext(a)&&istext(b)) var/i = 1 - var/lenh=lentext(haystack) - var/lena=lentext(a) - //var/lenb=lentext(b) + var/lenh=length(haystack) + var/lena=length(a) + //var/lenb=length(b) var/count = 0 var/list/dat = list() while (i < lenh) diff --git a/code/modules/scripting/Options.dm b/code/modules/scripting/Options.dm index 22774455dc..c8ca1d5830 100644 --- a/code/modules/scripting/Options.dm +++ b/code/modules/scripting/Options.dm @@ -31,8 +31,8 @@ n_scriptOptions IsValidID(id) //returns true if all the characters in the string are okay to be in an identifier name if(!CanStartID(id)) //don't need to grab first char in id, since text2ascii does it automatically return 0 - if(lentext(id)==1) return 1 - for(var/i=2 to lentext(id)) + if(length(id)==1) return 1 + for(var/i=2 to length(id)) if(!IsValidIDChar(copytext(id, i, i+1))) return 0 return 1 diff --git a/code/modules/scripting/Scanner/Scanner.dm b/code/modules/scripting/Scanner/Scanner.dm index 35f21b39fd..0162119760 100644 --- a/code/modules/scripting/Scanner/Scanner.dm +++ b/code/modules/scripting/Scanner/Scanner.dm @@ -115,7 +115,7 @@ Scan() //Creates a list of tokens from source code var/list/tokens=new - for(, src.codepos<=lentext(code), src.codepos++) + for(, src.codepos<=length(code), src.codepos++) var/char=copytext(code, codepos, codepos+1) if(char=="\n") @@ -155,7 +155,7 @@ ReadString(start) var buf - for(, codepos <= lentext(code), codepos++)//codepos to lentext(code)) + for(, codepos <= length(code), codepos++)//codepos to length(code)) var/char=copytext(code, codepos, codepos+1) switch(char) if("\\") //Backslash (\) encountered in string @@ -192,7 +192,7 @@ var char=copytext(code, codepos, codepos+1) buf - while(!delim.Find(char) && codepos<=lentext(code)) + while(!delim.Find(char) && codepos<=length(code)) buf+=char char=copytext(code, ++codepos, codepos+1) codepos-- //allow main Scan() proc to read the delimiter @@ -212,7 +212,7 @@ while(options.symbols.Find(buf+char)) buf+=char - if(++codepos>lentext(code)) break + if(++codepos>length(code)) break char=copytext(code, codepos, codepos+1) codepos-- //allow main Scan() proc to read the next character @@ -260,7 +260,7 @@ comm = 2 // starts a multi-line comment while(comm) - if(++codepos>lentext(code)) break + if(++codepos>length(code)) break if(expectedend) // ending statement expected... char = copytext(code, codepos, codepos+1) diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index 64de0aeef4..02003dd950 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -102,7 +102,7 @@ affected.open = 1 affected.createwound(CUT, 1) - affected.clamp() + affected.organ_clamp() spread_germs_to_organ(affected, user) /datum/surgery_step/generic/cut_with_laser/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -148,7 +148,7 @@ affected.status |= ORGAN_BLEEDING affected.createwound(CUT, 1) - affected.clamp() + affected.organ_clamp() affected.open = 2 /datum/surgery_step/generic/incision_manager/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -188,7 +188,7 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user] clamps bleeders in [target]'s [affected.name] with \the [tool].", \ "You clamp bleeders in [target]'s [affected.name] with \the [tool].") - affected.clamp() + affected.organ_clamp() spread_germs_to_organ(affected, user) /datum/surgery_step/generic/clamp_bleeders/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) diff --git a/code/modules/virus2/admin.dm b/code/modules/virus2/admin.dm index e2821db1a9..30156102a8 100644 --- a/code/modules/virus2/admin.dm +++ b/code/modules/virus2/admin.dm @@ -86,8 +86,8 @@ Infectable Species:
"} var/f = 1 - for(var/k in all_species) - var/datum/species/S = all_species[k] + for(var/k in GLOB.all_species) + var/datum/species/S = GLOB.all_species[k] if(S.get_virus_immune()) continue if(!f) H += " | " diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm index 89d470b0d1..2769c97a84 100644 --- a/code/modules/virus2/disease2.dm +++ b/code/modules/virus2/disease2.dm @@ -42,14 +42,14 @@ if(severity >= 2 && prob(33)) resistance += 10 - if(all_species.len) + if(GLOB.all_species.len) affected_species = get_infectable_species() /proc/get_infectable_species() var/list/meat = list() var/list/res = list() - for (var/specie in all_species) - var/datum/species/S = all_species[specie] + for (var/specie in GLOB.all_species) + var/datum/species/S = GLOB.all_species[specie] if(!S.get_virus_immune()) meat += S if(meat.len) @@ -158,7 +158,7 @@ if (prob(5) && prob(100-resistance)) // The more resistant the disease,the lower the chance of randomly developing the antibodies antigen = list(pick(ALL_ANTIGENS)) antigen |= pick(ALL_ANTIGENS) - if (prob(5) && all_species.len) + if (prob(5) && GLOB.all_species.len) affected_species = get_infectable_species() if (prob(10)) resistance += rand(1,9) diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 3183aaef8d..413c3511cd 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -638,14 +638,16 @@ I.decontaminate() I.gurgle_contaminate(target.contents, target.contamination_flavor, target.contamination_color) items_preserved -= content + /* Disabling this part due to redundancy. Entered() on target belly will make the sound anyway. if(!silent && target.vore_sound && !recent_sound) var/soundfile - if(!fancy_vore) + if(!target.fancy_vore) soundfile = classic_vore_sounds[target.vore_sound] else soundfile = fancy_vore_sounds[target.vore_sound] if(soundfile) playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/digestion_noises) + */ owner.updateVRPanel() for(var/mob/living/M in contents) M.updateVRPanel() diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm index 713baa1c99..881e71f500 100644 --- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm @@ -1905,15 +1905,15 @@ Departamental Swimsuits, for general use //Bacon12366:Elly Brown /obj/item/clothing/accessory/sweater/fluff/star name = "Star Sweater" - desc = "It's a white long sweater with a big yellow star at the chest. It seems like it's made of a soft material." - + desc = "It's a black long sweater with a big blue star at the chest area. It was made to show person's left shoulder." icon = 'icons/vore/custom_clothes_vr.dmi' icon_state = "star_sweater" + icon_override = 'icons/vore/custom_clothes_vr.dmi' item_state = "star_sweater" slot_flags = SLOT_OCLOTHING | SLOT_TIE body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS w_class = ITEMSIZE_NORMAL - slot = ACCESSORY_SLOT_OVER \ No newline at end of file + slot = ACCESSORY_SLOT_OVER diff --git a/code/modules/xenoarcheaology/artifacts/replicator.dm b/code/modules/xenoarcheaology/artifacts/replicator.dm index af78f320e5..3b65436177 100644 --- a/code/modules/xenoarcheaology/artifacts/replicator.dm +++ b/code/modules/xenoarcheaology/artifacts/replicator.dm @@ -92,9 +92,9 @@ var/spawn_type = pop(spawning_types) var/obj/spawned_obj = new spawn_type(src.loc) if(source_material) - if(lentext(source_material.name) < MAX_MESSAGE_LEN) + if(length(source_material.name) < MAX_MESSAGE_LEN) spawned_obj.name = "[source_material] " + spawned_obj.name - if(lentext(source_material.desc) < MAX_MESSAGE_LEN * 2) + if(length(source_material.desc) < MAX_MESSAGE_LEN * 2) if(spawned_obj.desc) spawned_obj.desc += " It is made of [source_material]." else diff --git a/code/modules/xenoarcheaology/finds/talking.dm b/code/modules/xenoarcheaology/finds/talking.dm index 01af7f7a0e..33206366f4 100644 --- a/code/modules/xenoarcheaology/finds/talking.dm +++ b/code/modules/xenoarcheaology/finds/talking.dm @@ -34,7 +34,7 @@ else if(findtext(msg," ")==0) return else - /*var/l = lentext(msg) + /*var/l = length(msg) if(findtext(msg," ",l,l+1)==0) msg+=" "*/ seperate = splittext(msg, " ") @@ -79,12 +79,12 @@ text = "[pick(heard_words)]" else text = pick(splittext(word, " ")) - if(lentext(text)==1) + if(length(text)==1) text=uppertext(text) else var/cap = copytext(text,1,2) cap = uppertext(cap) - cap += copytext(text,2,lentext(text)+1) + cap += copytext(text,2,length(text)+1) text=cap var/q = 0 msg+=text diff --git a/html/changelogs/PrismaticGynoid - GraffitiSelection.yml b/html/changelogs/PrismaticGynoid - GraffitiSelection.yml new file mode 100644 index 0000000000..52394316af --- /dev/null +++ b/html/changelogs/PrismaticGynoid - GraffitiSelection.yml @@ -0,0 +1,6 @@ +author: PrismaticGynoid + +delete-after: True + +changes: + - tweak: "You can now choose what type of graffiti or rune to draw when using crayons/markers." diff --git a/html/changelogs/TheFurryFeline - Bulbs_Recycling.yml b/html/changelogs/TheFurryFeline - Bulbs_Recycling.yml new file mode 100644 index 0000000000..3e887d8d87 --- /dev/null +++ b/html/changelogs/TheFurryFeline - Bulbs_Recycling.yml @@ -0,0 +1,36 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: TheFurryFeline + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - tweak: "Changes light replacers to allow you to automatically transfer used bulbs into the item and get a new one every 4 bulbs replaced. Additionally, this allows you to both use the replacer on a box of bulbs to get the bulbs added as well as clicking the item with a box of bulbs to put them inside it." \ No newline at end of file diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi index cbf20402e6..62f8883880 100644 Binary files a/icons/mob/human.dmi and b/icons/mob/human.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 614f8e2076..d7172c72d3 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/human_face_m.dmi b/icons/mob/human_face_m.dmi index 9eff944078..d817c2df4e 100644 Binary files a/icons/mob/human_face_m.dmi and b/icons/mob/human_face_m.dmi differ diff --git a/icons/mob/human_races/markings.dmi b/icons/mob/human_races/markings.dmi index d89377dbf1..6841c92518 100644 Binary files a/icons/mob/human_races/markings.dmi and b/icons/mob/human_races/markings.dmi differ diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index fbdfbf882d..f265047239 100644 Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi index 997ad78f1b..b65057ef8b 100644 Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index fa1989ec5f..aad4cac13a 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index de5b30506c..d6a0376a9e 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/vore/custom_clothes_vr.dmi b/icons/vore/custom_clothes_vr.dmi index c3619ebf96..494465b8ad 100644 Binary files a/icons/vore/custom_clothes_vr.dmi and b/icons/vore/custom_clothes_vr.dmi differ diff --git a/maps/southern_cross/job/outfits.dm b/maps/southern_cross/job/outfits.dm index 159701decd..6310c29afd 100644 --- a/maps/southern_cross/job/outfits.dm +++ b/maps/southern_cross/job/outfits.dm @@ -14,7 +14,7 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go id_slot = slot_wear_id pda_slot = slot_l_store pda_type = /obj/item/device/pda/explorer //VORESTation Edit - Better Brown - id_type = /obj/item/weapon/card/id/explorer/explorer //VOREStation Edit + id_type = /obj/item/weapon/card/id/explorer //VOREStation Edit id_pda_assignment = "Explorer" flags = OUTFIT_HAS_BACKPACK|OUTFIT_COMPREHENSIVE_SURVIVAL backpack_contents = list(/obj/item/clothing/accessory/permit/gun/planetside = 1) @@ -47,7 +47,6 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go id_slot = slot_wear_id pda_slot = slot_belt pda_type = /obj/item/device/pda //VOREStation Edit - Civilian - id_type = /obj/item/weapon/card/id/explorer/pilot //VOREStation Edit id_pda_assignment = "Pilot" flags = OUTFIT_HAS_BACKPACK|OUTFIT_COMPREHENSIVE_SURVIVAL @@ -61,6 +60,5 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go belt = /obj/item/weapon/storage/belt/medical/emt pda_slot = slot_l_store pda_type = /obj/item/device/pda/sar //VOREStation Add - id_type = /obj/item/weapon/card/id/medical/sar id_pda_assignment = "Field Medic" //VOREStation Edit flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL diff --git a/maps/southern_cross/job/outfits_vr.dm b/maps/southern_cross/job/outfits_vr.dm index 0a0301212f..e2976fb10c 100644 --- a/maps/southern_cross/job/outfits_vr.dm +++ b/maps/southern_cross/job/outfits_vr.dm @@ -6,7 +6,7 @@ id_slot = slot_wear_id pda_slot = slot_l_store pda_type = /obj/item/device/pda/pathfinder - id_type = /obj/item/weapon/card/id/explorer/head/pathfinder + id_type = /obj/item/weapon/card/id/explorer/head id_pda_assignment = "Pathfinder" flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL backpack_contents = list(/obj/item/clothing/accessory/permit/gun/planetside = 1) diff --git a/maps/southern_cross/southern_cross_jobs.dm b/maps/southern_cross/southern_cross_jobs.dm index 12166d1478..17c4513443 100644 --- a/maps/southern_cross/southern_cross_jobs.dm +++ b/maps/southern_cross/southern_cross_jobs.dm @@ -17,23 +17,6 @@ var/const/access_explorer = 43 desc = "Explorer" region = ACCESS_REGION_GENERAL -//SC IDs - -/obj/item/weapon/card/id/medical/sar - assignment = "Search and Rescue" - rank = "Search and Rescue" - job_access_type = /datum/job/sar - -/obj/item/weapon/card/id/civilian/pilot - assignment = "Pilot" - rank = "Pilot" - job_access_type = /datum/job/pilot - -/obj/item/weapon/card/id/civilian/explorer - assignment = "Explorer" - rank = "Explorer" - job_access_type = /datum/job/explorer - //SC Jobs /* @@ -51,7 +34,6 @@ var/const/access_explorer = 43 spawn_positions = 1 supervisors = "company officials and Corporate Regulations" selection_color = "#1D1D4F" - idtype = /obj/item/weapon/card/id/gold req_admin_notify = 1 access = list() //See get_access() minimal_access = list() //See get_access() @@ -78,7 +60,6 @@ var/const/access_explorer = 43 spawn_positions = 2 supervisors = "the head of personnel" selection_color = "#515151" - idtype = /obj/item/weapon/card/id/civilian/pilot economic_modifier = 4 access = list(access_pilot, access_cargo, access_mining, access_mining_station) minimal_access = list(access_pilot, access_cargo, access_mining, access_mining_station) @@ -94,7 +75,6 @@ var/const/access_explorer = 43 spawn_positions = 4 supervisors = "the explorer leader and the head of personnel" selection_color = "#515151" - idtype = /obj/item/weapon/card/id/civilian/explorer economic_modifier = 4 access = list(access_explorer) minimal_access = list(access_explorer) @@ -115,7 +95,6 @@ var/const/access_explorer = 43 spawn_positions = 2 supervisors = "the chief medical officer" selection_color = "#515151" - idtype = /obj/item/weapon/card/id/medical economic_modifier = 4 access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_eva, access_maint_tunnels, access_external_airlocks, access_psychiatrist, access_explorer) minimal_access = list(access_medical, access_medical_equip, access_morgue, access_explorer) diff --git a/maps/southern_cross/southern_cross_jobs_vr.dm b/maps/southern_cross/southern_cross_jobs_vr.dm index 7835667529..4a1b8ee28c 100644 --- a/maps/southern_cross/southern_cross_jobs_vr.dm +++ b/maps/southern_cross/southern_cross_jobs_vr.dm @@ -9,7 +9,6 @@ var/const/SAR =(1<<14) icon_state = "cyan" primary_color = rgb(47,189,189) secondary_color = rgb(127,223,223) - job_access_type = /datum/job/sar /obj/item/weapon/card/id/explorer name = "identification card" @@ -18,28 +17,13 @@ var/const/SAR =(1<<14) primary_color = rgb(47,189,189) secondary_color = rgb(127,223,223) -/obj/item/weapon/card/id/explorer/pilot - assignment = "Pilot" - rank = "Pilot" - job_access_type = /datum/job/pilot - -/obj/item/weapon/card/id/explorer/explorer - assignment = "Explorer" - rank = "Explorer" - job_access_type = /datum/job/explorer - -/obj/item/weapon/card/id/explorer/head/ +/obj/item/weapon/card/id/explorer/head name = "identification card" desc = "A card which represents discovery of the unknown." icon_state = "cyanGold" primary_color = rgb(47,189,189) secondary_color = rgb(127,223,223) -/obj/item/weapon/card/id/explorer/head/pathfinder - assignment = "Pathfinder" - rank = "Pathfinder" - job_access_type = /datum/job/pathfinder - /datum/job/pathfinder title = "Pathfinder" flag = PATHFINDER @@ -51,7 +35,6 @@ var/const/SAR =(1<<14) spawn_positions = 1 supervisors = "the research director" selection_color = "#d6d05c" - idtype = /obj/item/weapon/card/id/explorer/head/pathfinder economic_modifier = 7 minimal_player_age = 7 @@ -69,7 +52,6 @@ var/const/SAR =(1<<14) spawn_positions = 2 supervisors = "the pathfinder and the head of personnel" selection_color = "#999440" - idtype = /obj/item/weapon/card/id/explorer/pilot economic_modifier = 5 minimal_player_age = 3 access = list(access_pilot) @@ -86,7 +68,6 @@ var/const/SAR =(1<<14) spawn_positions = 2 supervisors = "the pathfinder and the research director" selection_color = "#999440" - idtype = /obj/item/weapon/card/id/explorer/explorer economic_modifier = 6 access = list(access_explorer, access_research) minimal_access = list(access_explorer, access_research) @@ -102,7 +83,6 @@ var/const/SAR =(1<<14) spawn_positions = 2 supervisors = "the pathfinder and the chief medical officer" selection_color = "#999440" - idtype = /obj/item/weapon/card/id/medical/sar economic_modifier = 6 minimal_player_age = 3 access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_eva, access_maint_tunnels, access_external_airlocks, access_pilot) diff --git a/maps/tether/tether-01-surface1.dmm b/maps/tether/tether-01-surface1.dmm index bdafafea0e..851c83cc57 100644 --- a/maps/tether/tether-01-surface1.dmm +++ b/maps/tether/tether-01-surface1.dmm @@ -358,21 +358,25 @@ /turf/simulated/floor/tiled/techmaint, /area/tether/surfacebase/mining_main/airlock) "aaQ" = ( -/obj/structure/grille, -/obj/structure/railing{ +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 5; - icon_state = "intact" +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 }, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - frequency = 1379; - id_tag = "mining_airlock_pump" +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 }, -/turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/mining_main/airlock) +/turf/simulated/floor/tiled, +/area/tether/surfacebase/north_stairs_one) "aaR" = ( /obj/machinery/mineral/unloading_machine, /turf/simulated/floor/tiled/techfloor, @@ -1899,8 +1903,9 @@ }, /obj/machinery/computer/area_atmos/tag{ dir = 4; - scrub_id = "atrium" + scrub_id = "rnd_can_store" }, +/obj/machinery/camera/network/research, /turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora_storage) "ado" = ( @@ -2481,6 +2486,14 @@ name = "Atmospherics Substation" }, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + opacity = 0 + }, /turf/simulated/floor/plating, /area/maintenance/substation/surface_atmos) "aek" = ( @@ -2850,23 +2863,13 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/mining_main/lobby) "aeO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lightgrey/border, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock{ + name = "Secondary Janitorial Closet"; + req_access = list(26) }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_stairs_one) "aeP" = ( @@ -4935,6 +4938,14 @@ req_access = list(24) }, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + opacity = 0 + }, /turf/simulated/floor/plating, /area/engineering/atmos) "aiC" = ( @@ -5330,7 +5341,7 @@ report_danger_level = 0 }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "ajg" = ( /obj/structure/cable/cyan{ d1 = 1; @@ -5341,13 +5352,13 @@ dir = 4 }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "ajh" = ( /obj/machinery/atmospherics/unary/vent_scrubber{ dir = 4 }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "aji" = ( /obj/effect/floor_decal/borderfloor{ dir = 6 @@ -6820,7 +6831,7 @@ "alV" = ( /obj/machinery/door/airlock/engineering{ name = "Mining Substation"; - req_one_access = list(11,24,47) + req_one_access = list(11,24) }, /obj/machinery/door/firedoor/glass, /obj/structure/cable/green{ @@ -7289,7 +7300,7 @@ }, /obj/machinery/door/airlock/engineering{ name = "Mining Substation"; - req_one_access = list(11,24,47) + req_one_access = list(11,24) }, /turf/simulated/floor, /area/maintenance/substation/mining) @@ -8604,10 +8615,16 @@ /turf/simulated/wall, /area/tether/surfacebase/north_stairs_one) "aoO" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock{ - name = "Secondary Janitorial Closet"; - req_access = list(26) +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "intact-supply"; + dir = 5 }, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_stairs_one) @@ -9028,16 +9045,14 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/north_stairs_one) "apx" = ( -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 9 +/obj/structure/reagent_dispensers/watertank, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 }, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_stairs_one) "apy" = ( -/obj/structure/reagent_dispensers/watertank, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_stairs_one) "apz" = ( @@ -9738,6 +9753,9 @@ /obj/structure/table/steel, /obj/item/weapon/storage/box/lights/mixed, /obj/item/weapon/storage/box/lights/mixed, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_stairs_one) "aqH" = ( @@ -22132,6 +22150,13 @@ dir = 1; pixel_y = 28 }, +/obj/machinery/button/remote/blast_door{ + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + pixel_x = 0; + pixel_y = 0; + req_one_access = list(10,24) + }, /turf/simulated/floor/tiled, /area/engineering/atmos) "aKn" = ( @@ -24609,6 +24634,14 @@ /obj/machinery/door/firedoor/glass, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + opacity = 0 + }, /turf/simulated/floor/plating, /area/engineering/atmos/processing) "aOT" = ( @@ -27241,6 +27274,14 @@ /obj/structure/grille, /obj/structure/window/reinforced/full, /obj/structure/window/reinforced, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + opacity = 0 + }, /turf/simulated/floor/plating, /area/engineering/atmos/processing) "aTK" = ( @@ -27251,6 +27292,14 @@ /obj/structure/grille, /obj/structure/window/reinforced/full, /obj/structure/window/reinforced, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + opacity = 0 + }, /turf/simulated/floor/plating, /area/engineering/atmos/processing) "aTL" = ( @@ -27262,6 +27311,14 @@ /obj/structure/grille, /obj/structure/window/reinforced/full, /obj/structure/window/reinforced, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + opacity = 0 + }, /turf/simulated/floor/plating, /area/engineering/atmos/processing) "aTM" = ( @@ -27321,6 +27378,14 @@ req_access = list(24) }, /obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + opacity = 0 + }, /turf/simulated/floor/plating, /area/engineering/atmos) "aTU" = ( @@ -27375,11 +27440,11 @@ /area/crew_quarters/visitor_lodging) "aTW" = ( /turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "aTX" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, /turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "aTY" = ( /obj/machinery/atmospherics/pipe/manifold/visible/black, /turf/simulated/floor/tiled/techmaint, @@ -27643,7 +27708,7 @@ dir = 6 }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "aUw" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 9 @@ -27652,19 +27717,19 @@ dir = 6 }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "aUx" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 9 }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "aUy" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 5 }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "aUz" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 5 @@ -27673,13 +27738,13 @@ dir = 10 }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "aUA" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 10 }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "aUB" = ( /obj/machinery/power/apc/super{ dir = 4; @@ -27691,10 +27756,10 @@ icon_state = "0-2" }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "aUC" = ( /turf/simulated/wall/r_wall, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "aUD" = ( /obj/machinery/atmospherics/pipe/simple/visible/purple, /obj/structure/cable/cyan{ @@ -27703,7 +27768,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plating, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "aUE" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -27827,7 +27892,7 @@ }, /obj/machinery/atmospherics/pipe/simple/heat_exchanging, /turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "aUS" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow, /obj/machinery/light/small{ @@ -28012,6 +28077,14 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 1; + icon_state = "pdoor0"; + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + opacity = 0 + }, /turf/simulated/floor/plating, /area/engineering/atmos/processing) "aVl" = ( @@ -28265,7 +28338,7 @@ id_tag = "atmos_intake" }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "aVF" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/visible/purple{ @@ -28276,6 +28349,14 @@ /obj/structure/window/reinforced{ dir = 8 }, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 1; + icon_state = "pdoor0"; + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + opacity = 0 + }, /turf/simulated/floor/plating, /area/engineering/atmos/processing) "aVG" = ( @@ -28450,7 +28531,7 @@ use_power = 1 }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "aVV" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ @@ -28461,6 +28542,14 @@ /obj/structure/window/reinforced{ dir = 8 }, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 1; + icon_state = "pdoor0"; + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + opacity = 0 + }, /turf/simulated/floor/plating, /area/engineering/atmos/processing) "aVW" = ( @@ -28482,6 +28571,14 @@ name = "Atmospherics"; req_access = list(24) }, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 1; + icon_state = "pdoor0"; + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + opacity = 0 + }, /turf/simulated/floor/plating, /area/engineering/atmos/processing) "aVZ" = ( @@ -28811,7 +28908,7 @@ dir = 8 }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "aWP" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -28954,7 +29051,7 @@ dir = 4 }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/engineering/atmos/intake) +/area/engineering/atmos_intake) "aXe" = ( /obj/structure/table/bench/steel, /turf/simulated/floor/plating, @@ -31880,6 +31977,15 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/mining_main/surfacecargo) +"bcP" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/machinery/alarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/simulated/floor/plating, +/area/engineering/atmos/processing) "cGJ" = ( /turf/simulated/floor/plating, /area/maintenance/lower/mining_eva) @@ -41111,7 +41217,7 @@ aRU aSC aTj aSC -aSC +bcP aSC aUS aVm @@ -42477,10 +42583,10 @@ bbI ahs ahZ aiV +aaQ aeO aoO -apx -aoM +apy aqG ahX aah @@ -42598,7 +42704,7 @@ aao aav aav aav -aaQ +aav aao abo abn @@ -42621,7 +42727,7 @@ ahX anT aeP ahX -apy +apx aqc aqH ahX diff --git a/maps/tether/tether-02-surface2.dmm b/maps/tether/tether-02-surface2.dmm index b032916c16..284bb9d59a 100644 --- a/maps/tether/tether-02-surface2.dmm +++ b/maps/tether/tether-02-surface2.dmm @@ -126,6 +126,12 @@ "aat" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/airlock/maintenance/common, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/lower/public_garden_maintenence/upper) "aau" = ( @@ -841,13 +847,20 @@ /area/maintenance/lower/north) "abI" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/random/junk, /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/north) "abJ" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/random/junk, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/north) "abK" = ( @@ -1009,27 +1022,36 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/lower/north) "acf" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/effect/floor_decal/borderfloor{ + dir = 1; + pixel_y = 0 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/north) +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_two_hall) "acg" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/light{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/north) +/obj/effect/floor_decal/borderfloor{ + dir = 1; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_two_hall) "ach" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -4001,19 +4023,19 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_two_hall) "aiz" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/machinery/light{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/floor_decal/borderfloor{ +/obj/machinery/alarm{ dir = 1; - pixel_y = 0 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 1 + pixel_y = -25 }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_two_hall) "aiA" = ( @@ -4021,6 +4043,7 @@ icon_state = "warning"; dir = 1 }, +/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_staires_two) "aiB" = ( @@ -4031,29 +4054,18 @@ /turf/simulated/floor/plating, /area/maintenance/lower/rnd) "aiC" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "warning"; - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/north_staires_two) +/obj/item/device/radio/beacon, +/turf/simulated/floor/tiled/dark, +/area/teleporter) "aiD" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "warning"; dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_staires_two) "aiE" = ( @@ -4796,11 +4808,11 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/public_garden_two) "akg" = ( -/obj/machinery/vending/hydronutrients, /obj/machinery/camera/network/security{ icon_state = "camera"; dir = 5 }, +/obj/machinery/vending/hydronutrients/brig, /turf/simulated/floor/tiled/dark, /area/tether/surfacebase/security/brig) "akh" = ( @@ -5562,26 +5574,11 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/north_staires_two) "aly" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ +/obj/effect/floor_decal/industrial/warning{ + icon_state = "warning"; dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lightgrey/border, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 9 - }, -/obj/effect/floor_decal/corner/lightgrey/bordercorner2{ - dir = 9 - }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_staires_two) "alz" = ( @@ -5659,27 +5656,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lightgrey/border, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_two_hall) -"alJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5690,8 +5666,21 @@ }, /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/lightgrey/border, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_two_hall) +"alJ" = ( +/obj/machinery/door/airlock/engineering{ + name = "Command Substation"; + req_one_access = list(10,19) + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/command) "alK" = ( /obj/structure/cable{ icon_state = "1-2" @@ -5721,15 +5710,14 @@ /turf/simulated/floor/tiled/techmaint, /area/maintenance/lower/bar) "alM" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 +/obj/effect/floor_decal/industrial/warning{ + icon_state = "warning"; + dir = 1 }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lightgrey/border, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_staires_two) "alN" = ( @@ -5781,12 +5769,6 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/north_staires_two) "alP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/machinery/alarm{ dir = 1; pixel_y = -25 @@ -5799,6 +5781,11 @@ }, /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/lightgrey/border, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_staires_two) "alQ" = ( @@ -7068,8 +7055,8 @@ /obj/machinery/button/remote/blast_door{ id = "xenobiolockdown"; name = "Xenobiology Lockdown Control"; - pixel_x = -35; - pixel_y = 0; + pixel_x = -40; + pixel_y = -18; req_one_access = list(47,55) }, /turf/simulated/floor/tiled, @@ -7915,6 +7902,14 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "bridge blast"; + name = "Bridge Blast Doors"; + opacity = 0 + }, /turf/simulated/floor, /area/bridge_hallway) "apR" = ( @@ -8543,13 +8538,30 @@ /turf/simulated/floor/plating, /area/engineering/lower/lobby) "are" = ( +/obj/machinery/door/firedoor/glass, +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/engineering/lower/lobby) +"arf" = ( /obj/machinery/door/airlock/glass{ name = "Atmospherics" }, /obj/machinery/door/firedoor/glass, /turf/simulated/floor/tiled/steel_grid, /area/engineering/lower/lobby) -"arf" = ( +"arg" = ( +/turf/simulated/wall, +/area/engineering/lower/breakroom) +"arh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/glass{ @@ -8559,15 +8571,6 @@ /obj/machinery/door/firedoor/glass, /turf/simulated/floor/tiled/steel_grid, /area/engineering/lower/lobby) -"arg" = ( -/turf/simulated/wall, -/area/engineering/lower/breakroom) -"arh" = ( -/obj/machinery/door/firedoor/glass, -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/turf/simulated/floor/plating, -/area/engineering/lower/breakroom) "ari" = ( /obj/structure/grille, /obj/structure/railing{ @@ -8603,8 +8606,18 @@ /turf/simulated/wall, /area/tether/surfacebase/east_stairs_two) "arm" = ( -/turf/simulated/floor/tiled/dark, -/area/teleporter) +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "intact-supply"; + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/north_staires_two) "arn" = ( /obj/machinery/teleport/hub{ dir = 2 @@ -9849,26 +9862,26 @@ /area/engineering/lower/lobby) "atm" = ( /obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + d1 = 1; + d2 = 2; + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/machinery/door/airlock/glass_atmos{ name = "Atmospherics"; req_access = list(24) }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/firedoor/glass, -/turf/simulated/floor/wood, -/area/engineering/lower/breakroom) +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + opacity = 0 + }, +/turf/simulated/floor/tiled, +/area/engineering/lower/lobby) "atn" = ( /obj/structure/cable/cyan{ d1 = 4; @@ -9917,6 +9930,13 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/button/remote/blast_door{ + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + pixel_x = 0; + pixel_y = 0; + req_one_access = list(10,24) + }, /turf/simulated/floor/carpet, /area/engineering/lower/breakroom) "atr" = ( @@ -10821,20 +10841,6 @@ /turf/simulated/wall/r_wall, /area/engineering/lower/lobby) "avd" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/machinery/door/airlock/glass_atmos{ - name = "Atmospherics"; - req_access = list(24) - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled, -/area/engineering/lower/lobby) -"ave" = ( /obj/machinery/atmospherics/pipe/simple/hidden/red, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -10844,8 +10850,46 @@ }, /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + opacity = 0 + }, /turf/simulated/floor/tiled, /area/engineering/lower/lobby) +"ave" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1; + icon_state = "borderfloor"; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/yellow/border{ + icon_state = "bordercolor"; + dir = 1 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/effect/floor_decal/corner/yellow/bordercorner2{ + icon_state = "bordercolorcorner2"; + dir = 1 + }, +/obj/structure/table/standard, +/obj/item/taperoll/atmos, +/obj/random/tech_supply, +/obj/random/tool, +/obj/machinery/button/remote/blast_door{ + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + pixel_x = 0; + pixel_y = 0; + req_one_access = list(10,24) + }, +/turf/simulated/floor/tiled, +/area/engineering/atmos/monitoring) "avf" = ( /turf/simulated/wall/r_wall, /area/engineering/lower/breakroom) @@ -11345,12 +11389,12 @@ /obj/effect/floor_decal/borderfloor{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, /obj/machinery/camera/network/tether{ dir = 9 }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, /turf/simulated/floor/tiled/techmaint, /area/tether/surfacebase/east_stairs_two) "avV" = ( @@ -11790,26 +11834,39 @@ /turf/simulated/floor/plating, /area/maintenance/engineering/pumpstation) "awJ" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 +/obj/machinery/door/airlock/engineering{ + name = "Command Substation"; + req_one_access = list(10,19) }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/east_stairs_two) +/turf/simulated/floor/plating, +/area/maintenance/substation/command) "awK" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/effect/floor_decal/borderfloor/corner2{ dir = 9 }, -/turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/east_stairs_two) +/obj/effect/floor_decal/corner/lightgrey/bordercorner2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/north_staires_two) "awL" = ( /obj/effect/floor_decal/corner_techfloor_grid{ dir = 9 @@ -14056,16 +14113,11 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint2) "aAe" = ( -/obj/machinery/door/airlock/maintenance/engi{ - name = "Atmospherics"; - req_access = list(24) - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/firedoor/glass, +/obj/structure/grille, +/obj/structure/window/reinforced/full, /turf/simulated/floor/plating, -/area/engineering/atmos) +/area/engineering/lower/breakroom) "aAf" = ( /obj/effect/floor_decal/borderfloor{ dir = 10 @@ -14661,15 +14713,27 @@ /turf/simulated/open, /area/engineering/atmos) "aBg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/maintenance/engi{ +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/glass_atmos{ name = "Atmospherics"; req_access = list(24) }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/atmos) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/wood, +/area/engineering/lower/breakroom) "aBh" = ( /obj/structure/railing{ dir = 8 @@ -14997,28 +15061,25 @@ /turf/simulated/floor/tiled/monotile, /area/rnd/breakroom) "aBG" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1; - icon_state = "borderfloor"; - pixel_y = 0 - }, -/obj/effect/floor_decal/corner/yellow/border{ - icon_state = "bordercolor"; +/obj/effect/floor_decal/borderfloor/shifted{ + icon_state = "borderfloor_shifted"; dir = 1 }, -/obj/effect/floor_decal/borderfloor/corner2{ +/obj/effect/floor_decal/corner/lightorange/border/shifted{ + icon_state = "bordercolor_shifted"; dir = 1 }, -/obj/effect/floor_decal/corner/yellow/bordercorner2{ - icon_state = "bordercolorcorner2"; - dir = 1 +/obj/effect/floor_decal/corner/lightorange{ + icon_state = "corner_white"; + dir = 5 }, -/obj/structure/table/standard, -/obj/item/taperoll/atmos, -/obj/random/tech_supply, -/obj/random/tool, -/turf/simulated/floor/tiled, -/area/engineering/atmos/monitoring) +/obj/structure/table/steel, +/obj/machinery/alarm{ + pixel_y = 22 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/tether/surfacebase/security/brig) "aBH" = ( /obj/structure/cable/cyan{ d1 = 1; @@ -15679,18 +15740,23 @@ /area/maintenance/asmaint2) "aCY" = ( /obj/machinery/door/airlock/maintenance/engi{ - name = "Drone Bay"; + name = "Atmospherics"; req_access = list(24) }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/disposalpipe/segment{ dir = 4 }, /obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/drone_fabrication) +/obj/machinery/door/blast/regular{ + density = 0; + dir = 1; + icon_state = "pdoor0"; + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/engineering/atmos) "aCZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -16584,12 +16650,21 @@ /turf/simulated/floor/tiled/steel_dirty, /area/maintenance/asmaint2) "aFa" = ( -/obj/machinery/door/firedoor/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/maintenance/engi{ - name = "Atmospherics Balcony"; + name = "Atmospherics"; req_access = list(24) }, /obj/structure/catwalk, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + opacity = 0 + }, /turf/simulated/floor/plating, /area/engineering/atmos) "aFb" = ( @@ -18669,9 +18744,13 @@ name = "\improper Telecomms Lobby" }) "aJu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1; + icon_state = "map" }, +/turf/simulated/floor/tiled, +/area/tcommsat/computer) +"aJv" = ( /obj/machinery/camera/network/tcomms{ dir = 4 }, @@ -18679,19 +18758,21 @@ dir = 8; pixel_x = -24 }, -/turf/simulated/floor/tiled, -/area/tcommsat/computer) -"aJv" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, /turf/simulated/floor/tiled, /area/tcommsat/computer) "aJw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/tcommsat/computer) "aJx" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/atmospherics/binary/passive_gate/on{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/tcommsat/computer) "aJy" = ( @@ -19103,17 +19184,9 @@ /turf/simulated/floor/tiled, /area/tcommsat/computer) "aKc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/hidden{ dir = 9; - pixel_y = 0 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + icon_state = "intact" }, /turf/simulated/floor/tiled, /area/tcommsat/computer) @@ -19124,11 +19197,28 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled, +/area/tcommsat/computer) +"aKe" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/tiled, /area/tcommsat/computer) -"aKe" = ( +"aKf" = ( /obj/structure/cable/green{ d1 = 2; d2 = 8; @@ -19140,18 +19230,11 @@ icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; dir = 4 }, -/turf/simulated/floor/tiled, -/area/tcommsat/computer) -"aKf" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, /turf/simulated/floor/tiled, /area/tcommsat/computer) @@ -19482,11 +19565,14 @@ /area/tcommsat/computer) "aKR" = ( /obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/turf/simulated/floor/tiled/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled, /area/tcommsat/computer) "aKS" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ @@ -25173,6 +25259,30 @@ /obj/structure/bed/padded, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/solitary) +"aTK" = ( +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/maintenance/command{ + req_access = list(19) + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 1; + icon_state = "pdoor0"; + id = "bridge blast"; + name = "Bridge Blast Doors"; + opacity = 0 + }, +/turf/simulated/floor, +/area/bridge_hallway) "aTL" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -25976,10 +26086,11 @@ icon_state = "corner_white"; dir = 5 }, -/obj/structure/table/steel, /obj/machinery/alarm{ pixel_y = 22 }, +/obj/structure/table/steel, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled/dark, /area/tether/surfacebase/security/brig) "aUW" = ( @@ -26725,7 +26836,7 @@ /turf/simulated/floor/tiled/dark, /area/tether/surfacebase/security/interrogation) "aVQ" = ( -/obj/machinery/seed_storage/garden, +/obj/machinery/seed_storage/brig, /turf/simulated/floor/tiled/dark, /area/tether/surfacebase/security/brig) "aVR" = ( @@ -26755,24 +26866,40 @@ /turf/simulated/floor/plating, /area/tether/surfacebase/security/brig) "aVT" = ( -/obj/effect/floor_decal/borderfloor/shifted{ - icon_state = "borderfloor_shifted"; - dir = 1 +/obj/effect/floor_decal/borderfloor{ + dir = 8 }, -/obj/effect/floor_decal/corner/lightorange/border/shifted{ - icon_state = "bordercolor_shifted"; - dir = 1 +/obj/effect/floor_decal/corner/red/border{ + dir = 8 }, -/obj/effect/floor_decal/corner/lightorange{ - icon_state = "corner_white"; - dir = 5 +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 10; + icon_state = "borderfloorcorner2"; + pixel_x = 0 }, -/obj/machinery/alarm{ - pixel_y = 22 +/obj/effect/floor_decal/corner/red/bordercorner2{ + dir = 10 }, -/obj/structure/table/steel, -/turf/simulated/floor/tiled/dark, -/area/tether/surfacebase/security/brig) +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/button/remote/blast_door{ + dir = 8; + id = "Surf Cell 1"; + name = "Cell A Door"; + pixel_x = -28; + req_access = list(1,2) + }, +/obj/machinery/atmospherics/pipe/simple/hidden/green, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/security/lowerhallway) "aVU" = ( /obj/structure/cable/green{ d1 = 4; @@ -26789,6 +26916,28 @@ }, /turf/simulated/floor/tiled/dark, /area/tether/surfacebase/security/brig) +"aVV" = ( +/obj/machinery/door/airlock/maintenance/engi{ + name = "Drone Bay"; + req_access = list(24) + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 1; + icon_state = "pdoor0"; + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + opacity = 0 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/drone_fabrication) "aVW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -26958,45 +27107,6 @@ /obj/effect/floor_decal/corner/red/bordercorner2{ dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/button/remote/blast_door{ - dir = 8; - id = "Surf Cell 1"; - name = "Cell A Door"; - pixel_x = -28; - req_access = list(1,2) - }, -/obj/machinery/atmospherics/pipe/simple/hidden/green, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/security/lowerhallway) -"aWk" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 10; - icon_state = "borderfloorcorner2"; - pixel_x = 0 - }, -/obj/effect/floor_decal/corner/red/bordercorner2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -27020,6 +27130,40 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/lowerhallway) +"aWk" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 10; + icon_state = "borderfloorcorner2"; + pixel_x = 0 + }, +/obj/effect/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/button/remote/blast_door{ + dir = 8; + id = "Surf Cell 3"; + name = "Cell C Door"; + pixel_x = -28; + req_access = list(1,2) + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/security/lowerhallway) "aWl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -27086,41 +27230,14 @@ /turf/simulated/floor/tiled/dark, /area/tether/surfacebase/security/brig) "aWr" = ( -/obj/effect/floor_decal/borderfloor{ +/obj/machinery/atmospherics/pipe/cap/visible/scrubbers{ dir = 8 }, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 10; - icon_state = "borderfloorcorner2"; - pixel_x = 0 - }, -/obj/effect/floor_decal/corner/red/bordercorner2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/button/remote/blast_door{ - dir = 8; - id = "Surf Cell 3"; - name = "Cell C Door"; - pixel_x = -28; - req_access = list(1,2) - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/security/lowerhallway) +/turf/simulated/floor/plating, +/area/maintenance/lower/public_garden_maintenence/upper) "aWs" = ( /obj/machinery/door/firedoor/glass, /obj/structure/cable/green{ @@ -27447,6 +27564,23 @@ }, /turf/simulated/floor/reinforced, /area/rnd/outpost/xenobiology/outpost_slimepens) +"aWN" = ( +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/maintenance/engi{ + name = "Atmospherics Balcony"; + req_access = list(24) + }, +/obj/structure/catwalk, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 1; + icon_state = "pdoor0"; + id = "atmoslockdown"; + name = "Atmospherics Lockdown"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/engineering/atmos) "aWO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/green{ icon_state = "intact"; @@ -27471,6 +27605,12 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/lowerhallway) +"aWP" = ( +/obj/machinery/atmospherics/pipe/cap/visible/supply{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/lower/public_garden_maintenence/upper) "aWQ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -27549,6 +27689,17 @@ }, /turf/simulated/floor/wood, /area/bridge/meeting_room) +"aXa" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/tcommsat/computer) "aXb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -27878,6 +28029,12 @@ }, /turf/simulated/floor/tiled/dark, /area/teleporter) +"aXI" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/tcommsat/computer) "aXJ" = ( /obj/structure/closet/firecloset, /obj/machinery/light/small{ @@ -28038,17 +28195,6 @@ }, /turf/simulated/floor/wood, /area/bridge/meeting_room) -"aYg" = ( -/obj/machinery/door/airlock/engineering{ - name = "Command Substation" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/command) "aYh" = ( /obj/structure/table/woodentable, /obj/machinery/chemical_dispenser/bar_soft/full, @@ -28490,22 +28636,6 @@ can_open = 0 }, /area/maintenance/lower/bar) -"aZb" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/maintenance/command{ - req_access = list(19) - }, -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor, -/area/bridge_hallway) "aZc" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -28514,18 +28644,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/lino, /area/chapel/office) -"aZd" = ( -/obj/machinery/door/airlock/engineering{ - name = "Command Substation" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, -/turf/simulated/floor/plating, -/area/maintenance/substation/command) "aZe" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -36519,7 +36637,7 @@ akn akn akn akn -akn +aWr akn akn akn @@ -36661,7 +36779,7 @@ akn akn akn akn -akn +aWP akn akn akn @@ -38363,13 +38481,13 @@ aUg aTz aVq aUN -aUV +aBG aVm aUN -aUV +aBG aVU aUN -aVT +aUV aVm aUN acW @@ -38563,7 +38681,7 @@ auk aAT aAT aAT -aCY +aVV aAT aAT aAT @@ -38700,7 +38818,7 @@ atJ aBF auv azl -aAe +aCY aAT aAT aBW @@ -38931,13 +39049,13 @@ aTX aVi aUP aTA -aWj +aVT aWB aUG -aWk +aWj aWO aVD -aWr +aWk aXc aTr acW @@ -39094,8 +39212,8 @@ agM agZ ahn adY -aiy -alI +acf +aiz adY adY adY @@ -39236,8 +39354,8 @@ agN ahb aap adY -aiz -alJ +acg +alI adY ajx aix @@ -39422,7 +39540,7 @@ aAU aAT azl azl -aFa +aWN azl azl aEp @@ -39662,8 +39780,8 @@ agt agt agt agt -aiC -alM +aiD +arm age aik amw @@ -39804,7 +39922,7 @@ agt agt agP agt -aiD +alM alN age ail @@ -40230,8 +40348,8 @@ agu age agQ aTM -aiA aly +awK amd amn amz @@ -40533,13 +40651,13 @@ aRV apd apJ afG -are +arf arK asF ati atT auC -avd +atm avH awx axm @@ -40548,7 +40666,7 @@ ayJ azw aAq aBc -aBG +ave aCe aCC aDe @@ -40681,7 +40799,7 @@ asF atj atU auD -ard +are avI awy axn @@ -40817,13 +40935,13 @@ aia ape apM aqw -arf +arh arM asG atk atV auE -ave +avd avJ awz axo @@ -41063,8 +41181,8 @@ aax aaM aaT aan -abI -acf +acQ +ach aac aac aac @@ -41102,11 +41220,11 @@ apf apN aqs arg -arh -arh -atm -arh -arh +aAe +aAe +aBg +aAe +aAe avf avN awB @@ -41205,8 +41323,8 @@ ahd aaN aaU aan +abI abJ -acg aac aac aac @@ -41527,7 +41645,7 @@ aoC apf apN aqs -arh +aAe arQ asK atp @@ -41669,7 +41787,7 @@ aoC apf apN aqs -arh +aAe arR asL atq @@ -41811,7 +41929,7 @@ aoC apf apN aqs -arh +aAe arS asK atp @@ -41938,7 +42056,7 @@ aXo aXY aqy aob -aZb +aTK asc avj aWY @@ -42251,7 +42369,7 @@ ayh ayO azG aAB -aBg +aFa aBN aCj aBO @@ -42784,13 +42902,13 @@ agk anK aof apR -arm +aiC arr anK anv aXs aVu -aYg +alJ aXt baI baO @@ -42955,7 +43073,7 @@ auc auM avh avT -awJ +axz axz axz ayQ @@ -43074,7 +43192,7 @@ anK aXp baU aXF -aZd +awJ aZQ baJ baO @@ -43097,7 +43215,7 @@ arY auN aAA avU -awK +arY axA arY ark @@ -43694,8 +43812,8 @@ aac aHP aIs aIS -aJu -aKc +aJv +aKd aKP aLm aLF @@ -43836,8 +43954,8 @@ aac aHP aIt aIT -aJv -aKd +aJw +aKe aKQ aLn aLG @@ -43978,9 +44096,9 @@ aac aHP aIu aIU -aJw -aKe -aKR +aJx +aKf +aXa aLo aLH aMe @@ -44119,10 +44237,10 @@ arZ aac aHP aIv -aIT -aJx -aKf -aJw +aJu +aKc +aKR +aXI aLp aLI aLM diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm index a23f119e33..612d839280 100644 --- a/maps/tether/tether-03-surface3.dmm +++ b/maps/tether/tether-03-surface3.dmm @@ -652,10 +652,12 @@ "abt" = ( /obj/structure/table/glass, /obj/item/device/flashlight/lamp/green, +/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/wood, /area/tether/surfacebase/reading_room) "abu" = ( /obj/structure/table/glass, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/wood, /area/tether/surfacebase/reading_room) "abv" = ( @@ -1100,6 +1102,15 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/patient_a) "acg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/button/remote/airlock{ + id = "ReadingRoom1"; + name = "Room 1 Bolt"; + pixel_x = -30 + }, /turf/simulated/floor/wood, /area/tether/surfacebase/reading_room) "ach" = ( @@ -1111,6 +1122,9 @@ /obj/structure/bed/chair/comfy/black{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, /turf/simulated/floor/wood, /area/tether/surfacebase/reading_room) "aci" = ( @@ -1589,24 +1603,37 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/patient_a) "acS" = ( -/obj/machinery/door/airlock{ - name = "Room 1" +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled, +/obj/machinery/button/remote/airlock{ + id = "ReadingRoom2"; + name = "Room 2 Bolt"; + pixel_x = -30 + }, +/turf/simulated/floor/wood, /area/tether/surfacebase/reading_room) "acT" = ( -/obj/machinery/door/airlock{ - name = "Room 2" +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled, +/obj/machinery/button/remote/airlock{ + id = "ReadingRoom3"; + name = "Room 3 Bolt"; + pixel_x = -30 + }, +/turf/simulated/floor/wood, /area/tether/surfacebase/reading_room) "acU" = ( /obj/machinery/door/airlock{ - name = "Room 3" + id_tag = "ReadingRoom1"; + name = "Room 1" }, /obj/machinery/door/firedoor/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/tether/surfacebase/reading_room) "acV" = ( @@ -2316,17 +2343,8 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/security/frontdesk) "aeg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/wood, /area/tether/surfacebase/reading_room) "aeh" = ( @@ -2358,14 +2376,13 @@ /turf/simulated/floor/wood, /area/tether/surfacebase/reading_room) "aej" = ( -/obj/structure/bed/chair/office/light{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + icon_state = "intact-supply"; + dir = 5 }, /turf/simulated/floor/wood, /area/tether/surfacebase/reading_room) @@ -4093,10 +4110,10 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/security/common) "agV" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/common) "agW" = ( @@ -4111,6 +4128,13 @@ icon_state = "1-4" }, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/common) "agX" = ( @@ -4360,6 +4384,13 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 10 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/common) "ahv" = ( @@ -4406,6 +4437,13 @@ icon_state = "4-8" }, /obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/frontdesk) "ahz" = ( @@ -4795,26 +4833,63 @@ /area/tether/surfacebase/medical/lobby) "ahZ" = ( /obj/structure/cable/green{ - icon_state = "1-4" + icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/light_switch{ + dir = 2; + name = "light switch "; + pixel_x = 0; + pixel_y = 26 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/frontdesk) "aia" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, /obj/structure/disposalpipe/segment{ - dir = 2; + dir = 4; icon_state = "pipe-c" }, +/obj/effect/floor_decal/borderfloor{ + dir = 8; + icon_state = "borderfloor"; + pixel_x = 0 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 + dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 + icon_state = "intact-supply"; + dir = 5 }, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/frontdesk) @@ -5367,28 +5442,18 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/security/frontdesk) "aiT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/borderfloor{ - dir = 8; - icon_state = "borderfloor"; - pixel_x = 0 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red/bordercorner2{ - dir = 8 - }, /obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/frontdesk) @@ -5408,14 +5473,19 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "aiW" = ( -/obj/structure/bed/chair/office/dark, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/red/border, -/obj/effect/landmark/start{ - name = "Security Officer" +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/frontdesk) @@ -5870,6 +5940,9 @@ /area/tether/surfacebase/surface_three_hall) "ajH" = ( /obj/machinery/computer/secure_data, +/obj/structure/fireaxecabinet{ + pixel_y = 30 + }, /turf/simulated/floor/tiled/dark, /area/bridge) "ajI" = ( @@ -6412,25 +6485,12 @@ /turf/simulated/floor/plating, /area/tether/surfacebase/security/frontdesk) "akB" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/eastleft{ - dir = 1 - }, -/obj/machinery/door/window/westright{ - icon_state = "right"; - dir = 2 - }, -/obj/machinery/door/firedoor/glass, +/obj/structure/bed/chair/office/dark, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 1; - icon_state = "pdoor0"; - id = "surfbriglockdown"; - name = "Security Blast Doors"; - opacity = 0 +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/red/border, +/obj/effect/landmark/start{ + name = "Security Officer" }, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/frontdesk) @@ -7474,15 +7534,18 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 5 }, /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_stairs_three) "amC" = ( @@ -7500,6 +7563,9 @@ /obj/machinery/camera/network/tether{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_stairs_three) "amD" = ( @@ -7510,9 +7576,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_stairs_three) "amE" = ( @@ -7807,6 +7871,8 @@ name = "Secondary Janitorial Closet"; req_access = list(26) }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/steel_grid, /area/tether/surfacebase/north_stairs_three) "and" = ( @@ -8029,12 +8095,14 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/panic_shelter) "anu" = ( @@ -8045,6 +8113,9 @@ /obj/effect/floor_decal/techfloor{ dir = 1 }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/panic_shelter) "anv" = ( @@ -8135,6 +8206,9 @@ /area/tether/surfacebase/north_stairs_three) "anH" = ( /obj/structure/reagent_dispensers/watertank, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_stairs_three) "anI" = ( @@ -8144,6 +8218,10 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 9 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_stairs_three) "anJ" = ( @@ -8355,14 +8433,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, /obj/structure/cable/green{ d1 = 1; d2 = 8; icon_state = "1-8" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/panic_shelter) "anX" = ( @@ -8371,6 +8447,9 @@ dir = 4 }, /obj/effect/floor_decal/techfloor, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/panic_shelter) "anY" = ( @@ -8468,6 +8547,7 @@ icon_state = "alarm0"; pixel_x = 24 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_stairs_three) "aoi" = ( @@ -8649,6 +8729,9 @@ /obj/structure/table/steel, /obj/item/weapon/storage/box/lights/mixed, /obj/item/weapon/storage/box/lights/mixed, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_stairs_three) "aoB" = ( @@ -8656,6 +8739,9 @@ /obj/structure/mopbucket, /obj/item/weapon/reagent_containers/glass/bucket, /obj/item/weapon/mop, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_stairs_three) "aoC" = ( @@ -13488,6 +13574,14 @@ d2 = 2; icon_state = "1-2" }, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "bridge blast"; + name = "Bridge Blast Doors"; + opacity = 0 + }, /turf/simulated/floor, /area/bridge_hallway) "awJ" = ( @@ -15903,7 +15997,8 @@ dir = 10 }, /obj/structure/disposalpipe/junction{ - dir = 1 + dir = 2; + icon_state = "pipe-j2" }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) @@ -16034,19 +16129,15 @@ /turf/simulated/floor/carpet, /area/tether/surfacebase/library/study) "aAx" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lightgrey/border, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 +/obj/machinery/door/firedoor/glass/hidden/steel, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 9 - }, -/obj/effect/floor_decal/corner/lightgrey/bordercorner2{ - dir = 9 +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) @@ -18582,8 +18673,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 1 }, -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 1; +/obj/structure/disposalpipe/sortjunction{ name = "HoP Office"; sortType = "HoP Office" }, @@ -21129,12 +21219,26 @@ /turf/simulated/floor/tiled, /area/hallway/lower/third_south) "aHS" = ( -/obj/machinery/light{ - dir = 4 +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/eastleft{ + dir = 1 }, -/obj/structure/closet/firecloset, -/turf/simulated/floor/tiled/dark, -/area/rnd/outpost/xenobiology/outpost_south_airlock) +/obj/machinery/door/window/westright{ + icon_state = "right"; + dir = 2 + }, +/obj/machinery/door/firedoor/glass, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 1; + icon_state = "pdoor0"; + id = "surfbriglockdown"; + name = "Security Blast Doors"; + opacity = 0 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/security/frontdesk) "aHT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -21279,16 +21383,24 @@ /turf/simulated/floor/tiled, /area/hallway/lower/third_south) "aIc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/door/firedoor/glass/hidden/steel, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/machinery/door/firedoor/glass/hidden/steel{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "intact-supply"; + dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) @@ -21695,9 +21807,21 @@ /turf/simulated/floor/tiled, /area/hallway/lower/third_south) "aIH" = ( -/obj/effect/floor_decal/steeldecal/steel_decals6{ +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 8 }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) "aII" = ( @@ -22056,12 +22180,27 @@ /turf/simulated/floor/tiled, /area/hallway/lower/third_south) "aJq" = ( -/obj/machinery/door/airlock/multi_tile/glass, -/obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "warningcorner"; +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 8 }, -/obj/machinery/door/firedoor, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/effect/floor_decal/corner/lightgrey/bordercorner2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) "aJr" = ( @@ -22521,24 +22660,26 @@ /turf/simulated/floor/plating, /area/tether/surfacebase/shuttle_pad) "aKl" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "warning"; +/obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 8 }, -/obj/effect/floor_decal/steeldecal/steel_decals6{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) "aKm" = ( -/obj/effect/floor_decal/steeldecal/steel_decals6{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1"; - pixel_x = 0 +/obj/machinery/door/airlock/multi_tile/glass, +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "warningcorner"; + dir = 8 }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) "aKn" = ( @@ -22881,6 +23022,14 @@ icon_state = "warning"; dir = 8 }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "intact-supply"; + dir = 5 + }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) "aLa" = ( @@ -24739,8 +24888,21 @@ /turf/simulated/floor/tiled/techmaint, /area/tether/surfacebase/shuttle_pad) "aOQ" = ( -/obj/machinery/camera/network/tether{ - dir = 9 +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 22; + pixel_y = 0 }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) @@ -27205,10 +27367,48 @@ /turf/simulated/floor/plating, /area/maintenance/lower/mining) "aTt" = ( -/obj/structure/shuttle/engine/propulsion, -/turf/simulated/floor/reinforced, -/turf/simulated/shuttle/plating/carry, -/area/shuttle/tether/surface) +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/glass_command{ + dir = 1; + name = "Bridge"; + req_access = list(19) + }, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 1; + icon_state = "pdoor0"; + id = "bridge blast"; + name = "Bridge Blast Doors"; + opacity = 0 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"aTu" = ( +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/glass_command{ + name = "Bridge"; + req_access = list(19) + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 1; + icon_state = "pdoor0"; + id = "bridge blast"; + name = "Bridge Blast Doors"; + opacity = 0 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"aTv" = ( +/obj/machinery/computer/station_alert/all{ + icon_state = "computer"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) "aTw" = ( /obj/effect/floor_decal/techfloor{ dir = 4 @@ -27231,6 +27431,41 @@ /obj/structure/window/basic, /turf/simulated/floor/plating, /area/rnd/outpost/xenobiology/outpost_first_aid) +"aTy" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor/glass, +/obj/structure/window/reinforced/polarized/full{ + id = "hop_office" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + icon_state = "rwindow"; + id = "hop_office" + }, +/obj/structure/cable/green{ + icon_state = "0-1"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/hop) +"aTz" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor/glass, +/obj/structure/window/reinforced/polarized/full{ + id = "hop_office" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + icon_state = "rwindow"; + id = "hop_office" + }, +/obj/structure/cable/green, +/obj/structure/cable/green{ + icon_state = "0-1"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/hop) "aTA" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/wood, @@ -27239,6 +27474,149 @@ /obj/machinery/hologram/holopad, /turf/simulated/floor/tiled, /area/rnd/outpost/xenobiology/outpost_breakroom) +"aTC" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/device/radio{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/device/radio, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_x = 0; + pixel_y = 28 + }, +/obj/machinery/light_switch{ + pixel_x = 12; + pixel_y = 25 + }, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/obj/item/device/multitool, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"aTD" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/closet/firecloset, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 25; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/dark, +/area/rnd/outpost/xenobiology/outpost_south_airlock) +"aTE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + icon_state = "borderfloor"; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/security/lobby) +"aTF" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j2"; + dir = 4 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + icon_state = "borderfloor"; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/security/lobby) +"aTG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + icon_state = "borderfloor"; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/security/lobby) +"aTH" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + icon_state = "borderfloor"; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/security/lobby) +"aTI" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/red/border, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25 + }, +/obj/structure/bed/chair{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/security/lobby) +"aTJ" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/security/lobby) "aTK" = ( /obj/structure/table/glass, /obj/machinery/light{ @@ -27255,6 +27633,83 @@ /obj/item/device/flashlight/lamp/green, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/lobby) +"aTL" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/reading_room) +"aTM" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/wood, +/area/tether/surfacebase/reading_room) +"aTN" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/wood, +/area/tether/surfacebase/reading_room) +"aTO" = ( +/obj/machinery/door/airlock{ + id_tag = "ReadingRoom2"; + name = "Room 2" + }, +/obj/machinery/door/firedoor/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/reading_room) +"aTP" = ( +/obj/machinery/door/airlock{ + id_tag = "ReadingRoom3"; + name = "Room 3" + }, +/obj/machinery/door/firedoor/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/reading_room) +"aTQ" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "warning"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) +"aTR" = ( +/obj/machinery/camera/network/tether{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) +"aTS" = ( +/obj/structure/shuttle/engine/propulsion, +/turf/simulated/floor/reinforced, +/turf/simulated/shuttle/plating/carry, +/area/shuttle/tether/surface) "aTX" = ( /turf/simulated/floor/tiled/dark, /area/tether/surfacebase/security/common) @@ -27431,29 +27886,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/lower/mining) -"aUO" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/light_switch{ - dir = 2; - name = "light switch "; - pixel_x = 0; - pixel_y = 26 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/security/frontdesk) "aUP" = ( /obj/effect/floor_decal/borderfloorwhite{ dir = 8 @@ -27610,32 +28042,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/lower/mining) -"aVd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1; - icon_state = "borderfloor"; - pixel_y = 0 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/bordercorner2{ - dir = 4 - }, -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/security/lobby) "aVe" = ( /obj/structure/table/glass, /obj/item/weapon/storage/box/cups, @@ -27859,72 +28265,6 @@ }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/triage) -"aVy" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j2"; - dir = 4 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1; - icon_state = "borderfloor"; - pixel_y = 0 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/security/lobby) -"aVz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1; - icon_state = "borderfloor"; - pixel_y = 0 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/security/lobby) -"aVA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1; - icon_state = "borderfloor"; - pixel_y = 0 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/security/lobby) "aVB" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -28125,24 +28465,6 @@ /obj/structure/flora/pottedplant/stoutbush, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/lobby) -"aVP" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/red/border, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/security/lobby) "aVR" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/red/border, @@ -28168,18 +28490,6 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/lobby) -"aVS" = ( -/obj/effect/floor_decal/steeldecal/steel_decals6{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/security/lobby) "aVT" = ( /obj/structure/disposalpipe/segment, /obj/effect/floor_decal/steeldecal/steel_decals6, @@ -29454,29 +29764,6 @@ }, /turf/simulated/floor/tiled, /area/rnd/research/researchdivision) -"aXV" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/storage/firstaid/regular, -/obj/item/device/radio{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/device/radio, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 28 - }, -/obj/machinery/light_switch{ - pixel_x = 12; - pixel_y = 25 - }, -/obj/structure/cable/green{ - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) "aXW" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -29833,13 +30120,6 @@ }, /turf/simulated/floor/tiled/dark, /area/bridge) -"aYC" = ( -/obj/machinery/computer/station_alert{ - icon_state = "computer"; - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/bridge) "aYD" = ( /obj/machinery/computer/power_monitor{ icon_state = "computer"; @@ -30336,23 +30616,6 @@ "aZC" = ( /turf/simulated/floor/tiled, /area/crew_quarters/heads/hop) -"aZD" = ( -/obj/structure/grille, -/obj/machinery/door/firedoor/glass, -/obj/structure/window/reinforced/polarized/full{ - id = "hop_office" - }, -/obj/structure/window/reinforced/polarized{ - icon_state = "rwindow"; - dir = 4; - id = "iaa_office" - }, -/obj/structure/cable/green{ - icon_state = "0-1"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/hop) "aZE" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/light{ @@ -30486,24 +30749,6 @@ /obj/item/weapon/pen/multi, /turf/simulated/floor/carpet, /area/crew_quarters/heads/hop) -"aZQ" = ( -/obj/structure/grille, -/obj/machinery/door/firedoor/glass, -/obj/structure/window/reinforced/polarized/full{ - id = "hop_office" - }, -/obj/structure/window/reinforced/polarized{ - icon_state = "rwindow"; - dir = 4; - id = "iaa_office" - }, -/obj/structure/cable/green, -/obj/structure/cable/green{ - icon_state = "0-1"; - dir = 1 - }, -/turf/simulated/floor/plating, -/area/crew_quarters/heads/hop) "aZR" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/window/basic{ @@ -37354,7 +37599,7 @@ aNV aNZ aOf auz -aHS +aTD aHU aOf aPE @@ -39284,7 +39529,7 @@ aqO aqO alo air -aWJ +aWF aku akS aMS @@ -41832,8 +42077,8 @@ aIF act aeI ahx -aUO -aiT +ahZ +aia akz akA aUT @@ -41975,11 +42220,11 @@ act afV ahx ahA -ahZ +aiT aiU ahx -aVd -aVP +aTE +aTI ajT aWs ajM @@ -42117,10 +42362,10 @@ act agb ahx aef -aia aiW akB -aVy +aHS +aTF agB ajT aWt @@ -42262,7 +42507,7 @@ agP ahC aeK akF -aVz +aTG aVR ajT aWu @@ -42404,8 +42649,8 @@ ahF aiQ ajS aQX -aVA -aVS +aTH +aTJ aWc aWv aWJ @@ -42852,7 +43097,7 @@ alj alj alj asT -aYj +aTt asT alX alX @@ -44270,11 +44515,11 @@ baN bbc bbp asT -aXV +aTC aYg bae aYb -aYC +aTv aYK baw bbF @@ -44829,12 +45074,12 @@ bbt alk ayx ayx -aZD -aZQ -aZQ -aZQ -aZQ -aZQ +aTy +aTz +aTz +aTz +aTz +aTz aln ayx alo @@ -45004,8 +45249,8 @@ ayc aGd awP aHp +aAx aIc -aIG aJn aAN aAN @@ -45124,7 +45369,7 @@ ayx alo alo asT -aYr +aTu asT alZ alZ @@ -45147,7 +45392,7 @@ awP awP aHq aId -aIz +aIH aJn aAN aAN @@ -45289,7 +45534,7 @@ aGe aGB aHr aAe -aAx +aJq aJn aAN aAN @@ -45301,7 +45546,7 @@ aNk aNl aNJ aNP -aTt +aTS aKU abg aOk @@ -45431,10 +45676,10 @@ ayG avZ aHs aIe -aIH -aJq aKl +aKm aKZ +aTQ aJn aKU aMF @@ -45443,7 +45688,7 @@ aNl aNl aNK aNP -aTt +aTS aKU abg aOk @@ -45575,8 +45820,8 @@ aHt aIf aII aJr -aKm aOQ +aTR aJn aKU aMF @@ -45585,7 +45830,7 @@ aNm aNl aNK aNP -aTt +aTS aKU abg aOk @@ -45806,9 +46051,9 @@ aac abf abt acg -acS -acg -acg +acU +aeg +aej aeO afG agp @@ -45950,7 +46195,7 @@ abu ach abe adB -aeg +aTL aeP afH agq @@ -46231,10 +46476,10 @@ aac aac abf abt -acg -acT -acg -aeh +acS +aTO +aeg +aTM aeR abe ags @@ -46657,10 +46902,10 @@ aac aac abf abt -acg -acU -acg -aej +acT +aTP +aeg +aTN adC abe aac diff --git a/maps/tether/tether-05-station1.dmm b/maps/tether/tether-05-station1.dmm index efbce94b7b..06dd9949d9 100644 --- a/maps/tether/tether-05-station1.dmm +++ b/maps/tether/tether-05-station1.dmm @@ -273,7 +273,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/camera/network/engineering, +/obj/machinery/camera/network/engine, /turf/simulated/floor, /area/engineering/engine_smes) "aaA" = ( @@ -462,18 +462,11 @@ /turf/simulated/floor/tiled, /area/engineering/hallway) "aaO" = ( -/obj/machinery/light_switch{ - pixel_y = 24 +/obj/effect/landmark/engine_loader{ + clean_turfs = list(list(20,93,30,118),list(31,94,35,96),list(29,97,43,118),list(44,113,46,118)) }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 1 - }, -/obj/machinery/computer/pickengine, -/turf/simulated/floor/tiled, -/area/engineering/engine_monitoring) +/turf/space, +/area/space) "aaP" = ( /obj/structure/table/standard, /turf/simulated/floor/tiled/dark, @@ -1878,8 +1871,13 @@ /turf/simulated/floor/grass, /area/hallway/station/atrium) "adA" = ( -/obj/effect/floor_decal/steeldecal/steel_decals_central1, -/turf/simulated/floor/tiled/monotile, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/yellow/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, /area/engineering/hallway) "adB" = ( /obj/item/device/radio/intercom{ @@ -2081,31 +2079,9 @@ /turf/simulated/floor/tiled, /area/hallway/station/atrium) "adU" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/engineering/hallway) -"adV" = ( /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 10 }, @@ -2115,6 +2091,25 @@ icon_state = "1-2"; pixel_y = 0 }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/engineering/hallway) +"adV" = ( +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "adW" = ( @@ -2144,20 +2139,22 @@ /turf/simulated/floor/tiled, /area/engineering/atmos/backup) "adZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 }, /obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 + dir = 10 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 +/obj/structure/extinguisher_cabinet{ + dir = 4; + icon_state = "extinguisher_closed"; + pixel_x = -30 }, -/obj/machinery/firealarm{ - dir = 2; - layer = 3.3; - pixel_x = 0; - pixel_y = 26 +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 }, /turf/simulated/floor/tiled, /area/engineering/hallway) @@ -2754,8 +2751,14 @@ }, /obj/machinery/door/firedoor/glass, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 8; + icon_state = "pdoor0"; + id = "secondary_bridge_blast"; + name = "Secondary Command Office Blast Doors"; + opacity = 0 + }, /turf/simulated/floor/tiled, /area/bridge/secondary) "afd" = ( @@ -2962,42 +2965,36 @@ /turf/simulated/floor, /area/engineering/storage) "afq" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 2; + layer = 3.3; + pixel_x = 0; + pixel_y = 26 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, -/area/hallway/station/docks) +/area/engineering/hallway) "afr" = ( /obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 4 + dir = 1 }, /obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 + dir = 6 }, /obj/machinery/alarm{ dir = 8; pixel_x = 25; pixel_y = 0 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, +/obj/machinery/camera/network/engineering, +/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled, -/area/hallway/station/docks) +/area/engineering/hallway) "afs" = ( /obj/effect/floor_decal/rust, /obj/machinery/light{ @@ -3010,45 +3007,59 @@ /turf/simulated/floor, /area/engineering/storage) "aft" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "intact"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/hallway/station/docks) -"afu" = ( -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/machinery/status_display{ - layer = 4; - pixel_x = 32; - pixel_y = 0 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, /obj/effect/floor_decal/borderfloor{ - dir = 4 + dir = 1 }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 4 +/obj/effect/floor_decal/corner/yellow/border{ + dir = 1 }, +/obj/effect/floor_decal/steeldecal/steel_decals7, /obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" }, /turf/simulated/floor/tiled, -/area/hallway/station/docks) +/area/engineering/hallway) +"afu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + icon_state = "intact"; + dir = 4 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/yellow/border, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/machinery/light, +/obj/machinery/alarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, +/turf/simulated/floor/tiled, +/area/engineering/hallway) "afv" = ( /obj/machinery/door/firedoor/glass, /obj/structure/cable/green{ @@ -3118,18 +3129,23 @@ /turf/simulated/floor/tiled, /area/hallway/station/atrium) "afB" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + icon_state = "intact"; dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/yellow/border, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, /turf/simulated/floor/tiled, -/area/hallway/station/docks) +/area/engineering/hallway) "afC" = ( /turf/simulated/wall/r_wall, /area/hallway/station/atrium) @@ -3162,24 +3178,28 @@ /turf/simulated/floor/tiled, /area/hallway/station/atrium) "afG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + icon_state = "intact"; + dir = 4 + }, +/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/steeldecal/steel_decals7{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 4 + dir = 8 }, /obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/tiled, -/area/hallway/station/docks) +/area/engineering/hallway) "afH" = ( /obj/effect/floor_decal/borderfloor/corner{ dir = 8 @@ -3188,8 +3208,6 @@ dir = 8 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/bridge/secondary) "afI" = ( @@ -3258,15 +3276,17 @@ /turf/simulated/floor/tiled, /area/hallway/station/atrium) "afO" = ( +/obj/machinery/light_switch{ + pixel_y = 24 + }, /obj/effect/floor_decal/borderfloor{ - dir = 8 + dir = 1 }, /obj/effect/floor_decal/corner/yellow/border{ - dir = 8 + dir = 1 }, -/obj/machinery/camera/network/engineering, /turf/simulated/floor/tiled, -/area/engineering/hallway) +/area/engineering/engine_monitoring) "afP" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, @@ -3594,8 +3614,6 @@ dir = 5 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/bridge/secondary) "agn" = ( @@ -3681,8 +3699,6 @@ dir = 5 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/bridge/secondary) "ags" = ( @@ -3705,12 +3721,6 @@ dir = 1; icon_state = "pipe-c" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, /turf/simulated/floor/tiled, /area/bridge/secondary) "agt" = ( @@ -3903,26 +3913,12 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "intact-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, /turf/simulated/floor/tiled, /area/bridge/secondary) "agE" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "intact-scrubbers"; - dir = 4 - }, /turf/simulated/floor/tiled, /area/bridge/secondary) "agF" = ( @@ -4273,20 +4269,22 @@ /turf/simulated/floor, /area/maintenance/station/eng_lower) "ahg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, /obj/structure/cable/green{ d1 = 1; d2 = 4; icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/bridge/secondary) "ahh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/tiled, /area/bridge/secondary) "ahi" = ( @@ -4853,6 +4851,11 @@ dir = 10 }, /obj/effect/floor_decal/industrial/warning, +/obj/machinery/alarm{ + dir = 4; + icon_state = "alarm0"; + pixel_x = -22 + }, /turf/simulated/floor/tiled/dark, /area/gateway) "aij" = ( @@ -4953,6 +4956,14 @@ name = "Secondary Command Office" }, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 8; + icon_state = "pdoor0"; + id = "secondary_bridge_blast"; + name = "Secondary Command Office Blast Doors"; + opacity = 0 + }, /turf/simulated/floor/tiled, /area/bridge/secondary) "aix" = ( @@ -5552,48 +5563,17 @@ /turf/simulated/floor/tiled/dark, /area/gateway/prep_room) "ajB" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, -/area/engineering/hallway) +/area/engineering/engine_eva) "ajC" = ( -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 - }, -/obj/structure/extinguisher_cabinet{ - dir = 4; - icon_state = "extinguisher_closed"; - pixel_x = -30 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, /turf/simulated/floor/tiled, -/area/engineering/hallway) +/area/engineering/engine_eva) "ajD" = ( /obj/machinery/portable_atmospherics/canister/phoron, /turf/simulated/floor, @@ -6490,12 +6470,20 @@ /turf/simulated/floor/tiled, /area/gateway/prep_room) "alm" = ( -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -28 +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 1 }, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/obj/machinery/camera/network/tether{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/tether/station/stairs_one) "aln" = ( /turf/simulated/floor/carpet/purcarpet, /area/bridge/secondary/meeting_room) @@ -6736,6 +6724,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 5 }, +/obj/machinery/computer/timeclock/premade/west, /turf/simulated/floor/tiled, /area/hallway/station/atrium) "alN" = ( @@ -7072,23 +7061,24 @@ /turf/simulated/floor/wood, /area/hallway/station/atrium) "amp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/obj/effect/floor_decal/industrial/warning{ + dir = 4 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1379; + master_tag = "eng_starboard_airlock"; + name = "interior access button"; + pixel_x = 24; + pixel_y = 25; + req_one_access = list(11,24) }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 25; - pixel_y = 0 - }, -/obj/machinery/camera/network/engineering, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled, -/area/engineering/hallway) +/area/engineering/engineering_airlock) "amq" = ( /obj/machinery/floodlight, /obj/effect/floor_decal/industrial/outline/yellow, @@ -7713,25 +7703,23 @@ /turf/simulated/floor/tiled, /area/engineering/hallway) "anC" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ +/obj/effect/floor_decal/borderfloor{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/effect/floor_decal/corner/yellow/border{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/effect/floor_decal/corner/yellow/bordercorner2{ + dir = 1 }, /obj/effect/floor_decal/steeldecal/steel_decals7, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 4 }, -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, /turf/simulated/floor/tiled, @@ -7856,11 +7844,10 @@ /turf/simulated/floor/wood, /area/maintenance/abandonedlibrary) "anP" = ( -/obj/effect/landmark/engine_loader_pickable{ - clean_turfs = list(list(20,93,30,118),list(31,94,35,96),list(29,97,43,118),list(44,113,46,118)) - }, -/turf/space, -/area/space) +/obj/effect/floor_decal/steeldecal/steel_decals_central1, +/obj/machinery/camera/network/engineering, +/turf/simulated/floor/tiled/monotile, +/area/engineering/hallway) "anQ" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -8090,12 +8077,6 @@ dir = 2; icon_state = "pipe-c" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, /turf/simulated/floor/tiled, /area/bridge/secondary) "aon" = ( @@ -8645,16 +8626,30 @@ /turf/simulated/floor/tiled, /area/engineering/hallway) "apw" = ( -/obj/machinery/atmospherics/pipe/simple/visible/supply{ - icon_state = "intact-supply"; - dir = 10 +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - icon_state = "intact-scrubbers"; - dir = 10 +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + icon_state = "intact"; + dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 9 + }, +/obj/effect/floor_decal/corner/yellow/border{ + dir = 9 + }, +/obj/machinery/camera/network/engineering, /turf/simulated/floor/tiled, -/area/engineering/atmos/backup) +/area/engineering/hallway) "apx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ icon_state = "intact"; @@ -8690,36 +8685,24 @@ /turf/simulated/floor/tiled, /area/engineering/hallway) "apy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - icon_state = "intact"; - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /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/steeldecal/steel_decals7, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 4 }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 }, /turf/simulated/floor/tiled, /area/engineering/hallway) @@ -8826,24 +8809,15 @@ /turf/simulated/floor/wood, /area/maintenance/abandonedlibrary) "apG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - icon_state = "intact"; - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8; + icon_state = "map" }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /turf/simulated/floor/tiled, -/area/engineering/hallway) +/area/engineering/engineering_airlock) "apH" = ( /obj/structure/bed/chair/comfy/brown{ dir = 4 @@ -9159,49 +9133,62 @@ /turf/simulated/floor/tiled, /area/engineering/hallway) "aqm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - icon_state = "intact"; +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10; + icon_state = "intact" + }, +/obj/effect/floor_decal/industrial/warning{ dir = 4 }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 + dir = 4 }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/yellow/border, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 5 }, /turf/simulated/floor/tiled, -/area/engineering/hallway) +/area/engineering/engineering_airlock) "aqn" = ( /obj/machinery/door/firedoor/glass, /obj/random/obstruction, /turf/simulated/floor/wood, /area/maintenance/abandonedlibraryconference) "aqo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - icon_state = "intact"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/yellow/border, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/effect/floor_decal/corner/yellow/bordercorner2{ + dir = 9 + }, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 8 }, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 1 }, -/obj/machinery/light, -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /turf/simulated/floor/tiled, /area/engineering/hallway) @@ -9320,17 +9307,19 @@ /turf/simulated/floor/wood/broken, /area/maintenance/abandonedlibraryconference) "aqB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/red{ - icon_state = "intact"; - dir = 4 +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, /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/steeldecal/steel_decals7{ dir = 8 }, @@ -9340,6 +9329,12 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/light, +/obj/machinery/alarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "aqC" = ( @@ -9944,29 +9939,19 @@ /turf/simulated/floor/carpet, /area/engineering/break_room) "arO" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + icon_state = "intact-supply"; + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - icon_state = "intact"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 9 - }, -/obj/effect/floor_decal/corner/yellow/border{ - dir = 9 +/obj/machinery/camera/network/engineering{ + dir = 8 }, /turf/simulated/floor/tiled, -/area/engineering/hallway) +/area/engineering/atmos/backup) "arP" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood, @@ -10421,9 +10406,13 @@ d2 = 2; icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/bridge/secondary) "asN" = ( @@ -10975,22 +10964,40 @@ /turf/simulated/floor, /area/maintenance/station/eng_lower) "atU" = ( -/obj/structure/disposalpipe/sortjunction{ - name = "Visitor Office"; - sortType = "Visitor Office" - }, -/obj/structure/cable/green{ +/obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/structure/cable/green{ +/obj/structure/cable{ d1 = 2; - d2 = 4; - icon_state = "2-4" + d2 = 8; + icon_state = "2-8" }, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/station/atrium) "atV" = ( /obj/structure/cable/green{ d1 = 4; @@ -11261,14 +11268,33 @@ /turf/simulated/wall/r_wall, /area/maintenance/station/spacecommandmaint) "auE" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" }, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 6 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/tether/station/visitorhallway) "auF" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "warning"; @@ -11454,6 +11480,10 @@ }, /obj/structure/table/reinforced, /obj/item/weapon/folder/white, +/obj/machinery/newscaster{ + layer = 3.3; + pixel_x = 28 + }, /turf/simulated/floor/tiled/dark, /area/bridge/secondary) "auY" = ( @@ -11515,17 +11545,24 @@ /turf/simulated/floor/tiled, /area/engineering/workshop) "ave" = ( +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/maintenance/common, /obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" + dir = 4 }, /obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/area/tether/station/visitorhallway) "avf" = ( /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/airless, @@ -11986,28 +12023,43 @@ /turf/simulated/floor, /area/maintenance/station/eng_lower) "avQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /obj/structure/bed/chair/office/dark, /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/bridge/secondary) "avR" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/maintenance/command, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/disposalpipe/sortjunction{ + name = "Visitor Office"; + sortType = "Visitor Office" }, /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, /turf/simulated/floor, -/area/bridge/secondary/hallway) +/area/maintenance/station/spacecommandmaint) "avS" = ( /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, @@ -12034,41 +12086,35 @@ /turf/simulated/wall, /area/tether/station/visitorhallway) "avV" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor, +/area/maintenance/station/spacecommandmaint) +"avW" = ( /obj/structure/disposalpipe/segment{ - dir = 4 + dir = 1; + icon_state = "pipe-c" }, /obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/bridge/secondary/hallway) -"avW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 + d1 = 1; + d2 = 4; + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 + icon_state = "intact-supply"; + dir = 5 }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/bridge/secondary/hallway) +/turf/simulated/floor, +/area/maintenance/station/spacecommandmaint) "avX" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/airlock/multi_tile/glass{ @@ -12372,30 +12418,33 @@ /turf/simulated/floor/tiled, /area/tether/station/visitorhallway) "awr" = ( +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/maintenance/command, /obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" + dir = 4 }, /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/borderfloor{ - dir = 6 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 6 +/obj/machinery/door/blast/regular{ + density = 0; + dir = 1; + icon_state = "pdoor0"; + id = "secondary_bridge_blast"; + name = "Secondary Command Office Blast Doors"; + opacity = 0 }, -/obj/effect/floor_decal/steeldecal/steel_decals4, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/tether/station/visitorhallway) +/turf/simulated/floor, +/area/bridge/secondary/hallway) "aws" = ( /turf/simulated/wall, /area/tether/station/stairs_one) @@ -12424,9 +12473,23 @@ /turf/simulated/wall, /area/crew_quarters/sleep/spacedorm2) "awx" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) "awy" = ( /obj/structure/bed/chair/comfy/brown{ dir = 1 @@ -12492,8 +12555,6 @@ /turf/simulated/floor/tiled, /area/engineering/hallway) "awE" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/maintenance/common, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -12502,11 +12563,22 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/light{ + dir = 1 }, -/turf/simulated/floor, -/area/tether/station/visitorhallway) +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) "awF" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -12894,6 +12966,14 @@ "axm" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/airlock/maintenance/command, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 8; + icon_state = "pdoor0"; + id = "secondary_bridge_blast"; + name = "Secondary Command Office Blast Doors"; + opacity = 0 + }, /turf/simulated/floor, /area/bridge/secondary/teleporter) "axn" = ( @@ -12961,11 +13041,17 @@ /turf/simulated/floor, /area/crew_quarters/sleep/cryo) "axu" = ( -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 8 +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 5 +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 }, /turf/simulated/floor/tiled, /area/tether/station/stairs_one) @@ -13031,6 +13117,9 @@ /obj/effect/floor_decal/corner/lightgrey/bordercorner2{ dir = 10 }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/station/docks) "axD" = ( @@ -13541,16 +13630,24 @@ /area/bridge/secondary/meeting_room) "ayw" = ( /obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 4 + dir = 8 }, /obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 9 + dir = 5 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/tether/station/stairs_one) "ayx" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/tiled, +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock{ + name = "Secondary Janitorial Closet"; + req_access = list(26) + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, /area/tether/station/stairs_one) "ayy" = ( /obj/structure/stairs/south, @@ -13860,15 +13957,12 @@ /turf/simulated/floor/tiled, /area/tether/station/visitorhallway) "ayR" = ( -/obj/structure/dispenser{ - phorontanks = 0 - }, -/obj/machinery/camera/network/command{ - icon_state = "camera"; +/obj/structure/table/woodentable, +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/bridge/secondary/teleporter) +/turf/simulated/floor/wood, +/area/bridge/secondary/meeting_room) "ayS" = ( /obj/structure/cable/green{ d1 = 4; @@ -14074,6 +14168,12 @@ /turf/simulated/floor/tiled, /area/hallway/station/atrium) "azc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -14082,6 +14182,8 @@ /turf/simulated/floor/tiled, /area/bridge/secondary) "azd" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/structure/cable/green{ d1 = 2; d2 = 8; @@ -14502,19 +14604,24 @@ /turf/simulated/floor/tiled, /area/tether/station/visitorhallway/laundry) "azM" = ( -/obj/machinery/light_switch{ - pixel_y = -25 +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 5 }, -/obj/structure/table/steel, -/obj/item/weapon/storage/box/lights/mixed, -/obj/item/weapon/storage/box/lights/mixed, /turf/simulated/floor/tiled, /area/tether/station/stairs_one) "azN" = ( -/obj/machinery/light/small, -/obj/structure/mopbucket, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/item/weapon/mop, +/obj/structure/reagent_dispensers/watertank, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/tether/station/stairs_one) "azO" = ( @@ -14941,39 +15048,18 @@ /turf/simulated/floor/tiled, /area/hallway/station/atrium) "aAz" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/structure/dispenser{ + phorontanks = 0 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 +/obj/machinery/camera/network/command{ + icon_state = "camera"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lightgrey/border, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 5 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/station/atrium) +/turf/simulated/floor/tiled/dark, +/area/bridge/secondary/teleporter) "aAA" = ( /obj/structure/cable{ d1 = 4; @@ -15003,6 +15089,12 @@ 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/disposalpipe/segment, /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 5 @@ -15010,12 +15102,6 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, /turf/simulated/floor/tiled, /area/hallway/station/atrium) "aAC" = ( @@ -15856,8 +15942,6 @@ icon_state = "camera"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/bridge/secondary) "aBZ" = ( @@ -16007,12 +16091,7 @@ /turf/simulated/floor/tiled/dark, /area/gateway/prep_room) "aCp" = ( -/obj/effect/floor_decal/steeldecal/steel_decals6{ - dir = 1 - }, -/obj/machinery/camera/network/tether{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/tether/station/stairs_one) "aCq" = ( @@ -16460,6 +16539,135 @@ /obj/item/device/radio/beacon, /turf/simulated/floor/tiled, /area/hallway/station/docks) +"aCZ" = ( +/obj/machinery/light_switch{ + pixel_y = -25 + }, +/obj/structure/table/steel, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/weapon/storage/box/lights/mixed, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "intact-supply"; + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/tether/station/stairs_one) +"aDa" = ( +/obj/machinery/light/small, +/obj/structure/mopbucket, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/item/weapon/mop, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/tether/station/stairs_one) +"aDb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/station/docks) +"aDc" = ( +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 25; + pixel_y = 0 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/station/docks) +"aDd" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/hallway/station/docks) +"aDe" = ( +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 + }, +/obj/machinery/status_display{ + layer = 4; + pixel_x = 32; + pixel_y = 0 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hallway/station/docks) +"aDf" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/station/docks) +"aDg" = ( +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/station/docks) "aDh" = ( /obj/machinery/door/airlock{ name = "Unit 3" @@ -17510,25 +17718,6 @@ /obj/machinery/door/firedoor/glass, /turf/simulated/floor/plating, /area/tether/station/dock_two) -"aJj" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "eng_starboard_airlock"; - name = "interior access button"; - pixel_x = 24; - pixel_y = 25; - req_one_access = list(11,24) - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/engineering/engineering_airlock) "aJk" = ( /obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 8; @@ -17536,12 +17725,6 @@ }, /turf/simulated/floor/tiled, /area/engineering/engineering_airlock) -"aJl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_eva) "aJm" = ( /obj/effect/floor_decal/borderfloor/corner{ dir = 4 @@ -17803,27 +17986,6 @@ }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/engi_wash) -"aLp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10; - icon_state = "intact" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/engineering/engineering_airlock) "aLt" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/blast/regular{ @@ -17899,42 +18061,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/tiled, /area/engineering/hallway) -"aLC" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/yellow/border, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 9 - }, -/obj/effect/floor_decal/corner/yellow/bordercorner2{ - dir = 9 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/engineering/hallway) "aLG" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/yellow/border, @@ -18143,15 +18269,6 @@ /obj/machinery/door/firedoor/glass, /turf/simulated/floor/tiled, /area/engineering/hallway) -"aLX" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/engineering/engine_eva) "aLY" = ( /obj/structure/cable/green{ d1 = 4; @@ -18207,40 +18324,6 @@ }, /turf/simulated/floor/tiled, /area/engineering/hallway) -"aMc" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/yellow/border, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light, -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/turf/simulated/floor/tiled, -/area/engineering/hallway) "aMd" = ( /obj/structure/cable/green{ d1 = 4; @@ -19142,28 +19225,6 @@ }, /turf/simulated/floor/tiled, /area/engineering/foyer) -"aTJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/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 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/engineering/hallway) "aTK" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/effect/floor_decal/borderfloor{ @@ -19282,28 +19343,6 @@ }, /turf/simulated/floor/tiled, /area/engineering/foyer) -"aUn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/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/steeldecal/steel_decals7, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/engineering/hallway) "aUo" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -20611,21 +20650,6 @@ /obj/structure/stairs/east, /turf/simulated/floor/tiled, /area/engineering/foyer) -"bgG" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/steeldecal/steel_decals6{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/tether/station/stairs_one) "bgH" = ( /obj/structure/cable{ d2 = 8; @@ -20891,14 +20915,6 @@ /obj/random/tech_supply, /turf/simulated/floor/tiled, /area/storage/tools) -"bkm" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock{ - name = "Secondary Janitorial Closet"; - req_access = list(26) - }, -/turf/simulated/floor/tiled/steel_grid, -/area/tether/station/stairs_one) "bkp" = ( /obj/machinery/vending/assist, /obj/machinery/light/small{ @@ -22707,18 +22723,6 @@ }, /turf/simulated/floor/plating, /area/tether/station/dock_two) -"eCW" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/bridge/secondary) "eIG" = ( /turf/space, /area/ninja_dojo/orbit) @@ -25525,7 +25529,7 @@ aaa aaa aaa aaa -anP +aaO aaa aaa aaa @@ -27102,7 +27106,7 @@ aEa alp aHT aJk -aJk +apG aNe aGB ahW @@ -27243,8 +27247,8 @@ aCB aLI aFJ aHQ -aJj -aLp +amp +aqm aNd aGB ahW @@ -28091,12 +28095,12 @@ asy axG aue amd -aJl -aLX +ajB +ajC aQv aSC -aTJ -aLC +anC +aqo agc aBg aTm @@ -28223,7 +28227,7 @@ aac aac aac abZ -apw +arO apu aqj aqM @@ -28508,7 +28512,7 @@ arq nov alG acz -arO +apw aql aqM atj @@ -28792,8 +28796,8 @@ arq alK ane aot -apy -aqo +aft +afu acS aru avh @@ -28935,7 +28939,7 @@ alG anc acz apx -aqm +afB aqN art avh @@ -29357,7 +29361,7 @@ aiC aiM aac acz -adA +anP aor apc apI @@ -29502,8 +29506,8 @@ acz aad aoq apb -apG -aqB +apJ +afG aqN atA avq @@ -29515,8 +29519,8 @@ aCP aNa aRy aqN -aUn -aMc +apy +aqB alv alt alt @@ -29670,12 +29674,12 @@ agR adT ajK awp -aCp -axu -bkm +alm ayw -axR +ayx azM +aCp +aCZ aws aBa btu @@ -29771,7 +29775,7 @@ abb aea abH alF -aaO +afO afL aid aiP @@ -29812,12 +29816,12 @@ agQ adX bdi bfG -bgG +axu axv aws -ayx -bou azN +bou +aDa aws aBb aCY @@ -30067,7 +30071,7 @@ aiM aiM acz anl -afO +adA ano apb apJ @@ -30198,7 +30202,7 @@ aby abO acu ads -adV +adU aeE acu acu @@ -30206,7 +30210,7 @@ afZ acu ahO adV -ajC +adZ ads akX amb @@ -30340,7 +30344,7 @@ abx abl acq adq -adU +acq aeD aeV afm @@ -30348,7 +30352,7 @@ aCj aeV ahM aiG -ajB +aeV ake akW alZ @@ -31233,9 +31237,9 @@ aim bdL bfQ afo -afq -aft -afB +aDb +aDd +aDf bha bha bqf @@ -31345,8 +31349,8 @@ amq ajI akp aJs -adZ -anC +afq +ant apg apQ apQ @@ -31375,9 +31379,9 @@ acp bdW arf awZ -afr -afu -afG +aDc +aDe +aDg awZ azR aAo @@ -31487,7 +31491,7 @@ aJs aJs aJs aJs -amp +afr anB apg apX @@ -32945,7 +32949,7 @@ aux avA afI avT -awr +auE aww axg axM @@ -33087,7 +33091,7 @@ auC avC afI avU -awE +ave aww aww aww @@ -33229,9 +33233,9 @@ afI afI afI aAn -atU -auE -ave +avR +avV +avW ail aBL ail @@ -33373,7 +33377,7 @@ auq auu avk auD -avR +awr axs ahj ahj @@ -33502,7 +33506,7 @@ acC adm acy aCx -aAz +atU agl ahL ahL @@ -33515,12 +33519,12 @@ adj adj auQ avb -avV +awx awA ahj aqg aAs -ayR +aAz avr awW aAt @@ -33657,7 +33661,7 @@ aun auL avp avb -avW +awE axq awN axh @@ -34235,7 +34239,7 @@ aia aiB aia aiH -alm +aia asH aia aia @@ -34371,7 +34375,7 @@ avY axy ahN aht -awx +ayR awy aia aia @@ -34505,7 +34509,7 @@ acV acV acV afK -eCW +agE avQ agS ahm diff --git a/maps/tether/tether-06-station2.dmm b/maps/tether/tether-06-station2.dmm index 37b32b119c..e052f8ae0f 100644 --- a/maps/tether/tether-06-station2.dmm +++ b/maps/tether/tether-06-station2.dmm @@ -515,52 +515,25 @@ /turf/simulated/floor/tiled, /area/security/security_cell_hallway) "aY" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 +/obj/effect/floor_decal/borderfloor/shifted{ + icon_state = "borderfloor_shifted"; + dir = 1 }, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 +/obj/effect/floor_decal/corner/lightorange/border/shifted{ + icon_state = "bordercolor_shifted"; + dir = 1 }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 10; - icon_state = "borderfloorcorner2"; - pixel_x = 0 - }, -/obj/effect/floor_decal/corner/red/bordercorner2{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/button/remote/blast_door{ - dir = 8; - id = "Cell 2"; - name = "Cell 2 Door"; - pixel_x = -28; - req_access = list(1,2) - }, -/obj/machinery/camera/network/security{ - icon_state = "camera"; +/obj/effect/floor_decal/corner/lightorange{ + icon_state = "corner_white"; dir = 5 }, -/turf/simulated/floor/tiled, -/area/security/security_cell_hallway) +/obj/structure/table/steel, +/obj/machinery/alarm{ + pixel_y = 22 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/security/brig) "aZ" = ( /obj/machinery/atmospherics/valve/digital, /obj/effect/decal/cleanable/dirt, @@ -622,7 +595,6 @@ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -633,13 +605,23 @@ d2 = 8; icon_state = "2-8" }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /obj/machinery/button/remote/blast_door{ dir = 8; - id = "Cell 1"; - name = "Cell 1 Door"; + id = "Cell 2"; + name = "Cell 2 Door"; pixel_x = -28; req_access = list(1,2) }, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/security/security_cell_hallway) "be" = ( @@ -1905,24 +1887,23 @@ /turf/simulated/floor/plating, /area/engineering/shaft) "cK" = ( -/obj/effect/floor_decal/borderfloor/shifted{ - icon_state = "borderfloor_shifted"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, -/obj/effect/floor_decal/corner/lightorange/border/shifted{ - icon_state = "bordercolor_shifted"; - dir = 1 +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/effect/floor_decal/corner/lightorange{ - icon_state = "corner_white"; - dir = 5 +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" }, -/obj/structure/table/steel, -/obj/machinery/alarm{ - pixel_y = 22 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 }, -/turf/simulated/floor/tiled/dark, -/area/security/brig) +/turf/simulated/floor/tiled, +/area/security/security_cell_hallway) "cL" = ( /obj/random/trash, /obj/machinery/alarm{ @@ -2364,12 +2345,12 @@ /turf/simulated/floor/tiled, /area/security/brig/visitation) "dp" = ( -/obj/machinery/vending/hydronutrients, /obj/machinery/alarm{ dir = 8; icon_state = "alarm0"; pixel_x = 24 }, +/obj/machinery/vending/hydronutrients/brig, /turf/simulated/floor/tiled, /area/security/brig) "dq" = ( @@ -2733,20 +2714,40 @@ /turf/simulated/floor/plating, /area/maintenance/station/eng_upper) "dT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/obj/effect/floor_decal/borderfloor{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 10; + icon_state = "borderfloorcorner2"; + pixel_x = 0 + }, +/obj/effect/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, /obj/structure/cable/green{ - d1 = 4; + d1 = 2; d2 = 8; - icon_state = "4-8" + icon_state = "2-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" +/obj/machinery/button/remote/blast_door{ + dir = 8; + id = "Cell 1"; + name = "Cell 1 Door"; + pixel_x = -28; + req_access = list(1,2) + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, /turf/simulated/floor/tiled, /area/security/security_cell_hallway) @@ -3896,6 +3897,9 @@ dir = 4; pixel_x = 24 }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/security/security_cell_hallway) "fJ" = ( @@ -4375,12 +4379,10 @@ /obj/effect/floor_decal/corner/red/border{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, /obj/machinery/light{ dir = 1 }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled, /area/security/security_cell_hallway) "gz" = ( @@ -4668,15 +4670,22 @@ /turf/simulated/floor/tiled, /area/engineering/locker_room) "gV" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1; - pixel_y = 0 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 1 +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/red/border, +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/simulated/floor/tiled, /area/security/security_cell_hallway) @@ -4932,28 +4941,14 @@ /turf/simulated/wall, /area/maintenance/station/eng_upper) "hs" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/red/border, -/obj/structure/railing, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 + }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/tiled, -/area/security/security_cell_hallway) +/area/engineering/foyer_mezzenine) "ht" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/red/border, @@ -6663,10 +6658,21 @@ /turf/simulated/floor/tiled, /area/engineering/foyer_mezzenine) "jH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, /obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/machinery/camera/network/tether{ dir = 9 }, /turf/simulated/floor/tiled, @@ -6867,7 +6873,7 @@ /obj/machinery/door/firedoor/glass, /obj/machinery/door/airlock/engineering{ name = "Exploration Substation"; - req_one_access = list(11,24,5) + req_one_access = list(11,24,43) }, /obj/structure/cable/green{ d1 = 1; @@ -6970,40 +6976,35 @@ /turf/simulated/wall, /area/engineering/foyer_mezzenine) "kg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/engineering{ + name = "Exploration Substation"; + req_one_access = list(11,24,43) }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/engineering/foyer_mezzenine) +/turf/simulated/floor, +/area/maintenance/substation/exploration) "kh" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 +/obj/effect/floor_decal/borderfloor{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 1 }, /obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 + dir = 4 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/obj/machinery/camera/network/tether{ - dir = 9 +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" }, /turf/simulated/floor/tiled, -/area/engineering/foyer_mezzenine) +/area/hallway/station/starboard) "ki" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -7659,18 +7660,21 @@ /turf/simulated/floor/tiled, /area/hallway/station/starboard) "lj" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/engineering{ - name = "Exploration Substation"; - req_one_access = list(11,24,5) +/obj/effect/floor_decal/borderfloor{ + dir = 1 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 1 }, -/turf/simulated/floor, -/area/maintenance/substation/exploration) +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/station/starboard) "lk" = ( /turf/simulated/floor/tiled, /area/tether/exploration/equipment) @@ -9079,10 +9083,6 @@ /turf/simulated/floor/tiled, /area/hallway/station/starboard) "ni" = ( -/obj/structure/disposalpipe/junction{ - dir = 8; - icon_state = "pipe-j2" - }, /obj/effect/floor_decal/borderfloor{ dir = 1 }, @@ -9093,6 +9093,13 @@ dir = 4 }, /obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/station/starboard) "nj" = ( @@ -9109,24 +9116,18 @@ /turf/simulated/floor/tiled/techfloor, /area/ai_upload_foyer) "nk" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1 +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, /turf/simulated/floor/tiled, -/area/hallway/station/starboard) +/area/engineering/foyer_mezzenine) "nl" = ( /obj/effect/floor_decal/borderfloor{ dir = 1 @@ -9141,22 +9142,12 @@ /turf/simulated/floor/tiled, /area/hallway/station/starboard) "nm" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; dir = 4 }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /turf/simulated/floor/tiled, -/area/hallway/station/starboard) +/area/engineering/foyer_mezzenine) "nn" = ( /obj/structure/cable/cyan{ d2 = 2; @@ -9733,6 +9724,9 @@ icon_state = "tube1"; dir = 4 }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/engineering/foyer_mezzenine) "ok" = ( @@ -9886,28 +9880,24 @@ /turf/simulated/floor/plating, /area/maintenance/station/eng_upper) "ox" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1 +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 8 }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 1 +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 5 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ +/obj/structure/cable/green{ d1 = 1; d2 = 2; - icon_state = "1-2"; - pixel_y = 0 + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, -/area/hallway/station/starboard) +/area/engineering/foyer_mezzenine) "oy" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -10280,19 +10270,8 @@ /turf/simulated/wall, /area/vacant/vacant_restaurant_upper) "pe" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /turf/simulated/floor/tiled, /area/engineering/foyer_mezzenine) @@ -11140,6 +11119,9 @@ /obj/machinery/camera/network/tether{ dir = 9 }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/engineering/foyer_mezzenine) "qy" = ( @@ -12232,15 +12214,15 @@ /turf/simulated/floor/tiled/techfloor, /area/medical/morgue) "sg" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/glass_medical{ - id_tag = "MedbayWaiting"; - name = "Medbay" +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary{ + scrub_id = "sec_riot_control" }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/medical/surgery_hallway) +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 5 + }, +/turf/simulated/floor/plating, +/area/security/brig) "sh" = ( /obj/structure/bookcase, /turf/simulated/floor/wood, @@ -15156,6 +15138,14 @@ /obj/machinery/door/airlock/maintenance/command{ req_access = list(19) }, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 8; + icon_state = "pdoor0"; + id = "secondary_bridge_blast"; + name = "Secondary Command Office Blast Doors"; + opacity = 0 + }, /turf/simulated/floor, /area/maintenance/station/micro) "wT" = ( @@ -15167,6 +15157,14 @@ req_access = list(19) }, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 1; + icon_state = "pdoor0"; + id = "secondary_bridge_blast"; + name = "Secondary Command Office Blast Doors"; + opacity = 0 + }, /turf/simulated/floor, /area/maintenance/station/micro) "wU" = ( @@ -15195,6 +15193,32 @@ }, /turf/simulated/floor, /area/maintenance/station/micro) +"wW" = ( +/obj/machinery/alarm{ + dir = 4; + icon_state = "alarm0"; + pixel_x = -22 + }, +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary{ + scrub_id = "sec_riot_control" + }, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/plating, +/area/security/brig) +"wX" = ( +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/glass_medical{ + id_tag = "MedbayWaiting"; + name = "Medbay" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/medical/surgery_hallway) "wZ" = ( /obj/effect/landmark/start{ name = "Medical Doctor" @@ -20430,20 +20454,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/steel_dirty, /area/security/brig) -"Fx" = ( -/obj/machinery/light{ - icon_state = "tube1"; - dir = 8 - }, -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary{ - scrub_id = "sec_riot_control" - }, -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 5 - }, -/turf/simulated/floor/plating, -/area/security/brig) "Fy" = ( /obj/structure/closet/secure_closet/explorer, /obj/effect/floor_decal/borderfloor, @@ -20769,7 +20779,7 @@ /turf/simulated/floor/tiled/steel_dirty, /area/security/brig) "Jc" = ( -/obj/machinery/seed_storage/garden, +/obj/machinery/seed_storage/brig, /turf/simulated/floor/tiled, /area/security/brig) "Jh" = ( @@ -21290,17 +21300,6 @@ /obj/random/maintenance/engineering, /turf/simulated/floor, /area/maintenance/station/sec_lower) -"Op" = ( -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22 - }, -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary{ - scrub_id = "sec_riot_control" - }, -/turf/simulated/floor/plating, -/area/security/brig) "Or" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/catwalk, @@ -29667,8 +29666,8 @@ eS fD Pm aS -Fx -Op +sg +wW hQ iu jd @@ -29814,8 +29813,8 @@ Xx hQ iv je -jH -kg +hs +lB kS lB mm @@ -29957,7 +29956,7 @@ hQ YN jf jI -kh +jH kT lC mn @@ -30531,9 +30530,9 @@ ac kf mP nB +nk oh -oh -pe +ox pL qr rh @@ -30649,16 +30648,16 @@ aS am aF aS -cK +aY cO aS -cK +aY cO aS -cK +aY cO aS -cK +aY cO aS PJ @@ -30673,9 +30672,9 @@ ac kf mQ nC +nm oi -oi -oi +pe pK qs ri @@ -30812,7 +30811,7 @@ Yq TY TY kj -kf +hQ od nD oj @@ -30945,8 +30944,8 @@ aS dO cR aS +gW gV -hs hU hU aj @@ -30957,10 +30956,10 @@ KJ kj kj nE -hr -hr -hr -hr +kj +kj +kj +kj qu rk rX @@ -31223,10 +31222,10 @@ bH aX cT bJ -aY +bd KQ bQ -bd +dT KQ co gX @@ -31365,7 +31364,7 @@ cf cz QH ds -dT +cK Vm fh fI @@ -32672,7 +32671,7 @@ ps qO rx sb -sg +wX sK ts tR @@ -35215,7 +35214,7 @@ mb qj Cm kt -ni +kh nV qB eh @@ -35357,7 +35356,7 @@ mc qq Cn kt -nh +nl nR qC oY @@ -35499,7 +35498,7 @@ mz qZ la kt -nh +nl nR qC oY @@ -35641,7 +35640,7 @@ kt kt kt kt -nh +nl nR qC oY @@ -35776,14 +35775,14 @@ ls jV jV jV -lj +kg jV DU DW DY DZ bg -nk +lj nR qC oY @@ -35925,7 +35924,7 @@ oq om om os -ox +ni oQ qF oZ @@ -36067,7 +36066,7 @@ hh hh hh hh -nm +nl nP oA pa diff --git a/maps/tether/tether-07-station3.dmm b/maps/tether/tether-07-station3.dmm index 70e5bbe0ca..48f553009a 100644 --- a/maps/tether/tether-07-station3.dmm +++ b/maps/tether/tether-07-station3.dmm @@ -110,7 +110,6 @@ /turf/simulated/floor/tiled/dark, /area/security/armory/red) "am" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, /obj/machinery/door/airlock/glass_external{ frequency = 1379; icon_state = "door_locked"; @@ -120,6 +119,19 @@ req_access = newlist(); req_one_access = list(1,2,18) }, +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; + icon_state = "space"; + layer = 4; + name = "EXTERNAL AIRLOCK"; + pixel_x = -32; + pixel_y = 0 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5; + icon_state = "intact" + }, /turf/simulated/floor, /area/security/eva) "an" = ( @@ -248,32 +260,26 @@ /turf/simulated/floor/tiled, /area/security/eva) "ax" = ( -/obj/machinery/access_button{ - command = "cycle_interior"; +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass_external{ frequency = 1379; - master_tag = "sec_fore_airlock"; - name = "interior access button"; - pixel_x = 25; - pixel_y = 25; - req_one_access = list(13) + icon_state = "door_locked"; + id_tag = "sec_fore_inner"; + locked = 1; + name = "Security Fore Internal Access"; + req_access = newlist(); + req_one_access = list(1,2,18) }, /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 + dir = 10; + icon_state = "intact" }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled, +/turf/simulated/floor, /area/security/eva) "ay" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, +/obj/structure/closet/emcloset, +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled, /area/security/eva) "az" = ( @@ -843,7 +849,6 @@ /obj/effect/floor_decal/corner/red/border{ dir = 1 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -1127,8 +1132,7 @@ /turf/simulated/floor/tiled, /area/security/hallwayaux) "bJ" = ( -/obj/structure/closet/emcloset, -/obj/effect/decal/cleanable/cobweb, +/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled, /area/security/eva) "bK" = ( @@ -1154,8 +1158,8 @@ "bM" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/red/border, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 }, /turf/simulated/floor/tiled, /area/security/hallwayaux) @@ -1561,8 +1565,22 @@ /turf/simulated/floor/tiled, /area/security/hallwayaux) "cp" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1379; + master_tag = "sec_fore_airlock"; + name = "interior access button"; + pixel_x = 25; + pixel_y = 25; + req_one_access = list(13) + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5; + icon_state = "intact" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 }, /turf/simulated/floor/tiled, /area/security/eva) @@ -1867,8 +1885,8 @@ /obj/effect/floor_decal/corner/red/border{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 }, /turf/simulated/floor/tiled, /area/security/hallwayaux) @@ -2464,26 +2482,16 @@ /turf/simulated/floor/tiled, /area/shuttle/excursion/tether) "dX" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 }, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 }, /turf/simulated/floor/tiled, -/area/security/hallway) +/area/security/eva) "dY" = ( /obj/item/device/radio/intercom{ dir = 4; @@ -2622,13 +2630,24 @@ /turf/simulated/floor/tiled, /area/security/hallway) "ej" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/red/border, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, /turf/simulated/floor/tiled, -/area/security/hallwayaux) +/area/security/hallway) "ek" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/red/border, @@ -2708,10 +2727,7 @@ /obj/effect/floor_decal/corner/red/border{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ +/obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, /turf/simulated/floor/tiled, @@ -3318,33 +3334,21 @@ /area/security/warden) "fm" = ( /obj/effect/floor_decal/borderfloor{ - dir = 1; - pixel_y = 0 + dir = 8 }, /obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/bordercorner2{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + dir = 8 }, /obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/security/hallway) "fn" = ( @@ -4325,37 +4329,22 @@ /turf/simulated/floor/tiled, /area/security/eva) "gX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 }, -/obj/machinery/camera/network/security{ - icon_state = "camera"; - dir = 10 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 }, /turf/simulated/floor/tiled, /area/security/eva) "gY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/door/airlock/glass_external{ - frequency = 1379; - icon_state = "door_locked"; - id_tag = "sec_fore_inner"; - locked = 1; - name = "Security Fore Internal Access"; - req_access = newlist(); - req_one_access = list(1,2,18) +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; - pixel_x = -32; - pixel_y = 0 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor, +/turf/simulated/floor/tiled, /area/security/eva) "gZ" = ( /obj/machinery/alarm{ @@ -4562,17 +4551,18 @@ /turf/simulated/floor, /area/security/eva) "hv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5; - icon_state = "intact" +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 }, /turf/simulated/floor/tiled, /area/security/eva) "hw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5; - icon_state = "intact" +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 }, /turf/simulated/floor/tiled, /area/security/eva) @@ -5954,19 +5944,11 @@ /obj/effect/floor_decal/corner/red/border{ dir = 4 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, -/area/security/hallwayaux) +/area/security/hallway) "jm" = ( /obj/effect/floor_decal/corner/lightgrey{ dir = 9 @@ -6103,11 +6085,12 @@ /obj/effect/floor_decal/corner/red/border{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 }, /turf/simulated/floor/tiled, -/area/security/hallwayaux) +/area/security/hallway) "jA" = ( /obj/effect/floor_decal/borderfloor{ dir = 4 @@ -6647,12 +6630,13 @@ /turf/simulated/wall/r_wall, /area/security/security_equiptment_storage) "kp" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/network/security{ + icon_state = "camera"; + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 +/obj/machinery/atmospherics/binary/passive_gate/on{ + dir = 4 }, /turf/simulated/floor/tiled, /area/security/eva) @@ -7938,25 +7922,35 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/security/hallway) "mj" = ( /obj/effect/floor_decal/borderfloor{ - dir = 4 + dir = 1; + pixel_y = 0 }, /obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/simulated/floor/tiled, /area/security/hallway) @@ -8258,45 +8252,23 @@ /turf/simulated/floor, /area/lawoffice) "mK" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/light{ - icon_state = "tube1"; - dir = 8 - }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/red/border, +/obj/effect/floor_decal/borderfloor/corner2, +/obj/effect/floor_decal/corner/red/bordercorner2, +/obj/machinery/light, /turf/simulated/floor/tiled, /area/security/hallway) "mL" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 6 - }, -/obj/effect/floor_decal/corner/red/bordercorner2{ - dir = 6 +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/red/border, +/obj/item/device/radio/intercom{ + dir = 2; + pixel_y = -24 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/security/hallway) "mM" = ( @@ -8642,14 +8614,13 @@ /turf/simulated/wall, /area/security/hallway) "np" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 }, /turf/simulated/floor/tiled, /area/security/hallway) @@ -8761,32 +8732,16 @@ /area/tether/exploration) "nA" = ( /obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 6 - }, -/obj/effect/floor_decal/corner/red/bordercorner2{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/effect/floor_decal/corner/red/border{ + dir = 8 }, -/obj/structure/disposalpipe/segment, -/obj/structure/extinguisher_cabinet{ - dir = 8; - icon_state = "extinguisher_closed"; - pixel_x = 30 +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/bordercorner2{ + dir = 8 }, /turf/simulated/floor/tiled, /area/security/hallway) @@ -9653,14 +9608,33 @@ /turf/simulated/floor/wood, /area/crew_quarters/heads/hos) "oY" = ( -/obj/structure/table/steel, -/obj/item/weapon/storage/box/lights/mixed, -/obj/item/weapon/storage/box/lights/mixed, -/obj/machinery/light_switch{ - pixel_y = -25 +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/effect/floor_decal/corner/red/bordercorner2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/extinguisher_cabinet{ + dir = 8; + icon_state = "extinguisher_closed"; + pixel_x = 30 }, /turf/simulated/floor/tiled, -/area/maintenance/station/cargo) +/area/security/hallway) "oZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -10097,13 +10071,28 @@ /turf/simulated/floor, /area/maintenance/station/ai) "pB" = ( -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 +/obj/machinery/door/firedoor/glass, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/maintenance/station/cargo) +/obj/machinery/door/airlock/glass_security{ + id_tag = "detdoor"; + name = "Forensics Lab"; + req_access = list(4) + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/security/forensics) "pC" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -10112,33 +10101,74 @@ /turf/simulated/floor/wood, /area/crew_quarters/heads/hos) "pD" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock{ - name = "Secondary Janitorial Closet"; - req_access = list(26) +/obj/effect/floor_decal/borderfloor{ + dir = 1; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/maintenance/station/cargo) -"pE" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/red/border, -/obj/effect/floor_decal/borderfloor/corner2, -/obj/effect/floor_decal/corner/red/bordercorner2, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j1"; + dir = 4 + }, +/obj/machinery/camera/network/security, +/turf/simulated/floor/tiled, +/area/security/hallway) +"pE" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + dir = 1; + icon_state = "extinguisher_closed"; + pixel_y = 32 }, -/obj/machinery/light, /turf/simulated/floor/tiled, /area/security/hallway) "pF" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/red/border, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/effect/floor_decal/borderfloor/corner2{ dir = 9 }, -/obj/item/device/radio/intercom{ - dir = 2; - pixel_y = -24 +/obj/effect/floor_decal/corner/red/bordercorner2{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 }, /turf/simulated/floor/tiled, /area/security/hallway) @@ -10452,13 +10482,14 @@ /turf/simulated/floor/tiled, /area/security/security_processing) "ql" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, /obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, /turf/simulated/floor/tiled, /area/security/hallway) @@ -10807,20 +10838,16 @@ /turf/simulated/floor/tiled, /area/hallway/station/upper) "qR" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 8 - }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/red/border, /obj/effect/floor_decal/borderfloor/corner2{ - dir = 8 + dir = 9 }, /obj/effect/floor_decal/corner/red/bordercorner2{ - dir = 8 + dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 }, /turf/simulated/floor/tiled, /area/security/hallway) @@ -11041,31 +11068,13 @@ /turf/simulated/floor/tiled/white, /area/security/forensics) "rl" = ( -/obj/machinery/door/firedoor/glass, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 }, -/obj/machinery/door/airlock/glass_security{ - id_tag = "detdoor"; - name = "Forensics Lab"; - req_access = list(4) - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/security/forensics) +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/hallway/station/upper) "rm" = ( /obj/structure/cable/green{ d1 = 4; @@ -12246,32 +12255,24 @@ /turf/simulated/floor/tiled, /area/security/lobby) "sX" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1; - pixel_y = 0 - }, -/obj/effect/floor_decal/corner/red/border{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ +/obj/structure/cable{ d1 = 2; d2 = 8; icon_state = "2-8" }, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 4 +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 }, -/obj/machinery/camera/network/security, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, -/area/security/hallway) +/area/hallway/station/upper) "sY" = ( /obj/effect/floor_decal/borderfloor{ dir = 1; @@ -12414,38 +12415,23 @@ /turf/simulated/floor/tiled, /area/security/hallway) "tg" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1; - pixel_y = 0 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/effect/floor_decal/corner/red/border{ - dir = 1 +/obj/effect/floor_decal/corner/lightgrey{ + dir = 9 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/effect/floor_decal/corner/lightgrey{ + dir = 6 }, /obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet{ dir = 1; - icon_state = "extinguisher_closed"; - pixel_y = 32 + icon_state = "pipe-c" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, -/area/security/hallway) +/area/hallway/station/upper) "th" = ( /obj/effect/floor_decal/borderfloor/corner{ dir = 1 @@ -12954,17 +12940,10 @@ /turf/simulated/floor/tiled, /area/security/hallway) "tU" = ( -/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/structure/reagent_dispensers/watertank, +/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled, -/area/security/hallway) +/area/maintenance/station/cargo) "tV" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/red/border, @@ -13050,19 +13029,12 @@ /turf/simulated/floor/tiled, /area/security/hallway) "ub" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/red/border, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 9 - }, -/obj/effect/floor_decal/corner/red/bordercorner2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, +/obj/structure/mopbucket, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/item/weapon/mop, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled, -/area/security/hallway) +/area/maintenance/station/cargo) "uc" = ( /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 8 @@ -13829,15 +13801,15 @@ /turf/simulated/floor, /area/maintenance/station/ai) "vp" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 1; - icon_state = "pipe-j1s"; - name = "QM Office"; - sortType = "QM Office" +/obj/structure/cable{ + icon_state = "1-2" }, +/obj/machinery/door/airlock/maintenance/common, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/turf/simulated/floor, +/area/maintenance/station/cargo) "vq" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -15479,13 +15451,18 @@ /turf/simulated/floor/tiled, /area/hallway/station/upper) "xV" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/table/steel, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/weapon/storage/box/lights/mixed, +/obj/machinery/light_switch{ + pixel_y = -25 + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "intact-supply"; dir = 5 }, /turf/simulated/floor/tiled, -/area/hallway/station/upper) +/area/maintenance/station/cargo) "xW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -16073,22 +16050,16 @@ /turf/simulated/floor/tiled, /area/hallway/station/upper) "yP" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" +/obj/machinery/alarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lightgrey/border, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /turf/simulated/floor/tiled, -/area/hallway/station/upper) +/area/maintenance/station/cargo) "yQ" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/lightgrey/border, @@ -16580,21 +16551,15 @@ /turf/simulated/floor/plating, /area/maintenance/station/cargo) "zE" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/effect/floor_decal/corner/lightgrey{ - dir = 9 - }, -/obj/effect/floor_decal/corner/lightgrey{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 5 }, /turf/simulated/floor/tiled, -/area/hallway/station/upper) +/area/maintenance/station/cargo) "zF" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -17356,12 +17321,15 @@ /turf/simulated/floor/tiled/white, /area/medical/reception) "AG" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock{ + name = "Secondary Janitorial Closet"; + req_access = list(26) }, -/obj/machinery/door/airlock/maintenance/common, -/obj/machinery/door/firedoor/border_only, -/turf/simulated/floor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, /area/maintenance/station/cargo) "AH" = ( /turf/simulated/wall, @@ -18036,10 +18004,19 @@ /turf/simulated/floor, /area/maintenance/station/cargo) "BI" = ( -/obj/structure/mopbucket, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/item/weapon/mop, -/turf/simulated/floor/tiled, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor, /area/maintenance/station/cargo) "BJ" = ( /obj/structure/grille, @@ -18054,9 +18031,10 @@ /turf/simulated/floor/plating, /area/medical/chemistry) "BK" = ( -/obj/structure/reagent_dispensers/watertank, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden, /turf/simulated/floor/tiled, -/area/maintenance/station/cargo) +/area/security/eva) "BL" = ( /obj/machinery/embedded_controller/radio/simple_docking_controller{ frequency = 1380; @@ -18686,16 +18664,15 @@ /turf/simulated/floor/tiled, /area/quartermaster/office) "CL" = ( -/obj/structure/disposalpipe/sortjunction/flipped{ +/obj/structure/disposalpipe/sortjunction{ dir = 1; - sortType = "Cargo Bay"; - name = "Cargo Bay" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + icon_state = "pipe-j1s"; + name = "Cargo Bay"; + sortType = "Cargo Bay" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, -/area/quartermaster/storage) +/area/quartermaster/office) "CM" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -19733,10 +19710,16 @@ /turf/simulated/floor/wood, /area/quartermaster/qm) "Et" = ( -/obj/structure/shuttle/engine/propulsion, -/turf/simulated/floor/reinforced, -/turf/simulated/shuttle/plating/airless/carry, -/area/shuttle/excursion/tether) +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 1; + name = "QM Office"; + sortType = "QM Office" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/storage) "Eu" = ( /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, @@ -22328,6 +22311,9 @@ "Im" = ( /obj/structure/closet/crate, /obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/camera/network/cargo{ + dir = 4 + }, /turf/simulated/floor/tiled/steel, /area/quartermaster/warehouse) "In" = ( @@ -25134,10 +25120,6 @@ icon_state = "intact-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "intact-scrubbers"; - dir = 4 - }, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -26684,20 +26666,10 @@ /turf/simulated/floor/airless, /area/medical/virology) "PA" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/glass_medical{ - name = "Virology Laboratory"; - req_access = list(39) - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/turf/simulated/floor/tiled/white, -/area/medical/virology) +/obj/structure/shuttle/engine/propulsion, +/turf/simulated/floor/reinforced, +/turf/simulated/shuttle/plating/airless/carry, +/area/shuttle/excursion/tether) "PB" = ( /turf/simulated/wall/r_wall, /area/medical/virologyisolation) @@ -27134,6 +27106,25 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/medical_restroom) "Qs" = ( +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/glass_medical{ + name = "Virology Laboratory"; + req_access = list(39) + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"Qt" = ( +/turf/simulated/wall, +/area/tether/exploration) +"Qu" = ( /obj/structure/shuttle/engine/propulsion{ dir = 8; icon_state = "propulsion_r" @@ -27141,9 +27132,6 @@ /turf/space, /turf/simulated/shuttle/plating/airless/carry, /area/shuttle/large_escape_pod1/station) -"Qt" = ( -/turf/simulated/wall, -/area/tether/exploration) "Qw" = ( /obj/effect/floor_decal/techfloor{ dir = 8 @@ -28479,16 +28467,6 @@ }, /turf/simulated/floor/wood, /area/security/breakroom) -"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) "Us" = ( /obj/structure/bed/chair/shuttle, /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -29541,9 +29519,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled/steel_ridged, /area/shuttle/excursion/tether) -"Zc" = ( -/turf/simulated/floor/tiled, -/area/maintenance/station/cargo) "Zd" = ( /obj/machinery/conveyor{ dir = 4; @@ -34768,7 +34743,7 @@ av ma qd qC -rl +pB qd qC qC @@ -35190,8 +35165,8 @@ nk nJ eK mh -fm -pE +mj +mK fH qF rn @@ -35333,7 +35308,7 @@ SE od mh pd -pF +mL fH qG ro @@ -35894,8 +35869,8 @@ ip fD ga lz -mi -dX +ej +fm ew lz lz @@ -36036,8 +36011,8 @@ jK QW lb lA -mj eo +jl eE nN nN @@ -36049,7 +36024,7 @@ lA rs lA DO -tT +pF mJ vA wh @@ -36190,8 +36165,8 @@ oz oz oz oz -sX -tU +pD +ql uM vB wh @@ -37160,7 +37135,7 @@ aC aR bf bs -ej +iR cf cT jy @@ -37610,8 +37585,8 @@ qk lw lw oA -tg -ub +pE +qR uV vJ wp @@ -37730,8 +37705,8 @@ cv iC bP lc +cM cX -jz ik cM cM @@ -37741,15 +37716,15 @@ cM UC lE lE -mK -np +jz +mi nP oi lE lE pQ -ql -qR +np +nA lE aK th @@ -37872,7 +37847,7 @@ in iD bQ co -jl +kr jA im jU @@ -37883,7 +37858,7 @@ hR ld lF mk -mL +oG nq nQ oj @@ -37891,7 +37866,7 @@ oG pq pR qm -nA +oY rz aL ti @@ -38506,7 +38481,7 @@ Pb Pi Pp Pv -PA +Qs PE PO PT @@ -39142,9 +39117,9 @@ gj gl gx ar +am +bJ gY -hv -hP bm bz bw @@ -39284,9 +39259,9 @@ gg ac ag ak -am ax -kp +cp +hv bm bA bW @@ -39353,7 +39328,7 @@ Qp Qq Qq Qq -Qs +Qu NL vt vt @@ -39427,8 +39402,8 @@ aU aU aU aU -ay -cp +dX +hw bm bB by @@ -39568,9 +39543,9 @@ aa aa aa bc -bJ -Ur +ay gX +kp bm bm bm @@ -39712,7 +39687,7 @@ aa bc gZ ha -hw +BK an dw fc @@ -40459,8 +40434,8 @@ xb xR eR AH -BK -oY +tU +xV AH wf BD @@ -40576,7 +40551,7 @@ Zy WG dj XA -Et +PA ms Oz be @@ -40602,7 +40577,7 @@ xS fF AH jV -pB +yP AH Ai BD @@ -40718,7 +40693,7 @@ UJ Xb dj XN -Et +PA ms Xq be @@ -40743,8 +40718,8 @@ xd xT fQ AH -BI -Zc +ub +zE AH Aj BD @@ -40860,7 +40835,7 @@ iW WS dj XN -Et +PA ms Xq be @@ -40886,7 +40861,7 @@ xU yO AH AH -pD +AG AH Ak BD @@ -41024,11 +40999,11 @@ vd vT SH xf -xV -yP -zE -AG -BH +rl +sX +tg +vp +BI BH BH Wm @@ -41143,7 +41118,7 @@ jZ WR Xo XN -Et +PA cK ms Xq @@ -41711,7 +41686,7 @@ ea kx dj XN -Et +PA cK ms mq @@ -41996,7 +41971,7 @@ kQ TG dj XN -Et +PA ms mq be @@ -42138,7 +42113,7 @@ kR Vd dj XN -Et +PA ms QL be @@ -42280,7 +42255,7 @@ ZE ZB dj XB -Et +PA ms Sq be @@ -43292,7 +43267,7 @@ rW sI tD uD -vp +CL uD uD xr @@ -43301,7 +43276,7 @@ za zQ AS BT -CL +Et BT Ew Ew diff --git a/maps/tether/tether-10-colony.dmm b/maps/tether/tether-10-colony.dmm index 10cdf055d3..e27ea01c40 100644 --- a/maps/tether/tether-10-colony.dmm +++ b/maps/tether/tether-10-colony.dmm @@ -17623,7 +17623,8 @@ cur_coils = 4; input_attempt = 1; input_level = 1e+006; - output_level = 1e+006 + output_level = 1e+006; + RCon = 0 }, /obj/structure/cable/cyan{ d2 = 2; diff --git a/maps/tether/tether_areas2.dm b/maps/tether/tether_areas2.dm index a20cb2fe4d..f8a0de761e 100644 --- a/maps/tether/tether_areas2.dm +++ b/maps/tether/tether_areas2.dm @@ -284,7 +284,8 @@ name = "Atmospherics Gas Storage" icon_state = "atmos" -/area/engineering/atmos/intake +//TFF 11/12/19 - Minor refactor, makes mice spawn only in Atmos. +/area/engineering/atmos_intake name = "\improper Atmospherics Intake" icon_state = "atmos" sound_env = MOUNTAINS diff --git a/maps/tether/tether_defines.dm b/maps/tether/tether_defines.dm index 3dcbeb82eb..540d815e40 100644 --- a/maps/tether/tether_defines.dm +++ b/maps/tether/tether_defines.dm @@ -113,8 +113,9 @@ /area/crew_quarters/sleep/Dorm_5/holo, /area/crew_quarters/sleep/Dorm_7/holo, /area/rnd/miscellaneous_lab) //TFF 31/8/19 - exempt new construction site from unit tests + //TFF 11/12/19 - Minor refactor, makes mice spawn only in Atmos. unit_test_exempt_from_atmos = list( - /area/engineering/atmos/intake, // Outside, + /area/engineering/atmos_intake, // Outside, /area/rnd/external, // Outside, /area/tether/surfacebase/mining_main/external, // Outside, /area/tether/surfacebase/mining_main/airlock, // Its an airlock, diff --git a/tools/Redirector/textprocs.dm b/tools/Redirector/textprocs.dm index b8d49ade72..950aa14df7 100644 --- a/tools/Redirector/textprocs.dm +++ b/tools/Redirector/textprocs.dm @@ -40,12 +40,12 @@ proc ///////////////////// dd_hasprefix(text, prefix) var/start = 1 - var/end = lentext(prefix) + 1 + var/end = length(prefix) + 1 return findtext(text, prefix, start, end) dd_hasPrefix(text, prefix) var/start = 1 - var/end = lentext(prefix) + 1 + var/end = length(prefix) + 1 return findtextEx(text, prefix, start, end) @@ -64,8 +64,8 @@ proc // Turning text into lists // ///////////////////////////// dd_text2list(text, separator) - var/textlength = lentext(text) - var/separatorlength = lentext(separator) + var/textlength = length(text) + var/separatorlength = length(separator) var/list/textList = new /list() var/searchPosition = 1 var/findPosition = 1 @@ -84,8 +84,8 @@ proc return textList dd_text2List(text, separator) - var/textlength = lentext(text) - var/separatorlength = lentext(separator) + var/textlength = length(text) + var/separatorlength = length(separator) var/list/textList = new /list() var/searchPosition = 1 var/findPosition = 1 diff --git a/vorestation.dme b/vorestation.dme index 1c7b2719eb..abd43e3418 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -24,6 +24,7 @@ #include "code\stylesheet.dm" #include "code\world.dm" #include "code\__datastructures\globals.dm" +#include "code\__defines\__513_compatibility.dm" #include "code\__defines\_compile_options.dm" #include "code\__defines\_globals.dm" #include "code\__defines\_lists.dm" @@ -95,6 +96,8 @@ #include "code\_global_vars\mobs.dm" #include "code\_global_vars\sensitive.dm" #include "code\_global_vars\lists\mapping.dm" +#include "code\_global_vars\lists\misc.dm" +#include "code\_global_vars\lists\species.dm" #include "code\_helpers\_global_objects.dm" #include "code\_helpers\_global_objects_vr.dm" #include "code\_helpers\_lists.dm" @@ -357,6 +360,7 @@ #include "code\datums\outfits\jobs\misc.dm" #include "code\datums\outfits\jobs\science.dm" #include "code\datums\outfits\jobs\security.dm" +#include "code\datums\outfits\jobs\special_vr.dm" #include "code\datums\outfits\jobs\YW.dm" #include "code\datums\outfits\military\fleet.dm" #include "code\datums\outfits\military\marines.dm" @@ -2097,6 +2101,14 @@ #include "code\modules\library\lib_machines.dm" #include "code\modules\library\lib_readme.dm" #include "code\modules\library\hardcode_library\_library.dm" +#include "code\modules\library\hardcode_library\fiction\APsychonaut.dm" +#include "code\modules\library\hardcode_library\fiction\battlefieldcommander.dm" +#include "code\modules\library\hardcode_library\fiction\PortedBooks.dm" +#include "code\modules\library\hardcode_library\fiction\schnayy.dm" +#include "code\modules\library\hardcode_library\non-fiction\PortedBooks.dm" +#include "code\modules\library\hardcode_library\reference\PortedBooks.dm" +#include "code\modules\library\hardcode_library\reference\Schnayy.dm" +#include "code\modules\library\hardcode_library\religious\PortedBooks.dm" #include "code\modules\lighting\lighting_area.dm" #include "code\modules\lighting\lighting_atom.dm" #include "code\modules\lighting\lighting_corner.dm" @@ -2201,6 +2213,8 @@ #include "code\modules\mob\_modifiers\traits.dm" #include "code\modules\mob\_modifiers\traits_phobias.dm" #include "code\modules\mob\_modifiers\unholy.dm" +#include "code\modules\mob\dead\corpse.dm" +#include "code\modules\mob\dead\corpse_vr.dm" #include "code\modules\mob\dead\death.dm" #include "code\modules\mob\dead\observer\free_vr.dm" #include "code\modules\mob\dead\observer\login.dm" @@ -2311,6 +2325,7 @@ #include "code\modules\mob\living\carbon\human\human_movement.dm" #include "code\modules\mob\living\carbon\human\human_organs.dm" #include "code\modules\mob\living\carbon\human\human_powers.dm" +#include "code\modules\mob\living\carbon\human\human_powers_vr.dm" #include "code\modules\mob\living\carbon\human\human_resist.dm" #include "code\modules\mob\living\carbon\human\human_species.dm" #include "code\modules\mob\living\carbon\human\human_species_vr.dm" @@ -2464,8 +2479,6 @@ #include "code\modules\mob\living\silicon\robot\subtypes\lost_drone.dm" #include "code\modules\mob\living\silicon\robot\subtypes\lost_drone_vr.dm" #include "code\modules\mob\living\silicon\robot\subtypes\syndicate.dm" -#include "code\modules\mob\living\simple_animal\corpse.dm" -#include "code\modules\mob\living\simple_animal\corpse_vr.dm" #include "code\modules\mob\living\simple_mob\appearance.dm" #include "code\modules\mob\living\simple_mob\combat.dm" #include "code\modules\mob\living\simple_mob\defense.dm"