From 870ac154807d49ce5a79c09ff3cb926d00e51e40 Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Sat, 16 Jun 2018 22:55:36 -0700 Subject: [PATCH 001/133] Improve how vending machine restocking works --- .../components/storage/concrete/rped.dm | 4 +- code/game/machinery/_machinery.dm | 2 +- code/game/machinery/constructable_frame.dm | 2 +- .../circuitboards/machine_circuitboards.dm | 61 +++-- code/game/objects/items/vending_items.dm | 33 ++- code/modules/cargo/packs.dm | 34 +-- code/modules/vending/_vending.dm | 234 +++++++++--------- code/modules/vending/autodrobe.dm | 2 - code/modules/vending/boozeomat.dm | 2 - code/modules/vending/cigarette.dm | 2 - code/modules/vending/clothesmate.dm | 2 - code/modules/vending/coffee.dm | 6 +- code/modules/vending/cola.dm | 2 - code/modules/vending/games.dm | 2 - code/modules/vending/medical.dm | 30 ++- code/modules/vending/medical_wall.dm | 7 +- code/modules/vending/snack.dm | 2 - code/modules/vending/toys.dm | 32 +-- code/modules/vending/wardrobes.dm | 34 --- 19 files changed, 225 insertions(+), 268 deletions(-) diff --git a/code/datums/components/storage/concrete/rped.dm b/code/datums/components/storage/concrete/rped.dm index eb895fd74ff..14f6fe28b38 100644 --- a/code/datums/components/storage/concrete/rped.dm +++ b/code/datums/components/storage/concrete/rped.dm @@ -20,7 +20,7 @@ allow_quick_gather = TRUE allow_quick_empty = TRUE click_gather = TRUE - max_w_class = WEIGHT_CLASS_NORMAL + max_w_class = WEIGHT_CLASS_BULKY // can fit vending refills max_combined_w_class = 800 max_items = 400 display_numerical_stacking = TRUE @@ -29,5 +29,5 @@ . = ..() if(!I.get_part_rating()) if (!stop_messages) - to_chat(M, "[parent] only accepts machine par ts!") + to_chat(M, "[parent] only accepts machine parts!") return FALSE diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 8a1bf7b029a..c1adb0e9d0a 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -419,7 +419,7 @@ Class Procs: B.moveToNullspace() SEND_SIGNAL(W, COMSIG_TRY_STORAGE_INSERT, A, null, null, TRUE) component_parts -= A - to_chat(user, "[A.name] replaced with [B.name].") + to_chat(user, "[capitalize(A.name)] replaced with [B.name].") shouldplaysound = 1 //Only play the sound when parts are actually replaced! break RefreshParts() diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 65f74d3811f..a709fdbd2a2 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -180,7 +180,7 @@ break if(component_check) P.play_tool_sound(src) - var/obj/machinery/new_machine = new src.circuit.build_path(src.loc, 1) + var/obj/machinery/new_machine = new circuit.build_path(loc, 1) new_machine.anchored = anchored new_machine.on_construction() for(var/obj/O in new_machine.component_parts) diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 66eb0ed98fd..55d69d6a741 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -215,37 +215,36 @@ name = "Booze-O-Mat Vendor (Machine Board)" desc = "You can turn the \"brand selection\" dial using a screwdriver." build_path = /obj/machinery/vending/boozeomat - req_components = list( - /obj/item/vending_refill/boozeomat = 3) + req_components = list(/obj/item/vending_refill/boozeomat = 1) - var/static/list/vending_names_paths = list(/obj/machinery/vending/boozeomat = "Booze-O-Mat", - /obj/machinery/vending/coffee = "Solar's Best Hot Drinks", - /obj/machinery/vending/snack = "Getmore Chocolate Corp", - /obj/machinery/vending/cola = "Robust Softdrinks", - /obj/machinery/vending/cigarette = "ShadyCigs Deluxe", - /obj/machinery/vending/games = "\improper Good Clean Fun", - /obj/machinery/vending/autodrobe = "AutoDrobe", - /obj/machinery/vending/wardrobe/sec_wardrobe = "SecDrobe", - /obj/machinery/vending/wardrobe/medi_wardrobe = "MediDrobe", - /obj/machinery/vending/wardrobe/engi_wardrobe = "EngiDrobe", - /obj/machinery/vending/wardrobe/atmos_wardrobe = "AtmosDrobe", - /obj/machinery/vending/wardrobe/cargo_wardrobe = "CargoDrobe", - /obj/machinery/vending/wardrobe/robo_wardrobe = "RoboDrobe", - /obj/machinery/vending/wardrobe/science_wardrobe = "SciDrobe", - /obj/machinery/vending/wardrobe/hydro_wardrobe = "HyDrobe", - /obj/machinery/vending/wardrobe/curator_wardrobe = "CuraDrobe", - /obj/machinery/vending/wardrobe/bar_wardrobe = "BarDrobe", - /obj/machinery/vending/wardrobe/chef_wardrobe = "ChefDrobe", - /obj/machinery/vending/wardrobe/jani_wardrobe = "JaniDrobe", - /obj/machinery/vending/wardrobe/law_wardrobe = "LawDrobe", - /obj/machinery/vending/wardrobe/chap_wardrobe = "ChapDrobe", - /obj/machinery/vending/wardrobe/chem_wardrobe = "ChemDrobe", - /obj/machinery/vending/wardrobe/gene_wardrobe = "GeneDrobe", - /obj/machinery/vending/wardrobe/viro_wardrobe = "ViroDrobe", - /obj/machinery/vending/clothing = "ClothesMate", - /obj/machinery/vending/medical = "NanoMed Plus", - /obj/machinery/vending/wallmed = "NanoMed") - needs_anchored = FALSE + var/static/list/vending_names_paths = list( + /obj/machinery/vending/boozeomat = "Booze-O-Mat", + /obj/machinery/vending/coffee = "Solar's Best Hot Drinks", + /obj/machinery/vending/snack = "Getmore Chocolate Corp", + /obj/machinery/vending/cola = "Robust Softdrinks", + /obj/machinery/vending/cigarette = "ShadyCigs Deluxe", + /obj/machinery/vending/games = "\improper Good Clean Fun", + /obj/machinery/vending/autodrobe = "AutoDrobe", + /obj/machinery/vending/wardrobe/sec_wardrobe = "SecDrobe", + /obj/machinery/vending/wardrobe/medi_wardrobe = "MediDrobe", + /obj/machinery/vending/wardrobe/engi_wardrobe = "EngiDrobe", + /obj/machinery/vending/wardrobe/atmos_wardrobe = "AtmosDrobe", + /obj/machinery/vending/wardrobe/cargo_wardrobe = "CargoDrobe", + /obj/machinery/vending/wardrobe/robo_wardrobe = "RoboDrobe", + /obj/machinery/vending/wardrobe/science_wardrobe = "SciDrobe", + /obj/machinery/vending/wardrobe/hydro_wardrobe = "HyDrobe", + /obj/machinery/vending/wardrobe/curator_wardrobe = "CuraDrobe", + /obj/machinery/vending/wardrobe/bar_wardrobe = "BarDrobe", + /obj/machinery/vending/wardrobe/chef_wardrobe = "ChefDrobe", + /obj/machinery/vending/wardrobe/jani_wardrobe = "JaniDrobe", + /obj/machinery/vending/wardrobe/law_wardrobe = "LawDrobe", + /obj/machinery/vending/wardrobe/chap_wardrobe = "ChapDrobe", + /obj/machinery/vending/wardrobe/chem_wardrobe = "ChemDrobe", + /obj/machinery/vending/wardrobe/gene_wardrobe = "GeneDrobe", + /obj/machinery/vending/wardrobe/viro_wardrobe = "ViroDrobe", + /obj/machinery/vending/clothing = "ClothesMate", + /obj/machinery/vending/medical = "NanoMed Plus", + /obj/machinery/vending/wallmed = "NanoMed") /obj/item/circuitboard/machine/vendor/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/screwdriver)) @@ -261,7 +260,7 @@ /obj/item/circuitboard/machine/vendor/proc/set_type(obj/machinery/vending/typepath) build_path = typepath name = "[vending_names_paths[build_path]] Vendor (Machine Board)" - req_components = list(initial(typepath.refill_canister) = initial(typepath.refill_count)) + req_components = list(initial(typepath.refill_canister) = 1) /obj/item/circuitboard/machine/vendor/apply_default_parts(obj/machinery/M) for(var/typepath in vending_names_paths) diff --git a/code/game/objects/items/vending_items.dm b/code/game/objects/items/vending_items.dm index 7a43a7d2554..3be12abf4fc 100644 --- a/code/game/objects/items/vending_items.dm +++ b/code/game/objects/items/vending_items.dm @@ -18,19 +18,34 @@ throw_range = 7 w_class = WEIGHT_CLASS_BULKY armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 30) - var/charges = list(0, 0, 0) //how many restocking "charges" the refill has for standard/contraband/coin products - var/init_charges = list(0, 0, 0) + // Built automatically from the corresponding vending machine. + // If null, considered to be full. Otherwise, is list(/typepath = amount). + var/list/products + var/list/contraband + var/list/premium -/obj/item/vending_refill/New(amt = -1) - ..() +/obj/item/vending_refill/Initialize(mapload) + . = ..() name = "\improper [machine_name] restocking unit" - if(isnum(amt) && amt > -1) - charges[1] = amt /obj/item/vending_refill/examine(mob/user) ..() - if(charges[1] > 0) - to_chat(user, "It can restock [charges[1]+charges[2]+charges[3]] item(s).") + var/num = get_part_rating() + if (num == INFINITY) + to_chat(user, "It's sealed tight, completely full of supplies.") + else if (num == 0) + to_chat(user, "It's empty!") else - to_chat(user, "It's empty!") \ No newline at end of file + to_chat(user, "It can restock [num] item\s.") + +/obj/item/vending_refill/get_part_rating() + if (!products || !contraband || !premium) + return INFINITY + . = 0 + for(var/key in products) + . += products[key] + for(var/key in contraband) + . += contraband[key] + for(var/key in premium) + . += premium[key] diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index fe4155a29b2..94d80952d73 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -1117,8 +1117,7 @@ desc = "Contains refills for medical vending machines." cost = 2000 contains = list(/obj/item/vending_refill/medical, - /obj/item/vending_refill/medical, - /obj/item/vending_refill/medical) + /obj/item/vending_refill/wallmed) crate_name = "medical vending crate" /datum/supply_pack/medical/virus @@ -1351,13 +1350,9 @@ /datum/supply_pack/service/vending/bartending name = "Bartending Supply Crate" - desc = "Bring on the booze with six vending machine refills, as well as a free book containing the well-kept secrets to the bartending trade!" + desc = "Bring on the booze with vending machine refills, as well as a free book containing the well-kept secrets to the bartending trade!" cost = 2000 contains = list(/obj/item/vending_refill/boozeomat, - /obj/item/vending_refill/boozeomat, - /obj/item/vending_refill/boozeomat, - /obj/item/vending_refill/coffee, - /obj/item/vending_refill/coffee, /obj/item/vending_refill/coffee, /obj/item/book/granter/action/drink_fling) crate_name = "bartending supply crate" @@ -1366,9 +1361,7 @@ name = "Cigarette Supply Crate" desc = "Don't believe the reports - smoke today! Contains cigarette vending machine refills." cost = 1500 - contains = list(/obj/item/vending_refill/cigarette, - /obj/item/vending_refill/cigarette, - /obj/item/vending_refill/cigarette) + contains = list(/obj/item/vending_refill/cigarette) crate_name = "cigarette supply crate" crate_type = /obj/structure/closet/crate @@ -1376,28 +1369,22 @@ name = "Games Supply Crate" desc = "Get your game on with these three game vending machine refills." cost = 1000 - contains = list(/obj/item/vending_refill/games, - /obj/item/vending_refill/games, - /obj/item/vending_refill/games) + contains = list(/obj/item/vending_refill/games) crate_name = "games supply crate" crate_type = /obj/structure/closet/crate /datum/supply_pack/service/vending/snack name = "Snack Supply Crate" - desc = "Three vending machine refills of cavity-bringin' goodness! The number one dentist recommended order!" + desc = "One vending machine refill of cavity-bringin' goodness! The number one dentist recommended order!" cost = 1500 - contains = list(/obj/item/vending_refill/snack, - /obj/item/vending_refill/snack, - /obj/item/vending_refill/snack) + contains = list(/obj/item/vending_refill/snack) crate_name = "snacks supply crate" /datum/supply_pack/service/vending/cola name = "Softdrinks Supply Crate" - desc = "Got whacked by a toolbox, but you still have those pesky teeth? Get rid of those pearly whites with these three soda machine refills, today!" + desc = "Got whacked by a toolbox, but you still have those pesky teeth? Get rid of those pearly whites with this soda machine refill, today!" cost = 1500 - contains = list(/obj/item/vending_refill/cola, - /obj/item/vending_refill/cola, - /obj/item/vending_refill/cola) + contains = list(/obj/item/vending_refill/cola) crate_name = "soft drinks supply crate" ////////////////////////////////////////////////////////////////////////////// @@ -1929,10 +1916,9 @@ /datum/supply_pack/costumes_toys/wardrobes/autodrobe name = "Autodrobe Supply Crate" - desc = "Autodrobe missing your favorite dress? Solve that issue today with these two autodrobe refills." + desc = "Autodrobe missing your favorite dress? Solve that issue today with this autodrobe refill." cost = 1500 - contains = list(/obj/item/vending_refill/autodrobe, - /obj/item/vending_refill/autodrobe) + contains = list(/obj/item/vending_refill/autodrobe) crate_name = "autodrobe supply crate" /datum/supply_pack/costumes_toys/wardrobes/cargo diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index 89bbee9d60d..b9112ddfded 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -1,7 +1,3 @@ -#define STANDARD_CHARGE 1 -#define CONTRABAND_CHARGE 2 -#define COIN_CHARGE 3 - /* * Vending machine types - Can be found under /code/modules/vending/ */ @@ -21,7 +17,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C */ /datum/data/vending_product - var/product_name = "generic" + name = "generic" var/product_path = null var/amount = 0 var/max_amount = 0 @@ -74,7 +70,6 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C var/dish_quants = list() //used by the snack machine's custom compartment to count dishes. var/obj/item/vending_refill/refill_canister = null //The type of refill canisters used by this machine. - var/refill_count = 3 //The number of canisters the vending machine uses /obj/machinery/vending/Initialize() var/build_inv = FALSE @@ -84,9 +79,9 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C . = ..() wires = new /datum/wires/vending(src) if(build_inv) //non-constructable vending machine - build_inventory(products) - build_inventory(contraband, 1) - build_inventory(premium, 0, 1) + build_inventory(products, product_records) + build_inventory(contraband, hidden_records) + build_inventory(premium, coin_records) slogan_list = splittext(product_slogans, ";") // So not all machines speak at the exact same time. @@ -102,17 +97,17 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C return ..() /obj/machinery/vending/RefreshParts() //Better would be to make constructable child - if(component_parts) - product_records = list() - hidden_records = list() - coin_records = list() - build_inventory(products, start_empty = 1) - build_inventory(contraband, 1, start_empty = 1) - build_inventory(premium, 0, 1, start_empty = 1) - for(var/obj/item/vending_refill/VR in component_parts) - refill_inventory(VR, product_records, STANDARD_CHARGE) - refill_inventory(VR, coin_records, COIN_CHARGE) - refill_inventory(VR, hidden_records, CONTRABAND_CHARGE) + if(!component_parts) + return + + product_records = list() + hidden_records = list() + coin_records = list() + build_inventory(products, product_records, start_empty = TRUE) + build_inventory(contraband, hidden_records, start_empty = TRUE) + build_inventory(premium, coin_records, start_empty = TRUE) + for(var/obj/item/vending_refill/VR in component_parts) + restock(VR) /obj/machinery/vending/deconstruct(disassembled = TRUE) if(!refill_canister) //the non constructable vendors drop metal instead of a machine frame. @@ -124,25 +119,33 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/machinery/vending/obj_break(damage_flag) if(!(stat & BROKEN) && !(flags_1 & NODECONSTRUCT_1)) - var/dump_amount = 0 - for(var/datum/data/vending_product/R in product_records) - if(R.amount <= 0) //Try to use a record that actually has something to dump. - continue - var/dump_path = R.product_path - if(!dump_path) - continue - - while(R.amount>0) - var/obj/O = new dump_path(loc) - step(O, pick(GLOB.alldirs)) //we only drop 20% of the total of each products and spread it - R.amount -= 5 //around to not fill the turf with too many objects. - dump_amount++ - if(dump_amount > 15) //so we don't drop too many items (e.g. ClothesMate) - break stat |= BROKEN icon_state = "[initial(icon_state)]-broken" -/obj/machinery/vending/proc/build_inventory(list/productlist, hidden=0, req_coin=0, start_empty = null) + var/dump_amount = 0 + var/found_anything = TRUE + while (found_anything) + found_anything = FALSE + for(var/record in shuffle(product_records)) + var/datum/data/vending_product/R = record + if(R.amount <= 0) //Try to use a record that actually has something to dump. + continue + var/dump_path = R.product_path + if(!dump_path) + continue + R.amount-- + // busting open a vendor will destroy some of the contents + if(found_anything && prob(80)) + continue + + var/obj/O = new dump_path(loc) + step(O, pick(GLOB.alldirs)) + found_anything = TRUE + dump_amount++ + if (dump_amount >= 16) + return + +/obj/machinery/vending/proc/build_inventory(list/productlist, list/recordlist, start_empty = FALSE) for(var/typepath in productlist) var/amount = productlist[typepath] if(isnull(amount)) @@ -150,47 +153,54 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C var/atom/temp = typepath var/datum/data/vending_product/R = new /datum/data/vending_product() - R.product_name = initial(temp.name) + R.name = initial(temp.name) R.product_path = typepath if(!start_empty) R.amount = amount R.max_amount = amount - R.display_color = pick("red","blue","green") + R.display_color = pick("#ff8080","#80ff80","#8080ff") + recordlist += R - if(hidden) - hidden_records += R - else if(req_coin) - coin_records += R - else - product_records += R +/obj/machinery/vending/proc/restock(obj/item/vending_refill/canister) + if (!canister.products) + canister.products = products.Copy() + if (!canister.contraband) + canister.contraband = contraband.Copy() + if (!canister.premium) + canister.premium = premium.Copy() + . = 0 + . += refill_inventory(canister.products, product_records) + . += refill_inventory(canister.contraband, hidden_records) + . += refill_inventory(canister.premium, coin_records) -/obj/machinery/vending/proc/refill_inventory(obj/item/vending_refill/refill, datum/data/vending_product/machine, var/charge_type = STANDARD_CHARGE) - var/total = 0 - var/to_restock = 0 +/obj/machinery/vending/proc/refill_inventory(list/productlist, list/recordlist) + . = 0 + for(var/R in recordlist) + var/datum/data/vending_product/record = R + var/diff = min(record.max_amount - record.amount, productlist[record.product_path]) + if (diff) + productlist[record.product_path] -= diff + record.amount += diff + . += diff - for(var/datum/data/vending_product/machine_content in machine) - if(machine_content.amount == 0 && refill.charges[charge_type] > 0) - machine_content.amount++ - refill.charges[charge_type]-- - total++ - to_restock += machine_content.max_amount - machine_content.amount - if(to_restock <= refill.charges[charge_type]) - for(var/datum/data/vending_product/machine_content in machine) - machine_content.amount = machine_content.max_amount - refill.charges[charge_type] -= to_restock - total += to_restock - else - var/tmp_charges = refill.charges[charge_type] - for(var/datum/data/vending_product/machine_content in machine) - if(refill.charges[charge_type] == 0) - break - var/restock = CEILING(((machine_content.max_amount - machine_content.amount)/to_restock)*tmp_charges, 1) - if(restock > refill.charges[charge_type]) - restock = refill.charges[charge_type] - machine_content.amount += restock - refill.charges[charge_type] -= restock - total += restock - return total +/obj/machinery/vending/proc/update_canister() + if (!component_parts) + return + + var/obj/item/vending_refill/R = locate() in component_parts + if (!R) + CRASH("Constructible vending machine did not have a refill canister") + return + + R.products = unbuild_inventory(product_records) + R.contraband = unbuild_inventory(hidden_records) + R.premium = unbuild_inventory(coin_records) + +/obj/machinery/vending/proc/unbuild_inventory(list/recordlist) + . = list() + for(var/R in recordlist) + var/datum/data/vending_product/record = R + .[record.product_path] += record.amount /obj/machinery/vending/crowbar_act(mob/living/user, obj/item/I) if(!component_parts) @@ -248,46 +258,52 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C bill = new S.type(src, 1) to_chat(user, "You insert [I] into [src].") return - else if(istype(I, refill_canister) && refill_canister != null) - if(stat & (BROKEN|NOPOWER)) - to_chat(user, "It does nothing.") - else if(panel_open) + else if(refill_canister && istype(I, refill_canister)) + if (!panel_open) + to_chat(user, "You should probably unscrew the service panel first.") + else if (stat & (BROKEN|NOPOWER)) + to_chat(user, "[src] does not respond.") + else //if the panel is open we attempt to refill the machine var/obj/item/vending_refill/canister = I - if(canister.charges[STANDARD_CHARGE] == 0) - to_chat(user, "This [canister.name] is empty!") + if(canister.get_part_rating() == 0) + to_chat(user, "[canister] is empty!") else - var/transfered = refill_inventory(canister,product_records,STANDARD_CHARGE) - transfered += refill_inventory(canister,coin_records,COIN_CHARGE) - transfered += refill_inventory(canister,hidden_records,CONTRABAND_CHARGE) - if(transfered) - to_chat(user, "You loaded [transfered] items in \the [name].") + // instantiate canister if needed + var/transferred = restock(canister) + if(transferred) + to_chat(user, "You loaded [transferred] items in [src].") else - to_chat(user, "The [name] is fully stocked.") + to_chat(user, "There's nothing to restock!") return - else - to_chat(user, "You should probably unscrew the service panel first.") else return ..() +/obj/machinery/vending/exchange_parts(mob/user, obj/item/storage/part_replacer/W) + if(!istype(W)) + return FALSE + if((flags_1 & NODECONSTRUCT_1) && !W.works_from_distance) + return FALSE + if(!component_parts || !refill_canister) + return FALSE + + var/moved = 0 + if(panel_open || W.works_from_distance) + if(W.works_from_distance) + display_parts(user) + for(var/I in W) + if(istype(I, refill_canister)) + moved += restock(I) + else + display_parts(user) + if(moved) + to_chat(user, "[moved] items restocked.") + W.play_rped_sound() + return TRUE + /obj/machinery/vending/on_deconstruction() - var/product_list = list(product_records, hidden_records, coin_records) - for(var/i=1, i<=3, i++) - for(var/datum/data/vending_product/machine_content in product_list[i]) - while(machine_content.amount !=0) - var/safety = 0 //to avoid infinite loop - for(var/obj/item/vending_refill/VR in component_parts) - safety++ - if(VR.charges[i] < VR.init_charges[i]) - VR.charges[i]++ - machine_content.amount-- - if(!machine_content.amount) - break - else - safety-- - if(safety <= 0) // all refill canisters are full - break - ..() + update_canister() + . = ..() /obj/machinery/vending/emag_act(mob/user) if(obj_flags & EMAGGED) @@ -323,7 +339,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C dat += "Vend " else dat += "Sold out " - dat += "[sanitize(R.product_name)]:" + dat += "[sanitize(R.name)]:" dat += " [R.amount]" dat += "" dat += "" @@ -358,17 +374,11 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C to_chat(usr, "There is no money in this machine.") return if(coin) - if(!usr.get_active_held_item()) - usr.put_in_hands(coin) - else - coin.forceMove(get_turf(src)) + usr.put_in_hands(coin) to_chat(usr, "You remove [coin] from [src].") coin = null if(bill) - if(!usr.get_active_held_item()) - usr.put_in_hands(bill) - else - bill.forceMove(get_turf(src)) + usr.put_in_hands(bill) to_chat(usr, "You remove [bill] from [src].") bill = null @@ -545,7 +555,3 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/machinery/vending/onTransitZ() return - -#undef STANDARD_CHARGE -#undef CONTRABAND_CHARGE -#undef COIN_CHARGE diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm index 71a3cffea95..b03ddc32e94 100644 --- a/code/modules/vending/autodrobe.dm +++ b/code/modules/vending/autodrobe.dm @@ -125,5 +125,3 @@ /obj/item/vending_refill/autodrobe machine_name = "AutoDrobe" icon_state = "refill_costume" - charges = list(32, 2, 3)// of 96 standard, 6 contraband, 9 premium - init_charges = list(32, 2, 3) diff --git a/code/modules/vending/boozeomat.dm b/code/modules/vending/boozeomat.dm index 09a421d1d57..0636b179504 100644 --- a/code/modules/vending/boozeomat.dm +++ b/code/modules/vending/boozeomat.dm @@ -62,5 +62,3 @@ /obj/item/vending_refill/boozeomat machine_name = "Booze-O-Mat" icon_state = "refill_booze" - charges = list(61, 4, 0)//of 182 standard, 12 contraband - init_charges = list(61, 4, 0) diff --git a/code/modules/vending/cigarette.dm b/code/modules/vending/cigarette.dm index 15b370833f1..e213473b22f 100644 --- a/code/modules/vending/cigarette.dm +++ b/code/modules/vending/cigarette.dm @@ -23,8 +23,6 @@ /obj/item/vending_refill/cigarette machine_name = "ShadyCigs Deluxe" icon_state = "refill_smoke" - charges = list(12, 3, 2)// of 36 standard, 9 contraband, 6 premium - init_charges = list(12, 3, 2) /obj/machinery/vending/cigarette/pre_throw(obj/item/I) if(istype(I, /obj/item/lighter)) diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm index f3ab636fb05..6559d9b1fe6 100644 --- a/code/modules/vending/clothesmate.dm +++ b/code/modules/vending/clothesmate.dm @@ -118,5 +118,3 @@ /obj/item/vending_refill/clothing machine_name = "ClothesMate" icon_state = "refill_clothes" - charges = list(37, 4, 4)// of 111 standard, 12 contraband, 10 premium(?) - init_charges = list(37, 4, 4) diff --git a/code/modules/vending/coffee.dm b/code/modules/vending/coffee.dm index d70cf4ae76a..6ac9dd648d1 100644 --- a/code/modules/vending/coffee.dm +++ b/code/modules/vending/coffee.dm @@ -4,8 +4,8 @@ product_ads = "Have a drink!;Drink up!;It's good for you!;Would you like a hot joe?;I'd kill for some coffee!;The best beans in the galaxy.;Only the finest brew for you.;Mmmm. Nothing like a coffee.;I like coffee, don't you?;Coffee helps you work!;Try some tea.;We hope you like the best!;Try our new chocolate!;Admin conspiracies" icon_state = "coffee" icon_vend = "coffee-vend" - products = list(/obj/item/reagent_containers/food/drinks/coffee = 25, - /obj/item/reagent_containers/food/drinks/mug/tea = 25, + products = list(/obj/item/reagent_containers/food/drinks/coffee = 25, + /obj/item/reagent_containers/food/drinks/mug/tea = 25, /obj/item/reagent_containers/food/drinks/mug/coco = 25) contraband = list(/obj/item/reagent_containers/food/drinks/ice = 12) refill_canister = /obj/item/vending_refill/coffee @@ -13,5 +13,3 @@ /obj/item/vending_refill/coffee machine_name = "Solar's Best Hot Drinks" icon_state = "refill_joe" - charges = list(25, 4, 0)//of 75 standard, 12 contraband - init_charges = list(25, 4, 0) diff --git a/code/modules/vending/cola.dm b/code/modules/vending/cola.dm index e675b29f811..f61c392ff71 100644 --- a/code/modules/vending/cola.dm +++ b/code/modules/vending/cola.dm @@ -22,8 +22,6 @@ /obj/item/vending_refill/cola machine_name = "Robust Softdrinks" icon_state = "refill_cola" - charges = list(30, 4, 1)//of 90 standard, 12 contraband, 1 premium - init_charges = list(30, 4, 1) /obj/machinery/vending/cola/random name = "\improper Random Drinkies" diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm index f76f67af46a..a3e24f53f6c 100644 --- a/code/modules/vending/games.dm +++ b/code/modules/vending/games.dm @@ -13,5 +13,3 @@ /obj/item/vending_refill/games machine_name = "\improper Good Clean Fun" icon_state = "refill_games" - charges = list(7, 3, 0) //of 21 standard, 9 contraband - init_charges = list(7, 3, 0) diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm index bb857d85d7f..bea449845c8 100644 --- a/code/modules/vending/medical.dm +++ b/code/modules/vending/medical.dm @@ -5,24 +5,24 @@ icon_deny = "med-deny" product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!" req_access = list(ACCESS_MEDICAL) - products = list(/obj/item/reagent_containers/syringe = 12, - /obj/item/reagent_containers/dropper = 3, - /obj/item/healthanalyzer = 4, - /obj/item/sensor_device = 2, + products = list(/obj/item/reagent_containers/syringe = 12, + /obj/item/reagent_containers/dropper = 3, + /obj/item/healthanalyzer = 4, + /obj/item/sensor_device = 2, /obj/item/pinpointer/crew = 2, /obj/item/reagent_containers/medspray/sterilizine = 1, - /obj/item/stack/medical/gauze = 8, - /obj/item/reagent_containers/pill/patch/styptic = 5, - /obj/item/reagent_containers/medspray/styptic = 2, - /obj/item/reagent_containers/pill/patch/silver_sulf = 5, + /obj/item/stack/medical/gauze = 8, + /obj/item/reagent_containers/pill/patch/styptic = 5, + /obj/item/reagent_containers/medspray/styptic = 2, + /obj/item/reagent_containers/pill/patch/silver_sulf = 5, /obj/item/reagent_containers/medspray/silver_sulf = 2, /obj/item/reagent_containers/pill/insulin = 10, - /obj/item/reagent_containers/pill/salbutamol = 2, - /obj/item/reagent_containers/glass/bottle/charcoal = 4, - /obj/item/reagent_containers/glass/bottle/epinephrine = 4, + /obj/item/reagent_containers/pill/salbutamol = 2, + /obj/item/reagent_containers/glass/bottle/charcoal = 4, + /obj/item/reagent_containers/glass/bottle/epinephrine = 4, /obj/item/reagent_containers/glass/bottle/salglu_solution = 3, - /obj/item/reagent_containers/glass/bottle/morphine = 4, - /obj/item/reagent_containers/glass/bottle/toxin = 3, + /obj/item/reagent_containers/glass/bottle/morphine = 4, + /obj/item/reagent_containers/glass/bottle/toxin = 3, /obj/item/reagent_containers/syringe/antiviral = 6) contraband = list(/obj/item/reagent_containers/pill/tox = 3, /obj/item/reagent_containers/pill/morphine = 4, @@ -36,7 +36,5 @@ refill_canister = /obj/item/vending_refill/medical /obj/item/vending_refill/medical - machine_name = "NanoMed" + machine_name = "NanoMed Plus" icon_state = "refill_medical" - charges = list(26, 5, 3)// of 76 standard, 13 contraband, 8 premium - init_charges = list(26, 5, 3) diff --git a/code/modules/vending/medical_wall.dm b/code/modules/vending/medical_wall.dm index 6b5005eee42..ef19ce3b9b3 100644 --- a/code/modules/vending/medical_wall.dm +++ b/code/modules/vending/medical_wall.dm @@ -15,5 +15,8 @@ /obj/item/reagent_containers/pill/morphine = 2) armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF - refill_canister = /obj/item/vending_refill/medical - refill_count = 1 + refill_canister = /obj/item/vending_refill/wallmed + +/obj/item/vending_refill/wallmed + machine_name = "NanoMed" + icon_state = "refill_medical" diff --git a/code/modules/vending/snack.dm b/code/modules/vending/snack.dm index 82c31d1439c..69e510ad5a0 100644 --- a/code/modules/vending/snack.dm +++ b/code/modules/vending/snack.dm @@ -17,8 +17,6 @@ /obj/item/vending_refill/snack machine_name = "Getmore Chocolate Corp" - charges = list(12, 2, 0)//of 36 standard, 6 contraband - init_charges = list(12, 2, 0) /obj/machinery/vending/snack/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/reagent_containers/food/snacks)) diff --git a/code/modules/vending/toys.dm b/code/modules/vending/toys.dm index fc2f9c59b93..e5bbdf8e256 100644 --- a/code/modules/vending/toys.dm +++ b/code/modules/vending/toys.dm @@ -6,20 +6,22 @@ product_ads = "Feel robust with your toys!;Express your inner child today!;Toy weapons don't kill people, but valid hunters do!;Who needs responsibilities when you have toy weapons?;Make your next murder FUN!" vend_reply = "Come back for more!" circuit = /obj/item/circuitboard/machine/vending/donksofttoyvendor - products = list(/obj/item/gun/ballistic/automatic/toy/unrestricted = 10, - /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted = 10, - /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10, - /obj/item/toy/sword = 10, - /obj/item/ammo_box/foambox = 20, - /obj/item/toy/foamblade = 10, - /obj/item/toy/syndicateballoon = 10, - /obj/item/clothing/suit/syndicatefake = 5, - /obj/item/clothing/head/syndicatefake = 5) - contraband = list(/obj/item/gun/ballistic/shotgun/toy/crossbow = 10, - /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted = 10, - /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted = 10, - /obj/item/toy/katana = 10, - /obj/item/twohanded/dualsaber/toy = 5) + products = list( + /obj/item/gun/ballistic/automatic/toy/unrestricted = 10, + /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted = 10, + /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10, + /obj/item/toy/sword = 10, + /obj/item/ammo_box/foambox = 20, + /obj/item/toy/foamblade = 10, + /obj/item/toy/syndicateballoon = 10, + /obj/item/clothing/suit/syndicatefake = 5, + /obj/item/clothing/head/syndicatefake = 5) + contraband = list( + /obj/item/gun/ballistic/shotgun/toy/crossbow = 10, + /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted = 10, + /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted = 10, + /obj/item/toy/katana = 10, + /obj/item/twohanded/dualsaber/toy = 5) armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/donksoft @@ -27,5 +29,3 @@ /obj/item/vending_refill/donksoft machine_name = "Donksoft Toy Vendor" icon_state = "refill_donksoft" - charges = list(32,28,0)// of 90 standard, 75 contraband, 0 premium - init_charges = list(32,28,0) diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index 69f3e4b168a..738c7e46003 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -26,8 +26,6 @@ /obj/item/vending_refill/wardrobe/sec_wardrobe machine_name = "SecDrobe" - charges = list(10, 0, 3) - init_charges = list(10, 0, 3) /obj/machinery/vending/wardrobe/medi_wardrobe name = "\improper MediDrobe" @@ -56,8 +54,6 @@ /obj/item/vending_refill/wardrobe/medi_wardrobe machine_name = "MediDrobe" - charges = list(10, 0, 0) - init_charges = list(10, 0, 0) /obj/machinery/vending/wardrobe/engi_wardrobe name = "EngiDrobe" @@ -78,8 +74,6 @@ /obj/item/vending_refill/wardrobe/engi_wardrobe machine_name = "EngiDrobe" - charges = list(7, 0, 0) - init_charges = list(7, 0, 0) /obj/machinery/vending/wardrobe/atmos_wardrobe name = "AtmosDrobe" @@ -98,8 +92,6 @@ /obj/item/vending_refill/wardrobe/atmos_wardrobe machine_name = "AtmosDrobe" - charges = list(5, 0, 0) - init_charges = list(5, 0, 0) /obj/machinery/vending/wardrobe/cargo_wardrobe name = "CargoDrobe" @@ -117,8 +109,6 @@ /obj/item/vending_refill/wardrobe/cargo_wardrobe machine_name = "CargoDrobe" - charges = list(5, 0, 0) - init_charges = list(5, 0, 0) /obj/machinery/vending/wardrobe/robo_wardrobe name = "RoboDrobe" @@ -137,8 +127,6 @@ /obj/item/vending_refill/wardrobe/robo_wardrobe machine_name = "RoboDrobe" - charges = list(4, 0, 0) - init_charges = list(4, 0, 0) /obj/machinery/vending/wardrobe/science_wardrobe name = "SciDrobe" @@ -159,8 +147,6 @@ /obj/item/vending_refill/wardrobe/science_wardrobe machine_name = "SciDrobe" - charges = list(8, 0, 0) - init_charges = list(8, 0, 0) /obj/machinery/vending/wardrobe/hydro_wardrobe name = "Hydrobe" @@ -179,8 +165,6 @@ /obj/item/vending_refill/wardrobe/hydro_wardrobe machine_name = "HyDrobe" - charges = list(6, 0, 0) - init_charges = list(6, 0, 0) /obj/machinery/vending/wardrobe/curator_wardrobe name = "CuraDrobe" @@ -198,8 +182,6 @@ /obj/item/vending_refill/wardrobe/curator_wardrobe machine_name = "CuraDrobe" - charges = list(3, 0, 0) - init_charges = list(3, 0, 0) /obj/machinery/vending/wardrobe/bar_wardrobe name = "BarDrobe" @@ -227,8 +209,6 @@ /obj/item/vending_refill/wardrobe/bar_wardrobe machine_name = "BarDrobe" - charges = list(8, 0, 0) - init_charges = list(8, 0, 0) /obj/machinery/vending/wardrobe/chef_wardrobe name = "ChefDrobe" @@ -251,8 +231,6 @@ /obj/item/vending_refill/wardrobe/chef_wardrobe machine_name = "ChefDrobe" - charges = list(6, 0, 0) - init_charges = list(6, 0, 0) /obj/machinery/vending/wardrobe/jani_wardrobe name = "JaniDrobe" @@ -279,8 +257,6 @@ /obj/item/vending_refill/wardrobe/jani_wardrobe machine_name = "JaniDrobe" - charges = list(7, 0, 0) - init_charges = list(7, 0, 0) /obj/machinery/vending/wardrobe/law_wardrobe name = "LawDrobe" @@ -303,8 +279,6 @@ /obj/item/vending_refill/wardrobe/law_wardrobe machine_name = "LawDrobe" - charges = list(5, 0, 0) - init_charges = list(5, 0, 0) /obj/machinery/vending/wardrobe/chap_wardrobe name = "ChapDrobe" @@ -325,8 +299,6 @@ /obj/item/vending_refill/wardrobe/chap_wardrobe machine_name = "ChapDrobe" - charges = list(6, 0, 0) - init_charges = list(6, 0, 0) /obj/machinery/vending/wardrobe/chem_wardrobe name = "ChemDrobe" @@ -344,8 +316,6 @@ /obj/item/vending_refill/wardrobe/chem_wardrobe machine_name = "ChemDrobe" - charges = list(4, 0, 0) - init_charges = list(4, 0, 0) /obj/machinery/vending/wardrobe/gene_wardrobe name = "GeneDrobe" @@ -362,8 +332,6 @@ /obj/item/vending_refill/wardrobe/gene_wardrobe machine_name = "GeneDrobe" - charges = list(4, 0, 0) - init_charges = list(4, 0, 0) /obj/machinery/vending/wardrobe/viro_wardrobe name = "ViroDrobe" @@ -381,5 +349,3 @@ /obj/item/vending_refill/wardrobe/viro_wardrobe machine_name = "ViroDrobe" - charges = list(4, 0, 0) - init_charges = list(4, 0, 0) From 255a8d029c716f4f3c9ef13eff8e6da8c87ac6a3 Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Sat, 16 Jun 2018 23:56:21 -0700 Subject: [PATCH 002/133] Fix Donksoft vending machines having multiple restocking units --- .../game/objects/items/circuitboards/machine_circuitboards.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 55d69d6a741..64ccdf50470 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -864,14 +864,14 @@ build_path = /obj/machinery/vending/donksofttoyvendor req_components = list( /obj/item/stack/sheet/glass = 1, - /obj/item/vending_refill/donksoft = 3) + /obj/item/vending_refill/donksoft = 1) /obj/item/circuitboard/machine/vending/syndicatedonksofttoyvendor name = "Syndicate Donksoft Toy Vendor (Machine Board)" build_path = /obj/machinery/vending/toyliberationstation req_components = list( /obj/item/stack/sheet/glass = 1, - /obj/item/vending_refill/donksoft = 3) + /obj/item/vending_refill/donksoft = 1) /obj/item/circuitboard/machine/dish_drive name = "Dish Drive (Machine Board)" From cdfe1261d113a2f0649592a174c1cf9410f31ce3 Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Sun, 17 Jun 2018 12:47:59 -0700 Subject: [PATCH 003/133] Fix cargo pack descriptions --- code/modules/cargo/packs.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 94d80952d73..e24502f9b0b 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -1359,7 +1359,7 @@ /datum/supply_pack/service/vending/cigarette name = "Cigarette Supply Crate" - desc = "Don't believe the reports - smoke today! Contains cigarette vending machine refills." + desc = "Don't believe the reports - smoke today! Contains a cigarette vending machine refill." cost = 1500 contains = list(/obj/item/vending_refill/cigarette) crate_name = "cigarette supply crate" @@ -1367,7 +1367,7 @@ /datum/supply_pack/service/vending/games name = "Games Supply Crate" - desc = "Get your game on with these three game vending machine refills." + desc = "Get your game on with this game vending machine refill." cost = 1000 contains = list(/obj/item/vending_refill/games) crate_name = "games supply crate" From 71e2354d485d7c4cb38e19183b3a622954674509 Mon Sep 17 00:00:00 2001 From: ninjanomnom Date: Mon, 18 Jun 2018 03:06:09 -0400 Subject: [PATCH 004/133] Adds global signals and a silly example use case --- _maps/RandomRuins/SpaceRuins/bus.dmm | 12 ++++++- code/__DEFINES/components.dm | 7 ++++ code/controllers/subsystem/dcs.dm | 32 ++++++++++++++++++ code/datums/components/_component.dm | 4 +++ code/datums/components/edit_complainer.dm | 23 +++++++++++++ code/game/objects/items/plushes.dm | 10 ++++++ code/modules/admin/verbs/modifyvariables.dm | 1 + .../space_management/zlevel_manager.dm | 1 + icons/obj/plushes.dmi | Bin 5362 -> 5691 bytes tgstation.dme | 2 ++ 10 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 code/controllers/subsystem/dcs.dm create mode 100644 code/datums/components/edit_complainer.dm diff --git a/_maps/RandomRuins/SpaceRuins/bus.dmm b/_maps/RandomRuins/SpaceRuins/bus.dmm index be05a8d1d61..fe624c19bf1 100644 --- a/_maps/RandomRuins/SpaceRuins/bus.dmm +++ b/_maps/RandomRuins/SpaceRuins/bus.dmm @@ -334,6 +334,16 @@ /obj/item/stack/sheet/metal/fifty, /turf/open/floor/plating/asteroid/airless, /area/ruin/unpowered/no_grav) +"XA" = ( +/obj/structure/fluff/bus/passable/seat{ + icon_state = "backseat" + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/toy/plush/awakenedplushie, +/turf/open/floor/plasteel/airless/dark{ + icon_state = "bus" + }, +/area/ruin/unpowered/no_grav) (1,1,1) = {" aa @@ -484,7 +494,7 @@ ab ae ad aj -am +XA az aK ad diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index ed926f45f8e..184e4459892 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -1,5 +1,7 @@ #define SEND_SIGNAL(target, sigtype, arguments...) ( !target.datum_components ? NONE : target._SendSignal(sigtype, list(##arguments)) ) +#define SEND_GLOBAL_SIGNAL(sigtype, arguments...) ( !SSdcs.comp_lookup[sigtype] ? NONE : SSdcs._SendGlobalSignal(sigtype, list(##arguments)) ) + //shorthand #define GET_COMPONENT_FROM(varname, path, target) var##path/##varname = ##target.GetComponent(##path) #define GET_COMPONENT(varname, path) GET_COMPONENT_FROM(varname, path, src) @@ -16,6 +18,11 @@ // All signals. Format: // When the signal is called: (signal arguments) +// global signals +// These are signals which can be listened to by any component on any parent +#define COMSIG_GLOB_NEW_Z "!new_z" //from base of datum/controller/subsystem/mapping/proc/add_new_zlevel(): (list/args) +#define COMSIG_GLOB_VAR_EDIT "!var_edit" //called after a successful var edit somewhere in the world: (list/args) + // /datum signals #define COMSIG_COMPONENT_ADDED "component_added" //when a component is added to a datum: (/datum/component) #define COMSIG_COMPONENT_REMOVING "component_removing" //before a component is removed from a datum because of RemoveComponent: (/datum/component) diff --git a/code/controllers/subsystem/dcs.dm b/code/controllers/subsystem/dcs.dm new file mode 100644 index 00000000000..c69009ef60c --- /dev/null +++ b/code/controllers/subsystem/dcs.dm @@ -0,0 +1,32 @@ +SUBSYSTEM_DEF(dcs) + name = "Datum Component System" + flags = SS_NO_INIT | SS_NO_FIRE + + var/list/comp_lookup = list() // A signal:list(components) assoc list + +/datum/controller/subsystem/dcs/proc/_SendGlobalSignal(sigtype, list/arguments) + . = NONE + for(var/i in comp_lookup[sigtype]) + var/datum/component/comp = i + if(!comp.enabled) + continue + var/datum/callback/CB = comp.signal_procs[sigtype] + if(!CB) + continue // Should we error from this? + . |= CB.InvokeAsync(arglist(arguments)) + +/datum/controller/subsystem/dcs/proc/RegisterSignal(datum/component/comp, sigtype) + if(!length(comp_lookup[sigtype])) + comp_lookup[sigtype] = list() + + comp_lookup[sigtype][comp] = TRUE + +/datum/controller/subsystem/dcs/proc/UnregisterSignal(datum/component/comp, list/sigtypes) + if(!length(sigtypes)) + sigtypes = list(sigtypes) + for(var/sigtype in sigtypes) + switch(length(comp_lookup[sigtype])) + if(1) + comp_lookup -= sigtype + if(2 to INFINITY) + comp_lookup[sigtype] -= comp diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index dfd5c4f89fa..caf53f09af6 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -58,6 +58,7 @@ if(!silent) SEND_SIGNAL(P, COMSIG_COMPONENT_REMOVING, src) parent = null + SSdcs.UnregisterSignal(src, signal_procs) LAZYCLEARLIST(signal_procs) return ..() @@ -93,6 +94,9 @@ if(!override && procs[sig_type]) stack_trace("[sig_type] overridden. Use override = TRUE to suppress this warning") + if(sig_type[1] == "!") + SSdcs.RegisterSignal(src, sig_type) + procs[sig_type] = proc_or_callback enabled = TRUE diff --git a/code/datums/components/edit_complainer.dm b/code/datums/components/edit_complainer.dm new file mode 100644 index 00000000000..c0a875d4579 --- /dev/null +++ b/code/datums/components/edit_complainer.dm @@ -0,0 +1,23 @@ +// This is just a bit of fun while making an example for global signal +/datum/component/edit_complainer + var/list/say_lines + +/datum/component/edit_complainer/Initialize(list/text) + if(!ismovableatom(parent)) + return COMPONENT_INCOMPATIBLE + + var/static/list/default_lines = list( + "CentCom's profligacy frays another thread.", + "Another tug at the weave.", + "Who knows when the stresses will finally shatter the form?", + "Even now a light shines through the cracks.", + "CentCom once more twists knowledge beyond its authority.", + "There is an uncertain air in the mansus.", + ) + say_lines = text || default_lines + + RegisterSignal(COMSIG_GLOB_VAR_EDIT, .proc/var_edit_react) + +/datum/component/edit_complainer/proc/var_edit_react(list/arguments) + var/atom/movable/master = parent + master.say(pick(say_lines)) diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index 0d993da41bf..eec6c00834c 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -510,3 +510,13 @@ attack_verb = list("blorbled", "slimed", "absorbed") squeak_override = list('sound/effects/blobattack.ogg' = 1) gender = FEMALE //given all the jokes and drawings, I'm not sure the xenobiologists would make a slimeboy + +/obj/item/toy/plush/awakenedplushie + name = "awakened plushie" + desc = "An ancient plushie that has grown enlightened to the true nature of reality." + icon_state = "plushie_awake" + item_state = "plushie_awake" + +/obj/item/toy/plush/awakenedplushie/ComponentInitialize() + . = ..() + AddComponent(/datum/component/edit_complainer) diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index 0c41ae8fd23..405595d1de9 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -629,6 +629,7 @@ GLOBAL_PROTECT(VVpixelmovement) if (O.vv_edit_var(variable, var_new) == FALSE) to_chat(src, "Your edit was rejected by the object.") return + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_VAR_EDIT, args) log_world("### VarEdit by [key_name(src)]: [O.type] [variable]=[var_value] => [var_new]") log_admin("[key_name(src)] modified [original_name]'s [variable] from [html_encode("[var_value]")] to [html_encode("[var_new]")]") var/msg = "[key_name_admin(src)] modified [original_name]'s [variable] from [var_value] to [var_new]" diff --git a/code/modules/mapping/space_management/zlevel_manager.dm b/code/modules/mapping/space_management/zlevel_manager.dm index a0d84c55dde..6129c5fd2b6 100644 --- a/code/modules/mapping/space_management/zlevel_manager.dm +++ b/code/modules/mapping/space_management/zlevel_manager.dm @@ -17,6 +17,7 @@ z_list += S /datum/controller/subsystem/mapping/proc/add_new_zlevel(name, traits = list(), z_type = /datum/space_level) + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_NEW_Z, args) var/new_z = z_list.len + 1 if (world.maxz < new_z) world.incrementMaxZ() diff --git a/icons/obj/plushes.dmi b/icons/obj/plushes.dmi index f0eb8175497e73f02a005bfd6b4ac1994a187c73..0bf89ab744679d93ab85072431ed9bc2f16a92a0 100644 GIT binary patch literal 5691 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 literal 5362 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 EKfCB~!vFvP diff --git a/tgstation.dme b/tgstation.dme index 92078786f40..7114c5831a6 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -202,6 +202,7 @@ #include "code\controllers\subsystem\blackbox.dm" #include "code\controllers\subsystem\communications.dm" #include "code\controllers\subsystem\dbcore.dm" +#include "code\controllers\subsystem\dcs.dm" #include "code\controllers\subsystem\disease.dm" #include "code\controllers\subsystem\events.dm" #include "code\controllers\subsystem\fire_burning.dm" @@ -320,6 +321,7 @@ #include "code\datums\components\decal.dm" #include "code\datums\components\earhealing.dm" #include "code\datums\components\earprotection.dm" +#include "code\datums\components\edit_complainer.dm" #include "code\datums\components\empprotection.dm" #include "code\datums\components\forced_gravity.dm" #include "code\datums\components\forensics.dm" From 041199e8a3406fa6bae4bc9ea5914cbb9957a8ae Mon Sep 17 00:00:00 2001 From: AnturK Date: Mon, 18 Jun 2018 13:08:36 +0200 Subject: [PATCH 005/133] Fixes alternative method of removing legcuffs. --- code/modules/surgery/bodyparts/dismemberment.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index a58e1951790..87e13955fee 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -199,7 +199,7 @@ /obj/item/bodypart/r_leg/drop_limb(special) if(owner && !special) if(owner.legcuffed) - owner.legcuffed.forceMove(drop_location()) + owner.legcuffed.forceMove(owner.drop_location()) //At this point bodypart is still in nullspace owner.legcuffed.dropped(owner) owner.legcuffed = null owner.update_inv_legcuffed() @@ -210,7 +210,7 @@ /obj/item/bodypart/l_leg/drop_limb(special) //copypasta if(owner && !special) if(owner.legcuffed) - owner.legcuffed.forceMove(drop_location()) + owner.legcuffed.forceMove(owner.drop_location()) owner.legcuffed.dropped(owner) owner.legcuffed = null owner.update_inv_legcuffed() From fe1b73f07001c2865961333c8e1adffce0bc49f2 Mon Sep 17 00:00:00 2001 From: Hyacinth Date: Mon, 18 Jun 2018 10:01:28 -0700 Subject: [PATCH 006/133] Adds pink scarf to vendomat --- code/modules/clothing/neck/_neck.dm | 9 +++++++-- code/modules/vending/clothesmate.dm | 5 +++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index cb797c34d4a..82451480962 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -100,6 +100,11 @@ icon_state = "scarf" color = "#4A4A4B" //Grey but it looks black +/obj/item/clothing/neck/scarf/pink + name = "pink scarf" + icon_state = "scarf" + color = "#F699CD" //Pink + /obj/item/clothing/neck/scarf/red name = "red scarf" icon_state = "scarf" @@ -118,7 +123,7 @@ /obj/item/clothing/neck/scarf/purple name = "purple scarf" icon_state = "scarf" - color = "#9557C5" //purple + color = "#9557C5" //Purple /obj/item/clothing/neck/scarf/yellow name = "yellow scarf" @@ -128,7 +133,7 @@ /obj/item/clothing/neck/scarf/orange name = "orange scarf" icon_state = "scarf" - color = "#C67A4B" //orange + color = "#C67A4B" //Orange /obj/item/clothing/neck/scarf/cyan name = "cyan scarf" diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm index f3ab636fb05..ad5b38575c8 100644 --- a/code/modules/vending/clothesmate.dm +++ b/code/modules/vending/clothesmate.dm @@ -35,6 +35,7 @@ /obj/item/clothing/neck/tie/red = 1, /obj/item/clothing/neck/tie/black = 1, /obj/item/clothing/neck/tie/horrible = 1, + /obj/item/clothing/neck/scarf/pink = 1, /obj/item/clothing/neck/scarf/red = 1, /obj/item/clothing/neck/scarf/green = 1, /obj/item/clothing/neck/scarf/darkblue = 1, @@ -118,5 +119,5 @@ /obj/item/vending_refill/clothing machine_name = "ClothesMate" icon_state = "refill_clothes" - charges = list(37, 4, 4)// of 111 standard, 12 contraband, 10 premium(?) - init_charges = list(37, 4, 4) + charges = list(38, 4, 4)// of 112 standard, 12 contraband, 10 premium(?) + init_charges = list(38, 4, 4) From b889b7bc492509eeadf33df31044388d42bee497 Mon Sep 17 00:00:00 2001 From: ninjanomnom Date: Mon, 18 Jun 2018 15:40:53 -0400 Subject: [PATCH 007/133] Comment and subsystem recover --- code/__DEFINES/components.dm | 3 +++ code/controllers/subsystem/dcs.dm | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index 184e4459892..c882994be05 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -20,9 +20,12 @@ // global signals // These are signals which can be listened to by any component on any parent +// GLOBAL SIGNALS MUST START WITH "!" #define COMSIG_GLOB_NEW_Z "!new_z" //from base of datum/controller/subsystem/mapping/proc/add_new_zlevel(): (list/args) #define COMSIG_GLOB_VAR_EDIT "!var_edit" //called after a successful var edit somewhere in the world: (list/args) +////////////////////////////////////////////////////////////////// + // /datum signals #define COMSIG_COMPONENT_ADDED "component_added" //when a component is added to a datum: (/datum/component) #define COMSIG_COMPONENT_REMOVING "component_removing" //before a component is removed from a datum because of RemoveComponent: (/datum/component) diff --git a/code/controllers/subsystem/dcs.dm b/code/controllers/subsystem/dcs.dm index c69009ef60c..3eed510adcd 100644 --- a/code/controllers/subsystem/dcs.dm +++ b/code/controllers/subsystem/dcs.dm @@ -16,7 +16,7 @@ SUBSYSTEM_DEF(dcs) . |= CB.InvokeAsync(arglist(arguments)) /datum/controller/subsystem/dcs/proc/RegisterSignal(datum/component/comp, sigtype) - if(!length(comp_lookup[sigtype])) + if(!comp_lookup[sigtype]) comp_lookup[sigtype] = list() comp_lookup[sigtype][comp] = TRUE @@ -30,3 +30,6 @@ SUBSYSTEM_DEF(dcs) comp_lookup -= sigtype if(2 to INFINITY) comp_lookup[sigtype] -= comp + +/datum/controller/subsystem/dcs/Recover() + comp_lookup = SSdcs.comp_lookup From 5c9c25a1eab79edd90694813e028ef7cbc954438 Mon Sep 17 00:00:00 2001 From: cyclowns Date: Mon, 18 Jun 2018 12:56:43 -0700 Subject: [PATCH 008/133] fixes BZ reaction --- code/modules/atmospherics/gasmixtures/reactions.dm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index 2bfe1cec710..59a2f093a86 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -402,13 +402,13 @@ var/pressure = air.return_pressure() var/old_heat_capacity = air.heat_capacity() - var/reaction_efficency = min(1/((pressure/(0.1*ONE_ATMOSPHERE))*(max(cached_gases[/datum/gas/plasma][MOLES]/cached_gases[/datum/gas/tritium][MOLES],1))),cached_gases[/datum/gas/tritium][MOLES],cached_gases[/datum/gas/plasma][MOLES]/2) + var/reaction_efficency = min(1/((pressure/(0.1*ONE_ATMOSPHERE))*(max(cached_gases[/datum/gas/plasma][MOLES]/cached_gases[/datum/gas/nitrous_oxide][MOLES],1))),cached_gases[/datum/gas/nitrous_oxide][MOLES],cached_gases[/datum/gas/plasma][MOLES]/2) var/energy_released = 2*reaction_efficency*FIRE_CARBON_ENERGY_RELEASED - if ((cached_gases[/datum/gas/tritium][MOLES] - reaction_efficency < 0 )|| (cached_gases[/datum/gas/plasma][MOLES] - (2*reaction_efficency) < 0)) //Shouldn't produce gas from nothing. + if ((cached_gases[/datum/gas/nitrous_oxide][MOLES] - reaction_efficency < 0 )|| (cached_gases[/datum/gas/plasma][MOLES] - (2*reaction_efficency) < 0)) //Shouldn't produce gas from nothing. return NO_REACTION ASSERT_GAS(/datum/gas/bz,air) cached_gases[/datum/gas/bz][MOLES] += reaction_efficency - cached_gases[/datum/gas/tritium][MOLES] -= reaction_efficency + cached_gases[/datum/gas/nitrous_oxide][MOLES] -= reaction_efficency cached_gases[/datum/gas/plasma][MOLES] -= 2*reaction_efficency @@ -422,6 +422,7 @@ priority = 5 name = "Stimulum formation" id = "stimformation" + /datum/gas_reaction/stimformation/init_reqs() min_requirements = list( /datum/gas/tritium = 30, From 080aa9b6f8f11ea5bbf63cc2b010bc4c18c0bfa0 Mon Sep 17 00:00:00 2001 From: europax <34190759+europax@users.noreply.github.com> Date: Mon, 18 Jun 2018 23:20:54 +0300 Subject: [PATCH 009/133] Modifies the shuttle chair sprites. --- icons/obj/chairs.dmi | Bin 32429 -> 32448 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/chairs.dmi b/icons/obj/chairs.dmi index 9247e3ee9671a94554c743535b7b27dcf09df79d..10fa8e70b858f8c9f96f1b8a00bf9135d49b507a 100644 GIT binary patch delta 8790 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 delta 8770 zcmYjWWmHsQ*PWreyF&r#6r`n*1}Q-Xkdh9O=7O{ch=_Dcw=_tnqzFheg!ItO5Z~o} z-yh$sHM3^ctb5LV_Bm(o{XDnh7FvD_t!jM*h>c0!y~c!FBFdd`sOD7#yq?tOb=4i8 zy`!W*a%cWnA)v-7`r;WnJ5d(1{pT{>upP^MRRUk-uM5oaoEXJUsS4}4efF-V8NRBa z!JNROA74W_s-%6zu+3_gEz^2?xr#RLs4{20Y;E6f_De{#>~69eFD<6{WO>=XZ#xhg z1CT!t)I25MZ4ueq+Y?18K$zB$Qa6X)y6q8q$iS@oTq5&4kz||<%Q7K7s-IUIX^{#n zVs5Kw=LhgOdWrYuyMN2Ye2%}fafGQnBI*2`|&u=B~ze$<5FcfhEosMtc zj@zWj_??%16>Ke_+BGdATWdNk87QCnQ%yLCn<*{C8c^pyC+KPN*mT{@@S?EFfU z+}urp(vwrC)J#Vw{%;p;6yIkOHEMcye0==K{xvbLeY&7Yd}9-n(f}pAEZ}rpxv0Ec z(aEViLGiUMR%)s{PmiakXF~038K_*s>1zpqB09e}l-etD8m?;aF-_Bmz2C?4_8A7E z^7dzc5Y*wSU8!7(p1o9_g(1$?O7`FCLX$@Y>59p#SAv4{?gGNXJt*8MVef8Rnw!6- zrlx)xdx9}LIr-09F4>gzPx`m{$w{;hBQytl``=Sj`9{?En+*Xa@@=Dl0hGez*jq9d zC@wA*em;d;xkWzVR&6w_Dg`ad#Pwn3;o*5TN7-w#-Ix6v^>*5pvoUOtbv~D8PSb7M zV{O!;S6BX0A{{A~c&w7rQl~_|Ici#fwj2E4ZR?|M%a!(`rOsv zxKUKiD=Lc(OXjp&G8sD768W^OVDr|{*s(`FE;@;CqiB~H&15yce z2uB9$Y{wWJ=W4M{8k~D~E8F+IpH_5sK38BN#v>rGS&Tb(dlOOMMAkdD^-_XH1mmin zu*21)ZM3}@l5nA8Xqa@~B)vXdwiXi@dE~uNM`>he7y)9{+$>&hTEp0U*@U+;Jzr;; z7W?Ge&nY=uX0!VU#y}&|;At2@4`!VDVoryur>B>|XwHkO@@O?d+nfunyr@Ve0WcRq zp;%3*H)jIse;xMJB(Bt&eUiGo7RrBN0L@HGlb2*r=BAjiYzHfG+8Ssg$8N|Y-g3oDu2!f3MtLeF;5YSSWW22xPTB^Em{mpG>stFXzFPK$ zYn`z%uQoSEu6+F8%XbEQ#WmG;GVs5lZkN&l7j^eAO351GOMY++YnLj#=)pl(FaDsG z5NPP&AM^yO9_^W$tI0ozcUk||R96dZR)d0)m!Gk{Q7AUN*g5Hw*b@GX7%!?M}OEcp4zz<&duShO1* zmQ;W@Y}YQ(%FZFNQPMv!FVe+zAZjwp%F0T8RJiKupQ*i$+Y-yPncId|1W?fMr zKFoELIht=Hx5@;Xqt5;{=e%v1H*WldFd<)|g!$`~1RQy`waFybxxl3%qkj%EeKx2O z@OF6h?U*yi4DCyK=lL(QVTp1U0iwXao4c(iajWgQmo(4Y1Nip!xUBU8R6{W_F+HT| zPqeN2o`w+-7}=fQ4hBdc?pH(by|;##J8I)TF*p0t(9#MqoFpybwCk)f`EC_H7D0LW zckVdI;Hl3wi1t?6W!GUcIhTPEXBv94TPQiPCGyy@X?CB2#3JuGCQAS*Oa-8X9dmBi z>9p2zXPabYwdF7g@Ui22O#k)^4xy(dC$W${JjJI;b37CIfSxR1&Fq^RW(CK&BC*x6 z>w#i6b)g6j7)VDQf(&+=&%`K zS>=LWxwGZPfRJl&!Q|U{p~wB+%gff$!NH+M1f4ZOt^^aI544pTUiJ1`!Z`ysxsddv zud&W=?XVP9M26g)9314|ykYh0e(HvRdU<+2v7}M)a5rn&wl4UfO>H@ANi*;#iceBw z;C#M~`bzx%{n5N0w>2m!q9pM8`lmd1YF!T2tJG|yLp3?n0e4;!Z4uILf>ht(H_m#` zPoFTotWU;}1BAX%PmMdNAsPa@Do+l+hAl^J%(rE&aupaTvJlHx=RbKhi>!-SCkowu z7uld7n}vZgFw#xBDV#0**>U3eU~0~=3o;b834apk=a6p&KR7^P+B}3&nAxI*M?~=K z8F7$)I0;2;fYYJmApjYeLps|6^)S;j^PinRAVPRRH^2Le$O=`sg+Ewe3#vYLqoCKn zmlzD@=J&>?UvZvOhr40oR>{xJcMlF=eO4)|q)ZJcK^2AItk%qYxR6AF3ZmE!d7Z7dq-V1HLz~#30+ZTJ(n?p+)#0=P#L@{WDXGlTy+;( zVJ5(#-F@ZBH{0!o0B1-e)cjuu3gWXZytSy6qSuajW)mZb7V?m8A5=BEPJDt79_A&@nn$t=i?h|Q_&B+PZFg7?m+xg3X?33p`wudafs1z(1=ZEyDoqU ziq8xN`gry$vhqPDoC1>~ZcYgr?um^xkyo58+7!4}K(cNaE#w)#tO1nGg+yC%W&oFh zIB73FChuF-wGOKaYkBZY+)8ueBS4a(M-i4I>=0w=6C{=7$F122h7vaN}0RH#h*H zhD$E>Ka`b}1b6z)1iJadVjn{(T8HA}xBkE% z@AkF+h}UPM*G^d$R0ji`9kp~Ky@2A8h~=ykRQ*nM{F_ozRN{}~wntqdAt4nM{f;h# zTv4G{=Ntbd4Mgf!+u8H@{bcQ22mvn52Q7d1b9{3F!vD#SJA&zdtfuJ?bz)L-XBan6 zVf$R@GT;%b1=p^sm&{IFOi!Q2usqf9x9}eRNX}(CFBRx7_RzDLI1N+<%?hB-XevP= z*O8d?Yf3?&x50;Wd#hWR<|NCCaURGvW(q=%m+;h*PY;FA*V*dU; z#U9{hJb$rDe)S>I1(_>lY)!MW_^%bO`zzW%Yy(56LmNuyH>-U;{T%1giWf2kRC^QE z`sBqj4c4ihD8u}po;(7?{@5#x@i@*&E(s4a$DxmjGYdy@&Y(M2T ze0?X&5Cj+R4VF~6D1c7YlHAk$?bN!xq@+YUf7kT&^qgsI7Sf)zv)EAdb{QzoME4|Tc#-96h>gm{& zCL1#wf!PZZ3iEJ_A0#d5zKE=3^;LimGG4rHXK#-ZWFqHHElZNu@K^bAXRpN0_idK= zO0M4091IK*6&EwXy$J3nz=ib#S$A{{Sf+n_l8!smQd5PA88Qqm7{ND8&x6{TzXoP( zT-=)#41C2Js$$G|6}$23tP#99|6&_zh>L;orm%3hg}M)-x}QvT?+{#O*UU^ZTibLc zOu53TvhBL0bdrY^`KXNyVDqb~snJEqoX@-&L?Fs+A_niKDg%4p+JU>Hd=x*hcvQ!y zGGXMt-`P_ggyf0-rTlq%d#8!Xe|i>5o(CMCGGiTUTh9VpIT2qs=7t(KcZ-R7I$7

%X4q2oNe4q*$Fg8bcB&<$h|&hspwwX54A)0(_Wje=PVElUQ^Z!9 z-o=Jf6naR#;s90u5yS*w?GFDRmDK;ck9vMEKKEGGAIHwj+7jSwxg}*R zwQgKF<#6>Cj+%SiG0C`?XdSvnb*Q&O(LH_jfhI_y%YXK>|70iMJl+~P-&uI#^6FRb z-pV4mo22p>F`1kKUmdF4;$mz7EG*Tn+!@9Fk2>PuAYZ)fZ^WkQB=1VkS@)hx{%9hu zQ+vr==aAKN5kC?WS&Qj3%dQ!R5`WIr(>%Zsi%3qaRs6JZ6^Bjr)|#g)Z1=M+^O|GA@4rMwSvjq@D(XuZRT{oPKeQLOGYMN?>6Xy#pdBtI_y8WsSW zloqI%6b>GP)@n>%@izV0B#+2F9b`#NJhpR9HJ!oJ08P_h3i?D!+8^J`eaZ%=C0Vc$j5-jBrg?Uy~n3BkS#ZRA#Dq&R8(QExDwkA%H zwo=Dy(K=#XS_o3DaMN-lb;nrz@iWZf4r2!X=a~l|t)I9}`z>DgLA0g38&y%D4}|rDA?oh?AU=GhlVEOK?<3AYJ2#sl&Yo5QG(oM;>iB znx?Ab>(>h%pgkO;P)D9HM837wFMjsB?uy#7D}B>4wqhd6JLny>tm4ImyQ+6_LLA!= zGjl<}uMjUm!mu_1ODcK3z9hDcdC(|Qv7sKXUi)?p_Hq@I@d-RSig=R8s-Ny1;;W!# zbZVm&_oYA0FA=A(tEdtPxisb-TOfE4ndBcAhpyS6(1@jAtM@H5wGbAaXV7su>@O9| z*ktLCjBvkwhCajHe+W-XM1^pip5Cgi-Fla(gg*(~cYN86`xV6o&8f5mGOB7O7lW{+ zeXBfgHFvO!&1I$KlD1T7>IjTlu#`d?8X^)wdhqjbXDFosOpf3QI_2^mMR=kt!=O>Q z)arH@`J0xmhps8ZD6g+*Z_@4FgkswA$U4iBdbaQ$f2bxxxlC?VO#mKk_-C#C`a)Ad ztQ5j1BTWa|DK5}b<9YDpbqXr5=Rtz%>rb8DeKI*(#|W~xu|BX6A>br9AeUH+Be+&wF2l(5hSODB{j9Fi+p|!n4%N zBZ+aWaYj(bpz|i}<&twQ?Ye0HA%U>q8EQp26^19)^63ovQd-8V-~sDLAT8#SG%9ev zY#cl+i#xv;KTKoXd&%HEYL53wB}u~xp@bMuDgagHE(y>e zEez!qdx0YI^qjiD_6M3KJ-<{!$IOiF9C9R0!u52ENN!4BW!SWPV}$+>LR5HiZ9*vT zm5*5oeEY`fnwQ_pmnNJ4WDgNWY#)b z!nc^5o?hD;XI^Mw{`63>-c>1G_SFc+Si6;!i#YtXioYUTh=p7-y*FL_W~(U>05mcN zZ*)mlwkF*H<@JZ0Wk%I_z~W>9>)^W(&VDb%IPkl)7KSquTz68UeIl$`~*2;IVXZa z_xvW8j+`8b-JPy{13J^h#KhP^wPCi;Vp$}>d_jSJ0X38?;`a9HB-SxymYuL7Cx?N& zv)2eJf@=A1P0tQ_E$#%@{(<9ibBwjWNc2}>j+fF>VDe?e@41C^wx7MHm%M)y+vK^Q z2IE#I!}KkaKYU+))A3Hogjj!0xxh%rm@G}v(|-PSxr6KLWG4Mj9^&PwVN3%KXdk)I zff%A1v8|Se=E=%*Ypg}-{>qg34=Os1(o%mzU7@M9e4{|ZE{&1PYr}32-iWYB`QR1D zT?2p=eWfHRCrtCbgox{85-LRiB!q3HjB|snsiX zQ;%|F=(1_1xq$CSoAfB9x`UGe8D~I%Zpox5GH*qJFxevcoh0`2NnR*MT8 z=56J{TA^7QEr!pa)ojLCQsWV=t4H4jD>K8FCAXBa#9RPpaEDbQKO(@_1|Vw?6)xJg z6|WdI?G7_ikM zym!RM;st3Yt{jQds$U>Wl!_m}MrekhRKmc{tnWBb5L&)S#GA{h$q57>0YR|b$V zwX|`89zra!;#nL$=6}c8G+(hYY*G}iH&$z*QbrI2Az3;LwsD50RjuSw3A57?$gNkM#k~u;)dAylZu{eF=S! zp0S0oMw=#1!ZUAg&H(c?rrFqoX`8Hbc_>Am)R6`YQrbM~}|KF`Qn!xaI}hKXLA=V@tNnJKtF61`xS4>1YqYP;(deEX8w+&DMf%L$Z*%!zTJRz6bW|SNkl<7nM6oB%X_BrUEFFaXJz@m zHsP`0aRKL?@FK9@bLnK|BO?&qj4#);a_1UM;d*k3B?BnM4)54#rfl5uF!H`)^j+dV zL+f?D_34w?H5x^IN&+6pr=E4;&QQXxtD`Jmtg2a=d{F_?7YVopD5rTePhh_$$N`UF zXtMO5iLc3)Y>{PYK^2&vn^$5o@p_uUISTSR5l#|3mEhjkz321G8hV8}idz3GUv+Kz z2lK%L@qt{eIVULE^z9KzoX2k1P8ghXl1MB}ju@Q4-a=cYI$Fd7u(`aW@@4JJRwJ!y zEZO(GzVo%<8PQQoV{x|}P%u*|6bg zy$+3*kAm&sbNLegE%X&9hJCP^6bGk9ra3-NE2ls_6rLrM^;8r<>1``w4PpR_=nBsj ziR;%!KFSz0lmqphk5_F^BRSfV5(Ai)jFjrjCnMZ2VE2Ferc@eDnXw92)zrs|hEnzD zjvQbnAzISE9Alt$`T2W-6PZ0keXq-#CS>ds-%!)LTCyJ2Rp!s%{Uh}>!*PNU>a~6v zq;P^o_6qJO_a6dlg&vpJNz$>(UF)gyoqG#}3SjpMceWlX+DDd-%i_&}7fR{AS`H3o z4b~c)p*#h3G5+b%rzt^a7rWoiI7jKfWF@n5GfWRhHW}LP@?%&D8y^lNekMZQj&Q1U z2g0*2xF}1J&oZDfL{h3a0?F7cPD#%&p+3w8=o!91nf3i;>Vc!C-~BK4yzrVI%xrwO zF+^j9DH?g#0>{g{uv9S`><0HIvePT8iIWa_7tRVs!)Orm;`LUdXrJTDwSGHZcKNvC z2-6KbtJB5uP;-T%I|TN#kV;^CZ2+~RLf0b*+#+mLes{^c@ca;gpxDvocMLe|dE_NK za~Ozn)}O!;$V}AEU&Yh$HP)bE(wiw<< Date: Mon, 18 Jun 2018 22:50:56 +0200 Subject: [PATCH 010/133] DivideOccupations cleanup --- code/controllers/subsystem/job.dm | 39 +++++++++++++++---------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index ed5d92108ce..23ec74bd58a 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -349,37 +349,36 @@ SUBSYSTEM_DEF(job) // Hand out random jobs to the people who didn't get any in the last check // Also makes sure that they got their preference correct for(var/mob/dead/new_player/player in unassigned) - if(PopcapReached()) - RejectPlayer(player) - else if(jobban_isbanned(player, SSjob.overflow_role) || QDELETED(player)) - GiveRandomJob(player) //you get to roll for random before everyone else just to be sure you don't get overflow. you're so speshul - - for(var/mob/dead/new_player/player in unassigned) - if(PopcapReached()) - RejectPlayer(player) - else if(player.client.prefs.joblessrole == BERANDOMJOB) - GiveRandomJob(player) + HandleUnassigned(player) Debug("DO, Standard Check end") Debug("DO, Running AC2") - // For those who wanted to be assistant if their preferences were filled, here you go. - for(var/mob/dead/new_player/player in unassigned) - if(PopcapReached()) - RejectPlayer(player) - if(player.client.prefs.joblessrole == BEOVERFLOW) - Debug("AC2 Assistant located, Player: [player]") - AssignRole(player, SSjob.overflow_role) - else // For those who don't want to play if their preference were filled, back you go. - RejectPlayer(player) - + //Mop up people who can't leave. for(var/mob/dead/new_player/player in unassigned) //Players that wanted to back out but couldn't because they're antags (can you feel the edge case?) if(!GiveRandomJob(player)) AssignRole(player, SSjob.overflow_role) //If everything is already filled, make them an assistant return 1 +//We couldn't find a job from prefs for this guy. +/datum/controller/subsystem/job/proc/HandleUnassigned(mob/dead/new_player/player) + if(PopcapReached()) + RejectPlayer(player) + else if(player.client.prefs.joblessrole == BEOVERFLOW) + var/allowed_to_be_a_loser = jobban_isbanned(player, SSjob.overflow_role) + if(QDELETED(player)) + RejectPlayer(player) + if(allowed_to_be_a_loser) + if(!AssignRole(player, SSjob.overflow_role)) + RejectPlayer(player) + else if(player.client.prefs.joblessrole == BERANDOMJOB) + if(!GiveRandomJob(player)) + RejectPlayer(player) + else if(player.client.prefs.joblessrole == RETURNTOLOBBY) + RejectPlayer(player) + //Gives the player the stuff he should have with his rank /datum/controller/subsystem/job/proc/EquipRank(mob/M, rank, joined_late = FALSE) var/mob/dead/new_player/N From c222414ade775fafe613bc0132ab64ab935b356f Mon Sep 17 00:00:00 2001 From: Dax Dupont Date: Tue, 19 Jun 2018 01:54:42 +0200 Subject: [PATCH 011/133] Improves interdepartmental synergy between science and library --- _maps/map_files/BoxStation/BoxStation.dmm | 34 +++++--------- .../map_files/Deltastation/DeltaStation2.dmm | 22 ++++------ _maps/map_files/MetaStation/MetaStation.dmm | 44 +++++-------------- _maps/map_files/PubbyStation/PubbyStation.dmm | 26 ++++------- 4 files changed, 40 insertions(+), 86 deletions(-) diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 24f3490684a..046c003f7ab 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -37890,12 +37890,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/item/stack/sheet/metal/fifty, -/turf/open/floor/plasteel/white, -/area/science/circuit) -"bRb" = ( -/obj/structure/table/reinforced, -/obj/machinery/computer/libraryconsole/bookmanagement, +/obj/item/stack/sheet/metal/ten, /turf/open/floor/plasteel/white, /area/science/circuit) "bRc" = ( @@ -53325,6 +53320,8 @@ /obj/item/radio/intercom{ pixel_x = -30 }, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, /turf/open/floor/plasteel/white, /area/science/circuit) "eyM" = ( @@ -53363,7 +53360,8 @@ /turf/closed/wall/r_wall, /area/science/mixing) "flc" = ( -/obj/machinery/bookbinder, +/obj/structure/table/reinforced, +/obj/item/storage/fancy/donut_box, /turf/open/floor/plasteel/white, /area/science/circuit) "fnC" = ( @@ -53475,8 +53473,6 @@ /obj/machinery/cell_charger{ pixel_y = 5 }, -/obj/item/stock_parts/cell/super, -/obj/item/stock_parts/cell/super, /turf/open/floor/plasteel/white, /area/science/circuit) "ijc" = ( @@ -53541,7 +53537,6 @@ /turf/open/floor/plasteel, /area/quartermaster/office) "jrE" = ( -/obj/machinery/rnd/production/protolathe/department/science, /obj/structure/sign/poster/official/random{ pixel_x = 32 }, @@ -53833,13 +53828,6 @@ }, /turf/open/floor/plasteel, /area/science/circuit) -"qpv" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/autolathe, -/turf/open/floor/plasteel/white, -/area/science/circuit) "quT" = ( /obj/structure/lattice, /obj/structure/grille/broken, @@ -54043,6 +54031,7 @@ dir = 8; pixel_x = -24 }, +/obj/item/stock_parts/cell/high, /turf/open/floor/plasteel/white, /area/science/circuit) "vCb" = ( @@ -54057,7 +54046,6 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/libraryscanner, /turf/open/floor/plasteel/white, /area/science/circuit) "wkN" = ( @@ -54089,9 +54077,7 @@ "wvX" = ( /obj/structure/table/reinforced, /obj/machinery/light, -/obj/item/stock_parts/cell/super, -/obj/item/stock_parts/cell/super, -/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/metal/ten, /turf/open/floor/plasteel/white, /area/science/circuit) "wBd" = ( @@ -103907,16 +103893,16 @@ bMB bNA cOe bSl -bRb +bUq flc vPE -bUq +bXs bVt dfh jSO jgm oUh -qpv +vPE jrE saK bSl diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index c3a5e9d6349..c4d3ca9ec0a 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -77164,19 +77164,17 @@ /area/science/research/abandoned) "djp" = ( /obj/structure/table/reinforced, -/obj/item/stack/sheet/glass/fifty, +/obj/machinery/cell_charger, /turf/open/floor/plasteel/white/side, /area/science/circuit) "djq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/rnd/production/protolathe/department/science, /obj/machinery/light{ dir = 1 }, /turf/open/floor/plasteel/white/side, /area/science/circuit) "djr" = ( -/obj/machinery/autolathe, /turf/open/floor/plasteel/white/side, /area/science/circuit) "djs" = ( @@ -78542,12 +78540,11 @@ /area/crew_quarters/abandoned_gambling_den) "dmr" = ( /obj/structure/table/reinforced, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stock_parts/cell/super, -/obj/item/stock_parts/cell/super, /obj/structure/sign/departments/science{ pixel_x = -32 }, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, /turf/open/floor/plasteel/white/side{ dir = 4 }, @@ -79282,7 +79279,8 @@ pixel_x = -26 }, /obj/effect/decal/cleanable/dirt, -/obj/item/stack/sheet/metal/fifty, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, /turf/open/floor/plasteel/white/side{ dir = 4 }, @@ -80849,8 +80847,6 @@ pixel_y = -32 }, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/super, -/obj/item/stock_parts/cell/super, /turf/open/floor/plasteel/white/side{ dir = 1 }, @@ -80884,16 +80880,16 @@ }, /area/science/circuit) "drD" = ( -/obj/machinery/vending/assist, /turf/open/floor/plasteel/white/side{ dir = 1 }, /area/science/circuit) "drE" = ( -/obj/machinery/bookbinder, /obj/structure/sign/poster/official/build{ pixel_y = -32 }, +/obj/structure/table/reinforced, +/obj/item/storage/fancy/donut_box, /turf/open/floor/plasteel/white/side{ dir = 1 }, @@ -80902,11 +80898,11 @@ /obj/machinery/light_switch{ pixel_x = 36 }, -/obj/machinery/libraryscanner, /obj/machinery/firealarm{ dir = 4; pixel_x = 24 }, +/obj/machinery/vending/assist, /turf/open/floor/plasteel/white/corner{ dir = 1 }, @@ -99717,7 +99713,7 @@ "gUH" = ( /obj/machinery/light, /obj/structure/table/reinforced, -/obj/machinery/computer/libraryconsole/bookmanagement, +/obj/item/stack/sheet/metal/ten, /turf/open/floor/plasteel/white/side{ dir = 1 }, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 5901de1b017..08441261746 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -75956,6 +75956,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/item/stack/sheet/metal/ten, /turf/open/floor/plasteel/white, /area/science/circuit) "eqG" = ( @@ -76019,10 +76020,6 @@ }, /turf/open/floor/plasteel/white, /area/science/circuit) -"gfh" = ( -/obj/machinery/libraryscanner, -/turf/open/floor/plasteel/white, -/area/science/circuit) "gnZ" = ( /obj/item/radio/intercom{ pixel_y = -30 @@ -76104,13 +76101,6 @@ }, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) -"hfJ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/autolathe, -/turf/open/floor/plasteel/white, -/area/science/circuit) "hvt" = ( /obj/structure/kitchenspike_frame, /obj/effect/decal/cleanable/blood/gibs/old, @@ -76174,9 +76164,6 @@ /turf/closed/wall/mineral/plastitanium, /area/crew_quarters/fitness/recreation) "jyv" = ( -/obj/item/stock_parts/cell/super, -/obj/item/stock_parts/cell/super, -/obj/item/stack/sheet/metal/fifty, /obj/structure/table/reinforced, /obj/machinery/computer/security/telescreen{ desc = "Used for watching the RD's goons from the safety of your own office."; @@ -76184,6 +76171,8 @@ network = list("rd"); pixel_y = 32 }, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, /turf/open/floor/plasteel/white, /area/science/circuit) "jyQ" = ( @@ -76479,7 +76468,6 @@ /obj/machinery/light{ dir = 1 }, -/obj/item/stock_parts/cell/super, /obj/structure/table/reinforced, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -76490,8 +76478,8 @@ network = list("rd"); pixel_y = 32 }, -/obj/item/stock_parts/cell/super, -/obj/item/stack/sheet/metal/fifty, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, /turf/open/floor/plasteel/white, /area/science/circuit) "ohj" = ( @@ -76710,11 +76698,6 @@ /obj/structure/grille, /turf/open/floor/plating/airless, /area/space/nearstation) -"sog" = ( -/obj/machinery/libraryscanner, -/obj/machinery/bookbinder, -/turf/open/floor/plasteel/white, -/area/science/circuit) "sFv" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -76756,11 +76739,6 @@ "sJW" = ( /turf/closed/wall/mineral/plastitanium, /area/engine/break_room) -"tjH" = ( -/obj/structure/table/reinforced, -/obj/machinery/computer/libraryconsole/bookmanagement, -/turf/open/floor/plasteel/white, -/area/science/circuit) "tsx" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -76859,7 +76837,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/rnd/production/protolathe/department/science, +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-10" + }, /turf/open/floor/plasteel/white, /area/science/circuit) "uYk" = ( @@ -113710,7 +113690,7 @@ cuZ fFM cud kxk -tjH +cxO cxO cxO dGH @@ -114997,7 +114977,7 @@ mjJ krD eqq llb -hfJ +uTS cxO cxO krD @@ -115256,7 +115236,7 @@ lsv txj eEe cxO -gfh +cxO krD aaa aaa @@ -115513,7 +115493,7 @@ jyv ohj nnK cxO -sog +cxO krD aaa aaa diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 9a33bdc1589..9fefb186767 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -24235,13 +24235,9 @@ /area/science/explab) "blV" = ( /obj/structure/table/reinforced, -/obj/item/stack/sheet/metal/fifty{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stack/sheet/metal/fifty, /obj/item/clothing/glasses/science, /obj/item/clothing/glasses/science, +/obj/item/stack/sheet/metal/ten, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -24645,10 +24641,10 @@ /obj/machinery/cell_charger{ pixel_y = 5 }, -/obj/item/stock_parts/cell/super, -/obj/item/stock_parts/cell/super, -/obj/item/stock_parts/cell/super, -/obj/item/stock_parts/cell/super, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -24987,7 +24983,9 @@ /turf/open/floor/engine, /area/science/explab) "bnZ" = ( -/obj/machinery/rnd/production/techfab/department/science, +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-10" + }, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -48943,12 +48941,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"hOd" = ( -/obj/machinery/autolathe, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/science/explab) "hOx" = ( /obj/structure/cable{ icon_state = "2-4" @@ -96233,7 +96225,7 @@ bjx bjw qDJ vmG -hOd +bnZ pDP nBL bqs From f8dd1dda859d99566840f8c016838c22773d4ed5 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Tue, 19 Jun 2018 02:29:38 -0400 Subject: [PATCH 012/133] Fix some shuttle chair stuff (#38557) * Fix shuttle chair stuff * Remove redundancy --- _maps/shuttles/arrival_box.dmm | 10 +++---- _maps/shuttles/arrival_delta.dmm | 4 +-- _maps/shuttles/arrival_omega.dmm | 4 +-- _maps/shuttles/arrival_pubby.dmm | 2 +- _maps/shuttles/assault_pod_default.dmm | 8 ++--- _maps/shuttles/emergency_asteroid.dmm | 20 ++++++------- _maps/shuttles/emergency_bar.dmm | 4 +-- _maps/shuttles/emergency_birdboat.dmm | 22 +++++++------- _maps/shuttles/emergency_box.dmm | 22 +++++++------- _maps/shuttles/emergency_cere.dmm | 28 ++++++++--------- _maps/shuttles/emergency_clown.dmm | 12 ++++---- _maps/shuttles/emergency_cramped.dmm | 6 ++-- _maps/shuttles/emergency_delta.dmm | 24 +++++++-------- _maps/shuttles/emergency_goon.dmm | 8 ++--- _maps/shuttles/emergency_meta.dmm | 22 +++++++------- _maps/shuttles/emergency_mini.dmm | 24 +++++++-------- _maps/shuttles/emergency_narnar.dmm | 8 ++--- _maps/shuttles/emergency_omega.dmm | 18 +++++------ _maps/shuttles/emergency_pubby.dmm | 30 +++++++++---------- _maps/shuttles/emergency_raven.dmm | 20 ++++++------- _maps/shuttles/emergency_russiafightpit.dmm | 28 ++++++++--------- _maps/shuttles/emergency_scrapheap.dmm | 16 +++++----- _maps/shuttles/emergency_supermatter.dmm | 10 +++---- _maps/shuttles/emergency_wabbajack.dmm | 18 +++++------ _maps/shuttles/escape_pod_default.dmm | 4 +-- _maps/shuttles/escape_pod_large.dmm | 12 ++++---- _maps/shuttles/ferry_base.dmm | 6 ++-- _maps/shuttles/ferry_fancy.dmm | 4 +-- _maps/shuttles/ferry_lighthouse.dmm | 6 ++-- _maps/shuttles/ferry_meat.dmm | 6 ++-- _maps/shuttles/infiltrator_basic.dmm | 12 ++++---- _maps/shuttles/labour_box.dmm | 2 +- _maps/shuttles/labour_delta.dmm | 4 +-- _maps/shuttles/mining_box.dmm | 2 +- _maps/shuttles/mining_delta.dmm | 8 ++--- _maps/shuttles/pirate_default.dmm | 8 ++--- _maps/shuttles/ruin_caravan_victim.dmm | 2 +- _maps/shuttles/ruin_syndicate_dropship.dmm | 12 ++++---- _maps/shuttles/ruin_syndicate_fighter.dmm | 2 +- _maps/shuttles/whiteship_box.dmm | 6 ++-- _maps/shuttles/whiteship_meta.dmm | 8 ++--- _maps/shuttles/whiteship_pubby.dmm | 8 ++--- .../objects/structures/beds_chairs/chair.dm | 28 ++++++++--------- 43 files changed, 253 insertions(+), 255 deletions(-) diff --git a/_maps/shuttles/arrival_box.dmm b/_maps/shuttles/arrival_box.dmm index 2b245557a08..d117ca0f6b3 100644 --- a/_maps/shuttles/arrival_box.dmm +++ b/_maps/shuttles/arrival_box.dmm @@ -78,18 +78,18 @@ /turf/open/floor/plating, /area/shuttle/arrival) "p" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "q" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/machinery/light/small{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "r" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, @@ -114,13 +114,13 @@ /turf/open/floor/plating/airless, /area/shuttle/arrival) "v" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "w" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/machinery/light/small{ diff --git a/_maps/shuttles/arrival_delta.dmm b/_maps/shuttles/arrival_delta.dmm index 08f34e1c23f..b19ad63eb12 100644 --- a/_maps/shuttles/arrival_delta.dmm +++ b/_maps/shuttles/arrival_delta.dmm @@ -211,14 +211,14 @@ }, /area/shuttle/arrival) "u" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/arrival) "v" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/effect/turf_decal/bot, diff --git a/_maps/shuttles/arrival_omega.dmm b/_maps/shuttles/arrival_omega.dmm index b8fc6327795..04f19f60ea2 100644 --- a/_maps/shuttles/arrival_omega.dmm +++ b/_maps/shuttles/arrival_omega.dmm @@ -124,14 +124,14 @@ /turf/open/floor/plating, /area/shuttle/arrival) "q" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/arrival) "r" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/effect/turf_decal/bot, diff --git a/_maps/shuttles/arrival_pubby.dmm b/_maps/shuttles/arrival_pubby.dmm index a4308729b2a..3309533f354 100644 --- a/_maps/shuttles/arrival_pubby.dmm +++ b/_maps/shuttles/arrival_pubby.dmm @@ -85,7 +85,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "o" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, diff --git a/_maps/shuttles/assault_pod_default.dmm b/_maps/shuttles/assault_pod_default.dmm index 9414fa9f82d..4574318e476 100644 --- a/_maps/shuttles/assault_pod_default.dmm +++ b/_maps/shuttles/assault_pod_default.dmm @@ -4,7 +4,7 @@ /turf/closed/wall/mineral/plastitanium, /area/shuttle/assault_pod) "c" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium, @@ -45,20 +45,20 @@ /turf/open/floor/plating, /area/shuttle/assault_pod) "D" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/machinery/light{ dir = 1 }, /turf/open/floor/mineral/plastitanium, /area/shuttle/assault_pod) "H" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium, /area/shuttle/assault_pod) "L" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/machinery/light, diff --git a/_maps/shuttles/emergency_asteroid.dmm b/_maps/shuttles/emergency_asteroid.dmm index b1d300574dc..258f9a76d31 100644 --- a/_maps/shuttles/emergency_asteroid.dmm +++ b/_maps/shuttles/emergency_asteroid.dmm @@ -73,7 +73,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "av" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -82,7 +82,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "ax" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -94,7 +94,7 @@ /turf/closed/wall/mineral/titanium/interior, /area/shuttle/escape) "aE" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/item/radio/intercom{ @@ -131,7 +131,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aK" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aL" = ( @@ -210,19 +210,19 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "aY" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aZ" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ba" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -345,7 +345,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "bw" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/item/radio/intercom{ @@ -355,7 +355,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "bx" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/structure/extinguisher_cabinet{ @@ -427,7 +427,7 @@ /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "bK" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/machinery/light{ dir = 1 }, diff --git a/_maps/shuttles/emergency_bar.dmm b/_maps/shuttles/emergency_bar.dmm index 9b4776a0110..4b0f919532c 100644 --- a/_maps/shuttles/emergency_bar.dmm +++ b/_maps/shuttles/emergency_bar.dmm @@ -138,7 +138,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "aC" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aD" = ( @@ -214,7 +214,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aM" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig, diff --git a/_maps/shuttles/emergency_birdboat.dmm b/_maps/shuttles/emergency_birdboat.dmm index d88e15fc942..6719587d1eb 100644 --- a/_maps/shuttles/emergency_birdboat.dmm +++ b/_maps/shuttles/emergency_birdboat.dmm @@ -53,11 +53,11 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "al" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "am" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/machinery/light{ dir = 1 }, @@ -87,7 +87,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ar" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, @@ -157,7 +157,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aE" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/plasteel/dark, @@ -174,7 +174,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aH" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/plasteel/dark, @@ -215,14 +215,14 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aN" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/structure/window/reinforced, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aO" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/structure/window/reinforced, @@ -232,7 +232,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aP" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/structure/window/reinforced{ dir = 1; pixel_y = 2 @@ -255,13 +255,13 @@ /turf/open/floor/plasteel/white, /area/shuttle/escape) "aS" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aT" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/machinery/light, @@ -286,7 +286,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aW" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aX" = ( diff --git a/_maps/shuttles/emergency_box.dmm b/_maps/shuttles/emergency_box.dmm index 57ddc27a97d..dff9ccb5d24 100644 --- a/_maps/shuttles/emergency_box.dmm +++ b/_maps/shuttles/emergency_box.dmm @@ -18,7 +18,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "ag" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, @@ -44,7 +44,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "am" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, @@ -53,7 +53,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ao" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -71,7 +71,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "ar" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/structure/extinguisher_cabinet{ @@ -113,7 +113,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "aA" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aB" = ( @@ -179,17 +179,17 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aJ" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aK" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aL" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium, @@ -224,7 +224,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aS" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/structure/window/reinforced{ @@ -233,7 +233,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aT" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/structure/window/reinforced{ @@ -242,7 +242,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aU" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium, diff --git a/_maps/shuttles/emergency_cere.dmm b/_maps/shuttles/emergency_cere.dmm index 7b9e8cfa6c2..d64c28b8b90 100644 --- a/_maps/shuttles/emergency_cere.dmm +++ b/_maps/shuttles/emergency_cere.dmm @@ -251,11 +251,11 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aS" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aT" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/machinery/light{ dir = 1 }, @@ -283,7 +283,7 @@ }, /area/shuttle/escape) "aW" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/machinery/light{ dir = 1 }, @@ -294,7 +294,7 @@ }, /area/shuttle/escape) "aX" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/plastitanium/brig{ icon_state = "darkred"; dir = 1; @@ -302,7 +302,7 @@ }, /area/shuttle/escape) "aY" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/plastitanium/brig{ icon_state = "darkred"; dir = 5; @@ -330,7 +330,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bd" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -339,7 +339,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bf" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/machinery/flasher{ @@ -381,7 +381,7 @@ /turf/open/floor/mech_bay_recharge_floor, /area/shuttle/escape) "bk" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -412,7 +412,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bp" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/machinery/flasher{ @@ -479,7 +479,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "bw" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig{ @@ -489,7 +489,7 @@ }, /area/shuttle/escape) "bx" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig{ @@ -509,7 +509,7 @@ }, /area/shuttle/escape) "bz" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig{ @@ -658,7 +658,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bW" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/structure/window/reinforced{ @@ -667,7 +667,7 @@ /turf/open/floor/plasteel/neutral, /area/shuttle/escape) "bX" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/structure/window/reinforced{ diff --git a/_maps/shuttles/emergency_clown.dmm b/_maps/shuttles/emergency_clown.dmm index 3dd4766d6a9..2eaebaeb454 100644 --- a/_maps/shuttles/emergency_clown.dmm +++ b/_maps/shuttles/emergency_clown.dmm @@ -18,7 +18,7 @@ /turf/open/floor/noslip, /area/shuttle/escape) "af" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/bluespace, @@ -43,7 +43,7 @@ /turf/open/floor/noslip, /area/shuttle/escape) "aj" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/bluespace, @@ -53,7 +53,7 @@ /turf/open/floor/bluespace, /area/shuttle/escape) "al" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/bluespace, @@ -71,7 +71,7 @@ /turf/open/floor/noslip, /area/shuttle/escape) "ao" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/structure/extinguisher_cabinet{ @@ -154,11 +154,11 @@ /turf/open/floor/noslip, /area/shuttle/escape) "aC" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/noslip, /area/shuttle/escape) "aD" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/noslip, diff --git a/_maps/shuttles/emergency_cramped.dmm b/_maps/shuttles/emergency_cramped.dmm index 457e23d84b5..aa1b9f0f0db 100644 --- a/_maps/shuttles/emergency_cramped.dmm +++ b/_maps/shuttles/emergency_cramped.dmm @@ -17,7 +17,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "e" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/plasteel/dark, @@ -74,7 +74,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "n" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/plating, @@ -109,7 +109,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "s" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/structure/extinguisher_cabinet{ diff --git a/_maps/shuttles/emergency_delta.dmm b/_maps/shuttles/emergency_delta.dmm index 24d59e50337..256358bbae7 100644 --- a/_maps/shuttles/emergency_delta.dmm +++ b/_maps/shuttles/emergency_delta.dmm @@ -240,14 +240,14 @@ /turf/open/floor/plasteel/cmo, /area/shuttle/escape) "av" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/escape) "aw" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/effect/turf_decal/bot, @@ -326,7 +326,7 @@ }, /area/shuttle/escape) "aH" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/item/radio/intercom{ @@ -672,7 +672,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bx" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "by" = ( @@ -709,12 +709,12 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bC" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/escape) "bD" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/machinery/status_display{ pixel_y = 32 }, @@ -722,7 +722,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bE" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -771,7 +771,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bM" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/machinery/status_display{ @@ -780,7 +780,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bN" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -823,7 +823,7 @@ }, /area/shuttle/escape) "bU" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig, @@ -1059,7 +1059,7 @@ }, /area/shuttle/escape) "cB" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/effect/turf_decal/bot, @@ -1077,7 +1077,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "cG" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/machinery/light, diff --git a/_maps/shuttles/emergency_goon.dmm b/_maps/shuttles/emergency_goon.dmm index 57f0b23d9f9..6f31ce1d40d 100644 --- a/_maps/shuttles/emergency_goon.dmm +++ b/_maps/shuttles/emergency_goon.dmm @@ -74,7 +74,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "s" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -154,7 +154,7 @@ /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "H" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -201,7 +201,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "S" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/machinery/light{ @@ -210,7 +210,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "T" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/machinery/light/small{ diff --git a/_maps/shuttles/emergency_meta.dmm b/_maps/shuttles/emergency_meta.dmm index faf70072d34..29b8661ae29 100644 --- a/_maps/shuttles/emergency_meta.dmm +++ b/_maps/shuttles/emergency_meta.dmm @@ -65,7 +65,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ar" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "as" = ( @@ -74,7 +74,7 @@ name = "Station Intercom (General)"; pixel_y = 27 }, -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/machinery/light{ dir = 1 }, @@ -220,7 +220,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aE" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium, @@ -314,7 +314,7 @@ name = "Station Intercom (General)"; pixel_y = -31 }, -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/machinery/light, @@ -362,7 +362,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bd" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/plasteel/floorgrime, @@ -377,13 +377,13 @@ /turf/open/floor/plasteel/floorgrime, /area/shuttle/escape) "bh" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bi" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bj" = ( @@ -436,7 +436,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bs" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -713,7 +713,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bV" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/machinery/light{ dir = 1 }, @@ -816,7 +816,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ca" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/machinery/light, @@ -835,7 +835,7 @@ /turf/open/floor/plasteel/floorgrime, /area/shuttle/escape) "cd" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/machinery/light{ diff --git a/_maps/shuttles/emergency_mini.dmm b/_maps/shuttles/emergency_mini.dmm index 42650f6fd1a..a0b6ce6db96 100644 --- a/_maps/shuttles/emergency_mini.dmm +++ b/_maps/shuttles/emergency_mini.dmm @@ -40,7 +40,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "h" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -49,7 +49,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "j" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -68,7 +68,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "m" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/machinery/light/small{ @@ -116,25 +116,25 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "v" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "w" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "x" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "y" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/machinery/light{ @@ -149,7 +149,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "A" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/machinery/light{ @@ -171,7 +171,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "C" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "D" = ( @@ -218,7 +218,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "K" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, @@ -231,7 +231,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "M" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -261,7 +261,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "R" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "S" = ( diff --git a/_maps/shuttles/emergency_narnar.dmm b/_maps/shuttles/emergency_narnar.dmm index 9d6c5f1e4d4..aaa9c861cef 100644 --- a/_maps/shuttles/emergency_narnar.dmm +++ b/_maps/shuttles/emergency_narnar.dmm @@ -15,7 +15,7 @@ /turf/open/floor/plasteel/cult, /area/shuttle/escape) "e" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/plasteel/cult, @@ -40,7 +40,7 @@ /turf/open/floor/plasteel/cult, /area/shuttle/escape) "i" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/plasteel/cult, @@ -49,7 +49,7 @@ /turf/open/floor/plasteel/cult, /area/shuttle/escape) "k" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/plasteel/cult, @@ -67,7 +67,7 @@ /turf/open/floor/plasteel/cult, /area/shuttle/escape) "n" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/structure/extinguisher_cabinet{ diff --git a/_maps/shuttles/emergency_omega.dmm b/_maps/shuttles/emergency_omega.dmm index 570cb99f0ab..0debf2ad0fb 100644 --- a/_maps/shuttles/emergency_omega.dmm +++ b/_maps/shuttles/emergency_omega.dmm @@ -12,7 +12,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "ad" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/machinery/newscaster/security_unit{ @@ -24,11 +24,11 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "ae" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "af" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/item/radio/intercom{ @@ -67,7 +67,7 @@ }, /area/shuttle/escape) "ak" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/machinery/status_display{ @@ -240,7 +240,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "aD" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/machinery/status_display{ @@ -253,7 +253,7 @@ /turf/open/floor/plasteel/neutral, /area/shuttle/escape) "aF" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/effect/turf_decal/bot, @@ -356,14 +356,14 @@ /turf/open/floor/grass, /area/shuttle/escape) "aJ" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/escape) "aK" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/effect/turf_decal/bot, @@ -384,7 +384,7 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/escape) "aN" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/effect/turf_decal/bot, diff --git a/_maps/shuttles/emergency_pubby.dmm b/_maps/shuttles/emergency_pubby.dmm index 47b891cfd04..136cabe9db4 100644 --- a/_maps/shuttles/emergency_pubby.dmm +++ b/_maps/shuttles/emergency_pubby.dmm @@ -222,7 +222,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aJ" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/plasteel/darkpurple/side{ dir = 9 }, @@ -235,7 +235,7 @@ /turf/open/floor/plasteel/darkgreen/side, /area/shuttle/escape) "aL" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/plasteel/darkpurple/side{ dir = 5 }, @@ -253,7 +253,7 @@ }, /area/shuttle/escape) "aO" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/structure/window/reinforced, @@ -262,14 +262,14 @@ }, /area/shuttle/escape) "aP" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/structure/window/reinforced, /turf/open/floor/plasteel/darkpurple/side, /area/shuttle/escape) "aQ" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/structure/window/reinforced, @@ -283,7 +283,7 @@ }, /area/shuttle/escape) "aS" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/plasteel/darkpurple/side{ @@ -291,7 +291,7 @@ }, /area/shuttle/escape) "aT" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/machinery/light{ dir = 1 }, @@ -300,7 +300,7 @@ }, /area/shuttle/escape) "aU" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/plasteel/darkpurple/side{ @@ -328,7 +328,7 @@ /turf/open/floor/plasteel/cmo, /area/shuttle/escape) "aY" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/machinery/light, @@ -370,7 +370,7 @@ /turf/open/floor/plasteel/cafeteria, /area/shuttle/escape) "be" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/plasteel/cmo, /area/shuttle/escape) "bf" = ( @@ -424,7 +424,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "bo" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/structure/window/reinforced{ dir = 1; pixel_y = 2 @@ -432,7 +432,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "bq" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/plating, @@ -466,13 +466,13 @@ /turf/open/floor/plating, /area/shuttle/escape) "bw" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bx" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -518,7 +518,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "bG" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/machinery/light, diff --git a/_maps/shuttles/emergency_raven.dmm b/_maps/shuttles/emergency_raven.dmm index d5ca59c4f2b..edd86c5ec60 100644 --- a/_maps/shuttles/emergency_raven.dmm +++ b/_maps/shuttles/emergency_raven.dmm @@ -420,7 +420,7 @@ }, /area/shuttle/escape) "bd" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig{ @@ -572,7 +572,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "bx" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig{ @@ -660,7 +660,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "bK" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/plasteel/darkgreen/side{ dir = 8 }, @@ -679,7 +679,7 @@ }, /area/shuttle/escape) "bN" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/plasteel/darkgreen/side, @@ -815,7 +815,7 @@ }, /area/shuttle/escape) "bX" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/structure/window/reinforced{ @@ -824,7 +824,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "bY" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/structure/window/reinforced{ @@ -833,27 +833,27 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "bZ" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/structure/window/reinforced, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "ca" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/structure/window/reinforced{ dir = 1 }, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "cb" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/plasteel/darkgreen/side{ dir = 1 }, /area/shuttle/escape) "cc" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/plasteel/darkgreen/side, diff --git a/_maps/shuttles/emergency_russiafightpit.dmm b/_maps/shuttles/emergency_russiafightpit.dmm index 3e5568279b3..d0b8f7ca80e 100644 --- a/_maps/shuttles/emergency_russiafightpit.dmm +++ b/_maps/shuttles/emergency_russiafightpit.dmm @@ -18,7 +18,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "af" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, @@ -43,7 +43,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aj" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, @@ -76,7 +76,7 @@ pixel_x = 6; pixel_y = -24 }, -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, @@ -91,7 +91,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aq" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ar" = ( @@ -102,7 +102,7 @@ pixel_y = -6; req_access_txt = "19" }, -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/machinery/button/door{ id = "bearsbearsbears"; name = "release bears"; @@ -131,7 +131,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "av" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aw" = ( @@ -204,7 +204,7 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/escape) "aJ" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium, @@ -238,7 +238,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "aP" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig, @@ -315,7 +315,7 @@ /turf/open/floor/engine, /area/shuttle/escape) "bc" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/structure/window/reinforced{ @@ -327,7 +327,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium, @@ -341,7 +341,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium, @@ -350,13 +350,13 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium, /area/shuttle/escape) "bh" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium, @@ -551,7 +551,7 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/escape) "bO" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/machinery/light/small{ diff --git a/_maps/shuttles/emergency_scrapheap.dmm b/_maps/shuttles/emergency_scrapheap.dmm index e95fcb507cd..cb2b7517b5a 100644 --- a/_maps/shuttles/emergency_scrapheap.dmm +++ b/_maps/shuttles/emergency_scrapheap.dmm @@ -109,7 +109,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "at" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "au" = ( @@ -178,7 +178,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aE" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig, @@ -188,7 +188,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aG" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aH" = ( @@ -222,7 +222,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "aL" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, @@ -231,7 +231,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -266,7 +266,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aT" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/structure/extinguisher_cabinet{ @@ -395,14 +395,14 @@ /turf/open/floor/plating/airless, /area/shuttle/escape) "bo" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/machinery/light{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "bp" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/machinery/light{ diff --git a/_maps/shuttles/emergency_supermatter.dmm b/_maps/shuttles/emergency_supermatter.dmm index ce8842a41b6..0dc057963c7 100644 --- a/_maps/shuttles/emergency_supermatter.dmm +++ b/_maps/shuttles/emergency_supermatter.dmm @@ -21,14 +21,14 @@ /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "ah" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "ai" = ( /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "aj" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/yellow, @@ -73,7 +73,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "ar" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/yellow, @@ -94,7 +94,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "av" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/yellow, @@ -237,7 +237,7 @@ /turf/open/floor/plating/airless, /area/shuttle/escape) "bb" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/effect/turf_decal/stripes/line{ dir = 1 }, diff --git a/_maps/shuttles/emergency_wabbajack.dmm b/_maps/shuttles/emergency_wabbajack.dmm index 34f16610204..9bdb49064f7 100644 --- a/_maps/shuttles/emergency_wabbajack.dmm +++ b/_maps/shuttles/emergency_wabbajack.dmm @@ -38,7 +38,7 @@ /turf/open/floor/plasteel/cult, /area/shuttle/escape) "ak" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -47,7 +47,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "am" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -92,7 +92,7 @@ pixel_x = -24; pixel_y = -6 }, -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -102,11 +102,11 @@ /turf/open/floor/plasteel/cult, /area/shuttle/escape) "av" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aw" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium, @@ -182,13 +182,13 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "aI" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aJ" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/structure/window/reinforced{ @@ -352,7 +352,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "bm" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/machinery/light/small{ @@ -365,7 +365,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "bo" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/machinery/light/small{ diff --git a/_maps/shuttles/escape_pod_default.dmm b/_maps/shuttles/escape_pod_default.dmm index 8dcccf9326f..c2625b0e57a 100644 --- a/_maps/shuttles/escape_pod_default.dmm +++ b/_maps/shuttles/escape_pod_default.dmm @@ -3,7 +3,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/pod_1) "G" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/machinery/status_display{ @@ -32,7 +32,7 @@ /turf/open/floor/plating, /area/shuttle/pod_1) "U" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/item/radio/intercom{ diff --git a/_maps/shuttles/escape_pod_large.dmm b/_maps/shuttles/escape_pod_large.dmm index 49f2f44e1ed..6a36801db92 100644 --- a/_maps/shuttles/escape_pod_large.dmm +++ b/_maps/shuttles/escape_pod_large.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "h" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/item/storage/pod{ @@ -17,7 +17,7 @@ /turf/open/floor/plating, /area/shuttle/pod_1) "A" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/item/radio/intercom{ @@ -36,13 +36,13 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) "H" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) "J" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/machinery/status_display{ @@ -51,13 +51,13 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) "L" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) "M" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/machinery/status_display{ diff --git a/_maps/shuttles/ferry_base.dmm b/_maps/shuttles/ferry_base.dmm index f7e717ccb89..36a54e54bcd 100644 --- a/_maps/shuttles/ferry_base.dmm +++ b/_maps/shuttles/ferry_base.dmm @@ -24,7 +24,7 @@ /turf/closed/wall/mineral/titanium/interior, /area/shuttle/transport) "h" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -36,7 +36,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "j" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "k" = ( @@ -64,7 +64,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "q" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, diff --git a/_maps/shuttles/ferry_fancy.dmm b/_maps/shuttles/ferry_fancy.dmm index e21bd7c5eb3..432791c9367 100644 --- a/_maps/shuttles/ferry_fancy.dmm +++ b/_maps/shuttles/ferry_fancy.dmm @@ -27,7 +27,7 @@ /turf/open/floor/plating/airless, /area/shuttle/transport) "g" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/pod/dark, /area/shuttle/transport) "h" = ( @@ -87,7 +87,7 @@ /turf/open/floor/plating/airless, /area/shuttle/transport) "p" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/pod/dark, diff --git a/_maps/shuttles/ferry_lighthouse.dmm b/_maps/shuttles/ferry_lighthouse.dmm index 21f8a58e44b..21d3bd3413f 100644 --- a/_maps/shuttles/ferry_lighthouse.dmm +++ b/_maps/shuttles/ferry_lighthouse.dmm @@ -68,7 +68,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "ar" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/wood, /area/shuttle/transport) "as" = ( @@ -137,7 +137,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "aJ" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "aK" = ( @@ -204,7 +204,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "aW" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, diff --git a/_maps/shuttles/ferry_meat.dmm b/_maps/shuttles/ferry_meat.dmm index 22d83d8d015..334df92b557 100644 --- a/_maps/shuttles/ferry_meat.dmm +++ b/_maps/shuttles/ferry_meat.dmm @@ -15,7 +15,7 @@ /turf/closed/wall/mineral/titanium/interior, /area/shuttle/transport) "f" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/plasteel/freezer, @@ -90,7 +90,7 @@ /area/shuttle/transport) "n" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/plasteel/freezer, /area/shuttle/transport) "o" = ( @@ -131,7 +131,7 @@ /turf/open/floor/plasteel/freezer, /area/shuttle/transport) "w" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/plasteel/freezer, diff --git a/_maps/shuttles/infiltrator_basic.dmm b/_maps/shuttles/infiltrator_basic.dmm index 0add06a7ff2..b1feae232ee 100644 --- a/_maps/shuttles/infiltrator_basic.dmm +++ b/_maps/shuttles/infiltrator_basic.dmm @@ -176,7 +176,7 @@ /turf/closed/wall/mineral/plastitanium, /area/shuttle/syndicate/hallway) "aC" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4; name = "tactical chair" }, @@ -188,7 +188,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/syndicate/hallway) "aE" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8; name = "tactical chair" }, @@ -206,7 +206,7 @@ /turf/closed/wall/mineral/plastitanium, /area/shuttle/syndicate/eva) "aH" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4; name = "tactical chair" }, @@ -218,7 +218,7 @@ }, /area/shuttle/syndicate/hallway) "aI" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8; name = "tactical chair" }, @@ -256,7 +256,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/syndicate/eva) "aO" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4; name = "tactical chair" }, @@ -318,7 +318,7 @@ }, /area/shuttle/syndicate/hallway) "aX" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4; name = "tactical chair" }, diff --git a/_maps/shuttles/labour_box.dmm b/_maps/shuttles/labour_box.dmm index fe9756ef334..636458a64c5 100644 --- a/_maps/shuttles/labour_box.dmm +++ b/_maps/shuttles/labour_box.dmm @@ -86,7 +86,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/labor) "o" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/machinery/flasher{ diff --git a/_maps/shuttles/labour_delta.dmm b/_maps/shuttles/labour_delta.dmm index aeb28416832..6df69ba0f64 100644 --- a/_maps/shuttles/labour_delta.dmm +++ b/_maps/shuttles/labour_delta.dmm @@ -120,7 +120,7 @@ /turf/open/floor/plasteel, /area/shuttle/labor) "q" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/effect/turf_decal/stripes/line{ @@ -133,7 +133,7 @@ /turf/open/floor/plasteel, /area/shuttle/labor) "s" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/machinery/flasher{ diff --git a/_maps/shuttles/mining_box.dmm b/_maps/shuttles/mining_box.dmm index 2f262cae2b8..b7354b8d894 100644 --- a/_maps/shuttles/mining_box.dmm +++ b/_maps/shuttles/mining_box.dmm @@ -18,7 +18,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/mining) "f" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, diff --git a/_maps/shuttles/mining_delta.dmm b/_maps/shuttles/mining_delta.dmm index 920a754e453..99bdb64aaea 100644 --- a/_maps/shuttles/mining_delta.dmm +++ b/_maps/shuttles/mining_delta.dmm @@ -47,7 +47,7 @@ /turf/open/floor/plasteel, /area/shuttle/mining) "g" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/plasteel/neutral, @@ -116,7 +116,7 @@ /turf/open/floor/plasteel/white, /area/shuttle/mining) "n" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/effect/decal/cleanable/dirt, @@ -126,7 +126,7 @@ /turf/open/floor/plasteel, /area/shuttle/mining) "o" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/effect/decal/cleanable/dirt, @@ -139,7 +139,7 @@ /turf/open/floor/plasteel, /area/shuttle/mining) "p" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/shuttles/pirate_default.dmm b/_maps/shuttles/pirate_default.dmm index 59ce3014af4..efd49c8908e 100644 --- a/_maps/shuttles/pirate_default.dmm +++ b/_maps/shuttles/pirate_default.dmm @@ -39,7 +39,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/pirate) "ag" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/plasteel/dark, @@ -71,7 +71,7 @@ pixel_y = -24; req_access = null }, -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/effect/decal/cleanable/dirt, @@ -82,7 +82,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/pirate) "an" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/effect/decal/cleanable/dirt, @@ -413,7 +413,7 @@ pixel_y = -24; req_access = null }, -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/shuttles/ruin_caravan_victim.dmm b/_maps/shuttles/ruin_caravan_victim.dmm index 8f65015d55e..aa42b30b9fd 100644 --- a/_maps/shuttles/ruin_caravan_victim.dmm +++ b/_maps/shuttles/ruin_caravan_victim.dmm @@ -156,7 +156,7 @@ }, /area/shuttle/caravan/freighter1) "gw" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/shuttles/ruin_syndicate_dropship.dmm b/_maps/shuttles/ruin_syndicate_dropship.dmm index ac9a2cd680c..696a99e30a1 100644 --- a/_maps/shuttles/ruin_syndicate_dropship.dmm +++ b/_maps/shuttles/ruin_syndicate_dropship.dmm @@ -88,7 +88,7 @@ /turf/open/floor/plating, /area/shuttle/caravan/syndicate3) "hF" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/machinery/light/small{ dir = 8 }, @@ -104,7 +104,7 @@ /turf/open/floor/pod/dark, /area/shuttle/caravan/syndicate3) "ka" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/machinery/light/small{ @@ -169,7 +169,7 @@ /turf/open/floor/plating, /area/shuttle/caravan/syndicate3) "rV" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/effect/decal/cleanable/dirt, @@ -185,7 +185,7 @@ }, /area/shuttle/caravan/syndicate3) "sn" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/effect/decal/cleanable/dirt, /turf/open/floor/pod/dark, /area/shuttle/caravan/syndicate3) @@ -247,7 +247,7 @@ /turf/open/floor/plasteel/darkred/side, /area/shuttle/caravan/syndicate3) "Cm" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/machinery/firealarm{ @@ -278,7 +278,7 @@ }, /area/shuttle/caravan/syndicate3) "EO" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/machinery/airalarm/syndicate{ pixel_y = 24 }, diff --git a/_maps/shuttles/ruin_syndicate_fighter.dmm b/_maps/shuttles/ruin_syndicate_fighter.dmm index 1f8c2640799..a9cf2a45b5b 100644 --- a/_maps/shuttles/ruin_syndicate_fighter.dmm +++ b/_maps/shuttles/ruin_syndicate_fighter.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aA" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/machinery/turretid{ diff --git a/_maps/shuttles/whiteship_box.dmm b/_maps/shuttles/whiteship_box.dmm index 6b56e1a6a0b..f7cd8ad5293 100644 --- a/_maps/shuttles/whiteship_box.dmm +++ b/_maps/shuttles/whiteship_box.dmm @@ -137,7 +137,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "aJ" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium, @@ -179,7 +179,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "aS" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/effect/decal/remains/human, @@ -232,7 +232,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "bd" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "bf" = ( diff --git a/_maps/shuttles/whiteship_meta.dmm b/_maps/shuttles/whiteship_meta.dmm index f8e366950ad..9888026e31f 100644 --- a/_maps/shuttles/whiteship_meta.dmm +++ b/_maps/shuttles/whiteship_meta.dmm @@ -753,7 +753,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "bo" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -827,7 +827,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) "bu" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /obj/effect/decal/cleanable/dirt{ @@ -871,7 +871,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "by" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/effect/decal/cleanable/dirt{ @@ -1022,7 +1022,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "bL" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /obj/effect/decal/cleanable/dirt{ diff --git a/_maps/shuttles/whiteship_pubby.dmm b/_maps/shuttles/whiteship_pubby.dmm index e7cf65a6f51..11214ef2607 100644 --- a/_maps/shuttles/whiteship_pubby.dmm +++ b/_maps/shuttles/whiteship_pubby.dmm @@ -42,7 +42,7 @@ /turf/open/floor/plating/abductor, /area/shuttle/abandoned) "i" = ( -/obj/structure/chair/shuttle, +/obj/structure/chair/comfy/shuttle, /turf/open/floor/plating/abductor, /area/shuttle/abandoned) "j" = ( @@ -65,7 +65,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "l" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/open/floor/plating/abductor, @@ -75,7 +75,7 @@ /turf/open/floor/plating/abductor, /area/shuttle/abandoned) "n" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/open/floor/plating/abductor, @@ -110,7 +110,7 @@ /turf/open/floor/plating/abductor, /area/shuttle/abandoned) "q" = ( -/obj/structure/chair/shuttle{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/open/floor/plating/abductor, diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index c7ab58f0117..a4915f6e1fa 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -148,14 +148,17 @@ resistance_flags = FLAMMABLE max_integrity = 70 buildstackamount = 2 - var/mutable_appearance/armrest item_chair = null + var/mutable_appearance/armrest /obj/structure/chair/comfy/Initialize() - armrest = mutable_appearance('icons/obj/chairs.dmi', "comfychair_armrest") + armrest = GetArmrest() armrest.layer = ABOVE_MOB_LAYER return ..() +/obj/structure/chair/comfy/proc/GetArmrest() + return mutable_appearance('icons/obj/chairs.dmi', "comfychair_armrest") + /obj/structure/chair/comfy/Destroy() QDEL_NULL(armrest) return ..() @@ -189,6 +192,14 @@ /obj/structure/chair/comfy/lime color = rgb(255,251,0) +/obj/structure/chair/comfy/shuttle + name = "shuttle seat" + desc = "A comfortable, secure seat. It has a more sturdy looking buckling system, for smoother flights." + icon_state = "shuttle_chair" + +/obj/structure/chair/comfy/shuttle/GetArmrest() + return mutable_appearance('icons/obj/chairs.dmi', "shuttle_chair_armrest") + /obj/structure/chair/office anchored = FALSE buildstackamount = 5 @@ -407,16 +418,3 @@ . = ..() if(has_gravity()) playsound(src, 'sound/machines/clockcult/integration_cog_install.ogg', 50, TRUE) - -/obj/structure/chair/shuttle - name = "shuttle seat" - desc = "A comfortable, secure seat. It has a more sturdy looking buckling system, for smoother flights." - icon_state = "shuttle_chair" - buildstackamount = 2 - var/mutable_appearance/armrest - item_chair = null - -/obj/structure/chair/shuttle/Initialize() - armrest = mutable_appearance('icons/obj/chairs.dmi', "shuttle_chair_armrest") - armrest.layer = ABOVE_MOB_LAYER - return ..() \ No newline at end of file From e7974dba7236130e093b35120292f22b0ec3c829 Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Tue, 19 Jun 2018 15:32:05 +0300 Subject: [PATCH 013/133] this is approaching nano-optimization --- code/modules/lighting/lighting_source.dm | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm index a6c28b4146b..59ce11baebf 100644 --- a/code/modules/lighting/lighting_source.dm +++ b/code/modules/lighting/lighting_source.dm @@ -56,10 +56,10 @@ if (top_atom) LAZYREMOVE(top_atom.light_sources, src) - + if (needs_update) GLOB.lighting_update_lights -= src - + . = ..() // Yes this doesn't align correctly on anything other than 4 width tabs. @@ -116,7 +116,6 @@ . = LUM_FALLOFF(C, pixel_turf); \ . *= light_power; \ var/OLD = effect_str[C]; \ - \ effect_str[C] = .; \ \ C.update_lumcount \ @@ -126,7 +125,6 @@ (. * lum_b) - (OLD * applied_lum_b) \ ); - #define REMOVE_CORNER(C) \ . = -effect_str[C]; \ C.update_lumcount \ @@ -167,8 +165,9 @@ /datum/light_source/proc/update_corners() var/update = FALSE + var/atom/source_atom = src.source_atom - if (!source_atom || QDELETED(source_atom)) + if (QDELETED(source_atom)) qdel(src) return From db914018c9e60de9d61cfe7f4ac318204206f57a Mon Sep 17 00:00:00 2001 From: Letter N <24603524+LetterN@users.noreply.github.com> Date: Tue, 19 Jun 2018 21:57:34 +0800 Subject: [PATCH 014/133] removes unnecessary
at README.md (#38600) --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0b1baf0841d..21a4ee0ba42 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,10 @@ [![Percentage of issues still open](https://isitmaintained.com/badge/open/tgstation/tgstation.svg)](https://isitmaintained.com/project/tgstation/tgstation "Percentage of issues still open") [![Average time to resolve an issue](https://isitmaintained.com/badge/resolution/tgstation/tgstation.svg)](https://isitmaintained.com/project/tgstation/tgstation "Average time to resolve an issue") ![Coverage](https://img.shields.io/badge/coverage---2%25-red.svg) [![forthebadge](https://forthebadge.com/images/badges/built-with-resentment.svg)](https://forthebadge.com) [![forthebadge](https://forthebadge.com/images/badges/contains-technical-debt.svg)](https://forthebadge.com) [![forinfinityandbyond](https://user-images.githubusercontent.com/5211576/29499758-4efff304-85e6-11e7-8267-62919c3688a9.gif)](https://www.reddit.com/r/SS13/comments/5oplxp/what_is_the_main_problem_with_byond_as_an_engine/dclbu1a) -**Website:** https://www.tgstation13.org
-**Code:** https://github.com/tgstation/tgstation
-**Wiki** https://tgstation13.org/wiki/Main_Page
-**IRC:** irc://irc.rizon.net/coderbus or if you dont have an IRC client, you can click [here](https://kiwiirc.com/client/irc.rizon.net:6667/?&theme=cli#coderbus).
+**Website:** https://www.tgstation13.org +**Code:** https://github.com/tgstation/tgstation +**Wiki** https://tgstation13.org/wiki/Main_Page +**IRC:** irc://irc.rizon.net/coderbus or if you dont have an IRC client, you can click [here](https://kiwiirc.com/client/irc.rizon.net:6667/?&theme=cli#coderbus) ## DOWNLOADING From 1a22d45dbfb426a84543acb398a18ed2ff22b012 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Tue, 19 Jun 2018 10:10:30 -0400 Subject: [PATCH 015/133] [s] Fixes stack overflow (#38592) [s] Fixes direct sql datum call exploit. --- code/controllers/subsystem/dbcore.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/controllers/subsystem/dbcore.dm b/code/controllers/subsystem/dbcore.dm index 3a2b79dbc28..db7ca5dd60d 100644 --- a/code/controllers/subsystem/dbcore.dm +++ b/code/controllers/subsystem/dbcore.dm @@ -264,6 +264,10 @@ Delayed insert mode was removed in mysql 7 and only works with MyISAM type table SSdbcore.active_queries -= src return ..() +/datum/DBQuery/CanProcCall(proc_name) + //fuck off kevinz + return FALSE + /datum/DBQuery/proc/Activity(activity) last_activity = activity last_activity_time = world.time From 4ca07f7cf2b04e4c64efade8c71cc3753e336432 Mon Sep 17 00:00:00 2001 From: JStheguy Date: Tue, 19 Jun 2018 09:22:59 -0500 Subject: [PATCH 016/133] [READY] Helps data disks stop being unemployed (#38319) * data cards actually have a function now * Adds data cards to the IC printer for real rea * more cards, less shitty code * how the fuck did I miss that adds a missing ..() * wait wrong use of ..() fuck --- .../subsystem/processing/circuit.dm | 5 +- code/game/objects/items/cards_ids.dm | 49 ++++++++++++------ .../integrated_electronics/subtypes/access.dm | 6 ++- .../integrated_electronics/subtypes/input.dm | 40 ++++++++++++++ icons/obj/card.dmi | Bin 4301 -> 5371 bytes 5 files changed, 83 insertions(+), 17 deletions(-) diff --git a/code/controllers/subsystem/processing/circuit.dm b/code/controllers/subsystem/processing/circuit.dm index db1bf1ff5f4..dad71a005a6 100644 --- a/code/controllers/subsystem/processing/circuit.dm +++ b/code/controllers/subsystem/processing/circuit.dm @@ -78,5 +78,8 @@ PROCESSING_SUBSYSTEM_DEF(circuit) /obj/item/integrated_electronics/wirer, /obj/item/integrated_electronics/debugger, /obj/item/integrated_electronics/analyzer, - /obj/item/integrated_electronics/detailer + /obj/item/integrated_electronics/detailer, + /obj/item/card/data, + /obj/item/card/data/full_color, + /obj/item/card/data/disk ) diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 3104f4b3426..7f750855f10 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -9,7 +9,7 @@ /* - * DATA CARDS - Used for the teleporter + * DATA CARDS - Used for the IC data card reader */ /obj/item/card name = "card" @@ -24,30 +24,49 @@ return BRUTELOSS /obj/item/card/data - name = "data disk" - desc = "A disk of data." - icon_state = "data" + name = "data card" + desc = "A plastic magstripe card for simple and speedy data storage and transfer. This one has a stripe running down the middle." + icon_state = "data_1" + obj_flags = UNIQUE_RENAME var/function = "storage" var/data = "null" var/special = null item_state = "card-id" lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' + var/detail_color = COLOR_ASSEMBLY_ORANGE -/obj/item/card/data/verb/label(t as text) - set name = "Label Disk" - set category = "Object" - set src in usr +/obj/item/card/data/Initialize() + .=..() + update_icon() - if(usr.stat || !usr.canmove || usr.restrained()) +/obj/item/card/data/update_icon() + cut_overlays() + if(detail_color == COLOR_FLOORTILE_GRAY) return + var/mutable_appearance/detail_overlay = mutable_appearance('icons/obj/card.dmi', "[icon_state]-color") + detail_overlay.color = detail_color + add_overlay(detail_overlay) - if (t) - src.name = "data disk- '[t]'" - else - src.name = "data disk" - src.add_fingerprint(usr) - return +/obj/item/card/data/attackby(obj/item/I, mob/living/user) + if(istype(I, /obj/item/integrated_electronics/detailer)) + var/obj/item/integrated_electronics/detailer/D = I + detail_color = D.detail_color + update_icon() + return ..() + +/obj/item/proc/GetCard() + +/obj/item/card/data/GetCard() + return src + +/obj/item/card/data/full_color + desc = "A plastic magstripe card for simple and speedy data storage and transfer. This one has the entire card colored." + icon_state = "data_2" + +/obj/item/card/data/disk + desc = "A plastic magstripe card for simple and speedy data storage and transfer. This one inexplicibly looks like a floppy disk." + icon_state = "data_3" /* * ID CARDS diff --git a/code/modules/integrated_electronics/subtypes/access.dm b/code/modules/integrated_electronics/subtypes/access.dm index bf710be0e2a..9012cd10899 100644 --- a/code/modules/integrated_electronics/subtypes/access.dm +++ b/code/modules/integrated_electronics/subtypes/access.dm @@ -1,5 +1,5 @@ /obj/item/integrated_circuit/input/card_reader - name = "card reader" + name = "ID card reader" //To differentiate it from the data card reader desc = "A circuit that can read the registred name, assignment, and PassKey string from an ID card." icon_state = "card_reader" @@ -14,6 +14,10 @@ "on read" = IC_PINTYPE_PULSE_OUT ) +/obj/item/integrated_circuit/input/card_reader/old + name = "card reader" + spawn_flags = 0 + /obj/item/integrated_circuit/input/card_reader/attackby_react(obj/item/I, mob/living/user, intent) var/obj/item/card/id/card = I.GetID() var/list/access = I.GetAccess() diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index b780762cd42..02500e5ed6a 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -1104,3 +1104,43 @@ else activate_pin(3) +/obj/item/integrated_circuit/input/data_card_reader + name = "data card reader" + desc = "A circuit that can read from and write to data cards." + extended_desc = "Setting the \"write mode\" boolean to true will cause any data cards that are used on the assembly to replace\ + their existing function and data strings with the given strings, if it is set to false then using a data card on the assembly will cause\ + the function and data strings stored on the card to be written to the output pins." + icon_state = "card_reader" + complexity = 4 + spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH + inputs = list( + "function" = IC_PINTYPE_STRING, + "data to store" = IC_PINTYPE_STRING, + "write mode" = IC_PINTYPE_BOOLEAN + ) + outputs = list( + "function" = IC_PINTYPE_STRING, + "stored data" = IC_PINTYPE_STRING + ) + activators = list( + "on write" = IC_PINTYPE_PULSE_OUT, + "on read" = IC_PINTYPE_PULSE_OUT + ) + +/obj/item/integrated_circuit/input/data_card_reader/attackby_react(obj/item/I, mob/living/user, intent) + var/obj/item/card/data/card = I.GetCard() + var/write_mode = get_pin_data(IC_INPUT, 3) + if(card) + if(write_mode == TRUE) + card.function = get_pin_data(IC_INPUT, 1) + card.data = get_pin_data(IC_INPUT, 2) + push_data() + activate_pin(1) + else + set_pin_data(IC_OUTPUT, 1, card.function) + set_pin_data(IC_OUTPUT, 2, card.data) + push_data() + activate_pin(2) + else + return FALSE + return TRUE diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi index e6778c51af5ee819852370af8d27098c02862a26..507801844cc5e861e73e4a44a8eed74cae88c019 100644 GIT binary patch literal 5371 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 kb(!+J|Gl>8IAS|JY5rh*tN;K2 literal 4301 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 From 0df8bb8040c66a976ec2edfbef8b9202049132d7 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 19 Jun 2018 07:23:05 -0700 Subject: [PATCH 017/133] Automatic changelog generation for PR #38319 [ci skip] --- html/changelogs/AutoChangeLog-pr-38319.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38319.yml diff --git a/html/changelogs/AutoChangeLog-pr-38319.yml b/html/changelogs/AutoChangeLog-pr-38319.yml new file mode 100644 index 00000000000..d27aee5b1bc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38319.yml @@ -0,0 +1,8 @@ +author: "JStheguy" +delete-after: True +changes: + - rscadd: "Added the data card reader circuit, a circuit that is able to read data cards, as well as write to them." + - tweak: "Data cards are now longer inexplicably called data disks despite clearly being cards, and can be printed from the \"tools\" section of the integrated circuit printer." + - tweak: "Data cards no longer have a special \"label card\" verb and instead can have their names and descriptions changed with a pen." + - rscadd: "Also, some aesthetically different variants of the data cards, because why not." + - imageadd: "Data cards have new sprites, with support for coloring them via the assembly detailer." From fc14312f3579ff35075198f373d4e10047b25b6d Mon Sep 17 00:00:00 2001 From: Irafas Date: Tue, 19 Jun 2018 15:49:04 +0100 Subject: [PATCH 018/133] PDA can be ctrl-clicked to remove the item in its pen slot (#38577) * Makes pens ez to remove from pda Players can now ctrl click on the PDA to remove the pen without having to remove the ID first. * added instructions when examined. Like how it tells the user they can use alt-click to remove contents, it now says they can use ctrl-click to remove items from the pen slot. * PDA can now be dragged without dropping the pen. When ctrl-clicked it now checks to see if the PDA is on a turf and will only output the pen if its not. * quick change to examine text. * comma * Improved the examine --- code/game/objects/items/devices/PDA/PDA.dm | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 89d4585b2a3..e514a82c5a4 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -92,8 +92,12 @@ GLOBAL_LIST_EMPTY(PDAs) ..() if(!id && !inserted_item) return - else - to_chat(user, "Alt-click to remove contents.") + + if(id) + to_chat(user, "Alt-click to remove the id.") + + if(inserted_item && (!isturf(loc))) + to_chat(user, "Ctrl-click to remove [inserted_item].") /obj/item/pda/Initialize() . = ..() @@ -712,6 +716,15 @@ GLOBAL_LIST_EMPTY(PDAs) else remove_pen() +/obj/item/pda/CtrlClick() + ..() + + if(issilicon(usr)) + return + + if(usr.canUseTopic(src) && !isturf(loc)) + remove_pen() + /obj/item/pda/verb/verb_remove_id() set category = "Object" set name = "Eject ID" From b3ccaa2d1ba6a63e5999a94af7ce85a0ed34913a Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 19 Jun 2018 07:49:07 -0700 Subject: [PATCH 019/133] Automatic changelog generation for PR #38577 [ci skip] --- html/changelogs/AutoChangeLog-pr-38577.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38577.yml diff --git a/html/changelogs/AutoChangeLog-pr-38577.yml b/html/changelogs/AutoChangeLog-pr-38577.yml new file mode 100644 index 00000000000..182c47ec88e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38577.yml @@ -0,0 +1,4 @@ +author: "Irafas" +delete-after: True +changes: + - rscadd: "Players can now ctrl-click the PDA to remove the item in its pen slot" From 745b22770fc6a63d1ce18d344b0d15c5ff29af0a Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 19 Jun 2018 07:49:30 -0700 Subject: [PATCH 020/133] Automatic changelog generation for PR #38580 [ci skip] --- html/changelogs/AutoChangeLog-pr-38580.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38580.yml diff --git a/html/changelogs/AutoChangeLog-pr-38580.yml b/html/changelogs/AutoChangeLog-pr-38580.yml new file mode 100644 index 00000000000..7467e0452b2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38580.yml @@ -0,0 +1,4 @@ +author: "Hyacinth-OR" +delete-after: True +changes: + - rscadd: "Added a pink scarf to vendomats" From 5cf3f53cc27d0d844ef6395d28a02f1405c3014b Mon Sep 17 00:00:00 2001 From: Denton Date: Tue, 19 Jun 2018 19:23:46 +0200 Subject: [PATCH 021/133] Adds desc to IV drips --- code/game/machinery/iv_drip.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 409e64ca7ec..2f8bf41a0b1 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -3,6 +3,7 @@ /obj/machinery/iv_drip name = "\improper IV drip" + desc = "An IV drip with an advanced infusion pump that can both drain blood into and inject liquids from attached containers. Blood packs are processed at an accelerated rate." icon = 'icons/obj/iv_drip.dmi' icon_state = "iv_drip" anchored = FALSE From 3c972c41eeeb4338b748211cd2df6dc0530f7fea Mon Sep 17 00:00:00 2001 From: AnturK Date: Tue, 19 Jun 2018 19:39:30 +0200 Subject: [PATCH 022/133] Fixes chemnade logging and cleans up the reagent stringify helper --- code/game/objects/items/grenades/chem_grenade.dm | 14 ++++++++------ code/modules/reagents/chemistry/reagents.dm | 8 ++++---- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm index c3691b5d376..3bed434bf83 100644 --- a/code/game/objects/items/grenades/chem_grenade.dm +++ b/code/game/objects/items/grenades/chem_grenade.dm @@ -165,15 +165,17 @@ /obj/item/grenade/chem_grenade/log_grenade(mob/user, turf/T) ..() + var/reagent_string = "" + var/beaker_number = 1 for(var/obj/exploded_beaker in beakers) if(!exploded_beaker.reagents) continue - var/reagent_list = pretty_string_from_reagent_list(exploded_beaker.reagents) - var/message = "[src] primed by [user] at [ADMIN_VERBOSEJMP(T)] contained [reagent_list]." - GLOB.bombers += message - message_admins(message) - log_game("[src] primed by [user] at [AREACOORD(T)] contained [reagent_list].") - add_logs(user, src, "primed", addition = "[reagent_list] inside.") + reagent_string += "[exploded_beaker][beaker_number++] :" + pretty_string_from_reagent_list(exploded_beaker.reagents.reagent_list) + ";" + var/message = "[src] primed by [user] at [ADMIN_VERBOSEJMP(T)] contained [reagent_string]." + GLOB.bombers += message + message_admins(message) + log_game("[src] primed by [user] at [AREACOORD(T)] contained [reagent_string].") + add_logs(user, src, "primed", addition = "[reagent_string] inside.") /obj/item/grenade/chem_grenade/prime() if(stage != READY) diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 86aaa16cd7b..33437a63fc2 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -115,10 +115,10 @@ to_chat(M, "You're not feeling good at all! You really need some [name].") return -/proc/pretty_string_from_reagent_list(var/list/reagent_list) +/proc/pretty_string_from_reagent_list(list/reagent_list) //Convert reagent list to a printable string for logging etc - var/result = "| " + var/list/rs = list() for (var/datum/reagent/R in reagent_list) - result += "[R.name], [R.volume] | " + rs += "[R.name], [R.volume]" - return result + return rs.Join(" | ") From 4dcfded622330981ac33f7a36ebac3880f430ade Mon Sep 17 00:00:00 2001 From: AnturK Date: Tue, 19 Jun 2018 20:02:35 +0200 Subject: [PATCH 023/133] Some spacing for readability --- code/game/objects/items/grenades/chem_grenade.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm index 3bed434bf83..c961fca9f2d 100644 --- a/code/game/objects/items/grenades/chem_grenade.dm +++ b/code/game/objects/items/grenades/chem_grenade.dm @@ -170,7 +170,7 @@ for(var/obj/exploded_beaker in beakers) if(!exploded_beaker.reagents) continue - reagent_string += "[exploded_beaker][beaker_number++] :" + pretty_string_from_reagent_list(exploded_beaker.reagents.reagent_list) + ";" + reagent_string += "[exploded_beaker] [beaker_number++] : " + pretty_string_from_reagent_list(exploded_beaker.reagents.reagent_list) + ";" var/message = "[src] primed by [user] at [ADMIN_VERBOSEJMP(T)] contained [reagent_string]." GLOB.bombers += message message_admins(message) From c14967a5d0098729a2d835864d36346406d40caf Mon Sep 17 00:00:00 2001 From: Denton Date: Tue, 19 Jun 2018 20:18:07 +0200 Subject: [PATCH 024/133] Adds health analyzers to the medical protolathe --- code/modules/research/designs/autolathe_designs.dm | 2 +- code/modules/research/designs/medical_designs.dm | 12 +++++++++++- code/modules/research/techweb/all_nodes.dm | 4 ++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 28609e921dc..af883bb06cc 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -423,7 +423,7 @@ /datum/design/healthanalyzer name = "Health Analyzer" id = "healthanalyzer" - build_type = AUTOLATHE + build_type = AUTOLATHE | PROTOLATHE materials = list(MAT_METAL = 500, MAT_GLASS = 50) build_path = /obj/item/healthanalyzer category = list("initial", "Medical") diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 9df3df3c317..5706d5f6816 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -200,7 +200,17 @@ materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) category = list("Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - + +/datum/design/healthanalyzer_advanced + name = "advanced health analyzer" + desc = "A hand-held body scanner able to distinguish vital signs of the subject with high accuracy." + id = "healthanalyzer_advanced" + build_path = /obj/item/healthanalyzer/advanced + build_type = PROTOLATHE + materials = list(MAT_METAL = 5000, MAT_GLASS = 2500, MAT_SILVER = 2000, MAT_GOLD = 1500) + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + ///////////////////////////////////////// //////////Cybernetic Implants//////////// ///////////////////////////////////////// diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index db943a2b96e..702d9cbdb33 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -18,7 +18,7 @@ display_name = "Biological Technology" description = "What makes us tick." //the MC, silly! prereq_ids = list("base") - design_ids = list("chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibmount", "operating", "soda_dispenser", "beer_dispenser") + design_ids = list("chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -27,7 +27,7 @@ display_name = "Advanced Biotechnology" description = "Advanced Biotechnology" prereq_ids = list("biotech") - design_ids = list("piercesyringe", "smoke_machine", "plasmarefiller", "limbgrower", "defibrillator", "meta_beaker") + design_ids = list("piercesyringe", "smoke_machine", "plasmarefiller", "limbgrower", "defibrillator", "meta_beaker", "healthanalyzer_advanced") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 From f337890fc3a3374ec99099f4714206ca4fc9d0ec Mon Sep 17 00:00:00 2001 From: Armhulen Date: Tue, 19 Jun 2018 12:12:10 -0700 Subject: [PATCH 025/133] Admin Kicks now prompt the admin to avoid accidental kicking (#38544) * TO THE PLAAAAAACE I BELOOOOOONG * TAKE ME HOOOOOOOOOOME * WEEEEEEST VIRGINIAAAAAAAAAAAAAAAAAAA * fixes my shit * No meming in admin frontend --- code/modules/admin/topic.dm | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index b9d85854e6f..8523ecd5b25 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1056,14 +1056,21 @@ if(!check_rights(R_ADMIN)) return var/mob/M = locate(href_list["boot2"]) - if (ismob(M)) + if(ismob(M)) if(!check_if_greater_rights_than(M.client)) to_chat(usr, "Error: They have more rights than you do.") return + if(alert(usr, "Kick [key_name(M)]?", "Confirm", "Yes", "No") != "Yes") + return + if(!M) + to_chat(usr, "Error: [M] no longer exists!") + return + if(!M.client) + to_chat(usr, "Error: [M] no longer has a client!") + return to_chat(M, "You have been kicked from the server by [usr.client.holder.fakekey ? "an Administrator" : "[usr.client.ckey]"].") log_admin("[key_name(usr)] kicked [key_name(M)].") message_admins("[key_name_admin(usr)] kicked [key_name_admin(M)].") - //M.client = null qdel(M.client) else if(href_list["addmessage"]) From d4a97ae74ca07c07e5c0d1f2f67f207a991645e9 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 19 Jun 2018 15:02:36 -0700 Subject: [PATCH 026/133] Automatic changelog generation for PR #38589 [ci skip] --- html/changelogs/AutoChangeLog-pr-38589.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38589.yml diff --git a/html/changelogs/AutoChangeLog-pr-38589.yml b/html/changelogs/AutoChangeLog-pr-38589.yml new file mode 100644 index 00000000000..7f9a5b1c7c7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38589.yml @@ -0,0 +1,7 @@ +author: "Dax Dupont" +delete-after: True +changes: + - balance: "Circuit lab no longer starts with super batteries, they have been replaced with high batteries." + - balance: "Circuit labs now start with 20 sheets of metal instead of 50/100. Plenty of materials on the station you can gather." + - balance: "Circuit labs no longer have their own protolathe and autolathe. Science has their own lathes already." + - tweak: "There's no more entire library worth of equipment, they can go publish the books like the rest of the station, in the library. At least give the librarians something other to do than screaming about lizard porn on the radio." From 82386a86f8f1bd7581f938953911938a33635438 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 19 Jun 2018 15:18:15 -0700 Subject: [PATCH 027/133] Automatic changelog generation for PR #38574 [ci skip] --- html/changelogs/AutoChangeLog-pr-38574.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38574.yml diff --git a/html/changelogs/AutoChangeLog-pr-38574.yml b/html/changelogs/AutoChangeLog-pr-38574.yml new file mode 100644 index 00000000000..2484f15f1f0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38574.yml @@ -0,0 +1,4 @@ +author: "ninjanomnom" +delete-after: True +changes: + - rscadd: "A plush that knows too much has found its way to the bus ruin." From c4d99520899506490fddf14b0c43db2a08ffd34a Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 19 Jun 2018 23:35:13 +0000 Subject: [PATCH 028/133] Automatic changelog compile, [ci skip] --- html/changelog.html | 48 +++++++++++++++++----- html/changelogs/.all_changelog.yml | 33 +++++++++++++++ html/changelogs/AutoChangeLog-pr-38319.yml | 8 ---- html/changelogs/AutoChangeLog-pr-38555.yml | 4 -- html/changelogs/AutoChangeLog-pr-38564.yml | 4 -- html/changelogs/AutoChangeLog-pr-38574.yml | 4 -- html/changelogs/AutoChangeLog-pr-38577.yml | 4 -- html/changelogs/AutoChangeLog-pr-38580.yml | 4 -- html/changelogs/AutoChangeLog-pr-38589.yml | 7 ---- 9 files changed, 70 insertions(+), 46 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-38319.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38555.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38564.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38574.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38577.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38580.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38589.yml diff --git a/html/changelog.html b/html/changelog.html index 04117703b82..09847ce6837 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,43 @@ -->

+

19 June 2018

+

Cyberboss updated:

+
    +
  • Speaking in deadchat now shows your rank instead of ADMIN
  • +
+

Dax Dupont updated:

+
    +
  • Circuit lab no longer starts with super batteries, they have been replaced with high batteries.
  • +
  • Circuit labs now start with 20 sheets of metal instead of 50/100. Plenty of materials on the station you can gather.
  • +
  • Circuit labs no longer have their own protolathe and autolathe. Science has their own lathes already.
  • +
  • There's no more entire library worth of equipment, they can go publish the books like the rest of the station, in the library. At least give the librarians something other to do than screaming about lizard porn on the radio.
  • +
+

Hyacinth-OR updated:

+
    +
  • Added a pink scarf to vendomats
  • +
+

Irafas updated:

+
    +
  • Players can now ctrl-click the PDA to remove the item in its pen slot
  • +
+

JStheguy updated:

+
    +
  • Added the data card reader circuit, a circuit that is able to read data cards, as well as write to them.
  • +
  • Data cards are now longer inexplicably called data disks despite clearly being cards, and can be printed from the "tools" section of the integrated circuit printer.
  • +
  • Data cards no longer have a special "label card" verb and instead can have their names and descriptions changed with a pen.
  • +
  • Also, some aesthetically different variants of the data cards, because why not.
  • +
  • Data cards have new sprites, with support for coloring them via the assembly detailer.
  • +
+

Naksu updated:

+
    +
  • Sped up atmos very slightly
  • +
+

ninjanomnom updated:

+
    +
  • A plush that knows too much has found its way to the bus ruin.
  • +
+

18 June 2018

CitrusGender updated:

    @@ -1495,17 +1532,6 @@
    • Cycle-linking is no longer permanently disabled for airlocks on shuttles.
    - -

    17 April 2018

    -

    Dax Dupont updated:

    -
      -
    • Fixed martial arts/spell granters breaking on interrupt in final stage.
    • -
    -

    Naksu updated:

    -
      -
    • Welding tools now flash the user as the weld progresses, not just when the welding is started.
    • -
    • CentCom officials will now properly display the objectives the admin has assigned them.
    • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 2e2231d2670..99599bcea76 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -18538,3 +18538,36 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. console. - admin: It is now possible to use the ".p" (Asay) and ".d" (Dsay) prefixes while an admin ghost. +2018-06-19: + Cyberboss: + - admin: Speaking in deadchat now shows your rank instead of ADMIN + Dax Dupont: + - balance: Circuit lab no longer starts with super batteries, they have been replaced + with high batteries. + - balance: Circuit labs now start with 20 sheets of metal instead of 50/100. Plenty + of materials on the station you can gather. + - balance: Circuit labs no longer have their own protolathe and autolathe. Science + has their own lathes already. + - tweak: There's no more entire library worth of equipment, they can go publish + the books like the rest of the station, in the library. At least give the librarians + something other to do than screaming about lizard porn on the radio. + Hyacinth-OR: + - rscadd: Added a pink scarf to vendomats + Irafas: + - rscadd: Players can now ctrl-click the PDA to remove the item in its pen slot + JStheguy: + - rscadd: Added the data card reader circuit, a circuit that is able to read data + cards, as well as write to them. + - tweak: Data cards are now longer inexplicably called data disks despite clearly + being cards, and can be printed from the "tools" section of the integrated circuit + printer. + - tweak: Data cards no longer have a special "label card" verb and instead can have + their names and descriptions changed with a pen. + - rscadd: Also, some aesthetically different variants of the data cards, because + why not. + - imageadd: Data cards have new sprites, with support for coloring them via the + assembly detailer. + Naksu: + - code_imp: Sped up atmos very slightly + ninjanomnom: + - rscadd: A plush that knows too much has found its way to the bus ruin. diff --git a/html/changelogs/AutoChangeLog-pr-38319.yml b/html/changelogs/AutoChangeLog-pr-38319.yml deleted file mode 100644 index d27aee5b1bc..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38319.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "JStheguy" -delete-after: True -changes: - - rscadd: "Added the data card reader circuit, a circuit that is able to read data cards, as well as write to them." - - tweak: "Data cards are now longer inexplicably called data disks despite clearly being cards, and can be printed from the \"tools\" section of the integrated circuit printer." - - tweak: "Data cards no longer have a special \"label card\" verb and instead can have their names and descriptions changed with a pen." - - rscadd: "Also, some aesthetically different variants of the data cards, because why not." - - imageadd: "Data cards have new sprites, with support for coloring them via the assembly detailer." diff --git a/html/changelogs/AutoChangeLog-pr-38555.yml b/html/changelogs/AutoChangeLog-pr-38555.yml deleted file mode 100644 index 1c27021e6b1..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38555.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Cyberboss" -delete-after: True -changes: - - admin: "Speaking in deadchat now shows your rank instead of ADMIN" diff --git a/html/changelogs/AutoChangeLog-pr-38564.yml b/html/changelogs/AutoChangeLog-pr-38564.yml deleted file mode 100644 index 5f511bce3ae..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38564.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Naksu" -delete-after: True -changes: - - code_imp: "Sped up atmos very slightly" diff --git a/html/changelogs/AutoChangeLog-pr-38574.yml b/html/changelogs/AutoChangeLog-pr-38574.yml deleted file mode 100644 index 2484f15f1f0..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38574.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ninjanomnom" -delete-after: True -changes: - - rscadd: "A plush that knows too much has found its way to the bus ruin." diff --git a/html/changelogs/AutoChangeLog-pr-38577.yml b/html/changelogs/AutoChangeLog-pr-38577.yml deleted file mode 100644 index 182c47ec88e..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38577.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Irafas" -delete-after: True -changes: - - rscadd: "Players can now ctrl-click the PDA to remove the item in its pen slot" diff --git a/html/changelogs/AutoChangeLog-pr-38580.yml b/html/changelogs/AutoChangeLog-pr-38580.yml deleted file mode 100644 index 7467e0452b2..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38580.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Hyacinth-OR" -delete-after: True -changes: - - rscadd: "Added a pink scarf to vendomats" diff --git a/html/changelogs/AutoChangeLog-pr-38589.yml b/html/changelogs/AutoChangeLog-pr-38589.yml deleted file mode 100644 index 7f9a5b1c7c7..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38589.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: "Dax Dupont" -delete-after: True -changes: - - balance: "Circuit lab no longer starts with super batteries, they have been replaced with high batteries." - - balance: "Circuit labs now start with 20 sheets of metal instead of 50/100. Plenty of materials on the station you can gather." - - balance: "Circuit labs no longer have their own protolathe and autolathe. Science has their own lathes already." - - tweak: "There's no more entire library worth of equipment, they can go publish the books like the rest of the station, in the library. At least give the librarians something other to do than screaming about lizard porn on the radio." From cb127ac1db3204adbfe57024ebe6c8980f95d628 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 19 Jun 2018 16:44:26 -0700 Subject: [PATCH 029/133] Automatic changelog generation for PR #38549 [ci skip] --- html/changelogs/AutoChangeLog-pr-38549.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38549.yml diff --git a/html/changelogs/AutoChangeLog-pr-38549.yml b/html/changelogs/AutoChangeLog-pr-38549.yml new file mode 100644 index 00000000000..5475e2ae276 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38549.yml @@ -0,0 +1,7 @@ +author: "SpaceManiac" +delete-after: True +changes: + - tweak: "One canister is now suitable to fully stock a vending machine. Relevant cargo packs have been updated." + - bugfix: "Deconstructing and reconstructing a vending machine no longer creates items from thin air." + - bugfix: "Using a part replacer on a vending machine no longer empties its inventory." + - rscadd: "Bluespace RPEDs can now be used to refill vending machines." From 07c44a1f440ebf443439e45117bd845664e84672 Mon Sep 17 00:00:00 2001 From: 81Denton <32391752+81Denton@users.noreply.github.com> Date: Wed, 20 Jun 2018 01:45:39 +0200 Subject: [PATCH 030/133] Fixes access reqs on public autodrobes/boozeomats (#38603) * Fixes access reqs on Delta+Meta autodrobes/boozeomats * box boozeomat * come ON travis * do it --- _maps/map_files/BoxStation/BoxStation.dmm | 2 +- _maps/map_files/Deltastation/DeltaStation2.dmm | 12 +++--------- _maps/map_files/MetaStation/MetaStation.dmm | 6 ++---- code/modules/vending/autodrobe.dm | 4 ++++ code/modules/vending/boozeomat.dm | 4 ++++ 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 046c003f7ab..cd235318229 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -34913,7 +34913,7 @@ /turf/open/floor/plasteel, /area/science/misc_lab) "bJP" = ( -/obj/machinery/vending/boozeomat, +/obj/machinery/vending/boozeomat/all_access, /turf/open/floor/plasteel/bar, /area/maintenance/port/aft) "bJQ" = ( diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index c4d3ca9ec0a..f04799a17be 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -9053,11 +9053,9 @@ /turf/open/floor/plasteel/redblue, /area/maintenance/port/fore) "ayW" = ( -/obj/machinery/vending/autodrobe{ - req_access_txt = "0" - }, /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/autodrobe/all_access, /turf/open/floor/plasteel/redblue/redside{ dir = 8 }, @@ -63602,9 +63600,7 @@ }, /area/crew_quarters/locker) "cGO" = ( -/obj/machinery/vending/autodrobe{ - req_access_txt = "0" - }, +/obj/machinery/vending/autodrobe/all_access, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -85665,14 +85661,12 @@ /turf/open/floor/wood, /area/crew_quarters/abandoned_gambling_den) "dBR" = ( -/obj/machinery/vending/boozeomat{ - req_access_txt = "0" - }, /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/contraband/random{ pixel_y = -32 }, +/obj/machinery/vending/boozeomat/all_access, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) "dBS" = ( diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 08441261746..d4580e95f09 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -41731,9 +41731,7 @@ /turf/open/floor/plating, /area/maintenance/port) "bLe" = ( -/obj/machinery/vending/autodrobe{ - req_access_txt = "0" - }, +/obj/machinery/vending/autodrobe/all_access, /turf/open/floor/plating, /area/maintenance/port) "bLf" = ( @@ -53015,7 +53013,7 @@ /turf/open/floor/plating/airless, /area/engine/atmos) "cjp" = ( -/obj/machinery/vending/boozeomat, +/obj/machinery/vending/boozeomat/all_access, /turf/open/floor/wood, /area/maintenance/port/aft) "cjq" = ( diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm index b03ddc32e94..bc2795c56d8 100644 --- a/code/modules/vending/autodrobe.dm +++ b/code/modules/vending/autodrobe.dm @@ -122,6 +122,10 @@ /obj/item/skub = 1) refill_canister = /obj/item/vending_refill/autodrobe +/obj/machinery/vending/autodrobe/all_access + desc = "A vending machine for costumes. This model appears to have no access restrictions." + req_access = null + /obj/item/vending_refill/autodrobe machine_name = "AutoDrobe" icon_state = "refill_costume" diff --git a/code/modules/vending/boozeomat.dm b/code/modules/vending/boozeomat.dm index 0636b179504..2f9a862508b 100644 --- a/code/modules/vending/boozeomat.dm +++ b/code/modules/vending/boozeomat.dm @@ -38,6 +38,10 @@ req_access = list(ACCESS_BAR) refill_canister = /obj/item/vending_refill/boozeomat +/obj/machinery/vending/boozeomat/all_access + desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one. This model appears to have no access restrictions." + req_access = null + /obj/machinery/vending/boozeomat/pubby_maint //abandoned bar on Pubbystation products = list(/obj/item/reagent_containers/food/drinks/bottle/whiskey = 1, /obj/item/reagent_containers/food/drinks/bottle/absinthe = 1, From 25f4c3304891e1576b91783d1e4b9cb56317d005 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 19 Jun 2018 16:45:42 -0700 Subject: [PATCH 031/133] Automatic changelog generation for PR #38603 [ci skip] --- html/changelogs/AutoChangeLog-pr-38603.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38603.yml diff --git a/html/changelogs/AutoChangeLog-pr-38603.yml b/html/changelogs/AutoChangeLog-pr-38603.yml new file mode 100644 index 00000000000..ae2251bab41 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38603.yml @@ -0,0 +1,4 @@ +author: "Denton" +delete-after: True +changes: + - bugfix: "The public booze-o-mats and autodrobes on Box/Delta/Meta now have no access requirements, as previously intended." From 89e16c8b5023abc3b719ff0ab48bc4534e215871 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 19 Jun 2018 16:47:24 -0700 Subject: [PATCH 032/133] Automatic changelog generation for PR #38585 [ci skip] --- html/changelogs/AutoChangeLog-pr-38585.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38585.yml diff --git a/html/changelogs/AutoChangeLog-pr-38585.yml b/html/changelogs/AutoChangeLog-pr-38585.yml new file mode 100644 index 00000000000..9ffa6c8f2c5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38585.yml @@ -0,0 +1,4 @@ +author: "NewSta" +delete-after: True +changes: + - tweak: "made it easier to see from the back whether someone is occupying the shuttle chair or not." From caa6edfdb3da81caf7a19cfe08cdfaeec13e5a41 Mon Sep 17 00:00:00 2001 From: CitrusGender <31262308+CitrusGender@users.noreply.github.com> Date: Wed, 20 Jun 2018 01:05:05 -0400 Subject: [PATCH 033/133] [s]Fixed being able to create nearly infinite amount of materials from autolathes (#38624) * clamper-oni * Update autolathe.dm * Update autolathe.dm --- code/game/machinery/autolathe.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 22db77090b4..84059e8029b 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -154,6 +154,7 @@ var/multiplier = text2num(href_list["multiplier"]) var/is_stack = ispath(being_built.build_path, /obj/item/stack) + multiplier = CLAMP(multiplier,1,50) ///////////////// From 056735a1aeea4d1745361b4832f9c93fe8f99e19 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 19 Jun 2018 22:05:08 -0700 Subject: [PATCH 034/133] Automatic changelog generation for PR #38624 [ci skip] --- html/changelogs/AutoChangeLog-pr-38624.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38624.yml diff --git a/html/changelogs/AutoChangeLog-pr-38624.yml b/html/changelogs/AutoChangeLog-pr-38624.yml new file mode 100644 index 00000000000..4c8d7170e90 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38624.yml @@ -0,0 +1,4 @@ +author: "CitrusGender" +delete-after: True +changes: + - bugfix: "added a clamp so you can't set a negative multiplier to create materials and create more than 50 items." From bc065d4bbc69a907b37effe59169a4599bd8596f Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Wed, 20 Jun 2018 03:18:23 -0400 Subject: [PATCH 035/133] Adds /datum/DBQuery/proc/SetQuery (#38584) * Adds /datum/DBQuery/proc/SetQuery * Needful newness --- code/controllers/subsystem/dbcore.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/controllers/subsystem/dbcore.dm b/code/controllers/subsystem/dbcore.dm index db7ca5dd60d..ac2a218a3c9 100644 --- a/code/controllers/subsystem/dbcore.dm +++ b/code/controllers/subsystem/dbcore.dm @@ -277,6 +277,11 @@ Delayed insert mode was removed in mysql 7 and only works with MyISAM type table if(!.) to_chat(usr, "A SQL error occurred during this operation, check the server logs.") +/datum/DBQuery/proc/SetQuery(new_sql) + Activity("SetQuery") + Close() + sql = new_sql + /datum/DBQuery/proc/Execute(sql_query = sql, cursor_handler = default_cursor, log_error = TRUE) Activity("Execute") var/start_time From f90fae0339ae9cc4c95dc24f7357a82769cda331 Mon Sep 17 00:00:00 2001 From: Grandmother of 50 <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com> Date: Wed, 20 Jun 2018 03:43:10 -0400 Subject: [PATCH 036/133] Equalizes Roundstart Mining Options (Removes some Advanced Scanners and Explorer Webbings) (#38153) --- code/modules/mining/machine_vending.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index e13a8e5c395..03a93a6a522 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -171,8 +171,6 @@ if("Survival Capsule and Explorer's Webbing") new /obj/item/storage/belt/mining/vendor(drop_location) if("Resonator Kit") - new /obj/item/storage/belt/mining/alt(drop_location) - new /obj/item/t_scanner/adv_mining_scanner(drop_location) new /obj/item/extinguisher/mini(drop_location) new /obj/item/resonator(drop_location) if("Minebot Kit") @@ -185,8 +183,6 @@ new /obj/item/fulton_core(drop_location) new /obj/item/stack/marker_beacon/thirty(drop_location) if("Crusher Kit") - new /obj/item/storage/belt/mining/alt(drop_location) - new /obj/item/t_scanner/adv_mining_scanner(drop_location) new /obj/item/extinguisher/mini(drop_location) new /obj/item/twohanded/required/kinetic_crusher(drop_location) if("Mining Conscription Kit") From 25524fe7699e06c8328bafd2c59f541175d28c55 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Wed, 20 Jun 2018 00:43:14 -0700 Subject: [PATCH 037/133] Automatic changelog generation for PR #38153 [ci skip] --- html/changelogs/AutoChangeLog-pr-38153.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38153.yml diff --git a/html/changelogs/AutoChangeLog-pr-38153.yml b/html/changelogs/AutoChangeLog-pr-38153.yml new file mode 100644 index 00000000000..562c8e4190b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38153.yml @@ -0,0 +1,5 @@ +author: "Cobby" +delete-after: True +changes: + - rscdel: "Removed Advanced Mining Scanner from roundstart voucher kits." + - rscdel: "Removed Explorer Webbing from all voucher kits besides the shelter capsule pack." From b08e8ac07b143d1d1393d1552201567555d00c75 Mon Sep 17 00:00:00 2001 From: 81Denton <32391752+81Denton@users.noreply.github.com> Date: Wed, 20 Jun 2018 11:16:33 +0200 Subject: [PATCH 038/133] forgive me, for I have web edited --- code/modules/research/designs/autolathe_designs.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index af883bb06cc..3f729b3c145 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -427,6 +427,7 @@ materials = list(MAT_METAL = 500, MAT_GLASS = 50) build_path = /obj/item/healthanalyzer category = list("initial", "Medical") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/pillbottle name = "Pill Bottle" From a308cc37403f734b73a4373bceaf28a0dcde899a Mon Sep 17 00:00:00 2001 From: YPOQ <30683121+YPOQ@users.noreply.github.com> Date: Wed, 20 Jun 2018 08:32:47 -0600 Subject: [PATCH 039/133] Fixes temperature/watcher blasts (#38620) --- code/modules/projectiles/projectile/special/temperature.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/projectile/special/temperature.dm b/code/modules/projectiles/projectile/special/temperature.dm index d8190cd6ee6..44c8df6c009 100644 --- a/code/modules/projectiles/projectile/special/temperature.dm +++ b/code/modules/projectiles/projectile/special/temperature.dm @@ -11,7 +11,7 @@ . = ..() if(isliving(target)) var/mob/living/L = target - L.adjust_bodytemperature(L.bodytemperature + (((100-blocked)/100)*(temperature - L.bodytemperature))) // the new body temperature is adjusted by 100-blocked % of the delta between body temperature and the bullet's effect temperature + L.adjust_bodytemperature(((100-blocked)/100)*(temperature - L.bodytemperature)) // the new body temperature is adjusted by 100-blocked % of the delta between body temperature and the bullet's effect temperature /obj/item/projectile/temp/hot name = "heat beam" From 5f685f9f42695c377433e943902bd6e03951d7f8 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Wed, 20 Jun 2018 07:32:51 -0700 Subject: [PATCH 040/133] Automatic changelog generation for PR #38620 [ci skip] --- html/changelogs/AutoChangeLog-pr-38620.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38620.yml diff --git a/html/changelogs/AutoChangeLog-pr-38620.yml b/html/changelogs/AutoChangeLog-pr-38620.yml new file mode 100644 index 00000000000..bb955057ff5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38620.yml @@ -0,0 +1,4 @@ +author: "YPOQ" +delete-after: True +changes: + - bugfix: "Watcher beams will freeze you again" From 44a74ef54266b9f048901cfa2313f083789d4f50 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Wed, 20 Jun 2018 10:52:24 -0700 Subject: [PATCH 041/133] Automatic changelog generation for PR #38613 [ci skip] --- html/changelogs/AutoChangeLog-pr-38613.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38613.yml diff --git a/html/changelogs/AutoChangeLog-pr-38613.yml b/html/changelogs/AutoChangeLog-pr-38613.yml new file mode 100644 index 00000000000..fd2dc0c1977 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38613.yml @@ -0,0 +1,4 @@ +author: "Denton" +delete-after: True +changes: + - rscadd: "Regular and advanced health analyzers can now be researched and printed." From dda6e00274267c57425d0f524bd4d0e2da96340f Mon Sep 17 00:00:00 2001 From: Tlaltecuhtli <33834933+Tlaltecuhtli@users.noreply.github.com> Date: Wed, 20 Jun 2018 22:32:48 +0200 Subject: [PATCH 042/133] fixes anomaly cores being flamable (#38607) * oranges-is-gay * swap --- code/modules/assembly/signaler.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 42188bba9ff..0a1394bf04a 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -186,6 +186,7 @@ Code: item_state = "electronic" lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' + resistance_flags = FIRE_PROOF var/anomaly_type = /obj/effect/anomaly /obj/item/assembly/signaler/anomaly/receive_signal(datum/signal/signal) From 84e2f8b68add7745d96c8b46e1e85857e670308c Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Wed, 20 Jun 2018 13:32:51 -0700 Subject: [PATCH 043/133] Automatic changelog generation for PR #38607 [ci skip] --- html/changelogs/AutoChangeLog-pr-38607.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38607.yml diff --git a/html/changelogs/AutoChangeLog-pr-38607.yml b/html/changelogs/AutoChangeLog-pr-38607.yml new file mode 100644 index 00000000000..2aa4b456053 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38607.yml @@ -0,0 +1,4 @@ +author: "Tlaltecuhtli" +delete-after: True +changes: + - bugfix: "anomaly cores no longer tend to dust" From 1572e4f12259c4395bfb7cd868bde863fa6de2a9 Mon Sep 17 00:00:00 2001 From: 1fbff5f83b23d39d38b1dfcb4cac8d9b <0a02d0db@opayq.com> Date: Wed, 20 Jun 2018 22:38:23 +0200 Subject: [PATCH 044/133] Adds atmos circuit (#38111) * Adds gas circuits * Integrated connector * Filters, tanks, some balancing * fixed fucky wucky in tank size * maybe they'll appreciate you more one day * this code was written by a gibbon --- .../integrated_electronics/subtypes/input.dm | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index 02500e5ed6a..de06093c5b5 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -1104,6 +1104,67 @@ else activate_pin(3) +/obj/item/integrated_circuit/input/atmospheric_analyzer + name = "atmospheric analyzer" + desc = "A miniaturized analyzer which can scan anything that contains gases. Leave target as NULL to scan the air around the assembly." + extended_desc = "The nth element of gas amounts is the number of moles of the \ + nth gas in gas list. \ + Pressure is in kPa, temperature is in Kelvin. \ + Due to programming limitations, scanning an object that does \ + not contain a gas will return the air around it instead." + spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH + inputs = list( + "target" = IC_PINTYPE_REF + ) + outputs = list( + "gas list" = IC_PINTYPE_LIST, + "gas amounts" = IC_PINTYPE_LIST, + "total moles" = IC_PINTYPE_NUMBER, + "pressure" = IC_PINTYPE_NUMBER, + "temperature" = IC_PINTYPE_NUMBER, + "volume" = IC_PINTYPE_NUMBER + ) + activators = list( + "scan" = IC_PINTYPE_PULSE_IN, + "on success" = IC_PINTYPE_PULSE_OUT, + "on failure" = IC_PINTYPE_PULSE_OUT + ) + power_draw_per_use = 5 + +/obj/item/integrated_circuit/input/atmospheric_analyzer/do_work() + for(var/i=1 to 6) + set_pin_data(IC_OUTPUT, i, null) + var/atom/target = get_pin_data_as_type(IC_INPUT, 1, /atom) + var/atom/movable/acting_object = get_object() + if(!target) + target = acting_object.loc + if(!target.Adjacent(acting_object)) + activate_pin(3) + return + + var/datum/gas_mixture/air_contents = target.return_air() + if(!air_contents) + activate_pin(3) + return + + var/list/gases = air_contents.gases + var/list/gas_names = list() + var/list/gas_amounts = list() + for(var/id in gases) + var/name = gases[id][GAS_META][META_GAS_NAME] + var/amt = round(gases[id][MOLES], 0.001) + gas_names.Add(name) + gas_amounts.Add(amt) + + set_pin_data(IC_OUTPUT, 1, gas_names) + set_pin_data(IC_OUTPUT, 2, gas_amounts) + set_pin_data(IC_OUTPUT, 3, round(air_contents.total_moles(), 0.001)) + set_pin_data(IC_OUTPUT, 4, round(air_contents.return_pressure(), 0.001)) + set_pin_data(IC_OUTPUT, 5, round(air_contents.temperature, 0.001)) + set_pin_data(IC_OUTPUT, 6, round(air_contents.return_volume(), 0.001)) + push_data() + activate_pin(2) + /obj/item/integrated_circuit/input/data_card_reader name = "data card reader" desc = "A circuit that can read from and write to data cards." From faa4c5d01a67343b634f36d6297c92f84afc4bfe Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Wed, 20 Jun 2018 13:38:26 -0700 Subject: [PATCH 045/133] Automatic changelog generation for PR #38111 [ci skip] --- html/changelogs/AutoChangeLog-pr-38111.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38111.yml diff --git a/html/changelogs/AutoChangeLog-pr-38111.yml b/html/changelogs/AutoChangeLog-pr-38111.yml new file mode 100644 index 00000000000..a9e7210586f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38111.yml @@ -0,0 +1,4 @@ +author: "McDonald072" +delete-after: True +changes: + - rscadd: "A few new circuits for dealing with atmospherics have been uploaded to your local printers." From 0e67143c2d109fa4062683e19bab0835d9bf9afd Mon Sep 17 00:00:00 2001 From: Grandmother of 50 <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com> Date: Wed, 20 Jun 2018 16:46:00 -0400 Subject: [PATCH 046/133] Update gene_modder.dm --- code/modules/hydroponics/gene_modder.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index e9ffb9e450d..7e541f2471a 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -427,7 +427,7 @@ /obj/item/disk/plantgene/proc/update_name() if(gene) - name = "[gene.get_name()] (Plant Data Disk)" + name = "[gene.get_name()] (plant data disk)" else name = "plant data disk" @@ -437,4 +437,6 @@ /obj/item/disk/plantgene/examine(mob/user) ..() + if(gene && (istype(gene, /datum/plant_gene/core/potency))) + to_chat(user,"Percent is relative to potency, not maximum volume of the plant.") to_chat(user, "The write-protect tab is set to [src.read_only ? "protected" : "unprotected"].") From d0ccc6753c4ae8b6d6202538d0f39c1089fc4992 Mon Sep 17 00:00:00 2001 From: Dax Dupont Date: Wed, 20 Jun 2018 23:45:00 +0200 Subject: [PATCH 047/133] ports shuttle chairs from ftl --- _maps/shuttles/arrival_box.dmm | 10 +++--- _maps/shuttles/arrival_delta.dmm | 4 +-- _maps/shuttles/arrival_omega.dmm | 4 +-- _maps/shuttles/arrival_pubby.dmm | 2 +- _maps/shuttles/assault_pod_default.dmm | 8 ++--- _maps/shuttles/emergency_asteroid.dmm | 20 ++++++------ _maps/shuttles/emergency_bar.dmm | 4 +-- _maps/shuttles/emergency_birdboat.dmm | 22 ++++++------- _maps/shuttles/emergency_box.dmm | 22 ++++++------- _maps/shuttles/emergency_cere.dmm | 28 ++++++++-------- _maps/shuttles/emergency_clown.dmm | 12 +++---- _maps/shuttles/emergency_cramped.dmm | 6 ++-- _maps/shuttles/emergency_delta.dmm | 24 +++++++------- _maps/shuttles/emergency_goon.dmm | 8 ++--- _maps/shuttles/emergency_meta.dmm | 22 ++++++------- _maps/shuttles/emergency_mini.dmm | 24 +++++++------- _maps/shuttles/emergency_narnar.dmm | 8 ++--- _maps/shuttles/emergency_omega.dmm | 18 +++++------ _maps/shuttles/emergency_pubby.dmm | 30 +++++++++--------- _maps/shuttles/emergency_raven.dmm | 20 ++++++------ _maps/shuttles/emergency_russiafightpit.dmm | 28 ++++++++-------- _maps/shuttles/emergency_scrapheap.dmm | 16 +++++----- _maps/shuttles/emergency_supermatter.dmm | 10 +++--- _maps/shuttles/emergency_wabbajack.dmm | 18 +++++------ _maps/shuttles/escape_pod_default.dmm | 4 +-- _maps/shuttles/escape_pod_large.dmm | 12 +++---- _maps/shuttles/ferry_base.dmm | 6 ++-- _maps/shuttles/ferry_fancy.dmm | 4 +-- _maps/shuttles/ferry_lighthouse.dmm | 6 ++-- _maps/shuttles/ferry_meat.dmm | 6 ++-- _maps/shuttles/infiltrator_basic.dmm | 12 +++---- _maps/shuttles/labour_box.dmm | 2 +- _maps/shuttles/labour_delta.dmm | 4 +-- _maps/shuttles/mining_box.dmm | 2 +- _maps/shuttles/mining_delta.dmm | 8 ++--- _maps/shuttles/pirate_default.dmm | 8 ++--- _maps/shuttles/ruin_caravan_victim.dmm | 2 +- _maps/shuttles/ruin_syndicate_dropship.dmm | 12 +++---- _maps/shuttles/ruin_syndicate_fighter.dmm | 2 +- _maps/shuttles/whiteship_box.dmm | 6 ++-- _maps/shuttles/whiteship_meta.dmm | 8 ++--- _maps/shuttles/whiteship_pubby.dmm | 8 ++--- .../objects/structures/beds_chairs/chair.dm | 6 +--- icons/obj/chairs.dmi | Bin 32448 -> 32421 bytes 44 files changed, 241 insertions(+), 245 deletions(-) diff --git a/_maps/shuttles/arrival_box.dmm b/_maps/shuttles/arrival_box.dmm index d117ca0f6b3..2b245557a08 100644 --- a/_maps/shuttles/arrival_box.dmm +++ b/_maps/shuttles/arrival_box.dmm @@ -78,18 +78,18 @@ /turf/open/floor/plating, /area/shuttle/arrival) "p" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "q" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light/small{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "r" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, @@ -114,13 +114,13 @@ /turf/open/floor/plating/airless, /area/shuttle/arrival) "v" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "w" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light/small{ diff --git a/_maps/shuttles/arrival_delta.dmm b/_maps/shuttles/arrival_delta.dmm index b19ad63eb12..08f34e1c23f 100644 --- a/_maps/shuttles/arrival_delta.dmm +++ b/_maps/shuttles/arrival_delta.dmm @@ -211,14 +211,14 @@ }, /area/shuttle/arrival) "u" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/arrival) "v" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/effect/turf_decal/bot, diff --git a/_maps/shuttles/arrival_omega.dmm b/_maps/shuttles/arrival_omega.dmm index 04f19f60ea2..b8fc6327795 100644 --- a/_maps/shuttles/arrival_omega.dmm +++ b/_maps/shuttles/arrival_omega.dmm @@ -124,14 +124,14 @@ /turf/open/floor/plating, /area/shuttle/arrival) "q" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/arrival) "r" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/effect/turf_decal/bot, diff --git a/_maps/shuttles/arrival_pubby.dmm b/_maps/shuttles/arrival_pubby.dmm index 3309533f354..a4308729b2a 100644 --- a/_maps/shuttles/arrival_pubby.dmm +++ b/_maps/shuttles/arrival_pubby.dmm @@ -85,7 +85,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "o" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, diff --git a/_maps/shuttles/assault_pod_default.dmm b/_maps/shuttles/assault_pod_default.dmm index 4574318e476..9414fa9f82d 100644 --- a/_maps/shuttles/assault_pod_default.dmm +++ b/_maps/shuttles/assault_pod_default.dmm @@ -4,7 +4,7 @@ /turf/closed/wall/mineral/plastitanium, /area/shuttle/assault_pod) "c" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium, @@ -45,20 +45,20 @@ /turf/open/floor/plating, /area/shuttle/assault_pod) "D" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light{ dir = 1 }, /turf/open/floor/mineral/plastitanium, /area/shuttle/assault_pod) "H" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium, /area/shuttle/assault_pod) "L" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light, diff --git a/_maps/shuttles/emergency_asteroid.dmm b/_maps/shuttles/emergency_asteroid.dmm index 258f9a76d31..b1d300574dc 100644 --- a/_maps/shuttles/emergency_asteroid.dmm +++ b/_maps/shuttles/emergency_asteroid.dmm @@ -73,7 +73,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "av" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -82,7 +82,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "ax" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -94,7 +94,7 @@ /turf/closed/wall/mineral/titanium/interior, /area/shuttle/escape) "aE" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/item/radio/intercom{ @@ -131,7 +131,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aK" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aL" = ( @@ -210,19 +210,19 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "aY" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aZ" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ba" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -345,7 +345,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "bw" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/item/radio/intercom{ @@ -355,7 +355,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "bx" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/structure/extinguisher_cabinet{ @@ -427,7 +427,7 @@ /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "bK" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light{ dir = 1 }, diff --git a/_maps/shuttles/emergency_bar.dmm b/_maps/shuttles/emergency_bar.dmm index 4b0f919532c..9b4776a0110 100644 --- a/_maps/shuttles/emergency_bar.dmm +++ b/_maps/shuttles/emergency_bar.dmm @@ -138,7 +138,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "aC" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aD" = ( @@ -214,7 +214,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aM" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig, diff --git a/_maps/shuttles/emergency_birdboat.dmm b/_maps/shuttles/emergency_birdboat.dmm index 6719587d1eb..d88e15fc942 100644 --- a/_maps/shuttles/emergency_birdboat.dmm +++ b/_maps/shuttles/emergency_birdboat.dmm @@ -53,11 +53,11 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "al" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "am" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light{ dir = 1 }, @@ -87,7 +87,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ar" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, @@ -157,7 +157,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aE" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/plasteel/dark, @@ -174,7 +174,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aH" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/plasteel/dark, @@ -215,14 +215,14 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aN" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/structure/window/reinforced, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aO" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/structure/window/reinforced, @@ -232,7 +232,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aP" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/structure/window/reinforced{ dir = 1; pixel_y = 2 @@ -255,13 +255,13 @@ /turf/open/floor/plasteel/white, /area/shuttle/escape) "aS" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aT" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light, @@ -286,7 +286,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aW" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aX" = ( diff --git a/_maps/shuttles/emergency_box.dmm b/_maps/shuttles/emergency_box.dmm index dff9ccb5d24..57ddc27a97d 100644 --- a/_maps/shuttles/emergency_box.dmm +++ b/_maps/shuttles/emergency_box.dmm @@ -18,7 +18,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "ag" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, @@ -44,7 +44,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "am" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, @@ -53,7 +53,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ao" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -71,7 +71,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "ar" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/structure/extinguisher_cabinet{ @@ -113,7 +113,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "aA" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aB" = ( @@ -179,17 +179,17 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aJ" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aK" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aL" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium, @@ -224,7 +224,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aS" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/structure/window/reinforced{ @@ -233,7 +233,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aT" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/structure/window/reinforced{ @@ -242,7 +242,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aU" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium, diff --git a/_maps/shuttles/emergency_cere.dmm b/_maps/shuttles/emergency_cere.dmm index d64c28b8b90..7b9e8cfa6c2 100644 --- a/_maps/shuttles/emergency_cere.dmm +++ b/_maps/shuttles/emergency_cere.dmm @@ -251,11 +251,11 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aS" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aT" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light{ dir = 1 }, @@ -283,7 +283,7 @@ }, /area/shuttle/escape) "aW" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light{ dir = 1 }, @@ -294,7 +294,7 @@ }, /area/shuttle/escape) "aX" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig{ icon_state = "darkred"; dir = 1; @@ -302,7 +302,7 @@ }, /area/shuttle/escape) "aY" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig{ icon_state = "darkred"; dir = 5; @@ -330,7 +330,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bd" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -339,7 +339,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bf" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/machinery/flasher{ @@ -381,7 +381,7 @@ /turf/open/floor/mech_bay_recharge_floor, /area/shuttle/escape) "bk" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -412,7 +412,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bp" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/flasher{ @@ -479,7 +479,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "bw" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig{ @@ -489,7 +489,7 @@ }, /area/shuttle/escape) "bx" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig{ @@ -509,7 +509,7 @@ }, /area/shuttle/escape) "bz" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig{ @@ -658,7 +658,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bW" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/structure/window/reinforced{ @@ -667,7 +667,7 @@ /turf/open/floor/plasteel/neutral, /area/shuttle/escape) "bX" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/structure/window/reinforced{ diff --git a/_maps/shuttles/emergency_clown.dmm b/_maps/shuttles/emergency_clown.dmm index 2eaebaeb454..3dd4766d6a9 100644 --- a/_maps/shuttles/emergency_clown.dmm +++ b/_maps/shuttles/emergency_clown.dmm @@ -18,7 +18,7 @@ /turf/open/floor/noslip, /area/shuttle/escape) "af" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/bluespace, @@ -43,7 +43,7 @@ /turf/open/floor/noslip, /area/shuttle/escape) "aj" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/bluespace, @@ -53,7 +53,7 @@ /turf/open/floor/bluespace, /area/shuttle/escape) "al" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/bluespace, @@ -71,7 +71,7 @@ /turf/open/floor/noslip, /area/shuttle/escape) "ao" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/structure/extinguisher_cabinet{ @@ -154,11 +154,11 @@ /turf/open/floor/noslip, /area/shuttle/escape) "aC" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/noslip, /area/shuttle/escape) "aD" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/noslip, diff --git a/_maps/shuttles/emergency_cramped.dmm b/_maps/shuttles/emergency_cramped.dmm index aa1b9f0f0db..457e23d84b5 100644 --- a/_maps/shuttles/emergency_cramped.dmm +++ b/_maps/shuttles/emergency_cramped.dmm @@ -17,7 +17,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "e" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plasteel/dark, @@ -74,7 +74,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "n" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/plating, @@ -109,7 +109,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "s" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/structure/extinguisher_cabinet{ diff --git a/_maps/shuttles/emergency_delta.dmm b/_maps/shuttles/emergency_delta.dmm index 256358bbae7..24d59e50337 100644 --- a/_maps/shuttles/emergency_delta.dmm +++ b/_maps/shuttles/emergency_delta.dmm @@ -240,14 +240,14 @@ /turf/open/floor/plasteel/cmo, /area/shuttle/escape) "av" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/escape) "aw" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/effect/turf_decal/bot, @@ -326,7 +326,7 @@ }, /area/shuttle/escape) "aH" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/item/radio/intercom{ @@ -672,7 +672,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bx" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "by" = ( @@ -709,12 +709,12 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bC" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/escape) "bD" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/status_display{ pixel_y = 32 }, @@ -722,7 +722,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bE" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -771,7 +771,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bM" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/status_display{ @@ -780,7 +780,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bN" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -823,7 +823,7 @@ }, /area/shuttle/escape) "bU" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig, @@ -1059,7 +1059,7 @@ }, /area/shuttle/escape) "cB" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/effect/turf_decal/bot, @@ -1077,7 +1077,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "cG" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light, diff --git a/_maps/shuttles/emergency_goon.dmm b/_maps/shuttles/emergency_goon.dmm index 6f31ce1d40d..57f0b23d9f9 100644 --- a/_maps/shuttles/emergency_goon.dmm +++ b/_maps/shuttles/emergency_goon.dmm @@ -74,7 +74,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "s" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -154,7 +154,7 @@ /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "H" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -201,7 +201,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "S" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/light{ @@ -210,7 +210,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "T" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/light/small{ diff --git a/_maps/shuttles/emergency_meta.dmm b/_maps/shuttles/emergency_meta.dmm index 29b8661ae29..faf70072d34 100644 --- a/_maps/shuttles/emergency_meta.dmm +++ b/_maps/shuttles/emergency_meta.dmm @@ -65,7 +65,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ar" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "as" = ( @@ -74,7 +74,7 @@ name = "Station Intercom (General)"; pixel_y = 27 }, -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light{ dir = 1 }, @@ -220,7 +220,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aE" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium, @@ -314,7 +314,7 @@ name = "Station Intercom (General)"; pixel_y = -31 }, -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light, @@ -362,7 +362,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bd" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/plasteel/floorgrime, @@ -377,13 +377,13 @@ /turf/open/floor/plasteel/floorgrime, /area/shuttle/escape) "bh" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bi" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bj" = ( @@ -436,7 +436,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bs" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -713,7 +713,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bV" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light{ dir = 1 }, @@ -816,7 +816,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ca" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light, @@ -835,7 +835,7 @@ /turf/open/floor/plasteel/floorgrime, /area/shuttle/escape) "cd" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/machinery/light{ diff --git a/_maps/shuttles/emergency_mini.dmm b/_maps/shuttles/emergency_mini.dmm index a0b6ce6db96..42650f6fd1a 100644 --- a/_maps/shuttles/emergency_mini.dmm +++ b/_maps/shuttles/emergency_mini.dmm @@ -40,7 +40,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "h" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -49,7 +49,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "j" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -68,7 +68,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "m" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/machinery/light/small{ @@ -116,25 +116,25 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "v" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "w" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "x" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "y" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/machinery/light{ @@ -149,7 +149,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "A" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/light{ @@ -171,7 +171,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "C" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "D" = ( @@ -218,7 +218,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "K" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, @@ -231,7 +231,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "M" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -261,7 +261,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "R" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "S" = ( diff --git a/_maps/shuttles/emergency_narnar.dmm b/_maps/shuttles/emergency_narnar.dmm index aaa9c861cef..9d6c5f1e4d4 100644 --- a/_maps/shuttles/emergency_narnar.dmm +++ b/_maps/shuttles/emergency_narnar.dmm @@ -15,7 +15,7 @@ /turf/open/floor/plasteel/cult, /area/shuttle/escape) "e" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plasteel/cult, @@ -40,7 +40,7 @@ /turf/open/floor/plasteel/cult, /area/shuttle/escape) "i" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/plasteel/cult, @@ -49,7 +49,7 @@ /turf/open/floor/plasteel/cult, /area/shuttle/escape) "k" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/plasteel/cult, @@ -67,7 +67,7 @@ /turf/open/floor/plasteel/cult, /area/shuttle/escape) "n" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/structure/extinguisher_cabinet{ diff --git a/_maps/shuttles/emergency_omega.dmm b/_maps/shuttles/emergency_omega.dmm index 0debf2ad0fb..570cb99f0ab 100644 --- a/_maps/shuttles/emergency_omega.dmm +++ b/_maps/shuttles/emergency_omega.dmm @@ -12,7 +12,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "ad" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/newscaster/security_unit{ @@ -24,11 +24,11 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "ae" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "af" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/item/radio/intercom{ @@ -67,7 +67,7 @@ }, /area/shuttle/escape) "ak" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/status_display{ @@ -240,7 +240,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "aD" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/status_display{ @@ -253,7 +253,7 @@ /turf/open/floor/plasteel/neutral, /area/shuttle/escape) "aF" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/effect/turf_decal/bot, @@ -356,14 +356,14 @@ /turf/open/floor/grass, /area/shuttle/escape) "aJ" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/escape) "aK" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/effect/turf_decal/bot, @@ -384,7 +384,7 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/escape) "aN" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/turf_decal/bot, diff --git a/_maps/shuttles/emergency_pubby.dmm b/_maps/shuttles/emergency_pubby.dmm index 136cabe9db4..47b891cfd04 100644 --- a/_maps/shuttles/emergency_pubby.dmm +++ b/_maps/shuttles/emergency_pubby.dmm @@ -222,7 +222,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aJ" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/plasteel/darkpurple/side{ dir = 9 }, @@ -235,7 +235,7 @@ /turf/open/floor/plasteel/darkgreen/side, /area/shuttle/escape) "aL" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/plasteel/darkpurple/side{ dir = 5 }, @@ -253,7 +253,7 @@ }, /area/shuttle/escape) "aO" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/structure/window/reinforced, @@ -262,14 +262,14 @@ }, /area/shuttle/escape) "aP" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/structure/window/reinforced, /turf/open/floor/plasteel/darkpurple/side, /area/shuttle/escape) "aQ" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/structure/window/reinforced, @@ -283,7 +283,7 @@ }, /area/shuttle/escape) "aS" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plasteel/darkpurple/side{ @@ -291,7 +291,7 @@ }, /area/shuttle/escape) "aT" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light{ dir = 1 }, @@ -300,7 +300,7 @@ }, /area/shuttle/escape) "aU" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plasteel/darkpurple/side{ @@ -328,7 +328,7 @@ /turf/open/floor/plasteel/cmo, /area/shuttle/escape) "aY" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light, @@ -370,7 +370,7 @@ /turf/open/floor/plasteel/cafeteria, /area/shuttle/escape) "be" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/plasteel/cmo, /area/shuttle/escape) "bf" = ( @@ -424,7 +424,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "bo" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/structure/window/reinforced{ dir = 1; pixel_y = 2 @@ -432,7 +432,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "bq" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plating, @@ -466,13 +466,13 @@ /turf/open/floor/plating, /area/shuttle/escape) "bw" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bx" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -518,7 +518,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "bG" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light, diff --git a/_maps/shuttles/emergency_raven.dmm b/_maps/shuttles/emergency_raven.dmm index edd86c5ec60..d5ca59c4f2b 100644 --- a/_maps/shuttles/emergency_raven.dmm +++ b/_maps/shuttles/emergency_raven.dmm @@ -420,7 +420,7 @@ }, /area/shuttle/escape) "bd" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig{ @@ -572,7 +572,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "bx" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig{ @@ -660,7 +660,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "bK" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/plasteel/darkgreen/side{ dir = 8 }, @@ -679,7 +679,7 @@ }, /area/shuttle/escape) "bN" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/plasteel/darkgreen/side, @@ -815,7 +815,7 @@ }, /area/shuttle/escape) "bX" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/structure/window/reinforced{ @@ -824,7 +824,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "bY" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/structure/window/reinforced{ @@ -833,27 +833,27 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "bZ" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/structure/window/reinforced, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "ca" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/structure/window/reinforced{ dir = 1 }, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "cb" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/plasteel/darkgreen/side{ dir = 1 }, /area/shuttle/escape) "cc" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plasteel/darkgreen/side, diff --git a/_maps/shuttles/emergency_russiafightpit.dmm b/_maps/shuttles/emergency_russiafightpit.dmm index d0b8f7ca80e..3e5568279b3 100644 --- a/_maps/shuttles/emergency_russiafightpit.dmm +++ b/_maps/shuttles/emergency_russiafightpit.dmm @@ -18,7 +18,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "af" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, @@ -43,7 +43,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aj" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, @@ -76,7 +76,7 @@ pixel_x = 6; pixel_y = -24 }, -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, @@ -91,7 +91,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aq" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ar" = ( @@ -102,7 +102,7 @@ pixel_y = -6; req_access_txt = "19" }, -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/button/door{ id = "bearsbearsbears"; name = "release bears"; @@ -131,7 +131,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "av" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aw" = ( @@ -204,7 +204,7 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/escape) "aJ" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium, @@ -238,7 +238,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "aP" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig, @@ -315,7 +315,7 @@ /turf/open/floor/engine, /area/shuttle/escape) "bc" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/structure/window/reinforced{ @@ -327,7 +327,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium, @@ -341,7 +341,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium, @@ -350,13 +350,13 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium, /area/shuttle/escape) "bh" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium, @@ -551,7 +551,7 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/escape) "bO" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/light/small{ diff --git a/_maps/shuttles/emergency_scrapheap.dmm b/_maps/shuttles/emergency_scrapheap.dmm index cb2b7517b5a..e95fcb507cd 100644 --- a/_maps/shuttles/emergency_scrapheap.dmm +++ b/_maps/shuttles/emergency_scrapheap.dmm @@ -109,7 +109,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "at" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "au" = ( @@ -178,7 +178,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aE" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/plastitanium/brig, @@ -188,7 +188,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aG" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aH" = ( @@ -222,7 +222,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "aL" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, @@ -231,7 +231,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -266,7 +266,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aT" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/structure/extinguisher_cabinet{ @@ -395,14 +395,14 @@ /turf/open/floor/plating/airless, /area/shuttle/escape) "bo" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "bp" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light{ diff --git a/_maps/shuttles/emergency_supermatter.dmm b/_maps/shuttles/emergency_supermatter.dmm index 0dc057963c7..ce8842a41b6 100644 --- a/_maps/shuttles/emergency_supermatter.dmm +++ b/_maps/shuttles/emergency_supermatter.dmm @@ -21,14 +21,14 @@ /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "ah" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "ai" = ( /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "aj" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/yellow, @@ -73,7 +73,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "ar" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/yellow, @@ -94,7 +94,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "av" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/yellow, @@ -237,7 +237,7 @@ /turf/open/floor/plating/airless, /area/shuttle/escape) "bb" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/effect/turf_decal/stripes/line{ dir = 1 }, diff --git a/_maps/shuttles/emergency_wabbajack.dmm b/_maps/shuttles/emergency_wabbajack.dmm index 9bdb49064f7..34f16610204 100644 --- a/_maps/shuttles/emergency_wabbajack.dmm +++ b/_maps/shuttles/emergency_wabbajack.dmm @@ -38,7 +38,7 @@ /turf/open/floor/plasteel/cult, /area/shuttle/escape) "ak" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -47,7 +47,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "am" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, @@ -92,7 +92,7 @@ pixel_x = -24; pixel_y = -6 }, -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, @@ -102,11 +102,11 @@ /turf/open/floor/plasteel/cult, /area/shuttle/escape) "av" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aw" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium, @@ -182,13 +182,13 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "aI" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aJ" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/structure/window/reinforced{ @@ -352,7 +352,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "bm" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/light/small{ @@ -365,7 +365,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "bo" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/light/small{ diff --git a/_maps/shuttles/escape_pod_default.dmm b/_maps/shuttles/escape_pod_default.dmm index c2625b0e57a..8dcccf9326f 100644 --- a/_maps/shuttles/escape_pod_default.dmm +++ b/_maps/shuttles/escape_pod_default.dmm @@ -3,7 +3,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/pod_1) "G" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/status_display{ @@ -32,7 +32,7 @@ /turf/open/floor/plating, /area/shuttle/pod_1) "U" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/item/radio/intercom{ diff --git a/_maps/shuttles/escape_pod_large.dmm b/_maps/shuttles/escape_pod_large.dmm index 6a36801db92..49f2f44e1ed 100644 --- a/_maps/shuttles/escape_pod_large.dmm +++ b/_maps/shuttles/escape_pod_large.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "h" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/item/storage/pod{ @@ -17,7 +17,7 @@ /turf/open/floor/plating, /area/shuttle/pod_1) "A" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/item/radio/intercom{ @@ -36,13 +36,13 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) "H" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) "J" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/status_display{ @@ -51,13 +51,13 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) "L" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) "M" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/machinery/status_display{ diff --git a/_maps/shuttles/ferry_base.dmm b/_maps/shuttles/ferry_base.dmm index 36a54e54bcd..f7e717ccb89 100644 --- a/_maps/shuttles/ferry_base.dmm +++ b/_maps/shuttles/ferry_base.dmm @@ -24,7 +24,7 @@ /turf/closed/wall/mineral/titanium/interior, /area/shuttle/transport) "h" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -36,7 +36,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "j" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "k" = ( @@ -64,7 +64,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "q" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, diff --git a/_maps/shuttles/ferry_fancy.dmm b/_maps/shuttles/ferry_fancy.dmm index 432791c9367..e21bd7c5eb3 100644 --- a/_maps/shuttles/ferry_fancy.dmm +++ b/_maps/shuttles/ferry_fancy.dmm @@ -27,7 +27,7 @@ /turf/open/floor/plating/airless, /area/shuttle/transport) "g" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/pod/dark, /area/shuttle/transport) "h" = ( @@ -87,7 +87,7 @@ /turf/open/floor/plating/airless, /area/shuttle/transport) "p" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/pod/dark, diff --git a/_maps/shuttles/ferry_lighthouse.dmm b/_maps/shuttles/ferry_lighthouse.dmm index 21d3bd3413f..21f8a58e44b 100644 --- a/_maps/shuttles/ferry_lighthouse.dmm +++ b/_maps/shuttles/ferry_lighthouse.dmm @@ -68,7 +68,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "ar" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/wood, /area/shuttle/transport) "as" = ( @@ -137,7 +137,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "aJ" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "aK" = ( @@ -204,7 +204,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) "aW" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, diff --git a/_maps/shuttles/ferry_meat.dmm b/_maps/shuttles/ferry_meat.dmm index 334df92b557..22d83d8d015 100644 --- a/_maps/shuttles/ferry_meat.dmm +++ b/_maps/shuttles/ferry_meat.dmm @@ -15,7 +15,7 @@ /turf/closed/wall/mineral/titanium/interior, /area/shuttle/transport) "f" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/plasteel/freezer, @@ -90,7 +90,7 @@ /area/shuttle/transport) "n" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/plasteel/freezer, /area/shuttle/transport) "o" = ( @@ -131,7 +131,7 @@ /turf/open/floor/plasteel/freezer, /area/shuttle/transport) "w" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plasteel/freezer, diff --git a/_maps/shuttles/infiltrator_basic.dmm b/_maps/shuttles/infiltrator_basic.dmm index b1feae232ee..0add06a7ff2 100644 --- a/_maps/shuttles/infiltrator_basic.dmm +++ b/_maps/shuttles/infiltrator_basic.dmm @@ -176,7 +176,7 @@ /turf/closed/wall/mineral/plastitanium, /area/shuttle/syndicate/hallway) "aC" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4; name = "tactical chair" }, @@ -188,7 +188,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/syndicate/hallway) "aE" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8; name = "tactical chair" }, @@ -206,7 +206,7 @@ /turf/closed/wall/mineral/plastitanium, /area/shuttle/syndicate/eva) "aH" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4; name = "tactical chair" }, @@ -218,7 +218,7 @@ }, /area/shuttle/syndicate/hallway) "aI" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8; name = "tactical chair" }, @@ -256,7 +256,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/syndicate/eva) "aO" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4; name = "tactical chair" }, @@ -318,7 +318,7 @@ }, /area/shuttle/syndicate/hallway) "aX" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4; name = "tactical chair" }, diff --git a/_maps/shuttles/labour_box.dmm b/_maps/shuttles/labour_box.dmm index 636458a64c5..fe9756ef334 100644 --- a/_maps/shuttles/labour_box.dmm +++ b/_maps/shuttles/labour_box.dmm @@ -86,7 +86,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/labor) "o" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/machinery/flasher{ diff --git a/_maps/shuttles/labour_delta.dmm b/_maps/shuttles/labour_delta.dmm index 6df69ba0f64..aeb28416832 100644 --- a/_maps/shuttles/labour_delta.dmm +++ b/_maps/shuttles/labour_delta.dmm @@ -120,7 +120,7 @@ /turf/open/floor/plasteel, /area/shuttle/labor) "q" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/turf_decal/stripes/line{ @@ -133,7 +133,7 @@ /turf/open/floor/plasteel, /area/shuttle/labor) "s" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/machinery/flasher{ diff --git a/_maps/shuttles/mining_box.dmm b/_maps/shuttles/mining_box.dmm index b7354b8d894..2f262cae2b8 100644 --- a/_maps/shuttles/mining_box.dmm +++ b/_maps/shuttles/mining_box.dmm @@ -18,7 +18,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/mining) "f" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, diff --git a/_maps/shuttles/mining_delta.dmm b/_maps/shuttles/mining_delta.dmm index 99bdb64aaea..920a754e453 100644 --- a/_maps/shuttles/mining_delta.dmm +++ b/_maps/shuttles/mining_delta.dmm @@ -47,7 +47,7 @@ /turf/open/floor/plasteel, /area/shuttle/mining) "g" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plasteel/neutral, @@ -116,7 +116,7 @@ /turf/open/floor/plasteel/white, /area/shuttle/mining) "n" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/effect/decal/cleanable/dirt, @@ -126,7 +126,7 @@ /turf/open/floor/plasteel, /area/shuttle/mining) "o" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/effect/decal/cleanable/dirt, @@ -139,7 +139,7 @@ /turf/open/floor/plasteel, /area/shuttle/mining) "p" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/shuttles/pirate_default.dmm b/_maps/shuttles/pirate_default.dmm index efd49c8908e..59ce3014af4 100644 --- a/_maps/shuttles/pirate_default.dmm +++ b/_maps/shuttles/pirate_default.dmm @@ -39,7 +39,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/pirate) "ag" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plasteel/dark, @@ -71,7 +71,7 @@ pixel_y = -24; req_access = null }, -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/effect/decal/cleanable/dirt, @@ -82,7 +82,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/pirate) "an" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/decal/cleanable/dirt, @@ -413,7 +413,7 @@ pixel_y = -24; req_access = null }, -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/shuttles/ruin_caravan_victim.dmm b/_maps/shuttles/ruin_caravan_victim.dmm index aa42b30b9fd..8f65015d55e 100644 --- a/_maps/shuttles/ruin_caravan_victim.dmm +++ b/_maps/shuttles/ruin_caravan_victim.dmm @@ -156,7 +156,7 @@ }, /area/shuttle/caravan/freighter1) "gw" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/shuttles/ruin_syndicate_dropship.dmm b/_maps/shuttles/ruin_syndicate_dropship.dmm index 696a99e30a1..ac9a2cd680c 100644 --- a/_maps/shuttles/ruin_syndicate_dropship.dmm +++ b/_maps/shuttles/ruin_syndicate_dropship.dmm @@ -88,7 +88,7 @@ /turf/open/floor/plating, /area/shuttle/caravan/syndicate3) "hF" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/light/small{ dir = 8 }, @@ -104,7 +104,7 @@ /turf/open/floor/pod/dark, /area/shuttle/caravan/syndicate3) "ka" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/light/small{ @@ -169,7 +169,7 @@ /turf/open/floor/plating, /area/shuttle/caravan/syndicate3) "rV" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/effect/decal/cleanable/dirt, @@ -185,7 +185,7 @@ }, /area/shuttle/caravan/syndicate3) "sn" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/effect/decal/cleanable/dirt, /turf/open/floor/pod/dark, /area/shuttle/caravan/syndicate3) @@ -247,7 +247,7 @@ /turf/open/floor/plasteel/darkred/side, /area/shuttle/caravan/syndicate3) "Cm" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/machinery/firealarm{ @@ -278,7 +278,7 @@ }, /area/shuttle/caravan/syndicate3) "EO" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/machinery/airalarm/syndicate{ pixel_y = 24 }, diff --git a/_maps/shuttles/ruin_syndicate_fighter.dmm b/_maps/shuttles/ruin_syndicate_fighter.dmm index a9cf2a45b5b..1f8c2640799 100644 --- a/_maps/shuttles/ruin_syndicate_fighter.dmm +++ b/_maps/shuttles/ruin_syndicate_fighter.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aA" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/machinery/turretid{ diff --git a/_maps/shuttles/whiteship_box.dmm b/_maps/shuttles/whiteship_box.dmm index f7cd8ad5293..6b56e1a6a0b 100644 --- a/_maps/shuttles/whiteship_box.dmm +++ b/_maps/shuttles/whiteship_box.dmm @@ -137,7 +137,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "aJ" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/mineral/titanium, @@ -179,7 +179,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "aS" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/decal/remains/human, @@ -232,7 +232,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "bd" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "bf" = ( diff --git a/_maps/shuttles/whiteship_meta.dmm b/_maps/shuttles/whiteship_meta.dmm index 9888026e31f..f8e366950ad 100644 --- a/_maps/shuttles/whiteship_meta.dmm +++ b/_maps/shuttles/whiteship_meta.dmm @@ -753,7 +753,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "bo" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -827,7 +827,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) "bu" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/effect/decal/cleanable/dirt{ @@ -871,7 +871,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "by" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/effect/decal/cleanable/dirt{ @@ -1022,7 +1022,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "bL" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /obj/effect/decal/cleanable/dirt{ diff --git a/_maps/shuttles/whiteship_pubby.dmm b/_maps/shuttles/whiteship_pubby.dmm index 11214ef2607..e7cf65a6f51 100644 --- a/_maps/shuttles/whiteship_pubby.dmm +++ b/_maps/shuttles/whiteship_pubby.dmm @@ -42,7 +42,7 @@ /turf/open/floor/plating/abductor, /area/shuttle/abandoned) "i" = ( -/obj/structure/chair/comfy/shuttle, +/obj/structure/chair/shuttle, /turf/open/floor/plating/abductor, /area/shuttle/abandoned) "j" = ( @@ -65,7 +65,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) "l" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /turf/open/floor/plating/abductor, @@ -75,7 +75,7 @@ /turf/open/floor/plating/abductor, /area/shuttle/abandoned) "n" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/open/floor/plating/abductor, @@ -110,7 +110,7 @@ /turf/open/floor/plating/abductor, /area/shuttle/abandoned) "q" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/chair/shuttle{ dir = 1 }, /turf/open/floor/plating/abductor, diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index a4915f6e1fa..f2bb6dc498e 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -192,20 +192,16 @@ /obj/structure/chair/comfy/lime color = rgb(255,251,0) -/obj/structure/chair/comfy/shuttle +/obj/structure/chair/shuttle name = "shuttle seat" desc = "A comfortable, secure seat. It has a more sturdy looking buckling system, for smoother flights." icon_state = "shuttle_chair" -/obj/structure/chair/comfy/shuttle/GetArmrest() - return mutable_appearance('icons/obj/chairs.dmi', "shuttle_chair_armrest") - /obj/structure/chair/office anchored = FALSE buildstackamount = 5 item_chair = null - /obj/structure/chair/office/Moved() . = ..() if(has_gravity()) diff --git a/icons/obj/chairs.dmi b/icons/obj/chairs.dmi index 10fa8e70b858f8c9f96f1b8a00bf9135d49b507a..b302f4f749f792e0c230b75ef510cdadbd9b5c88 100644 GIT binary patch delta 9580 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 TO|74SfUg%Sn#whb79sx^*%-F; From 16561619081901b9d3954aa38a19066f651cbbf8 Mon Sep 17 00:00:00 2001 From: Dax Dupont Date: Thu, 21 Jun 2018 00:21:25 +0200 Subject: [PATCH 048/133] Makes create antags check for on station. --- code/modules/admin/verbs/one_click_antag.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 410e976b85f..daa1ce473ad 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -57,7 +57,7 @@ var/mob/living/carbon/human/H = null for(var/mob/living/carbon/human/applicant in GLOB.player_list) - if(isReadytoRumble(applicant, ROLE_TRAITOR, FALSE)) + if(isReadytoRumble(applicant, ROLE_TRAITOR)) if(temp.age_check(applicant.client)) if(!(applicant.job in temp.restricted_jobs)) candidates += applicant From 84ae366f0648d8a45c8b56fe6b5132a4f1a8478b Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Wed, 20 Jun 2018 20:03:44 -0400 Subject: [PATCH 049/133] Fixes MassInsert query deleting (#38610) --- code/controllers/subsystem/dbcore.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/controllers/subsystem/dbcore.dm b/code/controllers/subsystem/dbcore.dm index ac2a218a3c9..34bf57594dd 100644 --- a/code/controllers/subsystem/dbcore.dm +++ b/code/controllers/subsystem/dbcore.dm @@ -230,9 +230,9 @@ Delayed insert mode was removed in mysql 7 and only works with MyISAM type table sqlrowlist = " [sqlrowlist.Join(",\n ")]" var/datum/DBQuery/Query = NewQuery("INSERT[delayed][ignore_errors] INTO [table]\n([columns.Join(", ")])\nVALUES\n[sqlrowlist]\n[duplicate_key]") if (warn) - return Query.warn_execute() + . = Query.warn_execute() else - return Query.Execute() + . = Query.Execute() qdel(Query) From ee441ab66f96bdebd686565acfd34ad2d79bb528 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Wed, 20 Jun 2018 20:05:32 -0400 Subject: [PATCH 050/133] Trims down apt dependencies (#38619) * :thinking: * More --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0eccf6708e5..56fa54f58db 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,7 +27,6 @@ matrix: addons: apt: packages: - - libc6-i386 - libstdc++6:i386 cache: directories: @@ -39,7 +38,6 @@ matrix: mariadb: '10.2' apt: packages: - - libc6-i386 - libstdc++6:i386 - libssl-dev:i386 - gcc-multilib From 41dbcba0db19a5c414aa970106febc89882ceb21 Mon Sep 17 00:00:00 2001 From: AnturK Date: Thu, 21 Jun 2018 02:38:51 +0200 Subject: [PATCH 051/133] Fixes AI's being unable to call shuttle using comm console. (#38534) * Fixes AI's being unable to call shuttle using comm console. * Lets get rid of double negatives * viewvers for --- .../game/machinery/computer/communications.dm | 5 ++-- code/game/objects/objs.dm | 23 +++++++++++-------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 445ed389b75..d1e3de12487 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -45,8 +45,9 @@ /obj/machinery/computer/communications/process() if(..()) - if(state != STATE_STATUSDISPLAY && state != STATE_CALLSHUTTLE && state != STATE_PURCHASE && state != STATE_VIEWMESSAGE) - updateDialog() + var/ai_autoupdate = aistate != STATE_STATUSDISPLAY && aistate != STATE_CALLSHUTTLE && aistate != STATE_PURCHASE && aistate != STATE_VIEWMESSAGE + var/machine_user_autoupdate = state != STATE_STATUSDISPLAY && state != STATE_CALLSHUTTLE && state != STATE_PURCHASE && state != STATE_VIEWMESSAGE + updateDialog(machine_user_autoupdate,ai_autoupdate) /obj/machinery/computer/communications/Topic(href, href_list) if(..()) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 02e1cc9bd0e..664cdbf3831 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -138,19 +138,22 @@ else obj_flags &= ~IN_USE -/obj/proc/updateDialog() +/obj/proc/updateDialog(update_viewers = TRUE,update_ais = TRUE) // Check that people are actually using the machine. If not, don't update anymore. if(obj_flags & IN_USE) - var/list/nearby = viewers(1, src) - var/is_in_use = 0 - for(var/mob/M in nearby) - if ((M.client && M.machine == src)) - is_in_use = 1 - src.interact(M) - var/ai_in_use = AutoUpdateAI(src) + var/is_in_use = FALSE + if(update_viewers) + for(var/mob/M in viewers(1, src)) + if ((M.client && M.machine == src)) + is_in_use = TRUE + src.interact(M) + var/ai_in_use = FALSE + if(update_ais) + ai_in_use = AutoUpdateAI(src) - if(!ai_in_use && !is_in_use) - obj_flags &= ~IN_USE + if(update_viewers && update_ais) //State change is sure only if we check both + if(!ai_in_use && !is_in_use) + obj_flags &= ~IN_USE /obj/attack_ghost(mob/user) From fb4ee3d9d56a6729f7c04383b5a1ad63261f1be7 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Wed, 20 Jun 2018 20:42:29 -0400 Subject: [PATCH 052/133] Adds Dockerfile (#38622) * Adds Dockerfile * Remove unnecessary package * I swear this worked before * Keep getrev working --- .dockerignore | 29 +++++++++++++++++++++++++++++ Dockerfile | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000000..fc4b7caec6a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,29 @@ +.dockerignore +.editorconfig +.travis.yml +GPLv3.txt +LICENSE +README.md +TGS3.json +.github +.gitignore +.gitattributes +.git/hooks +.git/info +.git/modules +.git/objects +.git/refs +.vs* +tools +cfg +data +SQL +tgui/node_modules +tgstation.dmb +tgstation.int +tgstation.rsc +tgstation.lk +tgstation.dyn.rsc +libmariadb.dll +rust_g.dll +Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000000..afe89aeb761 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,38 @@ +FROM i386/ubuntu:xenial as build + +WORKDIR /rust_g + +RUN apt-get update && apt-get install -y --no-install-recommends \ + git \ + libssl-dev \ + ca-certificates \ + rustc \ + cargo \ + pkg-config \ + && git init \ + && git remote add origin https://github.com/tgstation/rust-g + +#TODO: find a way to read these from .travis.yml or a common source eventually +ENV RUST_G_VERSION=0.3.0 + +RUN git fetch --depth 1 origin $RUST_G_VERSION \ + && git checkout FETCH_HEAD \ + && cargo build --release + +FROM tgstation/byond:512.1427 + +EXPOSE 1337 + +WORKDIR /tgstation + +COPY . . + +RUN mkdir data && mkdir -p /root/.byond/bin + +VOLUME [ "/tgstation/config", "/tgstation/data" ] + +RUN DreamMaker -max_errors 0 tgstation.dme + +COPY --from=build /rust_g/target/release/librust_g.so /root/.byond/bin/rust_g + +ENTRYPOINT [ "DreamDaemon", "tgstation.dmb", "-port", "1337", "-trusted", "-close", "-verbose" ] From 7b6f87dea3db9090d914509d6f0a03d67b4b1655 Mon Sep 17 00:00:00 2001 From: CitrusGender <31262308+CitrusGender@users.noreply.github.com> Date: Wed, 20 Jun 2018 22:07:42 -0400 Subject: [PATCH 053/133] Fixes ruins air alarms showing up on station tablets (#38478) * Fixes ruins air alarms showing up on station tablets * Update alarm.dm * Update alarm.dm --- .../modular_computers/file_system/programs/alarm.dm | 7 +++++-- config/admins.txt | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm index 310a0a5054b..ca075b51e46 100644 --- a/code/modules/modular_computers/file_system/programs/alarm.dm +++ b/code/modules/modular_computers/file_system/programs/alarm.dm @@ -40,7 +40,10 @@ return data /datum/computer_file/program/alarm_monitor/proc/triggerAlarm(class, area/A, O, obj/source) - if(!is_station_level(source.z) && !is_mining_level(source.z)) + if(is_station_level(source.z)) + if(!(A.type in GLOB.the_station_areas)) + return + else if(!is_mining_level(source.z) || istype(A, /area/ruin)) return var/list/L = alarms[class] @@ -95,4 +98,4 @@ /datum/computer_file/program/alarm_monitor/kill_program(forced = FALSE) GLOB.alarmdisplay -= src - ..() \ No newline at end of file + ..() diff --git a/config/admins.txt b/config/admins.txt index 6825a88aec0..a882f7caea3 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -10,6 +10,7 @@ # and will override any duplicate entries in the database. # ############################################################################################### Optimumtact = Host +CitrusGender = Game Master NewSta = Game Master Expletives = Game Master kingofkosmos = Game Master From 43bce7e897a7300bd97cb08ea997785a27dece50 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Wed, 20 Jun 2018 19:07:45 -0700 Subject: [PATCH 054/133] Automatic changelog generation for PR #38478 [ci skip] --- html/changelogs/AutoChangeLog-pr-38478.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38478.yml diff --git a/html/changelogs/AutoChangeLog-pr-38478.yml b/html/changelogs/AutoChangeLog-pr-38478.yml new file mode 100644 index 00000000000..0bff9e694e0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38478.yml @@ -0,0 +1,4 @@ +author: "CitrusGender" +delete-after: True +changes: + - bugfix: "Ruins air alarms will no longer be reported in the station tablets" From b754e47b09c059458beb530dcf849b7945baa05c Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Wed, 20 Jun 2018 21:58:43 -0700 Subject: [PATCH 055/133] Tidy up cameranet code slightly --- code/game/objects/items/devices/multitool.dm | 24 +++++++++--------- .../living/silicon/ai/freelook/cameranet.dm | 25 +++++++------------ .../mob/living/silicon/ai/freelook/chunk.dm | 4 +-- 3 files changed, 22 insertions(+), 31 deletions(-) diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index a059c062845..e11cebdf510 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -129,18 +129,18 @@ detect_state = PROXIMITY_ON_SCREEN break - if(!detect_state && GLOB.cameranet.chunkGenerated(our_turf.x, our_turf.y, our_turf.z)) - var/datum/camerachunk/chunk = GLOB.cameranet.getCameraChunk(our_turf.x, our_turf.y, our_turf.z) - if(chunk) - if(chunk.seenby.len) - for(var/mob/camera/aiEye/A in chunk.seenby) - var/turf/detect_turf = get_turf(A) - if(get_dist(our_turf, detect_turf) < rangealert) - detect_state = PROXIMITY_ON_SCREEN - break - if(get_dist(our_turf, detect_turf) < rangewarning) - detect_state = PROXIMITY_NEAR - break + if(detect_state) + return + var/datum/camerachunk/chunk = GLOB.cameranet.chunkGenerated(our_turf.x, our_turf.y, our_turf.z) + if(chunk && chunk.seenby.len) + for(var/mob/camera/aiEye/A in chunk.seenby) + var/turf/detect_turf = get_turf(A) + if(get_dist(our_turf, detect_turf) < rangealert) + detect_state = PROXIMITY_ON_SCREEN + break + if(get_dist(our_turf, detect_turf) < rangewarning) + detect_state = PROXIMITY_NEAR + break /obj/item/multitool/cyborg name = "multitool" diff --git a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm index 5cc08ff1e0d..ed3742e1409 100644 --- a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm +++ b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm @@ -22,8 +22,7 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) /datum/cameranet/proc/chunkGenerated(x, y, z) x &= ~(CHUNK_SIZE - 1) y &= ~(CHUNK_SIZE - 1) - var/key = "[x],[y],[z]" - return (chunks[key]) + return chunks["[x],[y],[z]"] // Returns the chunk in the x, y, z. // If there is no chunk, it creates a new chunk and returns that. @@ -31,10 +30,9 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) x &= ~(CHUNK_SIZE - 1) y &= ~(CHUNK_SIZE - 1) var/key = "[x],[y],[z]" - if(!chunks[key]) - chunks[key] = new /datum/camerachunk(null, x, y, z) - - return chunks[key] + . = chunks[key] + if(!.) + chunks[key] = . = new /datum/camerachunk(x, y, z) // Updates what the aiEye can see. It is recommended you use this when the aiEye moves or it's location is set. @@ -53,7 +51,6 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) var/mob/camera/aiEye/eye = V if(C) chunks_pre_seen |= eye.visibleCameraChunks - // 0xf = 15 var/static_range = eye.static_visibility_range var/x1 = max(0, eye.x - static_range) & ~(CHUNK_SIZE - 1) var/y1 = max(0, eye.y - static_range) & ~(CHUNK_SIZE - 1) @@ -105,10 +102,9 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) majorChunkChange(A, 2) /datum/cameranet/proc/updateChunk(x, y, z) - // 0xf = 15 - if(!chunkGenerated(x, y, z)) + var/datum/camerachunk/chunk = chunkGenerated(x, y, z) + if (!chunk) return - var/datum/camerachunk/chunk = getCameraChunk(x, y, z) chunk.hasChanged() // Removes a camera from a chunk. @@ -135,7 +131,6 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) // If you want to update the chunks around an object, without adding/removing a camera, use choice 2. /datum/cameranet/proc/majorChunkChange(atom/c, choice) - // 0xf = 15 if(!c) return @@ -147,8 +142,8 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) var/y2 = min(world.maxy, T.y + (CHUNK_SIZE / 2)) & ~(CHUNK_SIZE - 1) for(var/x = x1; x <= x2; x += CHUNK_SIZE) for(var/y = y1; y <= y2; y += CHUNK_SIZE) - if(chunkGenerated(x, y, T.z)) - var/datum/camerachunk/chunk = getCameraChunk(x, y, T.z) + var/datum/camerachunk/chunk = chunkGenerated(x, y, T.z) + if(chunk) if(choice == 0) // Remove the camera. chunk.cameras -= c @@ -160,14 +155,12 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) // Will check if a mob is on a viewable turf. Returns 1 if it is, otherwise returns 0. /datum/cameranet/proc/checkCameraVis(mob/living/target) - - // 0xf = 15 var/turf/position = get_turf(target) return checkTurfVis(position) /datum/cameranet/proc/checkTurfVis(turf/position) - var/datum/camerachunk/chunk = getCameraChunk(position.x, position.y, position.z) + var/datum/camerachunk/chunk = chunkGenerated(position.x, position.y, position.z) if(chunk) if(chunk.changed) chunk.hasChanged(1) // Update now, no matter if it's visible or not. diff --git a/code/modules/mob/living/silicon/ai/freelook/chunk.dm b/code/modules/mob/living/silicon/ai/freelook/chunk.dm index e03bba3067b..178883fbe11 100644 --- a/code/modules/mob/living/silicon/ai/freelook/chunk.dm +++ b/code/modules/mob/living/silicon/ai/freelook/chunk.dm @@ -126,9 +126,7 @@ // Create a new camera chunk, since the chunks are made as they are needed. -/datum/camerachunk/New(loc, x, y, z) - - // 0xf = 15 +/datum/camerachunk/New(x, y, z) x &= ~(CHUNK_SIZE - 1) y &= ~(CHUNK_SIZE - 1) From d1646da6d8da6d449e46a1438c5f13c85440a61e Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Wed, 20 Jun 2018 23:10:36 -0700 Subject: [PATCH 056/133] Add a missing HrefToken in VV --- code/datums/datumvars.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 59953a4ce1a..56f22430158 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -96,7 +96,7 @@ else atomsnowflake += "[D]" if(A.dir) - atomsnowflake += "
<< [dir2text(A.dir)] >>" + atomsnowflake += "
<< [dir2text(A.dir)] >>" else atomsnowflake += "[D]" From beb119ff0b501aa610aed9cb83c3fdbcf83342f8 Mon Sep 17 00:00:00 2001 From: BlueNothing <20761604+BlueNothing@users.noreply.github.com> Date: Thu, 21 Jun 2018 03:41:51 -0400 Subject: [PATCH 057/133] Preventing grabbers from holding other circuits is a simple (one-line) fix that strongly nerfs so-called 'uberthrower' circuits, dropping their damage output drastically. Uberthrower circuits are one of the most famous unintended uses of circuits. (#38621) --- code/modules/integrated_electronics/subtypes/manipulation.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm index c391c629629..2d20f85aa02 100644 --- a/code/modules/integrated_electronics/subtypes/manipulation.dm +++ b/code/modules/integrated_electronics/subtypes/manipulation.dm @@ -367,7 +367,7 @@ var/atom/movable/acting_object = get_object() var/turf/T = get_turf(acting_object) var/obj/item/AM = get_pin_data_as_type(IC_INPUT, 1, /obj/item) - if(AM) + if(!QDELETED(AM) && !istype(AM, /obj/item/electronic_assembly)) var/mode = get_pin_data(IC_INPUT, 2) if(mode == 1) if(check_target(AM)) From b050a0b61b4840ad874c95e26a035b584e790c53 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Thu, 21 Jun 2018 00:41:55 -0700 Subject: [PATCH 058/133] Automatic changelog generation for PR #38621 [ci skip] --- html/changelogs/AutoChangeLog-pr-38621.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38621.yml diff --git a/html/changelogs/AutoChangeLog-pr-38621.yml b/html/changelogs/AutoChangeLog-pr-38621.yml new file mode 100644 index 00000000000..cdc56a55189 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38621.yml @@ -0,0 +1,4 @@ +author: "BlueNothing" +delete-after: True +changes: + - tweak: "Grabbers can no longer hold circuit assemblies" From bc72fef8f5e954f73dec7bda8e87005e05a95151 Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Thu, 21 Jun 2018 01:01:17 -0700 Subject: [PATCH 059/133] Port AI static to vis_contents --- .../simulated/floor/plating/misc_plating.dm | 5 +- code/game/turfs/simulated/minerals.dm | 5 +- code/game/turfs/turf.dm | 2 - .../living/silicon/ai/freelook/cameranet.dm | 52 +++++++++--------- .../mob/living/silicon/ai/freelook/chunk.dm | 53 +++---------------- .../mob/living/silicon/ai/freelook/eye.dm | 4 +- .../modules/mob/living/silicon/ai/multicam.dm | 4 -- 7 files changed, 41 insertions(+), 84 deletions(-) diff --git a/code/game/turfs/simulated/floor/plating/misc_plating.dm b/code/game/turfs/simulated/floor/plating/misc_plating.dm index 6d4a949c754..3c4c8d9f858 100644 --- a/code/game/turfs/simulated/floor/plating/misc_plating.dm +++ b/code/game/turfs/simulated/floor/plating/misc_plating.dm @@ -47,8 +47,9 @@ /turf/open/floor/plating/ashplanet/Initialize() if(smooth) - pixel_y = -4 - pixel_x = -4 + var/matrix/M = new + M.Translate(-4, -4) + transform = M icon = smooth_icon . = ..() diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm index 8c907573d86..6123bf25e6b 100644 --- a/code/game/turfs/simulated/minerals.dm +++ b/code/game/turfs/simulated/minerals.dm @@ -27,8 +27,9 @@ /turf/closed/mineral/Initialize() if (!canSmoothWith) canSmoothWith = list(/turf/closed/mineral, /turf/closed/indestructible) - pixel_y = -4 - pixel_x = -4 + var/matrix/M = new + M.Translate(-4, -4) + transform = M icon = smooth_icon . = ..() if (mineralType && mineralAmt && spread && spreadChance) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 46b0e0b2021..c1e4acc25a0 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -19,8 +19,6 @@ flags_1 = CAN_BE_DIRTY_1 - var/image/obscured //camerachunks - var/list/image/blueprint_data //for the station blueprints, images of objects eg: pipes var/explosion_level = 0 //for preventing explosion dodging diff --git a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm index ed3742e1409..d90dd89b342 100644 --- a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm +++ b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm @@ -18,6 +18,16 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) // The object used for the clickable stat() button. var/obj/effect/statclick/statclick + // The object used in vis_contents of obscured turfs + var/vis_contents + // The image given to the effect in vis_contents on AI clients + var/image/obscured + +/datum/cameranet/New() + vis_contents = new /obj/effect/overlay/camera_static() + obscured = new('icons/effects/cameravis.dmi', vis_contents, null, BYOND_LIGHTING_LAYER + 0.1) + obscured.plane = BYOND_LIGHTING_PLANE + 0.1 + // Checks if a chunk has been Generated in x, y, z. /datum/cameranet/proc/chunkGenerated(x, y, z) x &= ~(CHUNK_SIZE - 1) @@ -44,13 +54,8 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) else other_eyes = list() - var/list/chunks_pre_seen = list() - var/list/chunks_post_seen = list() - for(var/V in moved_eyes) var/mob/camera/aiEye/eye = V - if(C) - chunks_pre_seen |= eye.visibleCameraChunks var/static_range = eye.static_visibility_range var/x1 = max(0, eye.x - static_range) & ~(CHUNK_SIZE - 1) var/y1 = max(0, eye.y - static_range) & ~(CHUNK_SIZE - 1) @@ -68,35 +73,18 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) for(var/chunk in remove) var/datum/camerachunk/c = chunk - c.remove(eye, FALSE) + c.remove(eye) for(var/chunk in add) var/datum/camerachunk/c = chunk - c.add(eye, FALSE) - - if(C) - chunks_post_seen |= eye.visibleCameraChunks + c.add(eye) if(C) - for(var/V in other_eyes) - var/mob/camera/aiEye/eye = V - chunks_post_seen |= eye.visibleCameraChunks - - var/list/remove = chunks_pre_seen - chunks_post_seen - var/list/add = chunks_post_seen - chunks_pre_seen - - for(var/chunk in remove) - var/datum/camerachunk/c = chunk - C.images -= c.obscured - - for(var/chunk in add) - var/datum/camerachunk/c = chunk - C.images += c.obscured + C.images += obscured // Updates the chunks that the turf is located in. Use this when obstacles are destroyed or when doors open. /datum/cameranet/proc/updateVisibility(atom/A, opacity_check = 1) - if(!SSticker || (opacity_check && !A.opacity)) return majorChunkChange(A, 2) @@ -173,3 +161,17 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) statclick = new/obj/effect/statclick/debug(null, "Initializing...", src) stat(name, statclick.update("Cameras: [GLOB.cameranet.cameras.len] | Chunks: [GLOB.cameranet.chunks.len]")) + +/obj/effect/overlay/camera_static + name = "static" + icon = null + icon_state = null + anchored = TRUE // should only appear in vis_contents, but to be safe + appearance_flags = RESET_TRANSFORM | TILE_BOUND + // this combination makes the static block clicks to everything below it, + // without appearing in the right-click menu for non-AI clients + mouse_opacity = MOUSE_OPACITY_ICON + invisibility = INVISIBILITY_ABSTRACT + + layer = BYOND_LIGHTING_LAYER + 0.1 + plane = BYOND_LIGHTING_PLANE + 1 diff --git a/code/modules/mob/living/silicon/ai/freelook/chunk.dm b/code/modules/mob/living/silicon/ai/freelook/chunk.dm index 178883fbe11..9a84616fbf5 100644 --- a/code/modules/mob/living/silicon/ai/freelook/chunk.dm +++ b/code/modules/mob/living/silicon/ai/freelook/chunk.dm @@ -8,11 +8,9 @@ /datum/camerachunk var/list/obscuredTurfs = list() var/list/visibleTurfs = list() - var/list/obscured = list() var/list/cameras = list() var/list/turfs = list() var/list/seenby = list() - var/visible = FALSE var/changed = 0 var/x = 0 var/y = 0 @@ -20,28 +18,17 @@ // Add an AI eye to the chunk, then update if changed. -/datum/camerachunk/proc/add(mob/camera/aiEye/eye, add_images = TRUE) - if(add_images) - var/client/client = eye.GetViewerClient() - if(client) - client.images += obscured +/datum/camerachunk/proc/add(mob/camera/aiEye/eye) eye.visibleCameraChunks += src - visible++ seenby += eye if(changed) update() // Remove an AI eye from the chunk, then update if changed. -/datum/camerachunk/proc/remove(mob/camera/aiEye/eye, remove_images = TRUE) - if(remove_images) - var/client/client = eye.GetViewerClient() - if(client) - client.images -= obscured +/datum/camerachunk/proc/remove(mob/camera/aiEye/eye) eye.visibleCameraChunks -= src seenby -= eye - if(visible > 0) - visible-- // Called when a chunk has changed. I.E: A wall was deleted. @@ -54,7 +41,7 @@ // instead be flagged to update the next time an AI Eye moves near it. /datum/camerachunk/proc/hasChanged(update_now = 0) - if(visible || update_now) + if(seenby.len || update_now) addtimer(CALLBACK(src, .proc/update), UPDATE_BUFFER, TIMER_UNIQUE) else changed = 1 @@ -94,33 +81,12 @@ for(var/turf in visAdded) var/turf/t = turf - if(t.obscured) - obscured -= t.obscured - for(var/eye in seenby) - var/mob/camera/aiEye/m = eye - if(!m) - continue - var/client/client = m.GetViewerClient() - if(client) - client.images -= t.obscured + t.vis_contents -= GLOB.cameranet.vis_contents for(var/turf in visRemoved) var/turf/t = turf - if(obscuredTurfs[t]) - if(!t.obscured) - t.obscured = image('icons/effects/cameravis.dmi', t, null, BYOND_LIGHTING_LAYER+0.1) - t.obscured.pixel_x = -t.pixel_x - t.obscured.pixel_y = -t.pixel_y - t.obscured.plane = BYOND_LIGHTING_PLANE+0.1 - obscured += t.obscured - for(var/eye in seenby) - var/mob/camera/aiEye/m = eye - if(!m) - seenby -= m - continue - var/client/client = m.GetViewerClient() - if(client) - client.images += t.obscured + if(obscuredTurfs[t] && !istype(t, /turf/open/ai_visible)) + t.vis_contents += GLOB.cameranet.vis_contents changed = 0 @@ -162,12 +128,7 @@ for(var/turf in obscuredTurfs) var/turf/t = turf - if(!t.obscured) - t.obscured = image('icons/effects/cameravis.dmi', t, null, BYOND_LIGHTING_LAYER+0.1) - t.obscured.pixel_x = -t.pixel_x - t.obscured.pixel_y = -t.pixel_y - t.obscured.plane = BYOND_LIGHTING_PLANE+0.1 - obscured += t.obscured + t.vis_contents += GLOB.cameranet.vis_contents #undef UPDATE_BUFFER #undef CHUNK_SIZE diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index 469639d58f0..41c2902c73d 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -50,9 +50,7 @@ /mob/camera/aiEye/proc/RemoveImages() var/client/C = GetViewerClient() if(C && use_static) - for(var/V in visibleCameraChunks) - var/datum/camerachunk/c = V - C.images -= c.obscured + C.images -= GLOB.cameranet.obscured /mob/camera/aiEye/Destroy() if(ai) diff --git a/code/modules/mob/living/silicon/ai/multicam.dm b/code/modules/mob/living/silicon/ai/multicam.dm index b6f3724fcf9..d77e7f8a408 100644 --- a/code/modules/mob/living/silicon/ai/multicam.dm +++ b/code/modules/mob/living/silicon/ai/multicam.dm @@ -88,10 +88,6 @@ icon_state = "room_background" flags_1 = NOJAUNT_1 -/turf/open/ai_visible/Initialize() - . = ..() - obscured = image(null, src, null) - /area/ai_multicam_room name = "ai_multicam_room" icon_state = "ai_camera_room" From 5af480140ddcc29848530655044b4dbc80d72481 Mon Sep 17 00:00:00 2001 From: AnturK Date: Thu, 21 Jun 2018 20:03:29 +0200 Subject: [PATCH 060/133] Throw a warning if this breaks up --- code/controllers/subsystem/job.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 23ec74bd58a..837a7813382 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -378,7 +378,11 @@ SUBSYSTEM_DEF(job) RejectPlayer(player) else if(player.client.prefs.joblessrole == RETURNTOLOBBY) RejectPlayer(player) - + else //Something gone wrong if we got here. + var/message = "DO: [player] fell through handling unassigned" + log_game(message) + message_admins(message) + RejectPlayer(player) //Gives the player the stuff he should have with his rank /datum/controller/subsystem/job/proc/EquipRank(mob/M, rank, joined_late = FALSE) var/mob/dead/new_player/N From bf91dcc1c28ccbe98fc85fcff3e2dfd132647190 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Thu, 21 Jun 2018 18:21:27 +0000 Subject: [PATCH 061/133] Automatic changelog compile, [ci skip] --- html/changelog.html | 44 ++++++++++++++++++++++ html/changelogs/.all_changelog.yml | 32 ++++++++++++++++ html/changelogs/AutoChangeLog-pr-38111.yml | 4 -- html/changelogs/AutoChangeLog-pr-38153.yml | 5 --- html/changelogs/AutoChangeLog-pr-38478.yml | 4 -- html/changelogs/AutoChangeLog-pr-38549.yml | 7 ---- html/changelogs/AutoChangeLog-pr-38585.yml | 4 -- html/changelogs/AutoChangeLog-pr-38603.yml | 4 -- html/changelogs/AutoChangeLog-pr-38607.yml | 4 -- html/changelogs/AutoChangeLog-pr-38613.yml | 4 -- html/changelogs/AutoChangeLog-pr-38620.yml | 4 -- html/changelogs/AutoChangeLog-pr-38621.yml | 4 -- html/changelogs/AutoChangeLog-pr-38624.yml | 4 -- 13 files changed, 76 insertions(+), 48 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-38111.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38153.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38478.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38549.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38585.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38603.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38607.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38613.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38620.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38621.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38624.yml diff --git a/html/changelog.html b/html/changelog.html index 09847ce6837..def6b889015 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,50 @@ -->
+

21 June 2018

+

BlueNothing updated:

+
    +
  • Grabbers can no longer hold circuit assemblies
  • +
+

CitrusGender updated:

+
    +
  • Ruins air alarms will no longer be reported in the station tablets
  • +
  • added a clamp so you can't set a negative multiplier to create materials and create more than 50 items.
  • +
+

Cobby updated:

+
    +
  • Removed Advanced Mining Scanner from roundstart voucher kits.
  • +
  • Removed Explorer Webbing from all voucher kits besides the shelter capsule pack.
  • +
+

Denton updated:

+
    +
  • The public booze-o-mats and autodrobes on Box/Delta/Meta now have no access requirements, as previously intended.
  • +
  • Regular and advanced health analyzers can now be researched and printed.
  • +
+

McDonald072 updated:

+
    +
  • A few new circuits for dealing with atmospherics have been uploaded to your local printers.
  • +
+

NewSta updated:

+
    +
  • made it easier to see from the back whether someone is occupying the shuttle chair or not.
  • +
+

SpaceManiac updated:

+
    +
  • One canister is now suitable to fully stock a vending machine. Relevant cargo packs have been updated.
  • +
  • Deconstructing and reconstructing a vending machine no longer creates items from thin air.
  • +
  • Using a part replacer on a vending machine no longer empties its inventory.
  • +
  • Bluespace RPEDs can now be used to refill vending machines.
  • +
+

Tlaltecuhtli updated:

+
    +
  • anomaly cores no longer tend to dust
  • +
+

YPOQ updated:

+
    +
  • Watcher beams will freeze you again
  • +
+

19 June 2018

Cyberboss updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 99599bcea76..fe1f2511b2e 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -18571,3 +18571,35 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - code_imp: Sped up atmos very slightly ninjanomnom: - rscadd: A plush that knows too much has found its way to the bus ruin. +2018-06-21: + BlueNothing: + - tweak: Grabbers can no longer hold circuit assemblies + CitrusGender: + - bugfix: Ruins air alarms will no longer be reported in the station tablets + - bugfix: added a clamp so you can't set a negative multiplier to create materials + and create more than 50 items. + Cobby: + - rscdel: Removed Advanced Mining Scanner from roundstart voucher kits. + - rscdel: Removed Explorer Webbing from all voucher kits besides the shelter capsule + pack. + Denton: + - bugfix: The public booze-o-mats and autodrobes on Box/Delta/Meta now have no access + requirements, as previously intended. + - rscadd: Regular and advanced health analyzers can now be researched and printed. + McDonald072: + - rscadd: A few new circuits for dealing with atmospherics have been uploaded to + your local printers. + NewSta: + - tweak: made it easier to see from the back whether someone is occupying the shuttle + chair or not. + SpaceManiac: + - tweak: One canister is now suitable to fully stock a vending machine. Relevant + cargo packs have been updated. + - bugfix: Deconstructing and reconstructing a vending machine no longer creates + items from thin air. + - bugfix: Using a part replacer on a vending machine no longer empties its inventory. + - rscadd: Bluespace RPEDs can now be used to refill vending machines. + Tlaltecuhtli: + - bugfix: anomaly cores no longer tend to dust + YPOQ: + - bugfix: Watcher beams will freeze you again diff --git a/html/changelogs/AutoChangeLog-pr-38111.yml b/html/changelogs/AutoChangeLog-pr-38111.yml deleted file mode 100644 index a9e7210586f..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38111.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "McDonald072" -delete-after: True -changes: - - rscadd: "A few new circuits for dealing with atmospherics have been uploaded to your local printers." diff --git a/html/changelogs/AutoChangeLog-pr-38153.yml b/html/changelogs/AutoChangeLog-pr-38153.yml deleted file mode 100644 index 562c8e4190b..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38153.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Cobby" -delete-after: True -changes: - - rscdel: "Removed Advanced Mining Scanner from roundstart voucher kits." - - rscdel: "Removed Explorer Webbing from all voucher kits besides the shelter capsule pack." diff --git a/html/changelogs/AutoChangeLog-pr-38478.yml b/html/changelogs/AutoChangeLog-pr-38478.yml deleted file mode 100644 index 0bff9e694e0..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38478.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitrusGender" -delete-after: True -changes: - - bugfix: "Ruins air alarms will no longer be reported in the station tablets" diff --git a/html/changelogs/AutoChangeLog-pr-38549.yml b/html/changelogs/AutoChangeLog-pr-38549.yml deleted file mode 100644 index 5475e2ae276..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38549.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: "SpaceManiac" -delete-after: True -changes: - - tweak: "One canister is now suitable to fully stock a vending machine. Relevant cargo packs have been updated." - - bugfix: "Deconstructing and reconstructing a vending machine no longer creates items from thin air." - - bugfix: "Using a part replacer on a vending machine no longer empties its inventory." - - rscadd: "Bluespace RPEDs can now be used to refill vending machines." diff --git a/html/changelogs/AutoChangeLog-pr-38585.yml b/html/changelogs/AutoChangeLog-pr-38585.yml deleted file mode 100644 index 9ffa6c8f2c5..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38585.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "NewSta" -delete-after: True -changes: - - tweak: "made it easier to see from the back whether someone is occupying the shuttle chair or not." diff --git a/html/changelogs/AutoChangeLog-pr-38603.yml b/html/changelogs/AutoChangeLog-pr-38603.yml deleted file mode 100644 index ae2251bab41..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38603.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Denton" -delete-after: True -changes: - - bugfix: "The public booze-o-mats and autodrobes on Box/Delta/Meta now have no access requirements, as previously intended." diff --git a/html/changelogs/AutoChangeLog-pr-38607.yml b/html/changelogs/AutoChangeLog-pr-38607.yml deleted file mode 100644 index 2aa4b456053..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38607.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Tlaltecuhtli" -delete-after: True -changes: - - bugfix: "anomaly cores no longer tend to dust" diff --git a/html/changelogs/AutoChangeLog-pr-38613.yml b/html/changelogs/AutoChangeLog-pr-38613.yml deleted file mode 100644 index fd2dc0c1977..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38613.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Denton" -delete-after: True -changes: - - rscadd: "Regular and advanced health analyzers can now be researched and printed." diff --git a/html/changelogs/AutoChangeLog-pr-38620.yml b/html/changelogs/AutoChangeLog-pr-38620.yml deleted file mode 100644 index bb955057ff5..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38620.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "YPOQ" -delete-after: True -changes: - - bugfix: "Watcher beams will freeze you again" diff --git a/html/changelogs/AutoChangeLog-pr-38621.yml b/html/changelogs/AutoChangeLog-pr-38621.yml deleted file mode 100644 index cdc56a55189..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38621.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "BlueNothing" -delete-after: True -changes: - - tweak: "Grabbers can no longer hold circuit assemblies" diff --git a/html/changelogs/AutoChangeLog-pr-38624.yml b/html/changelogs/AutoChangeLog-pr-38624.yml deleted file mode 100644 index 4c8d7170e90..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38624.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitrusGender" -delete-after: True -changes: - - bugfix: "added a clamp so you can't set a negative multiplier to create materials and create more than 50 items." From 149e9fb7ae976c2b11688e5db67fc24f9d140548 Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Thu, 21 Jun 2018 11:55:30 -0700 Subject: [PATCH 062/133] Port fire axe and extinguisher cabinets to Initialize (#38640) --- code/game/objects/structures/extinguisher.dm | 16 ++++++++-------- code/game/objects/structures/fireaxe.dm | 7 ++++--- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index f73a2067478..aa2f7bed86b 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -8,23 +8,23 @@ max_integrity = 200 integrity_failure = 50 var/obj/item/extinguisher/stored_extinguisher - var/opened = 0 + var/opened = FALSE -/obj/structure/extinguisher_cabinet/examine(mob/user) - ..() - to_chat(user, "Alt-click to [opened ? "close":"open"] it.") - -/obj/structure/extinguisher_cabinet/New(loc, ndir, building) - ..() +/obj/structure/extinguisher_cabinet/Initialize(mapload, ndir, building) + . = ..() if(building) setDir(ndir) pixel_x = (dir & 3)? 0 : (dir == 4 ? -27 : 27) pixel_y = (dir & 3)? (dir ==1 ? -30 : 30) : 0 - opened = 1 + opened = TRUE icon_state = "extinguisher_empty" else stored_extinguisher = new /obj/item/extinguisher(src) +/obj/structure/extinguisher_cabinet/examine(mob/user) + ..() + to_chat(user, "Alt-click to [opened ? "close":"open"] it.") + /obj/structure/extinguisher_cabinet/Destroy() if(stored_extinguisher) qdel(stored_extinguisher) diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 0c84c4cf639..448734d9176 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -1,19 +1,20 @@ /obj/structure/fireaxecabinet name = "fire axe cabinet" desc = "There is a small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if." - var/obj/item/twohanded/fireaxe/fireaxe = new/obj/item/twohanded/fireaxe icon = 'icons/obj/wallmounts.dmi' icon_state = "fireaxe" anchored = TRUE density = FALSE armor = list("melee" = 50, "bullet" = 20, "laser" = 0, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50) - var/locked = TRUE - var/open = FALSE max_integrity = 150 integrity_failure = 50 + var/locked = TRUE + var/open = FALSE + var/obj/item/twohanded/fireaxe/fireaxe /obj/structure/fireaxecabinet/Initialize() . = ..() + fireaxe = new update_icon() /obj/structure/fireaxecabinet/Destroy() From 5a772ed51b0f859826d05a2adb6f42a9f9782e65 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Thu, 21 Jun 2018 11:55:33 -0700 Subject: [PATCH 063/133] Automatic changelog generation for PR #38640 [ci skip] --- html/changelogs/AutoChangeLog-pr-38640.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38640.yml diff --git a/html/changelogs/AutoChangeLog-pr-38640.yml b/html/changelogs/AutoChangeLog-pr-38640.yml new file mode 100644 index 00000000000..11e45a5e98f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38640.yml @@ -0,0 +1,4 @@ +author: "SpaceManiac" +delete-after: True +changes: + - bugfix: "Fire extinguishers on the emergency shuttle are no longer unclickable once removed from their cabinets." From 50d2d2c3d0af5d37a1ce8b3298c64c26920cd6fa Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Thu, 21 Jun 2018 14:03:14 -0700 Subject: [PATCH 064/133] Maintain cameranet vis_contents across turf changes --- code/game/turfs/change_turf.dm | 2 -- code/game/turfs/turf.dm | 11 +++++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm index 9c045c12158..b0e46b8aa4b 100644 --- a/code/game/turfs/change_turf.dm +++ b/code/game/turfs/change_turf.dm @@ -79,8 +79,6 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( qdel(src) //Just get the side effects and call Destroy var/turf/W = new path(src) - W.vis_contents.Cut() - for(var/i in transferring_comps) W.TakeComponent(i) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index c1e4acc25a0..490a6dcaf72 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -42,6 +42,9 @@ stack_trace("Warning: [src]([type]) initialized multiple times!") flags_1 |= INITIALIZED_1 + // by default, vis_contents is inherited from the turf that was here before + vis_contents.Cut() + assemble_baseturfs() levelupdate() @@ -323,6 +326,14 @@ /turf/proc/visibilityChanged() GLOB.cameranet.updateVisibility(src) + // The cameranet usually handles this for us, but if we've just been + // recreated we should make sure we have the cameranet vis_contents. + var/datum/camerachunk/C = GLOB.cameranet.chunkGenerated(x, y, z) + if(C) + if(C.obscuredTurfs[src]) + vis_contents += GLOB.cameranet.vis_contents + else + vis_contents -= GLOB.cameranet.vis_contents /turf/proc/burn_tile() From d4471d8fd9e5fece7f6e86267c073bd6b6d3d0f4 Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Thu, 21 Jun 2018 14:04:13 -0700 Subject: [PATCH 065/133] Fix invalid use of fractional planes --- code/modules/mob/living/silicon/ai/freelook/cameranet.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm index d90dd89b342..36ae19b478f 100644 --- a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm +++ b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm @@ -26,7 +26,7 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) /datum/cameranet/New() vis_contents = new /obj/effect/overlay/camera_static() obscured = new('icons/effects/cameravis.dmi', vis_contents, null, BYOND_LIGHTING_LAYER + 0.1) - obscured.plane = BYOND_LIGHTING_PLANE + 0.1 + obscured.plane = BYOND_LIGHTING_PLANE + 1 // Checks if a chunk has been Generated in x, y, z. /datum/cameranet/proc/chunkGenerated(x, y, z) From d4136f4a652f8499b8bd003cb587a4f65d9c6264 Mon Sep 17 00:00:00 2001 From: YPOQ <30683121+YPOQ@users.noreply.github.com> Date: Thu, 21 Jun 2018 15:30:13 -0600 Subject: [PATCH 066/133] Fixes gulag stacker not giving points after RPG loot event (#38570) * Fixes gulag stacker not giving points after RPG loot event * Moves point values to type vars * cleanup --- code/game/objects/items/stacks/bscrystal.dm | 1 + .../game/objects/items/stacks/sheets/glass.dm | 3 ++ .../objects/items/stacks/sheets/mineral.dm | 8 +++++ .../items/stacks/sheets/sheet_types.dm | 2 ++ .../objects/items/stacks/sheets/sheets.dm | 3 +- code/modules/mining/laborcamp/laborstacker.dm | 31 ++++++++++--------- code/modules/mining/machine_stacking.dm | 2 +- 7 files changed, 34 insertions(+), 16 deletions(-) diff --git a/code/game/objects/items/stacks/bscrystal.dm b/code/game/objects/items/stacks/bscrystal.dm index 936accce393..4da0fd8a447 100644 --- a/code/game/objects/items/stacks/bscrystal.dm +++ b/code/game/objects/items/stacks/bscrystal.dm @@ -67,6 +67,7 @@ attack_verb = list("bluespace polybashed", "bluespace polybattered", "bluespace polybludgeoned", "bluespace polythrashed", "bluespace polysmashed") novariants = TRUE grind_results = list("bluespace" = 20) + point_value = 30 var/crystal_type = /obj/item/stack/ore/bluespace_crystal/refined /obj/item/stack/sheet/bluespace_crystal/attack_self(mob/user)// to prevent the construction menu from ever happening diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 3264deae885..996576d8e5b 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -24,6 +24,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/glass grind_results = list("silicon" = 20) + point_value = 1 /obj/item/stack/sheet/glass/suicide_act(mob/living/carbon/user) user.visible_message("[user] begins to slice [user.p_their()] neck with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") @@ -138,6 +139,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/rglass grind_results = list("silicon" = 20, "iron" = 10) + point_value = 4 /obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, params) add_fingerprint(user) @@ -180,6 +182,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \ resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/plasmarglass grind_results = list("silicon" = 20, "plasma" = 10, "iron" = 10) + point_value = 23 /obj/item/stack/sheet/plasmarglass/Initialize(mapload, new_amount, merge = TRUE) recipes = GLOB.prglass_recipes diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 300f18cbebf..87d1985b181 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -104,6 +104,7 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \ materials = list(MAT_DIAMOND=MINERAL_MATERIAL_AMOUNT) novariants = TRUE grind_results = list("carbon" = 20) + point_value = 25 GLOBAL_LIST_INIT(diamond_recipes, list ( \ new/datum/stack_recipe("diamond door", /obj/structure/mineral_door/transparent/diamond, 10, one_per_turf = 1, on_floor = 1), \ @@ -129,6 +130,7 @@ GLOBAL_LIST_INIT(diamond_recipes, list ( \ materials = list(MAT_URANIUM=MINERAL_MATERIAL_AMOUNT) novariants = TRUE grind_results = list("uranium" = 20) + point_value = 20 GLOBAL_LIST_INIT(uranium_recipes, list ( \ new/datum/stack_recipe("uranium door", /obj/structure/mineral_door/uranium, 10, one_per_turf = 1, on_floor = 1), \ @@ -154,6 +156,7 @@ GLOBAL_LIST_INIT(uranium_recipes, list ( \ max_integrity = 100 materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT) grind_results = list("plasma" = 20) + point_value = 20 /obj/item/stack/sheet/mineral/plasma/suicide_act(mob/living/carbon/user) user.visible_message("[user] begins licking \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") @@ -193,6 +196,7 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \ sheettype = "gold" materials = list(MAT_GOLD=MINERAL_MATERIAL_AMOUNT) grind_results = list("gold" = 20) + point_value = 20 GLOBAL_LIST_INIT(gold_recipes, list ( \ new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, one_per_turf = 1, on_floor = 1), \ @@ -220,6 +224,7 @@ GLOBAL_LIST_INIT(gold_recipes, list ( \ sheettype = "silver" materials = list(MAT_SILVER=MINERAL_MATERIAL_AMOUNT) grind_results = list("silver" = 20) + point_value = 20 GLOBAL_LIST_INIT(silver_recipes, list ( \ new/datum/stack_recipe("silver door", /obj/structure/mineral_door/silver, 10, one_per_turf = 1, on_floor = 1), \ @@ -247,6 +252,7 @@ GLOBAL_LIST_INIT(silver_recipes, list ( \ materials = list(MAT_BANANIUM=MINERAL_MATERIAL_AMOUNT) novariants = TRUE grind_results = list("banana" = 20) + point_value = 50 GLOBAL_LIST_INIT(bananium_recipes, list ( \ new/datum/stack_recipe("bananium tile", /obj/item/stack/tile/mineral/bananium, 1, 4, 20), \ @@ -272,6 +278,7 @@ GLOBAL_LIST_INIT(bananium_recipes, list ( \ throw_range = 3 sheettype = "titanium" materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT) + point_value = 20 GLOBAL_LIST_INIT(titanium_recipes, list ( \ new/datum/stack_recipe("titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20), \ @@ -300,6 +307,7 @@ GLOBAL_LIST_INIT(titanium_recipes, list ( \ throw_range = 3 sheettype = "plastitanium" materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT, MAT_PLASMA=MINERAL_MATERIAL_AMOUNT) + point_value = 45 GLOBAL_LIST_INIT(plastitanium_recipes, list ( \ new/datum/stack_recipe("plas-titanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20), \ diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index c1dfc38235d..37371d11222 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -98,6 +98,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ resistance_flags = FIRE_PROOF merge_type = /obj/item/stack/sheet/metal grind_results = list("iron" = 20) + point_value = 2 /obj/item/stack/sheet/metal/ratvar_act() new /obj/item/stack/tile/brass(loc, amount) @@ -158,6 +159,7 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \ resistance_flags = FIRE_PROOF merge_type = /obj/item/stack/sheet/plasteel grind_results = list("iron" = 20, "plasma" = 20) + point_value = 23 /obj/item/stack/sheet/plasteel/Initialize(mapload, new_amount, merge = TRUE) recipes = GLOB.plasteel_recipes diff --git a/code/game/objects/items/stacks/sheets/sheets.dm b/code/game/objects/items/stacks/sheets/sheets.dm index 315cc94b661..21b43eba201 100644 --- a/code/game/objects/items/stacks/sheets/sheets.dm +++ b/code/game/objects/items/stacks/sheets/sheets.dm @@ -11,4 +11,5 @@ attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "smashed") novariants = FALSE var/perunit = MINERAL_MATERIAL_AMOUNT - var/sheettype = null //this is used for girders in the creation of walls/false walls \ No newline at end of file + var/sheettype = null //this is used for girders in the creation of walls/false walls + var/point_value = 0 //turn-in value for the gulag stacker - loosely relative to its rarity. \ No newline at end of file diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index a8d94e9ce4a..765f9d92e00 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -1,3 +1,5 @@ +GLOBAL_LIST(labor_sheet_values) + /**********************Prisoners' Console**************************/ /obj/machinery/mineral/labor_claim_console @@ -20,6 +22,18 @@ Radio.listening = FALSE locate_stacking_machine() + if(!GLOB.labor_sheet_values) + var/sheet_list = list() + for(var/sheet_type in subtypesof(/obj/item/stack/sheet)) + var/obj/item/stack/sheet/sheet = sheet_type + if(!initial(sheet.point_value) || (initial(sheet.merge_type) && initial(sheet.merge_type) != sheet_type)) //ignore no-value sheets and x/fifty subtypes + continue + sheet_list += list(list("ore" = initial(sheet.name), "value" = initial(sheet.point_value))) + GLOB.labor_sheet_values = sortList(sheet_list, /proc/cmp_sheet_list) + +/proc/cmp_sheet_list(list/a, list/b) + return a["value"] - b["value"] + /obj/machinery/mineral/labor_claim_console/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/card/id/prisoner)) if(!inserted_id) @@ -52,16 +66,10 @@ if(check_auth()) can_go_home = TRUE - var/list/ores = list() if(stacking_machine) data["unclaimed_points"] = stacking_machine.points - for(var/ore in stacking_machine.ore_values) - var/list/O = list() - O["ore"] = ore - O["value"] = stacking_machine.ore_values[ore] - ores += list(O) - data["ores"] = ores + data["ores"] = GLOB.labor_sheet_values data["can_go_home"] = can_go_home return data @@ -127,15 +135,10 @@ /obj/machinery/mineral/stacking_machine/laborstacker - var/points = 0 //The unclaimed value of ore stacked. Value for each ore loosely relative to its rarity. - var/list/ore_values = list("glass" = 1, "metal" = 2, "reinforced glass" = 4, "gold" = 20, "silver" = 20, "uranium" = 20, "titanium" = 20, "solid plasma" = 20, "plasteel" = 23, "plasma glass" = 23, "diamond" = 25, "bluespace polycrystal" = 30, "plastitanium" = 45, "bananium" = 50) + var/points = 0 //The unclaimed value of ore stacked. /obj/machinery/mineral/stacking_machine/laborstacker/process_sheet(obj/item/stack/sheet/inp) - if(istype(inp)) - var/n = inp.name - var/a = inp.amount - if(n in ore_values) - points += ore_values[n] * a + points += inp.point_value * inp.amount ..() diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm index f0a06429c55..dcc9034e2d5 100644 --- a/code/modules/mining/machine_stacking.dm +++ b/code/modules/mining/machine_stacking.dm @@ -105,8 +105,8 @@ stack_list[inp.type] = s var/obj/item/stack/sheet/storage = stack_list[inp.type] storage.amount += inp.amount //Stack the sheets - qdel(inp) //Let the old sheet garbage collect while(storage.amount > stack_amt) //Get rid of excessive stackage var/obj/item/stack/sheet/out = new inp.type(null, stack_amt) unload_mineral(out) storage.amount -= stack_amt + qdel(inp) //Let the old sheet garbage collect From c5ab96a03de1bdab519985ba0433aba38f52e6cb Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Thu, 21 Jun 2018 14:54:25 -0700 Subject: [PATCH 067/133] Automatic changelog generation for PR #38633 [ci skip] --- html/changelogs/AutoChangeLog-pr-38633.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38633.yml diff --git a/html/changelogs/AutoChangeLog-pr-38633.yml b/html/changelogs/AutoChangeLog-pr-38633.yml new file mode 100644 index 00000000000..df138d26c0d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38633.yml @@ -0,0 +1,4 @@ +author: "ExcessiveUseOfCobblestone" +delete-after: True +changes: + - spellcheck: "Plant disks with potency genes clarify the percent is for potency scaling and not relative to max volume on examine." From c7f46f5c3fe4940608ebff8daa7df83d7342c0ff Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Thu, 21 Jun 2018 16:18:44 -0700 Subject: [PATCH 068/133] Automatic changelog generation for PR #38637 [ci skip] --- html/changelogs/AutoChangeLog-pr-38637.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38637.yml diff --git a/html/changelogs/AutoChangeLog-pr-38637.yml b/html/changelogs/AutoChangeLog-pr-38637.yml new file mode 100644 index 00000000000..b50be06a758 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38637.yml @@ -0,0 +1,4 @@ +author: "Dax Dupont" +delete-after: True +changes: + - admin: "Create antags now checks for people being on station before applying." From 961fbfc99aa96720445255d9962ff3b0a7f8a449 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Thu, 21 Jun 2018 16:38:29 -0700 Subject: [PATCH 069/133] Fixes and adds blast cannons to traitor science uplink items (#38093) rscadd: Blast cannons have been fixed and are now available for purchase by traitorous scientists for a low low price of 14TC. rscadd: Blast cannons take the explosive power of a TTV bomb and ejects a linear projectile that will apply what the bomb would do to a certain tile at that distance to that tile. However, this will not cause breaches, or gib mobs, unless the gods (admins) so will it. experimental: Blast cannons do not respect maxcap. (Unless the admins so will it.) --- .../objects/items/devices/transfer_valve.dm | 17 ++++-- code/game/objects/items/tanks/tanks.dm | 1 - .../projectiles/guns/misc/blastcannon.dm | 52 +++++++++++++++---- code/modules/uplink/uplink_items.dm | 10 ++++ 4 files changed, 66 insertions(+), 14 deletions(-) diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 0ef20dea19d..fca7f9bc6d0 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -160,11 +160,22 @@ if(sensor.on && sensor.visible) add_overlay("proxy_beam") -/obj/item/transfer_valve/proc/merge_gases() - tank_two.air_contents.volume += tank_one.air_contents.volume +/obj/item/transfer_valve/proc/merge_gases(datum/gas_mixture/target, change_volume = TRUE) + var/target_self = FALSE + if(!target || (target == tank_one.air_contents)) + target = tank_two.air_contents + if(target == tank_two.air_contents) + target_self = TRUE + if(change_volume) + if(!target_self) + target.volume += tank_two.volume + target.volume += tank_one.air_contents.volume var/datum/gas_mixture/temp temp = tank_one.air_contents.remove_ratio(1) - tank_two.air_contents.merge(temp) + target.merge(temp) + if(!target_self) + temp = tank_two.air_contents.remove_ratio(1) + target.merge(temp) /obj/item/transfer_valve/proc/split_gases() if (!valve_open || !tank_one || !tank_two) diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index 447a83422b7..74aea29768b 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -226,7 +226,6 @@ air_contents.react() check_status() - /obj/item/tank/proc/check_status() //Handle exploding, leaking, and rupturing of the tank diff --git a/code/modules/projectiles/guns/misc/blastcannon.dm b/code/modules/projectiles/guns/misc/blastcannon.dm index e7b628653fd..df1f9fdfbd0 100644 --- a/code/modules/projectiles/guns/misc/blastcannon.dm +++ b/code/modules/projectiles/guns/misc/blastcannon.dm @@ -11,8 +11,21 @@ clumsy_check = FALSE randomspread = FALSE + var/hugbox = TRUE + var/max_power = INFINITY + var/reaction_volume_mod = 0 + var/reaction_cycles = 3 //How many times gases react() before calculation. Very finnicky value, do not mess with without good reason. + var/prereaction = TRUE + + var/bombcheck = TRUE + var/debug_power = 0 + var/obj/item/transfer_valve/bomb +/obj/item/gun/blastcannon/debug + debug_power = 80 + bombcheck = FALSE + /obj/item/gun/blastcannon/Initialize() . = ..() if(!pin) @@ -56,27 +69,33 @@ return TRUE return ..() +//returns the third value of a bomb blast /obj/item/gun/blastcannon/proc/calculate_bomb() if(!istype(bomb) || !istype(bomb.tank_one) || !istype(bomb.tank_two)) return 0 - var/datum/gas_mixture/temp = new(60) //directional buff. - temp.merge(bomb.tank_one.air_contents.remove_ratio(1)) - temp.merge(bomb.tank_two.air_contents.remove_ratio(2)) - for(var/i in 1 to 6) + var/datum/gas_mixture/temp = new(max(reaction_volume_mod, 0)) + bomb.merge_gases(temp) + if(prereaction) + temp.react(src) + var/prereaction_pressure = temp.return_pressure() + if(prereaction_pressure < TANK_FRAGMENT_PRESSURE) + return 0 + for(var/i in 1 to reaction_cycles) temp.react(src) var/pressure = temp.return_pressure() qdel(temp) if(pressure < TANK_FRAGMENT_PRESSURE) return 0 - return (pressure / TANK_FRAGMENT_SCALE) + return ((pressure - TANK_FRAGMENT_PRESSURE) / TANK_FRAGMENT_SCALE) /obj/item/gun/blastcannon/afterattack(atom/target, mob/user, flag, params) - if((!bomb) || (!target) || (get_dist(get_turf(target), get_turf(user)) <= 2)) + if((!bomb && bombcheck) || (!target) || (get_dist(get_turf(target), get_turf(user)) <= 2)) return ..() - var/power = calculate_bomb() + var/power = bomb? calculate_bomb() : debug_power + power = min(power, max_power) QDEL_NULL(bomb) update_icon() - var/heavy = power * 0.2 + var/heavy = power * 0.25 var/medium = power * 0.5 var/light = power user.visible_message("[user] opens [bomb] on [user.p_their()] [name] and fires a blast wave at [target]!","You open [bomb] on your [name] and fire a blast wave at [target]!") @@ -87,7 +106,8 @@ message_admins(log_str) log_game(log_str) var/obj/item/projectile/blastwave/BW = new(loc, heavy, medium, light) - BW.preparePixelProjectile(target, get_turf(target), user, params, 0) + BW.hugbox = hugbox + BW.preparePixelProjectile(target, get_turf(src), params, 0) BW.fire() /obj/item/projectile/blastwave @@ -99,6 +119,7 @@ var/heavyr = 0 var/mediumr = 0 var/lightr = 0 + var/hugbox = TRUE range = 150 /obj/item/projectile/blastwave/Initialize(mapload, _h, _m, _l) @@ -110,14 +131,25 @@ /obj/item/projectile/blastwave/Range() ..() var/amount_destruction = EXPLODE_NONE + var/wallbreak_chance = 0 if(heavyr) amount_destruction = EXPLODE_DEVASTATE + wallbreak_chance = 99 else if(mediumr) amount_destruction = EXPLODE_HEAVY + wallbreak_chance = 66 else if(lightr) amount_destruction = EXPLODE_LIGHT + wallbreak_chance = 33 if(amount_destruction) - loc.ex_act(amount_destruction) + if(hugbox) + loc.contents_explosion(EXPLODE_HEAVY, loc) + if(istype(loc, /turf/closed/wall)) + var/turf/closed/wall/W = loc + if(prob(wallbreak_chance)) + W.dismantle_wall(TRUE, TRUE) + else + loc.ex_act(amount_destruction) else qdel(src) diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 89197a7f070..619e2c8193a 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -1412,6 +1412,16 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) limited_stock = 2 //you can't use more than two! restricted_roles = list("Shaft Miner") +/datum/uplink_item/role_restricted/blastcannon + name = "Blast Cannon" + desc = "A highly specialized weapon, the Blast Cannon is actually relatively simple. It contains an attachment for a tank transfer valve mounted to an angled pipe specially constructed \ + withstand extreme pressure and temperatures, and has a mechanical trigger for triggering the transfer valve. Essentially, it turns the explosive force of a bomb into a narrow-angle \ + blast wave \"projectile\". Aspiring scientists may find this highly useful, as forcing the pressure shockwave into a narrow angle seems to be able to bypass whatever quirk of physics \ + disallows explosive ranges above a certain distance, allowing for the device to use the theoretical yield of a transfer valve bomb, instead of the factual yield." + item = /obj/item/gun/blastcannon + cost = 14 //High cost because of the potential for extreme damage in the hands of a skilled scientist. + restricted_roles = list("Research Director", "Scientist") + /datum/uplink_item/device_tools/clown_bomb name = "Clown Bomb" desc = "The Clown bomb is a hilarious device capable of massive pranks. It has an adjustable timer, \ From 72b64a2afc1d98ba0f474d58c0f002ba7c7b55fb Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Thu, 21 Jun 2018 16:38:32 -0700 Subject: [PATCH 070/133] Automatic changelog generation for PR #38093 [ci skip] --- html/changelogs/AutoChangeLog-pr-38093.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38093.yml diff --git a/html/changelogs/AutoChangeLog-pr-38093.yml b/html/changelogs/AutoChangeLog-pr-38093.yml new file mode 100644 index 00000000000..c00ea0d0145 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38093.yml @@ -0,0 +1,6 @@ +author: "kevinz000" +delete-after: True +changes: + - rscadd: "Blast cannons have been fixed and are now available for purchase by traitorous scientists for a low low price of 14TC." + - rscadd: "Blast cannons take the explosive power of a TTV bomb and ejects a linear projectile that will apply what the bomb would do to a certain tile at that distance to that tile. However, this will not cause breaches, or gib mobs, unless the gods (admins) so will it. +experimental: Blast cannons do not respect maxcap. (Unless the admins so will it.)" From 24b21b8416151894d0c36024e68787a22de37a7a Mon Sep 17 00:00:00 2001 From: Tlaltecuhtli <33834933+Tlaltecuhtli@users.noreply.github.com> Date: Fri, 22 Jun 2018 01:51:29 +0200 Subject: [PATCH 071/133] [READY] better contraband crates (#38321) feature: NT reports that the local contraband market has expanded, experts say that the Syndicate is involved. --- code/game/objects/items/storage/firstaid.dm | 32 +++++++++++++++++++ code/modules/cargo/packs.dm | 20 +++++++++--- .../reagents/reagent_containers/pill.dm | 26 +++++++++++++-- 3 files changed, 72 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index fe46141614d..c338f24d261 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -231,3 +231,35 @@ new /obj/item/reagent_containers/pill/patch/silver_sulf(src) for(var/i in 1 to 3) new /obj/item/reagent_containers/pill/patch/styptic(src) + +/obj/item/storage/pill_bottle/zoom + name = "suspicious pill bottle" + desc = "The label is pretty old and almost unreadable, you recognize some chemical compounds." + +/obj/item/storage/pill_bottle/zoom/PopulateContents() + for(var/i in 1 to 5) + new /obj/item/reagent_containers/pill/zoom(src) + +/obj/item/storage/pill_bottle/happy + name = "suspicious pill bottle" + desc = "There is a smiley on the top." + +/obj/item/storage/pill_bottle/happy/PopulateContents() + for(var/i in 1 to 5) + new /obj/item/reagent_containers/pill/happy(src) + +/obj/item/storage/pill_bottle/lsd + name = "suspicious pill bottle" + desc = "There is a badly drawn thing with the shape of a mushroom." + +/obj/item/storage/pill_bottle/lsd/PopulateContents() + for(var/i in 1 to 5) + new /obj/item/reagent_containers/pill/lsd(src) + +/obj/item/storage/pill_bottle/aranesp + name = "suspicious pill bottle" + desc = "The label says 'gotta go fast'." + +/obj/item/storage/pill_bottle/aranesp/PopulateContents() + for(var/i in 1 to 5) + new /obj/item/reagent_containers/pill/aranesp(src) diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 6bbcbfbe529..82fef7a850e 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -1725,14 +1725,26 @@ /datum/supply_pack/costumes_toys/randomised/contraband name = "Contraband Crate" - desc = "Psst.. bud... want some contraband? I can get you a poster, some nice cigs, bling, even some ambrosia deus...you know, the good stuff. Just keep it away from the cops, kay?" + desc = "Psst.. bud... want some contraband? I can get you a poster, some nice cigs, dank, even some sponsored items...you know, the good stuff. Just keep it away from the cops, kay?" contraband = TRUE cost = 3000 - num_contained = 5 + num_contained = 7 contains = list(/obj/item/poster/random_contraband, + /obj/item/poster/random_contraband, + /obj/item/reagent_containers/food/snacks/grown/cannabis, + /obj/item/reagent_containers/food/snacks/grown/cannabis/rainbow, + /obj/item/reagent_containers/food/snacks/grown/cannabis/white, + /obj/item/storage/pill_bottle/zoom, + /obj/item/storage/pill_bottle/happy, + /obj/item/storage/pill_bottle/lsd, + /obj/item/storage/pill_bottle/aranesp, + /obj/item/storage/pill_bottle/stimulant, + /obj/item/toy/cards/deck/syndicate, + /obj/item/reagent_containers/food/drinks/bottle/absinthe, + /obj/item/clothing/under/syndicate/tacticool, + /obj/item/storage/fancy/cigarettes/cigpack_syndicate, /obj/item/storage/fancy/cigarettes/cigpack_shadyjims, - /obj/item/storage/fancy/cigarettes/cigpack_midori, - /obj/item/seeds/ambrosia/deus, + /obj/item/clothing/mask/gas/syndicate, /obj/item/clothing/neck/necklace/dope) crate_name = "crate" diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index f5d46a240e3..d2f840cda33 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -151,10 +151,32 @@ icon_state = "pill18" list_reagents = list("insulin" = 50) roundstart = 1 - +///////////////////////////////////////// this pill is used only in a legion mob drop /obj/item/reagent_containers/pill/shadowtoxin name = "black pill" desc = "I wouldn't eat this if I were you." icon_state = "pill9" color = "#454545" - list_reagents = list("shadowmutationtoxin" = 1) \ No newline at end of file + list_reagents = list("shadowmutationtoxin" = 1) +//////////////////////////////////////// drugs +/obj/item/reagent_containers/pill/zoom + name = "zoom pill" + list_reagents = list("synaptizine" = 10, "nicotine" = 10, "methamphetamine" = 1) + + +/obj/item/reagent_containers/pill/happy + name = "happy pill" + list_reagents = list("sugar" = 10, "space_drugs" = 10) + + +/obj/item/reagent_containers/pill/lsd + name = "hallucinogen pill" + list_reagents = list("mushroomhallucinogen" = 15, "mindbreaker" = 15) + + +/obj/item/reagent_containers/pill/aranesp + name = "speedy pill" + list_reagents = list("aranesp" = 10) + + + From 53af80d26a15b7aa8229b95028b65e7c8b0208e7 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Thu, 21 Jun 2018 18:55:48 -0500 Subject: [PATCH 072/133] Bubblegum is scarier again (#38306) Miners are able to kill him roundstart by just walking backwards while shooting. Weaker than an ash drake. Easiest way to change this was to give him his original attacks back which required you to avoid/manage blood. --- .../hostile/megafauna/bubblegum.dm | 312 +++++------------- 1 file changed, 74 insertions(+), 238 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index e5425573b4e..d6746ff1a63 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -1,3 +1,5 @@ +#define MEDAL_PREFIX "Bubblegum" + /* BUBBLEGUM @@ -7,15 +9,15 @@ Bubblegum's footsteps are heralded by shaking booms, proving its tremendous size It acts as a melee creature, chasing down and attacking its target while also using different attacks to augment its power that increase as it takes damage. -It tries to strike at its target through any bloodpools under them; if it fails to do that, it will spray blood and then attempt to warp to a bloodpool near the target. -If it fails to warp to a target, it may summon up to 6 slaughterlings from the blood around it. -If it does not summon all 6 slaughterlings, it will instead charge at its target, dealing massive damage to anything it hits and spraying a stream of blood. -At half health, it will either charge three times or warp, then charge, instead of doing a single charge. +It often charges, dealing massive damage to anything unfortunate enough to be standing where it's aiming. +Whenever it isn't chasing something down, it will sink into nearby blood pools (if possible) and springs out of the closest one to its target. +To make this possible, it sprays streams of blood at random. +From these blood pools Bubblegum may summon slaughterlings - weak, low-damage minions designed to impede the target's progress. -When Bubblegum dies, it leaves behind a H.E.C.K. mining suit as well as a chest that can contain three things: - 1. A bottle that, when activated, drives everyone nearby into a frenzy - 2. A contract that marks for death the chosen target - 3. A spellblade that can slice off limbs at range +When Bubblegum dies, it leaves behind a chest that can contain three things: + 1. A spellblade that can slice off limbs at range + 2. A bottle that, when activated, drives everyone nearby into a frenzy + 3. A contract that marks for death the chosen target Difficulty: Hard @@ -44,8 +46,7 @@ Difficulty: Hard del_on_death = 1 crusher_loot = list(/obj/structure/closet/crate/necropolis/bubblegum/crusher) loot = list(/obj/structure/closet/crate/necropolis/bubblegum) - blood_volume = BLOOD_VOLUME_MAXIMUM //BLEED FOR ME - var/charging = FALSE + var/charging = 0 medal_type = BOSS_MEDAL_BUBBLEGUM score_type = BUBBLEGUM_SCORE deathmessage = "sinks into a pool of blood, fleeing the battle. You've won, for now... " @@ -57,54 +58,33 @@ Difficulty: Hard desc = "You're not quite sure how a signal can be bloody." invisibility = 100 -/mob/living/simple_animal/hostile/megafauna/bubblegum/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE) - . = ..() - if(. > 0 && prob(25)) - var/obj/effect/decal/cleanable/blood/gibs/bubblegum/B = new /obj/effect/decal/cleanable/blood/gibs/bubblegum(loc) - if(prob(40)) - step(B, pick(GLOB.cardinals)) - else - B.setDir(pick(GLOB.cardinals)) - -/obj/effect/decal/cleanable/blood/gibs/bubblegum - name = "thick blood" - desc = "Thick, splattered blood." - random_icon_states = list("gib3", "gib5", "gib6") - bloodiness = 20 - -/obj/effect/decal/cleanable/blood/gibs/bubblegum/can_bloodcrawl_in() - return TRUE - /mob/living/simple_animal/hostile/megafauna/bubblegum/Life() ..() - move_to_delay = CLAMP((health/maxHealth) * 10, 5, 10) + move_to_delay = CLAMP(round((health/maxHealth) * 10), 5, 10) /mob/living/simple_animal/hostile/megafauna/bubblegum/OpenFire() - anger_modifier = CLAMP(((maxHealth - health)/60),0,20) + anger_modifier = CLAMP(((maxHealth - health)/50),0,20) if(charging) return ranged_cooldown = world.time + ranged_cooldown_time - var/warped = FALSE - if(!try_bloodattack()) - INVOKE_ASYNC(src, .proc/blood_spray) - warped = blood_warp() - if(warped && prob(100 - anger_modifier)) - return + blood_warp() - if(prob(90 - anger_modifier) || slaughterlings()) - if(health > maxHealth * 0.5) + if(prob(25)) + INVOKE_ASYNC(src, .proc/blood_spray) + + else if(prob(5+anger_modifier/2)) + slaughterlings() + else + if(health > maxHealth/2 && !client) INVOKE_ASYNC(src, .proc/charge) else - if(prob(70) || warped) - INVOKE_ASYNC(src, .proc/charge, 2) - else - INVOKE_ASYNC(src, .proc/warp_charge) + INVOKE_ASYNC(src, .proc/triple_charge) /mob/living/simple_animal/hostile/megafauna/bubblegum/Initialize() . = ..() - for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_living_list) + for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_list) if(B != src) return INITIALIZE_HINT_QDEL //There can be only one var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new @@ -118,56 +98,53 @@ Difficulty: Hard if(.) SSshuttle.shuttle_purchase_requirements_met |= "bubblegum" -/mob/living/simple_animal/hostile/megafauna/bubblegum/do_attack_animation(atom/A, visual_effect_icon) - if(!charging) - ..() +/mob/living/simple_animal/hostile/megafauna/bubblegum/do_attack_animation(atom/A) + if(charging) + return + ..() /mob/living/simple_animal/hostile/megafauna/bubblegum/AttackingTarget() - if(!charging) - return ..() + if(charging) + return + ..() /mob/living/simple_animal/hostile/megafauna/bubblegum/Goto(target, delay, minimum_distance) - if(!charging) - ..() + if(charging) + return + ..() /mob/living/simple_animal/hostile/megafauna/bubblegum/Move() + if(!stat) + playsound(src.loc, 'sound/effects/meteorimpact.ogg', 200, 1, 2, 1) if(charging) - new /obj/effect/temp_visual/decoy/fading(loc,src) + new/obj/effect/temp_visual/decoy/fading(loc,src) DestroySurroundings() . = ..() - if(!stat && .) - playsound(src, 'sound/effects/meteorimpact.ogg', 200, 1, 2, 1) if(charging) DestroySurroundings() -/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/warp_charge() - blood_warp() +/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/triple_charge() + charge() + sleep(10) + charge() + sleep(10) charge() -/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/charge(bonus_charges) +/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/charge() var/turf/T = get_turf(target) if(!T || T == loc) return - new /obj/effect/temp_visual/dragon_swoop/bubblegum(T) - charging = TRUE + new /obj/effect/temp_visual/dragon_swoop(T) + charging = 1 DestroySurroundings() walk(src, 0) setDir(get_dir(src, T)) var/obj/effect/temp_visual/decoy/D = new /obj/effect/temp_visual/decoy(loc,src) - animate(D, alpha = 0, color = "#FF0000", transform = matrix()*2, time = 3) - sleep(3) - throw_at(T, get_dist(src, T), 1, src, 0, callback = CALLBACK(src, .charge_end, bonus_charges)) - -/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/charge_end(bonus_charges, list/effects_to_destroy) - charging = FALSE - try_bloodattack() - if(target) - if(bonus_charges) - bonus_charges-- - charge(bonus_charges) - else - Goto(target, move_to_delay, minimum_distance) - SetRecoveryTime(MEGAFAUNA_DEFAULT_RECOVERY_TIME) + animate(D, alpha = 0, color = "#FF0000", transform = matrix()*2, time = 5) + sleep(5) + throw_at(T, get_dist(src, T), 1, src, 0) + charging = 0 + Goto(target, move_to_delay, minimum_distance) /mob/living/simple_animal/hostile/megafauna/bubblegum/Collide(atom/A) @@ -191,142 +168,20 @@ Difficulty: Hard var/throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(L, src))) L.throw_at(throwtarget, 3) - charging = FALSE + charging = 0 -/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/get_mobs_on_blood() - var/list/targets = ListTargets() - . = list() - for(var/mob/living/L in targets) - var/list/bloodpool = get_pools(get_turf(L), 0) - if(bloodpool.len && (!faction_check_mob(L) || L.stat == DEAD)) - . += L - -/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/try_bloodattack() - var/list/targets = get_mobs_on_blood() - if(targets.len) - INVOKE_ASYNC(src, .proc/bloodattack, targets, prob(50)) - - return TRUE - return FALSE - -/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/bloodattack(list/targets, handedness) - var/mob/living/target_one = pick_n_take(targets) - var/turf/target_one_turf = get_turf(target_one) - var/mob/living/target_two - if(targets.len) - target_two = pick_n_take(targets) - var/turf/target_two_turf = get_turf(target_two) - if(target_two.stat != CONSCIOUS || prob(10)) - bloodgrab(target_two_turf, handedness) - else - bloodsmack(target_two_turf, handedness) - - if(target_one) - var/list/pools = get_pools(get_turf(target_one), 0) - if(pools.len) - target_one_turf = get_turf(target_one) - if(target_one_turf) - if(target_one.stat != CONSCIOUS || prob(10)) - bloodgrab(target_one_turf, !handedness) - else - bloodsmack(target_one_turf, !handedness) - - if(!target_two && target_one) - var/list/poolstwo = get_pools(get_turf(target_one), 0) - if(poolstwo.len) - target_one_turf = get_turf(target_one) - if(target_one_turf) - if(target_one.stat != CONSCIOUS || prob(10)) - bloodgrab(target_one_turf, handedness) - else - bloodsmack(target_one_turf, handedness) - -/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/bloodsmack(turf/T, handedness) - if(handedness) - new /obj/effect/temp_visual/bubblegum_hands/rightsmack(T) - else - new /obj/effect/temp_visual/bubblegum_hands/leftsmack(T) - sleep(2.5) - for(var/mob/living/L in T) - if(!faction_check_mob(L)) - to_chat(L, "[src] rends you!") - playsound(T, attack_sound, 100, 1, -1) - var/limb_to_hit = L.get_bodypart(pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) - L.apply_damage(25, BRUTE, limb_to_hit, L.run_armor_check(limb_to_hit, "melee", null, null, armour_penetration)) - sleep(3) - -/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/bloodgrab(turf/T, handedness) - if(handedness) - new /obj/effect/temp_visual/bubblegum_hands/rightpaw(T) - new /obj/effect/temp_visual/bubblegum_hands/rightthumb(T) - else - new /obj/effect/temp_visual/bubblegum_hands/leftpaw(T) - new /obj/effect/temp_visual/bubblegum_hands/leftthumb(T) - sleep(6) - for(var/mob/living/L in T) - if(!faction_check_mob(L)) - to_chat(L, "[src] drags you through the blood!") - playsound(T, 'sound/magic/enter_blood.ogg', 100, 1, -1) - var/turf/targetturf = get_step(src, dir) - L.forceMove(targetturf) - playsound(targetturf, 'sound/magic/exit_blood.ogg', 100, 1, -1) - if(L.stat != CONSCIOUS) - addtimer(CALLBACK(src, .proc/devour, L), 2) - sleep(1) - -/obj/effect/temp_visual/dragon_swoop/bubblegum - duration = 10 - -/obj/effect/temp_visual/bubblegum_hands - icon = 'icons/effects/bubblegum.dmi' - duration = 9 - -/obj/effect/temp_visual/bubblegum_hands/rightthumb - icon_state = "rightthumbgrab" - -/obj/effect/temp_visual/bubblegum_hands/leftthumb - icon_state = "leftthumbgrab" - -/obj/effect/temp_visual/bubblegum_hands/rightpaw - icon_state = "rightpawgrab" - layer = BELOW_MOB_LAYER - -/obj/effect/temp_visual/bubblegum_hands/leftpaw - icon_state = "leftpawgrab" - layer = BELOW_MOB_LAYER - -/obj/effect/temp_visual/bubblegum_hands/rightsmack - icon_state = "rightsmack" - -/obj/effect/temp_visual/bubblegum_hands/leftsmack - icon_state = "leftsmack" - /mob/living/simple_animal/hostile/megafauna/bubblegum/proc/blood_warp() - if(Adjacent(target)) - return FALSE - var/list/can_jaunt = get_pools(get_turf(src), 1) - if(!can_jaunt.len) - return FALSE - - var/list/pools = get_pools(get_turf(target), 2) - var/list/pools_to_remove = get_pools(get_turf(target), 1) - pools -= pools_to_remove - if(!pools.len) - return FALSE - - var/obj/effect/temp_visual/decoy/DA = new /obj/effect/temp_visual/decoy(loc,src) - DA.color = "#FF0000" - var/oldtransform = DA.transform - DA.transform = matrix()*2 - animate(DA, alpha = 255, color = initial(DA.color), transform = oldtransform, time = 3) - sleep(3) - qdel(DA) - var/obj/effect/decal/cleanable/blood/found_bloodpool - pools = get_pools(get_turf(target), 2) - pools_to_remove = get_pools(get_turf(target), 1) - pools -= pools_to_remove + var/list/pools = list() + var/can_jaunt = FALSE + for(var/obj/effect/decal/cleanable/blood/nearby in view(src,2)) + can_jaunt = TRUE + break + if(!can_jaunt) + return + for(var/obj/effect/decal/cleanable/blood/nearby in view(get_turf(target),2)) + pools += nearby if(pools.len) shuffle_inplace(pools) found_bloodpool = pick(pools) @@ -336,51 +191,30 @@ Difficulty: Hard forceMove(get_turf(found_bloodpool)) playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1) visible_message("And springs back out!") - return TRUE - return FALSE -/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/get_pools(turf/T, range) - . = list() - for(var/obj/effect/decal/cleanable/nearby in view(T, range)) - if(nearby.can_bloodcrawl_in()) - . += nearby /mob/living/simple_animal/hostile/megafauna/bubblegum/proc/blood_spray() visible_message("[src] sprays a stream of gore!") - var/range = 6 + round(anger_modifier * 0.4) + var/turf/E = get_edge_target_turf(src, src.dir) + var/range = 10 var/turf/previousturf = get_turf(src) - var/turf/J = previousturf - var/targetdir = get_dir(src, target) - if(target.loc == loc) - targetdir = dir - face_atom(target) - new /obj/effect/decal/cleanable/blood/bubblegum(J) - for(var/i in 1 to range) - J = get_step(previousturf, targetdir) - new /obj/effect/temp_visual/dir_setting/bloodsplatter(previousturf, get_dir(previousturf, J)) - playsound(previousturf,'sound/effects/splat.ogg', 100, 1, -1) - if(!J || !previousturf.atmos_adjacent_turfs || !previousturf.atmos_adjacent_turfs[J]) + for(var/turf/J in getline(src,E)) + if(!range) break - new /obj/effect/decal/cleanable/blood/bubblegum(J) + new /obj/effect/temp_visual/dir_setting/bloodsplatter(previousturf, get_dir(previousturf, J)) + if(!previousturf.CanAtmosPass(J)) + break + playsound(J,'sound/effects/splat.ogg', 100, 1, -1) + new /obj/effect/decal/cleanable/blood(J) + range-- previousturf = J sleep(1) -/obj/effect/decal/cleanable/blood/bubblegum - bloodiness = 0 - -/obj/effect/decal/cleanable/blood/bubblegum/can_bloodcrawl_in() - return TRUE - /mob/living/simple_animal/hostile/megafauna/bubblegum/proc/slaughterlings() visible_message("[src] summons a shoal of slaughterlings!") - var/max_amount = 6 - for(var/H in get_pools(get_turf(src), 1)) - if(!max_amount) - break - max_amount-- - var/obj/effect/decal/cleanable/blood/B = H - new /mob/living/simple_animal/hostile/asteroid/hivelordbrood/slaughter(B.loc) - return max_amount + for(var/obj/effect/decal/cleanable/blood/H in range(src, 10)) + if(prob(25)) + new /mob/living/simple_animal/hostile/asteroid/hivelordbrood/slaughter(H.loc) /mob/living/simple_animal/hostile/asteroid/hivelordbrood/slaughter name = "slaughterling" @@ -398,3 +232,5 @@ Difficulty: Hard if(istype(mover, /mob/living/simple_animal/hostile/megafauna/bubblegum)) return 1 return 0 + +#undef MEDAL_PREFIX \ No newline at end of file From de9c111058c4393d60a2e25ef95c3c354e76256b Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Thu, 21 Jun 2018 16:55:51 -0700 Subject: [PATCH 073/133] Automatic changelog generation for PR #38306 [ci skip] --- html/changelogs/AutoChangeLog-pr-38306.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38306.yml diff --git a/html/changelogs/AutoChangeLog-pr-38306.yml b/html/changelogs/AutoChangeLog-pr-38306.yml new file mode 100644 index 00000000000..1fb99a2d630 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38306.yml @@ -0,0 +1,4 @@ +author: "Kor" +delete-after: True +changes: + - rscadd: "Bubblegum has regained his original (deadlier) move set." From 2ed42f44a73ac4e3b9f8a5c54267f93bc97b0999 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Thu, 21 Jun 2018 23:59:09 -0700 Subject: [PATCH 074/133] Fixes HE pipes not respecting layering (#38468) * HE pipes fix * Heat exchange stuff --- .../atmospherics/machinery/atmosmachinery.dm | 2 +- .../machinery/pipes/heat_exchange/he_pipes.dm | 19 +++------- .../machinery/pipes/heat_exchange/junction.dm | 38 +++++-------------- .../machinery/pipes/heat_exchange/manifold.dm | 18 ++++----- .../machinery/pipes/heat_exchange/simple.dm | 10 ++--- 5 files changed, 31 insertions(+), 56 deletions(-) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 0c908dd12f3..7d095869cb1 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -125,7 +125,7 @@ Pipelines + Other Objects -> Pipe network pixel_y = (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_Y layer = initial(layer) + ((piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_LCHANGE) -/obj/machinery/atmospherics/proc/can_be_node(obj/machinery/atmospherics/target) +/obj/machinery/atmospherics/proc/can_be_node(obj/machinery/atmospherics/target, iteration) return connection_check(target, piping_layer) //Find a connecting /obj/machinery/atmospherics in specified direction diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm index ee52d89e5bc..b087859a47c 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm @@ -1,7 +1,6 @@ /obj/machinery/atmospherics/pipe/heat_exchanging icon = 'icons/obj/atmospherics/pipes/heat.dmi' level = 2 - var/initialize_directions_he var/minimum_temperature_difference = 20 var/thermal_conductivity = WINDOW_HEAT_TRANSFER_COEFFICIENT color = "#404040" @@ -9,22 +8,18 @@ var/icon_temperature = T20C //stop small changes in temperature causing icon refresh resistance_flags = LAVA_PROOF | FIRE_PROOF -/obj/machinery/atmospherics/pipe/heat_exchanging/New() - ..() +/obj/machinery/atmospherics/pipe/heat_exchanging/Initialize() + . = ..() add_atom_colour("#404040", FIXED_COLOUR_PRIORITY) -/obj/machinery/atmospherics/pipe/heat_exchanging/can_be_node(obj/machinery/atmospherics/pipe/heat_exchanging/target) - if(!istype(target)) - return 0 - if(target.initialize_directions_he & get_dir(target,src)) - return 1 +/obj/machinery/atmospherics/pipe/heat_exchanging/isConnectable(obj/machinery/atmospherics/pipe/heat_exchanging/target, given_layer, HE_type_check = TRUE) + if(istype(target, /obj/machinery/atmospherics/pipe/heat_exchanging) != HE_type_check) + return FALSE + . = ..() /obj/machinery/atmospherics/pipe/heat_exchanging/hide() return -/obj/machinery/atmospherics/pipe/heat_exchanging/GetInitDirections() - return ..() | initialize_directions_he - /obj/machinery/atmospherics/pipe/heat_exchanging/process_atmos() var/environment_temperature = 0 var/datum/gas_mixture/pipe_air = return_air() @@ -56,8 +51,6 @@ L.bodytemperature = avg_temp pipe_air.temperature = avg_temp - - /obj/machinery/atmospherics/pipe/heat_exchanging/process() if(!parent) return //machines subsystem fires before atmos is initialized so this prevents race condition runtimes diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm index d0bf90c27b1..606693dddaa 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm @@ -9,11 +9,9 @@ thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT dir = SOUTH - initialize_directions = NORTH - initialize_directions_he = SOUTH device_type = BINARY - + construction_type = /obj/item/pipe/directional pipe_state = "junction" @@ -26,34 +24,18 @@ piping_layer = PIPING_LAYER_MAX pixel_x = PIPING_LAYER_P_X pixel_y = PIPING_LAYER_P_Y - + /obj/machinery/atmospherics/pipe/heat_exchanging/junction/SetInitDirections() switch(dir) - if(SOUTH) - initialize_directions = NORTH - initialize_directions_he = SOUTH - if(NORTH) - initialize_directions = SOUTH - initialize_directions_he = NORTH - if(EAST) - initialize_directions = WEST - initialize_directions_he = EAST - if(WEST) - initialize_directions = EAST - initialize_directions_he = WEST + if(NORTH,SOUTH) + initialize_directions = SOUTH|NORTH + if(EAST,WEST) + initialize_directions = WEST|EAST /obj/machinery/atmospherics/pipe/heat_exchanging/junction/getNodeConnects() return list(turn(dir, 180), dir) -/obj/machinery/atmospherics/pipe/heat_exchanging/junction/can_be_node(obj/machinery/atmospherics/target, iteration) - var/init_dir - switch(iteration) - if(1) - init_dir = target.initialize_directions - if(2) - var/obj/machinery/atmospherics/pipe/heat_exchanging/H = target - if(!istype(H)) - return 0 - init_dir = H.initialize_directions_he - if(init_dir & get_dir(target,src)) - return 1 +/obj/machinery/atmospherics/pipe/heat_exchanging/junction/isConnectable(obj/machinery/atmospherics/target, given_layer, he_type_check) + if(dir == get_dir(target, src)) + return ..(target, given_layer, FALSE) //we want a normal pipe instead + return ..(target, given_layer, TRUE) diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm index 9b95840875b..6689905cf7e 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm @@ -6,13 +6,13 @@ desc = "A manifold composed of regular pipes." dir = SOUTH - initialize_directions_he = EAST|NORTH|WEST + initialize_directions = EAST|NORTH|WEST device_type = TRINARY construction_type = /obj/item/pipe/trinary pipe_state = "he_manifold" - + /obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -26,13 +26,13 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/manifold/SetInitDirections() switch(dir) if(NORTH) - initialize_directions_he = EAST|SOUTH|WEST + initialize_directions = EAST|SOUTH|WEST if(SOUTH) - initialize_directions_he = WEST|NORTH|EAST + initialize_directions = WEST|NORTH|EAST if(EAST) - initialize_directions_he = SOUTH|WEST|NORTH + initialize_directions = SOUTH|WEST|NORTH if(WEST) - initialize_directions_he = NORTH|EAST|SOUTH + initialize_directions = NORTH|EAST|SOUTH /obj/machinery/atmospherics/pipe/heat_exchanging/manifold/update_icon() var/invis = invisibility ? "-f" : "" @@ -53,13 +53,13 @@ name = "4-way pipe manifold" desc = "A manifold composed of heat-exchanging pipes." - initialize_directions_he = NORTH|SOUTH|EAST|WEST + initialize_directions = NORTH|SOUTH|EAST|WEST device_type = QUATERNARY construction_type = /obj/item/pipe/quaternary pipe_state = "he_manifold4w" - + /obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -71,7 +71,7 @@ pixel_y = PIPING_LAYER_P_Y /obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/SetInitDirections() - initialize_directions_he = initial(initialize_directions_he) + initialize_directions = initial(initialize_directions) /obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/update_icon() var/invis = invisibility ? "-f" : "" diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm index d00304114da..ad137a227d3 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm @@ -5,13 +5,13 @@ desc = "A one meter section of heat-exchanging pipe." dir = SOUTH - initialize_directions_he = SOUTH|NORTH + initialize_directions = SOUTH|NORTH device_type = BINARY construction_type = /obj/item/pipe/binary/bendable pipe_state = "he" - + /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -24,12 +24,12 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/simple/SetInitDirections() if(dir in GLOB.diagonals) - initialize_directions_he = dir + initialize_directions = dir switch(dir) if(NORTH,SOUTH) - initialize_directions_he = SOUTH|NORTH + initialize_directions = SOUTH|NORTH if(EAST,WEST) - initialize_directions_he = WEST|EAST + initialize_directions = WEST|EAST /obj/machinery/atmospherics/pipe/heat_exchanging/simple/proc/normalize_dir() if(dir==SOUTH) From e460a70dca44f6c52b67cb7b6da2f792236851fc Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 22 Jun 2018 03:04:37 -0400 Subject: [PATCH 075/133] Removes unused defines (#38650) --- code/modules/atmospherics/gasmixtures/reactions.dm | 6 ------ 1 file changed, 6 deletions(-) diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index 59a2f093a86..054dff0557c 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -497,10 +497,4 @@ #undef STIMULUM_SECOND_RISE #undef STIMULUM_ABSOLUTE_DROP #undef REACTION_OPPRESSION_THRESHOLD -#undef PLASMA_BINDING_ENERGY -#undef MAX_CATALYST_EFFICENCY -#undef PLASMA_FUSED_COEFFICENT -#undef CATALYST_COEFFICENT -#undef FUSION_PURITY_THRESHOLD -#undef FUSION_HEAT_DROPOFF #undef NOBLIUM_FORMATION_ENERGY From bc272c89fadfbe0d4ce451eab6ee8ca5b7938224 Mon Sep 17 00:00:00 2001 From: oranges Date: Fri, 22 Jun 2018 19:33:36 +1200 Subject: [PATCH 076/133] Add logging to teleport and the teleporter destination setting (#38645) Helps with some admin issues --- code/datums/helper_datums/teleport.dm | 1 + code/game/machinery/computer/teleporter.dm | 4 ++++ code/game/machinery/teleporter.dm | 1 + 3 files changed, 6 insertions(+) diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 26a0a0f414a..4ef292d1b1c 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -51,6 +51,7 @@ tele_play_specials(teleatom, curturf, effectin, asoundin) var/success = force_teleport ? teleatom.forceMove(destturf) : teleatom.Move(destturf) if (success) + log_game("[teleatom] ([key_name(teleatom)]) has teleported from [AREACOORD(curturf)] to [AREACOORD(destturf)]") tele_play_specials(teleatom, destturf, effectout, asoundout) if(ismegafauna(teleatom)) message_admins("[teleatom] [ADMIN_FLW(teleatom)] has teleported from [ADMIN_VERBOSEJMP(curturf)] to [ADMIN_VERBOSEJMP(destturf)].") diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm index 93b997eee69..9e12a7bcdd2 100644 --- a/code/game/machinery/computer/teleporter.dm +++ b/code/game/machinery/computer/teleporter.dm @@ -171,6 +171,8 @@ var/desc = input("Please select a location to lock in.", "Locking Computer") as null|anything in L target = L[desc] + var/turf/T = get_turf(target) + log_game("[key_name(user)] has set the teleporter target to [target] at [AREACOORD(T)]") else var/list/S = power_station.linked_stations @@ -185,6 +187,8 @@ var/obj/machinery/teleport/station/target_station = L[desc] if(!target_station || !target_station.teleporter_hub) return + var/turf/T = get_turf(target_station) + log_game("[key_name(user)] has set the teleporter target to [target_station] at [AREACOORD(T)]") target = target_station.teleporter_hub target_station.linked_stations |= power_station target_station.stat &= ~NOPOWER diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 3d217e52c5f..2c1f9d01b04 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -69,6 +69,7 @@ if(do_teleport(M, com.target)) use_power(5000) if(!calibrated && prob(30 - ((accurate) * 10))) //oh dear a problem + log_game("[M] ([key_name(M)]) was turned into a fly person") if(ishuman(M))//don't remove people from the round randomly you jerks var/mob/living/carbon/human/human = M if(human.dna && human.dna.species.id == "human") From 27c3fbea357cc63c05522fe87fe95011e024ebb3 Mon Sep 17 00:00:00 2001 From: Denton Date: Fri, 22 Jun 2018 16:01:12 +0200 Subject: [PATCH 077/133] hey made in abyss is pretty cool --- .../mob/living/simple_animal/hostile/megafauna/bubblegum.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index d6746ff1a63..7d03ad4b9e1 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -14,7 +14,7 @@ Whenever it isn't chasing something down, it will sink into nearby blood pools ( To make this possible, it sprays streams of blood at random. From these blood pools Bubblegum may summon slaughterlings - weak, low-damage minions designed to impede the target's progress. -When Bubblegum dies, it leaves behind a chest that can contain three things: +When Bubblegum dies, it leaves behind a H.E.C.K. suit+helmet as well as a chest that can contain three things: 1. A spellblade that can slice off limbs at range 2. A bottle that, when activated, drives everyone nearby into a frenzy 3. A contract that marks for death the chosen target From 8e6f1265699932754d80df33240ec52df98d0e47 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Fri, 22 Jun 2018 07:30:25 -0700 Subject: [PATCH 078/133] Automatic changelog generation for PR #38636 [ci skip] --- html/changelogs/AutoChangeLog-pr-38636.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38636.yml diff --git a/html/changelogs/AutoChangeLog-pr-38636.yml b/html/changelogs/AutoChangeLog-pr-38636.yml new file mode 100644 index 00000000000..ceb3c6a3f73 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38636.yml @@ -0,0 +1,4 @@ +author: "Dax Dupont" +delete-after: True +changes: + - imageadd: "CHANGE PLACES, SHUTTLE CHAIRS HAVE BEEN CHANGED AGAIN." From 82694bcf3bdfc690a83bc88572f3c31a96f66246 Mon Sep 17 00:00:00 2001 From: praisenarsie Date: Fri, 22 Jun 2018 16:31:15 +0100 Subject: [PATCH 079/133] Credits the original author + moves shuttle chairs to goon/icons --- .../objects/structures/beds_chairs/chair.dm | 2 +- goon/icons/obj/chairs.dmi | Bin 0 -> 1038 bytes icons/obj/chairs.dmi | Bin 32421 -> 30456 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 goon/icons/obj/chairs.dmi diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index f2bb6dc498e..57dfcaa78eb 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -195,7 +195,7 @@ /obj/structure/chair/shuttle name = "shuttle seat" desc = "A comfortable, secure seat. It has a more sturdy looking buckling system, for smoother flights." - icon_state = "shuttle_chair" + icon_state = "shuttle_chair" //thanks gannets! /obj/structure/chair/office anchored = FALSE diff --git a/goon/icons/obj/chairs.dmi b/goon/icons/obj/chairs.dmi new file mode 100644 index 0000000000000000000000000000000000000000..462370ac377b656de35efbe6903adaf9aa472742 GIT binary patch literal 1038 zcmV+p1o8WcP)b5T)HnVOhBK0PKa zL@hW{E;Uca#>K0vtB#J2ot>SRmzOU$QN+Z=6B81#vagDZi8)DXD=R8qUtKaXF~X;4 z#sB~S0d!JMQvg8b*k%9#0CIX%Sad{Xb7OL8aCB*JZU6vyoKseCa&`CgQ*iP16C^0t`#5UwoR&e!m0UHkhOG_Pnj!Yob0008jNklJ0}+_XvVTcJP7*(|=XvpqROC5_ z5K|9=jphh=BOxFqY;|A(io^l7J1EPt+L0=}X8}(-*amFGGXeYk++e>44p6&z%>y6+ z01GIARQ?D6OZ@=Qw5Y@3U@i?0s4G&<0=k1yV}Cma(Bmxbk4AWfo&hvo2>{n;1i*im zfK%7b{+V|=QH$PfX_>SIyD^%C(vA)lZpVtFyu$C z9G_zVemfV%yBLtk%O!`|5BcR1^`LqP;?O66@qGb!A0xonA4B!yUjcY=fTa?EQabn2 zDw*YI1VaqCUUjJJH3bACWC6EefVUWs$>1(?xqKA;l{Lu#utS2H!~^Cq`gbW{ zSA!l=L!4A*fQgtE8n9Mb0B}B(EekXqI4fI4QdHYY!kQewR9yuEFsag!x-y-DqL_sd zU`-BC;vtD8ScPfXo$4$>xPu?FI5xH>H&k=VmQW#}rwZ!M5rn=|p@kWus=xsHDTKEg zptb;``(391eZNx_0X2X|liv(P*dHnV7(iMB831J^oU5hZ6TSyX{X|e+JRoQg`z>Mc z;sHT}#BT@#rtocsv7GLc;?Zx7*hM^7Ap}ULJ68;m0Sx-(~YfH{Ayh z_;4xtiyxtBu$uiXcN)P;2RH&M0od%H`4RyyYe$xRp8eVQA0IJPG@=DIvj6}907*qo IM6N<$g1foN!2kdN literal 0 HcmV?d00001 diff --git a/icons/obj/chairs.dmi b/icons/obj/chairs.dmi index b302f4f749f792e0c230b75ef510cdadbd9b5c88..137150bcd44c0fb67b8867531b017f9d1fa1306a 100644 GIT binary patch delta 7600 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 delta 9581 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 From 8ffe48a336ef6eb2bcad84a1a4b571f4ab36e269 Mon Sep 17 00:00:00 2001 From: praisenarsie Date: Fri, 22 Jun 2018 16:40:40 +0100 Subject: [PATCH 080/133] fixes them not showing up --- code/game/objects/structures/beds_chairs/chair.dm | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 57dfcaa78eb..47278179454 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -192,11 +192,6 @@ /obj/structure/chair/comfy/lime color = rgb(255,251,0) -/obj/structure/chair/shuttle - name = "shuttle seat" - desc = "A comfortable, secure seat. It has a more sturdy looking buckling system, for smoother flights." - icon_state = "shuttle_chair" //thanks gannets! - /obj/structure/chair/office anchored = FALSE buildstackamount = 5 @@ -414,3 +409,10 @@ . = ..() if(has_gravity()) playsound(src, 'sound/machines/clockcult/integration_cog_install.ogg', 50, TRUE) + +/obj/structure/chair/shuttle + name = "shuttle seat" + desc = "A comfortable, secure seat. It has a more sturdy looking buckling system, for smoother flights." + icon = 'goon/icons/obj/chairs.dmi' + icon_state = "shuttle_chair" //thanks gannets! + From 1abf7b7a87edd91fd255808549ae9b61206fed87 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 22 Jun 2018 14:20:08 -0400 Subject: [PATCH 081/133] Add note about docker image to the readme (#38651) * Add note about docker image to the readme * Forgot to undo that --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 21a4ee0ba42..0596aae25c5 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,12 @@ hassle if you want to make any changes at all, so it's not recommended.) Option 3: Download a pre-compiled nightly at https://tgstation13.download/nightlies/ (same caveats as option 2) +Option 4: Use our docker image that tracks the master branch (See commits for build status. Again, same caveats as option 2) + +``` +docker run -d -p :1337 -v /path/to/your/config:/tgstation/config -v /path/to/your/data:/tgstation/data tgstation/tgstation +``` + ## INSTALLATION First-time installation should be fairly straightforward. First, you'll need From 6a603b733d5dc0fb8499f9d5ea43102010cfb412 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 22 Jun 2018 19:56:09 -0400 Subject: [PATCH 082/133] Ports more things to Initialize (#38653) --- code/game/objects/effects/bump_teleporter.dm | 4 ++-- code/game/objects/effects/countdown.dm | 4 ++-- code/game/objects/effects/effect_system/effect_system.dm | 6 +++--- .../objects/effects/effect_system/effects_explosion.dm | 8 ++++---- code/game/objects/effects/effect_system/effects_foam.dm | 4 ++-- code/game/objects/effects/effect_system/effects_smoke.dm | 4 ++-- code/game/objects/effects/effect_system/effects_sparks.dm | 4 ++-- code/game/objects/effects/effect_system/effects_water.dm | 8 ++++---- code/game/objects/effects/forcefields.dm | 4 ++-- code/game/objects/effects/manifest.dm | 5 +++-- code/game/objects/effects/mines.dm | 4 ++-- code/game/objects/effects/overlays.dm | 4 ++-- code/game/objects/items/airlock_painter.dm | 4 ++-- code/game/objects/items/candle.dm | 4 ++-- code/modules/admin/fun_balloon.dm | 2 +- 15 files changed, 35 insertions(+), 34 deletions(-) diff --git a/code/game/objects/effects/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm index 42f59cc5358..307a912fe3f 100644 --- a/code/game/objects/effects/bump_teleporter.dm +++ b/code/game/objects/effects/bump_teleporter.dm @@ -11,8 +11,8 @@ var/static/list/AllTeleporters -/obj/effect/bump_teleporter/New() - ..() +/obj/effect/bump_teleporter/Initialize() + . = ..() LAZYADD(AllTeleporters, src) /obj/effect/bump_teleporter/Destroy() diff --git a/code/game/objects/effects/countdown.dm b/code/game/objects/effects/countdown.dm index 69c80c85f67..8cb48d18744 100644 --- a/code/game/objects/effects/countdown.dm +++ b/code/game/objects/effects/countdown.dm @@ -14,9 +14,9 @@ var/displayed_text var/atom/attached_to -/obj/effect/countdown/New(atom/A) +/obj/effect/countdown/Initialize() . = ..() - attach(A) + attach(loc) /obj/effect/countdown/examine(mob/user) . = ..() diff --git a/code/game/objects/effects/effect_system/effect_system.dm b/code/game/objects/effects/effect_system/effect_system.dm index 8c31847f786..eb4c562c369 100644 --- a/code/game/objects/effects/effect_system/effect_system.dm +++ b/code/game/objects/effects/effect_system/effect_system.dm @@ -12,13 +12,13 @@ would spawn and follow the beaker, even if it is carried or thrown. pass_flags = PASSTABLE | PASSGRILLE anchored = TRUE -/obj/effect/particle_effect/New() - ..() +/obj/effect/particle_effect/Initialize() + . = ..() GLOB.cameranet.updateVisibility(src) /obj/effect/particle_effect/Destroy() GLOB.cameranet.updateVisibility(src) - . = ..() + return ..() /datum/effect_system var/number = 3 diff --git a/code/game/objects/effects/effect_system/effects_explosion.dm b/code/game/objects/effects/effect_system/effects_explosion.dm index 33ecd308d1b..d208510e860 100644 --- a/code/game/objects/effects/effect_system/effects_explosion.dm +++ b/code/game/objects/effects/effect_system/effects_explosion.dm @@ -4,8 +4,8 @@ opacity = 1 anchored = TRUE -/obj/effect/particle_effect/expl_particles/New() - ..() +/obj/effect/particle_effect/expl_particles/Initialize() + . = ..() QDEL_IN(src, 15) /datum/effect_system/expl_particles @@ -29,8 +29,8 @@ pixel_x = -32 pixel_y = -32 -/obj/effect/explosion/New() - ..() +/obj/effect/explosion/Initialize() + . = ..() QDEL_IN(src, 10) /datum/effect_system/explosion diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index d9a7d6fb7b8..e7b7472e86e 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -270,8 +270,8 @@ max_integrity = 20 CanAtmosPass = ATMOS_PASS_DENSITY -/obj/structure/foamedmetal/New() - ..() +/obj/structure/foamedmetal/Initialize() + . = ..() air_update_turf(1) diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index ef8b0b07344..75aeaa447c3 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -30,8 +30,8 @@ set_opacity(0) //if we were blocking view, we aren't now because we're fading out stoplag() -/obj/effect/particle_effect/smoke/New() - ..() +/obj/effect/particle_effect/smoke/Initialize() + . = ..() create_reagents(500) START_PROCESSING(SSobj, src) diff --git a/code/game/objects/effects/effect_system/effects_sparks.dm b/code/game/objects/effects/effect_system/effects_sparks.dm index b74175b5ad1..49f82e106dd 100644 --- a/code/game/objects/effects/effect_system/effects_sparks.dm +++ b/code/game/objects/effects/effect_system/effects_sparks.dm @@ -22,8 +22,8 @@ anchored = TRUE light_range = 1 -/obj/effect/particle_effect/sparks/New() - ..() +/obj/effect/particle_effect/sparks/Initialize() + . = ..() flick("sparks", src) // replay the animation playsound(src.loc, "sparks", 100, 1) var/turf/T = loc diff --git a/code/game/objects/effects/effect_system/effects_water.dm b/code/game/objects/effects/effect_system/effects_water.dm index 4c84c976509..469b05176a3 100644 --- a/code/game/objects/effects/effect_system/effects_water.dm +++ b/code/game/objects/effects/effect_system/effects_water.dm @@ -7,8 +7,8 @@ mouse_opacity = MOUSE_OPACITY_TRANSPARENT -/obj/effect/particle_effect/water/New() - ..() +/obj/effect/particle_effect/water/Initialize() + . = ..() QDEL_IN(src, 70) /obj/effect/particle_effect/water/Move(turf/newloc) @@ -45,8 +45,8 @@ steam.start() -- spawns the effect icon_state = "extinguish" density = FALSE -/obj/effect/particle_effect/steam/New() - ..() +/obj/effect/particle_effect/steam/Initialize() + . = ..() QDEL_IN(src, 20) /datum/effect_system/steam_spread diff --git a/code/game/objects/effects/forcefields.dm b/code/game/objects/effects/forcefields.dm index ef074f4cec5..6aab4f386a4 100644 --- a/code/game/objects/effects/forcefields.dm +++ b/code/game/objects/effects/forcefields.dm @@ -8,8 +8,8 @@ CanAtmosPass = ATMOS_PASS_DENSITY var/timeleft = 300 //Set to 0 for permanent forcefields (ugh) -/obj/effect/forcefield/New() - ..() +/obj/effect/forcefield/Initialize() + . = ..() if(timeleft) QDEL_IN(src, timeleft) diff --git a/code/game/objects/effects/manifest.dm b/code/game/objects/effects/manifest.dm index 2082f2b4952..fbf403a7656 100644 --- a/code/game/objects/effects/manifest.dm +++ b/code/game/objects/effects/manifest.dm @@ -3,8 +3,9 @@ icon = 'icons/mob/screen_gen.dmi' icon_state = "x" -/obj/effect/manifest/New() - src.invisibility = INVISIBILITY_ABSTRACT +/obj/effect/manifest/Initialize() + . = ..() + invisibility = INVISIBILITY_ABSTRACT /obj/effect/manifest/proc/manifest() var/dat = "Crew Manifest:
    " diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 4e00d984366..4bca817e735 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -98,8 +98,8 @@ density = FALSE var/duration = 0 -/obj/effect/mine/pickup/New() - ..() +/obj/effect/mine/pickup/Initialize() + . = ..() animate(src, pixel_y = 4, time = 20, loop = -1) /obj/effect/mine/pickup/triggermine(mob/victim) diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index c1abc2c02eb..a0634928ce3 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -13,8 +13,8 @@ icon_state="b_beam" var/atom/BeamSource -/obj/effect/overlay/beam/New() - ..() +/obj/effect/overlay/beam/Initialize() + . = ..() QDEL_IN(src, 10) /obj/effect/overlay/palmtree_r diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm index b4e02a58cc0..afb2b220765 100644 --- a/code/game/objects/items/airlock_painter.dm +++ b/code/game/objects/items/airlock_painter.dm @@ -16,8 +16,8 @@ var/obj/item/toner/ink = null -/obj/item/airlock_painter/New() - ..() +/obj/item/airlock_painter/Initialize() + . = ..() ink = new /obj/item/toner(src) //This proc doesn't just check if the painter can be used, but also uses it. diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm index a0ec648a1ac..b660801f904 100644 --- a/code/game/objects/items/candle.dm +++ b/code/game/objects/items/candle.dm @@ -14,8 +14,8 @@ var/start_lit = FALSE heat = 1000 -/obj/item/candle/New() - ..() +/obj/item/candle/Initialize() + . = ..() if(start_lit) // No visible message light(show_message = FALSE) diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm index 260a4a9061e..c88c6108410 100644 --- a/code/modules/admin/fun_balloon.dm +++ b/code/modules/admin/fun_balloon.dm @@ -6,7 +6,7 @@ anchored = TRUE var/popped = FALSE -/obj/effect/fun_balloon/New() +/obj/effect/fun_balloon/Initialize() . = ..() SSobj.processing |= src From 4e0f1ac2d90ede01e8f80c74b4be6907b372ee50 Mon Sep 17 00:00:00 2001 From: NikNakFlak Date: Fri, 22 Jun 2018 16:57:00 -0700 Subject: [PATCH 083/133] Fixes fireplace sound (rogue crackle) (#38657) --- sound/effects/comfyfire.ogg | Bin 50332 -> 49938 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/sound/effects/comfyfire.ogg b/sound/effects/comfyfire.ogg index 9b796219b3b5df4a495d267c11edf0546edd5992..1bc7fc02d026588fc75eb87380445fb53538fdd3 100644 GIT binary patch delta 48282 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 delta 48422 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 Date: Sat, 23 Jun 2018 00:50:46 +0000 Subject: [PATCH 084/133] Automatic changelog compile, [ci skip] --- html/changelog.html | 71 ++++++++-------------- html/changelogs/.all_changelog.yml | 20 ++++++ html/changelogs/AutoChangeLog-pr-38093.yml | 6 -- html/changelogs/AutoChangeLog-pr-38306.yml | 4 -- html/changelogs/AutoChangeLog-pr-38633.yml | 4 -- html/changelogs/AutoChangeLog-pr-38636.yml | 4 -- html/changelogs/AutoChangeLog-pr-38637.yml | 4 -- html/changelogs/AutoChangeLog-pr-38640.yml | 4 -- 8 files changed, 44 insertions(+), 73 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-38093.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38306.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38633.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38636.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38637.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38640.yml diff --git a/html/changelog.html b/html/changelog.html index def6b889015..411fc3d0975 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,30 @@ -->
    +

    23 June 2018

    +

    Dax Dupont updated:

    +
      +
    • CHANGE PLACES, SHUTTLE CHAIRS HAVE BEEN CHANGED AGAIN.
    • +
    • Create antags now checks for people being on station before applying.
    • +
    +

    ExcessiveUseOfCobblestone updated:

    +
      +
    • Plant disks with potency genes clarify the percent is for potency scaling and not relative to max volume on examine.
    • +
    +

    Kor updated:

    +
      +
    • Bubblegum has regained his original (deadlier) move set.
    • +
    +

    SpaceManiac updated:

    +
      +
    • Fire extinguishers on the emergency shuttle are no longer unclickable once removed from their cabinets.
    • +
    +

    kevinz000 updated:

    +
      +
    • Blast cannons have been fixed and are now available for purchase by traitorous scientists for a low low price of 14TC.
    • +
    • Blast cannons take the explosive power of a TTV bomb and ejects a linear projectile that will apply what the bomb would do to a certain tile at that distance to that tile. However, this will not cause breaches, or gib mobs, unless the gods (admins) so will it. experimental: Blast cannons do not respect maxcap. (Unless the admins so will it.)
    • +
    +

    21 June 2018

    BlueNothing updated:

      @@ -1529,53 +1553,6 @@
    • the beer and soda dispenser now have their own circuitboards, as well as design ids. you can unlock them through techwebs under the biotech node.
    • beer and soda dispensers can no longer be turned into chem dispensers by deconstructing and reconstructing them.
    - -

    21 April 2018

    -

    SailorDave updated:

    -
      -
    • A new manipulation circuit, the Seed Extractor. Extracts seeds from produce, and outputs a list of the extracted seeds.
    • -
    • A new list circuit, the List Filter. Searches through a list for anything matching the desired element and outputs two lists: one containing just the matches, and the other with matches filtered out.
    • -
    • A new list circuit, the Set circuit. Removes duplicate entries from a list.
    • -
    • The Plant Manipulation circuit can now plant seeds, and outputs a list of harvested plants.
    • -
    • Reagent circuits can now irrigate connected hydroponic trays and inject blood samples into Replica pods.
    • -
    • The Examiner circuit can now output worn items and other examined details of carbon and silicon mobs into the description pin, as well as the occupied turf of the scanned object, and can now scan turfs.
    • -
    • The locomotion circuit now allows drones to move at base human speed, but cannot be stacked, and assemblies can now open doors they have access to like bots by bumping into them.
    • -
    • List Advanced Locator circuit now accepts refs as well as strings.
    • -
    • Fixed the Power Transmitter circuit not properly displaying a message when activated.
    • -
    • Medical Analyzer circuit can now properly scan non-human mobs.
    • -
    - -

    20 April 2018

    -

    Astatineguy12 updated:

    -
      -
    • Gygax construction now actually uses up the capacitor
    • -
    -

    Dax Dupont updated:

    -
      -
    • A cat is fine too. You can select cat parts again!
    • -
    • Default lizard tail was never properly defaulted, now it is.
    • -
    • Fixes an exploit where tendrils/other spawners/anchored mobs in general could be buckled to things and thus moved around.
    • -
    -

    Denton updated:

    -
      -
    • Due to space OSHA lobbying, the Syndicate's lavaland base now contains a radsuit and decontamination shower.
    • -
    • Suit storage units' suit/helmet compartments now accept non-spacesuit clothing (radsuits, EOD suits, firesuits and so on).
    • -
    -

    Naksu updated:

    -
      -
    • Oingo-boingo punch-face and meteor shot can no longer move gateways or Reebe servant blocker effects
    • -
    • Mechas piloted by servants of Ratvar now teleport to the servant side of Reebe when entering a rift
    • -
    • Gravity generators can now be thrown in buildmode
    • -
    -

    ShizCalev updated:

    -
      -
    • Fixed a number of conveyor belts leading to the incorrect direction.
    • -
    • Fixed shuttle conveyor belts being out of sync with cargo's conveyors on some maps.
    • -
    -

    SpaceManiac updated:

    -
      -
    • Cycle-linking is no longer permanently disabled for airlocks on shuttles.
    • -
    GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index fe1f2511b2e..0b636f87b0b 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -18603,3 +18603,23 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: anomaly cores no longer tend to dust YPOQ: - bugfix: Watcher beams will freeze you again +2018-06-23: + Dax Dupont: + - imageadd: CHANGE PLACES, SHUTTLE CHAIRS HAVE BEEN CHANGED AGAIN. + - admin: Create antags now checks for people being on station before applying. + ExcessiveUseOfCobblestone: + - spellcheck: Plant disks with potency genes clarify the percent is for potency + scaling and not relative to max volume on examine. + Kor: + - rscadd: Bubblegum has regained his original (deadlier) move set. + SpaceManiac: + - bugfix: Fire extinguishers on the emergency shuttle are no longer unclickable + once removed from their cabinets. + kevinz000: + - rscadd: Blast cannons have been fixed and are now available for purchase by traitorous + scientists for a low low price of 14TC. + - rscadd: 'Blast cannons take the explosive power of a TTV bomb and ejects a linear + projectile that will apply what the bomb would do to a certain tile at that + distance to that tile. However, this will not cause breaches, or gib mobs, unless + the gods (admins) so will it. experimental: Blast cannons do not respect maxcap. + (Unless the admins so will it.)' diff --git a/html/changelogs/AutoChangeLog-pr-38093.yml b/html/changelogs/AutoChangeLog-pr-38093.yml deleted file mode 100644 index c00ea0d0145..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38093.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "kevinz000" -delete-after: True -changes: - - rscadd: "Blast cannons have been fixed and are now available for purchase by traitorous scientists for a low low price of 14TC." - - rscadd: "Blast cannons take the explosive power of a TTV bomb and ejects a linear projectile that will apply what the bomb would do to a certain tile at that distance to that tile. However, this will not cause breaches, or gib mobs, unless the gods (admins) so will it. -experimental: Blast cannons do not respect maxcap. (Unless the admins so will it.)" diff --git a/html/changelogs/AutoChangeLog-pr-38306.yml b/html/changelogs/AutoChangeLog-pr-38306.yml deleted file mode 100644 index 1fb99a2d630..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38306.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Kor" -delete-after: True -changes: - - rscadd: "Bubblegum has regained his original (deadlier) move set." diff --git a/html/changelogs/AutoChangeLog-pr-38633.yml b/html/changelogs/AutoChangeLog-pr-38633.yml deleted file mode 100644 index df138d26c0d..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38633.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ExcessiveUseOfCobblestone" -delete-after: True -changes: - - spellcheck: "Plant disks with potency genes clarify the percent is for potency scaling and not relative to max volume on examine." diff --git a/html/changelogs/AutoChangeLog-pr-38636.yml b/html/changelogs/AutoChangeLog-pr-38636.yml deleted file mode 100644 index ceb3c6a3f73..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38636.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Dax Dupont" -delete-after: True -changes: - - imageadd: "CHANGE PLACES, SHUTTLE CHAIRS HAVE BEEN CHANGED AGAIN." diff --git a/html/changelogs/AutoChangeLog-pr-38637.yml b/html/changelogs/AutoChangeLog-pr-38637.yml deleted file mode 100644 index b50be06a758..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38637.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Dax Dupont" -delete-after: True -changes: - - admin: "Create antags now checks for people being on station before applying." diff --git a/html/changelogs/AutoChangeLog-pr-38640.yml b/html/changelogs/AutoChangeLog-pr-38640.yml deleted file mode 100644 index 11e45a5e98f..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38640.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SpaceManiac" -delete-after: True -changes: - - bugfix: "Fire extinguishers on the emergency shuttle are no longer unclickable once removed from their cabinets." From 657c2f70f1460d9788e571a332bee1d0421b2373 Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Fri, 22 Jun 2018 18:19:22 -0700 Subject: [PATCH 085/133] Fix the MOTD having too many newlines --- code/modules/client/verbs/ooc.dm | 2 +- code/modules/goonchat/browserOutput.dm | 10 ++++++---- code/modules/mob/dead/new_player/login.dm | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index 824a6910bff..9d708f6228d 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -232,7 +232,7 @@ GLOBAL_VAR_INIT(normal_ooc_colour, OOC_COLOR) var/motd = global.config.motd if(motd) - to_chat(src, "
    [motd]
    ") + to_chat(src, "
    [motd]
    ", handle_whitespace=FALSE) else to_chat(src, "The Message of the Day has not been set.") diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm index 0548d026242..55d5a806bd1 100644 --- a/code/modules/goonchat/browserOutput.dm +++ b/code/modules/goonchat/browserOutput.dm @@ -97,7 +97,8 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic for(var/message in messageQueue) - to_chat(owner, message) + // whitespace has already been handled by the original to_chat + to_chat(owner, message, handle_whitespace=FALSE) messageQueue = null sendClientData() @@ -175,7 +176,7 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic //Global chat procs -/proc/to_chat(target, message) +/proc/to_chat(target, message, handle_whitespace=TRUE) if(!target) return @@ -201,8 +202,9 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic //Some macros remain in the string even after parsing and fuck up the eventual output message = replacetext(message, "\improper", "") message = replacetext(message, "\proper", "") - message = replacetext(message, "\n", "
    ") - message = replacetext(message, "\t", "[GLOB.TAB][GLOB.TAB]") + if(handle_whitespace) + message = replacetext(message, "\n", "
    ") + message = replacetext(message, "\t", "[GLOB.TAB][GLOB.TAB]") for(var/I in targets) //Grab us a client if possible diff --git a/code/modules/mob/dead/new_player/login.dm b/code/modules/mob/dead/new_player/login.dm index 8a971805885..c93d9e05aa4 100644 --- a/code/modules/mob/dead/new_player/login.dm +++ b/code/modules/mob/dead/new_player/login.dm @@ -11,7 +11,7 @@ var/motd = global.config.motd if(motd) - to_chat(src, "
    [motd]
    ") + to_chat(src, "
    [motd]
    ", handle_whitespace=FALSE) if(GLOB.admin_notice) to_chat(src, "Admin Notice:\n \t [GLOB.admin_notice]") From 0a43383229bc76f12fae611d970f676f7ccf8124 Mon Sep 17 00:00:00 2001 From: madmanmartian Date: Sat, 23 Jun 2018 16:00:13 +0100 Subject: [PATCH 086/133] motion sensitive cameras no longer sound the alarm if EMPed --- code/game/machinery/camera/motion.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index d9a93a65789..82bd4aac315 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -10,6 +10,8 @@ if(!isMotion()) . = PROCESS_KILL return + if(stat & EMPED) + return if (detectTime > 0) var/elapsed = world.time - detectTime if (elapsed > alarm_delay) From 7b80231d6c0a3fd02eed4b19990e7c352418319a Mon Sep 17 00:00:00 2001 From: AnturK Date: Sat, 23 Jun 2018 16:21:23 +0200 Subject: [PATCH 087/133] Fixes anomaly area selection --- code/controllers/subsystem/events.dm | 19 ---------------- code/modules/events/anomaly.dm | 34 +++++++++++++++++++++++----- 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm index e70fd1cd7d6..ffc934c0611 100644 --- a/code/controllers/subsystem/events.dm +++ b/code/controllers/subsystem/events.dm @@ -93,25 +93,6 @@ SUBSYSTEM_DEF(events) else if(. == EVENT_READY) E.runEvent(TRUE) -/datum/round_event/proc/findEventArea() //Here's a nice proc to use to find an area for your event to land in! - var/list/safe_areas = list( - /area/ai_monitored/turret_protected/ai, - /area/ai_monitored/turret_protected/ai_upload, - /area/engine, - /area/solar, - /area/holodeck, - /area/shuttle - ) - - //These are needed because /area/engine has to be removed from the list, but we still want these areas to get fucked up. - var/list/danger_areas = list( - /area/engine/break_room, - /area/crew_quarters/heads/chief) - - //Need to locate() as it's just a list of paths. - return locate(pick((GLOB.the_station_areas - safe_areas) + danger_areas)) in GLOB.sortedAreas - - //allows a client to trigger an event //aka Badmin Central // > Not in modules/admin diff --git a/code/modules/events/anomaly.dm b/code/modules/events/anomaly.dm index c866dcca0fe..88f6baba650 100644 --- a/code/modules/events/anomaly.dm +++ b/code/modules/events/anomaly.dm @@ -12,17 +12,38 @@ announceWhen = 1 +/datum/round_event/anomaly/proc/findEventArea() + //Places that shouldn't explode + var/static/list/safe_area_types = typecacheof(list( + /area/ai_monitored/turret_protected/ai, + /area/ai_monitored/turret_protected/ai_upload, + /area/engine, + /area/solar, + /area/holodeck, + /area/shuttle) + ) + + //Subtypes from the above that actually should explode. + var/static/list/unsafe_area_subtypes = typecacheof(/area/engine/break_room) + + var/static/list/allowed_areas + if(!allowed_areas) + allowed_areas = list() + for(var/areatype in GLOB.the_station_areas) + if(safe_area_types[areatype] && !unsafe_area_subtypes[areatype]) + continue + else + allowed_areas[areatype] = TRUE + + return safepick(typecache_filter_list(GLOB.sortedAreas,allowed_areas)) + /datum/round_event/anomaly/setup(loop=0) - var/safety_loop = loop + 1 - if(safety_loop > 50) - kill() - end() impact_area = findEventArea() if(!impact_area) - setup(safety_loop) + CRASH("No valid areas for anomaly found.") var/list/turf_test = get_area_turfs(impact_area) if(!turf_test.len) - setup(safety_loop) + CRASH("Anomaly : No valid turfs found for [impact_area] - [impact_area.type]") /datum/round_event/anomaly/announce(fake) priority_announce("Localized energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert") @@ -31,3 +52,4 @@ var/turf/T = safepick(get_area_turfs(impact_area)) if(T) newAnomaly = new /obj/effect/anomaly/flux(T) + From 99cdc677b385d35e47d2604df2608c40ef80cb63 Mon Sep 17 00:00:00 2001 From: AnturK Date: Sat, 23 Jun 2018 18:06:00 +0200 Subject: [PATCH 088/133] Forgot this --- code/modules/events/anomaly.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/events/anomaly.dm b/code/modules/events/anomaly.dm index 88f6baba650..e0c03627850 100644 --- a/code/modules/events/anomaly.dm +++ b/code/modules/events/anomaly.dm @@ -37,7 +37,7 @@ return safepick(typecache_filter_list(GLOB.sortedAreas,allowed_areas)) -/datum/round_event/anomaly/setup(loop=0) +/datum/round_event/anomaly/setup() impact_area = findEventArea() if(!impact_area) CRASH("No valid areas for anomaly found.") From 5a79952716c060a85349e26a1044e3a49c2b2f17 Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Sat, 23 Jun 2018 11:21:16 -0700 Subject: [PATCH 089/133] Allow actually saving Goonchat logs --- .../browserassets/js/browserOutput.js | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/code/modules/goonchat/browserassets/js/browserOutput.js b/code/modules/goonchat/browserassets/js/browserOutput.js index ba8e0b9dcf9..045177c92d7 100644 --- a/code/modules/goonchat/browserassets/js/browserOutput.js +++ b/code/modules/goonchat/browserassets/js/browserOutput.js @@ -892,23 +892,26 @@ $(function() { }); $('#saveLog').click(function(e) { + // Requires IE 10+ to issue download commands. Just opening a popup + // window will cause Ctrl+S to save a blank page, ignoring innerHTML. + if (!window.Blob) { + output('This function is only supported on IE 10+. Upgrade if possible.', 'internal'); + return; + } + $.ajax({ type: 'GET', url: 'browserOutput.css', success: function(styleData) { - var win; + var blob = new Blob(['Chat Log', $messages.html(), '']); - try { - win = window.open('', 'Chat Log', 'toolbar=no, location=no, directories=no, status=no, menubar=yes, scrollbars=yes, resizable=yes, width=780, height=600, top=' + (screen.height/2 - 635/2) + ', left=' + (screen.width/2 - 780/2)); - } catch (e) { - return; - } + var fname = 'SS13 Chat Log'; + var date = new Date(), month = date.getMonth(), day = date.getDay(), hours = date.getHours(), mins = date.getMinutes(), secs = date.getSeconds(); + fname += ' ' + date.getFullYear() + '-' + (month < 10 ? '0' : '') + month + '-' + (day < 10 ? '0' : '') + day; + fname += ' ' + (hours < 10 ? '0' : '') + hours + (mins < 10 ? '0' : '') + mins + (secs < 10 ? '0' : '') + secs; + fname += '.html'; - if (win) { - win.document.head.innerHTML = 'Chat Log'; - win.document.head.innerHTML += ''; - win.document.body.innerHTML = $messages.html(); - } + window.navigator.msSaveBlob(blob, fname); } }); }); From fc0a7e48643d7e6be3b0f5ac3e2ca8466eadca4e Mon Sep 17 00:00:00 2001 From: Time-Green Date: Sat, 23 Jun 2018 20:30:36 +0200 Subject: [PATCH 090/133] Fixes closed soda cans transferring (#38668) --- code/modules/food_and_drinks/drinks/drinks.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index 29be63a2bba..dc903dce85d 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -59,7 +59,7 @@ if(!proximity) return - if(target.is_refillable()) //Something like a glass. Player probably wants to transfer TO it. + if(target.is_refillable() && is_drainable()) //Something like a glass. Player probably wants to transfer TO it. if(!reagents.total_volume) to_chat(user, "[src] is empty.") return From 6dce2ed8d80e5c9b77370cf451bce2c1db02823a Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sat, 23 Jun 2018 11:30:38 -0700 Subject: [PATCH 091/133] Automatic changelog generation for PR #38668 [ci skip] --- html/changelogs/AutoChangeLog-pr-38668.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38668.yml diff --git a/html/changelogs/AutoChangeLog-pr-38668.yml b/html/changelogs/AutoChangeLog-pr-38668.yml new file mode 100644 index 00000000000..4bd894c04ef --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38668.yml @@ -0,0 +1,4 @@ +author: "Time-Green" +delete-after: True +changes: + - bugfix: "Soda is no longer intangible to the laws of physics" From 8ae46cf5bfb8143e3b82f3a77c1f9a0cbadd8ffc Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sat, 23 Jun 2018 12:03:36 -0700 Subject: [PATCH 092/133] Cyborgs now drop radio keys on detonation/destruction (#38617) * Cyborgs now drop radio keys on detonation/destruction * Woops! * Update robot.dm * Use atom rather than turf --- code/modules/mob/living/silicon/robot/robot.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 7af7ffe22d2..db3b9f3bdff 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -162,8 +162,8 @@ //If there's an MMI in the robot, have it ejected when the mob goes away. --NEO /mob/living/silicon/robot/Destroy() + var/atom/T = drop_location()//To hopefully prevent run time errors. if(mmi && mind)//Safety for when a cyborg gets dust()ed. Or there is no MMI inside. - var/turf/T = get_turf(loc)//To hopefully prevent run time errors. if(T) mmi.forceMove(T) if(mmi.brainmob) @@ -182,6 +182,10 @@ connected_ai.connected_robots -= src if(shell) GLOB.available_ai_shells -= src + else + if(T && istype(radio) && istype(radio.keyslot)) + radio.keyslot.forceMove(T) + radio.keyslot = null qdel(wires) qdel(module) qdel(eye_lights) From 96a059a60d6dff16701d835ea337b9276b67a99a Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sat, 23 Jun 2018 12:03:39 -0700 Subject: [PATCH 093/133] Automatic changelog generation for PR #38617 [ci skip] --- html/changelogs/AutoChangeLog-pr-38617.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38617.yml diff --git a/html/changelogs/AutoChangeLog-pr-38617.yml b/html/changelogs/AutoChangeLog-pr-38617.yml new file mode 100644 index 00000000000..5ac830b2c96 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38617.yml @@ -0,0 +1,4 @@ +author: "kevinz000" +delete-after: True +changes: + - rscadd: "Cyborgs now drop keys on deconstruction/detonation" From 1572321137422be32aeff79645f91be6e9a39f8c Mon Sep 17 00:00:00 2001 From: AnturK Date: Sat, 23 Jun 2018 22:22:05 +0200 Subject: [PATCH 094/133] Adds make_associative helper. --- code/__HELPERS/_lists.dm | 5 +++++ code/modules/events/anomaly.dm | 36 ++++++++++++++-------------------- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index cf8a9df1193..54dd2a982cb 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -488,6 +488,11 @@ for(var/key in key_list) . |= key_list[key] +/proc/make_associative(list/flat_list) + . = list() + for(var/thing in flat_list) + .[thing] = TRUE + //Picks from the list, with some safeties, and returns the "default" arg if it fails #define DEFAULTPICK(L, default) ((islist(L) && length(L)) ? pick(L) : default) diff --git a/code/modules/events/anomaly.dm b/code/modules/events/anomaly.dm index e0c03627850..bb1df49ca5c 100644 --- a/code/modules/events/anomaly.dm +++ b/code/modules/events/anomaly.dm @@ -13,27 +13,22 @@ /datum/round_event/anomaly/proc/findEventArea() - //Places that shouldn't explode - var/static/list/safe_area_types = typecacheof(list( - /area/ai_monitored/turret_protected/ai, - /area/ai_monitored/turret_protected/ai_upload, - /area/engine, - /area/solar, - /area/holodeck, - /area/shuttle) - ) - - //Subtypes from the above that actually should explode. - var/static/list/unsafe_area_subtypes = typecacheof(/area/engine/break_room) - var/static/list/allowed_areas if(!allowed_areas) - allowed_areas = list() - for(var/areatype in GLOB.the_station_areas) - if(safe_area_types[areatype] && !unsafe_area_subtypes[areatype]) - continue - else - allowed_areas[areatype] = TRUE + //Places that shouldn't explode + var/list/safe_area_types = typecacheof(list( + /area/ai_monitored/turret_protected/ai, + /area/ai_monitored/turret_protected/ai_upload, + /area/engine, + /area/solar, + /area/holodeck, + /area/shuttle) + ) + + //Subtypes from the above that actually should explode. + var/list/unsafe_area_subtypes = typecacheof(list(/area/engine/break_room)) + + allowed_areas = make_associative(GLOB.the_station_areas) - safe_area_types + unsafe_area_subtypes return safepick(typecache_filter_list(GLOB.sortedAreas,allowed_areas)) @@ -51,5 +46,4 @@ /datum/round_event/anomaly/start() var/turf/T = safepick(get_area_turfs(impact_area)) if(T) - newAnomaly = new /obj/effect/anomaly/flux(T) - + newAnomaly = new /obj/effect/anomaly/flux(T) \ No newline at end of file From ff1607430f520710b5f221982855bda899ff4b28 Mon Sep 17 00:00:00 2001 From: AnturK Date: Sat, 23 Jun 2018 23:30:16 +0200 Subject: [PATCH 095/133] Fixes antag logs (#38658) * Fixes roundstart antag logging. * Fixes roundend antag logging. * Handles blown up minds. * whoops * total antag cleanup --- code/__HELPERS/roundend.dm | 19 +++++++++---------- code/__HELPERS/unsorted.dm | 24 +++++++++++++++++++----- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 52cc6d86acb..e86c57ac24b 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -203,21 +203,20 @@ //Print a list of antagonists to the server log var/list/total_antagonists = list() //Look into all mobs in world, dead or alive - for(var/datum/mind/Mind in minds) - var/temprole = Mind.special_role - if(temprole) //if they are an antagonist of some sort. - if(temprole in total_antagonists) //If the role exists already, add the name to it - total_antagonists[temprole] += ", [Mind.name]([Mind.key])" - else - total_antagonists.Add(temprole) //If the role doesnt exist in the list, create it and add the mob - total_antagonists[temprole] += ": [Mind.name]([Mind.key])" + for(var/datum/antagonist/A in GLOB.antagonists) + if(!A.owner) + continue + if(!(A.name in total_antagonists)) + total_antagonists[A.name] = list() + total_antagonists[A.name] += "[key_name(A.owner)]" CHECK_TICK //Now print them all into the log! log_game("Antagonists at round end were...") - for(var/i in total_antagonists) - log_game("[i]s[total_antagonists[i]].") + for(var/antag_name in total_antagonists) + var/list/L = total_antagonists[antag_name] + log_game("[antag_name]s :[L.Join(", ")].") CHECK_TICK SSdbcore.SetRoundEnd() diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index bb2cb98cd2b..5b9bb8c1849 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -375,6 +375,7 @@ Turf and target are separate in case you want to teleport some distance from a t var/client/C var/key var/ckey + var/fallback_name if(!whom) return "*null*" @@ -394,6 +395,16 @@ Turf and target are separate in case you want to teleport some distance from a t C = GLOB.directory[ckey] if(C) M = C.mob + else if(istype(whom,/datum/mind)) + var/datum/mind/mind = whom + key = mind.key + ckey = ckey(key) + if(mind.current) + M = mind.current + if(M.client) + C = M.client + else + fallback_name = mind.name else return "*invalid*" @@ -419,11 +430,14 @@ Turf and target are separate in case you want to teleport some distance from a t else . += "*no key*" - if(include_name && M) - if(M.real_name) - . += "/([M.real_name])" - else if(M.name) - . += "/([M.name])" + if(include_name) + if(M) + if(M.real_name) + . += "/([M.real_name])" + else if(M.name) + . += "/([M.name])" + else if(fallback_name) + . += "/([fallback_name])" return . From 21f96755b509c453c6f7e8094d2cc93780f6416c Mon Sep 17 00:00:00 2001 From: Jordie <4343468+Jordie0608@users.noreply.github.com> Date: Sun, 24 Jun 2018 15:28:18 +1000 Subject: [PATCH 096/133] blacklisted buggy 1428 --- code/modules/client/client_procs.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 8d5a201041a..ec6ca84db80 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -6,6 +6,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( "1407" = "bug preventing client display overrides from working leads to clients being able to see things/mobs they shouldn't be able to see", "1408" = "bug preventing client display overrides from working leads to clients being able to see things/mobs they shouldn't be able to see", + "1428" = "bug causing right-click menus to show too many verbs that's been fixed in version 1429", )) From e5351d4064172e07f6d0bc18ba883a9de074d7ac Mon Sep 17 00:00:00 2001 From: Tlaltecuhtli <33834933+Tlaltecuhtli@users.noreply.github.com> Date: Sun, 24 Jun 2018 12:01:56 +0200 Subject: [PATCH 097/133] fixes a cult message.fixes a cult message. --- code/modules/antagonists/cult/cult_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 140e3bab37c..54942452b2f 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -521,7 +521,7 @@ sleep(20) var/global/list/curses if(!curses) - curses = list("A fuel technician just slit his own throat and begged for death. The shuttle will be delayed by three minutes.", + curses = list("A fuel technician just slit his own throat and begged for death.", "The shuttle's navigation programming was replaced by a file containing just two words: IT COMES.", "The shuttle's custodian was found washing the windows with their own blood.", "A shuttle engineer began screaming 'DEATH IS NOT THE END' and ripped out wires until an arc flash seared off her flesh.", From a2b47825d01cf8ccf9127470770268898525679f Mon Sep 17 00:00:00 2001 From: Dax Dupont Date: Sun, 24 Jun 2018 13:52:52 +0200 Subject: [PATCH 098/133] We won't reveal our ailments, and what haunts our sleep nightly In this tiny little world, we've locked ourselves in so tightly And the dead stand between us like wreaths and the people we've abandoned The life, we've surrendered to the streams O Rhodesia, I've given you my all And now, I'm nothing I'm nothing, I'm nothing, I'm nothing, I'm nothing One fire fights one fire One nail one nail Rights by rights falter Strengths by strengths do fail One fire fights one fire One nail one nail Rights by rights falter Strengths by strengths do fail All that's left now are dreams of kings we've murdered to dissect For our meddling intellect misshapes the beauteous forms of things So, we bleat a little, twist a little, rotting in the belly of the beast, while you feel You cannot be wrong O Rhodesia, I've given you my all And now, I'm nothing I'm nothing, I'm nothing, I'm nothing, I'm nothing --- code/modules/antagonists/traitor/equipment/Malf_Modules.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm index 4400a3c0dcc..f574412b4c5 100644 --- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm +++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm @@ -555,6 +555,9 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( /datum/action/innate/ai/ranged/overload_machine/proc/detonate_machine(obj/machinery/M) if(M && !QDELETED(M)) + var/turf/T = get_turf(M) + message_admins("[ADMIN_LOOKUPFLW(usr)] overloaded [M.name] at [ADMIN_VERBOSEJMP(T)].") + log_game("[key_name(usr)] overloaded [M.name] at [AREACOORD(T)].") explosion(get_turf(M), 0, 2, 3, 0) if(M) //to check if the explosion killed it before we try to delete it qdel(M) From 3bdb55890b43ad38d36dd278273bf1d4a2397b5a Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sun, 24 Jun 2018 12:04:55 +0000 Subject: [PATCH 099/133] Automatic changelog compile, [ci skip] --- html/changelog.html | 10 ++++++++++ html/changelogs/.all_changelog.yml | 5 +++++ html/changelogs/AutoChangeLog-pr-38617.yml | 4 ---- html/changelogs/AutoChangeLog-pr-38668.yml | 4 ---- 4 files changed, 15 insertions(+), 8 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-38617.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38668.yml diff --git a/html/changelog.html b/html/changelog.html index 411fc3d0975..53c5cee6888 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,16 @@ -->
    +

    24 June 2018

    +

    Time-Green updated:

    +
      +
    • Soda is no longer intangible to the laws of physics
    • +
    +

    kevinz000 updated:

    +
      +
    • Cyborgs now drop keys on deconstruction/detonation
    • +
    +

    23 June 2018

    Dax Dupont updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 0b636f87b0b..c952c622dd8 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -18623,3 +18623,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. distance to that tile. However, this will not cause breaches, or gib mobs, unless the gods (admins) so will it. experimental: Blast cannons do not respect maxcap. (Unless the admins so will it.)' +2018-06-24: + Time-Green: + - bugfix: Soda is no longer intangible to the laws of physics + kevinz000: + - rscadd: Cyborgs now drop keys on deconstruction/detonation diff --git a/html/changelogs/AutoChangeLog-pr-38617.yml b/html/changelogs/AutoChangeLog-pr-38617.yml deleted file mode 100644 index 5ac830b2c96..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38617.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "kevinz000" -delete-after: True -changes: - - rscadd: "Cyborgs now drop keys on deconstruction/detonation" diff --git a/html/changelogs/AutoChangeLog-pr-38668.yml b/html/changelogs/AutoChangeLog-pr-38668.yml deleted file mode 100644 index 4bd894c04ef..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38668.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Time-Green" -delete-after: True -changes: - - bugfix: "Soda is no longer intangible to the laws of physics" From 9e5769be7b6866c5adcb7de2b020df83730f0d00 Mon Sep 17 00:00:00 2001 From: cinder1992 Date: Sun, 24 Jun 2018 15:44:27 +0100 Subject: [PATCH 100/133] Added Officer's Sabre suicide (#38662) * Added Officer's Sabre sucide * Oopsie * Brute for the Brute God! * pick_n_take is a thing * Cleanup * Cleanup 2: Electric Boogaloo * Sabre suicide covers all arms and legs * Suicides now take the same ammount of time for users with more than two arms and two legs --- code/game/objects/items/melee/misc.dm | 45 +++++++++++++++++++++ code/modules/mob/living/carbon/inventory.dm | 3 ++ code/modules/spells/spell_types/godhand.dm | 5 +-- 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 97404f4a6f1..0d01ba1150f 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -88,6 +88,51 @@ if(istype(B)) playsound(B, 'sound/items/sheath.ogg', 25, 1) +/obj/item/melee/sabre/suicide_act(mob/living/user) + user.visible_message("[user] is trying to cut off all [user.p_their()] limbs with [src]! it looks like [user.p_theyre()] trying to commit suicide!") + var/i = 0 + var/originally_nodropped = item_flags & NODROP + item_flags |= NODROP + if(iscarbon(user)) + var/mob/living/carbon/Cuser = user + var/obj/item/bodypart/holding_bodypart = Cuser.get_holding_bodypart_of_item(src) + var/list/limbs_to_dismember + var/list/arms = list() + var/list/legs = list() + var/obj/item/bodypart/bodypart + + for(bodypart in Cuser.bodyparts) + if(bodypart == holding_bodypart) + continue + if(bodypart.body_part & ARMS) + arms += bodypart + else if (bodypart.body_part & LEGS) + legs += bodypart + + limbs_to_dismember = arms + legs + if(holding_bodypart) + limbs_to_dismember += holding_bodypart + + var/speedbase = abs((4 SECONDS) / limbs_to_dismember.len) + for(bodypart in limbs_to_dismember) + i++ + addtimer(CALLBACK(src, .proc/suicide_dismember, user, bodypart), speedbase * i) + addtimer(CALLBACK(src, .proc/manual_suicide, user, originally_nodropped), (5 SECONDS) * i) + return MANUAL_SUICIDE + +/obj/item/melee/sabre/proc/suicide_dismember(mob/living/user, obj/item/bodypart/affecting) + if(!QDELETED(affecting) && affecting.dismemberable && affecting.owner == user && !QDELETED(user)) + playsound(user, hitsound, 25, 1) + affecting.dismember(BRUTE) + user.adjustBruteLoss(20) + +/obj/item/melee/sabre/proc/manual_suicide(mob/living/user, originally_nodropped) + if(!QDELETED(user)) + user.adjustBruteLoss(200) + user.death(FALSE) + if(!originally_nodropped) + item_flags &= ~NODROP + /obj/item/melee/classic_baton name = "police baton" desc = "A wooden truncheon for beating criminal scum." diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index e950effb3b5..bc2d6132e15 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -137,3 +137,6 @@ update_inv_wear_mask() update_inv_head() +/mob/living/carbon/proc/get_holding_bodypart_of_item(obj/item/I) + var/index = get_held_index_of_item(I) + return index && hand_bodyparts[index] diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm index 6bb413b338e..27cfc9208ba 100644 --- a/code/modules/spells/spell_types/godhand.dm +++ b/code/modules/spells/spell_types/godhand.dm @@ -60,10 +60,7 @@ target.visible_message("[target]'s [A] glows brightly as it wards off the spell!") user.visible_message("The feedback blows [user]'s arm off!","The spell bounces from [M]'s skin back into your arm!") user.flash_act() - var/obj/item/bodypart/part - var/index = user.get_held_index_of_item(src) - if(index) - part = user.hand_bodyparts[index] + var/obj/item/bodypart/part = user.get_holding_bodypart_of_item(src) if(part) part.dismember() ..() From e9698b431fbc7ae475ac5156bf68ea08d3087357 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sun, 24 Jun 2018 07:44:29 -0700 Subject: [PATCH 101/133] Automatic changelog generation for PR #38662 [ci skip] --- html/changelogs/AutoChangeLog-pr-38662.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38662.yml diff --git a/html/changelogs/AutoChangeLog-pr-38662.yml b/html/changelogs/AutoChangeLog-pr-38662.yml new file mode 100644 index 00000000000..b2bc5bac5fa --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38662.yml @@ -0,0 +1,4 @@ +author: "cinder1992" +delete-after: True +changes: + - rscadd: "The Captain can now go down with their station in style! Suicide animation added to the Officer's Sabre." From 53c5c0daa57682480b91fa7dd6015fe98ca348e0 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sun, 24 Jun 2018 07:45:18 -0700 Subject: [PATCH 102/133] Automatic changelog generation for PR #38684 [ci skip] --- html/changelogs/AutoChangeLog-pr-38684.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38684.yml diff --git a/html/changelogs/AutoChangeLog-pr-38684.yml b/html/changelogs/AutoChangeLog-pr-38684.yml new file mode 100644 index 00000000000..2536854b353 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38684.yml @@ -0,0 +1,4 @@ +author: "SpaceManiac" +delete-after: True +changes: + - bugfix: "The \"Save Logs\" option in the chat now actually works (IE 10+ only)." From 5ed68f7b0a66149b23aed7605175fd47bbabbb76 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sun, 24 Jun 2018 14:47:20 +0000 Subject: [PATCH 103/133] Automatic changelog compile, [ci skip] --- html/changelog.html | 8 ++++++++ html/changelogs/.all_changelog.yml | 5 +++++ html/changelogs/AutoChangeLog-pr-38662.yml | 4 ---- html/changelogs/AutoChangeLog-pr-38684.yml | 4 ---- 4 files changed, 13 insertions(+), 8 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-38662.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-38684.yml diff --git a/html/changelog.html b/html/changelog.html index 53c5cee6888..fce6fdeff05 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,10 +56,18 @@ -->

      24 June 2018

      +

      SpaceManiac updated:

      +
        +
      • The "Save Logs" option in the chat now actually works (IE 10+ only).
      • +

      Time-Green updated:

      • Soda is no longer intangible to the laws of physics
      +

      cinder1992 updated:

      +
        +
      • The Captain can now go down with their station in style! Suicide animation added to the Officer's Sabre.
      • +

      kevinz000 updated:

      • Cyborgs now drop keys on deconstruction/detonation
      • diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index c952c622dd8..cb78971511e 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -18624,7 +18624,12 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. the gods (admins) so will it. experimental: Blast cannons do not respect maxcap. (Unless the admins so will it.)' 2018-06-24: + SpaceManiac: + - bugfix: The "Save Logs" option in the chat now actually works (IE 10+ only). Time-Green: - bugfix: Soda is no longer intangible to the laws of physics + cinder1992: + - rscadd: The Captain can now go down with their station in style! Suicide animation + added to the Officer's Sabre. kevinz000: - rscadd: Cyborgs now drop keys on deconstruction/detonation diff --git a/html/changelogs/AutoChangeLog-pr-38662.yml b/html/changelogs/AutoChangeLog-pr-38662.yml deleted file mode 100644 index b2bc5bac5fa..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38662.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "cinder1992" -delete-after: True -changes: - - rscadd: "The Captain can now go down with their station in style! Suicide animation added to the Officer's Sabre." diff --git a/html/changelogs/AutoChangeLog-pr-38684.yml b/html/changelogs/AutoChangeLog-pr-38684.yml deleted file mode 100644 index 2536854b353..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38684.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SpaceManiac" -delete-after: True -changes: - - bugfix: "The \"Save Logs\" option in the chat now actually works (IE 10+ only)." From 66295cc639bcbcf2e684066b099e59c38c0106e4 Mon Sep 17 00:00:00 2001 From: James Date: Sun, 24 Jun 2018 16:15:37 +0100 Subject: [PATCH 104/133] Hardsuit helmets protect eyes from pepperspray --- code/modules/reagents/chemistry/reagents/food_reagents.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index ba5703cbfb2..4de87fabc64 100755 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -283,10 +283,10 @@ if(ishuman(victim)) var/mob/living/carbon/human/H = victim if( H.head ) - if ( H.head.flags_cover & MASKCOVERSEYES ) + if ( H.head.flags_cover & HEADCOVERSEYES ) eyes_covered = 1 safe_thing = H.head - if ( H.head.flags_cover & MASKCOVERSMOUTH ) + if ( H.head.flags_cover & HEADCOVERSMOUTH ) mouth_covered = 1 safe_thing = H.head if(H.glasses) From e2073a73475069543f9b0f741964ce206ff087fc Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Sun, 24 Jun 2018 21:42:06 +0300 Subject: [PATCH 105/133] cleanup --- code/game/objects/effects/manifest.dm | 18 ------------------ tgstation.dme | 1 - 2 files changed, 19 deletions(-) delete mode 100644 code/game/objects/effects/manifest.dm diff --git a/code/game/objects/effects/manifest.dm b/code/game/objects/effects/manifest.dm deleted file mode 100644 index fbf403a7656..00000000000 --- a/code/game/objects/effects/manifest.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/effect/manifest - name = "manifest" - icon = 'icons/mob/screen_gen.dmi' - icon_state = "x" - -/obj/effect/manifest/Initialize() - . = ..() - invisibility = INVISIBILITY_ABSTRACT - -/obj/effect/manifest/proc/manifest() - var/dat = "Crew Manifest:
        " - for(var/mob/living/carbon/human/M in GLOB.carbon_list) - dat += text(" [] - []
        ", M.name, M.get_assignment()) - var/obj/item/paper/P = new /obj/item/paper( src.loc ) - P.info = dat - P.name = "paper- 'Crew Manifest'" - //SN src = null - qdel(src) diff --git a/tgstation.dme b/tgstation.dme index 7114c5831a6..cefd5003d81 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -684,7 +684,6 @@ #include "code\game\objects\effects\forcefields.dm" #include "code\game\objects\effects\glowshroom.dm" #include "code\game\objects\effects\landmarks.dm" -#include "code\game\objects\effects\manifest.dm" #include "code\game\objects\effects\mines.dm" #include "code\game\objects\effects\misc.dm" #include "code\game\objects\effects\overlays.dm" From 501fd35cba2a2a278f37e993dcee5a1b544d1554 Mon Sep 17 00:00:00 2001 From: CitrusGender <31262308+CitrusGender@users.noreply.github.com> Date: Sun, 24 Jun 2018 14:55:13 -0400 Subject: [PATCH 106/133] Fixed cyborgs not getting their names at round start (#38675) * fixed cyborgs not getting their names at round start fixed cyborgs and A.Is being able to get around appearance bans * Update job.dm * Update silicon.dm * goodbye unneeded config otpion * Update game_options.txt --- code/__HELPERS/unsorted.dm | 2 +- code/controllers/configuration/entries/game_options.dm | 2 -- code/controllers/subsystem/job.dm | 2 +- code/modules/jobs/job_types/silicon.dm | 3 +-- code/modules/mob/living/silicon/robot/robot.dm | 3 ++- code/modules/mob/transform_procs.dm | 3 +-- config/game_options.txt | 3 --- 7 files changed, 6 insertions(+), 12 deletions(-) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 5b9bb8c1849..d10619f3691 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -195,7 +195,7 @@ Turf and target are separate in case you want to teleport some distance from a t var/safety = 0 while(loop && safety < 5) - if(C && C.prefs.custom_names[role] && !safety) + if(C && C.prefs.custom_names[role] && !safety && (!jobban_isbanned(src, "appearance"))) newname = C.prefs.custom_names[role] else switch(role) diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index 9f38aa762b7..f179d86f188 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -170,8 +170,6 @@ config_entry_value = -1 min_val = -1 -/datum/config_entry/flag/rename_cyborg - /datum/config_entry/flag/ooc_during_round /datum/config_entry/flag/emojis diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 837a7813382..840bd0e6705 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -442,7 +442,7 @@ SUBSYSTEM_DEF(job) to_chat(M, "As this station was initially staffed with a [CONFIG_GET(flag/jobs_have_minimal_access) ? "full crew, only your job's necessities" : "skeleton crew, additional access may"] have been added to your ID card.") if(job && H) - job.after_spawn(H, M, joined_late) + job.after_spawn(H, M, joined_late) // note: this happens before the mob has a key! M will always have a client, H might not. return H diff --git a/code/modules/jobs/job_types/silicon.dm b/code/modules/jobs/job_types/silicon.dm index c53e034ddfb..86246952f31 100644 --- a/code/modules/jobs/job_types/silicon.dm +++ b/code/modules/jobs/job_types/silicon.dm @@ -85,5 +85,4 @@ Cyborg return H.Robotize(FALSE, latejoin) /datum/job/cyborg/after_spawn(mob/living/silicon/robot/R, mob/M) - if(CONFIG_GET(flag/rename_cyborg)) //name can't be set in robot/New without the client - R.rename_self("cyborg", M.client) + R.rename_self("cyborg", M.client) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index db3b9f3bdff..4f23b6252c8 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -232,7 +232,8 @@ if(custom_name) changed_name = custom_name if(changed_name == "" && client) - changed_name = client.prefs.custom_names["cyborg"] + rename_self(src, client) + return //built in camera handled in proc if(!changed_name) changed_name = get_standard_name() diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 55b9ee3c6c9..0b8cb8d155a 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -379,8 +379,7 @@ else if(transfer_after) R.key = key - if (CONFIG_GET(flag/rename_cyborg)) - R.rename_self("cyborg") + R.rename_self("cyborg") if(R.mmi) R.mmi.name = "Man-Machine Interface: [real_name]" diff --git a/config/game_options.txt b/config/game_options.txt index 3eafb02ec5f..2387c0dfef4 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -16,9 +16,6 @@ REVIVAL_BRAIN_LIFE -1 ## RENAMING ### -## Uncomment to allow cyborgs to rename themselves at roundstart. Has no effect on roboticists renaming cyborgs the normal way. -#RENAME_CYBORG - ## OOC DURING ROUND ### ## Comment this out if you want OOC to be automatically disabled during the round, it will be enabled during the lobby and after the round end results. OOC_DURING_ROUND From f77a7b43ca4fabe347e5da251733d9b6f343f966 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sun, 24 Jun 2018 11:55:16 -0700 Subject: [PATCH 107/133] Automatic changelog generation for PR #38675 [ci skip] --- html/changelogs/AutoChangeLog-pr-38675.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38675.yml diff --git a/html/changelogs/AutoChangeLog-pr-38675.yml b/html/changelogs/AutoChangeLog-pr-38675.yml new file mode 100644 index 00000000000..b5d697a9814 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38675.yml @@ -0,0 +1,5 @@ +author: "CitrusGender" +delete-after: True +changes: + - bugfix: "Fixed cyborgs not getting their names at round start" + - bugfix: "Fixed cyborgs and A.I.s being able to bypass appearance bans" From f2b52fa478a9b3982fc7e8a9f23c8ae8d5cadaee Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sun, 24 Jun 2018 20:22:17 +0000 Subject: [PATCH 108/133] Automatic changelog compile, [ci skip] --- html/changelog.html | 5 +++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-38675.yml | 5 ----- 3 files changed, 8 insertions(+), 5 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-38675.yml diff --git a/html/changelog.html b/html/changelog.html index fce6fdeff05..d0b04201527 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,11 @@ -->

        24 June 2018

        +

        CitrusGender updated:

        +
          +
        • Fixed cyborgs not getting their names at round start
        • +
        • Fixed cyborgs and A.I.s being able to bypass appearance bans
        • +

        SpaceManiac updated:

        • The "Save Logs" option in the chat now actually works (IE 10+ only).
        • diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index cb78971511e..5bd3b454158 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -18624,6 +18624,9 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. the gods (admins) so will it. experimental: Blast cannons do not respect maxcap. (Unless the admins so will it.)' 2018-06-24: + CitrusGender: + - bugfix: Fixed cyborgs not getting their names at round start + - bugfix: Fixed cyborgs and A.I.s being able to bypass appearance bans SpaceManiac: - bugfix: The "Save Logs" option in the chat now actually works (IE 10+ only). Time-Green: diff --git a/html/changelogs/AutoChangeLog-pr-38675.yml b/html/changelogs/AutoChangeLog-pr-38675.yml deleted file mode 100644 index b5d697a9814..00000000000 --- a/html/changelogs/AutoChangeLog-pr-38675.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "CitrusGender" -delete-after: True -changes: - - bugfix: "Fixed cyborgs not getting their names at round start" - - bugfix: "Fixed cyborgs and A.I.s being able to bypass appearance bans" From 121cbdb8999b0ed9b648a5e2f7090e940dccadeb Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Sun, 24 Jun 2018 15:06:41 -0700 Subject: [PATCH 109/133] Fix runtimes when energy guns are deleted --- code/modules/projectiles/guns/energy.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 2a352932faf..be25a137347 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -130,6 +130,8 @@ return /obj/item/gun/energy/update_icon(force_update) + if(QDELETED(src)) + return ..() if(!automatic_charge_overlays) return From 9fbb368b2872c0ce6fc881ef94ef1f58f33674bb Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Sun, 24 Jun 2018 16:16:39 -0700 Subject: [PATCH 110/133] Fix being unable to export mechs --- code/modules/shuttle/supply.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index f42f7bfc9cf..773b35544c7 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -124,7 +124,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( continue if(bounty_ship_item_and_contents(AM, dry_run = FALSE)) matched_bounty = TRUE - if(!AM.anchored) + if(!AM.anchored || istype(AM, /obj/mecha)) sold_atoms += export_item_and_contents(AM, contraband, emagged, dry_run = FALSE) if(sold_atoms) From 08f308bc268f6cccf5efa7e31e9b9baf1b9436a9 Mon Sep 17 00:00:00 2001 From: AnturK Date: Mon, 25 Jun 2018 08:47:06 +0200 Subject: [PATCH 111/133] Fixes be assistant --- code/controllers/subsystem/job.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 840bd0e6705..b10ce096f8e 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -367,10 +367,10 @@ SUBSYSTEM_DEF(job) if(PopcapReached()) RejectPlayer(player) else if(player.client.prefs.joblessrole == BEOVERFLOW) - var/allowed_to_be_a_loser = jobban_isbanned(player, SSjob.overflow_role) - if(QDELETED(player)) + var/allowed_to_be_a_loser = !jobban_isbanned(player, SSjob.overflow_role) + if(QDELETED(player) || !allowed_to_be_a_loser) RejectPlayer(player) - if(allowed_to_be_a_loser) + else if(!AssignRole(player, SSjob.overflow_role)) RejectPlayer(player) else if(player.client.prefs.joblessrole == BERANDOMJOB) From ee6d83c15e7b40db46cbe7ce0b8adee9725c8e20 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Jun 2018 07:14:53 -0700 Subject: [PATCH 112/133] Automatic changelog generation for PR #38697 [ci skip] --- html/changelogs/AutoChangeLog-pr-38697.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38697.yml diff --git a/html/changelogs/AutoChangeLog-pr-38697.yml b/html/changelogs/AutoChangeLog-pr-38697.yml new file mode 100644 index 00000000000..764069b6535 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38697.yml @@ -0,0 +1,4 @@ +author: "Dax Dupont" +delete-after: True +changes: + - admin: "Malf AI machine overloads now are logged/admin messaged." From 02d787fd9e4c232ad0a331e6787fd3c6b92372f3 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Jun 2018 07:15:04 -0700 Subject: [PATCH 113/133] Automatic changelog generation for PR #38696 [ci skip] --- html/changelogs/AutoChangeLog-pr-38696.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38696.yml diff --git a/html/changelogs/AutoChangeLog-pr-38696.yml b/html/changelogs/AutoChangeLog-pr-38696.yml new file mode 100644 index 00000000000..d9f613e1f28 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38696.yml @@ -0,0 +1,4 @@ +author: "Tlaltecuhtli" +delete-after: True +changes: + - bugfix: "fixes cult shuttle message repeating" From 098a230cafcde3d4e01b556cedd013d5611d3be1 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Jun 2018 07:16:00 -0700 Subject: [PATCH 114/133] Automatic changelog generation for PR #38681 [ci skip] --- html/changelogs/AutoChangeLog-pr-38681.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38681.yml diff --git a/html/changelogs/AutoChangeLog-pr-38681.yml b/html/changelogs/AutoChangeLog-pr-38681.yml new file mode 100644 index 00000000000..3cdbbd96179 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38681.yml @@ -0,0 +1,4 @@ +author: "MadmanMartian" +delete-after: True +changes: + - bugfix: "Cameras that are EMPed no longer sound an alarm" From 681b4b619c09d0231e8ffd3f230d7dd68230a188 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Jun 2018 07:19:22 -0700 Subject: [PATCH 115/133] Automatic changelog generation for PR #38699 [ci skip] --- html/changelogs/AutoChangeLog-pr-38699.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38699.yml diff --git a/html/changelogs/AutoChangeLog-pr-38699.yml b/html/changelogs/AutoChangeLog-pr-38699.yml new file mode 100644 index 00000000000..fef3befb466 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38699.yml @@ -0,0 +1,4 @@ +author: "Irafas" +delete-after: True +changes: + - bugfix: "Hardsuit helmets now protect the wearer from pepperspray" From 61e301eb9396715961ebeee1719dca3e58ec3b90 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Jun 2018 08:34:14 -0700 Subject: [PATCH 116/133] Automatic changelog generation for PR #38702 [ci skip] --- html/changelogs/AutoChangeLog-pr-38702.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38702.yml diff --git a/html/changelogs/AutoChangeLog-pr-38702.yml b/html/changelogs/AutoChangeLog-pr-38702.yml new file mode 100644 index 00000000000..5036847eefe --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38702.yml @@ -0,0 +1,4 @@ +author: "Naksu" +delete-after: True +changes: + - code_imp: "Removed unused effect object that could be used to spawn a list of humans" From 74366716618f296c42b8d120c7c808e208e0dfc4 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Jun 2018 12:11:57 -0700 Subject: [PATCH 117/133] Automatic changelog generation for PR #38709 [ci skip] --- html/changelogs/AutoChangeLog-pr-38709.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38709.yml diff --git a/html/changelogs/AutoChangeLog-pr-38709.yml b/html/changelogs/AutoChangeLog-pr-38709.yml new file mode 100644 index 00000000000..fba0f2d7d2a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38709.yml @@ -0,0 +1,4 @@ +author: "SpaceManiac" +delete-after: True +changes: + - bugfix: "It is once again possible for Cargo to export mechs." From fad28854d383619f3e69b592877408f077531e41 Mon Sep 17 00:00:00 2001 From: Tlaltecuhtli <33834933+Tlaltecuhtli@users.noreply.github.com> Date: Tue, 26 Jun 2018 03:20:10 +0200 Subject: [PATCH 118/133] fixes tourettes being cancer (#38682) Prevents tourettes from stacking --- code/datums/mutations/body.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index ce622f6f521..0eecab9400b 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -101,7 +101,7 @@ text_gain_indication = "You twitch." /datum/mutation/human/tourettes/on_life(mob/living/carbon/human/owner) - if(prob(10) && owner.stat == CONSCIOUS) + if(prob(10) && owner.stat == CONSCIOUS && !owner.IsStun()) owner.Stun(200) switch(rand(1, 3)) if(1) From e2906616f82245de7220877c8095e98f964c2b73 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Jun 2018 18:20:12 -0700 Subject: [PATCH 119/133] Automatic changelog generation for PR #38682 [ci skip] --- html/changelogs/AutoChangeLog-pr-38682.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38682.yml diff --git a/html/changelogs/AutoChangeLog-pr-38682.yml b/html/changelogs/AutoChangeLog-pr-38682.yml new file mode 100644 index 00000000000..439dcc80f3a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38682.yml @@ -0,0 +1,4 @@ +author: "Tlaltecuhtli" +delete-after: True +changes: + - tweak: "tourettes doesnt stack on itself anymore" From 8fb6bb39e80f75a15e1549b8980fbd8137a3edf0 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Jun 2018 18:23:02 -0700 Subject: [PATCH 120/133] Automatic changelog generation for PR #38644 [ci skip] --- html/changelogs/AutoChangeLog-pr-38644.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38644.yml diff --git a/html/changelogs/AutoChangeLog-pr-38644.yml b/html/changelogs/AutoChangeLog-pr-38644.yml new file mode 100644 index 00000000000..3683ed1b459 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38644.yml @@ -0,0 +1,4 @@ +author: "SpaceManiac" +delete-after: True +changes: + - refactor: "AI static now uses visual contents and should perform better in theory." From c4dbe0a619af5fde63e5be3ade9b909abdf9e1d2 Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Mon, 25 Jun 2018 19:44:34 -0700 Subject: [PATCH 121/133] Add DOM-based linkify to goonchat (no more URLs in IC) (#38693) * Add DOM-based linkify to goonchat (no more URLs in IC) * Add linkify spans to places where OOC messages appear This includes: - OOC - Deadchat - Admin chat - Admin logs - Admin PMs - Prayers * Limit fallback behavior to linkify spans --- code/__HELPERS/mobs.dm | 1 + code/modules/admin/admin.dm | 4 +- code/modules/admin/verbs/adminhelp.dm | 4 +- code/modules/admin/verbs/adminpm.dm | 14 ++-- code/modules/admin/verbs/adminsay.dm | 4 +- code/modules/admin/verbs/pray.dm | 2 +- code/modules/client/verbs/ooc.dm | 9 +-- .../browserassets/js/browserOutput.js | 66 +++++++++++++++++-- 8 files changed, 80 insertions(+), 24 deletions(-) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 97bff98a9ad..24b6233c598 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -429,6 +429,7 @@ Proc for attack log creation, because really why not step(X, pick(NORTH, SOUTH, EAST, WEST)) /proc/deadchat_broadcast(message, mob/follow_target=null, turf/turf_target=null, speaker_key=null, message_type=DEADCHAT_REGULAR) + message = "[message]" for(var/mob/M in GLOB.player_list) var/datum/preferences/prefs if(M.client && M.client.prefs) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 334528a1c25..56662a2157e 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1,11 +1,11 @@ //////////////////////////////// /proc/message_admins(msg) - msg = "ADMIN LOG: [msg]" + msg = "ADMIN LOG: [msg]" to_chat(GLOB.admins, msg) /proc/relay_msg_admins(msg) - msg = "RELAY: [msg]" + msg = "RELAY: [msg]" to_chat(GLOB.admins, msg) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 319a79a59da..d49cb921f66 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -255,7 +255,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) /datum/admin_help/proc/MessageNoRecipient(msg) var/ref_src = "[REF(src)]" //Message to be sent to all admins - var/admin_msg = "Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]: [keywords_lookup(msg)]" + var/admin_msg = "Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]: [keywords_lookup(msg)]" AddInteraction("[LinkedReplyName(ref_src)]: [msg]") @@ -267,7 +267,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) to_chat(X, admin_msg) //show it to the person adminhelping too - to_chat(initiator, "PM to-Admins: [msg]") + to_chat(initiator, "PM to-Admins: [msg]") //Reopen a closed ticket /datum/admin_help/proc/Reopen() diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 179595866ff..1848252d337 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -145,15 +145,15 @@ var/keywordparsedmsg = keywords_lookup(msg) if(irc) - to_chat(src, "PM to-Admins: [rawmsg]") + to_chat(src, "PM to-Admins: [rawmsg]") var/datum/admin_help/AH = admin_ticket_log(src, "Reply PM from-[key_name(src, TRUE, TRUE)] to IRC: [keywordparsedmsg]") ircreplyamount-- send2irc("[AH ? "#[AH.id] " : ""]Reply: [ckey]", rawmsg) else if(recipient.holder) if(holder) //both are admins - to_chat(recipient, "Admin PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]") - to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [keywordparsedmsg]") + to_chat(recipient, "Admin PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]") + to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [keywordparsedmsg]") //omg this is dumb, just fill in both their tickets var/interaction_message = "PM from-[key_name(src, recipient, 1)] to-[key_name(recipient, src, 1)]: [keywordparsedmsg]" @@ -162,10 +162,10 @@ admin_ticket_log(recipient, interaction_message) else //recipient is an admin but sender is not - var/replymsg = "Reply PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]" + var/replymsg = "Reply PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]" admin_ticket_log(src, replymsg) to_chat(recipient, replymsg) - to_chat(src, "PM to-Admins: [msg]") + to_chat(src, "PM to-Admins: [msg]") //play the recieving admin the adminhelp sound (if they have them enabled) if(recipient.prefs.toggles & SOUND_ADMINHELP) @@ -177,9 +177,9 @@ new /datum/admin_help(msg, recipient, TRUE) to_chat(recipient, "-- Administrator private message --") - to_chat(recipient, "Admin PM from-[key_name(src, recipient, 0)]: [msg]") + to_chat(recipient, "Admin PM from-[key_name(src, recipient, 0)]: [msg]") to_chat(recipient, "Click on the administrator's name to reply.") - to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [msg]") + to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [msg]") admin_ticket_log(recipient, "PM From [key_name_admin(src)]: [keywordparsedmsg]") diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 82bbc27abcf..bf392885115 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -12,10 +12,10 @@ log_talk(mob,"[key_name(src)] : [msg]",LOGASAY) msg = keywords_lookup(msg) if(check_rights(R_ADMIN,0)) - msg = "ADMIN: [key_name(usr, 1)] [ADMIN_FLW(mob)]: [msg]" + msg = "ADMIN: [key_name(usr, 1)] [ADMIN_FLW(mob)]: [msg]" to_chat(GLOB.admins, msg) else - msg = "ADMIN: [key_name(usr, 1)] [ADMIN_FLW(mob)]: [msg]" + msg = "ADMIN: [key_name(usr, 1)] [ADMIN_FLW(mob)]: [msg]" to_chat(GLOB.admins, msg) SSblackbox.record_feedback("tally", "admin_verb", 1, "Asay") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index aaed0f22942..e690d0a0ad3 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -39,7 +39,7 @@ font_color = "blue" prayer_type = "SPIRITUAL PRAYER" - msg = "[icon2html(cross, GLOB.admins)][prayer_type][deity ? " (to [deity])" : ""]: [ADMIN_FULLMONTY(src)] [ADMIN_SC(src)]: [msg]" + msg = "[icon2html(cross, GLOB.admins)][prayer_type][deity ? " (to [deity])" : ""]: [ADMIN_FULLMONTY(src)] [ADMIN_SC(src)]: [msg]" for(var/client/C in GLOB.admins) if(C.prefs.chat_toggles & CHAT_PRAYER) diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index 9d708f6228d..2f4922fddf0 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -58,18 +58,19 @@ if(prefs.unlock_content) if(prefs.toggles & MEMBER_PUBLIC) keyname = "[icon2html('icons/member_content.dmi', world, "blag")][keyname]" + //The linkify span classes and linkify=TRUE below make ooc text get clickable chat href links if you pass in something resembling a url for(var/client/C in GLOB.clients) if(C.prefs.chat_toggles & CHAT_OOC) if(holder) if(!holder.fakekey || C.holder) if(check_rights_for(src, R_ADMIN)) - to_chat(C, "[CONFIG_GET(flag/allow_admin_ooccolor) && prefs.ooccolor ? "" :"" ]OOC: [keyname][holder.fakekey ? "/([holder.fakekey])" : ""]: [msg]") + to_chat(C, "[CONFIG_GET(flag/allow_admin_ooccolor) && prefs.ooccolor ? "" :"" ]OOC: [keyname][holder.fakekey ? "/([holder.fakekey])" : ""]: [msg]") else - to_chat(C, "OOC: [keyname][holder.fakekey ? "/([holder.fakekey])" : ""]: [msg]") + to_chat(C, "OOC: [keyname][holder.fakekey ? "/([holder.fakekey])" : ""]: [msg]") else - to_chat(C, "OOC: [holder.fakekey ? holder.fakekey : key]: [msg]") + to_chat(C, "OOC: [holder.fakekey ? holder.fakekey : key]: [msg]") else if(!(key in C.prefs.ignoring)) - to_chat(C, "OOC: [keyname]: [msg]") + to_chat(C, "OOC: [keyname]: [msg]") /proc/toggle_ooc(toggle = null) if(toggle != null) //if we're specifically en/disabling ooc diff --git a/code/modules/goonchat/browserassets/js/browserOutput.js b/code/modules/goonchat/browserassets/js/browserOutput.js index 045177c92d7..15265b2a93d 100644 --- a/code/modules/goonchat/browserassets/js/browserOutput.js +++ b/code/modules/goonchat/browserassets/js/browserOutput.js @@ -95,8 +95,53 @@ if (typeof String.prototype.trim !== 'function') { }; } +// Linkify the contents of a node, within its parent. +function linkify(parent, insertBefore, text) { + var start = 0; + var match; + var regex = /(?:(?:https?:\/\/)|(?:www\.))(?:[^ ]*?\.[^ ]*?)+[-A-Za-z0-9+&@#\/%?=~_|$!:,.;()]+/ig; + while ((match = regex.exec(text)) !== null) { + // add the unmatched text + parent.insertBefore(document.createTextNode(text.substring(start, match.index)), insertBefore); + + var href = match[0]; + if (!/^https?:\/\//i.test(match[0])) { + href = "http://" + match[0]; + } + + // add the link + var link = document.createElement("a"); + link.href = href; + link.textContent = match[0]; + parent.insertBefore(link, insertBefore); + + start = regex.lastIndex; + } + if (start !== 0) { + // add the remaining text and remove the original text node + parent.insertBefore(document.createTextNode(text.substring(start)), insertBefore); + parent.removeChild(insertBefore); + } +} + +// Recursively linkify the children of a given node. +function linkify_node(node) { + var children = node.childNodes; + // work backwards to avoid the risk of looping forever on our own output + for (var i = children.length - 1; i >= 0; --i) { + var child = children[i]; + if (child.nodeType == Node.TEXT_NODE) { + // text is to be linkified + linkify(node, child, child.textContent); + } else if (child.nodeName != "A" && child.nodeName != "a") { + // do not linkify existing links + linkify_node(child); + } + } +} + //Shit fucking piece of crap that doesn't work god fuckin damn it -function linkify(text) { +function linkify_fallback(text) { var rex = /((?: 0) { From ed5e06f5d87d8b7225c9e4ce33fd7f37067d5dcb Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Jun 2018 19:44:38 -0700 Subject: [PATCH 122/133] Automatic changelog generation for PR #38693 [ci skip] --- html/changelogs/AutoChangeLog-pr-38693.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38693.yml diff --git a/html/changelogs/AutoChangeLog-pr-38693.yml b/html/changelogs/AutoChangeLog-pr-38693.yml new file mode 100644 index 00000000000..2c1a826ed45 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38693.yml @@ -0,0 +1,4 @@ +author: "SpaceManiac" +delete-after: True +changes: + - bugfix: "URLs are no longer auto-linkified in character names and IC messages." From ca8d9f06a06ab1caed40dd268399e5adfed83924 Mon Sep 17 00:00:00 2001 From: 81Denton <32391752+81Denton@users.noreply.github.com> Date: Tue, 26 Jun 2018 22:25:16 +0200 Subject: [PATCH 123/133] there we go (#38730) --- _maps/map_files/BoxStation/BoxStation.dmm | 207 +++++++----------- .../map_files/Deltastation/DeltaStation2.dmm | 110 +++++----- _maps/map_files/MetaStation/MetaStation.dmm | 164 +++++--------- _maps/map_files/PubbyStation/PubbyStation.dmm | 132 ++++++----- _maps/shuttles/aux_base_default.dmm | 3 +- code/game/machinery/camera/camera.dm | 10 + code/game/machinery/camera/motion.dm | 1 + code/game/machinery/camera/presets.dm | 8 +- code/game/machinery/computer/camera.dm | 129 +++++++++-- 9 files changed, 383 insertions(+), 381 deletions(-) diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index cd235318229..431425eeddf 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -714,7 +714,7 @@ /turf/open/floor/carpet, /area/crew_quarters/heads/hos) "abV" = ( -/obj/machinery/computer/security, +/obj/machinery/computer/security/hos, /turf/open/floor/carpet, /area/crew_quarters/heads/hos) "abW" = ( @@ -1737,10 +1737,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - name = "Prison Monitor"; - network = list("prison"); +/obj/machinery/computer/security/telescreen/prison{ pixel_y = 30 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -1776,10 +1773,7 @@ /turf/open/floor/plasteel, /area/security/prison) "aen" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - name = "Prison Monitor"; - network = list("prison"); +/obj/machinery/computer/security/telescreen/prison{ pixel_y = 30 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -3525,7 +3519,8 @@ "ail" = ( /obj/machinery/camera{ c_tag = "Brig Interrogation"; - dir = 8 + dir = 8; + network = list("interrogation") }, /turf/open/floor/plasteel/dark, /area/security/prison) @@ -4003,10 +3998,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, -/obj/machinery/computer/security{ - name = "Labor Camp Monitoring"; - network = list("labor") - }, +/obj/machinery/computer/security/labor, /turf/open/floor/plasteel, /area/security/processing) "ajv" = ( @@ -4063,6 +4055,9 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, +/obj/machinery/computer/security/telescreen/interrogation{ + pixel_y = 30 + }, /turf/open/floor/plasteel/red/side{ dir = 1 }, @@ -7926,11 +7921,8 @@ pixel_y = 7 }, /obj/item/pen, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; +/obj/machinery/computer/security/telescreen/prison{ dir = 1; - name = "Prison Monitor"; - network = list("prison"); pixel_y = -27 }, /turf/open/floor/wood, @@ -9141,12 +9133,9 @@ /obj/item/wallframe/camera, /obj/item/wallframe/camera, /obj/item/assault_pod/mining, -/obj/machinery/computer/security/telescreen{ - desc = "Used for the Auxillary Mining Base."; +/obj/machinery/computer/security/telescreen/auxbase{ dir = 8; - name = "Auxillary Base Monitor"; - network = list("auxbase"); - pixel_x = 28 + pixel_x = 30 }, /turf/open/floor/plasteel/yellow/side{ dir = 4 @@ -12611,7 +12600,7 @@ /obj/machinery/camera/motion{ c_tag = "Vault"; dir = 1; - network = list("minisat") + network = list("vault") }, /obj/machinery/light, /turf/open/floor/plasteel/vault/corner{ @@ -17727,9 +17716,7 @@ /turf/open/floor/plasteel, /area/bridge) "aUd" = ( -/obj/machinery/computer/security/mining{ - network = list("mine","auxbase") - }, +/obj/machinery/computer/security/mining, /turf/open/floor/plasteel/brown{ dir = 6 }, @@ -20820,7 +20807,8 @@ /obj/structure/table, /obj/item/aiModule/supplied/quarantine, /obj/machinery/camera/motion{ - dir = 4 + dir = 4; + network = list("aiupload") }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) @@ -20838,7 +20826,8 @@ pixel_x = 32 }, /obj/machinery/camera/motion{ - dir = 8 + dir = 8; + network = list("aiupload") }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) @@ -23908,6 +23897,7 @@ "bkb" = ( /obj/machinery/camera{ c_tag = "Medbay Morgue"; + network = list("ss13", "medbay"); dir = 8 }, /obj/machinery/airalarm{ @@ -24434,6 +24424,7 @@ /obj/structure/table/reinforced, /obj/machinery/camera{ c_tag = "Medbay Foyer"; + network = list("ss13", "medbay"); dir = 8 }, /obj/machinery/cell_charger, @@ -25527,10 +25518,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) "bnR" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - name = "Prison Monitor"; - network = list("prison"); +/obj/machinery/computer/security/telescreen/vault{ pixel_y = 30 }, /obj/machinery/disposal/bin, @@ -26827,6 +26815,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay West"; + network = list("ss13", "medbay"); dir = 2 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -27511,6 +27500,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay East"; + network = list("ss13", "medbay"); dir = 8; pixel_y = -22 }, @@ -28839,7 +28829,8 @@ /obj/machinery/camera{ c_tag = "Genetics Research"; dir = 1; - network = list("ss13","rd") + network = list("ss13", "medbay"); + }, /obj/machinery/firealarm{ dir = 1; @@ -28873,6 +28864,7 @@ "bvB" = ( /obj/machinery/camera{ c_tag = "Genetics Access"; + network = list("ss13", "medbay"); dir = 8; pixel_y = -22 }, @@ -29230,7 +29222,8 @@ "bww" = ( /obj/structure/chair, /obj/machinery/camera{ - c_tag = "Surgery Observation" + c_tag = "Surgery Observation"; + network = list("ss13", "medbay") }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -29315,6 +29308,7 @@ /obj/structure/table/glass, /obj/machinery/camera{ c_tag = "Medbay Cryogenics"; + network = list("ss13", "medbay"); dir = 2 }, /obj/item/reagent_containers/glass/beaker/cryoxadone, @@ -29333,6 +29327,7 @@ "bwL" = ( /obj/machinery/camera{ c_tag = "Genetics Cloning"; + network = list("ss13", "medbay"); dir = 4 }, /obj/structure/table, @@ -29585,13 +29580,8 @@ /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/hor) "bxj" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons and the AI's satellite from the safety of his office."; - name = "Research Monitor"; - network = list("rd","minisat"); - pixel_y = 2 - }, /obj/structure/table, +/obj/machinery/computer/security/telescreen/rd, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/hor) "bxk" = ( @@ -30237,8 +30227,7 @@ pixel_x = 27 }, /obj/machinery/computer/security/mining{ - dir = 8; - network = list("mine","auxbase") + dir = 8 }, /turf/open/floor/plasteel/red/side{ dir = 4 @@ -30581,13 +30570,8 @@ /area/security/checkpoint/science) "bzD" = ( /obj/structure/table, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons from the safety of your own office."; - name = "Research Monitor"; - network = list("rd"); - pixel_y = 2 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/computer/security/telescreen/circuitry, /turf/open/floor/plasteel/red/side{ dir = 1 }, @@ -30905,6 +30889,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay Treatment Center"; + network = list("ss13", "medbay"); dir = 8 }, /turf/open/floor/plasteel, @@ -31123,10 +31108,6 @@ /turf/open/floor/engine, /area/science/explab) "bAS" = ( -/obj/machinery/computer/security/mining{ - dir = 4; - network = list("mine","auxbase") - }, /obj/machinery/camera{ c_tag = "Quartermaster's Office"; dir = 4 @@ -31139,6 +31120,9 @@ pixel_x = -32; supply_display = 1 }, +/obj/machinery/computer/security/qm{ + dir = 4 + }, /turf/open/floor/plasteel/brown{ dir = 10 }, @@ -31938,6 +31922,7 @@ /obj/structure/closet/secure_closet/medical3, /obj/machinery/camera{ c_tag = "Medbay Storage"; + network = list("ss13", "medbay"); dir = 2 }, /turf/open/floor/plasteel/white, @@ -32020,6 +32005,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay South"; + network = list("ss13", "medbay"); dir = 4 }, /turf/open/floor/plasteel/white, @@ -32312,6 +32298,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay Recovery Room"; + network = list("ss13", "medbay"); dir = 8 }, /obj/machinery/iv_drip, @@ -32553,6 +32540,7 @@ }, /obj/machinery/camera{ c_tag = "Chief Medical Office"; + network = list("ss13", "medbay"); dir = 8; pixel_y = -22 }, @@ -32765,13 +32753,11 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "bEK" = ( -/obj/machinery/computer/security/mining{ - network = list("mine","auxbase") - }, /obj/machinery/camera{ c_tag = "Mining Dock"; dir = 4 }, +/obj/machinery/computer/security/mining, /turf/open/floor/plasteel, /area/quartermaster/miningdock) "bEL" = ( @@ -33135,6 +33121,10 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, +/obj/machinery/computer/security/telescreen/cmo{ + dir = 1; + pixel_y = -24 + }, /turf/open/floor/plasteel/barber, /area/crew_quarters/heads/cmo) "bFF" = ( @@ -33847,17 +33837,13 @@ /turf/open/floor/plasteel, /area/science/mixing) "bHv" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the test chamber."; - dir = 8; - layer = 4; - name = "Test Chamber Telescreen"; - network = list("toxins"); - pixel_x = 30 - }, /obj/effect/turf_decal/stripes/line{ dir = 5 }, +/obj/machinery/computer/security/telescreen/toxins{ + dir = 4; + pixel_x = 30 + }, /turf/open/floor/plasteel, /area/science/mixing) "bHw" = ( @@ -34100,6 +34086,7 @@ }, /obj/machinery/camera{ c_tag = "Surgery Operating"; + network = list("ss13", "medbay"); dir = 1; pixel_x = 22 }, @@ -34421,7 +34408,8 @@ pixel_y = 29 }, /obj/machinery/camera{ - c_tag = "Virology Break Room" + c_tag = "Virology Break Room"; + network = list("ss13", "medbay") }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 @@ -34570,7 +34558,6 @@ /turf/open/floor/plating/airless, /area/science/test_area) "bJa" = ( -/obj/item/flashlight/lamp, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -35613,21 +35600,13 @@ }, /area/science/test_area) "bLr" = ( -/obj/machinery/camera{ - active_power_usage = 0; - c_tag = "Bomb Test Site"; - desc = "A specially-reinforced camera with a long lasting battery, used to monitor the bomb testing site."; - dir = 8; - invuln = 1; - light = null; - name = "Hardened Bomb-Test Camera"; - network = list("toxins"); - use_power = 0 - }, /obj/item/target/alien/anchored, /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/camera/preset/toxins{ + dir = 8 + }, /turf/open/floor/plating{ luminosity = 2; initial_gas_mix = "o2=0.01;n2=0.01" @@ -36475,7 +36454,6 @@ /turf/open/floor/plating/airless, /area/science/test_area) "bNF" = ( -/obj/item/flashlight/lamp, /obj/effect/turf_decal/stripes/line{ dir = 2 }, @@ -36728,6 +36706,7 @@ /obj/structure/closet/emcloset, /obj/machinery/camera{ c_tag = "Virology Airlock"; + network = list("ss13", "medbay"); dir = 2 }, /obj/effect/turf_decal/stripes/line{ @@ -37872,14 +37851,10 @@ /area/science/misc_lab) "bQY" = ( /obj/structure/table/reinforced, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons from the safety of his office."; - dir = 2; - name = "Research Monitor"; - network = list("rd"); - pixel_y = 28 - }, /obj/item/integrated_circuit_printer, +/obj/machinery/computer/security/telescreen/circuitry{ + pixel_y = 30 + }, /turf/open/floor/plasteel/white, /area/science/circuit) "bQZ" = ( @@ -37984,13 +37959,9 @@ /obj/machinery/computer/secure_data{ dir = 8 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the Engine."; +/obj/machinery/computer/security/telescreen/engine{ dir = 8; - layer = 4; - name = "Engine Monitor"; - network = list("engine"); - pixel_x = 30 + pixel_x = 24 }, /turf/open/floor/plasteel/red/side{ dir = 4 @@ -38410,7 +38381,8 @@ /obj/structure/closet/emcloset, /obj/machinery/camera{ c_tag = "Telecomms Monitoring"; - dir = 8 + dir = 8; + network = list("tcomms") }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, @@ -38679,7 +38651,8 @@ icon_state = "0-8" }, /obj/machinery/camera{ - c_tag = "Virology Module" + c_tag = "Virology Module"; + network = list("ss13", "medbay") }, /turf/open/floor/plasteel/white, /area/medical/virology) @@ -41983,7 +41956,8 @@ "cbl" = ( /obj/machinery/camera{ c_tag = "Telecomms Server Room"; - dir = 4 + dir = 4; + network = list("tcomms") }, /turf/open/floor/plasteel/dark/telecomms/mainframe, /area/tcommsat/server) @@ -42325,14 +42299,11 @@ /area/science/circuit) "cbZ" = ( /obj/structure/table/reinforced, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons from the safety of his office."; - dir = 1; - name = "Research Monitor"; - network = list("rd"); - pixel_y = -28 - }, /obj/item/integrated_circuit_printer, +/obj/machinery/computer/security/telescreen/circuitry{ + dir = 1; + pixel_y = -30 + }, /turf/open/floor/plasteel/white, /area/science/circuit) "cca" = ( @@ -45323,11 +45294,8 @@ /obj/machinery/computer/station_alert{ dir = 4 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons from the safety of your own office."; +/obj/machinery/computer/security/telescreen/ce{ dir = 4; - name = "Research Monitor"; - network = list("rd"); pixel_x = -24 }, /turf/open/floor/plasteel/vault, @@ -48079,16 +48047,13 @@ /turf/open/space, /area/space/nearstation) "csq" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the turbine vent."; - dir = 1; - name = "turbine vent monitor"; - network = list("turbine"); - pixel_y = -29 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 }, +/obj/machinery/computer/security/telescreen/turbine{ + dir = 1; + pixel_y = -30 + }, /turf/open/floor/plasteel/floorgrime, /area/maintenance/disposal/incinerator) "csr" = ( @@ -49444,7 +49409,7 @@ /obj/machinery/camera/motion{ c_tag = "MiniSat Core Hallway"; dir = 4; - network = list("minisat") + network = list("aicore") }, /obj/machinery/firealarm{ dir = 8; @@ -49822,7 +49787,7 @@ /obj/machinery/camera/motion{ c_tag = "MiniSat AI Chamber North"; dir = 1; - network = list("minisat") + network = list("aicore") }, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) @@ -50718,7 +50683,7 @@ /obj/machinery/camera/motion{ c_tag = "MiniSat AI Chamber South"; dir = 2; - network = list("minisat") + network = list("aicore") }, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) @@ -52671,17 +52636,13 @@ /turf/open/floor/plating, /area/engine/engineering) "cMC" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the Engine."; - dir = 8; - layer = 4; - name = "Engine Monitor"; - network = list("engine"); - pixel_x = 30 - }, /obj/effect/turf_decal/stripes/line{ dir = 5 }, +/obj/machinery/computer/security/telescreen/engine{ + dir = 8; + pixel_x = 30 + }, /turf/open/floor/plasteel/vault{ dir = 5 }, diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index f04799a17be..7433e00c90d 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -19220,9 +19220,6 @@ /turf/open/floor/plasteel/neutral, /area/quartermaster/qm) "aUs" = ( -/obj/machinery/computer/security/mining{ - dir = 8 - }, /obj/machinery/status_display{ pixel_x = 32 }, @@ -19231,6 +19228,9 @@ dir = 8; name = "cargo camera" }, +/obj/machinery/computer/security/qm{ + dir = 8 + }, /turf/open/floor/plasteel/brown{ dir = 4 }, @@ -28840,14 +28840,11 @@ }, /area/security/execution/transfer) "bpg" = ( -/obj/machinery/computer/security{ - name = "Labor Camp Monitoring"; - network = list("labor") - }, /obj/item/radio/intercom{ name = "Station Intercom"; pixel_y = 26 }, +/obj/machinery/computer/security/labor, /turf/open/floor/plasteel/red, /area/security/execution/transfer) "bph" = ( @@ -30115,12 +30112,12 @@ /turf/open/floor/plasteel/grimy, /area/crew_quarters/heads/hos) "brC" = ( -/obj/machinery/computer/security{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/computer/security/hos{ + dir = 1 + }, /turf/open/floor/plasteel/grimy, /area/crew_quarters/heads/hos) "brD" = ( @@ -32398,7 +32395,7 @@ /obj/machinery/camera/motion{ c_tag = "AI Chamber - Fore"; name = "motion-sensitive ai camera"; - network = list("ai") + network = list("aichamber") }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/dark, @@ -32852,7 +32849,8 @@ "bxe" = ( /obj/machinery/camera/motion{ c_tag = "Vault"; - dir = 4 + dir = 4; + network = list("vault") }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -40846,7 +40844,7 @@ c_tag = "Telecomms - Monitoring"; dir = 2; name = "telecomms camera"; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /turf/open/floor/plasteel/grimy, /area/tcommsat/computer) @@ -41330,7 +41328,7 @@ c_tag = "AI Chamber - Aft"; dir = 1; name = "motion-sensitive ai camera"; - network = list("ai") + network = list("aichamber") }, /turf/open/floor/plasteel/vault, /area/ai_monitored/turret_protected/ai) @@ -45719,12 +45717,8 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the AI's satellite."; - dir = 4; - name = "Research Monitor"; - network = list("minisat"); - pixel_y = 2 +/obj/machinery/computer/security/telescreen/minisat{ + dir = 4 }, /turf/open/floor/plasteel/vault{ dir = 8 @@ -45765,12 +45759,8 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the Engine."; +/obj/machinery/computer/security/telescreen/ce{ dir = 4; - layer = 4; - name = "Engine Monitor"; - network = list("engine"); pixel_x = -30 }, /mob/living/simple_animal/parrot/Poly, @@ -49044,6 +49034,10 @@ /obj/item/stack/packageWrap, /obj/item/hand_labeler, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/computer/security/telescreen/vault{ + dir = 8; + pixel_x = 26 + }, /turf/open/floor/wood, /area/crew_quarters/heads/hop) "ccD" = ( @@ -49054,7 +49048,7 @@ c_tag = "Telecomms - Chamber Port"; dir = 4; name = "telecomms camera"; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /turf/open/floor/plasteel/vault/telecomms{ dir = 8 @@ -49498,7 +49492,7 @@ /obj/machinery/camera/motion{ c_tag = "AI - Upload"; name = "motion-sensitive ai camera"; - network = list("minisat") + network = list("aiupload") }, /turf/open/floor/plasteel/vault, /area/ai_monitored/turret_protected/ai_upload) @@ -50941,7 +50935,7 @@ c_tag = "Telecomms - Chamber Starboard"; dir = 8; name = "telecomms camera"; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /turf/open/floor/plasteel/vault/telecomms{ dir = 8 @@ -52597,7 +52591,7 @@ /obj/machinery/camera/motion{ c_tag = "Bridge - Captain's Emergency Escape"; dir = 4; - name = "command camera" + name = "motion-sensitive command camera" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -54723,7 +54717,7 @@ c_tag = "Telecomms - Cooling Room"; dir = 8; name = "telecomms camera"; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, @@ -67890,6 +67884,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay - Storage"; + network = list("ss13", "medbay"); dir = 4; name = "medbay camera" }, @@ -71808,6 +71803,7 @@ /obj/machinery/light, /obj/machinery/camera{ c_tag = "Medbay - Waiting Room"; + network = list("ss13", "medbay"); dir = 1; name = "medbay camera" }, @@ -71947,6 +71943,7 @@ "cYc" = ( /obj/machinery/camera{ c_tag = "Medbay - Break Room"; + network = list("ss13", "medbay"); dir = 2; name = "medbay camera" }, @@ -72624,6 +72621,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/camera{ c_tag = "Medbay - Fore Port"; + network = list("ss13", "medbay"); dir = 8; name = "medbay camera" }, @@ -72705,6 +72703,7 @@ /obj/item/stack/medical/ointment, /obj/machinery/camera{ c_tag = "Medbay - Sleepers"; + network = list("ss13", "medbay"); dir = 2; name = "medbay camera" }, @@ -75473,9 +75472,9 @@ }, /obj/machinery/camera{ c_tag = "Medbay - Chemistry"; + network = list("ss13", "medbay"); dir = 8; - name = "medbay camera"; - network = list("ss13","medbay") + name = "medbay camera" }, /turf/open/floor/plasteel/whiteyellow/corner, /area/medical/chemistry) @@ -76304,6 +76303,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay - Center"; + network = list("ss13", "medbay"); dir = 2; name = "medbay camera" }, @@ -77694,6 +77694,7 @@ /obj/machinery/light, /obj/machinery/camera{ c_tag = "Medbay - Port"; + network = list("ss13", "medbay"); dir = 1; name = "medbay camera" }, @@ -77792,6 +77793,7 @@ /obj/machinery/light, /obj/machinery/camera{ c_tag = "Medbay - Starboard"; + network = list("ss13", "medbay"); dir = 1; name = "medbay camera" }, @@ -81242,6 +81244,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay - Cloning Lab"; + network = list("ss13", "medbay"); dir = 1; name = "medbay camera" }, @@ -81301,6 +81304,7 @@ /obj/item/clothing/neck/stethoscope, /obj/machinery/camera{ c_tag = "Medbay - Cryogenics"; + network = list("ss13", "medbay"); dir = 1; name = "medbay camera" }, @@ -81767,6 +81771,7 @@ /obj/machinery/iv_drip, /obj/machinery/camera{ c_tag = "Medbay - Recovery Room"; + network = list("ss13", "medbay"); dir = 8; name = "medbay camera" }, @@ -83163,6 +83168,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay - Genetics Lab"; + network = list("ss13", "medbay"); dir = 4; name = "medbay camera" }, @@ -83794,6 +83800,7 @@ /obj/item/storage/box/disks, /obj/machinery/camera{ c_tag = "Medbay - Genetics Desk"; + network = list("ss13", "medbay"); dir = 4; name = "medbay camera" }, @@ -84101,6 +84108,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay - Surgery"; + network = list("ss13", "medbay"); dir = 1; name = "medbay camera" }, @@ -84695,6 +84703,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/camera{ c_tag = "Medbay - Aft Port"; + network = list("ss13", "medbay"); dir = 8; name = "medbay camera" }, @@ -84753,6 +84762,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay - Chief Medical Officer's Office"; + network = list("ss13", "medbay"); dir = 8; name = "medbay camera" }, @@ -85973,8 +85983,9 @@ /obj/structure/table/glass, /obj/item/clipboard, /obj/item/toy/figure/cmo, -/obj/machinery/status_display{ - pixel_x = -32 +/obj/machinery/computer/security/telescreen/cmo{ + dir = 4; + pixel_x = -30 }, /turf/open/floor/plasteel/neutral/side{ dir = 4 @@ -86021,6 +86032,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay - Aft Starboard"; + network = list("ss13", "medbay"); dir = 4; name = "medbay camera" }, @@ -88046,16 +88058,12 @@ /area/science/test_area) "dGY" = ( /obj/structure/table/reinforced, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the testing site."; - dir = 4; - layer = 4; - name = "Testing Site Telescreen"; - network = list("toxins") - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/computer/security/telescreen/toxins{ + dir = 4 + }, /turf/open/floor/plasteel, /area/science/mixing) "dGZ" = ( @@ -89054,6 +89062,7 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/camera{ c_tag = "Medbay - Morgue"; + network = list("ss13", "medbay"); dir = 1; name = "medbay camera" }, @@ -89165,6 +89174,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay - Chief Medical Officer's Quarters"; + network = list("ss13", "medbay"); dir = 1; name = "medbay camera" }, @@ -90362,17 +90372,8 @@ /obj/item/target, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/machinery/camera{ - active_power_usage = 0; - c_tag = "Bomb Test Site"; - desc = "A specially-reinforced camera with a long lasting battery, used to monitor the bomb testing site."; - dir = 4; - invuln = 1; - light = null; - name = "hardened testing camera"; - network = list("toxins"); - start_active = 1; - use_power = 0 +/obj/machinery/camera/preset/toxins{ + dir = 4 }, /turf/open/floor/plating/airless, /area/science/test_area) @@ -92465,6 +92466,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ c_tag = "Virology - Containment Lock"; + network = list("ss13", "medbay"); dir = 8; name = "virology camera" }, @@ -92977,6 +92979,7 @@ }, /obj/machinery/camera{ c_tag = "Virology - Break Room"; + network = list("ss13", "medbay"); dir = 8; name = "virology camera" }, @@ -94683,6 +94686,7 @@ }, /obj/machinery/camera{ c_tag = "Virology - Lab"; + network = list("ss13", "medbay"); name = "virology camera" }, /obj/effect/turf_decal/bot, @@ -94702,6 +94706,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/camera{ c_tag = "Virology - Hallway"; + network = list("ss13", "medbay"); dir = 8; name = "virology camera" }, @@ -96405,6 +96410,7 @@ }, /obj/machinery/camera{ c_tag = "Virology - Cells"; + network = list("ss13", "medbay"); dir = 8; name = "virology camera" }, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index d4580e95f09..0050c10bb9e 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -1910,7 +1910,7 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/hos) "aev" = ( -/obj/machinery/computer/security, +/obj/machinery/computer/security/hos, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/hos) "aew" = ( @@ -3555,13 +3555,6 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching certain areas."; - dir = 1; - name = "Head of Security's Monitor"; - network = list("prison","minisat","tcomm"); - pixel_y = -30 - }, /turf/open/floor/plasteel/vault, /area/crew_quarters/heads/hos) "ahK" = ( @@ -7852,10 +7845,7 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aqY" = ( -/obj/machinery/computer/security{ - name = "Labor Camp Monitoring"; - network = list("labor") - }, +/obj/machinery/computer/security/labor, /turf/open/floor/plasteel/dark, /area/security/brig) "aqZ" = ( @@ -8778,12 +8768,8 @@ /area/security/main) "asN" = ( /obj/structure/chair, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching proceedings in the interrogation room."; +/obj/machinery/computer/security/telescreen/interrogation{ dir = 1; - layer = 4; - name = "interrogation monitor"; - network = list("interrogation"); pixel_y = -30 }, /turf/open/floor/plasteel/grimy, @@ -9867,6 +9853,10 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, +/obj/machinery/computer/security/telescreen/interrogation{ + dir = 8; + pixel_x = 30 + }, /turf/open/floor/plasteel/red/side{ dir = 5 }, @@ -10533,7 +10523,7 @@ /area/security/brig) "awz" = ( /obj/machinery/camera{ - c_tag = "Interrogation"; + c_tag = "Interrogation room"; dir = 8; network = list("interrogation") }, @@ -13115,6 +13105,7 @@ "aCg" = ( /obj/machinery/camera/motion{ c_tag = "Vault"; + network = list("vault"); dir = 1 }, /obj/machinery/light, @@ -14211,8 +14202,7 @@ /area/quartermaster/warehouse) "aEv" = ( /obj/machinery/computer/security/mining{ - dir = 4; - network = list("mine","auxbase") + dir = 4 }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) @@ -17486,7 +17476,7 @@ /obj/structure/table, /obj/machinery/camera/motion{ c_tag = "AI Upload Chamber - Fore"; - network = list("ss13","rd","aiupload") + network = list("aiupload") }, /obj/item/twohanded/required/kirbyplants/photosynthetic{ pixel_y = 10 @@ -19642,13 +19632,12 @@ /turf/closed/wall, /area/quartermaster/qm) "aQq" = ( -/obj/machinery/computer/security/mining{ - dir = 4; - network = list("mine","auxbase") - }, /obj/machinery/light_switch{ pixel_x = -23 }, +/obj/machinery/computer/cargo{ + dir = 4 + }, /turf/open/floor/plasteel/brown{ dir = 8 }, @@ -19747,7 +19736,7 @@ /obj/machinery/camera/motion{ c_tag = "AI Upload Chamber - Port"; dir = 1; - network = list("ss13","rd","aiupload") + network = list("aiupload") }, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai_upload) @@ -19770,7 +19759,7 @@ /obj/machinery/camera/motion{ c_tag = "AI Upload Chamber - Starboard"; dir = 1; - network = list("ss13","rd","aiupload") + network = list("aiupload") }, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai_upload) @@ -20268,7 +20257,7 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "aRK" = ( -/obj/machinery/computer/cargo{ +/obj/machinery/computer/security/qm{ dir = 4 }, /turf/open/floor/plasteel/brown{ @@ -21603,16 +21592,9 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching areas on the MiniSat."; - dir = 8; - name = "MiniSat Monitor"; - network = list("minisat","tcomm"); - pixel_x = 29 - }, /obj/machinery/camera/motion{ c_tag = "AI Upload Foyer"; - network = list("ss13","rd","aiupload") + network = list("aiupload") }, /obj/machinery/airalarm{ pixel_y = 26 @@ -21935,7 +21917,7 @@ /obj/machinery/camera{ c_tag = "AI Chamber - Fore"; dir = 2; - network = list("rd") + network = list("aicore") }, /obj/structure/showcase/cyborg/old{ dir = 2; @@ -22183,8 +22165,7 @@ pixel_x = 27 }, /obj/machinery/computer/security/mining{ - dir = 8; - network = list("mine","auxbase") + dir = 8 }, /turf/open/floor/plasteel/red/side{ dir = 4 @@ -23419,7 +23400,7 @@ /obj/machinery/camera{ c_tag = "AI Chamber - Port"; dir = 4; - network = list("rd") + network = list("aicore") }, /obj/structure/showcase/cyborg/old{ dir = 4; @@ -24131,7 +24112,7 @@ /obj/machinery/camera{ c_tag = "AI Chamber - Core"; dir = 2; - network = list("rd") + network = list("aicore") }, /turf/open/floor/plasteel/vault{ dir = 10 @@ -25035,10 +25016,8 @@ pixel_y = 10 }, /obj/item/radio/off, -/obj/machinery/computer/security/telescreen{ +/obj/machinery/computer/security/telescreen/minisat{ dir = 4; - name = "MiniSat Monitor"; - network = list("minisat","tcomm"); pixel_x = -29 }, /turf/open/floor/plasteel/red/side{ @@ -25096,7 +25075,7 @@ /obj/machinery/camera{ c_tag = "AI Chamber - Starboard"; dir = 8; - network = list("rd") + network = list("aicore") }, /obj/structure/showcase/cyborg/old{ dir = 8; @@ -26192,10 +26171,8 @@ /obj/structure/rack, /obj/item/storage/secure/briefcase, /obj/item/clothing/mask/cigarette/cigar, -/obj/machinery/computer/security/telescreen{ +/obj/machinery/computer/security/telescreen/ce{ dir = 1; - name = "MiniSat Monitor"; - network = list("minisat","tcomm"); pixel_y = -30 }, /turf/open/floor/plasteel/vault{ @@ -28117,7 +28094,7 @@ /obj/machinery/camera{ c_tag = "AI Chamber - Aft"; dir = 1; - network = list("rd") + network = list("aicore") }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plasteel/dark, @@ -30032,15 +30009,12 @@ }, /obj/item/storage/secure/briefcase, /obj/structure/table/wood, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - name = "Prison Monitor"; - network = list("prison"); - pixel_y = 30 - }, /obj/item/folder/blue, /obj/item/storage/secure/briefcase, /obj/item/assembly/flash/handheld, +/obj/machinery/computer/security/telescreen/vault{ + pixel_y = 30 + }, /turf/open/floor/wood, /area/crew_quarters/heads/hop) "bmq" = ( @@ -32209,10 +32183,8 @@ /obj/structure/rack, /obj/item/aicard, /obj/item/radio/off, -/obj/machinery/computer/security/telescreen{ +/obj/machinery/computer/security/telescreen/minisat{ dir = 1; - name = "MiniSat Monitor"; - network = list("minisat","tcomm"); pixel_y = -29 }, /turf/open/floor/plasteel/darkblue/side{ @@ -33007,10 +32979,8 @@ /obj/machinery/porta_turret/ai{ dir = 2 }, -/obj/machinery/computer/security/telescreen{ +/obj/machinery/computer/security/telescreen/minisat{ dir = 8; - name = "MiniSat Monitor"; - network = list("minisat","tcomm"); pixel_x = 28 }, /turf/open/floor/plasteel/vault{ @@ -33032,10 +33002,8 @@ }, /obj/machinery/light, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/machinery/computer/security/telescreen{ +/obj/machinery/computer/security/telescreen/minisat{ dir = 1; - name = "MiniSat Monitor"; - network = list("minisat","tcomm"); pixel_y = -29 }, /turf/open/floor/plasteel/dark, @@ -33797,10 +33765,8 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/item/pen, -/obj/machinery/computer/security/telescreen{ +/obj/machinery/computer/security/telescreen/minisat{ dir = 1; - name = "MiniSat Monitor"; - network = list("minisat","tcomm"); pixel_y = -28 }, /turf/open/floor/plasteel/darkblue/corner, @@ -35514,7 +35480,7 @@ /obj/machinery/computer/security/telescreen{ dir = 8; name = "Telecomms Camera Monitor"; - network = list("tcomm"); + network = list("tcomms"); pixel_x = 26 }, /obj/machinery/computer/telecomms/monitor{ @@ -36810,10 +36776,8 @@ /area/crew_quarters/heads/captain/private) "bAe" = ( /obj/machinery/light, -/obj/machinery/computer/security/telescreen{ +/obj/machinery/computer/security/telescreen/minisat{ dir = 1; - name = "MiniSat Monitor"; - network = list("minisat","tcomm"); pixel_y = -29 }, /obj/structure/bed/dogbed/renault, @@ -38521,7 +38485,7 @@ /obj/machinery/camera{ c_tag = "Telecomms - Server Room - Fore-Port"; dir = 2; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /turf/open/floor/circuit/green/telecomms/mainframe, /area/tcommsat/server) @@ -38552,7 +38516,7 @@ /obj/machinery/camera{ c_tag = "Telecomms - Server Room - Fore-Starboard"; dir = 2; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /turf/open/floor/circuit/green/telecomms/mainframe, /area/tcommsat/server) @@ -40871,7 +40835,7 @@ /obj/machinery/camera{ c_tag = "Telecomms - Control Room"; dir = 1; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /obj/structure/table/wood, /obj/item/pen, @@ -42286,7 +42250,7 @@ /obj/machinery/camera{ c_tag = "Telecomms - Server Room - Aft-Port"; dir = 4; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /turf/open/floor/plasteel/dark/telecomms/mainframe, /area/tcommsat/server) @@ -42324,7 +42288,7 @@ /obj/machinery/camera{ c_tag = "Telecomms - Server Room - Aft-Starboard"; dir = 8; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /obj/structure/cable/yellow{ icon_state = "0-8" @@ -43130,7 +43094,7 @@ /obj/machinery/camera{ c_tag = "Telecomms - Server Room - Aft"; dir = 1; - network = list("ss13","tcomm") + network = list("ss13","tcomms") }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/ntnet_relay, @@ -57860,13 +57824,8 @@ /turf/open/floor/plating, /area/crew_quarters/heads/hor) "csZ" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons from the safety of his office."; - name = "Research Monitor"; - network = list("rd"); - pixel_y = 2 - }, /obj/structure/table/reinforced, +/obj/machinery/computer/security/telescreen/rd, /turf/open/floor/plasteel/cafeteria{ dir = 5 }, @@ -62085,7 +62044,6 @@ /turf/open/floor/plating/airless, /area/science/test_area) "cBO" = ( -/obj/item/flashlight/lamp, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -62875,22 +62833,13 @@ /turf/open/floor/plating/airless, /area/science/test_area) "cDy" = ( -/obj/machinery/camera{ - active_power_usage = 0; - c_tag = "Bomb Test Site"; - desc = "A specially-reinforced camera with a long lasting battery, used to monitor the bomb testing site. An external light is attached to the top."; - dir = 8; - invuln = 1; - light = null; - luminosity = 3; - name = "Hardened Bomb-Test Camera"; - network = list("toxins"); - use_power = 0 - }, /obj/item/target/alien/anchored, /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/camera/preset/toxins{ + dir = 8 + }, /turf/open/floor/plating/airless{ luminosity = 2 }, @@ -63870,7 +63819,6 @@ /turf/open/floor/plating/airless, /area/science/test_area) "cFw" = ( -/obj/item/flashlight/lamp, /obj/effect/turf_decal/stripes/line{ dir = 2 }, @@ -76163,14 +76111,11 @@ /area/crew_quarters/fitness/recreation) "jyv" = ( /obj/structure/table/reinforced, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons from the safety of your own office."; - name = "Research Monitor"; - network = list("rd"); - pixel_y = 32 +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/machinery/computer/security/telescreen/circuitry{ + pixel_x = 30 }, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high, /turf/open/floor/plasteel/white, /area/science/circuit) "jyQ" = ( @@ -76470,14 +76415,11 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons from the safety of your own office."; - name = "Research Monitor"; - network = list("rd"); - pixel_y = 32 +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/machinery/computer/security/telescreen/circuitry{ + pixel_y = 30 }, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high, /turf/open/floor/plasteel/white, /area/science/circuit) "ohj" = ( diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 9fefb186767..34f3a25d5fb 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -2249,9 +2249,7 @@ c_tag = "Brig Prison Hallway"; network = list("ss13","prison") }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - name = "Prison Monitor"; +/obj/machinery/computer/security/telescreen/prison{ network = list("prison"); pixel_y = 30 }, @@ -4378,7 +4376,7 @@ /turf/open/floor/carpet, /area/crew_quarters/heads/hos) "amz" = ( -/obj/machinery/computer/security{ +/obj/machinery/computer/security/hos{ dir = 8 }, /turf/open/floor/carpet, @@ -5072,10 +5070,7 @@ /turf/open/floor/plating, /area/maintenance/department/security/brig) "aok" = ( -/obj/machinery/computer/security{ - name = "Labor Camp Monitoring"; - network = list("labor") - }, +/obj/machinery/computer/security/labor, /turf/open/floor/plasteel/dark, /area/security/brig) "aol" = ( @@ -5936,6 +5931,10 @@ }, /area/security/brig) "aqA" = ( +/obj/machinery/computer/security/telescreen/interrogation{ + dir = 8; + pixel_x = 30 + }, /turf/open/floor/plasteel/red/side{ dir = 5 }, @@ -6269,7 +6268,8 @@ "arz" = ( /obj/machinery/camera{ c_tag = "Brig Interrogation"; - dir = 8 + dir = 8; + network = list("interrogation") }, /turf/open/floor/plasteel/dark, /area/security/brig) @@ -7310,6 +7310,7 @@ "aud" = ( /obj/machinery/camera/motion{ c_tag = "Vault"; + network = list("vault"); dir = 1 }, /obj/machinery/light, @@ -10280,6 +10281,9 @@ /turf/open/floor/wood, /area/crew_quarters/heads/hop) "aBA" = ( +/obj/machinery/computer/security/telescreen/vault{ + pixel_y = 30 + }, /obj/machinery/computer/security/mining, /turf/open/floor/wood, /area/crew_quarters/heads/hop) @@ -10783,7 +10787,8 @@ /obj/item/aiModule/supplied/quarantine, /obj/machinery/camera/motion{ c_tag = "AI Upload Port"; - dir = 4 + dir = 4; + network = list("aiupload") }, /obj/item/aiModule/reset, /obj/machinery/flasher{ @@ -10830,7 +10835,8 @@ /obj/item/aiModule/supplied/freeform, /obj/machinery/camera/motion{ c_tag = "AI Upload Starboard"; - dir = 8 + dir = 8; + network = list("aiupload") }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -11261,7 +11267,8 @@ /obj/machinery/holopad, /obj/machinery/camera/motion{ c_tag = "AI Upload Center"; - dir = 1 + dir = 1; + network = list("aiupload") }, /obj/item/radio/intercom{ broadcasting = 1; @@ -16561,6 +16568,10 @@ /obj/machinery/light{ dir = 4 }, +/obj/machinery/computer/security/telescreen/auxbase{ + dir = 8; + pixel_x = 30 + }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) "aRH" = ( @@ -21317,14 +21328,14 @@ /turf/open/floor/plasteel, /area/quartermaster/miningdock) "bdM" = ( -/obj/machinery/computer/security/mining{ - dir = 8 - }, /obj/machinery/requests_console{ department = "Mining"; departmentType = 0; pixel_x = 32 }, +/obj/machinery/computer/security/mining{ + dir = 8 + }, /turf/open/floor/plasteel/brown/corner, /area/quartermaster/miningdock) "bdQ" = ( @@ -22046,13 +22057,11 @@ }, /area/quartermaster/qm) "bfD" = ( -/obj/machinery/computer/security/mining{ - dir = 8 - }, /obj/item/radio/intercom{ name = "Station Intercom (General)"; pixel_y = -35 }, +/obj/machinery/computer/security/qm, /turf/open/floor/plasteel/brown{ dir = 6 }, @@ -23836,6 +23845,7 @@ }, /obj/machinery/camera{ c_tag = "Genetics Cloning Foyer"; + network = list("ss13","medbay"); dir = 2 }, /obj/machinery/atmospherics/components/unary/vent_pump/on, @@ -24222,12 +24232,8 @@ dir = 1 }, /obj/item/integrated_electronics/debugger, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the other eggheads from the comfort of the circuitry lab."; - dir = 2; - name = "RnD Monitor"; - network = list("rd"); - pixel_y = 32 +/obj/machinery/computer/security/telescreen/circuitry{ + pixel_y = 30 }, /turf/open/floor/plasteel/vault{ dir = 5 @@ -24248,12 +24254,8 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the other eggheads from the comfort of the circuitry lab."; - dir = 2; - name = "RnD Monitor"; - network = list("rd"); - pixel_y = 32 +/obj/machinery/computer/security/telescreen/circuitry{ + pixel_y = 30 }, /turf/open/floor/plasteel/vault{ dir = 5 @@ -24400,6 +24402,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay Security Post"; + network = list("ss13","medbay"); dir = 4 }, /obj/structure/closet/secure_closet/security/med, @@ -25229,6 +25232,7 @@ /obj/structure/bed/roller, /obj/machinery/camera{ c_tag = "Medbay Entrance"; + network = list("ss13","medbay"); dir = 1 }, /turf/open/floor/plasteel/whiteblue/side, @@ -26119,7 +26123,7 @@ /obj/machinery/camera{ c_tag = "Genetics Monkey Pen Fore"; dir = 4; - network = list("ss13","rd") + network = list("ss13","medbay") }, /obj/machinery/light/small{ dir = 8 @@ -26731,6 +26735,7 @@ /obj/machinery/dna_scannernew, /obj/machinery/camera{ c_tag = "Genetics Cloning"; + network = list("ss13","medbay"); dir = 4 }, /obj/machinery/airalarm/unlocked{ @@ -27756,6 +27761,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ c_tag = "Medbay Port Hallway"; + network = list("ss13","medbay"); dir = 4 }, /obj/machinery/airalarm{ @@ -29665,7 +29671,7 @@ /obj/machinery/camera{ c_tag = "Genetics Monkey Pen Aft"; dir = 4; - network = list("ss13","rd") + network = list("ss13","medbay") }, /obj/structure/flora/ausbushes/grassybush, /obj/machinery/light/small{ @@ -30316,20 +30322,16 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching surgery."; - dir = 8; - layer = 4; - name = "Surgery Telescreen"; - network = list("surgery"); - pixel_x = 30 - }, /obj/structure/cable{ icon_state = "1-2" }, /obj/structure/cable{ icon_state = "2-8" }, +/obj/machinery/computer/security/telescreen/cmo{ + dir = 8; + pixel_x = 30 + }, /turf/open/floor/plasteel/cmo, /area/crew_quarters/heads/cmo) "bBl" = ( @@ -30687,7 +30689,7 @@ /obj/machinery/camera{ c_tag = "Genetics"; dir = 1; - network = list("ss13","rd") + network = list("ss13","medbay") }, /turf/open/floor/plasteel/whitepurple/side, /area/medical/genetics) @@ -30743,6 +30745,7 @@ /obj/structure/closet/emcloset, /obj/machinery/camera{ c_tag = "Virology Airlock"; + network = list("ss13","medbay"); dir = 2 }, /obj/effect/turf_decal/stripes/line{ @@ -32003,13 +32006,11 @@ pixel_x = 4; pixel_y = 6 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons and the AI's satellite from the safety of his office."; - name = "Research Monitor"; - network = list("rd","minisat"); - pixel_y = -32 - }, /obj/structure/table/glass, +/obj/machinery/computer/security/telescreen/rd{ + dir = 1; + pixel_y = -26 + }, /turf/open/floor/plasteel/darkpurple/side, /area/crew_quarters/heads/hor) "bEV" = ( @@ -33211,6 +33212,7 @@ "bHY" = ( /obj/machinery/camera{ c_tag = "Virology"; + network = list("ss13","medbay"); dir = 2 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -33269,6 +33271,7 @@ /obj/machinery/light, /obj/machinery/camera{ c_tag = "Medbay Equipment Room"; + network = list("ss13","medbay"); dir = 1 }, /turf/open/floor/plasteel/whiteblue/side, @@ -33335,6 +33338,7 @@ "bIm" = ( /obj/machinery/camera{ c_tag = "Medbay Recovery Room"; + network = list("ss13","medbay"); dir = 8 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -38254,6 +38258,9 @@ c_tag = "Chief Engineer's Office"; dir = 2 }, +/obj/machinery/computer/security/telescreen/ce{ + pixel_y = 30 + }, /turf/open/floor/plasteel/yellow/side{ dir = 1 }, @@ -41890,7 +41897,7 @@ dir = 2; layer = 4; name = "Telecomms Telescreen"; - network = list("tcomm"); + network = list("tcomms"); pixel_y = 28 }, /obj/structure/disposalpipe/segment{ @@ -43104,16 +43111,7 @@ /turf/open/floor/carpet, /area/library/lounge) "cjV" = ( -/obj/machinery/camera{ - active_power_usage = 0; - c_tag = "Bomb Testing Asteroid Fore"; - desc = "A specially-reinforced camera with a long lasting battery, used to monitor the bomb testing site. An external light is attached to the top."; - invuln = 1; - luminosity = 3; - name = "Hardened Bomb-Test Camera"; - network = list("ss13","rd","toxins"); - use_power = 0 - }, +/obj/machinery/camera/preset/toxins, /turf/open/floor/plating/asteroid/airless, /area/asteroid/nearstation/bomb_site) "cjZ" = ( @@ -43865,7 +43863,7 @@ /obj/machinery/camera/motion{ c_tag = "Telecomms External Port"; dir = 8; - network = list("tcomm") + network = list("tcomms") }, /turf/open/space, /area/space/nearstation) @@ -43927,7 +43925,7 @@ /obj/machinery/camera/motion{ c_tag = "Telecomms External Starboard"; dir = 4; - network = list("tcomm") + network = list("tcomms") }, /turf/open/space, /area/space/nearstation) @@ -44103,7 +44101,7 @@ /obj/machinery/camera/motion{ c_tag = "Telecomms Server Room"; dir = 1; - network = list("ss13","tcomm") + network = list("tcomms") }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) @@ -44134,7 +44132,7 @@ /obj/machinery/camera/motion{ c_tag = "Telecomms External Port Aft"; dir = 2; - network = list("tcomm") + network = list("tcomms") }, /turf/open/space, /area/space/nearstation) @@ -44143,7 +44141,7 @@ /obj/machinery/camera/motion{ c_tag = "Telecomms External Starboard Aft"; dir = 2; - network = list("tcomm") + network = list("tcomms") }, /turf/open/space, /area/space/nearstation) @@ -49216,7 +49214,7 @@ /obj/machinery/camera{ c_tag = "Telecomms External Fore"; dir = 1; - network = list("SS13","tcomm"); + network = list("tcomms"); start_active = 1 }, /obj/structure/cable/yellow{ @@ -50935,7 +50933,7 @@ /obj/machinery/camera/motion{ c_tag = "Telecomms Monitoring"; dir = 2; - network = list("ss13","tcomm") + network = list("tcomms") }, /obj/structure/cable{ icon_state = "2-8" @@ -52231,7 +52229,7 @@ /obj/machinery/camera/motion{ c_tag = "Telecomms External Access"; dir = 1; - network = list("ss13","tcomm") + network = list("tcomms") }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 @@ -54450,7 +54448,7 @@ /obj/machinery/camera{ c_tag = "Engineering Telecomms Access"; dir = 8; - network = list("tcomm") + network = list("tcomms") }, /obj/machinery/light{ dir = 4 diff --git a/_maps/shuttles/aux_base_default.dmm b/_maps/shuttles/aux_base_default.dmm index e093d3c864e..365c34cf502 100644 --- a/_maps/shuttles/aux_base_default.dmm +++ b/_maps/shuttles/aux_base_default.dmm @@ -78,7 +78,8 @@ /area/shuttle/auxillary_base) "X" = ( /obj/machinery/camera{ - dir = 1 + dir = 1; + network = list("auxbase") }, /obj/structure/mining_shuttle_beacon, /turf/open/floor/plating, diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 5cf652f00d8..3e8e3afc98b 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -41,6 +41,16 @@ var/internal_light = TRUE //Whether it can light up when an AI views it +/obj/machinery/camera/preset/toxins //Bomb test site in space + name = "Hardened Bomb-Test Camera" + desc = "A specially-reinforced camera with a long lasting battery, used to monitor the bomb testing site. An external light is attached to the top." + c_tag = "Bomb Testing Site" + network = list("rd","toxins") + use_power = NO_POWER_USE //Test site is an unpowered area + invuln = TRUE + light_range = 10 + start_active = TRUE + /obj/machinery/camera/Initialize(mapload, obj/structure/camera_assembly/CA) . = ..() for(var/i in network) diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index 82bd4aac315..45f0268a003 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -65,6 +65,7 @@ for (var/mob/living/silicon/aiPlayer in GLOB.player_list) if (status) aiPlayer.triggerAlarm("Motion", get_area(src), list(src), src) + visible_message("A red light flashes on the [src]!") detectTime = -1 return TRUE diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index f4963102c6f..cd22fd9c93d 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -2,7 +2,7 @@ // EMP /obj/machinery/camera/emp_proof - start_active = 1 + start_active = TRUE /obj/machinery/camera/emp_proof/Initialize() . = ..() @@ -11,7 +11,7 @@ // X-RAY /obj/machinery/camera/xray - start_active = 1 + start_active = TRUE icon_state = "xraycam" // Thanks to Krutchen for the icons. /obj/machinery/camera/xray/Initialize() @@ -20,7 +20,7 @@ // MOTION /obj/machinery/camera/motion - start_active = 1 + start_active = TRUE name = "motion-sensitive security camera" /obj/machinery/camera/motion/Initialize() @@ -29,7 +29,7 @@ // ALL UPGRADES /obj/machinery/camera/all - start_active = 1 + start_active = TRUE /obj/machinery/camera/all/Initialize() . = ..() diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 7b75d06321c..1a023bb702a 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -152,6 +152,50 @@ D["[C.c_tag][(C.status ? null : " (Deactivated)")]"] = C return D +// SECURITY MONITORS + +/obj/machinery/computer/security/wooden_tv + name = "security camera monitor" + desc = "An old TV hooked into the station's camera network." + icon_state = "television" + icon_keyboard = null + icon_screen = "detective_tv" + clockwork = TRUE //it'd look weird + +/obj/machinery/computer/security/mining + name = "outpost camera console" + desc = "Used to access the various cameras on the outpost." + icon_screen = "mining" + icon_keyboard = "mining_key" + network = list("mine", "auxbase") + circuit = /obj/item/circuitboard/computer/mining + +/obj/machinery/computer/security/research + name = "research camera console" + desc = "Used to access the various cameras in science." + network = list("rd") + circuit = /obj/item/circuitboard/computer/research + +/obj/machinery/computer/security/hos + name = "Head of Security's camera console" + desc = "A custom security console with added access to the labor camp network." + network = list("ss13", "labor") + circuit = null + +/obj/machinery/computer/security/labor + name = "labor camp monitoring" + desc = "Used to access the various cameras on the labor camp." + network = list("labor") + circuit = null + +/obj/machinery/computer/security/qm + name = "Quartermaster's camera console" + desc = "A console with access to the mining, auxillary base and vault camera networks." + network = list("mine", "auxbase", "vault") + circuit = null + +// TELESCREENS + /obj/machinery/computer/security/telescreen name = "\improper Telescreen" desc = "Used for watching an empty arena." @@ -161,7 +205,6 @@ density = FALSE circuit = null clockwork = TRUE //it'd look very weird - light_power = 0 /obj/machinery/computer/security/telescreen/update_icon() @@ -176,28 +219,68 @@ icon = 'icons/obj/status_display.dmi' icon_state = "entertainment" network = list("thunder") - density = FALSE - circuit = null -/obj/machinery/computer/security/wooden_tv - name = "security camera monitor" - desc = "An old TV hooked into the stations camera network." - icon_state = "television" - icon_keyboard = null - icon_screen = "detective_tv" - clockwork = TRUE //it'd look weird +/obj/machinery/computer/security/telescreen/rd + name = "Research Director's telescreen" + desc = "Used for watching the AI and the RD's goons from the safety of his office." + network = list("rd", "aicore", "aiupload", "minisat", "xeno", "test") - -/obj/machinery/computer/security/mining - name = "outpost camera console" - desc = "Used to access the various cameras on the outpost." - icon_screen = "mining" - icon_keyboard = "mining_key" - network = list("mine") - circuit = /obj/item/circuitboard/computer/mining - -/obj/machinery/computer/security/research - name = "research camera console" - desc = "Used to access the various cameras in science." +/obj/machinery/computer/security/telescreen/circuitry + name = "circuitry telescreen" + desc = "Used for watching the other eggheads from the safety of the circuitry lab." network = list("rd") - circuit = /obj/item/circuitboard/computer/research + +/obj/machinery/computer/security/telescreen/ce + name = "Chief Engineer's telescreen" + desc = "Used for watching the engine, telecommunications and the minisat." + network = list("engine", "singularity", "tcomms", "minisat") + +/obj/machinery/computer/security/telescreen/cmo + name = "Chief Medical Officer's telescreen" + desc = "A telescreen with access to the medbay's camera network." + network = list("medbay") + +/obj/machinery/computer/security/telescreen/vault + name = "Vault monitor" + desc = "A telescreen that connects to the vault's camera network." + network = list("vault") + +/obj/machinery/computer/security/telescreen/toxins + name = "Bomb test site monitor" + desc = "A telescreen that connects to the bomb test site's camera." + network = list("toxin") + +/obj/machinery/computer/security/telescreen/engine + name = "engine monitor" + desc = "A telescreen that connects to the engine's camera network." + network = list("engine") + +/obj/machinery/computer/security/telescreen/turbine + name = "turbine monitor" + desc = "A telescreen that connects to the turbine's camera." + network = list("turbine") + +/obj/machinery/computer/security/telescreen/interrogation + name = "interrogation room monitor" + desc = "A telescreen that connects to the interrogation room's camera." + network = list("interrogation") + +/obj/machinery/computer/security/telescreen/prison + name = "prison monitor" + desc = "A telescreen that connects to the permabrig's camera network." + network = list("prison") + +/obj/machinery/computer/security/telescreen/auxbase + name = "auxillary base monitor" + desc = "A telescreen that connects to the auxillary base's camera." + network = list("auxbase") + +/obj/machinery/computer/security/telescreen/minisat + name = "minisat monitor" + desc = "A telescreen that connects to the minisat's camera network." + network = list("minisat") + +/obj/machinery/computer/security/telescreen/aiupload + name = "AI upload monitor" + desc = "A telescreen that connects to the AI upload's camera network." + network = list("aiupload") From 9aa569204824edd5c40e4c89e5feee3997860c24 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 26 Jun 2018 13:25:20 -0700 Subject: [PATCH 124/133] Automatic changelog generation for PR #38730 [ci skip] --- html/changelogs/AutoChangeLog-pr-38730.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38730.yml diff --git a/html/changelogs/AutoChangeLog-pr-38730.yml b/html/changelogs/AutoChangeLog-pr-38730.yml new file mode 100644 index 00000000000..ebc17960cef --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38730.yml @@ -0,0 +1,8 @@ +author: "Denton" +delete-after: True +changes: + - tweak: "Camera networks, monitor screens and telescreens have been standardized." + - tweak: "Motion-sensitive cameras now show a message when they trigger the alarm." + - bugfix: "The Box/Meta auxillary base camera now works." + - bugfix: "Bomb test site cameras now emit light, as intended." + - bugfix: "Meta: Replaced the RD telescreen in the CE office with the correct one." From 47f55b48a7678a35fbe2f0ce7a52d80159dafcb9 Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Tue, 26 Jun 2018 13:26:33 -0700 Subject: [PATCH 125/133] Move throwforce up to atom/movable (#38689) --- code/game/atoms_movable.dm | 1 + code/game/objects/obj_defense.dm | 8 +------- code/game/objects/objs.dm | 1 - code/modules/mob/mob_defines.dm | 1 + 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 348f7d3cb51..211bb35263b 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -29,6 +29,7 @@ var/movement_type = GROUND //Incase you have multiple types, you automatically use the most useful one. IE: Skating on ice, flippers on water, flying over chasm/space, etc. var/atom/movable/pulling var/grab_state = 0 + var/throwforce = 0 /atom/movable/vv_edit_var(var_name, var_value) var/static/list/banned_edits = list("step_x", "step_y", "step_size") diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 2280554f30c..4efd9dab5ad 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -48,13 +48,7 @@ /obj/hitby(atom/movable/AM) ..() - var/tforce = 0 - if(ismob(AM)) - tforce = 10 - else if(isobj(AM)) - var/obj/O = AM - tforce = O.throwforce - take_damage(tforce, BRUTE, "melee", 1, get_dir(src, AM)) + take_damage(AM.throwforce, BRUTE, "melee", 1, get_dir(src, AM)) /obj/ex_act(severity, target) if(resistance_flags & INDESTRUCTIBLE) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 664cdbf3831..bd08fb67191 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -2,7 +2,6 @@ /obj var/crit_fail = FALSE animate_movement = 2 - var/throwforce = 0 var/obj_flags = CAN_BE_HIT var/set_obj_flags // ONLY FOR MAPPING: Sets flags from a string list, handled in Initialize. Usage: set_obj_flags = "EMAGGED;!CAN_BE_HIT" to set EMAGGED and clear CAN_BE_HIT. diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 4cb9723dbd8..3dff46ec84a 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -7,6 +7,7 @@ hud_possible = list(ANTAG_HUD) pressure_resistance = 8 mouse_drag_pointer = MOUSE_ACTIVE_POINTER + throwforce = 10 var/lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE var/datum/mind/mind var/list/datum/action/actions = list() From 45a0db83d3d6148e2b02335e27c93a04e9fe40f1 Mon Sep 17 00:00:00 2001 From: Irafas Date: Tue, 26 Jun 2018 21:33:28 +0100 Subject: [PATCH 126/133] Prevents reagents being transferred to a bucket while its worn on a head (#38727) * Fixed bucket hat bug Stopped the user from pouring reagents into a bucket while worn as a hat. Does so by changing the bucket to not have a container type until its removed * Should work * Works better * ExcessiveUseOfCobblestone is right, this better * As per recommendation --- code/modules/reagents/reagent_containers/glass.dm | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 3a64da8f047..596973a2c44 100755 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -286,10 +286,16 @@ /obj/item/reagent_containers/glass/bucket/equipped(mob/user, slot) ..() - if(slot == SLOT_HEAD && reagents.total_volume) - to_chat(user, "[src]'s contents spill all over you!") - reagents.reaction(user, TOUCH) - reagents.clear_reagents() + if (slot == SLOT_HEAD) + if(reagents.total_volume) + to_chat(user, "[src]'s contents spill all over you!") + reagents.reaction(user, TOUCH) + reagents.clear_reagents() + container_type = NONE + +/obj/item/reagent_containers/glass/bucket/dropped(mob/user) + . = ..() + container_type = initial(container_type) /obj/item/reagent_containers/glass/bucket/equip_to_best_slot(var/mob/M) if(reagents.total_volume) //If there is water in a bucket, don't quick equip it to the head From d6e2a6dd05fba4eaf657b9dffdd357b9f7064387 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 26 Jun 2018 13:33:31 -0700 Subject: [PATCH 127/133] Automatic changelog generation for PR #38727 [ci skip] --- html/changelogs/AutoChangeLog-pr-38727.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38727.yml diff --git a/html/changelogs/AutoChangeLog-pr-38727.yml b/html/changelogs/AutoChangeLog-pr-38727.yml new file mode 100644 index 00000000000..2cb089463c4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38727.yml @@ -0,0 +1,4 @@ +author: "Irafas" +delete-after: True +changes: + - bugfix: "Bucket helmets cannot have reagents transferred into them until after they are removed" From bcf00e21575b3f14222c534ea7aecf19188daa5b Mon Sep 17 00:00:00 2001 From: Dax Dupont Date: Tue, 26 Jun 2018 22:34:45 +0200 Subject: [PATCH 128/133] Introduces actual liberty to liberation station vendors, removes sec access requirement (#38725) * Remove access requirements from lib * a --- code/modules/vending/liberation.dm | 1 - code/modules/vending/liberation_toy.dm | 1 - 2 files changed, 2 deletions(-) diff --git a/code/modules/vending/liberation.dm b/code/modules/vending/liberation.dm index 6213ebed351..92fd21e852f 100644 --- a/code/modules/vending/liberation.dm +++ b/code/modules/vending/liberation.dm @@ -2,7 +2,6 @@ name = "\improper Liberation Station" desc = "An overwhelming amount of ancient patriotism washes over you just by looking at the machine." icon_state = "liberationstation" - req_access = list(ACCESS_SECURITY) product_slogans = "Liberation Station: Your one-stop shop for all things second ammendment!;Be a patriot today, pick up a gun!;Quality weapons for cheap prices!;Better dead than red!" product_ads = "Float like an astronaut, sting like a bullet!;Express your second ammendment today!;Guns don't kill people, but you can!;Who needs responsibilities when you have guns?" vend_reply = "Remember the name: Liberation Station!" diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm index 8cdabdf0e84..1bb8f8bde35 100644 --- a/code/modules/vending/liberation_toy.dm +++ b/code/modules/vending/liberation_toy.dm @@ -2,7 +2,6 @@ name = "\improper Syndicate Donksoft Toy Vendor" desc = "An ages 8 and up approved vendor that dispenses toys. If you were to find the right wires, you can unlock the adult mode setting!" icon_state = "syndi" - req_access = list(ACCESS_SECURITY) product_slogans = "Get your cool toys today!;Trigger a valid hunter today!;Quality toy weapons for cheap prices!;Give them to HoPs for all access!;Give them to HoS to get perma briged!" product_ads = "Feel robust with your toys!;Express your inner child today!;Toy weapons don't kill people, but valid hunters do!;Who needs responsibilities when you have toy weapons?;Make your next murder FUN!" vend_reply = "Come back for more!" From d4263fadff8b3ce7c75e6e1ff86d71de5cf1dd14 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 26 Jun 2018 13:34:48 -0700 Subject: [PATCH 129/133] Automatic changelog generation for PR #38725 [ci skip] --- html/changelogs/AutoChangeLog-pr-38725.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38725.yml diff --git a/html/changelogs/AutoChangeLog-pr-38725.yml b/html/changelogs/AutoChangeLog-pr-38725.yml new file mode 100644 index 00000000000..edb95ab6352 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38725.yml @@ -0,0 +1,4 @@ +author: "Dax Dupont" +delete-after: True +changes: + - tweak: "The tree of liberty must be refreshed from time to time with the blood of patriots and tyrants. We've removed access requirements from liberation station vendors." From 9a5684556a181e4cb45b1d47df83c89833f7dcdc Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Tue, 26 Jun 2018 13:38:04 -0700 Subject: [PATCH 130/133] Fix flags_1 overlap and VV, remove CTF deathrattle (#38711) --- code/__DEFINES/flags.dm | 3 +-- code/_globalvars/bitfields.dm | 10 +++++++--- code/game/area/areas/centcom.dm | 1 - code/modules/mob/living/death.dm | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 98d75eaa262..3ed28c46934 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -29,9 +29,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define NOJAUNT_1 (1<<0) #define UNUSED_RESERVATION_TURF_1 (1<<1) #define CAN_BE_DIRTY_1 (1<<2) // If a turf can be made dirty at roundstart. This is also used in areas. -#define NO_DEATHRATTLE_1 (1<<4) // Do not notify deadchat about any deaths that occur on this turf. -#define NO_RUINS_1 (1<<5) //Blocks ruins spawning on the turf #define NO_LAVA_GEN_1 (1<<6) //Blocks lava rivers being generated on the turf +#define NO_RUINS_1 (1<<10) //Blocks ruins spawning on the turf /* These defines are used specifically with the atom/pass_flags bitmask diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 53c92a295d7..2ad35a6b1b4 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -117,11 +117,15 @@ GLOBAL_LIST_INIT(bitfields, list( "NOJAUNT_1" = NOJAUNT_1, "UNUSED_RESERVATION_TURF_1" = UNUSED_RESERVATION_TURF_1, "CAN_BE_DIRTY_1" = CAN_BE_DIRTY_1, - "HEAR_1 / NO_DEATHRATTLE_1 (turfs)" = HEAR_1, - "CHECK_RICOCHET_1 / NO_RUINS_1 (turfs)" = CHECK_RICOCHET_1, - "CONDUCT_1 / NO_LAVA_GEN_1" = CONDUCT_1, + "HEAR_1" = HEAR_1, + "CHECK_RICOCHET_1" = CHECK_RICOCHET_1, + "CONDUCT_1" = CONDUCT_1, + "NO_LAVA_GEN_1" = NO_LAVA_GEN_1, "NODECONSTRUCT_1" = NODECONSTRUCT_1, "OVERLAY_QUEUED_1" = OVERLAY_QUEUED_1, + "ON_BORDER_1" = ON_BORDER_1, + "NO_RUINS_1" = NO_RUINS_1, + "PREVENT_CLICK_UNDER_1" = PREVENT_CLICK_UNDER_1, "HOLOGRAM_1" = HOLOGRAM_1, "TESLA_IGNORE_1" = TESLA_IGNORE_1, "INITIALIZED_1" = INITIALIZED_1, diff --git a/code/game/area/areas/centcom.dm b/code/game/area/areas/centcom.dm index f5449369b5c..30de1314c99 100644 --- a/code/game/area/areas/centcom.dm +++ b/code/game/area/areas/centcom.dm @@ -121,7 +121,6 @@ icon_state = "yellow" requires_power = FALSE has_gravity = STANDARD_GRAVITY - flags_1 = NO_DEATHRATTLE_1 /area/ctf/control_room name = "Control Room A" diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 7542c0c79cb..4b6280f1f9e 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -54,7 +54,7 @@ var/turf/T = get_turf(src) for(var/obj/item/I in contents) I.on_mob_death(src, gibbed) - if(mind && mind.name && mind.active && (!(T.flags_1 & NO_DEATHRATTLE_1))) + if(mind && mind.name && mind.active && !istype(T.loc, /area/ctf)) var/rendered = "[mind.name] has died at [get_area_name(T)]." deadchat_broadcast(rendered, follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE) if(mind) From 4c480827a6237615d5bf25a30497bfbbcedb73df Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 26 Jun 2018 13:38:08 -0700 Subject: [PATCH 131/133] Automatic changelog generation for PR #38711 [ci skip] --- html/changelogs/AutoChangeLog-pr-38711.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38711.yml diff --git a/html/changelogs/AutoChangeLog-pr-38711.yml b/html/changelogs/AutoChangeLog-pr-38711.yml new file mode 100644 index 00000000000..27afc1fafb7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38711.yml @@ -0,0 +1,4 @@ +author: "SpaceManiac" +delete-after: True +changes: + - bugfix: "Deaths in the CTF arena are no longer announced to deadchat." From 5e50144e784ced2a2a488fe3fe6120af03a17e91 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Tue, 26 Jun 2018 13:42:29 -0700 Subject: [PATCH 132/133] Destructive analyzers can now destroy anything again, even if it has no materials (#38690) * Update rdconsole.dm * Update destructive_analyzer.dm --- code/modules/research/destructive_analyzer.dm | 7 ++++++- code/modules/research/rdconsole.dm | 6 +++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 4307626b828..e62b0808b60 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -126,7 +126,12 @@ Note: Must be placed within 3 tiles of the R&D Console var/list/point_value = techweb_item_point_check(loaded_item) if(linked_console.stored_research.deconstructed_items[loaded_item.type]) point_value = list() - var/choice = input("Are you sure you want to destroy [loaded_item] for [length(point_value) ? "[json_encode(point_value)] points" : "material reclamation"]?") in list("Proceed", "Cancel") + var/user_mode_string = "" + if(length(point_value)) + user_mode_string = " for [json_encode(point_value)] points" + else if(loaded_item.materials.len) + user_mode_string = " for material reclamation" + var/choice = input("Are you sure you want to destroy [loaded_item][user_mode_string]?") in list("Proceed", "Cancel") if(choice == "Cancel") return FALSE if(QDELETED(loaded_item) || QDELETED(linked_console) || !user.Adjacent(linked_console) || QDELETED(src)) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index eb4c3b69a4b..0ba9312314b 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -594,9 +594,9 @@ Nothing else in the console has ID requirements. l += "This item is worth:
          [techweb_point_display_generic(point_values)]!" l += "
        [RDSCREEN_NOBREAK]" - var/list/materials = linked_destroy.loaded_item.materials - if (materials.len) - l += "
        Material Reclamation" + if(!(linked_destroy.loaded_item.resistance_flags & INDESTRUCTIBLE)) + var/list/materials = linked_destroy.loaded_item.materials + l += "
        [materials.len? "Material Reclamation" : "Destroy Item"]" for (var/M in materials) l += "* [CallMaterialName(M)] x [materials[M]]" l += "
        [RDSCREEN_NOBREAK]" From 87b6ca9f1aace92993decb3d95e6947287c0e353 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 26 Jun 2018 13:42:33 -0700 Subject: [PATCH 133/133] Automatic changelog generation for PR #38690 [ci skip] --- html/changelogs/AutoChangeLog-pr-38690.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-38690.yml diff --git a/html/changelogs/AutoChangeLog-pr-38690.yml b/html/changelogs/AutoChangeLog-pr-38690.yml new file mode 100644 index 00000000000..23f21fd4d64 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-38690.yml @@ -0,0 +1,4 @@ +author: "kevinz000" +delete-after: True +changes: + - rscadd: "R&D deconstructors can now destroy things regardless of if there's a point value or material"