From 9e43ca826119ae376e6c740f42f77171467c18ca Mon Sep 17 00:00:00 2001 From: Michiyamenotehifunana <31995558+Michiyamenotehifunana@users.noreply.github.com> Date: Sun, 19 Nov 2017 23:16:27 +0800 Subject: [PATCH 01/98] Adds recolorable clothes --- .../icons/polyclothes/item/uniform.dmi | Bin 0 -> 1410 bytes .../icons/polyclothes/mob/uniform.dmi | Bin 0 -> 9530 bytes modular_citadel/polychromic_clothes.dm | 158 ++++++++++++++++++ tgstation.dme | 1 + 4 files changed, 159 insertions(+) create mode 100644 modular_citadel/icons/polyclothes/item/uniform.dmi create mode 100644 modular_citadel/icons/polyclothes/mob/uniform.dmi create mode 100644 modular_citadel/polychromic_clothes.dm diff --git a/modular_citadel/icons/polyclothes/item/uniform.dmi b/modular_citadel/icons/polyclothes/item/uniform.dmi new file mode 100644 index 0000000000000000000000000000000000000000..4406da89fa21b9ed37fb19c43e165851abcc8546 GIT binary patch literal 1410 zcmV-|1%3L7P)005u}0{{R3yb+fl0001oP)t-smeGfe zjg6U^ncv^v`1tq{5fT6Y|9*ac0000eC@4NYK5A-e(9qBZ4+<(41~VH6hV=-0C=3WlsyZ=Fc604=2wJvR{UBW)E4Pr5go;$*l5mvq+C*^|K6I6 zE;+EKuE2K#QAd3KC)j8t@@5=i_FVoUUG9mr(h6euE@W z3(!0*GLEM%0X+--CTWdYf>^0#Msk%3jV45CwhkfcI%pinVn`gw6 zEVf7N1MT2+e}bDk*#H0o#7RU!RCt{2oQrbWFc3v$8AOPjr0?cIY#@QyrT_nZ-Ic+8 zX)R@i>P%-(Em^~5wRdEpkey7G5(GgIP83>0uXVxHb5oS%Y(Afxvh+JZ9d4u^gE593 zs|tuVbLnAvPTo0-D9M7^#^J-{bwrcnvyTk-8XE#bA)wgM-0o z_8{)Eqrnkfjp#8X8Y~Tc%Jh2LDU)V!0R|k!!vBUrC*nP$vr=5lmzRsn<@|!TM1^N` zR@^~c@(<$F_^1TsqD(TF5+9KPD6yL;UJwL95ClOG1mP`HXjfe{hA5$i^z0N`Yom;& zYP=ymH&`0dT7e0Fc_^f3#}x*QHdJXKq-Uov_GrKo2FLaM6oUa`4+ix7Skq&fdUmX> z980F2ovZ7ccke&kTwhIPAVgJZjaM~Md=U5qd|ZBlexmpwda0M6q3Ma@{|ml+y}i9v z(C+T1w&LX;0fTpVpW2KMSh|OY2L%lmQV;||5ClOG-W1lZpkGa4& zd=IhL-N36y8nj%4usJL~y9zrCH$qp09t*o}gDGK&@BzD#$Ka@*9at4-pz00$b(Dnk ze`9i3A)cO{pDV=Evx6mGyhsB9-TrYuJ8*jR7yS-9_Ja6x@$NYJ5Zn_>jQ#759)!jgQQcG<#~iAP9mW2to?*`$k>Y)yOYR<9Y-T z&kt@O^}1ezjmH0mL1)en4dRa@mO=Qk`G{XSDT61SZ%{oBqu0l8+?RFiHvSm~ojLz7 zB<2qrw66SSNrNYSDudQl2%!-Z4Ei(%RWp<}i1@_PN8=g24p#ug@*h*r4puKKL)ZR7 zdTtv0^FY_gM|{+Yc+cppY@eQY`^|p${Iuo8dq!tv+q}HIxW+V?7$1>fvuPUaxCYbW zBQk7Z5gO7);2KX0USxN6tZKFzJ*@G1$Th2L|DoBOIWv40#N;p3zwi9=;!T`}KYY zcV4__^c%zctm$Fe7U-~J8cd9jNPr(u?6?Ng;$t%OE5MyUHC_+|K@c+V1Bk6wrLAXW QlK=n!07*qoM6N<$f^HImmH+?% literal 0 HcmV?d00001 diff --git a/modular_citadel/icons/polyclothes/mob/uniform.dmi b/modular_citadel/icons/polyclothes/mob/uniform.dmi new file mode 100644 index 0000000000000000000000000000000000000000..3cccdf096420326e792339dbc16f111bad320cef GIT binary patch literal 9530 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.Cm-M$+y5huZwY|zH&oizEM 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 P3You can't do that right now!") + return + if(!in_range(src, user)) + return + if(user.incapacitated() || !istype(user) || !in_range(src, user)) + return + + var/choice = input(user,"polychromic thread options", "Clothing Recolor") in list("Primary Color","Secondary Color","Tertiary Color","*CANCEL*") + switch(choice) + + if("Primary Color") + var/primary_color_input = input(usr,"Choose Primary Color") as color|null + if(primary_color_input) + primary_color = sanitize_hexcolor(primary_color_input, desired_format=6, include_crunch=1) + update_icon() + user.update_inv_w_uniform() + + if("Secondary Color") + var/secondary_color_input = input(usr,"Choose Secondary Color") as color|null + if(secondary_color_input) + secondary_color = sanitize_hexcolor(secondary_color_input, desired_format=6, include_crunch=1) + update_icon() + user.update_inv_w_uniform() + + if("Tertiary Color") + var/tertiary_color_input = input(usr,"Choose Tertiary Color") as color|null + if(tertiary_color_input) + tertiary_color = sanitize_hexcolor(tertiary_color_input, desired_format=6, include_crunch=1) + update_icon() + user.update_inv_w_uniform() + +/obj/item/clothing/under/polychromic/worn_overlays(isinhands, icon_file) + . = ..() + if(!isinhands) + if(hasprimary) + var/mutable_appearance/primary_worn = mutable_appearance('modular_citadel/icons/polyclothes/mob/uniform.dmi', "[item_color]-primary") + primary_worn.color = primary_color + . += primary_worn + if(hassecondary) + var/mutable_appearance/secondary_worn = mutable_appearance('modular_citadel/icons/polyclothes/mob/uniform.dmi', "[item_color]-secondary") + secondary_worn.color = secondary_color + . += secondary_worn + if(hastertiary) + var/mutable_appearance/tertiary_worn = mutable_appearance('modular_citadel/icons/polyclothes/mob/uniform.dmi', "[item_color]-tertiary") + tertiary_worn.color = tertiary_color + . += tertiary_worn + +/obj/item/clothing/under/polychromic/examine(mob/user) + ..() + to_chat(user, "Alt-click to recolor it.") + +/obj/item/clothing/under/polychromic/Initialize() + ..() + update_icon() + +/obj/item/clothing/under/polychromic/shirt + name = "polychromic button-up shirt" + desc = "A fancy button-up shirt made with polychromic threads." + icon_state = "polysuit" + item_color = "polysuit" + item_state = "sl_suit" + hasprimary = TRUE + hassecondary = TRUE + hastertiary = TRUE + primary_color = "#FFFFFF" //RGB in hexcode + secondary_color = "#353535" + tertiary_color = "#353535" + +/obj/item/clothing/under/polychromic/kilt + name = "polychromic kilt" + desc = "It's not a skirt!" + icon_state = "polykilt" + item_color = "polykilt" + item_state = "kilt" + hasprimary = TRUE + hassecondary = TRUE + hastertiary = TRUE + primary_color = "#FFFFFF" //RGB in hexcode + secondary_color = "#F08080" + tertiary_color = "#808080" + +/obj/item/clothing/under/polychromic/skirt + name = "polychromic skirt" + desc = "A fancy skirt made with polychromic threads." + icon_state = "polyskirt" + item_color = "polyskirt" + item_state = "rainbow" + hasprimary = TRUE + hassecondary = TRUE + hastertiary = TRUE + primary_color = "#FFFFFF" //RGB in hexcode + secondary_color = "#F08080" + tertiary_color = "#808080" + +/obj/item/clothing/under/polychromic/shorts + name = "polychromic shorts" + desc = "For ease of movement and style." + icon_state = "polyshorts" + item_color = "polyshorts" + item_state = "rainbow" + hasprimary = TRUE + hassecondary = TRUE + hastertiary = TRUE + primary_color = "#353535" //RGB in hexcode + secondary_color = "#808080" + tertiary_color = "#808080" + +/obj/item/clothing/under/polychromic/jumpsuit + name = "polychromic tri-tone jumpsuit" + desc = "A fancy jumpsuit made with polychromic threads." + icon_state = "polyjump" + item_color = "polyjump" + item_state = "rainbow" + hasprimary = TRUE + hassecondary = TRUE + hastertiary = TRUE + primary_color = "#FFFFFF" //RGB in hexcode + secondary_color = "#808080" + tertiary_color = "#FF3535" \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index b68ee744a2..07cb24d372 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -2403,4 +2403,5 @@ #include "interface\skin.dmf" #include "modular_citadel\cit_medkits.dm" #include "modular_citadel\cit_screenshake.dm" +#include "modular_citadel\polychromic_clothes.dm" // END_INCLUDE From f1c54c0b779902ffd4285e145428a3032f181a1b Mon Sep 17 00:00:00 2001 From: Michiyamenotehifunana <31995558+Michiyamenotehifunana@users.noreply.github.com> Date: Tue, 21 Nov 2017 21:27:51 +0800 Subject: [PATCH 02/98] implementation, changed 5 pixels --- .../icons/polyclothes/mob/uniform.dmi | Bin 9530 -> 9550 bytes modular_citadel/polychromic_clothes.dm | 38 +++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/modular_citadel/icons/polyclothes/mob/uniform.dmi b/modular_citadel/icons/polyclothes/mob/uniform.dmi index 3cccdf096420326e792339dbc16f111bad320cef..84c957d7112ade2d36732b7816efcfdaedc600f3 100644 GIT binary patch delta 8858 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 M?-^=WX*#_AKYKdY{Qv*} diff --git a/modular_citadel/polychromic_clothes.dm b/modular_citadel/polychromic_clothes.dm index 826df3dd48..b14a083f3e 100644 --- a/modular_citadel/polychromic_clothes.dm +++ b/modular_citadel/polychromic_clothes.dm @@ -155,4 +155,40 @@ hastertiary = TRUE primary_color = "#FFFFFF" //RGB in hexcode secondary_color = "#808080" - tertiary_color = "#FF3535" \ No newline at end of file + tertiary_color = "#FF3535" + +//replaces the jumpsuit contents of the mixed wardrobe + +/obj/structure/closet/wardrobe/mixed/PopulateContents() + if(prob(40)) + new /obj/item/clothing/suit/jacket(src) + if(prob(40)) + new /obj/item/clothing/suit/jacket(src) + new /obj/item/clothing/under/polychromic/jumpsuit(src) + new /obj/item/clothing/under/polychromic/jumpsuit(src) + new /obj/item/clothing/under/polychromic/jumpsuit(src) + new /obj/item/clothing/under/polychromic/shirt(src) + new /obj/item/clothing/under/polychromic/shirt(src) + new /obj/item/clothing/under/polychromic/shirt(src) + new /obj/item/clothing/under/polychromic/kilt(src) + new /obj/item/clothing/under/polychromic/kilt(src) + new /obj/item/clothing/under/polychromic/kilt(src) + new /obj/item/clothing/under/polychromic/skirt(src) + new /obj/item/clothing/under/polychromic/skirt(src) + new /obj/item/clothing/under/polychromic/skirt(src) + new /obj/item/clothing/under/polychromic/shorts(src) + new /obj/item/clothing/under/polychromic/shorts(src) + new /obj/item/clothing/under/polychromic/shorts(src) + new /obj/item/clothing/mask/bandana/red(src) + new /obj/item/clothing/mask/bandana/red(src) + new /obj/item/clothing/mask/bandana/blue(src) + new /obj/item/clothing/mask/bandana/blue(src) + new /obj/item/clothing/mask/bandana/gold(src) + new /obj/item/clothing/mask/bandana/gold(src) + new /obj/item/clothing/shoes/sneakers/black(src) + new /obj/item/clothing/shoes/sneakers/brown(src) + new /obj/item/clothing/shoes/sneakers/white(src) + if(prob(30)) + new /obj/item/clothing/suit/hooded/wintercoat(src) + new /obj/item/clothing/shoes/winterboots(src) + return \ No newline at end of file From c43591982ab83962d1706a6e4c6302af9807d1bb Mon Sep 17 00:00:00 2001 From: oranges Date: Sat, 25 Nov 2017 00:45:44 +1300 Subject: [PATCH 03/98] Refactor on_reagent_change to pass through the change type --- code/__DEFINES/reagents.dm | 7 ++++++- code/datums/datumvars.dm | 2 +- code/game/mecha/equipment/tools/medical_tools.dm | 2 +- code/game/mecha/equipment/tools/work_tools.dm | 3 --- code/game/objects/items/devices/scanners.dm | 2 +- code/modules/food_and_drinks/drinks/drinks.dm | 8 ++++---- .../food_and_drinks/drinks/drinks/drinkingglass.dm | 10 ++++++++-- code/modules/food_and_drinks/food/condiment.dm | 10 +++++----- code/modules/food_and_drinks/food/customizables.dm | 2 +- code/modules/hydroponics/biogenerator.dm | 2 +- code/modules/integrated_electronics/passive/power.dm | 2 +- .../integrated_electronics/subtypes/reagents.dm | 12 ++++++------ code/modules/mob/living/simple_animal/bot/secbot.dm | 2 +- code/modules/reagents/chemistry/holder.dm | 9 ++++----- .../reagents/reagent_containers/blood_pack.dm | 2 +- code/modules/reagents/reagent_containers/bottle.dm | 2 +- code/modules/reagents/reagent_containers/glass.dm | 2 +- code/modules/reagents/reagent_containers/syringes.dm | 2 +- 18 files changed, 44 insertions(+), 37 deletions(-) diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm index 9e17719e76..c85365db90 100644 --- a/code/__DEFINES/reagents.dm +++ b/code/__DEFINES/reagents.dm @@ -11,4 +11,9 @@ #define INGEST 2 //ingestion #define VAPOR 3 //foam, spray, blob attack #define PATCH 4 //patches -#define INJECT 5 //injection \ No newline at end of file +#define INJECT 5 //injection + +//defines passed through to the on_reagent_change proc +#define DEL_REAGENT 1 //reagent deleted (fully cleared) +#define ADD_REAGENT 2 // reagent added +#define REM_REAGENT 3 // reagent removed (may still exist) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 894f34345d..c609e63f0f 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -31,7 +31,7 @@ .["Show VV To Player"] = "?_src_=vars;[HrefToken(TRUE)];expose=[REF(src)]" -/datum/proc/on_reagent_change() +/datum/proc/on_reagent_change(changetype) return diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index cc0f935628..ebac3fb6d2 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -504,7 +504,7 @@ return 1 return -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/on_reagent_change() +/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/on_reagent_change(changetype) ..() update_equip_info() return diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 7ec90ab7ce..6d9fc9e13e 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -179,9 +179,6 @@ /obj/item/mecha_parts/mecha_equipment/extinguisher/get_equip_info() return "[..()] \[[src.reagents.total_volume]\]" -/obj/item/mecha_parts/mecha_equipment/extinguisher/on_reagent_change() - return - /obj/item/mecha_parts/mecha_equipment/extinguisher/can_attach(obj/mecha/working/M as obj) if(..()) if(istype(M)) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index cbe1161422..bc99a28eea 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -417,7 +417,7 @@ MASS SPECTROMETER ..() create_reagents(5) -/obj/item/device/mass_spectrometer/on_reagent_change() +/obj/item/device/mass_spectrometer/on_reagent_change(changetype) if(reagents.total_volume) icon_state = initial(icon_state) + "_s" else diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index 72e3621131..5d3cd09f51 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -15,7 +15,7 @@ resistance_flags = NONE var/isGlass = TRUE //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it -/obj/item/reagent_containers/food/drinks/on_reagent_change() +/obj/item/reagent_containers/food/drinks/on_reagent_change(changetype) if (gulp_size < 5) gulp_size = 5 else @@ -209,7 +209,7 @@ item_state = "coffee" spillable = TRUE -/obj/item/reagent_containers/food/drinks/mug/on_reagent_change() +/obj/item/reagent_containers/food/drinks/mug/on_reagent_change(changetype) if(reagents.total_volume) icon_state = "tea" else @@ -261,7 +261,7 @@ spillable = TRUE isGlass = FALSE -/obj/item/reagent_containers/food/drinks/sillycup/on_reagent_change() +/obj/item/reagent_containers/food/drinks/sillycup/on_reagent_change(changetype) if(reagents.total_volume) icon_state = "water_cup" else @@ -289,7 +289,7 @@ transfer_fingerprints_to(B) qdel(src) -/obj/item/reagent_containers/food/drinks/sillycup/smallcarton/on_reagent_change() +/obj/item/reagent_containers/food/drinks/sillycup/smallcarton/on_reagent_change(changetype) if (reagents.reagent_list.len) switch(reagents.get_master_reagent_id()) if("orangejuice") diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm index 9f2f6650bc..875185afb1 100644 --- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm @@ -12,7 +12,7 @@ resistance_flags = ACID_PROOF unique_rename = 1 -/obj/item/reagent_containers/food/drinks/drinkingglass/on_reagent_change() +/obj/item/reagent_containers/food/drinks/drinkingglass/on_reagent_change(changetype) cut_overlays() if(reagents.reagent_list.len) var/datum/reagent/R = reagents.get_master_reagent() @@ -46,7 +46,7 @@ volume = 15 materials = list(MAT_GLASS=100) -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change() +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change(changetype) cut_overlays() if (gulp_size < 15) @@ -74,9 +74,15 @@ desc = "A shot glass - the universal symbol for bad decisions." return +<<<<<<< HEAD /obj/item/reagent_containers/food/drinks/drinkingglass/filled/New() ..() on_reagent_change() +======= +/obj/item/reagent_containers/food/drinks/drinkingglass/filled/Initialize() + . = ..() + on_reagent_change(ADD_REAGENT) +>>>>>>> 73b25d7... Refactor on_reagent_change to pass through the change type (#32805) /obj/item/reagent_containers/food/drinks/drinkingglass/filled/soda name = "Soda Water" diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm index c115ef51af..3e6e2e8450 100644 --- a/code/modules/food_and_drinks/food/condiment.dm +++ b/code/modules/food_and_drinks/food/condiment.dm @@ -13,7 +13,7 @@ container_type = OPENCONTAINER_1 possible_transfer_amounts = list(1, 5, 10, 15, 20, 25, 30, 50) volume = 50 - //Possible_states has the reagent id as key and a list of, in order, the icon_state, the name and the desc as values. Used in the on_reagent_change() to change names, descs and sprites. + //Possible_states has the reagent id as key and a list of, in order, the icon_state, the name and the desc as values. Used in the on_reagent_change(changetype) to change names, descs and sprites. var/list/possible_states = list( "ketchup" = list("ketchup", "ketchup bottle", "You feel more American already."), "capsaicin" = list("hotsauce", "hotsauce bottle", "You can almost TASTE the stomach ulcers now!"), @@ -80,7 +80,7 @@ var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) to_chat(user, "You transfer [trans] units of the condiment to [target].") -/obj/item/reagent_containers/food/condiment/on_reagent_change() +/obj/item/reagent_containers/food/condiment/on_reagent_change(changetype) if(!possible_states.len) return if(reagents.reagent_list.len > 0) @@ -126,7 +126,7 @@ list_reagents = list("sodiumchloride" = 20) possible_states = list() -/obj/item/reagent_containers/food/condiment/saltshaker/on_reagent_change() +/obj/item/reagent_containers/food/condiment/saltshaker/on_reagent_change(changetype) if(reagents.reagent_list.len == 0) icon_state = "emptyshaker" else @@ -164,7 +164,7 @@ list_reagents = list("blackpepper" = 20) possible_states = list() -/obj/item/reagent_containers/food/condiment/peppermill/on_reagent_change() +/obj/item/reagent_containers/food/condiment/peppermill/on_reagent_change(changetype) if(reagents.reagent_list.len == 0) icon_state = "emptyshaker" else @@ -255,7 +255,7 @@ src.reagents.trans_to(target, amount_per_transfer_from_this) qdel(src) -/obj/item/reagent_containers/food/condiment/pack/on_reagent_change() +/obj/item/reagent_containers/food/condiment/pack/on_reagent_change(changetype) if(reagents.reagent_list.len > 0) var/main_reagent = reagents.get_master_reagent_id() if(main_reagent in possible_states) diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index 176e3fe8eb..3351a67d39 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -313,7 +313,7 @@ . = ..() return -/obj/item/reagent_containers/glass/bowl/on_reagent_change() +/obj/item/reagent_containers/glass/bowl/on_reagent_change(changetype) ..() update_icon() diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index d46875eb00..ff3c8b4309 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -53,7 +53,7 @@ productivity = P max_items = max_storage -/obj/machinery/biogenerator/on_reagent_change() //When the reagents change, change the icon as well. +/obj/machinery/biogenerator/on_reagent_change(changetype) //When the reagents change, change the icon as well. update_icon() /obj/machinery/biogenerator/update_icon() diff --git a/code/modules/integrated_electronics/passive/power.dm b/code/modules/integrated_electronics/passive/power.dm index 8b6cb562f0..7c7439d45b 100644 --- a/code/modules/integrated_electronics/passive/power.dm +++ b/code/modules/integrated_electronics/passive/power.dm @@ -113,7 +113,7 @@ push_data() ..() -/obj/item/integrated_circuit/passive/power/chemical_cell/on_reagent_change() +/obj/item/integrated_circuit/passive/power/chemical_cell/on_reagent_change(changetype) set_pin_data(IC_OUTPUT, 1, reagents.total_volume) push_data() diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index bdea98bae3..1793869237 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -28,9 +28,10 @@ var/smoke_radius = 5 var/notified = FALSE -/obj/item/integrated_circuit/reagent/smoke/on_reagent_change() - //reset warning - notified = FALSE +/obj/item/integrated_circuit/reagent/smoke/on_reagent_change(changetype) + //reset warning only if we have reagents now + if(changetype == ADD_REAGENT) + notified = FALSE set_pin_data(IC_OUTPUT, 1, reagents.total_volume) push_data() @@ -48,7 +49,6 @@ if(S) S.set_up(reagents, smoke_radius, location, notified) if(!notified) - //we have now notified notified = TRUE S.start() @@ -83,7 +83,7 @@ ..() -/obj/item/integrated_circuit/reagent/injector/on_reagent_change() +/obj/item/integrated_circuit/reagent/injector/on_reagent_change(changetype) set_pin_data(IC_OUTPUT, 1, reagents.total_volume) push_data() @@ -263,7 +263,7 @@ push_data() ..() -/obj/item/integrated_circuit/reagent/storage/on_reagent_change() +/obj/item/integrated_circuit/reagent/storage/on_reagent_change(changetype) set_pin_data(IC_OUTPUT, 1, reagents.total_volume) push_data() diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 4300746901..03a5bec73b 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -54,7 +54,7 @@ new /obj/item/stock_parts/cell/potato(Tsec) var/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/S = new(Tsec) S.reagents.add_reagent("whiskey", 15) - S.on_reagent_change() + S.on_reagent_change(ADD_REAGENT) ..() /mob/living/simple_animal/bot/secbot/pingsky diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 5997d1d1c3..9c4bff72cb 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -1,5 +1,4 @@ - /////////////////////////////////////////////////////////////////////////////////// /datum/reagents @@ -428,7 +427,7 @@ reagent_list -= R update_total() if(my_atom) - my_atom.on_reagent_change() + my_atom.on_reagent_change(DEL_REAGENT) check_ignoreslow(my_atom) check_gofast(my_atom) check_goreallyfast(my_atom) @@ -526,7 +525,7 @@ R.volume += amount update_total() if(my_atom) - my_atom.on_reagent_change() + my_atom.on_reagent_change(ADD_REAGENT) R.on_merge(data, amount) if(!no_react) handle_reactions() @@ -545,7 +544,7 @@ update_total() if(my_atom) - my_atom.on_reagent_change() + my_atom.on_reagent_change(ADD_REAGENT) if(!no_react) handle_reactions() if(isliving(my_atom)) @@ -587,7 +586,7 @@ if(!safety)//So it does not handle reactions when it need not to handle_reactions() if(my_atom) - my_atom.on_reagent_change() + my_atom.on_reagent_change(REM_REAGENT) return TRUE return FALSE diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index d4b8e165ee..a4d766539f 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -13,7 +13,7 @@ reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null)) update_icon() -/obj/item/reagent_containers/blood/on_reagent_change() +/obj/item/reagent_containers/blood/on_reagent_change(changetype) if(reagents) var/datum/reagent/blood/B = reagents.has_reagent("blood") if(B && B.data && B.data["blood_type"]) diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index d6fad81f64..6fad290676 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -15,7 +15,7 @@ icon_state = "bottle" update_icon() -/obj/item/reagent_containers/glass/bottle/on_reagent_change() +/obj/item/reagent_containers/glass/bottle/on_reagent_change(changetype) update_icon() /obj/item/reagent_containers/glass/bottle/update_icon() diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 4e2e88c06d..20c4ba6933 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -126,7 +126,7 @@ . = ..() update_icon() -/obj/item/reagent_containers/glass/beaker/on_reagent_change() +/obj/item/reagent_containers/glass/beaker/on_reagent_change(changetype) update_icon() /obj/item/reagent_containers/glass/beaker/update_icon() diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 1bd1eba3c4..9695caab02 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -21,7 +21,7 @@ mode = SYRINGE_INJECT update_icon() -/obj/item/reagent_containers/syringe/on_reagent_change() +/obj/item/reagent_containers/syringe/on_reagent_change(changetype) update_icon() /obj/item/reagent_containers/syringe/pickup(mob/user) From 0b07f80b624bb81fa300480ac375db08e8fc37f4 Mon Sep 17 00:00:00 2001 From: Emmett Gaines Date: Fri, 24 Nov 2017 06:44:12 -0500 Subject: [PATCH 04/98] custom docker improvements (#32626) --- code/__HELPERS/maths.dm | 21 +++++++ code/controllers/subsystem/shuttle.dm | 30 ++++++++- code/modules/shuttle/navigation_computer.dm | 67 +++++++++++---------- code/modules/shuttle/shuttle.dm | 30 +++++---- 4 files changed, 103 insertions(+), 45 deletions(-) diff --git a/code/__HELPERS/maths.dm b/code/__HELPERS/maths.dm index ca76b715c4..f1c901ab9a 100644 --- a/code/__HELPERS/maths.dm +++ b/code/__HELPERS/maths.dm @@ -232,3 +232,24 @@ GLOBAL_LIST_INIT(sqrtTable, list(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, if(round(num) != num) return round(num--) else return num + +//proc/get_overlap() +// Returns a list where [1] is all x values and [2] is all y values that overlap between the given pair of rectangles +/proc/get_overlap(x1, y1, x2, y2, x3, y3, x4, y4) + var/list/region_x1 = list() + var/list/region_y1 = list() + var/list/region_x2 = list() + var/list/region_y2 = list() + + // These loops create loops filled with x/y values that the boundaries inhabit + // ex: list(5, 6, 7, 8, 9) + for(var/i in min(x1, x2) to max(x1, x2)) + region_x1["[i]"] = TRUE + for(var/i in min(y1, y2) to max(y1, y2)) + region_y1["[i]"] = TRUE + for(var/i in min(x3, x4) to max(x3, x4)) + region_x2["[i]"] = TRUE + for(var/i in min(y3, y4) to max(y3, y4)) + region_y2["[i]"] = TRUE + + return list(region_x1 & region_x2, region_y1 & region_y2) \ No newline at end of file diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index 00730fc1aa..75111a2017 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -622,6 +622,30 @@ SUBSYSTEM_DEF(shuttle) return TRUE /datum/controller/subsystem/shuttle/proc/get_containing_shuttle(atom/A) - for(var/obj/docking_port/mobile/M in mobile) - if(M.is_in_shuttle_bounds(A)) - return M + var/list/mobile_cache = mobile + for(var/i in 1 to mobile_cache.len) + var/obj/docking_port/port = mobile_cache[i] + if(port.is_in_shuttle_bounds(A)) + return port + +/datum/controller/subsystem/shuttle/proc/get_containing_dock(atom/A) + . = list() + var/list/stationary_cache = stationary + for(var/i in 1 to stationary_cache.len) + var/obj/docking_port/port = stationary_cache[i] + if(port.is_in_shuttle_bounds(A)) + . += port + +/datum/controller/subsystem/shuttle/proc/get_dock_overlap(x0, y0, x1, y1, z) + . = list() + var/list/stationary_cache = stationary + for(var/i in 1 to stationary_cache.len) + var/obj/docking_port/port = stationary_cache[i] + if(!port || port.z != z) + continue + var/list/bounds = port.return_coords() + var/list/overlap = get_overlap(x0, y0, x1, y1, bounds[1], bounds[2], bounds[3], bounds[4]) + var/list/xs = overlap[1] + var/list/ys = overlap[2] + if(xs.len && ys.len) + .[port] = overlap \ No newline at end of file diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm index 7f99829843..27ef7eec33 100644 --- a/code/modules/shuttle/navigation_computer.dm +++ b/code/modules/shuttle/navigation_computer.dm @@ -8,7 +8,6 @@ var/shuttlePortId = "" var/shuttlePortName = "" var/list/jumpto_ports = list() //hashset of ports to jump to and ignore for collision purposes - var/list/blacklisted_turfs //turfs we cannot go on, by default, any turf covered by a docking port that we did not place and cannot jump to var/obj/docking_port/stationary/my_port //the custom docking port placed by this console var/obj/docking_port/mobile/shuttle_port //the mobile docking port of the connected shuttle var/view_range = 7 @@ -56,7 +55,6 @@ I.pixel_x = x_off * 32 I.pixel_y = y_off * 32 the_eye.placement_images[I] = list(x_off, y_off) - generateBlacklistedTurfs() /obj/machinery/computer/camera_advanced/shuttle_docker/give_eye_control(mob/user) ..() @@ -110,54 +108,61 @@ /obj/machinery/computer/camera_advanced/shuttle_docker/proc/rotateLandingSpot() var/mob/camera/aiEye/remote/shuttle_docker/the_eye = eyeobj + var/list/image_cache = the_eye.placement_images the_eye.dir = turn(the_eye.dir, -90) - for(var/V in the_eye.placement_images) - var/image/I = V - var/list/coords = the_eye.placement_images[V] + for(var/i in 1 to image_cache.len) + var/image/pic = image_cache[i] + var/list/coords = image_cache[pic] var/Tmp = coords[1] coords[1] = coords[2] coords[2] = -Tmp - - I.pixel_x = coords[1] * 32 - I.pixel_y = coords[2] * 32 + pic.pixel_x = coords[1] * 32 + pic.pixel_y = coords[2] * 32 var/Tmp = x_offset x_offset = y_offset y_offset = -Tmp checkLandingSpot() -/obj/machinery/computer/camera_advanced/shuttle_docker/proc/checkLandingTurf(turf/T) - return T && (shuttle_port.shuttle_areas[T.loc] || (!blacklisted_turfs || !blacklisted_turfs[T]) && (!space_turfs_only || isspaceturf(T)) ) && (T.x > 1 && T.y > 1 && T.x < world.maxx && T.y < world.maxy) - -/obj/machinery/computer/camera_advanced/shuttle_docker/proc/generateBlacklistedTurfs() - blacklisted_turfs = list() - for(var/V in SSshuttle.stationary) - if(!V) - continue - var/obj/docking_port/stationary/S = V - if(z_lock.len && !(S.z in z_lock)) - continue - if((S.id == shuttlePortId) || jumpto_ports[S.id]) - continue - for(var/T in S.return_turfs()) - blacklisted_turfs[T] = TRUE - /obj/machinery/computer/camera_advanced/shuttle_docker/proc/checkLandingSpot() var/mob/camera/aiEye/remote/shuttle_docker/the_eye = eyeobj var/turf/eyeturf = get_turf(the_eye) if(!eyeturf) return - var/landing_spot_clear = TRUE - for(var/V in the_eye.placement_images) - var/image/I = V + var/list/bounds = shuttle_port.return_coords(the_eye.x - x_offset, the_eye.y - y_offset, the_eye.dir) + var/list/overlappers = SSshuttle.get_dock_overlap(bounds[1], bounds[2], bounds[3], bounds[4], the_eye.z) + . = TRUE + var/list/image_cache = the_eye.placement_images + for(var/i in 1 to image_cache.len) + var/image/I = image_cache[i] I.loc = eyeturf - var/list/coords = the_eye.placement_images[V] + var/list/coords = image_cache[I] var/turf/T = locate(eyeturf.x + coords[1], eyeturf.y + coords[2], eyeturf.z) - if(checkLandingTurf(T)) + if(checkLandingTurf(T, overlappers)) I.icon_state = "green" else I.icon_state = "red" - landing_spot_clear = FALSE - return landing_spot_clear + . = FALSE + +/obj/machinery/computer/camera_advanced/shuttle_docker/proc/checkLandingTurf(turf/T, list/overlappers) + // Too close to the map edge is never allowed + if(!T || T.x == 1 || T.y == 1 || T.x == world.maxx || T.y == world.maxy) + return FALSE + // If it's one of our shuttle areas assume it's ok to be there + if(shuttle_port.shuttle_areas[T.loc]) + return TRUE + // Checking for overlapping dock boundaries + for(var/i in 1 to overlappers.len) + var/obj/docking_port/port = overlappers[i] + if(port == my_port) + continue + var/list/overlap = overlappers[port] + var/list/xs = overlap[1] + var/list/ys = overlap[2] + if(xs["[T.x]"] && ys["[T.y]"]) + return FALSE + if(space_turfs_only && !isspaceturf(T)) + return FALSE + return TRUE /mob/camera/aiEye/remote/shuttle_docker visible_icon = FALSE diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 642037bdf1..2f0fb711bd 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -182,6 +182,25 @@ if(P) return P.id +/obj/docking_port/proc/is_in_shuttle_bounds(atom/A) + var/turf/T = get_turf(A) + if(T.z != z) + return FALSE + var/list/bounds = return_coords() + var/x0 = bounds[1] + var/y0 = bounds[2] + var/x1 = bounds[3] + var/y1 = bounds[4] + if(x0 <= x1 && !IsInRange(T.x, x0, x1)) + return FALSE + else if(!IsInRange(T.x, x1, x0)) + return FALSE + if(y0 <= y1 && !IsInRange(T.y, y0, y1)) + return FALSE + else if(!IsInRange(T.y, y1, y0)) + return FALSE + return TRUE + /obj/docking_port/stationary name = "dock" @@ -855,17 +874,6 @@ for(var/obj/machinery/door/E in A) //dumb, I know, but playing it on the engines doesn't do it justice playsound(E, s, 100, FALSE, max(width, height) - world.view) -/obj/docking_port/mobile/proc/is_in_shuttle_bounds(atom/A) - var/turf/T = get_turf(A) - if(T.z != z) - return FALSE - var/list/bounds= return_coords() - var/turf/T0 = locate(bounds[1],bounds[2],z) - var/turf/T1 = locate(bounds[3],bounds[4],z) - if(T in block(T0,T1)) - return TRUE - return FALSE - // Losing all initial engines should get you 2 // Adding another set of engines at 0.5 time /obj/docking_port/mobile/proc/alter_engines(mod) From 9806de310deece29c70422d238074ee2a717d513 Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Fri, 24 Nov 2017 03:05:30 -0800 Subject: [PATCH 06/98] Remove NODROP from water tank misters (#32995) --- code/game/objects/items/tanks/watertank.dm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index b010f79b00..5f0345aa40 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -93,6 +93,10 @@ else return ..() +/obj/item/watertank/dropped(mob/user) + ..() + remove_noz() + // This mister item is intended as an extension of the watertank and always attached to it. // Therefore, it's designed to be "locked" to the player's hands or extended back onto // the watertank backpack. Allowing it to be placed elsewhere or created without a parent @@ -109,7 +113,7 @@ amount_per_transfer_from_this = 50 possible_transfer_amounts = list(25,50,100) volume = 500 - flags_1 = NODROP_1 | NOBLUDGEON_1 + flags_1 = NOBLUDGEON_1 container_type = OPENCONTAINER_1 slot_flags = 0 @@ -221,7 +225,6 @@ precision = 1 cooling_power = 5 w_class = WEIGHT_CLASS_HUGE - flags_1 = NODROP_1 //Necessary to ensure that the nozzle and tank never separate var/obj/item/watertank/tank var/nozzle_mode = 0 var/metal_synthesis_cooldown = 0 From 12aa356f10203c74e89f27256eef20472f955e5e Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Fri, 24 Nov 2017 06:04:50 -0500 Subject: [PATCH 08/98] Updates some item drops to use drop_location() --- .../miniantags/slaughter/slaughterevent.dm | 2 +- code/game/machinery/iv_drip.dm | 2 +- .../crates_lockers/closets/secure/cargo.dm | 2 +- code/game/objects/structures/girders.dm | 2 +- code/game/turfs/simulated/minerals.dm | 2 +- .../machinery/components/unary_devices/cryo.dm | 4 ++-- code/modules/awaymissions/mission_code/Academy.dm | 14 +++++++------- code/modules/food_and_drinks/food/snacks/meat.dm | 2 +- .../food_and_drinks/kitchen_machinery/juicer.dm | 2 +- code/modules/hydroponics/biogenerator.dm | 2 +- .../mob/living/simple_animal/bot/cleanbot.dm | 2 +- .../mob/living/simple_animal/bot/ed209bot.dm | 10 +++++----- .../mob/living/simple_animal/bot/floorbot.dm | 6 +++--- .../mob/living/simple_animal/bot/honkbot.dm | 6 +++--- .../modules/mob/living/simple_animal/bot/medbot.dm | 6 +++--- .../mob/living/simple_animal/bot/mulebot.dm | 4 ++-- .../modules/mob/living/simple_animal/bot/secbot.dm | 6 +++--- .../reagents/chemistry/machinery/chem_dispenser.dm | 4 ++-- .../reagents/chemistry/machinery/chem_heater.dm | 2 +- .../reagents/chemistry/machinery/pandemic.dm | 12 +++++++++--- 20 files changed, 49 insertions(+), 43 deletions(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm b/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm index 4d85744738..f1f9624380 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm @@ -32,7 +32,7 @@ return MAP_ERROR var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter((pick(spawn_locs))) - var/mob/living/simple_animal/slaughter/S = new /mob/living/simple_animal/slaughter/(holder) + var/mob/living/simple_animal/slaughter/S = new (holder) S.holder = holder player_mind.transfer_to(S) player_mind.assigned_role = "Slaughter Demon" diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 6c9e11ffa4..198d368d59 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -175,7 +175,7 @@ return if(beaker) - beaker.forceMove(get_turf(src)) + beaker.forceMove(drop_location()) beaker = null update_icon() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm index 4e83a709b9..520c739e55 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -6,7 +6,7 @@ /obj/structure/closet/secure_closet/quartermaster/PopulateContents() ..() new /obj/item/clothing/neck/cloak/qm(src) - new /obj/item/storage/lockbox/medal/cargo/(src) + new /obj/item/storage/lockbox/medal/cargo(src) new /obj/item/clothing/under/rank/cargo(src) new /obj/item/clothing/shoes/sneakers/brown(src) new /obj/item/device/radio/headset/headset_cargo(src) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 3061a9d258..594dba355d 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -408,7 +408,7 @@ /obj/structure/girder/cult/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) - new/obj/item/stack/sheet/runed_metal/(get_turf(src), 1) + new /obj/item/stack/sheet/runed_metal(drop_location(), 1) qdel(src) /obj/structure/girder/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm index cbd5b23bf3..2a0147c82a 100644 --- a/code/game/turfs/simulated/minerals.dm +++ b/code/game/turfs/simulated/minerals.dm @@ -451,7 +451,7 @@ stage = GIBTONITE_DETONATE explosion(bombturf,1,2,5, adminlog = 0) if(stage == GIBTONITE_STABLE) //Gibtonite deposit is now benign and extractable. Depending on how close you were to it blowing up before defusing, you get better quality ore. - var/obj/item/twohanded/required/gibtonite/G = new /obj/item/twohanded/required/gibtonite/(src) + var/obj/item/twohanded/required/gibtonite/G = new (src) if(det_time <= 0) G.quality = 3 G.icon_state = "Gibtonite ore 3" diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 11bd241437..b395dad6bd 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -78,7 +78,7 @@ /obj/machinery/atmospherics/components/unary/cryo_cell/on_deconstruction() if(beaker) - beaker.forceMove(loc) + beaker.forceMove(drop_location()) beaker = null /obj/machinery/atmospherics/components/unary/cryo_cell/update_icon() @@ -381,7 +381,7 @@ . = TRUE if("ejectbeaker") if(beaker) - beaker.forceMove(loc) + beaker.forceMove(drop_location()) if(Adjacent(usr) && !issilicon(usr)) usr.put_in_hands(beaker) beaker = null diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm index 0aa53ee126..5af834955f 100644 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ b/code/modules/awaymissions/mission_code/Academy.dm @@ -230,7 +230,7 @@ user.throw_at(throw_target, 200, 4) if(8) //Fueltank Explosion - explosion(src.loc,-1,0,2, flame_range = 2) + explosion(loc,-1,0,2, flame_range = 2) if(9) //Cold var/datum/disease/D = new /datum/disease/cold @@ -240,7 +240,7 @@ visible_message("[src] roll perfectly.") if(11) //Cookie - var/obj/item/reagent_containers/food/snacks/cookie/C = new(get_turf(src)) + var/obj/item/reagent_containers/food/snacks/cookie/C = new(drop_location()) C.name = "Cookie of Fate" if(12) //Healing @@ -258,13 +258,13 @@ new /obj/item/coin/gold(M) if(14) //Free Gun - new /obj/item/gun/ballistic/revolver/mateba(get_turf(src)) + new /obj/item/gun/ballistic/revolver/mateba(drop_location()) if(15) //Random One-use spellbook - new /obj/item/spellbook/oneuse/random(get_turf(src)) + new /obj/item/spellbook/oneuse/random(drop_location()) if(16) //Servant & Servant Summon - var/mob/living/carbon/human/H = new(get_turf(src)) + var/mob/living/carbon/human/H = new(drop_location()) H.equipOutfit(/datum/outfit/butler) var/datum/mind/servant_mind = new /datum/mind() var/datum/objective/O = new("Serve [user.real_name].") @@ -285,10 +285,10 @@ if(17) //Tator Kit - new /obj/item/storage/box/syndicate/(get_turf(src)) + new /obj/item/storage/box/syndicate(drop_location()) if(18) //Captain ID - new /obj/item/card/id/captains_spare(get_turf(src)) + new /obj/item/card/id/captains_spare(drop_location()) if(19) //Instrinct Resistance to_chat(user, "You feel robust.") diff --git a/code/modules/food_and_drinks/food/snacks/meat.dm b/code/modules/food_and_drinks/food/snacks/meat.dm index 5b9148d16c..e43309892d 100644 --- a/code/modules/food_and_drinks/food/snacks/meat.dm +++ b/code/modules/food_and_drinks/food/snacks/meat.dm @@ -212,7 +212,7 @@ /obj/item/reagent_containers/food/snacks/meat/slab/goliath/burn() visible_message("[src] finishes cooking!") - new /obj/item/reagent_containers/food/snacks/meat/steak/goliath/(loc) + new /obj/item/reagent_containers/food/snacks/meat/steak/goliath(loc) qdel(src) /obj/item/reagent_containers/food/snacks/meat/slab/meatwheat diff --git a/code/modules/food_and_drinks/kitchen_machinery/juicer.dm b/code/modules/food_and_drinks/kitchen_machinery/juicer.dm index 0e6a7e9034..08120cc6e4 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/juicer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/juicer.dm @@ -135,7 +135,7 @@ if (!beaker) return src.verbs -= /obj/machinery/juicer/verb/detach - beaker.loc = src.loc + beaker.forceMove(drop_location()) beaker = null update_icon() diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index d46875eb00..3f992d711a 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -294,7 +294,7 @@ /obj/machinery/biogenerator/proc/detach() if(beaker) - beaker.loc = src.loc + beaker.forceMove(drop_location()) beaker = null update_icon() diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index 61c34b0466..4eb225360a 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -257,7 +257,7 @@ /mob/living/simple_animal/bot/cleanbot/explode() on = FALSE visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) + var/atom/Tsec = drop_location() new /obj/item/reagent_containers/glass/bucket(Tsec) diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index f2b30a0a3c..62fb2e772c 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -371,24 +371,24 @@ Auto Patrol[]"}, /mob/living/simple_animal/bot/ed209/explode() walk_to(src,0) visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) + var/atom/Tsec = drop_location() - var/obj/item/ed209_assembly/Sa = new /obj/item/ed209_assembly(Tsec) + var/obj/item/ed209_assembly/Sa = new (Tsec) Sa.build_step = 1 Sa.add_overlay("hs_hole") Sa.created_name = name new /obj/item/device/assembly/prox_sensor(Tsec) if(!lasercolor) - var/obj/item/gun/energy/e_gun/advtaser/G = new /obj/item/gun/energy/e_gun/advtaser(Tsec) + var/obj/item/gun/energy/e_gun/advtaser/G = new (Tsec) G.cell.charge = 0 G.update_icon() else if(lasercolor == "b") - var/obj/item/gun/energy/laser/bluetag/G = new /obj/item/gun/energy/laser/bluetag(Tsec) + var/obj/item/gun/energy/laser/bluetag/G = new (Tsec) G.cell.charge = 0 G.update_icon() else if(lasercolor == "r") - var/obj/item/gun/energy/laser/redtag/G = new /obj/item/gun/energy/laser/redtag(Tsec) + var/obj/item/gun/energy/laser/redtag/G = new (Tsec) G.cell.charge = 0 G.update_icon() diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index 1ae1c7d3a6..28a64838f7 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -162,7 +162,7 @@ update_controls() /mob/living/simple_animal/bot/floorbot/proc/empty_tiles() - var/turf/Tsec = get_turf(src) + var/atom/Tsec = drop_location() while(specialtiles > initial(tiletype.max_amount)) new tiletype(Tsec,initial(tiletype.max_amount)) @@ -363,9 +363,9 @@ /mob/living/simple_animal/bot/floorbot/explode() on = FALSE visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) + var/atom/Tsec = drop_location() - var/obj/item/storage/toolbox/mechanical/N = new /obj/item/storage/toolbox/mechanical(Tsec) + var/obj/item/storage/toolbox/mechanical/N = new (Tsec) N.contents = list() new /obj/item/device/assembly/prox_sensor(Tsec) diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm index f41a6138cb..3e15adbfe0 100644 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm @@ -327,14 +327,14 @@ Maintenance panel panel is [open ? "opened" : "closed"]"}, walk_to(src,0) visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) + var/atom/Tsec = drop_location() //doesn't drop cardboard nor its assembly, since its a very frail material. if(prob(50)) - new /obj/item/bodypart/l_arm/robot/(Tsec) + new /obj/item/bodypart/l_arm/robot(Tsec) new /obj/item/bikehorn(Tsec) new /obj/item/device/assembly/prox_sensor(Tsec) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread + var/datum/effect_system/spark_spread/s = new s.set_up(3, 1, src) s.start() diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index 06c953a2da..57cad4570f 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -194,7 +194,7 @@ use_beaker = !use_beaker else if(href_list["eject"] && (!isnull(reagent_glass))) - reagent_glass.loc = get_turf(src) + reagent_glass.forceMove(drop_location()) reagent_glass = null else if(href_list["togglevoice"]) @@ -516,7 +516,7 @@ /mob/living/simple_animal/bot/medbot/explode() on = FALSE visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) + var/atom/Tsec = drop_location() new /obj/item/storage/firstaid(Tsec) @@ -525,7 +525,7 @@ new /obj/item/device/healthanalyzer(Tsec) if(reagent_glass) - reagent_glass.loc = Tsec + reagent_glass.forceMove(Tsec) reagent_glass = null if(prob(50)) diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index b602e19125..170659ef29 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -697,14 +697,14 @@ /mob/living/simple_animal/bot/mulebot/explode() visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) + var/atom/Tsec = drop_location() new /obj/item/device/assembly/prox_sensor(Tsec) new /obj/item/stack/rods(Tsec) new /obj/item/stack/rods(Tsec) new /obj/item/stack/cable_coil/cut(Tsec) if(cell) - cell.loc = Tsec + cell.forceMove(Tsec) cell.update_icon() cell = null diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 4300746901..acef65f545 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -50,7 +50,7 @@ /mob/living/simple_animal/bot/secbot/beepsky/explode() - var/turf/Tsec = get_turf(src) + var/atom/Tsec = drop_location() new /obj/item/stock_parts/cell/potato(Tsec) var/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/S = new(Tsec) S.reagents.add_reagent("whiskey", 15) @@ -399,9 +399,9 @@ Auto Patrol: []"}, walk_to(src,0) visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) + var/atom/Tsec = drop_location() - var/obj/item/secbot_assembly/Sa = new /obj/item/secbot_assembly(Tsec) + var/obj/item/secbot_assembly/Sa = new (Tsec) Sa.build_step = 1 Sa.add_overlay("hs_hole") Sa.created_name = name diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index af5597d790..654b9e0e69 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -170,7 +170,7 @@ . = TRUE if("eject") if(beaker) - beaker.forceMove(loc) + beaker.forceMove(drop_location()) beaker = null cut_overlays() . = TRUE @@ -301,7 +301,7 @@ /obj/machinery/chem_dispenser/constructable/on_deconstruction() if(beaker) - beaker.loc = loc + beaker.forceMove(drop_location()) beaker = null /obj/machinery/chem_dispenser/drinks diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index abe58cb79d..f8d2a66247 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -111,7 +111,7 @@ /obj/machinery/chem_heater/proc/eject_beaker() if(beaker) - beaker.loc = get_turf(src) + beaker.forceMove(drop_location()) beaker.reagents.handle_reactions() beaker = null icon_state = "mixer0b" diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 64731319b6..ae0f4a008a 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -121,7 +121,7 @@ add_overlay("waitlight") /obj/machinery/computer/pandemic/proc/eject_beaker() - beaker.forceMove(get_turf(src)) + beaker.forceMove(drop_location()) beaker = null update_icon() @@ -186,7 +186,7 @@ var/id = get_virus_id_by_index(text2num(params["index"])) var/datum/disease/advance/A = new(FALSE, SSdisease.archive_diseases[id]) var/list/data = list("viruses" = list(A)) - var/obj/item/reagent_containers/glass/bottle/B = new(get_turf(src)) + var/obj/item/reagent_containers/glass/bottle/B = new(drop_location()) B.name = "[A.name] culture bottle" B.desc = "A small bottle. Contains [A.agent] culture in synthblood medium." B.reagents.add_reagent("blood", 20, data) @@ -195,9 +195,15 @@ addtimer(CALLBACK(src, .proc/reset_replicator_cooldown), 50) . = TRUE if("create_vaccine_bottle") +<<<<<<< HEAD var/index = text2num(params["index"]) var/datum/disease/D = SSdisease.archive_diseases[get_virus_id_by_index(index)] var/obj/item/reagent_containers/glass/bottle/B = new(get_turf(src)) +======= + var/id = params["index"] + var/datum/disease/D = SSdisease.archive_diseases[id] + var/obj/item/reagent_containers/glass/bottle/B = new(drop_location()) +>>>>>>> ed12ad4... Updates some item drops to use drop_location() (#32994) B.name = "[D.name] vaccine bottle" B.reagents.add_reagent("vaccine", 15, list(index)) wait = TRUE @@ -237,6 +243,6 @@ /obj/machinery/computer/pandemic/on_deconstruction() if(beaker) - beaker.forceMove(get_turf(src)) + beaker.forceMove(drop_location()) beaker = null . = ..() From fe1d69c35d28bb0a77331601094b5c5eb9546fe5 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 24 Nov 2017 05:56:22 -0500 Subject: [PATCH 09/98] IRC message if client mob ends up in nullspace (#33004) Only if no admins are online --- code/modules/mob/living/life.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 04a10a9ad6..1f0895a7f5 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -13,9 +13,11 @@ if(!loc) if(client) for(var/obj/effect/landmark/error/E in GLOB.landmarks_list) - loc = E.loc + forceMove(E.loc) break - message_admins("[key_name_admin(src)] was found to have no .loc with an attached client, if the cause is unknown it would be wise to ask how this was accomplished.") + var/msg = "[key_name_admin(src)] was found to have no .loc with an attached client, if the cause is unknown it would be wise to ask how this was accomplished." + message_admins(msg) + send2irc_adminless_only("Mob", msg, R_ADMIN) log_game("[key_name(src)] was found to have no .loc with an attached client.") else return From dc0310eb5db96954bebdc55accdeb79c4413d111 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 24 Nov 2017 05:53:08 -0500 Subject: [PATCH 11/98] Adds a config to optionally hard reboot DD (#33006) --- .../configuration/entries/config.dm | 4 +++ code/game/world.dm | 28 +++++++++++++++++++ config/config.txt | 3 ++ 3 files changed, 35 insertions(+) diff --git a/code/controllers/configuration/entries/config.dm b/code/controllers/configuration/entries/config.dm index 39739593fc..d7dc0ff84d 100644 --- a/code/controllers/configuration/entries/config.dm +++ b/code/controllers/configuration/entries/config.dm @@ -381,3 +381,7 @@ CONFIG_TWEAK(flag/ValidateAndSet(str_val)) . = ..() if(. && Master.current_runlevel) world.sleep_offline = !value + +CONFIG_DEF(number/rounds_until_hard_restart) + value = -1 + min_val = 0 diff --git a/code/game/world.dm b/code/game/world.dm index 9a72794553..2853bb2ef6 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -1,4 +1,7 @@ +#define RESTART_COUNTER_PATH "data/round_counter.txt" + GLOBAL_VAR(security_mode) +GLOBAL_VAR(restart_counter) GLOBAL_PROTECT(security_mode) /world/New() @@ -31,6 +34,10 @@ GLOBAL_PROTECT(security_mode) GLOB.timezoneOffset = text2num(time2text(0,"hh")) * 36000 + if(fexists(RESTART_COUNTER_PATH)) + GLOB.restart_counter = text2num(trim(file2text(RESTART_COUNTER_PATH))) + fdel(RESTART_COUNTER_PATH) + Master.Initialize(10, FALSE) @@ -161,6 +168,27 @@ GLOBAL_PROTECT(security_mode) else to_chat(world, "Rebooting world...") Master.Shutdown() //run SS shutdowns + + if(SERVER_TOOLS_PRESENT) + var/do_hard_reboot + // check the hard reboot counter + var/ruhr = CONFIG_GET(number/rounds_until_hard_restart) + switch(ruhr) + if(-1) + do_hard_reboot = FALSE + if(0) + do_hard_reboot = TRUE + else + if(GLOB.restart_counter >= ruhr) + do_hard_reboot = TRUE + else + text2file("[++GLOB.restart_counter]", RESTART_COUNTER_PATH) + do_hard_reboot = FALSE + + if(do_hard_reboot) + log_world("World hard rebooted at [time_stamp()]") + SERVER_TOOLS_REBOOT_BYOND + log_world("World rebooted at [time_stamp()]") ..() diff --git a/config/config.txt b/config/config.txt index 34f11a8c7c..a05e463f45 100644 --- a/config/config.txt +++ b/config/config.txt @@ -383,3 +383,6 @@ DISABLE_HIGH_POP_MC_MODE_AMOUNT 60 ## Uncomment to prevent the world from sleeping while no players are connected after initializations #RESUME_AFTER_INITIALIZATIONS + +## Uncomment to set the number of /world/Reboot()s before the DreamDaemon restarts itself. 0 means restart every round. Requires tgstation server tools. +#ROUNDS_UNTIL_HARD_RESTART 10 From 3757be6ce204a11561fecb428b90a4e78a8d5e29 Mon Sep 17 00:00:00 2001 From: MoreRobustThanYou Date: Fri, 24 Nov 2017 05:50:20 -0500 Subject: [PATCH 13/98] Makes reverse pulling only apply to dense objects (#33024) * Makes reverse pulling only apply to dense objects * CACHE CACHE CACHE! --- code/modules/mob/mob_movement.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 39001d6e71..9885d1c4d6 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -186,8 +186,9 @@ if(LAZYLEN(mob.user_movement_hooks)) for(var/obj/O in mob.user_movement_hooks) O.intercept_user_move(direct, mob, n, oldloc) - - if(mob.pulling && !ismob(mob.pulling)) + + var/atom/movable/P = mob.pulling + if(P && !ismob(P) && P.density) mob.dir = turn(mob.dir, 180) /mob/Moved(oldLoc, dir, Forced = FALSE) From 7ea123449becf3042a638a025687a1b2f16eb18f Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Fri, 24 Nov 2017 02:49:27 -0800 Subject: [PATCH 15/98] Fix misplaced corners in the Hotel (#33016) --- _maps/RandomRuins/SpaceRuins/spacehotel.dmm | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm index b16a67704b..f4f1711b41 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm @@ -3301,18 +3301,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/ruin/space/has_grav/hotel) -"iX" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/hotel) "iY" = ( /obj/structure/cable{ icon_state = "4-8" @@ -3944,7 +3932,7 @@ /area/ruin/space/has_grav/hotel/security) "kP" = ( /obj/effect/turf_decal/stripes/corner{ - dir = 2 + dir = 1 }, /turf/open/floor/plasteel/darkyellow, /area/ruin/space/has_grav/hotel/security) From 850b709afbeb106e4d956bf647d754d3de693a84 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 24 Nov 2017 05:48:02 -0500 Subject: [PATCH 17/98] Rename LICENSE-GPLv3.txt to OLD_LICENSE-GPLv3.txt (#33009) * Rename LICENSE-GPLv3.txt to OLD_LICENSE-GPLv3.txt * Update license file name in README.md --- LICENSE-GPLv3.txt => OLD_LICENSE-GPLv3.txt | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename LICENSE-GPLv3.txt => OLD_LICENSE-GPLv3.txt (99%) diff --git a/LICENSE-GPLv3.txt b/OLD_LICENSE-GPLv3.txt similarity index 99% rename from LICENSE-GPLv3.txt rename to OLD_LICENSE-GPLv3.txt index 20d40b6bce..94a9ed024d 100644 --- a/LICENSE-GPLv3.txt +++ b/OLD_LICENSE-GPLv3.txt @@ -671,4 +671,4 @@ into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. \ No newline at end of file +. diff --git a/README.md b/README.md index d1aa36edba..618f805f94 100644 --- a/README.md +++ b/README.md @@ -140,7 +140,7 @@ All code after [commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at All code before [commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST](https://github.com/tgstation/tgstation/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under [GNU GPL v3](https://www.gnu.org/licenses/gpl-3.0.html). (Including tools unless their readme specifies otherwise.) -See LICENSE and LICENSE-GPLv3.txt for more details. +See LICENSE and OLD_LICENSE-GPLv3.txt for more details. tgui clientside is licensed as a subproject under the MIT license. Font Awesome font files, used by tgui, are licensed under the SIL Open Font License v1.1 From a29d4a5d113dc7d0189893f292190381b6f03962 Mon Sep 17 00:00:00 2001 From: Cruix Date: Fri, 24 Nov 2017 04:47:11 -0600 Subject: [PATCH 19/98] Fixed mobs getting rotated by shuttles even if they are not moved (#33026) --- code/modules/shuttle/on_move.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index 2c48d18e6e..51c62029e0 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -270,6 +270,8 @@ All ShuttleMove procs go here . = ..() /mob/afterShuttleMove(list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) + if(!move_on_shuttle) + return . = ..() if(client && movement_force) var/shake_force = max(movement_force["THROW"], movement_force["KNOCKDOWN"]) From 2762e3b530d4cca40a583c2926bd1b617ce90b8b Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Fri, 24 Nov 2017 05:45:47 -0500 Subject: [PATCH 21/98] Fixes Lord Singuloth hungering for more than he should --- code/datums/beam.dm | 5 + .../clock_effects/city_of_cogs_rift.dm | 7 + .../clock_cult/clock_effects/clock_overlay.dm | 5 + .../clock_effects/general_markers.dm | 6 + .../clock_effects/servant_blocker.dm | 6 + .../clock_effects/spatial_gateway.dm | 8 + .../clock_cult/clock_items/judicial_visor.dm | 6 + code/game/gamemodes/cult/cult_structures.dm | 6 + code/game/gamemodes/wizard/artefact.dm | 6 + code/game/objects/effects/bump_teleporter.dm | 22 ++ code/game/objects/effects/countdown.dm | 6 + code/game/objects/effects/effects.dm | 6 + code/game/objects/effects/forcefields.dm | 3 + code/game/objects/effects/misc.dm | 6 + code/game/objects/effects/portals.dm | 6 + code/game/objects/effects/step_triggers.dm | 196 ++++++++++++++++++ code/game/objects/items/chrono_eraser.dm | 3 + code/modules/admin/sound_emitter.dm | 3 + .../atmospherics/environmental/LINDA_fire.dm | 3 + .../modules/clothing/spacesuits/chronosuit.dm | 6 + code/modules/events/immovable_rod.dm | 6 + code/modules/flufftext/Hallucination.dm | 6 + code/modules/mining/fulton.dm | 6 + .../mining/lavaland/necropolis_chests.dm | 2 +- code/modules/mining/mine_items.dm | 6 + .../simple_animal/guardian/types/ranged.dm | 6 + .../particle_accelerator/particle.dm | 3 + code/modules/projectiles/guns/beam_rifle.dm | 6 + code/modules/projectiles/projectile/energy.dm | 6 + code/modules/spells/spell.dm | 6 + .../spell_types/spacetime_distortion.dm | 6 + 31 files changed, 373 insertions(+), 1 deletion(-) diff --git a/code/datums/beam.dm b/code/datums/beam.dm index 3276a5f5b9..252a305af2 100644 --- a/code/datums/beam.dm +++ b/code/datums/beam.dm @@ -149,6 +149,11 @@ owner = null return ..() +/obj/effect/ebeam/singularity_pull() + return +/obj/effect/ebeam/singularity_act() + return + /atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=50, maxdistance=10,beam_type=/obj/effect/ebeam,beam_sleep_time = 3) var/datum/beam/newbeam = new(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type,beam_sleep_time) INVOKE_ASYNC(newbeam, /datum/beam/.proc/Start) diff --git a/code/game/gamemodes/clock_cult/clock_effects/city_of_cogs_rift.dm b/code/game/gamemodes/clock_cult/clock_effects/city_of_cogs_rift.dm index e41acb421a..ab47f1af55 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/city_of_cogs_rift.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/city_of_cogs_rift.dm @@ -10,6 +10,13 @@ light_power = 3 light_color = "#6A4D2F" + +/obj/effect/clockwork/city_of_cogs_rift/singularity_act() + return + +/obj/effect/clockwork/city_of_cogs_rift/singularity_pull() + return + /obj/effect/clockwork/city_of_cogs_rift/Initialize() . = ..() visible_message("The air above [loc] shimmers and pops as a [name] forms there!") diff --git a/code/game/gamemodes/clock_cult/clock_effects/clock_overlay.dm b/code/game/gamemodes/clock_cult/clock_effects/clock_overlay.dm index e8cba1a39d..f3de8d04a8 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/clock_overlay.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/clock_overlay.dm @@ -10,6 +10,11 @@ /obj/effect/clockwork/overlay/ex_act() return FALSE +/obj/effect/clockwork/overlay/singularity_act() + return +/obj/effect/clockwork/overlay/singularity_pull() + return + /obj/effect/clockwork/overlay/singularity_pull(S, current_size) return diff --git a/code/game/gamemodes/clock_cult/clock_effects/general_markers.dm b/code/game/gamemodes/clock_cult/clock_effects/general_markers.dm index a3465fac05..6e6704a68c 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/general_markers.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/general_markers.dm @@ -11,6 +11,12 @@ animate(src, alpha = 0, time = 10) QDEL_IN(src, 10) +/obj/effect/clockwork/general_marker/singularity_act() + return + +/obj/effect/clockwork/general_marker/singularity_pull() + return + /obj/effect/clockwork/general_marker/inathneq name = "Inath-neq, the Resonant Cogwheel" desc = "A humanoid form blazing with blue fire. It radiates an aura of kindness and caring." diff --git a/code/game/gamemodes/clock_cult/clock_effects/servant_blocker.dm b/code/game/gamemodes/clock_cult/clock_effects/servant_blocker.dm index 988c00b2f5..194747cefc 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/servant_blocker.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/servant_blocker.dm @@ -18,3 +18,9 @@ to_chat(L, "The space beyond here can't be accessed by you or other servants.") return return TRUE + +/obj/effect/clockwork/servant_blocker/singularity_act() + return + +/obj/effect/clockwork/servant_blocker/singularity_pull() + return diff --git a/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm b/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm index cbfe5d043c..50076e0919 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm @@ -109,6 +109,14 @@ return TRUE return FALSE + +/obj/effect/clockwork/spatial_gateway/singularity_act() + return + +/obj/effect/clockwork/spatial_gateway/singularity_pull() + return + + /obj/effect/clockwork/spatial_gateway/CollidedWith(atom/movable/AM) ..() if(!QDELETED(AM)) diff --git a/code/game/gamemodes/clock_cult/clock_items/judicial_visor.dm b/code/game/gamemodes/clock_cult/clock_items/judicial_visor.dm index 51ffdd9e10..4f6485310b 100644 --- a/code/game/gamemodes/clock_cult/clock_items/judicial_visor.dm +++ b/code/game/gamemodes/clock_cult/clock_items/judicial_visor.dm @@ -162,6 +162,12 @@ user = caster INVOKE_ASYNC(src, .proc/judicialblast) +/obj/effect/clockwork/judicial_marker/singularity_act() + return + +/obj/effect/clockwork/judicial_marker/singularity_pull() + return + /obj/effect/clockwork/judicial_marker/proc/judicialblast() playsound(src, 'sound/magic/magic_missile.ogg', 50, 1, 1, 1) flick("judicial_marker", src) diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index 2dcaf23bc6..440dfaede6 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -240,3 +240,9 @@ icon_state = "hole" density = TRUE anchored = TRUE + +/obj/effect/gateway/singularity_act() + return + +/obj/effect/gateway/singularity_pull() + return diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 3007ec51ba..cd50f52d5f 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -66,6 +66,12 @@ else return ..() +/obj/effect/rend/singularity_pull() + return + +/obj/effect/rend/singularity_pull() + return + /obj/item/veilrender/vealrender name = "veal render" desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast farm." diff --git a/code/game/objects/effects/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm index 5ba643e943..5e17ee9e89 100644 --- a/code/game/objects/effects/bump_teleporter.dm +++ b/code/game/objects/effects/bump_teleporter.dm @@ -7,6 +7,7 @@ invisibility = INVISIBILITY_ABSTRACT //nope, can't see this anchored = TRUE density = TRUE +<<<<<<< HEAD opacity = 0 var/static/list/AllTeleporters @@ -19,6 +20,27 @@ LAZYREMOVE(AllTeleporters, src) return ..() +======= + opacity = 0 + + var/static/list/AllTeleporters + +/obj/effect/bump_teleporter/New() + ..() + LAZYADD(AllTeleporters, src) + +/obj/effect/bump_teleporter/Destroy() + LAZYREMOVE(AllTeleporters, src) + return ..() + + +/obj/effect/bump_teleporter/singularity_act() + return + +/obj/effect/bump_teleporter/singularity_pull() + return + +>>>>>>> f912b6e... Fixes Lord Singuloth hungering for more than he should (#33025) /obj/effect/bump_teleporter/CollidedWith(atom/movable/AM) if(!ismob(AM)) return diff --git a/code/game/objects/effects/countdown.dm b/code/game/objects/effects/countdown.dm index f4b67b7df2..8448e2a7e7 100644 --- a/code/game/objects/effects/countdown.dm +++ b/code/game/objects/effects/countdown.dm @@ -154,3 +154,9 @@ else var/time_left = max(0, (A.death_time - world.time) / 10) return round(time_left) + +/obj/effect/countdown/singularity_pull() + return + +/obj/effect/countdown/singularity_act() + return diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index d5f8e28d2a..2b456b2ed7 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -56,3 +56,9 @@ /obj/effect/abstract/singularity_act() return + +/obj/effect/dummy/singularity_pull() + return + +/obj/effect/dummy/singularity_act() + return diff --git a/code/game/objects/effects/forcefields.dm b/code/game/objects/effects/forcefields.dm index 024fb4b4ea..edf7b4f519 100644 --- a/code/game/objects/effects/forcefields.dm +++ b/code/game/objects/effects/forcefields.dm @@ -7,6 +7,9 @@ density = TRUE CanAtmosPass = ATMOS_PASS_DENSITY +/obj/effect/forcefield/singularity_pull() + return + /obj/effect/forcefield/cult desc = "An unholy shield that blocks all attacks." name = "glowing wall" diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index cadee92161..d7d36acde1 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -12,6 +12,12 @@ var/def_zone pass_flags = PASSTABLE +/obj/effect/beam/singularity_act() + return + +/obj/effect/beam/singularity_pull() + return + /obj/effect/spawner name = "object spawner" diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index f932ec9830..427e9eefe2 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -75,6 +75,12 @@ if(isturf(hard_target_override)) hard_target = hard_target_override +/obj/effect/portal/singularity_pull() + return + +/obj/effect/portal/singularity_act() + return + /obj/effect/portal/proc/link_portal(obj/effect/portal/newlink) linked = newlink if(atmos_link) diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index 93faacbf68..229dfc56de 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -6,6 +6,7 @@ var/mobs_only = FALSE invisibility = INVISIBILITY_ABSTRACT // nope cant see this shit anchored = TRUE +<<<<<<< HEAD /obj/effect/step_trigger/proc/Trigger(atom/movable/A) return 0 @@ -192,3 +193,198 @@ if(happens_once) qdel(src) +======= + +/obj/effect/step_trigger/proc/Trigger(atom/movable/A) + return 0 + +/obj/effect/step_trigger/Crossed(H as mob|obj) + ..() + if(!H) + return + if(isobserver(H) && !affect_ghosts) + return + if(!ismob(H) && mobs_only) + return + Trigger(H) + + +/obj/effect/step_trigger/singularity_act() + return + +/obj/effect/step_trigger/singularity_pull() + return + +/* Sends a message to mob when triggered*/ + +/obj/effect/step_trigger/message + var/message //the message to give to the mob + var/once = 1 + mobs_only = TRUE + +/obj/effect/step_trigger/message/Trigger(mob/M) + if(M.client) + to_chat(M, "[message]") + if(once) + qdel(src) + +/* Tosses things in a certain direction */ + +/obj/effect/step_trigger/thrower + var/direction = SOUTH // the direction of throw + var/tiles = 3 // if 0: forever until atom hits a stopper + var/immobilize = 1 // if nonzero: prevents mobs from moving while they're being flung + var/speed = 1 // delay of movement + var/facedir = 0 // if 1: atom faces the direction of movement + var/nostop = 0 // if 1: will only be stopped by teleporters + var/list/affecting = list() + +/obj/effect/step_trigger/thrower/Trigger(atom/A) + if(!A || !ismovableatom(A)) + return + var/atom/movable/AM = A + var/curtiles = 0 + var/stopthrow = 0 + for(var/obj/effect/step_trigger/thrower/T in orange(2, src)) + if(AM in T.affecting) + return + + if(ismob(AM)) + var/mob/M = AM + if(immobilize) + M.canmove = 0 + + affecting.Add(AM) + while(AM && !stopthrow) + if(tiles) + if(curtiles >= tiles) + break + if(AM.z != src.z) + break + + curtiles++ + + sleep(speed) + + // Calculate if we should stop the process + if(!nostop) + for(var/obj/effect/step_trigger/T in get_step(AM, direction)) + if(T.stopper && T != src) + stopthrow = 1 + else + for(var/obj/effect/step_trigger/teleporter/T in get_step(AM, direction)) + if(T.stopper) + stopthrow = 1 + + if(AM) + var/predir = AM.dir + step(AM, direction) + if(!facedir) + AM.setDir(predir) + + + + affecting.Remove(AM) + + if(ismob(AM)) + var/mob/M = AM + if(immobilize) + M.canmove = 1 + +/* Stops things thrown by a thrower, doesn't do anything */ + +/obj/effect/step_trigger/stopper + +/* Instant teleporter */ + +/obj/effect/step_trigger/teleporter + var/teleport_x = 0 // teleportation coordinates (if one is null, then no teleport!) + var/teleport_y = 0 + var/teleport_z = 0 + +/obj/effect/step_trigger/teleporter/Trigger(atom/movable/A) + if(teleport_x && teleport_y && teleport_z) + + A.x = teleport_x + A.y = teleport_y + A.z = teleport_z + +/* Random teleporter, teleports atoms to locations ranging from teleport_x - teleport_x_offset, etc */ + +/obj/effect/step_trigger/teleporter/random + var/teleport_x_offset = 0 + var/teleport_y_offset = 0 + var/teleport_z_offset = 0 + +/obj/effect/step_trigger/teleporter/random/Trigger(atom/movable/A) + if(teleport_x && teleport_y && teleport_z) + if(teleport_x_offset && teleport_y_offset && teleport_z_offset) + + A.x = rand(teleport_x, teleport_x_offset) + A.y = rand(teleport_y, teleport_y_offset) + A.z = rand(teleport_z, teleport_z_offset) + +/* Fancy teleporter, creates sparks and smokes when used */ + +/obj/effect/step_trigger/teleport_fancy + var/locationx + var/locationy + var/uses = 1 //0 for infinite uses + var/entersparks = 0 + var/exitsparks = 0 + var/entersmoke = 0 + var/exitsmoke = 0 + +/obj/effect/step_trigger/teleport_fancy/Trigger(mob/M) + var/dest = locate(locationx, locationy, z) + M.Move(dest) + + if(entersparks) + var/datum/effect_system/spark_spread/s = new + s.set_up(4, 1, src) + s.start() + if(exitsparks) + var/datum/effect_system/spark_spread/s = new + s.set_up(4, 1, dest) + s.start() + + if(entersmoke) + var/datum/effect_system/smoke_spread/s = new + s.set_up(4, 1, src, 0) + s.start() + if(exitsmoke) + var/datum/effect_system/smoke_spread/s = new + s.set_up(4, 1, dest, 0) + s.start() + + uses-- + if(uses == 0) + qdel(src) + +/* Simple sound player, Mapper friendly! */ + +/obj/effect/step_trigger/sound_effect + var/sound //eg. path to the sound, inside '' eg: 'growl.ogg' + var/volume = 100 + var/freq_vary = 1 //Should the frequency of the sound vary? + var/extra_range = 0 // eg World.view = 7, extra_range = 1, 7+1 = 8, 8 turfs radius + var/happens_once = 0 + var/triggerer_only = 0 //Whether the triggerer is the only person who hears this + + +/obj/effect/step_trigger/sound_effect/Trigger(atom/movable/A) + var/turf/T = get_turf(A) + + if(!T) + return + + if(triggerer_only && ismob(A)) + var/mob/B = A + B.playsound_local(T, sound, volume, freq_vary) + else + playsound(T, sound, volume, freq_vary, extra_range) + + if(happens_once) + qdel(src) + +>>>>>>> f912b6e... Fixes Lord Singuloth hungering for more than he should (#33025) diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm index 6f1ab39013..d65ef6fc2a 100644 --- a/code/game/objects/items/chrono_eraser.dm +++ b/code/game/objects/items/chrono_eraser.dm @@ -252,6 +252,9 @@ /obj/effect/chrono_field/singularity_act() return +/obj/effect/chrono_field/singularity_pull() + return + /obj/effect/chrono_field/ex_act() return diff --git a/code/modules/admin/sound_emitter.dm b/code/modules/admin/sound_emitter.dm index 129c6c92c8..b7ec8c36b5 100644 --- a/code/modules/admin/sound_emitter.dm +++ b/code/modules/admin/sound_emitter.dm @@ -30,6 +30,9 @@ /obj/effect/sound_emitter/singularity_act() return +/obj/effect/sound_emitter/singularity_pull() + return + /obj/effect/sound_emitter/examine(mob/user) ..() if(!isobserver(user)) diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm index ca234308d8..d0c0979366 100644 --- a/code/modules/atmospherics/environmental/LINDA_fire.dm +++ b/code/modules/atmospherics/environmental/LINDA_fire.dm @@ -179,6 +179,9 @@ var/mob/living/L = AM L.fire_act(temperature, volume) +/obj/effect/hotspot/singularity_pull() + return + /obj/effect/dummy/fire name = "fire" desc = "OWWWWWW. IT BURNS. Tell a coder if you're seeing this." diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index c5a4f3a58a..a2b5a864c4 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -252,6 +252,12 @@ var/obj/screen/chronos_target/target_ui = null var/obj/item/clothing/suit/space/chronos/chronosuit +/obj/effect/chronos_cam/singularity_act() + return + +/obj/effect/chronos_cam/singularity_pull() + return + /obj/effect/chronos_cam/proc/create_target_ui() if(holder && holder.client && chronosuit) if(target_ui) diff --git a/code/modules/events/immovable_rod.dm b/code/modules/events/immovable_rod.dm index 3b0cb1921a..b933e566be 100644 --- a/code/modules/events/immovable_rod.dm +++ b/code/modules/events/immovable_rod.dm @@ -68,6 +68,12 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 /obj/effect/immovablerod/ex_act(severity, target) return 0 +/obj/effect/immovablerod/singularity_act() + return + +/obj/effect/immovablerod/singularity_pull() + return + /obj/effect/immovablerod/Collide(atom/clong) if(prob(10)) playsound(src, 'sound/effects/bang.ogg', 50, 1) diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 749b98c09a..866b763fe6 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -98,6 +98,12 @@ GLOBAL_LIST_INIT(hallucinations_major, list( var/image_layer = MOB_LAYER var/active = TRUE //qdelery +/obj/effect/hallucination/singularity_pull() + return + +/obj/effect/hallucination/singularity_act() + return + /obj/effect/hallucination/simple/Initialize(mapload, var/mob/living/carbon/T) . = ..() target = T diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index ecbd8a4135..743e84aca4 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -183,3 +183,9 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) if(L.stat != DEAD) return 1 return 0 + +/obj/effect/extraction_holder/singularity_pull() + return + +/obj/effect/extraction_holder/singularity_pull() + return diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index d7fca5c84f..18eb52c8f8 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -366,7 +366,7 @@ return /obj/effect/immortality_talisman/singularity_pull() - return 0 + return /obj/effect/immortality_talisman/Destroy(force) if(!can_destroy && !force) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 9625a47cf8..8d36922bdf 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -12,6 +12,12 @@ ..() set_light(set_luminosity, set_cap) +/obj/effect/light_emitter/singularity_pull() + return + +/obj/effect/light_emitter/singularity_act() + return + /**********************Miner Lockers**************************/ /obj/structure/closet/wardrobe/miner diff --git a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm index e3792d40ba..ccec94bea8 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm @@ -117,3 +117,9 @@ var/list/guardians = spawner.summoner.hasparasites() for(var/para in guardians) to_chat(para, "[AM] has crossed surveillance snare, [name].") + +/obj/effect/snare/singularity_act() + return + +/obj/effect/snare/singularity_pull() + return diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm index f04c61426b..2756d879d1 100644 --- a/code/modules/power/singularity/particle_accelerator/particle.dm +++ b/code/modules/power/singularity/particle_accelerator/particle.dm @@ -51,6 +51,9 @@ /obj/effect/accelerated_particle/ex_act(severity, target) qdel(src) +/obj/effect/accelerated_particle/singularity_pull() + return + /obj/effect/accelerated_particle/proc/toxmob(mob/living/M) M.rad_act(energy*6) diff --git a/code/modules/projectiles/guns/beam_rifle.dm b/code/modules/projectiles/guns/beam_rifle.dm index f2d99bc849..a88e271056 100644 --- a/code/modules/projectiles/guns/beam_rifle.dm +++ b/code/modules/projectiles/guns/beam_rifle.dm @@ -772,3 +772,9 @@ icon_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "zoom_mode" background_icon_state = "bg_tech" + +/obj/effect/projectile_beam/singularity_pull() + return + +/obj/effect/projectile_beam/singularity_act() + return diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index 4bf6ea43b1..d19079d563 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -86,6 +86,12 @@ qdel(src) +/obj/effect/nettingportal/singularity_act() + return + +/obj/effect/nettingportal/singularity_pull() + return + /obj/item/projectile/energy/trap name = "energy snare" diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index e8d65cae9f..85956b0c6d 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -38,6 +38,12 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th remove_ranged_ability() return ..() +/obj/effect/proc_holder/singularity_act() + return + +/obj/effect/proc_holder/singularity_pull() + return + /obj/effect/proc_holder/proc/InterceptClickOn(mob/living/caller, params, atom/A) if(caller.ranged_ability != src || ranged_ability_user != caller) //I'm not actually sure how these would trigger, but, uh, safety, I guess? to_chat(caller, "[caller.ranged_ability.name] has been disabled.") diff --git a/code/modules/spells/spell_types/spacetime_distortion.dm b/code/modules/spells/spell_types/spacetime_distortion.dm index 25b170745f..ed6abe1410 100644 --- a/code/modules/spells/spell_types/spacetime_distortion.dm +++ b/code/modules/spells/spell_types/spacetime_distortion.dm @@ -73,6 +73,12 @@ var/sound var/walks_left = 50 //prevents the game from hanging in extreme cases (such as minigun fire) +/obj/effect/cross_action/singularity_act() + return + +/obj/effect/cross_action/singularity_pull() + return + /obj/effect/cross_action/spacetime_dist/Initialize(mapload) . = ..() sound = "sound/guitar/[safepick(GLOB.guitar_notes)]" From a45d889fd6f6c0865005fdbf581d77cff1f4bdf4 Mon Sep 17 00:00:00 2001 From: Leo Date: Fri, 24 Nov 2017 18:05:41 -0200 Subject: [PATCH 22/98] Merge pull request #32891 from CosmicScientist/bolas Re-enables bolas in crafting --- code/modules/crafting/recipes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 99e6a695dd..0378d44809 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -91,7 +91,7 @@ reqs = list(/obj/item/restraints/handcuffs/cable = 1, /obj/item/stack/sheet/metal = 6) time = 20//15 faster than crafting them by hand! - category= CAT_WEAPON + category= CAT_WEAPONRY subcategory = CAT_WEAPON /datum/crafting_recipe/tailclub From e9daba0cd3a5e80c233e7214ee40e45631904776 Mon Sep 17 00:00:00 2001 From: Leo Date: Fri, 24 Nov 2017 18:10:12 -0200 Subject: [PATCH 24/98] Merge pull request #32984 from ninjanomnom/thermite-burns Fixes thermite burning lava --- code/datums/components/thermite.dm | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/code/datums/components/thermite.dm b/code/datums/components/thermite.dm index 7418e5d7b4..f76178213d 100644 --- a/code/datums/components/thermite.dm +++ b/code/datums/components/thermite.dm @@ -3,13 +3,30 @@ var/amount var/overlay - var/static/list/blacklist = typecacheof(/turf/closed/wall/mineral/diamond) - var/static/list/resistlist = typecacheof(/turf/closed/wall/r_wall) + var/static/list/blacklist = typecacheof( + /turf/open/lava, + /turf/open/space, + /turf/open/water, + /turf/open/chasm, + ) + + var/static/list/immunelist = typecacheof( + /turf/closed/wall/mineral/diamond, + /turf/closed/indestructible, + /turf/open/indestructible, + ) + + var/static/list/resistlist = typecacheof( + /turf/closed/wall/r_wall, + ) /datum/component/thermite/Initialize(_amount) if(!istype(parent, /turf)) - return COMPONENT_INCOMPATIBLE + . = COMPONENT_INCOMPATIBLE + CRASH("A thermite component has been applied to an incorrect object. parent: [parent]") if(blacklist[parent.type]) + return COMPONENT_INCOMPATIBLE + if(immunelist[parent.type]) _amount*=0 //Yeah the overlay can still go on it and be cleaned but you arent burning down a diamond wall if(resistlist[parent.type]) _amount*=0.25 From 541b8db6842c9b8597120dc2e0211a6f622ac040 Mon Sep 17 00:00:00 2001 From: Leo Date: Fri, 24 Nov 2017 18:10:55 -0200 Subject: [PATCH 26/98] Merge pull request #32985 from YPOQ/airlockfix Fixes AIs being unable to interact with unscrewed airlocks --- code/game/machinery/doors/airlock.dm | 1 + code/modules/power/apc.dm | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 465f74f05e..449b9ea8a4 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -49,6 +49,7 @@ var/normal_integrity = AIRLOCK_INTEGRITY_N integrity_failure = 70 damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_N + interact_open = TRUE var/security_level = 0 //How much are wires secured var/aiControlDisabled = 0 //If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in. diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 35d104819f..815da3fbdb 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -49,6 +49,7 @@ max_integrity = 200 integrity_failure = 50 resistance_flags = FIRE_PROOF + interact_open = TRUE var/lon_range = 1.5 var/area/area @@ -657,7 +658,7 @@ wires.interact(user) else return ..() - + /obj/machinery/power/apc/AltClick(mob/user) ..() if(!issilicon(user) && (!user.canUseTopic(src, be_close=TRUE) || !isturf(loc))) @@ -665,7 +666,7 @@ return else togglelock(user) - + /obj/machinery/power/apc/proc/togglelock(mob/living/user) if(emagged) to_chat(user, "The interface is broken!") From 521277292d3589931d3172543d4c8a93a0cb07a5 Mon Sep 17 00:00:00 2001 From: Leo Date: Fri, 24 Nov 2017 18:12:44 -0200 Subject: [PATCH 28/98] Revises the_station_areas list --- code/controllers/subsystem/mapping.dm | 14 ++++++++++++++ code/game/area/Space_Station_13_areas.dm | 5 ++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 03b7cdc095..6b394c3a1f 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -62,6 +62,7 @@ SUBSYSTEM_DEF(mapping) repopulate_sorted_areas() // Set up Z-level transistions. setup_map_transitions() + generate_station_area_list() ..() /* Nuke threats, for making the blue tiles on the station go RED @@ -139,6 +140,19 @@ SUBSYSTEM_DEF(mapping) INIT_ANNOUNCE(msg) #undef INIT_ANNOUNCE +GLOBAL_LIST_EMPTY(the_station_areas) + +/datum/controller/subsystem/mapping/proc/generate_station_area_list() + var/list/station_areas_blacklist = typecacheof(list(/area/space, /area/mine, /area/ruin)) + for(var/area/A in world) + var/turf/picked = safepick(get_area_turfs(A.type)) + if(picked && (picked.z in GLOB.station_z_levels)) + if(!(A.type in GLOB.the_station_areas) && !is_type_in_typecache(A, station_areas_blacklist)) + GLOB.the_station_areas.Add(A.type) + + if(!GLOB.the_station_areas.len) + log_world("ERROR: Station areas list failed to generate!") + /datum/controller/subsystem/mapping/proc/maprotate() var/players = GLOB.clients.len var/list/mapvotes = list() diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm index b17fe26898..e1d650eba4 100644 --- a/code/game/area/Space_Station_13_areas.dm +++ b/code/game/area/Space_Station_13_areas.dm @@ -1486,6 +1486,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/tcommsat/lounge name = "Telecommunications Satellite Lounge" icon_state = "tcomsatlounge" +<<<<<<< HEAD ///////////////////////////////////////////////////////////////////// /* @@ -1518,4 +1519,6 @@ GLOBAL_LIST_INIT(the_station_areas, list ( /area/ai_monitored/turret_protected/ai_upload, //do not try to simplify to "/area/ai_monitored/turret_protected" --rastaf0 /area/ai_monitored/turret_protected/ai_upload_foyer, /area/ai_monitored/turret_protected/ai, -)) \ No newline at end of file +)) +======= +>>>>>>> 3d28b08... Merge pull request #32998 from ShizCalev/area-list From 5d53a5dc75b9e66aa8726d3af428dcb2e53f4bde Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Fri, 24 Nov 2017 12:50:46 -0800 Subject: [PATCH 29/98] Update cit_guns.dm --- code/citadel/cit_guns.dm | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/code/citadel/cit_guns.dm b/code/citadel/cit_guns.dm index 3d08eaeba1..1068d490f1 100644 --- a/code/citadel/cit_guns.dm +++ b/code/citadel/cit_guns.dm @@ -215,7 +215,7 @@ damage = 15 armour_penetration = 10 light_range = 2 - speed = 1.2 + speed = 0.6 range = 25 light_color = LIGHT_COLOR_RED @@ -224,10 +224,10 @@ icon_state = "magjectile-nl" damage = 1 knockdown = 0 - stamina = 30 + stamina = 25 armour_penetration = -10 light_range = 2 - speed = 1.2 + speed = 0.7 range = 25 light_color = LIGHT_COLOR_BLUE @@ -257,7 +257,7 @@ origin_tech = "magnets=5" ammo_type = /obj/item/ammo_casing/caseless/anlmags caliber = "mags" - max_ammo = 7 + max_ammo = 15 multiple_sprites = 2 /obj/item/ammo_box/magazine/mmag/small/lethal @@ -279,7 +279,7 @@ mag_type = /obj/item/ammo_box/magazine/mmag/small can_suppress = 0 casing_ejector = 0 - fire_delay = 5 + fire_delay = 2 origin_tech = "combat=4;magnets=4" /obj/item/gun/ballistic/automatic/pistol/mag/update_icon() @@ -389,7 +389,7 @@ damage = 20 armour_penetration = 25 light_range = 3 - speed = 1.2 + speed = 0.7 range = 35 light_color = LIGHT_COLOR_RED @@ -398,10 +398,10 @@ icon_state = "magjectile-large-nl" damage = 0 knockdown = 0 - stamina = 35 + stamina = 20 armour_penetration = -10 light_range = 3 - speed = 1.0 + speed = 0.65 range = 35 light_color = LIGHT_COLOR_BLUE @@ -430,7 +430,7 @@ origin_tech = "magnets=6" ammo_type = /obj/item/ammo_casing/caseless/anlmagm caliber = "magm" - max_ammo = 15 + max_ammo = 27 multiple_sprites = 2 /obj/item/ammo_box/magazine/mmag/lethal @@ -439,6 +439,7 @@ icon_state = "mediummagmag" origin_tech = "combat=6" ammo_type = /obj/item/ammo_casing/caseless/amagm + max_ammo = 21 ///the gun itself/// @@ -455,7 +456,7 @@ can_suppress = 0 burst_size = 3 fire_delay = 2 - spread = 30 + spread = 20 recoil = 1 casing_ejector = 0 From a12a12b55085db852d918c5f7e4f479e22fc7834 Mon Sep 17 00:00:00 2001 From: Armhulen Date: Fri, 24 Nov 2017 13:20:37 -0800 Subject: [PATCH 30/98] comma splice and ellipsis grammar fix (#33040) * :*) * i think this fixes splice --- code/modules/mob/living/simple_animal/spawner.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/simple_animal/spawner.dm b/code/modules/mob/living/simple_animal/spawner.dm index 33eade6014..4e136e6aa6 100644 --- a/code/modules/mob/living/simple_animal/spawner.dm +++ b/code/modules/mob/living/simple_animal/spawner.dm @@ -57,7 +57,7 @@ /mob/living/simple_animal/hostile/spawner/skeleton name = "bone pit" - desc = "A pit full of bones, some still seem to be moving.." + desc = "A pit full of bones, and some still seem to be moving..." icon_state = "hole" icon_living = "hole" icon = 'icons/mob/nest.dmi' @@ -102,4 +102,4 @@ /mob/living/simple_animal/hostile/spawner/mining/wumborian name = "wumborian fugu den" desc = "A den housing a nest of wumborian fugus, how do they all even fit in there?" - mob_type = /mob/living/simple_animal/hostile/asteroid/fugu \ No newline at end of file + mob_type = /mob/living/simple_animal/hostile/asteroid/fugu From c43dc3ab7a058da051d579d97b8f9df1a84a8c38 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 24 Nov 2017 17:39:59 -0500 Subject: [PATCH 32/98] Update Space_Station_13_areas.dm --- code/game/area/Space_Station_13_areas.dm | 36 ------------------------ 1 file changed, 36 deletions(-) diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm index e1d650eba4..c3296175fb 100644 --- a/code/game/area/Space_Station_13_areas.dm +++ b/code/game/area/Space_Station_13_areas.dm @@ -1486,39 +1486,3 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/tcommsat/lounge name = "Telecommunications Satellite Lounge" icon_state = "tcomsatlounge" -<<<<<<< HEAD - -///////////////////////////////////////////////////////////////////// -/* - Lists of areas to be used with is_type_in_list. - Used in gamemodes code at the moment. --rastaf0 -*/ - -//SPACE STATION 13 -GLOBAL_LIST_INIT(the_station_areas, list ( - /area/bridge, - /area/chapel, - /area/construction, - /area/crew_quarters, - /area/engine, - /area/hallway, - /area/holodeck, - /area/hydroponics, - /area/janitor, - /area/lawoffice, - /area/library, - /area/maintenance, - /area/medical, - /area/quartermaster, - /area/science, - /area/security, - /area/solar, - /area/storage, - /area/teleporter, - /area/ai_monitored/storage/eva, //do not try to simplify to "/area/ai_monitored" --rastaf0 - /area/ai_monitored/turret_protected/ai_upload, //do not try to simplify to "/area/ai_monitored/turret_protected" --rastaf0 - /area/ai_monitored/turret_protected/ai_upload_foyer, - /area/ai_monitored/turret_protected/ai, -)) -======= ->>>>>>> 3d28b08... Merge pull request #32998 from ShizCalev/area-list From aaa221a8cb177a0282227659feb2fd393c7cc1d2 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 24 Nov 2017 16:56:52 -0600 Subject: [PATCH 33/98] Automatic changelog generation for PR #4106 [ci skip] --- html/changelogs/AutoChangeLog-pr-4106.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4106.yml diff --git a/html/changelogs/AutoChangeLog-pr-4106.yml b/html/changelogs/AutoChangeLog-pr-4106.yml new file mode 100644 index 0000000000..326d296e90 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4106.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Some misplaced decals in the Hotel brig have been corrected." From 7a2ef152f93f796aaad669af757f796026b83dc9 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 24 Nov 2017 16:57:28 -0600 Subject: [PATCH 34/98] Automatic changelog generation for PR #4112 [ci skip] --- html/changelogs/AutoChangeLog-pr-4112.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4112.yml diff --git a/html/changelogs/AutoChangeLog-pr-4112.yml b/html/changelogs/AutoChangeLog-pr-4112.yml new file mode 100644 index 0000000000..12412931b6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4112.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "AIs and cyborgs can interact with unscrewed airlocks and APCs." From 7b2a926235be59228f56da76ef6bbd86ad2592d6 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 24 Nov 2017 17:58:29 -0500 Subject: [PATCH 35/98] Update bump_teleporter.dm --- code/game/objects/effects/bump_teleporter.dm | 42 ++++++-------------- 1 file changed, 13 insertions(+), 29 deletions(-) diff --git a/code/game/objects/effects/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm index 5e17ee9e89..8eb4c986de 100644 --- a/code/game/objects/effects/bump_teleporter.dm +++ b/code/game/objects/effects/bump_teleporter.dm @@ -1,26 +1,12 @@ -/obj/effect/bump_teleporter - name = "bump-teleporter" - icon = 'icons/mob/screen_gen.dmi' - icon_state = "x2" - var/id = null //id of this bump_teleporter. - var/id_target = null //id of bump_teleporter which this moves you to. - invisibility = INVISIBILITY_ABSTRACT //nope, can't see this +/obj/effect/bump_teleporter + name = "bump-teleporter" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x2" + var/id = null //id of this bump_teleporter. + var/id_target = null //id of bump_teleporter which this moves you to. + invisibility = INVISIBILITY_ABSTRACT //nope, can't see this anchored = TRUE density = TRUE -<<<<<<< HEAD - opacity = 0 - - var/static/list/AllTeleporters - -/obj/effect/bump_teleporter/New() - ..() - LAZYADD(AllTeleporters, src) - -/obj/effect/bump_teleporter/Destroy() - LAZYREMOVE(AllTeleporters, src) - return ..() - -======= opacity = 0 var/static/list/AllTeleporters @@ -33,20 +19,18 @@ LAZYREMOVE(AllTeleporters, src) return ..() - /obj/effect/bump_teleporter/singularity_act() return /obj/effect/bump_teleporter/singularity_pull() return ->>>>>>> f912b6e... Fixes Lord Singuloth hungering for more than he should (#33025) /obj/effect/bump_teleporter/CollidedWith(atom/movable/AM) if(!ismob(AM)) - return - if(!id_target) - return - - for(var/obj/effect/bump_teleporter/BT in AllTeleporters) - if(BT.id == src.id_target) + return + if(!id_target) + return + + for(var/obj/effect/bump_teleporter/BT in AllTeleporters) + if(BT.id == src.id_target) AM.forceMove(BT.loc) //Teleport to location with correct id. From d04bbbdd677dbb18196718f5e140eca39fdd1b7a Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 24 Nov 2017 17:59:18 -0500 Subject: [PATCH 36/98] Update step_triggers.dm --- code/game/objects/effects/step_triggers.dm | 203 +-------------------- 1 file changed, 7 insertions(+), 196 deletions(-) diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index 229dfc56de..bfed048eff 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -1,199 +1,11 @@ -/* Simple object type, calls a proc when "stepped" on by something */ - -/obj/effect/step_trigger - var/affect_ghosts = 0 - var/stopper = 1 // stops throwers - var/mobs_only = FALSE - invisibility = INVISIBILITY_ABSTRACT // nope cant see this shit +/* Simple object type, calls a proc when "stepped" on by something */ + +/obj/effect/step_trigger + var/affect_ghosts = 0 + var/stopper = 1 // stops throwers + var/mobs_only = FALSE + invisibility = INVISIBILITY_ABSTRACT // nope cant see this shit anchored = TRUE -<<<<<<< HEAD - -/obj/effect/step_trigger/proc/Trigger(atom/movable/A) - return 0 - -/obj/effect/step_trigger/Crossed(H as mob|obj) - ..() - if(!H) - return - if(isobserver(H) && !affect_ghosts) - return - if(!ismob(H) && mobs_only) - return - Trigger(H) - -/* Sends a message to mob when triggered*/ - -/obj/effect/step_trigger/message - var/message //the message to give to the mob - var/once = 1 - mobs_only = TRUE - -/obj/effect/step_trigger/message/Trigger(mob/M) - if(M.client) - to_chat(M, "[message]") - if(once) - qdel(src) - -/* Tosses things in a certain direction */ - -/obj/effect/step_trigger/thrower - var/direction = SOUTH // the direction of throw - var/tiles = 3 // if 0: forever until atom hits a stopper - var/immobilize = 1 // if nonzero: prevents mobs from moving while they're being flung - var/speed = 1 // delay of movement - var/facedir = 0 // if 1: atom faces the direction of movement - var/nostop = 0 // if 1: will only be stopped by teleporters - var/list/affecting = list() - -/obj/effect/step_trigger/thrower/Trigger(atom/A) - if(!A || !ismovableatom(A)) - return - var/atom/movable/AM = A - var/curtiles = 0 - var/stopthrow = 0 - for(var/obj/effect/step_trigger/thrower/T in orange(2, src)) - if(AM in T.affecting) - return - - if(ismob(AM)) - var/mob/M = AM - if(immobilize) - M.canmove = 0 - - affecting.Add(AM) - while(AM && !stopthrow) - if(tiles) - if(curtiles >= tiles) - break - if(AM.z != src.z) - break - - curtiles++ - - sleep(speed) - - // Calculate if we should stop the process - if(!nostop) - for(var/obj/effect/step_trigger/T in get_step(AM, direction)) - if(T.stopper && T != src) - stopthrow = 1 - else - for(var/obj/effect/step_trigger/teleporter/T in get_step(AM, direction)) - if(T.stopper) - stopthrow = 1 - - if(AM) - var/predir = AM.dir - step(AM, direction) - if(!facedir) - AM.setDir(predir) - - - - affecting.Remove(AM) - - if(ismob(AM)) - var/mob/M = AM - if(immobilize) - M.canmove = 1 - -/* Stops things thrown by a thrower, doesn't do anything */ - -/obj/effect/step_trigger/stopper - -/* Instant teleporter */ - -/obj/effect/step_trigger/teleporter - var/teleport_x = 0 // teleportation coordinates (if one is null, then no teleport!) - var/teleport_y = 0 - var/teleport_z = 0 - -/obj/effect/step_trigger/teleporter/Trigger(atom/movable/A) - if(teleport_x && teleport_y && teleport_z) - - A.x = teleport_x - A.y = teleport_y - A.z = teleport_z - -/* Random teleporter, teleports atoms to locations ranging from teleport_x - teleport_x_offset, etc */ - -/obj/effect/step_trigger/teleporter/random - var/teleport_x_offset = 0 - var/teleport_y_offset = 0 - var/teleport_z_offset = 0 - -/obj/effect/step_trigger/teleporter/random/Trigger(atom/movable/A) - if(teleport_x && teleport_y && teleport_z) - if(teleport_x_offset && teleport_y_offset && teleport_z_offset) - - A.x = rand(teleport_x, teleport_x_offset) - A.y = rand(teleport_y, teleport_y_offset) - A.z = rand(teleport_z, teleport_z_offset) - -/* Fancy teleporter, creates sparks and smokes when used */ - -/obj/effect/step_trigger/teleport_fancy - var/locationx - var/locationy - var/uses = 1 //0 for infinite uses - var/entersparks = 0 - var/exitsparks = 0 - var/entersmoke = 0 - var/exitsmoke = 0 - -/obj/effect/step_trigger/teleport_fancy/Trigger(mob/M) - var/dest = locate(locationx, locationy, z) - M.Move(dest) - - if(entersparks) - var/datum/effect_system/spark_spread/s = new - s.set_up(4, 1, src) - s.start() - if(exitsparks) - var/datum/effect_system/spark_spread/s = new - s.set_up(4, 1, dest) - s.start() - - if(entersmoke) - var/datum/effect_system/smoke_spread/s = new - s.set_up(4, 1, src, 0) - s.start() - if(exitsmoke) - var/datum/effect_system/smoke_spread/s = new - s.set_up(4, 1, dest, 0) - s.start() - - uses-- - if(uses == 0) - qdel(src) - -/* Simple sound player, Mapper friendly! */ - -/obj/effect/step_trigger/sound_effect - var/sound //eg. path to the sound, inside '' eg: 'growl.ogg' - var/volume = 100 - var/freq_vary = 1 //Should the frequency of the sound vary? - var/extra_range = 0 // eg World.view = 7, extra_range = 1, 7+1 = 8, 8 turfs radius - var/happens_once = 0 - var/triggerer_only = 0 //Whether the triggerer is the only person who hears this - - -/obj/effect/step_trigger/sound_effect/Trigger(atom/movable/A) - var/turf/T = get_turf(A) - - if(!T) - return - - if(triggerer_only && ismob(A)) - var/mob/B = A - B.playsound_local(T, sound, volume, freq_vary) - else - playsound(T, sound, volume, freq_vary, extra_range) - - if(happens_once) - qdel(src) - -======= /obj/effect/step_trigger/proc/Trigger(atom/movable/A) return 0 @@ -387,4 +199,3 @@ if(happens_once) qdel(src) ->>>>>>> f912b6e... Fixes Lord Singuloth hungering for more than he should (#33025) From ac3e4a800b1d556949ac7e66d7c2557ae7abcd7f Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 24 Nov 2017 17:00:07 -0600 Subject: [PATCH 37/98] Automatic changelog generation for PR #4100 [ci skip] --- html/changelogs/AutoChangeLog-pr-4100.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4100.yml diff --git a/html/changelogs/AutoChangeLog-pr-4100.yml b/html/changelogs/AutoChangeLog-pr-4100.yml new file mode 100644 index 0000000000..e8abc00b9e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4100.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Fix water misters being inappropriately glued to hands in some cases." From 44fb7ccdb791aa1bc55661e2dcb71bfbdf5a7e67 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 24 Nov 2017 18:00:44 -0500 Subject: [PATCH 38/98] Update drinkingglass.dm --- code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm | 6 ------ 1 file changed, 6 deletions(-) diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm index 875185afb1..263d592303 100644 --- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm @@ -74,15 +74,9 @@ desc = "A shot glass - the universal symbol for bad decisions." return -<<<<<<< HEAD -/obj/item/reagent_containers/food/drinks/drinkingglass/filled/New() - ..() - on_reagent_change() -======= /obj/item/reagent_containers/food/drinks/drinkingglass/filled/Initialize() . = ..() on_reagent_change(ADD_REAGENT) ->>>>>>> 73b25d7... Refactor on_reagent_change to pass through the change type (#32805) /obj/item/reagent_containers/food/drinks/drinkingglass/filled/soda name = "Soda Water" From 54947e9f8a2a4d26cf86c4f72ed79a52631c5f15 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 24 Nov 2017 17:01:38 -0600 Subject: [PATCH 39/98] Automatic changelog generation for PR #4099 [ci skip] --- html/changelogs/AutoChangeLog-pr-4099.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4099.yml diff --git a/html/changelogs/AutoChangeLog-pr-4099.yml b/html/changelogs/AutoChangeLog-pr-4099.yml new file mode 100644 index 0000000000..ac5424fd57 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4099.yml @@ -0,0 +1,4 @@ +author: "ninjanomnom" +delete-after: True +changes: + - bugfix: "Custom shuttle dockers can no longer place docking regions inside other custom docker regions." From 754490a2d36989d198e0111f688e9f7b52467d8f Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 24 Nov 2017 18:02:51 -0500 Subject: [PATCH 40/98] Update pandemic.dm --- code/modules/reagents/chemistry/machinery/pandemic.dm | 6 ------ 1 file changed, 6 deletions(-) diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index ae0f4a008a..9400d3317f 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -195,15 +195,9 @@ addtimer(CALLBACK(src, .proc/reset_replicator_cooldown), 50) . = TRUE if("create_vaccine_bottle") -<<<<<<< HEAD - var/index = text2num(params["index"]) - var/datum/disease/D = SSdisease.archive_diseases[get_virus_id_by_index(index)] - var/obj/item/reagent_containers/glass/bottle/B = new(get_turf(src)) -======= var/id = params["index"] var/datum/disease/D = SSdisease.archive_diseases[id] var/obj/item/reagent_containers/glass/bottle/B = new(drop_location()) ->>>>>>> ed12ad4... Updates some item drops to use drop_location() (#32994) B.name = "[D.name] vaccine bottle" B.reagents.add_reagent("vaccine", 15, list(index)) wait = TRUE From a93c69614f30aaeb27a9d456a054f6a43f810496 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 24 Nov 2017 17:13:30 -0600 Subject: [PATCH 41/98] Automatic changelog generation for PR #4105 [ci skip] --- html/changelogs/AutoChangeLog-pr-4105.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4105.yml diff --git a/html/changelogs/AutoChangeLog-pr-4105.yml b/html/changelogs/AutoChangeLog-pr-4105.yml new file mode 100644 index 0000000000..1ce922ad64 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4105.yml @@ -0,0 +1,4 @@ +author: "More Robust Than You" +delete-after: True +changes: + - tweak: "Spessmen are now smart enough to realize you don't need to turn around to pull cigarette butts" From 38a7229bdda75684904a7e76c75f13e58676cf7f Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 24 Nov 2017 17:14:34 -0600 Subject: [PATCH 42/98] Automatic changelog generation for PR #4110 [ci skip] --- html/changelogs/AutoChangeLog-pr-4110.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4110.yml diff --git a/html/changelogs/AutoChangeLog-pr-4110.yml b/html/changelogs/AutoChangeLog-pr-4110.yml new file mode 100644 index 0000000000..cd94f6dae7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4110.yml @@ -0,0 +1,4 @@ +author: "CosmicScientist" +delete-after: True +changes: + - bugfix: "bolas are back in tablecrafting!" From cf053af319509ac36ffe7b9e8b0c5e5f7bc6a997 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 24 Nov 2017 18:50:23 -0500 Subject: [PATCH 43/98] Update pandemic.dm --- code/modules/reagents/chemistry/machinery/pandemic.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 9400d3317f..466aa047ad 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -199,7 +199,7 @@ var/datum/disease/D = SSdisease.archive_diseases[id] var/obj/item/reagent_containers/glass/bottle/B = new(drop_location()) B.name = "[D.name] vaccine bottle" - B.reagents.add_reagent("vaccine", 15, list(index)) + B.reagents.add_reagent("vaccine", 15, list(id)) wait = TRUE update_icon() addtimer(CALLBACK(src, .proc/reset_replicator_cooldown), 200) From 6dea43c70990565c9f8b3012727842e9023d084f Mon Sep 17 00:00:00 2001 From: Dorsisdwarf Date: Fri, 24 Nov 2017 23:56:11 +0000 Subject: [PATCH 44/98] Advanced Laserpointer Feline Interaction --- code/__DEFINES/is_helpers.dm | 3 + .../objects/items/devices/laserpointer.dm | 162 ++++++++++++++++++ code/modules/admin/verbs/randomverbs.dm | 11 +- 3 files changed, 168 insertions(+), 8 deletions(-) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 47db1dbc06..1e5e994636 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -59,6 +59,9 @@ #define iszombie(A) (is_species(A, /datum/species/zombie)) #define ishumanbasic(A) (is_species(A, /datum/species/human)) +//why arent catpeople a subspecies +#define iscatperson(A) (ishumanbasic(A) && ( A.dna.features["ears"] == "Cat" || A.dna.features["human_tail"] == "Cat") ) + //more carbon mobs #define ismonkey(A) (istype(A, /mob/living/carbon/monkey)) diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index eef7a0bf7a..4233a82779 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -16,6 +16,7 @@ var/effectchance = 33 var/recharging = 0 var/recharge_locked = FALSE +<<<<<<< HEAD var/obj/item/stock_parts/micro_laser/diode //used for upgrading! @@ -150,6 +151,167 @@ START_PROCESSING(SSobj, src) if(energy <= 0) to_chat(user, "[src]'s battery is overused, it needs time to recharge!") +======= + var/obj/item/stock_parts/micro_laser/diode //used for upgrading! + + +/obj/item/device/laser_pointer/red + pointer_icon_state = "red_laser" +/obj/item/device/laser_pointer/green + pointer_icon_state = "green_laser" +/obj/item/device/laser_pointer/blue + pointer_icon_state = "blue_laser" +/obj/item/device/laser_pointer/purple + pointer_icon_state = "purple_laser" + +/obj/item/device/laser_pointer/New() + ..() + diode = new(src) + if(!pointer_icon_state) + pointer_icon_state = pick("red_laser","green_laser","blue_laser","purple_laser") + +/obj/item/device/laser_pointer/upgraded/New() + ..() + diode = new /obj/item/stock_parts/micro_laser/ultra + +/obj/item/device/laser_pointer/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/stock_parts/micro_laser)) + if(!diode) + if(!user.transferItemToLoc(W, src)) + return + diode = W + to_chat(user, "You install a [diode.name] in [src].") + else + to_chat(user, "[src] already has a diode installed.") + + else if(istype(W, /obj/item/screwdriver)) + if(diode) + to_chat(user, "You remove the [diode.name] from \the [src].") + diode.loc = get_turf(src.loc) + diode = null + else + return ..() + +/obj/item/device/laser_pointer/afterattack(atom/target, mob/living/user, flag, params) + laser_act(target, user, params) + +/obj/item/device/laser_pointer/proc/laser_act(atom/target, mob/living/user, params) + if( !(user in (viewers(7,target))) ) + return + if (!diode) + to_chat(user, "You point [src] at [target], but nothing happens!") + return + if (!user.IsAdvancedToolUser()) + to_chat(user, "You don't have the dexterity to do this!") + return + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.dna.check_mutation(HULK) || (NOGUNS in H.dna.species.species_traits)) + to_chat(user, "Your fingers can't press the button!") + return + + add_fingerprint(user) + + //nothing happens if the battery is drained + if(recharge_locked) + to_chat(user, "You point [src] at [target], but it's still charging.") + return + + var/outmsg + var/turf/targloc = get_turf(target) + + //human/alien mobs + if(iscarbon(target)) + var/mob/living/carbon/C = target + if(user.zone_selected == "eyes") + add_logs(user, C, "shone in the eyes", src) + + var/severity = 1 + if(prob(33)) + severity = 2 + else if(prob(50)) + severity = 0 + + //chance to actually hit the eyes depends on internal component + if(prob(effectchance * diode.rating) && C.flash_act(severity)) + outmsg = "You blind [C] by shining [src] in their eyes." + else + outmsg = "You fail to blind [C] by shining [src] at their eyes!" + + //robots + else if(iscyborg(target)) + var/mob/living/silicon/S = target + add_logs(user, S, "shone in the sensors", src) + //chance to actually hit the eyes depends on internal component + if(prob(effectchance * diode.rating)) + S.flash_act(affect_silicon = 1) + S.Knockdown(rand(100,200)) + to_chat(S, "Your sensors were overloaded by a laser!") + outmsg = "You overload [S] by shining [src] at their sensors." + else + outmsg = "You fail to overload [S] by shining [src] at their sensors!" + + //cameras + else if(istype(target, /obj/machinery/camera)) + var/obj/machinery/camera/C = target + if(prob(effectchance * diode.rating)) + C.emp_act(EMP_HEAVY) + outmsg = "You hit the lens of [C] with [src], temporarily disabling the camera!" + add_logs(user, C, "EMPed", src) + else + outmsg = "You miss the lens of [C] with [src]!" + + //catpeople + for(var/mob/living/carbon/human/H in view(1,targloc)) + if(!iscatperson(H) || H.incapacitated() || H.eye_blind ) + continue + if(!H.lying) + H.setDir(get_dir(H,targloc)) // kitty always looks at the light + if(prob(effectchance)) + H.visible_message("[H] makes a grab for the light!","LIGHT!") + H.Move(targloc) + add_logs(user, H, "moved with a laser pointer",src) + else + H.visible_message("[H] looks briefly distracted by the light."," You're briefly tempted by the shiny light... ") + else + H.visible_message("[H] stares at the light"," You stare at the light... ") + + //cats! + for(var/mob/living/simple_animal/pet/cat/C in view(1,targloc)) + if(prob(50)) + C.visible_message("[C] pounces on the light!","LIGHT!") + C.Move(targloc) + C.resting = TRUE + C.update_canmove() + else + C.visible_message("[C] looks uninterested in your games.","You spot [user] shining [src] at you. How insulting!") + + //laser pointer image + icon_state = "pointer_[pointer_icon_state]" + var/image/I = image('icons/obj/projectiles.dmi',targloc,pointer_icon_state,10) + var/list/click_params = params2list(params) + if(click_params) + if(click_params["icon-x"]) + I.pixel_x = (text2num(click_params["icon-x"]) - 16) + if(click_params["icon-y"]) + I.pixel_y = (text2num(click_params["icon-y"]) - 16) + else + I.pixel_x = target.pixel_x + rand(-5,5) + I.pixel_y = target.pixel_y + rand(-5,5) + + if(outmsg) + to_chat(user, outmsg) + else + to_chat(user, "You point [src] at [target].") + + energy -= 1 + if(energy <= max_energy) + if(!recharging) + recharging = 1 + START_PROCESSING(SSobj, src) + if(energy <= 0) + to_chat(user, "[src]'s battery is overused, it needs time to recharge!") +>>>>>>> ae9ba7b... Advanced Laserpointer Feline Interaction (#32940) recharge_locked = TRUE flick_overlay_view(I, targloc, 10) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index accd8f7dcf..bf12b3eb66 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -1091,9 +1091,6 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits log_admin("[key_name(usr)] sent \"[input]\" as the Tip of the Round.") SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Tip") -#define ON_PURRBATION(H) (\H.getorgan(/obj/item/organ/tail/cat) || H.getorgan(/obj/item/organ/ears/cat) || \ - H.dna.features["ears"] == "Cat" || H.dna.features["human_tail"] == "Cat") - /proc/mass_purrbation() for(var/M in GLOB.mob_list) if(ishumanbasic(M)) @@ -1109,7 +1106,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits /proc/purrbation_toggle(mob/living/carbon/human/H, silent = FALSE) if(!ishumanbasic(H)) return - if(!ON_PURRBATION(H)) + if(!iscatperson(H)) purrbation_apply(H, silent) . = TRUE else @@ -1119,7 +1116,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits /proc/purrbation_apply(mob/living/carbon/human/H, silent = FALSE) if(!ishuman(H)) return - if(ON_PURRBATION(H)) + if(iscatperson(H)) return var/obj/item/organ/ears/cat/ears = new @@ -1134,7 +1131,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits /proc/purrbation_remove(mob/living/carbon/human/H, silent = FALSE) if(!ishuman(H)) return - if(!ON_PURRBATION(H)) + if(!iscatperson(H)) return var/obj/item/organ/ears/cat/ears = H.getorgan(/obj/item/organ/ears/cat) @@ -1173,8 +1170,6 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits if(!silent) to_chat(H, "You are no longer a cat.") -#undef ON_PURRBATION - /client/proc/modify_goals() set category = "Debug" set name = "Modify goals" From 186bcf6ef4900afc3287004356eddcef85a31602 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 24 Nov 2017 19:03:25 -0500 Subject: [PATCH 45/98] Update laserpointer.dm --- .../objects/items/devices/laserpointer.dm | 191 +++--------------- 1 file changed, 27 insertions(+), 164 deletions(-) diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index 4233a82779..24d508b8c3 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -1,157 +1,21 @@ -/obj/item/device/laser_pointer - name = "laser pointer" - desc = "Don't shine it in your eyes!" - icon = 'icons/obj/device.dmi' - icon_state = "pointer" - item_state = "pen" - var/pointer_icon_state +/obj/item/device/laser_pointer + name = "laser pointer" + desc = "Don't shine it in your eyes!" + icon = 'icons/obj/device.dmi' + icon_state = "pointer" + item_state = "pen" + var/pointer_icon_state flags_1 = CONDUCT_1 | NOBLUDGEON_1 - slot_flags = SLOT_BELT - materials = list(MAT_METAL=500, MAT_GLASS=500) - w_class = WEIGHT_CLASS_SMALL - origin_tech = "combat=1;magnets=2" - var/turf/pointer_loc - var/energy = 5 - var/max_energy = 5 - var/effectchance = 33 - var/recharging = 0 + slot_flags = SLOT_BELT + materials = list(MAT_METAL=500, MAT_GLASS=500) + w_class = WEIGHT_CLASS_SMALL + origin_tech = "combat=1;magnets=2" + var/turf/pointer_loc + var/energy = 5 + var/max_energy = 5 + var/effectchance = 33 + var/recharging = 0 var/recharge_locked = FALSE -<<<<<<< HEAD - var/obj/item/stock_parts/micro_laser/diode //used for upgrading! - - -/obj/item/device/laser_pointer/red - pointer_icon_state = "red_laser" -/obj/item/device/laser_pointer/green - pointer_icon_state = "green_laser" -/obj/item/device/laser_pointer/blue - pointer_icon_state = "blue_laser" -/obj/item/device/laser_pointer/purple - pointer_icon_state = "purple_laser" - -/obj/item/device/laser_pointer/New() - ..() - diode = new(src) - if(!pointer_icon_state) - pointer_icon_state = pick("red_laser","green_laser","blue_laser","purple_laser") - -/obj/item/device/laser_pointer/upgraded/New() - ..() - diode = new /obj/item/stock_parts/micro_laser/ultra - -/obj/item/device/laser_pointer/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/stock_parts/micro_laser)) - if(!diode) - if(!user.transferItemToLoc(W, src)) - return - diode = W - to_chat(user, "You install a [diode.name] in [src].") - else - to_chat(user, "[src] already has a diode installed.") - - else if(istype(W, /obj/item/screwdriver)) - if(diode) - to_chat(user, "You remove the [diode.name] from \the [src].") - diode.loc = get_turf(src.loc) - diode = null - else - return ..() - -/obj/item/device/laser_pointer/afterattack(atom/target, mob/living/user, flag, params) - laser_act(target, user, params) - -/obj/item/device/laser_pointer/proc/laser_act(atom/target, mob/living/user, params) - if( !(user in (viewers(7,target))) ) - return - if (!diode) - to_chat(user, "You point [src] at [target], but nothing happens!") - return - if (!user.IsAdvancedToolUser()) - to_chat(user, "You don't have the dexterity to do this!") - return - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.dna.check_mutation(HULK) || (NOGUNS in H.dna.species.species_traits)) - to_chat(user, "Your fingers can't press the button!") - return - - add_fingerprint(user) - - //nothing happens if the battery is drained - if(recharge_locked) - to_chat(user, "You point [src] at [target], but it's still charging.") - return - - var/outmsg - var/turf/targloc = get_turf(target) - - //human/alien mobs - if(iscarbon(target)) - var/mob/living/carbon/C = target - if(user.zone_selected == "eyes") - add_logs(user, C, "shone in the eyes", src) - - var/severity = 1 - if(prob(33)) - severity = 2 - else if(prob(50)) - severity = 0 - - //20% chance to actually hit the eyes - if(prob(effectchance * diode.rating) && C.flash_act(severity)) - outmsg = "You blind [C] by shining [src] in their eyes." - else - outmsg = "You fail to blind [C] by shining [src] at their eyes!" - - //robots - else if(iscyborg(target)) - var/mob/living/silicon/S = target - //20% chance to actually hit the sensors - if(prob(effectchance * diode.rating)) - S.flash_act(affect_silicon = 1) - S.Knockdown(rand(100,200)) - to_chat(S, "Your sensors were overloaded by a laser!") - outmsg = "You overload [S] by shining [src] at their sensors." - add_logs(user, S, "shone in the sensors", src) - else - outmsg = "You fail to overload [S] by shining [src] at their sensors!" - - //cameras - else if(istype(target, /obj/machinery/camera)) - var/obj/machinery/camera/C = target - if(prob(effectchance * diode.rating)) - C.emp_act(EMP_HEAVY) - outmsg = "You hit the lens of [C] with [src], temporarily disabling the camera!" - add_logs(user, C, "EMPed", src) - else - outmsg = "You miss the lens of [C] with [src]!" - - //laser pointer image - icon_state = "pointer_[pointer_icon_state]" - var/image/I = image('icons/obj/projectiles.dmi',targloc,pointer_icon_state,10) - var/list/click_params = params2list(params) - if(click_params) - if(click_params["icon-x"]) - I.pixel_x = (text2num(click_params["icon-x"]) - 16) - if(click_params["icon-y"]) - I.pixel_y = (text2num(click_params["icon-y"]) - 16) - else - I.pixel_x = target.pixel_x + rand(-5,5) - I.pixel_y = target.pixel_y + rand(-5,5) - - if(outmsg) - to_chat(user, outmsg) - else - to_chat(user, "You point [src] at [target].") - - energy -= 1 - if(energy <= max_energy) - if(!recharging) - recharging = 1 - START_PROCESSING(SSobj, src) - if(energy <= 0) - to_chat(user, "[src]'s battery is overused, it needs time to recharge!") -======= var/obj/item/stock_parts/micro_laser/diode //used for upgrading! @@ -311,17 +175,16 @@ START_PROCESSING(SSobj, src) if(energy <= 0) to_chat(user, "[src]'s battery is overused, it needs time to recharge!") ->>>>>>> ae9ba7b... Advanced Laserpointer Feline Interaction (#32940) recharge_locked = TRUE - - flick_overlay_view(I, targloc, 10) - icon_state = "pointer" - -/obj/item/device/laser_pointer/process() - if(prob(20 - recharge_locked*5)) - energy += 1 - if(energy >= max_energy) - energy = max_energy - recharging = 0 + + flick_overlay_view(I, targloc, 10) + icon_state = "pointer" + +/obj/item/device/laser_pointer/process() + if(prob(20 - recharge_locked*5)) + energy += 1 + if(energy >= max_energy) + energy = max_energy + recharging = 0 recharge_locked = FALSE - ..() + ..() From d52d54646331f0363c450557d7ffedc020e723af Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Fri, 24 Nov 2017 20:29:43 -0800 Subject: [PATCH 46/98] Deny buckling when the user is inside lockers, mechs, etc. (#33015) --- code/game/objects/buckling.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 2cf463e46c..0c72e63feb 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -99,7 +99,7 @@ //Wrapper procs that handle sanity and user feedback /atom/movable/proc/user_buckle_mob(mob/living/M, mob/user, check_loc = TRUE) - if(!in_range(user, src) || user.stat || user.restrained()) + if(!in_range(user, src) || !isturf(user.loc) || user.incapacitated()) return FALSE add_fingerprint(user) From 86fca33d060d3e4c24bfd4ad504ea33b2d54413a Mon Sep 17 00:00:00 2001 From: Y0SH1M4S73R Date: Fri, 24 Nov 2017 23:28:56 -0500 Subject: [PATCH 48/98] Cleans up a double assignment (#33048) * Fixes component runtimes (#33045) * fixes an internally redundant assignment statement --- code/modules/events/portal_storm.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm index 79250f1047..7e17124d59 100644 --- a/code/modules/events/portal_storm.dm +++ b/code/modules/events/portal_storm.dm @@ -37,7 +37,7 @@ var/mutable_appearance/storm /datum/round_event/portal_storm/setup() - storm = storm = mutable_appearance('icons/obj/tesla_engine/energy_ball.dmi', "energy_ball_fast", FLY_LAYER) + storm = mutable_appearance('icons/obj/tesla_engine/energy_ball.dmi', "energy_ball_fast", FLY_LAYER) storm.color = "#00FF00" station_areas = get_areas_in_z(ZLEVEL_STATION_PRIMARY) From 9bb564a1385c162bcb6e94cab95f0b867e0a50fb Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Fri, 24 Nov 2017 20:33:24 -0800 Subject: [PATCH 50/98] Adds null checks to uplink item generation for ssticker mode, so spawned uplinks work pre-game --- code/modules/uplink/uplink_item.dm | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/code/modules/uplink/uplink_item.dm b/code/modules/uplink/uplink_item.dm index 6d40ab9219..720641ecd6 100644 --- a/code/modules/uplink/uplink_item.dm +++ b/code/modules/uplink/uplink_item.dm @@ -23,12 +23,12 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. if(!istype(I)) continue if(I.include_modes.len) - if(!gamemode && SSticker && !(SSticker.mode.type in I.include_modes)) + if(!gamemode && SSticker && SSticker.mode && !(SSticker.mode.type in I.include_modes)) continue if(gamemode && !(gamemode in I.include_modes)) continue if(I.exclude_modes.len) - if(!gamemode && SSticker && (SSticker.mode.type in I.exclude_modes)) + if(!gamemode && SSticker && SSticker.mode && (SSticker.mode.type in I.exclude_modes)) continue if(gamemode && (gamemode in I.exclude_modes)) continue @@ -1381,8 +1381,13 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. exclude_modes = list(/datum/game_mode/nuclear) cant_discount = TRUE +<<<<<<< HEAD:code/modules/uplink/uplink_item.dm /datum/uplink_item/badass/surplus/spawn_item(turf/loc, obj/item/device/uplink/U) var/list/uplink_items = get_uplink_items(SSticker.mode) +======= +/datum/uplink_item/badass/surplus/spawn_item(turf/loc, datum/component/uplink/U) + var/list/uplink_items = get_uplink_items(SSticker && SSticker.mode? SSticker.mode : null) +>>>>>>> 63b7e4a... Adds null checks to uplink item generation for ssticker mode, so spawned uplinks work pre-game (#33053):code/datums/uplink_items.dm var/crate_value = 50 var/obj/structure/closet/crate/C = new(loc) @@ -1409,8 +1414,13 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. cost = 0 cant_discount = TRUE +<<<<<<< HEAD:code/modules/uplink/uplink_item.dm /datum/uplink_item/badass/random/spawn_item(turf/loc, obj/item/device/uplink/U) var/list/uplink_items = get_uplink_items(SSticker.mode) +======= +/datum/uplink_item/badass/random/spawn_item(turf/loc, datum/component/uplink/U) + var/list/uplink_items = get_uplink_items(SSticker && SSticker.mode? SSticker.mode : null) +>>>>>>> 63b7e4a... Adds null checks to uplink item generation for ssticker mode, so spawned uplinks work pre-game (#33053):code/datums/uplink_items.dm var/list/possible_items = list() for(var/category in uplink_items) for(var/item in uplink_items[category]) From d9c650970c23d12d101e8488da2481b78a9aff43 Mon Sep 17 00:00:00 2001 From: Armhulen Date: Fri, 24 Nov 2017 20:36:05 -0800 Subject: [PATCH 51/98] making prs isn't even worth it anymore (#33056) --- code/game/machinery/computer/robot.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 51188989f1..465f0eb373 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -3,7 +3,7 @@ /obj/machinery/computer/robotics name = "robotics control console" - desc = "Used to remotely lockdown or detonate linked Cyborgs." + desc = "Used to remotely lockdown or detonate linked Cyborgs and Drones." icon_screen = "robot" icon_keyboard = "rd_key" req_access = list(ACCESS_ROBOTICS) From c6a68bad8359d5cd11bfd8d2e568bc019d9a95b4 Mon Sep 17 00:00:00 2001 From: checkraisefold Date: Fri, 24 Nov 2017 20:35:33 -0800 Subject: [PATCH 53/98] fix zombie reanimation (#33049) lol --- code/modules/zombie/organs.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/zombie/organs.dm b/code/modules/zombie/organs.dm index 0b7a54ee1f..d55059960f 100644 --- a/code/modules/zombie/organs.dm +++ b/code/modules/zombie/organs.dm @@ -52,6 +52,8 @@ return if(owner.stat != DEAD && !converts_living) return + if(!owner.getorgan(/obj/item/organ/brain)) + return if(!iszombie(owner)) to_chat(owner, "You can feel your heart stopping, but something isn't right... \ life has not abandoned your broken form. You can only feel a deep and immutable hunger that \ From ceee0c80e713be6b85f0768ef533ada84ddcc52d Mon Sep 17 00:00:00 2001 From: Armhulen Date: Fri, 24 Nov 2017 20:39:41 -0800 Subject: [PATCH 55/98] okay (#33058) --- code/modules/mob/living/silicon/pai/pai.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 8030e97c1e..ed4e79f273 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -79,6 +79,12 @@ . = ..() . += slowdown +/mob/living/silicon/pai/can_unbuckle() + return FALSE + +/mob/living/silicon/pai/can_buckle() + return FALSE + /mob/living/silicon/pai/Destroy() GLOB.pai_list -= src return ..() From 89e807e64441bc20908c690089c1c9c1d4904320 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 24 Nov 2017 23:36:25 -0600 Subject: [PATCH 57/98] Automatic changelog generation for PR #4117 [ci skip] --- html/changelogs/AutoChangeLog-pr-4117.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4117.yml diff --git a/html/changelogs/AutoChangeLog-pr-4117.yml b/html/changelogs/AutoChangeLog-pr-4117.yml new file mode 100644 index 0000000000..bb2c70bccc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4117.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "You can no longer buckle people to roller beds from inside of a locker." From 7db8a64ca1397677451136516915bda159e98caa Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 24 Nov 2017 23:49:25 -0600 Subject: [PATCH 58/98] Automatic changelog generation for PR #4121 [ci skip] --- html/changelogs/AutoChangeLog-pr-4121.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4121.yml diff --git a/html/changelogs/AutoChangeLog-pr-4121.yml b/html/changelogs/AutoChangeLog-pr-4121.yml new file mode 100644 index 0000000000..a226595420 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4121.yml @@ -0,0 +1,4 @@ +author: "zennerx" +delete-after: True +changes: + - bugfix: "Zombies don't reanimate with no head!" From 6442a3a751a187f2afb6eb3c940259822950ae11 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sat, 25 Nov 2017 00:50:45 -0500 Subject: [PATCH 59/98] Update uplink_item.dm --- code/modules/uplink/uplink_item.dm | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/code/modules/uplink/uplink_item.dm b/code/modules/uplink/uplink_item.dm index 720641ecd6..884e3f9426 100644 --- a/code/modules/uplink/uplink_item.dm +++ b/code/modules/uplink/uplink_item.dm @@ -1381,13 +1381,8 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. exclude_modes = list(/datum/game_mode/nuclear) cant_discount = TRUE -<<<<<<< HEAD:code/modules/uplink/uplink_item.dm /datum/uplink_item/badass/surplus/spawn_item(turf/loc, obj/item/device/uplink/U) - var/list/uplink_items = get_uplink_items(SSticker.mode) -======= -/datum/uplink_item/badass/surplus/spawn_item(turf/loc, datum/component/uplink/U) var/list/uplink_items = get_uplink_items(SSticker && SSticker.mode? SSticker.mode : null) ->>>>>>> 63b7e4a... Adds null checks to uplink item generation for ssticker mode, so spawned uplinks work pre-game (#33053):code/datums/uplink_items.dm var/crate_value = 50 var/obj/structure/closet/crate/C = new(loc) @@ -1414,13 +1409,8 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. cost = 0 cant_discount = TRUE -<<<<<<< HEAD:code/modules/uplink/uplink_item.dm /datum/uplink_item/badass/random/spawn_item(turf/loc, obj/item/device/uplink/U) - var/list/uplink_items = get_uplink_items(SSticker.mode) -======= -/datum/uplink_item/badass/random/spawn_item(turf/loc, datum/component/uplink/U) var/list/uplink_items = get_uplink_items(SSticker && SSticker.mode? SSticker.mode : null) ->>>>>>> 63b7e4a... Adds null checks to uplink item generation for ssticker mode, so spawned uplinks work pre-game (#33053):code/datums/uplink_items.dm var/list/possible_items = list() for(var/category in uplink_items) for(var/item in uplink_items[category]) From 237f0fa8db2d679c1a32f3471b39feb4ef564d95 Mon Sep 17 00:00:00 2001 From: WJohn Date: Sat, 25 Nov 2017 10:19:59 -0500 Subject: [PATCH 60/98] Lowers rack layer to 2.8 (#33069) --- code/game/objects/structures/tables_racks.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index b46b1c72aa..26582515f8 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -411,6 +411,7 @@ desc = "Different from the Middle Ages version." icon = 'icons/obj/objects.dmi' icon_state = "rack" + layer = TABLE_LAYER density = TRUE anchored = TRUE pass_flags = LETPASSTHROW //You can throw objects over this, despite it's density. From 744a78e9322d207b753422137457ddca5025efd2 Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Sat, 25 Nov 2017 21:24:38 +0200 Subject: [PATCH 62/98] Maybe fixes meson hearing exploit (#33005) * Not all of wisdom brings joy * Serves me right for making changes based on how i remember the code working --- code/__HELPERS/game.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index b5d75a6f63..57fe0559fa 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -225,7 +225,8 @@ else // A variation of get_hear inlined here to take advantage of the compiler's fastpath for obj/mob in view var/lum = T.luminosity T.luminosity = 6 // This is the maximum luminosity - processing_list = viewers(R, T) + for(var/mob/M in view(R, T)) + processing_list += M for(var/obj/O in view(R, T)) processing_list += O T.luminosity = lum From 606f403c5be093bcb9aad4cced9022f3b76e9d3e Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sat, 25 Nov 2017 11:27:11 -0800 Subject: [PATCH 64/98] Fixes cryo rotation (#32992) --- .../machinery/components/unary_devices/cryo.dm | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index b395dad6bd..a7123dd97b 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -407,4 +407,20 @@ return G.temperature return ..() +/obj/machinery/atmospherics/components/unary/cryo_cell/default_change_direction_wrench(mob/user, obj/item/wrench/W) + . = ..() + if(.) + SetInitDirections() + var/obj/machinery/atmospherics/node = NODE1 + if(node) + node.disconnect(src) + NODE1 = null + nullifyPipenet(PARENT1) + atmosinit() + node = NODE1 + if(node) + node.atmosinit() + node.addMember(src) + build_network() + #undef CRYOMOBS From 8f23eeb00346a45aed1f68141259be0ec3046560 Mon Sep 17 00:00:00 2001 From: MoreRobustThanYou Date: Sat, 25 Nov 2017 16:17:36 -0500 Subject: [PATCH 66/98] Fix #32755 (#33073) --- code/datums/antagonists/cult.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/datums/antagonists/cult.dm b/code/datums/antagonists/cult.dm index f5dbc1c829..c26b0f8108 100644 --- a/code/datums/antagonists/cult.dm +++ b/code/datums/antagonists/cult.dm @@ -5,6 +5,7 @@ var/datum/action/innate/cult/comm/communion = new var/datum/action/innate/cult/mastervote/vote = new job_rank = ROLE_CULTIST + var/ignore_implant = FALSE /datum/antagonist/cult/Destroy() QDEL_NULL(communion) @@ -65,7 +66,7 @@ /datum/antagonist/cult/can_be_owned(datum/mind/new_owner) . = ..() - if(.) + if(. && !ignore_implant) . = is_convertable_to_cult(new_owner.current) /datum/antagonist/cult/on_gain() @@ -121,6 +122,7 @@ var/datum/action/innate/cult/master/finalreck/reckoning = new var/datum/action/innate/cult/master/cultmark/bloodmark = new var/datum/action/innate/cult/master/pulse/throwing = new + ignore_implant = TRUE /datum/antagonist/cult/master/Destroy() QDEL_NULL(reckoning) From 8c11252d935d739c27fd980d780c457f5d97b82e Mon Sep 17 00:00:00 2001 From: Emmett Gaines Date: Sat, 25 Nov 2017 16:35:22 -0500 Subject: [PATCH 68/98] butterdogs (#33002) --- .../food_and_drinks/food/snacks_bread.dm | 17 ++++++++++++++++- .../recipes/tablecraft/recipes_bread.dm | 8 ++++++++ icons/obj/food/food.dmi | Bin 58941 -> 59184 bytes 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/code/modules/food_and_drinks/food/snacks_bread.dm b/code/modules/food_and_drinks/food/snacks_bread.dm index 8f48e94d08..c29ed30b22 100644 --- a/code/modules/food_and_drinks/food/snacks_bread.dm +++ b/code/modules/food_and_drinks/food/snacks_bread.dm @@ -238,4 +238,19 @@ filling_color = "#F0E68C" list_reagents = list("nutriment" = 5) bonus_reagents = list("nutriment" = 1, "vitamin" = 1) - tastes = list("butter" = 1, "biscuit" = 1) \ No newline at end of file + tastes = list("butter" = 1, "biscuit" = 1) + +/obj/item/reagent_containers/food/snacks/butterdog + name = "butterdog" + desc = "Made from exotic butters." + icon = 'icons/obj/food/food.dmi' + icon_state = "butterdog" + bitesize = 1 + filling_color = "#F1F49A" + list_reagents = list("nutriment" = 5) + bonus_reagents = list("nutriment" = 1, "vitamin" = 1) + tastes = list("butter", "exotic butter") + +/obj/item/reagent_containers/food/snacks/butterdog/ComponentInitialize() + . = ..() + AddComponent(/datum/component/slippery, 80) \ No newline at end of file diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm index 493c6f6cdd..e572cc76ff 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm @@ -93,3 +93,11 @@ result = /obj/item/reagent_containers/food/snacks/butterbiscuit subcategory = CAT_BREAD +/datum/crafting_recipe/food/butterdog + name = "Butterdog" + reqs = list( + /obj/item/reagent_containers/food/snacks/bun = 1, + /obj/item/reagent_containers/food/snacks/butter = 3, + ) + result = /obj/item/reagent_containers/food/snacks/butterdog + subcategory = CAT_BREAD \ No newline at end of file diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index cefc1e5ab9eeba0180b26e7ab7e75ea7bbbbf9e0..26822c2c015a2f701451ededc4b315ae3021ff63 100644 GIT binary patch delta 4907 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 aBak>!K4rN$^|b^Mhk>4nZn?I7*#7|36n*Rf delta 4662 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 Date: Sat, 25 Nov 2017 17:37:28 -0500 Subject: [PATCH 70/98] Merge pull request #33075 from AnturK/itsnotabusewhenitsassistants Adds spawn override system --- code/_globalvars/lists/mapping.dm | 1 + code/controllers/subsystem/job.dm | 10 ++++++++++ code/controllers/subsystem/ticker.dm | 2 +- code/game/objects/effects/landmarks.dm | 13 +++++++++++++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm index e6b05e033f..51af2b3525 100644 --- a/code/_globalvars/lists/mapping.dm +++ b/code/_globalvars/lists/mapping.dm @@ -24,6 +24,7 @@ GLOBAL_LIST_EMPTY(landmarks_list) //list of all landmarks created GLOBAL_LIST_EMPTY(start_landmarks_list) //list of all spawn points created GLOBAL_LIST_EMPTY(department_security_spawns) //list of all department security spawns GLOBAL_LIST_EMPTY(generic_event_spawns) //list of all spawns for events +GLOBAL_LIST_EMPTY(jobspawn_overrides) //These will take precedence over normal spawnpoints if created. GLOBAL_LIST_EMPTY(wizardstart) GLOBAL_LIST_EMPTY(nukeop_start) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 1e914c657d..c70b7016a4 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -393,6 +393,10 @@ SUBSYSTEM_DEF(job) continue S = sloc break + if(GLOB.jobspawn_overrides[rank]) + var/list/special_spawns = GLOB.jobspawn_overrides[rank] + if(special_spawns.len) + S = pick(special_spawns) if(S) SendToAtom(H, S, buckle = FALSE) if(!S) //if there isn't a spawnpoint send them to latejoin, if there's no latejoin go yell at your mapper @@ -536,6 +540,12 @@ SUBSYSTEM_DEF(job) M.forceMove(get_turf(A)) /datum/controller/subsystem/job/proc/SendToLateJoin(mob/M, buckle = TRUE) + if(M.mind && M.mind.assigned_role) //We're doing something special today. + var/list/special_spawns = GLOB.jobspawn_overrides[M.mind.assigned_role] + if(special_spawns.len) //just in case someone clears these + SendToAtom(M,pick(special_spawns),FALSE) + return + if(latejoin_trackers.len) SendToAtom(M, pick(latejoin_trackers), buckle) else diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 18354893fb..dfdff1890a 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -319,7 +319,7 @@ SUBSYSTEM_DEF(ticker) //Cleanup some stuff for(var/obj/effect/landmark/start/S in GLOB.landmarks_list) //Deleting Startpoints but we need the ai point to AI-ize people later - if(S.name != "AI") + if(S.delete_after_roundstart) qdel(S) //assign crew objectives and generate miscreants diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index c18c60c5f3..caeb1f168c 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -19,15 +19,23 @@ icon = 'icons/mob/screen_gen.dmi' icon_state = "x" anchored = TRUE + var/jobspawn_override = FALSE + var/delete_after_roundstart = TRUE /obj/effect/landmark/start/New() GLOB.start_landmarks_list += src + if(jobspawn_override) + if(!GLOB.jobspawn_overrides[name]) + GLOB.jobspawn_overrides[name] = list() + GLOB.jobspawn_overrides[name] += src ..() if(name != "start") tag = "start*[name]" /obj/effect/landmark/start/Destroy() GLOB.start_landmarks_list -= src + if(jobspawn_override) + GLOB.jobspawn_overrides[name] -= src return ..() // START LANDMARKS FOLLOW. Don't change the names unless @@ -36,6 +44,10 @@ /obj/effect/landmark/start/assistant name = "Assistant" +/obj/effect/landmark/start/assistant/override + jobspawn_override = TRUE + delete_after_roundstart = FALSE + /obj/effect/landmark/start/janitor name = "Janitor" @@ -74,6 +86,7 @@ /obj/effect/landmark/start/ai name = "AI" + delete_after_roundstart = FALSE /obj/effect/landmark/start/captain name = "Captain" From 5c7f4661bd97f9978ad377dc529ddba22a24df81 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 25 Nov 2017 20:13:49 -0600 Subject: [PATCH 72/98] Automatic changelog generation for PR #4124 [ci skip] --- html/changelogs/AutoChangeLog-pr-4124.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4124.yml diff --git a/html/changelogs/AutoChangeLog-pr-4124.yml b/html/changelogs/AutoChangeLog-pr-4124.yml new file mode 100644 index 0000000000..e568f3e9df --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4124.yml @@ -0,0 +1,4 @@ +author: "WJohnston" +delete-after: True +changes: + - bugfix: "Fixed a case where items would sometimes be placed underneath racks." From 1dfeb13b77b96b638a8b77a562530c86d87e0945 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 25 Nov 2017 20:14:04 -0600 Subject: [PATCH 73/98] Automatic changelog generation for PR #4125 [ci skip] --- html/changelogs/AutoChangeLog-pr-4125.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4125.yml diff --git a/html/changelogs/AutoChangeLog-pr-4125.yml b/html/changelogs/AutoChangeLog-pr-4125.yml new file mode 100644 index 0000000000..a8f5bdbe86 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4125.yml @@ -0,0 +1,4 @@ +author: "Naksu" +delete-after: True +changes: + - bugfix: "Hopefully fixed mesons granting the ability to hear people through walls." From 80b3a2001a8793fff01b069e2a31fdb5ad57e5e6 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 25 Nov 2017 20:14:58 -0600 Subject: [PATCH 74/98] Automatic changelog generation for PR #4126 [ci skip] --- html/changelogs/AutoChangeLog-pr-4126.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4126.yml diff --git a/html/changelogs/AutoChangeLog-pr-4126.yml b/html/changelogs/AutoChangeLog-pr-4126.yml new file mode 100644 index 0000000000..42689125e8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4126.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Cryo cells can now be properly rotated with a wrench." From 8120e188f2c1de9db8a764641cc4994194532dca Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 25 Nov 2017 20:15:29 -0600 Subject: [PATCH 75/98] Automatic changelog generation for PR #4127 [ci skip] --- html/changelogs/AutoChangeLog-pr-4127.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4127.yml diff --git a/html/changelogs/AutoChangeLog-pr-4127.yml b/html/changelogs/AutoChangeLog-pr-4127.yml new file mode 100644 index 0000000000..b9f6abc58d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4127.yml @@ -0,0 +1,4 @@ +author: "More Robust Than You" +delete-after: True +changes: + - bugfix: "Fixed cult leaders being de-culted upon election if they had a mindshield implant" From dcf2e91e1a781a8226f5e4049f6d8049f1c09f4f Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 25 Nov 2017 20:16:05 -0600 Subject: [PATCH 76/98] Automatic changelog generation for PR #4129 [ci skip] --- html/changelogs/AutoChangeLog-pr-4129.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4129.yml diff --git a/html/changelogs/AutoChangeLog-pr-4129.yml b/html/changelogs/AutoChangeLog-pr-4129.yml new file mode 100644 index 0000000000..16d3765876 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4129.yml @@ -0,0 +1,4 @@ +author: "ninjanomnom" +delete-after: True +changes: + - rscadd: "You can now make a new tasty traditional treat: butterdogs. Watch out, they're slippery." From 87fca9945493737596c0564650f0384df51df21e Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 25 Nov 2017 20:18:59 -0600 Subject: [PATCH 77/98] Automatic changelog generation for PR #4116 [ci skip] --- html/changelogs/AutoChangeLog-pr-4116.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4116.yml diff --git a/html/changelogs/AutoChangeLog-pr-4116.yml b/html/changelogs/AutoChangeLog-pr-4116.yml new file mode 100644 index 0000000000..877ad76460 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4116.yml @@ -0,0 +1,5 @@ +author: "Dorsisdwarf" +delete-after: True +changes: + - tweak: "Catpeople are now distracted instead of debilitated" + - rscadd: "Normal cats now go for laser pointers" From 73bc0fa70014c0860870cadaa8e7d95e16067473 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 25 Nov 2017 20:19:18 -0600 Subject: [PATCH 78/98] Automatic changelog generation for PR #4111 [ci skip] --- html/changelogs/AutoChangeLog-pr-4111.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4111.yml diff --git a/html/changelogs/AutoChangeLog-pr-4111.yml b/html/changelogs/AutoChangeLog-pr-4111.yml new file mode 100644 index 0000000000..1019538b17 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4111.yml @@ -0,0 +1,4 @@ +author: "ninjanomnom" +delete-after: True +changes: + - bugfix: "Fixes thermite burning hotter than the boiling point of stone" From fb4787fbd1bef04e82ae257bdbdebfb27caf86c8 Mon Sep 17 00:00:00 2001 From: Mark9013100 Date: Sun, 26 Nov 2017 01:01:03 -0500 Subject: [PATCH 79/98] Oldstation edits/fixes (#33080) --- _maps/RandomRuins/SpaceRuins/oldstation.dmm | 60 +++++++++---------- .../reagents/reagent_containers/glass.dm | 50 ++++++++-------- 2 files changed, 55 insertions(+), 55 deletions(-) diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index bf9e23978e..d0c8abc18e 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -1979,7 +1979,7 @@ "fI" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch, -/obj/machinery/atmospherics/pipe/simple/supply/visible, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/ruin/space/has_grav/ancientstation/hydroponics) "fJ" = ( @@ -2111,12 +2111,12 @@ /turf/open/floor/plasteel/airless/floorgrime, /area/ruin/space/has_grav/ancientstation/betanorth) "ga" = ( -/obj/machinery/atmospherics/pipe/simple/supply/visible{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plating/airless, /area/ruin/space/has_grav/ancientstation/betanorth) "gb" = ( @@ -2124,7 +2124,7 @@ /obj/item/stack/cable_coil{ amount = 2 }, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/template_noop, @@ -2134,12 +2134,12 @@ /obj/structure/cable{ icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/template_noop, /area/template_noop) "gd" = ( @@ -2147,7 +2147,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/template_noop, @@ -2163,7 +2163,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/template_noop, @@ -2176,7 +2176,7 @@ /obj/structure/cable{ icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/template_noop, @@ -2192,7 +2192,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plating, @@ -2202,7 +2202,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plating, @@ -2216,7 +2216,7 @@ /obj/structure/cable{ icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plating, @@ -2230,7 +2230,7 @@ icon_state = "1-8" }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plating, @@ -2253,7 +2253,7 @@ /obj/item/stack/cable_coil{ amount = 2 }, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plating, @@ -2318,7 +2318,7 @@ }, /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plating, @@ -2328,7 +2328,7 @@ icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plating, @@ -2347,7 +2347,7 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plating, @@ -2358,7 +2358,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/supply/visible{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, /turf/open/floor/plating, @@ -2485,7 +2485,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plating, @@ -2494,7 +2494,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plating/airless, @@ -2504,7 +2504,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plating, @@ -2514,7 +2514,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plating, @@ -2527,7 +2527,7 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plating, @@ -2538,7 +2538,7 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance_hatch, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plating, @@ -2670,7 +2670,7 @@ "gZ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch, -/obj/machinery/atmospherics/pipe/simple/supply/visible, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/ruin/space/has_grav/ancientstation/kitchen) "ha" = ( @@ -2687,7 +2687,7 @@ /area/ruin/space/has_grav/ancientstation/sec) "hc" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/visible, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/red/side{ dir = 4 }, @@ -2854,7 +2854,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/visible, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/red/side{ dir = 4 }, @@ -4288,7 +4288,7 @@ /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/ancientstation/proto) "kV" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, /turf/open/floor/plating/airless, diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 20c4ba6933..c27e2e9ea5 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -315,101 +315,101 @@ list_reagents = list() /obj/item/reagent_containers/glass/beaker/large/hydrogen - name = "hydrogen" + name = "hydrogen beaker" list_reagents = list("hydrogen" = 50) /obj/item/reagent_containers/glass/beaker/large/lithium - name = "lithium" + name = "lithium beaker" list_reagents = list("lithium" = 50) /obj/item/reagent_containers/glass/beaker/large/carbon - name = "carbon" + name = "carbon beaker" list_reagents = list("carbon" = 50) /obj/item/reagent_containers/glass/beaker/large/nitrogen - name = "nitrogen" + name = "nitrogen beaker" list_reagents = list("nitrogen" = 50) /obj/item/reagent_containers/glass/beaker/large/oxygen - name = "oxygen" + name = "oxygen beaker" list_reagents = list("oxygen" = 50) /obj/item/reagent_containers/glass/beaker/large/fluorine - name = "fluorine" + name = "fluorine beaker" list_reagents = list("fluorine" = 50) /obj/item/reagent_containers/glass/beaker/large/sodium - name = "sodium" + name = "sodium beaker" list_reagents = list("sodium" = 50) /obj/item/reagent_containers/glass/beaker/large/aluminium - name = "aluminium" + name = "aluminium beaker" list_reagents = list("aluminium" = 50) /obj/item/reagent_containers/glass/beaker/large/silicon - name = "silicon" + name = "silicon beaker" list_reagents = list("silicon" = 50) /obj/item/reagent_containers/glass/beaker/large/phosphorus - name = "phosphorus" + name = "phosphorus beaker" list_reagents = list("phosphorus" = 50) /obj/item/reagent_containers/glass/beaker/large/sulfur - name = "sulfur" + name = "sulfur beaker" list_reagents = list("sulfur" = 50) /obj/item/reagent_containers/glass/beaker/large/chlorine - name = "chlorine" + name = "chlorine beaker" list_reagents = list("chlorine" = 50) /obj/item/reagent_containers/glass/beaker/large/potassium - name = "potassium" + name = "potassium beaker" list_reagents = list("potassium" = 50) /obj/item/reagent_containers/glass/beaker/large/iron - name = "iron" + name = "iron beaker" list_reagents = list("iron" = 50) /obj/item/reagent_containers/glass/beaker/large/copper - name = "copper" + name = "copper beaker" list_reagents = list("copper" = 50) /obj/item/reagent_containers/glass/beaker/large/mercury - name = "mercury" + name = "mercury beaker" list_reagents = list("mercury" = 50) /obj/item/reagent_containers/glass/beaker/large/radium - name = "radium" + name = "radium beaker" list_reagents = list("radium" = 50) /obj/item/reagent_containers/glass/beaker/large/water - name = "water" + name = "water beaker" list_reagents = list("water" = 50) /obj/item/reagent_containers/glass/beaker/large/ethanol - name = "ethanol" + name = "ethanol beaker" list_reagents = list("ethanol" = 50) /obj/item/reagent_containers/glass/beaker/large/sugar - name = "sugar" + name = "sugar beaker" list_reagents = list("sugar" = 50) /obj/item/reagent_containers/glass/beaker/large/sacid - name = "sacid" + name = "sulphuric acid beaker" list_reagents = list("sacid" = 50) /obj/item/reagent_containers/glass/beaker/large/welding_fuel - name = "welding_fuel" + name = "welding fuel beaker" list_reagents = list("welding_fuel" = 50) /obj/item/reagent_containers/glass/beaker/large/silver - name = "silver" + name = "silver beaker" list_reagents = list("silver" = 50) /obj/item/reagent_containers/glass/beaker/large/iodine - name = "iodine" + name = "iodine beaker" list_reagents = list("iodine" = 50) /obj/item/reagent_containers/glass/beaker/large/bromine - name = "bromine" + name = "bromine beaker" list_reagents = list("bromine" = 50) \ No newline at end of file From 794a793b27baa0bcdaae187df61ff172236f343d Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 26 Nov 2017 03:11:21 -0800 Subject: [PATCH 81/98] Fixes latejoins (#33096) length() is 0 on null lists. Update job.dm --- code/controllers/subsystem/job.dm | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index c70b7016a4..5cfbeb9414 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -393,10 +393,8 @@ SUBSYSTEM_DEF(job) continue S = sloc break - if(GLOB.jobspawn_overrides[rank]) - var/list/special_spawns = GLOB.jobspawn_overrides[rank] - if(special_spawns.len) - S = pick(special_spawns) + if(length(GLOB.jobspawn_overrides[rank])) + S = pick(GLOB.jobspawn_overrides[rank]) if(S) SendToAtom(H, S, buckle = FALSE) if(!S) //if there isn't a spawnpoint send them to latejoin, if there's no latejoin go yell at your mapper @@ -540,11 +538,9 @@ SUBSYSTEM_DEF(job) M.forceMove(get_turf(A)) /datum/controller/subsystem/job/proc/SendToLateJoin(mob/M, buckle = TRUE) - if(M.mind && M.mind.assigned_role) //We're doing something special today. - var/list/special_spawns = GLOB.jobspawn_overrides[M.mind.assigned_role] - if(special_spawns.len) //just in case someone clears these - SendToAtom(M,pick(special_spawns),FALSE) - return + if(M.mind && M.mind.assigned_role && length(GLOB.jobspawn_overrides[M.mind.assigned_role])) //We're doing something special today. + SendToAtom(M,pick(GLOB.jobspawn_overrides[M.mind.assigned_role]),FALSE) + return if(latejoin_trackers.len) SendToAtom(M, pick(latejoin_trackers), buckle) From 4a22fed89df01cb8c762e1ac33a1b78d3cb68fe8 Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Sun, 26 Nov 2017 17:51:54 -0500 Subject: [PATCH 83/98] Cleans up goldcore defines --- code/__DEFINES/misc.dm | 9 ++++++++ code/__HELPERS/icons.dm | 2 +- code/game/gamemodes/blob/blobs/blob_mobs.dm | 4 ++-- .../simple_animal/friendly/butterfly.dm | 2 +- .../mob/living/simple_animal/friendly/cat.dm | 8 +++++-- .../simple_animal/friendly/cockroach.dm | 2 +- .../mob/living/simple_animal/friendly/crab.dm | 10 ++++++--- .../mob/living/simple_animal/friendly/dog.dm | 10 ++++----- .../simple_animal/friendly/farm_animals.dm | 8 +++++-- .../mob/living/simple_animal/friendly/fox.dm | 6 +++++- .../living/simple_animal/friendly/lizard.dm | 4 ++++ .../living/simple_animal/friendly/mouse.dm | 4 ++-- .../living/simple_animal/friendly/penguin.dm | 2 +- .../living/simple_animal/friendly/sloth.dm | 6 +++--- .../mob/living/simple_animal/hostile/alien.dm | 6 +++--- .../mob/living/simple_animal/hostile/bear.dm | 4 ++++ .../mob/living/simple_animal/hostile/bees.dm | 2 +- .../mob/living/simple_animal/hostile/carp.dm | 6 +++--- .../living/simple_animal/hostile/creature.dm | 21 +++++++++++++++++++ .../living/simple_animal/hostile/faithless.dm | 2 +- .../simple_animal/hostile/giant_spider.dm | 14 ++++++------- .../living/simple_animal/hostile/headcrab.dm | 4 ++++ .../living/simple_animal/hostile/hivebot.dm | 2 +- .../simple_animal/hostile/killertomato.dm | 2 +- .../hostile/megafauna/colossus.dm | 2 +- .../mob/living/simple_animal/hostile/mimic.dm | 4 ++-- .../hostile/mining_mobs/basilisk.dm | 2 +- .../hostile/mining_mobs/gutlunch.dm | 2 +- .../simple_animal/hostile/retaliate/frog.dm | 2 +- .../simple_animal/hostile/retaliate/ghost.dm | 2 +- .../living/simple_animal/hostile/skeleton.dm | 6 +++--- .../living/simple_animal/hostile/syndicate.dm | 2 +- .../mob/living/simple_animal/hostile/tree.dm | 2 +- .../simple_animal/hostile/wumborian_fugu.dm | 2 +- .../mob/living/simple_animal/parrot.dm | 8 +++++-- .../mob/living/simple_animal/simple_animal.dm | 2 +- code/modules/reagents/chemistry/recipes.dm | 4 ++-- code/modules/shuttle/special.dm | 2 +- 38 files changed, 122 insertions(+), 60 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index d83557aaec..1782c7aa62 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -478,3 +478,12 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #define SYRINGE_DRAW 0 #define SYRINGE_INJECT 1 +<<<<<<< HEAD +======= +#define RESEARCH_MATERIAL_RECLAMATION_ID "0" + +//gold slime core spawning +#define NO_SPAWN 0 +#define HOSTILE_SPAWN 1 +#define FRIENDLY_SPAWN 2 +>>>>>>> 2abae67... Cleans up goldcore defines (#33090) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 99c540ec34..d26e3a4477 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -949,7 +949,7 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) if(!GLOB.friendly_animal_types.len) for(var/T in typesof(/mob/living/simple_animal)) var/mob/living/simple_animal/SA = T - if(initial(SA.gold_core_spawnable) == 2) + if(initial(SA.gold_core_spawnable) == FRIENDLY_SPAWN) GLOB.friendly_animal_types += SA diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index d27c3aa820..5572bbd9d8 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -100,7 +100,7 @@ var/death_cloud_size = 1 //size of cloud produced from a dying spore var/mob/living/carbon/human/oldguy var/is_zombie = 0 - gold_core_spawnable = 1 + gold_core_spawnable = HOSTILE_SPAWN /mob/living/simple_animal/hostile/blob/blobspore/Initialize(mapload, var/obj/structure/blob/factory/linked_node) if(istype(linked_node)) @@ -299,4 +299,4 @@ /mob/living/simple_animal/hostile/blob/blobbernaut/independent independent = TRUE - gold_core_spawnable = 1 + gold_core_spawnable = HOSTILE_SPAWN diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm index 9c16c2a924..6a00ca0006 100644 --- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm +++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm @@ -18,7 +18,7 @@ pass_flags = PASSTABLE | PASSGRILLE | PASSMOB ventcrawler = VENTCRAWLER_ALWAYS mob_size = MOB_SIZE_TINY - gold_core_spawnable = 2 + gold_core_spawnable = FRIENDLY_SPAWN verb_say = "flutters" verb_ask = "flutters inquisitively" verb_exclaim = "flutters intensely" diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index fd03dc2359..f9ddd94f0a 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -28,9 +28,13 @@ response_harm = "kicks" var/turns_since_scan = 0 var/mob/living/simple_animal/mouse/movement_target +<<<<<<< HEAD gold_core_spawnable = 2 devourable = TRUE no_vore = FALSE +======= + gold_core_spawnable = FRIENDLY_SPAWN +>>>>>>> 2abae67... Cleans up goldcore defines (#33090) /mob/living/simple_animal/pet/cat/Initialize() . = ..() @@ -81,7 +85,7 @@ icon_living = "cat" icon_dead = "cat_dead" gender = FEMALE - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN var/list/family = list()//var restored from savefile, has count of each child type var/list/children = list()//Actual mob instances of children var/cats_deployed = 0 @@ -154,7 +158,7 @@ /mob/living/simple_animal/pet/cat/Proc name = "Proc" gender = MALE - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN /mob/living/simple_animal/pet/cat/Life() if(!stat && !buckled && !client) diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm index 77c29cd3cf..a6e24f43dd 100644 --- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm +++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm @@ -18,7 +18,7 @@ speak_emote = list("chitters") density = FALSE ventcrawler = VENTCRAWLER_ALWAYS - gold_core_spawnable = 2 + gold_core_spawnable = FRIENDLY_SPAWN verb_say = "chitters" verb_ask = "chitters inquisitively" verb_exclaim = "chitters loudly" diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index 6f5158ac83..99d91b299e 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -19,8 +19,12 @@ ventcrawler = VENTCRAWLER_ALWAYS var/obj/item/inventory_head var/obj/item/inventory_mask +<<<<<<< HEAD gold_core_spawnable = 2 devourable = TRUE +======= + gold_core_spawnable = FRIENDLY_SPAWN +>>>>>>> 2abae67... Cleans up goldcore defines (#33090) /mob/living/simple_animal/crab/Life() ..() @@ -44,7 +48,7 @@ response_help = "pets" response_disarm = "gently pushes aside" response_harm = "stomps" - gold_core_spawnable = FALSE + gold_core_spawnable = NO_SPAWN /mob/living/simple_animal/crab/evil name = "Evil Crab" @@ -56,7 +60,7 @@ response_help = "pokes" response_disarm = "shoves" response_harm = "stomps" - gold_core_spawnable = TRUE + gold_core_spawnable = HOSTILE_SPAWN /mob/living/simple_animal/crab/kreb name = "Kreb" @@ -68,7 +72,7 @@ response_help = "pets" response_disarm = "gently pushes aside" response_harm = "stomps" - gold_core_spawnable = FALSE + gold_core_spawnable = NO_SPAWN /mob/living/simple_animal/crab/evil/kreb name = "Evil Kreb" diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 2a94052274..770834b0cf 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -31,7 +31,7 @@ var/obj/item/inventory_head var/obj/item/inventory_back var/nofur = 0 //Corgis that have risen past the material plane of existence. - gold_core_spawnable = 2 + gold_core_spawnable = FRIENDLY_SPAWN /mob/living/simple_animal/pet/dog/pug name = "\improper pug" @@ -42,7 +42,7 @@ icon_living = "pug" icon_dead = "pug_dead" butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/pug = 3) - gold_core_spawnable = 2 + gold_core_spawnable = FRIENDLY_SPAWN /mob/living/simple_animal/pet/dog/Initialize() . = ..() @@ -290,7 +290,7 @@ response_help = "pets" response_disarm = "bops" response_harm = "kicks" - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN var/age = 0 var/record_age = 1 var/memory_saved = FALSE @@ -438,7 +438,7 @@ icon_living = "narsian" icon_dead = "narsian_dead" faction = list("dog", "cult") - gold_core_spawnable = FALSE + gold_core_spawnable = NO_SPAWN nofur = TRUE /mob/living/simple_animal/pet/dog/corgi/narsie/Life() @@ -560,7 +560,7 @@ response_harm = "kicks" var/turns_since_scan = 0 var/puppies = 0 - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN //Lisa already has a cute bow! /mob/living/simple_animal/pet/dog/corgi/Lisa/Topic(href, href_list) diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 6fb1c500b2..03d79e98e0 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -117,7 +117,7 @@ health = 50 maxHealth = 50 var/obj/item/udder/udder = null - gold_core_spawnable = 2 + gold_core_spawnable = FRIENDLY_SPAWN blood_volume = BLOOD_VOLUME_NORMAL devourable = TRUE no_vore = FALSE @@ -195,8 +195,12 @@ var/amount_grown = 0 pass_flags = PASSTABLE | PASSGRILLE | PASSMOB mob_size = MOB_SIZE_TINY +<<<<<<< HEAD gold_core_spawnable = 2 devourable = TRUE +======= + gold_core_spawnable = FRIENDLY_SPAWN +>>>>>>> 2abae67... Cleans up goldcore defines (#33090) /mob/living/simple_animal/chick/Initialize() . = ..() @@ -250,7 +254,7 @@ var/list/feedMessages = list("It clucks happily.","It clucks happily.") var/list/layMessage = list("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.") var/list/validColors = list("brown","black","white") - gold_core_spawnable = 2 + gold_core_spawnable = FRIENDLY_SPAWN var/static/chicken_count = 0 devourable = TRUE no_vore = FALSE diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm index e7d6bfbf64..6b06ac7a86 100644 --- a/code/modules/mob/living/simple_animal/friendly/fox.dm +++ b/code/modules/mob/living/simple_animal/friendly/fox.dm @@ -17,6 +17,7 @@ response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" +<<<<<<< HEAD gold_core_spawnable = 2 devourable = TRUE var/mob/living/simple_animal/mouse/movement_target @@ -59,10 +60,13 @@ if(movement_target) stop_automated_movement = 1 walk_to(src,movement_target,0,3) +======= + gold_core_spawnable = FRIENDLY_SPAWN +>>>>>>> 2abae67... Cleans up goldcore defines (#33090) //Captain fox /mob/living/simple_animal/pet/fox/Renault name = "Renault" desc = "Renault, the Captain's trustworthy fox." gender = FEMALE - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm index c4e11cc2bd..e4e1b26225 100644 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm @@ -18,8 +18,12 @@ density = FALSE pass_flags = PASSTABLE | PASSMOB mob_size = MOB_SIZE_SMALL +<<<<<<< HEAD gold_core_spawnable = 2 devourable = TRUE +======= + gold_core_spawnable = FRIENDLY_SPAWN +>>>>>>> 2abae67... Cleans up goldcore defines (#33090) obj_damage = 0 environment_smash = ENVIRONMENT_SMASH_NONE var/static/list/edibles = typecacheof(list(/mob/living/simple_animal/butterfly, /mob/living/simple_animal/cockroach)) //list of atoms, however turfs won't affect AI, but will affect consumption. diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 1a7ed0261f..85ec19bfb9 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -22,7 +22,7 @@ pass_flags = PASSTABLE | PASSGRILLE | PASSMOB mob_size = MOB_SIZE_TINY var/body_color //brown, gray and white, leave blank for random - gold_core_spawnable = 2 + gold_core_spawnable = FRIENDLY_SPAWN var/chew_probability = 1 devourable = TRUE @@ -99,7 +99,7 @@ response_help = "pets" response_disarm = "gently pushes aside" response_harm = "splats" - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN /obj/item/reagent_containers/food/snacks/deadmouse name = "dead mouse" diff --git a/code/modules/mob/living/simple_animal/friendly/penguin.dm b/code/modules/mob/living/simple_animal/friendly/penguin.dm index 07515808dd..fe0187fee6 100644 --- a/code/modules/mob/living/simple_animal/friendly/penguin.dm +++ b/code/modules/mob/living/simple_animal/friendly/penguin.dm @@ -23,7 +23,7 @@ icon_living = "penguin" icon_dead = "penguin_dead" butcher_results = list() - gold_core_spawnable = 2 + gold_core_spawnable = FRIENDLY_SPAWN /mob/living/simple_animal/pet/penguin/emperor/shamebrero name = "Shamebrero penguin" diff --git a/code/modules/mob/living/simple_animal/friendly/sloth.dm b/code/modules/mob/living/simple_animal/friendly/sloth.dm index 4d81afdf5e..7519951876 100644 --- a/code/modules/mob/living/simple_animal/friendly/sloth.dm +++ b/code/modules/mob/living/simple_animal/friendly/sloth.dm @@ -14,7 +14,7 @@ response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" - gold_core_spawnable = 2 + gold_core_spawnable = FRIENDLY_SPAWN melee_damage_lower = 18 melee_damage_upper = 18 health = 50 @@ -27,7 +27,7 @@ /mob/living/simple_animal/sloth/paperwork name = "Paperwork" desc = "Cargo's pet sloth. About as useful as the rest of the techs." - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN //Cargo Sloth 2 @@ -39,4 +39,4 @@ icon_dead = "cool_sloth_dead" gender = FEMALE butcher_results = list(/obj/item/toy/spinningtoy = 1) - gold_core_spawnable = 0 \ No newline at end of file + gold_core_spawnable = NO_SPAWN \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index fa4cefd839..2651065b75 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -32,7 +32,7 @@ see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE unique_name = 1 - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN death_sound = 'sound/voice/hiss6.ogg' deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw..." devourable = TRUE @@ -139,7 +139,7 @@ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno = 10, /obj/item/stack/sheet/animalhide/xeno = 2) mob_size = MOB_SIZE_LARGE - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN /obj/item/projectile/neurotox name = "neurotoxin" @@ -161,7 +161,7 @@ friendly = "caresses" obj_damage = 0 environment_smash = ENVIRONMENT_SMASH_NONE - gold_core_spawnable = 1 + gold_core_spawnable = HOSTILE_SPAWN icon_state = "maid" icon_living = "maid" icon_dead = "maid_dead" diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index ef662c8f5a..2300eb5c7c 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -36,9 +36,13 @@ maxbodytemp = 1500 faction = list("russian") +<<<<<<< HEAD gold_core_spawnable = 1 devourable = TRUE no_vore = FALSE +======= + gold_core_spawnable = HOSTILE_SPAWN +>>>>>>> 2abae67... Cleans up goldcore defines (#33090) //SPACE BEARS! SQUEEEEEEEE~ OW! FUCK! IT BIT MY HAND OFF!! /mob/living/simple_animal/hostile/bear/Hudson diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index 02252254c9..ef2e393a7d 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -37,7 +37,7 @@ pass_flags = PASSTABLE | PASSGRILLE | PASSMOB mob_size = MOB_SIZE_TINY movement_type = FLYING - gold_core_spawnable = 1 + gold_core_spawnable = HOSTILE_SPAWN search_objects = 1 //have to find those plant trays! //Spaceborn beings don't get hurt by space diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index 4be394e2b5..878f7b3019 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -35,7 +35,7 @@ faction = list("carp") movement_type = FLYING pressure_resistance = 200 - gold_core_spawnable = 1 + gold_core_spawnable = HOSTILE_SPAWN /mob/living/simple_animal/hostile/carp/AttackingTarget() . = ..() @@ -47,7 +47,7 @@ icon_state = "holocarp" icon_living = "holocarp" maxbodytemp = INFINITY - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN del_on_death = 1 /mob/living/simple_animal/hostile/carp/megacarp @@ -92,7 +92,7 @@ desc = "A failed Syndicate experiment in weaponized space carp technology, it now serves as a lovable mascot." gender = FEMALE speak_emote = list("squeaks") - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN faction = list("syndicate") AIStatus = AI_OFF diff --git a/code/modules/mob/living/simple_animal/hostile/creature.dm b/code/modules/mob/living/simple_animal/hostile/creature.dm index 50baf1038e..070f076544 100644 --- a/code/modules/mob/living/simple_animal/hostile/creature.dm +++ b/code/modules/mob/living/simple_animal/hostile/creature.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /mob/living/simple_animal/hostile/creature name = "creature" desc = "A sanity-destroying otherthing." @@ -16,3 +17,23 @@ gold_core_spawnable = 1 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 +======= +/mob/living/simple_animal/hostile/creature + name = "creature" + desc = "A sanity-destroying otherthing." + icon_state = "otherthing" + icon_living = "otherthing" + icon_dead = "otherthing-dead" + health = 80 + maxHealth = 80 + obj_damage = 100 + melee_damage_lower = 25 + melee_damage_upper = 50 + attacktext = "chomps" + attack_sound = 'sound/weapons/bite.ogg' + faction = list("creature") + speak_emote = list("screams") + gold_core_spawnable = HOSTILE_SPAWN + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + minbodytemp = 0 +>>>>>>> 2abae67... Cleans up goldcore defines (#33090) diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index 173c8a6b8d..2929e146f1 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -31,7 +31,7 @@ minbodytemp = 0 faction = list("faithless") - gold_core_spawnable = 1 + gold_core_spawnable = HOSTILE_SPAWN /mob/living/simple_animal/hostile/faithless/AttackingTarget() . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 3ea1be6f03..2d18fd3331 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -44,7 +44,7 @@ attacktext = "bites" attack_sound = 'sound/weapons/bite.ogg' unique_name = 1 - gold_core_spawnable = 1 + gold_core_spawnable = HOSTILE_SPAWN see_in_dark = 4 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE var/playable_spider = FALSE @@ -152,7 +152,7 @@ move_to_delay = 4 poison_type = "venom" //all in venom, glass cannon. you bite 5 times and they are DEFINITELY dead, but 40 health and you are extremely obvious. Ambush, maybe? speed = 1 - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN //tarantulas are really tanky, regenerating (maybe), hulky monster but are also extremely slow, so. /mob/living/simple_animal/hostile/poison/giant_spider/tarantula @@ -170,7 +170,7 @@ speed = 7 status_flags = NONE mob_size = MOB_SIZE_LARGE - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN /mob/living/simple_animal/hostile/poison/giant_spider/tarantula/movement_delay() var/turf/T = get_turf(src) @@ -190,7 +190,7 @@ maxHealth = 40 health = 40 var/datum/action/innate/spider/comm/letmetalkpls - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN /mob/living/simple_animal/hostile/poison/giant_spider/nurse/midwife/Initialize() . = ..() @@ -208,7 +208,7 @@ maxbodytemp = 1500 poison_type = "frost_oil" color = rgb(114,228,250) - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN /mob/living/simple_animal/hostile/poison/giant_spider/nurse/ice name = "giant ice spider" @@ -217,7 +217,7 @@ maxbodytemp = 1500 poison_type = "frost_oil" color = rgb(114,228,250) - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN /mob/living/simple_animal/hostile/poison/giant_spider/hunter/ice name = "giant ice spider" @@ -226,7 +226,7 @@ maxbodytemp = 1500 poison_type = "frost_oil" color = rgb(114,228,250) - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN /mob/living/simple_animal/hostile/poison/giant_spider/handle_automated_action() if(!..()) //AIStatus is off diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm index f59cf79f22..5b4324623f 100644 --- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm +++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm @@ -22,7 +22,11 @@ ventcrawler = VENTCRAWLER_ALWAYS var/datum/mind/origin var/egg_lain = 0 +<<<<<<< HEAD // gold_core_spawnable = 1 //are you sure about this?? +======= + gold_core_spawnable = HOSTILE_SPAWN //are you sure about this?? +>>>>>>> 2abae67... Cleans up goldcore defines (#33090) /mob/living/simple_animal/hostile/headcrab/proc/Infect(mob/living/carbon/victim) var/obj/item/organ/body_egg/changeling_egg/egg = new(victim) diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 06f2a56a0e..41a08a949c 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -24,7 +24,7 @@ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 speak_emote = list("states") - gold_core_spawnable = 1 + gold_core_spawnable = HOSTILE_SPAWN del_on_death = 1 loot = list(/obj/effect/decal/cleanable/robot_debris) diff --git a/code/modules/mob/living/simple_animal/hostile/killertomato.dm b/code/modules/mob/living/simple_animal/hostile/killertomato.dm index db1f253645..17658cc7c1 100644 --- a/code/modules/mob/living/simple_animal/hostile/killertomato.dm +++ b/code/modules/mob/living/simple_animal/hostile/killertomato.dm @@ -24,4 +24,4 @@ atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 150 maxbodytemp = 500 - gold_core_spawnable = 1 + gold_core_spawnable = HOSTILE_SPAWN diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 587afef82f..58e3e0837b 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -612,7 +612,7 @@ Difficulty: Very Hard pass_flags = PASSTABLE | PASSGRILLE | PASSMOB ventcrawler = VENTCRAWLER_ALWAYS mob_size = MOB_SIZE_TINY - gold_core_spawnable = TRUE + gold_core_spawnable = HOSTILE_SPAWN verb_say = "warps" verb_ask = "floats inquisitively" verb_exclaim = "zaps" diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index 0c7edd0334..dd96c87371 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -27,7 +27,7 @@ faction = list("mimic") move_to_delay = 9 - gold_core_spawnable = 1 + gold_core_spawnable = HOSTILE_SPAWN del_on_death = 1 // Aggro when you try to open them. Will also pickup loot when spawns and drop it when dies. @@ -101,7 +101,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca var/destroy_objects = 0 var/knockdown_people = 0 var/static/mutable_appearance/googly_eyes = mutable_appearance('icons/mob/mob.dmi', "googly_eyes") - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN /mob/living/simple_animal/hostile/mimic/copy/Initialize(mapload, obj/copy, mob/living/creator, destroy_original = 0) . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm index 38022461b7..a9627c7e2d 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm @@ -33,7 +33,7 @@ aggro_vision_range = 9 idle_vision_range = 2 turns_per_move = 5 - gold_core_spawnable = TRUE + gold_core_spawnable = HOSTILE_SPAWN loot = list(/obj/item/ore/diamond{layer = ABOVE_MOB_LAYER}, /obj/item/ore/diamond{layer = ABOVE_MOB_LAYER}) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm index 04282d12fd..ad7edb1716 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm @@ -23,7 +23,7 @@ friendly = "pinches" a_intent = INTENT_HELP ventcrawler = VENTCRAWLER_ALWAYS - gold_core_spawnable = 2 + gold_core_spawnable = FRIENDLY_SPAWN stat_attack = UNCONSCIOUS gender = NEUTER stop_automated_movement = FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm index 1db0bf1e20..18e07391ba 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm @@ -23,7 +23,7 @@ butcher_results = list(/obj/item/reagent_containers/food/snacks/nugget = 1) pass_flags = PASSTABLE | PASSGRILLE | PASSMOB mob_size = MOB_SIZE_TINY - gold_core_spawnable = 1 + gold_core_spawnable = HOSTILE_SPAWN /mob/living/simple_animal/hostile/retaliate/frog/Initialize() . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm index 6d492a2be0..2d24f847df 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm @@ -29,7 +29,7 @@ maxbodytemp = 1500 movement_type = FLYING pressure_resistance = 300 - gold_core_spawnable = 0 //too spooky for science + gold_core_spawnable = NO_SPAWN //too spooky for science var/ghost_hair_style var/ghost_hair_color var/mutable_appearance/ghost_hair diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm index 3a3cfbb27d..5455d17a80 100644 --- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm +++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm @@ -25,7 +25,7 @@ unsuitable_atmos_damage = 10 robust_searching = 1 stat_attack = UNCONSCIOUS - gold_core_spawnable = 1 + gold_core_spawnable = HOSTILE_SPAWN faction = list("skeleton") see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE @@ -41,7 +41,7 @@ icon_dead = "eskimo_dead" maxHealth = 55 health = 55 - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN melee_damage_lower = 17 melee_damage_upper = 20 deathmessage = "collapses into a pile of bones, its gear falling to the floor!" @@ -60,7 +60,7 @@ maxHealth = 150 health = 150 speed = 2 - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN speak_chance = 1 speak = list("THE GODS WILL IT!","DEUS VULT!","REMOVE KABAB!") force_threshold = 10 //trying to simulate actually having armor diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index a17ec0ff66..af665a4345 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -153,6 +153,6 @@ limb_destroyer = 1 speak_emote = list("states") bubble_icon = "syndibot" - gold_core_spawnable = 1 + gold_core_spawnable = HOSTILE_SPAWN del_on_death = 1 deathmessage = "is smashed into pieces!" diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index ced75cb076..3d10bfd121 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -36,7 +36,7 @@ faction = list("hostile") deathmessage = "is hacked into pieces!" loot = list(/obj/item/stack/sheet/mineral/wood) - gold_core_spawnable = 1 + gold_core_spawnable = HOSTILE_SPAWN del_on_death = 1 /mob/living/simple_animal/hostile/tree/Life() diff --git a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm index 881215e97b..97dd430a12 100644 --- a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm +++ b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm @@ -27,7 +27,7 @@ idle_vision_range = 5 mob_size = MOB_SIZE_SMALL environment_smash = ENVIRONMENT_SMASH_NONE - gold_core_spawnable = TRUE + gold_core_spawnable = HOSTILE_SPAWN var/wumbo = 0 var/inflate_cooldown = 0 loot = list(/obj/item/asteroid/fugu_gland{layer = ABOVE_MOB_LAYER}) diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 641e78a0f3..0bb72ef5cf 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -59,9 +59,13 @@ friendly = "grooms" mob_size = MOB_SIZE_SMALL movement_type = FLYING +<<<<<<< HEAD gold_core_spawnable = 2 devourable = TRUE no_vore = FALSE +======= + gold_core_spawnable = FRIENDLY_SPAWN +>>>>>>> 2abae67... Cleans up goldcore defines (#33090) var/parrot_damage_upper = 10 var/parrot_state = PARROT_WANDER //Hunt for a perch when created @@ -871,7 +875,7 @@ name = "Poly" desc = "Poly the Parrot. An expert on quantum cracker theory." speak = list("Poly wanna cracker!", ":e Check the crystal, you chucklefucks!",":e Wire the solars, you lazy bums!",":e WHO TOOK THE DAMN HARDSUITS?",":e OH GOD ITS ABOUT TO DELAMINATE CALL THE SHUTTLE") - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN speak_chance = 3 var/memory_saved = FALSE var/rounds_survived = 0 @@ -1012,7 +1016,7 @@ emote_hear = list("squawks rustily.", "bawks metallically!") emote_see = list("flutters its metal wings.") faction = list("ratvar") - gold_core_spawnable = FALSE + gold_core_spawnable = NO_SPAWN del_on_death = TRUE death_sound = 'sound/magic/clockwork/anima_fragment_death.ogg' diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index fffc05ccf9..72a1ec84c1 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -63,7 +63,7 @@ //simple_animal access var/obj/item/card/id/access_card = null //innate access uses an internal ID card var/buffed = 0 //In the event that you want to have a buffing effect on the mob, but don't want it to stack with other effects, any outside force that applies a buff to a simple mob should at least set this to 1, so we have something to check against - var/gold_core_spawnable = 0 //if 1 can be spawned by plasma with gold core, 2 are 'friendlies' spawned with blood + var/gold_core_spawnable = NO_SPAWN //If the mob can be spawned with a gold slime core. HOSTILE_SPAWN are spawned with plasma, FRIENDLY_SPAWN are spawned with blood var/mob/living/simple_animal/hostile/spawner/nest diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index aaa070703f..6bcc3412ca 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -29,9 +29,9 @@ for (var/T in typesof(/mob/living/simple_animal)) var/mob/living/simple_animal/SA = T switch(initial(SA.gold_core_spawnable)) - if(1) + if(HOSTILE_SPAWN) chemical_mob_spawn_meancritters += T - if(2) + if(FRIENDLY_SPAWN) chemical_mob_spawn_nicecritters += T var/atom/A = holder.my_atom var/turf/T = get_turf(A) diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 6db6e73cff..ea603039bc 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -153,7 +153,7 @@ access_card.access |= ACCESS_CENT_BAR /mob/living/simple_animal/hostile/alien/maid/barmaid - gold_core_spawnable = 0 + gold_core_spawnable = NO_SPAWN name = "Barmaid" desc = "A barmaid, a maiden found in a bar." pass_flags = PASSTABLE From c574b06f902ab5a324de6f95da82b69dcd26051f Mon Sep 17 00:00:00 2001 From: AnturK Date: Sun, 26 Nov 2017 23:53:31 +0100 Subject: [PATCH 84/98] Fixes wizard greentext (#33088) --- code/game/gamemodes/wizard/wizard.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 4a4be9693a..5302ebd39b 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -99,7 +99,7 @@ wizardwin = 0 count++ - if(wizard.current && wizard.current.stat!=2 && wizardwin) + if(wizard.current && wizardwin) text += "
The wizard was successful!" SSblackbox.record_feedback("tally", "wizard_success", 1, "SUCCESS") else From 5abd1bcdd96d7afad1b2b25c1f3f84788a15a3a4 Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Sat, 25 Nov 2017 16:16:13 -0500 Subject: [PATCH 86/98] Cleans up some qdel(src)'s in Initialize() --- code/game/gamemodes/blob/blobs/core.dm | 2 +- code/game/gamemodes/wizard/spellbook.dm | 2 +- code/game/machinery/launch_pad.dm | 2 +- .../objects/effects/spawners/bombspawner.dm | 39 +++++++++++++++++++ .../objects/effects/spawners/gibspawner.dm | 2 +- .../objects/effects/spawners/structure.dm | 2 +- code/game/objects/items/chrono_eraser.dm | 2 +- code/modules/library/soapstone.dm | 2 +- code/modules/mapping/mapping_helpers.dm | 4 +- code/modules/mining/machine_processing.dm | 2 +- .../carbon/human/species_types/golems.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 3 +- .../mob/living/simple_animal/bot/bot.dm | 2 +- .../mob/living/simple_animal/friendly/dog.dm | 2 +- 14 files changed, 53 insertions(+), 15 deletions(-) diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm index 91409ac4ed..9412e8582f 100644 --- a/code/game/gamemodes/blob/blobs/core.dm +++ b/code/game/gamemodes/blob/blobs/core.dm @@ -19,7 +19,7 @@ GLOB.poi_list |= src update_icon() //so it atleast appears if(!placed && !overmind) - qdel(src) + return INITIALIZE_HINT_QDEL if(overmind) update_icon() point_rate = new_rate diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 4a407a4ef6..1cf172d3a6 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -902,7 +902,7 @@ var/static/banned_spells = list(/obj/item/spellbook/oneuse/mimery_blockade, /obj/item/spellbook/oneuse/mimery_guns) var/real_type = pick(subtypesof(/obj/item/spellbook/oneuse) - banned_spells) new real_type(loc) - qdel(src) + return INITIALIZE_HINT_QDEL /obj/item/spellbook/oneuse/sacredflame spell = /obj/effect/proc_holder/spell/targeted/sacred_flame diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm index 65f5b946ef..4f4e481905 100644 --- a/code/game/machinery/launch_pad.dm +++ b/code/game/machinery/launch_pad.dm @@ -155,7 +155,7 @@ briefcase = loc else log_game("[src] has been spawned without a briefcase.") - qdel(src) + return INITIALIZE_HINT_QDEL /obj/machinery/launchpad/briefcase/Destroy() QDEL_NULL(briefcase) diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm index da9eb76101..2a8407ad7a 100644 --- a/code/game/objects/effects/spawners/bombspawner.dm +++ b/code/game/objects/effects/spawners/bombspawner.dm @@ -8,6 +8,7 @@ /obj/effect/spawner/newbomb/Initialize() . = ..() +<<<<<<< HEAD var/obj/item/device/transfer_valve/V = new(src.loc) var/obj/item/tank/internals/plasma/full/PT = new(V) var/obj/item/tank/internals/oxygen/OT = new(V) @@ -44,3 +45,41 @@ assembly_type = /obj/item/device/assembly/signaler +======= + var/obj/item/device/transfer_valve/V = new(src.loc) + var/obj/item/tank/internals/plasma/full/PT = new(V) + var/obj/item/tank/internals/oxygen/OT = new(V) + + PT.air_contents.temperature = btemp1 + T0C + OT.air_contents.temperature = btemp2 + T0C + + V.tank_one = PT + V.tank_two = OT + PT.master = V + OT.master = V + + if(assembly_type) + var/obj/item/device/assembly/A = new assembly_type(V) + V.attached_device = A + A.holder = V + A.toggle_secure() + + V.update_icon() + + return INITIALIZE_HINT_QDEL + +/obj/effect/spawner/newbomb/timer + assembly_type = /obj/item/device/assembly/timer + +/obj/effect/spawner/newbomb/timer/syndicate + btemp1 = 150 + btemp2 = 20 + +/obj/effect/spawner/newbomb/proximity + assembly_type = /obj/item/device/assembly/prox_sensor + +/obj/effect/spawner/newbomb/radio + assembly_type = /obj/item/device/assembly/signaler + + +>>>>>>> 395c0ee... Cleans up some qdel(src)'s in Initialize() diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index 303bcd7f33..43f10dc45e 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -38,7 +38,7 @@ if(directions.len) gib.streak(directions) - qdel(src) + return INITIALIZE_HINT_QDEL diff --git a/code/game/objects/effects/spawners/structure.dm b/code/game/objects/effects/spawners/structure.dm index 285aeeaf8c..f4abff67fb 100644 --- a/code/game/objects/effects/spawners/structure.dm +++ b/code/game/objects/effects/spawners/structure.dm @@ -13,7 +13,7 @@ again. if(spawn_list && spawn_list.len) for(var/I in spawn_list) new I(get_turf(src)) - qdel(src) + return INITIALIZE_HINT_QDEL //normal windows diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm index d65ef6fc2a..8ac9643c39 100644 --- a/code/game/objects/items/chrono_eraser.dm +++ b/code/game/objects/items/chrono_eraser.dm @@ -62,7 +62,7 @@ TED = loc else //admin must have spawned it TED = new(src.loc) - qdel(src) + return INITIALIZE_HINT_QDEL /obj/item/gun/energy/chrono_gun/update_icon() return diff --git a/code/modules/library/soapstone.dm b/code/modules/library/soapstone.dm index ab78b582a6..cee4665f07 100644 --- a/code/modules/library/soapstone.dm +++ b/code/modules/library/soapstone.dm @@ -136,7 +136,7 @@ if(!good_chisel_message_location(T)) persists = FALSE - qdel(src) + return INITIALIZE_HINT_QDEL /obj/structure/chisel_message/proc/register(mob/user, newmessage) hidden_message = newmessage diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index e70786f80d..a4d3986020 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -15,7 +15,7 @@ for(var/turf/T in get_area_turfs(thearea, z)) if(T.baseturf != T.type) //Don't break indestructible walls and the like T.baseturf = baseturf - qdel(src) + return INITIALIZE_HINT_QDEL /obj/effect/baseturf_helper/asteroid @@ -65,5 +65,5 @@ GLOBAL_LIST_EMPTY(z_is_planet) var/turf/T = get_turf(src) if(!turf_z_is_planet(T)) GLOB.z_is_planet["[T.z]"] = list() - qdel(src) + return INITIALIZE_HINT_QDEL diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 276c030175..757cad5e19 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -18,7 +18,7 @@ if (machine) machine.CONSOLE = src else - qdel(src) + return INITIALIZE_HINT_QDEL /obj/machinery/mineral/processing_unit_console/attack_hand(mob/user) diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index e3d2d5db61..9cb3f21ec0 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -710,7 +710,7 @@ to_chat(cloth_golem, "You start gathering your life energy, preparing to rise again...") addtimer(CALLBACK(src, .proc/revive), revive_time) else - qdel(src) + return INITIALIZE_HINT_QDEL /obj/structure/cloth_pile/Destroy() if(cloth_golem) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 3a5988e09a..0fb044429c 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -88,8 +88,7 @@ . = ..() if(!target_ai) //If there is no player/brain inside. new/obj/structure/AIcore/deactivated(loc) //New empty terminal. - qdel(src)//Delete AI. - return + return INITIALIZE_HINT_QDEL //Delete AI. if(L && istype(L, /datum/ai_laws)) laws = L diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 5d943bc1e5..d4c459e996 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -800,7 +800,7 @@ Pass a positive integer as an argument to override a bot's default speed. . = ..() owner = loc if(!istype(owner)) - qdel(src) + return INITIALIZE_HINT_QDEL /mob/living/simple_animal/bot/proc/topic_denied(mob/user) //Access check proc for bot topics! Remember to place in a bot's individual Topic if desired. if(!user.canUseTopic(src)) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 2a94052274..95b63c98f5 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -310,7 +310,7 @@ P.gender = MALE P.desc = "It's the HoP's beloved corgi puppy." Write_Memory(FALSE) - qdel(src) + return INITIALIZE_HINT_QDEL else if(age == record_age) icon_state = "old_corgi" icon_living = "old_corgi" From 9538aa645c69eea35ed7f65dcc8d93fdb9ac9083 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 26 Nov 2017 21:20:00 -0500 Subject: [PATCH 87/98] Update bombspawner.dm --- .../objects/effects/spawners/bombspawner.dm | 57 +++---------------- 1 file changed, 9 insertions(+), 48 deletions(-) diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm index 2a8407ad7a..e376795704 100644 --- a/code/game/objects/effects/spawners/bombspawner.dm +++ b/code/game/objects/effects/spawners/bombspawner.dm @@ -1,51 +1,13 @@ -/obj/effect/spawner/newbomb - name = "bomb" - icon = 'icons/mob/screen_gen.dmi' - icon_state = "x" - var/btemp1 = 1500 - var/btemp2 = 1000 // tank temperatures - var/assembly_type - -/obj/effect/spawner/newbomb/Initialize() +/obj/effect/spawner/newbomb + name = "bomb" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x" + var/btemp1 = 1500 + var/btemp2 = 1000 // tank temperatures + var/assembly_type + +/obj/effect/spawner/newbomb/Initialize() . = ..() -<<<<<<< HEAD - var/obj/item/device/transfer_valve/V = new(src.loc) - var/obj/item/tank/internals/plasma/full/PT = new(V) - var/obj/item/tank/internals/oxygen/OT = new(V) - - PT.air_contents.temperature = btemp1 + T0C - OT.air_contents.temperature = btemp2 + T0C - - V.tank_one = PT - V.tank_two = OT - PT.master = V - OT.master = V - - if(assembly_type) - var/obj/item/device/assembly/A = new assembly_type(V) - V.attached_device = A - A.holder = V - A.toggle_secure() - - V.update_icon() - - qdel(src) - -/obj/effect/spawner/newbomb/timer - assembly_type = /obj/item/device/assembly/timer - -/obj/effect/spawner/newbomb/timer/syndicate - btemp1 = 150 - btemp2 = 20 - -/obj/effect/spawner/newbomb/proximity - assembly_type = /obj/item/device/assembly/prox_sensor - -/obj/effect/spawner/newbomb/radio - assembly_type = /obj/item/device/assembly/signaler - - -======= var/obj/item/device/transfer_valve/V = new(src.loc) var/obj/item/tank/internals/plasma/full/PT = new(V) var/obj/item/tank/internals/oxygen/OT = new(V) @@ -82,4 +44,3 @@ assembly_type = /obj/item/device/assembly/signaler ->>>>>>> 395c0ee... Cleans up some qdel(src)'s in Initialize() From 59b873137001ffa8bdc01d9d9b809ef9f0475004 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 26 Nov 2017 21:20:54 -0500 Subject: [PATCH 88/98] Update misc.dm --- code/__DEFINES/misc.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 1782c7aa62..7cc2e4537f 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -478,12 +478,8 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #define SYRINGE_DRAW 0 #define SYRINGE_INJECT 1 -<<<<<<< HEAD -======= -#define RESEARCH_MATERIAL_RECLAMATION_ID "0" //gold slime core spawning #define NO_SPAWN 0 #define HOSTILE_SPAWN 1 #define FRIENDLY_SPAWN 2 ->>>>>>> 2abae67... Cleans up goldcore defines (#33090) From 4e2db63a33f3387311c04bc107aaf9a9602c7743 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 26 Nov 2017 21:21:28 -0500 Subject: [PATCH 89/98] Update cat.dm --- code/modules/mob/living/simple_animal/friendly/cat.dm | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index f9ddd94f0a..a333f22c38 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -28,13 +28,9 @@ response_harm = "kicks" var/turns_since_scan = 0 var/mob/living/simple_animal/mouse/movement_target -<<<<<<< HEAD - gold_core_spawnable = 2 + gold_core_spawnable = FRIENDLY_SPAWN devourable = TRUE no_vore = FALSE -======= - gold_core_spawnable = FRIENDLY_SPAWN ->>>>>>> 2abae67... Cleans up goldcore defines (#33090) /mob/living/simple_animal/pet/cat/Initialize() . = ..() @@ -286,4 +282,4 @@ ..() if(L.a_intent == INTENT_HARM && L.reagents && !stat) L.reagents.add_reagent("nutriment", 0.4) - L.reagents.add_reagent("vitamin", 0.4) \ No newline at end of file + L.reagents.add_reagent("vitamin", 0.4) From 933b4a7a3a18e7b907310f69c72405b09c6ce104 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 26 Nov 2017 21:21:55 -0500 Subject: [PATCH 90/98] Update crab.dm --- code/modules/mob/living/simple_animal/friendly/crab.dm | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index 99d91b299e..35d7d12174 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -19,12 +19,8 @@ ventcrawler = VENTCRAWLER_ALWAYS var/obj/item/inventory_head var/obj/item/inventory_mask -<<<<<<< HEAD - gold_core_spawnable = 2 - devourable = TRUE -======= gold_core_spawnable = FRIENDLY_SPAWN ->>>>>>> 2abae67... Cleans up goldcore defines (#33090) + devourable = TRUE /mob/living/simple_animal/crab/Life() ..() From eb13f4ee2f7378909421830644edf36a4c7bb6ec Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 26 Nov 2017 21:22:42 -0500 Subject: [PATCH 91/98] Update farm_animals.dm --- .../mob/living/simple_animal/friendly/farm_animals.dm | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 03d79e98e0..cbd14bb376 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -195,12 +195,8 @@ var/amount_grown = 0 pass_flags = PASSTABLE | PASSGRILLE | PASSMOB mob_size = MOB_SIZE_TINY -<<<<<<< HEAD - gold_core_spawnable = 2 - devourable = TRUE -======= gold_core_spawnable = FRIENDLY_SPAWN ->>>>>>> 2abae67... Cleans up goldcore defines (#33090) + devourable = TRUE /mob/living/simple_animal/chick/Initialize() . = ..() From e70daa585c65ffbca214afda7dbf9d21b4ce23e4 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 26 Nov 2017 21:23:26 -0500 Subject: [PATCH 92/98] Update fox.dm --- code/modules/mob/living/simple_animal/friendly/fox.dm | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm index 6b06ac7a86..b9192c1746 100644 --- a/code/modules/mob/living/simple_animal/friendly/fox.dm +++ b/code/modules/mob/living/simple_animal/friendly/fox.dm @@ -17,8 +17,7 @@ response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" -<<<<<<< HEAD - gold_core_spawnable = 2 + gold_core_spawnable = FRIENDLY_SPAWN devourable = TRUE var/mob/living/simple_animal/mouse/movement_target var/turns_since_scan = 0 @@ -60,9 +59,6 @@ if(movement_target) stop_automated_movement = 1 walk_to(src,movement_target,0,3) -======= - gold_core_spawnable = FRIENDLY_SPAWN ->>>>>>> 2abae67... Cleans up goldcore defines (#33090) //Captain fox /mob/living/simple_animal/pet/fox/Renault From c67063beb5b4ec13b8281698ff2d5695e8c5d94e Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 26 Nov 2017 21:23:50 -0500 Subject: [PATCH 93/98] Update lizard.dm --- code/modules/mob/living/simple_animal/friendly/lizard.dm | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm index e4e1b26225..f45e7f7950 100644 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm @@ -18,12 +18,8 @@ density = FALSE pass_flags = PASSTABLE | PASSMOB mob_size = MOB_SIZE_SMALL -<<<<<<< HEAD - gold_core_spawnable = 2 - devourable = TRUE -======= gold_core_spawnable = FRIENDLY_SPAWN ->>>>>>> 2abae67... Cleans up goldcore defines (#33090) + devourable = TRUE obj_damage = 0 environment_smash = ENVIRONMENT_SMASH_NONE var/static/list/edibles = typecacheof(list(/mob/living/simple_animal/butterfly, /mob/living/simple_animal/cockroach)) //list of atoms, however turfs won't affect AI, but will affect consumption. From e5e17cf3342040fdb7a0bd205e38afbf046205fa Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 26 Nov 2017 21:24:27 -0500 Subject: [PATCH 94/98] Update bear.dm --- code/modules/mob/living/simple_animal/hostile/bear.dm | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 2300eb5c7c..d63b5d4114 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -36,13 +36,9 @@ maxbodytemp = 1500 faction = list("russian") -<<<<<<< HEAD - gold_core_spawnable = 1 + gold_core_spawnable = HOSTILE_SPAWN devourable = TRUE no_vore = FALSE -======= - gold_core_spawnable = HOSTILE_SPAWN ->>>>>>> 2abae67... Cleans up goldcore defines (#33090) //SPACE BEARS! SQUEEEEEEEE~ OW! FUCK! IT BIT MY HAND OFF!! /mob/living/simple_animal/hostile/bear/Hudson From 90e13d005390da8530a97f4b6f048e70c3994045 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 26 Nov 2017 21:25:13 -0500 Subject: [PATCH 95/98] Update creature.dm --- .../living/simple_animal/hostile/creature.dm | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/creature.dm b/code/modules/mob/living/simple_animal/hostile/creature.dm index 070f076544..12da922fc0 100644 --- a/code/modules/mob/living/simple_animal/hostile/creature.dm +++ b/code/modules/mob/living/simple_animal/hostile/creature.dm @@ -1,23 +1,3 @@ -<<<<<<< HEAD -/mob/living/simple_animal/hostile/creature - name = "creature" - desc = "A sanity-destroying otherthing." - icon_state = "otherthing" - icon_living = "otherthing" - icon_dead = "otherthing-dead" - health = 80 - maxHealth = 80 - obj_damage = 100 - melee_damage_lower = 25 - melee_damage_upper = 50 - attacktext = "chomps" - attack_sound = 'sound/weapons/bite.ogg' - faction = list("creature") - speak_emote = list("screams") - gold_core_spawnable = 1 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 -======= /mob/living/simple_animal/hostile/creature name = "creature" desc = "A sanity-destroying otherthing." @@ -36,4 +16,3 @@ gold_core_spawnable = HOSTILE_SPAWN atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 ->>>>>>> 2abae67... Cleans up goldcore defines (#33090) From 12cb0a98a4d17627633b8ceedf8a290b7e48e845 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 26 Nov 2017 21:25:51 -0500 Subject: [PATCH 96/98] Update headcrab.dm --- code/modules/mob/living/simple_animal/hostile/headcrab.dm | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm index 5b4324623f..4e302b3d55 100644 --- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm +++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm @@ -22,11 +22,7 @@ ventcrawler = VENTCRAWLER_ALWAYS var/datum/mind/origin var/egg_lain = 0 -<<<<<<< HEAD -// gold_core_spawnable = 1 //are you sure about this?? -======= - gold_core_spawnable = HOSTILE_SPAWN //are you sure about this?? ->>>>>>> 2abae67... Cleans up goldcore defines (#33090) +// gold_core_spawnable = HOSTILE_SPAWN //are you sure about this?? /mob/living/simple_animal/hostile/headcrab/proc/Infect(mob/living/carbon/victim) var/obj/item/organ/body_egg/changeling_egg/egg = new(victim) From d5eef89e132f02b6d03ed45ed4b9eeb0fd0ef8bc Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 26 Nov 2017 21:26:35 -0500 Subject: [PATCH 97/98] Update parrot.dm --- code/modules/mob/living/simple_animal/parrot.dm | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 0bb72ef5cf..ffbeb1f503 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -59,13 +59,9 @@ friendly = "grooms" mob_size = MOB_SIZE_SMALL movement_type = FLYING -<<<<<<< HEAD - gold_core_spawnable = 2 + gold_core_spawnable = FRIENDLY_SPAWN devourable = TRUE no_vore = FALSE -======= - gold_core_spawnable = FRIENDLY_SPAWN ->>>>>>> 2abae67... Cleans up goldcore defines (#33090) var/parrot_damage_upper = 10 var/parrot_state = PARROT_WANDER //Hunt for a perch when created From b4b94ee55720a66bf5cadbc705020d15ec4ddd80 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 26 Nov 2017 20:45:43 -0600 Subject: [PATCH 98/98] Automatic changelog generation for PR #4053 [ci skip] --- html/changelogs/AutoChangeLog-pr-4053.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4053.yml diff --git a/html/changelogs/AutoChangeLog-pr-4053.yml b/html/changelogs/AutoChangeLog-pr-4053.yml new file mode 100644 index 0000000000..9f749a63a5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4053.yml @@ -0,0 +1,6 @@ +author: "Toriate" +delete-after: True +changes: + - rscadd: "Added recolourable clothes" + - tweak: "jumpsuits in mixed wardrobe replaced with recolourable clothes" + - imageadd: "greyscaled clothing sprites for colourable clothes"