diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 60c91e51bb..485666a8ff 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -1688,8 +1688,7 @@ /obj/machinery/button/door{ id = "hos"; name = "HoS Office Shutters"; - pixel_y = -25; - + pixel_y = -25 }, /turf/open/floor/carpet, /area/crew_quarters/heads/hos) @@ -26228,9 +26227,7 @@ /turf/open/floor/plasteel, /area/quartermaster/office) "bkx" = ( -/obj/machinery/status_display/supply{ - pixel_y = 2 - }, +/obj/machinery/status_display/supply, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -31345,7 +31342,9 @@ id = "QMLoad" }, /obj/machinery/light, -/obj/machinery/status_display/supply, +/obj/machinery/status_display/supply{ + pixel_y = -32 + }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -33612,7 +33611,9 @@ name = "Station Intercom (General)"; pixel_y = -35 }, -/obj/machinery/status_display/supply, +/obj/machinery/status_display/supply{ + pixel_x = -32 + }, /obj/machinery/computer/security/qm{ dir = 4 }, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 1bcb5c20a8..efd4d0f56e 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -17692,7 +17692,9 @@ pixel_x = -28; pixel_y = 23 }, -/obj/machinery/status_display/supply, +/obj/machinery/status_display/supply{ + pixel_y = 32 + }, /obj/machinery/conveyor{ dir = 5; id = "QMLoad2" @@ -21617,7 +21619,9 @@ /obj/structure/table, /obj/item/clipboard, /obj/item/stamp/qm, -/obj/machinery/status_display/supply, +/obj/machinery/status_display/supply{ + pixel_x = 32 + }, /turf/open/floor/plasteel, /area/quartermaster/qm) "aQu" = ( @@ -27037,7 +27041,9 @@ /area/hallway/primary/port) "baA" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/machinery/status_display/supply, +/obj/machinery/status_display/supply{ + pixel_y = 32 + }, /obj/structure/table, /obj/item/folder/yellow, /obj/effect/turf_decal/tile/brown{ @@ -27920,7 +27926,9 @@ /area/quartermaster/office) "bbS" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/machinery/status_display/supply, +/obj/machinery/status_display/supply{ + pixel_y = 32 + }, /obj/effect/turf_decal/tile/brown{ dir = 1 }, diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index dbb26f8808..cef0aefc50 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -2833,7 +2833,9 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/hop) "aeP" = ( -/obj/machinery/status_display/supply, +/obj/machinery/status_display/supply{ + pixel_x = -32 + }, /obj/effect/turf_decal/loading_area, /turf/open/floor/plasteel, /area/quartermaster/storage) diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 7935a2a3f9..9efbb28e2b 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -21743,7 +21743,9 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aZj" = ( -/obj/machinery/status_display/supply, +/obj/machinery/status_display/supply{ + pixel_x = -32 + }, /obj/machinery/computer/bounty{ dir = 4 }, @@ -36058,7 +36060,9 @@ /obj/item/folder/white, /obj/item/pen, /obj/item/stamp/rd, -/obj/machinery/status_display/ai, +/obj/machinery/status_display/ai{ + pixel_y = -32 + }, /obj/machinery/camera{ c_tag = "Research Director's Office"; dir = 1; diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 8e3cd5590e..b299e0d920 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -126,9 +126,9 @@ SUBSYSTEM_DEF(ticker) if(!GLOB.syndicate_code_phrase) - GLOB.syndicate_code_phrase = generate_code_phrase() + GLOB.syndicate_code_phrase = generate_code_phrase(return_list=TRUE) if(!GLOB.syndicate_code_response) - GLOB.syndicate_code_response = generate_code_phrase() + GLOB.syndicate_code_response = generate_code_phrase(return_list=TRUE) start_at = world.time + (CONFIG_GET(number/lobby_countdown) * 10) if(CONFIG_GET(flag/randomize_shift_time)) diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 127413262c..4283d7f78f 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -195,7 +195,7 @@ /obj/item/clothing/gloves/krav_maga/combatglovesplus name = "combat gloves plus" desc = "These tactical gloves are fireproof and shock resistant, and using nanochip technology it teaches you the powers of krav maga." - icon_state = "black" + icon_state = "combat" item_state = "blackglovesplus" siemens_coefficient = 0 permeability_coefficient = 0.05 diff --git a/code/game/objects/items/devices/dogborg_sleeper.dm b/code/game/objects/items/devices/dogborg_sleeper.dm index 9163fb0849..7f3c7f3bfc 100644 --- a/code/game/objects/items/devices/dogborg_sleeper.dm +++ b/code/game/objects/items/devices/dogborg_sleeper.dm @@ -17,7 +17,7 @@ var/eject_port = "ingestion" var/escape_in_progress = FALSE var/message_cooldown - var/breakout_time = 300 + var/breakout_time = 150 var/tmp/last_hearcheck = 0 var/tmp/list/hearing_mobs var/list/items_preserved = list() @@ -77,7 +77,7 @@ to_chat(user, "Your [src] is already occupied.") return user.visible_message("[hound.name] is carefully inserting [target.name] into their [src].", "You start placing [target] into your [src]...") - if(!patient && iscarbon(target) && !target.buckled && do_after (user, 50, target = target)) + if(!patient && iscarbon(target) && !target.buckled && do_after (user, 100, target = target)) if(!in_range(src, target)) //Proximity is probably old news by now, do a new check. return //If they moved away, you can't eat them. @@ -420,6 +420,7 @@ desc = "Equipment for medical hound. A mounted sleeper that stabilizes patients and can inject reagents in the borg's reserves." icon = 'icons/mob/dogborg.dmi' icon_state = "sleeper" + breakout_time = 30 //Medical sleepers should be designed to be as easy as possible to get out of. /obj/item/dogborg/sleeper/K9 //The K9 portabrig name = "Mobile Brig" @@ -429,6 +430,7 @@ inject_amount = 0 min_health = -100 injection_chems = null //So they don't have all the same chems as the medihound! + breakout_time = 300 /obj/item/storage/attackby(obj/item/dogborg/sleeper/K9, mob/user, proximity) if(istype(K9)) diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 47823a2dc4..828e19e3f6 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -18,7 +18,7 @@ /datum/antagonist/traitor/on_gain() if(owner.current && isAI(owner.current)) traitor_kind = TRAITOR_AI - + SSticker.mode.traitors += owner owner.special_role = special_role if(give_objectives) @@ -48,7 +48,7 @@ A.verbs -= /mob/living/silicon/ai/proc/choose_modules A.malf_picker.remove_malf_verbs(A) qdel(A.malf_picker) - + SSticker.mode.traitors -= owner if(!silent && owner.current) to_chat(owner.current," You are no longer the [special_role]! ") @@ -244,14 +244,16 @@ return var/mob/traitor_mob=owner.current - to_chat(traitor_mob, "The Syndicate provided you with the following information on how to identify their agents:") - to_chat(traitor_mob, "Code Phrase: [GLOB.syndicate_code_phrase]") - to_chat(traitor_mob, "Code Response: [GLOB.syndicate_code_response]") + var/phrases = jointext(GLOB.syndicate_code_phrase, ", ") + var/responses = jointext(GLOB.syndicate_code_response, ", ") - antag_memory += "Code Phrase: [GLOB.syndicate_code_phrase]
" - antag_memory += "Code Response: [GLOB.syndicate_code_response]
" + var/dat = "The Syndicate have provided you with the following codewords to identify fellow agents:\n" + dat += "Code Phrase: [phrases]\n" + dat += "Code Response: [responses]" + to_chat(traitor_mob, dat) - to_chat(traitor_mob, "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe.") + antag_memory += "Code Phrase: [phrases]
" + antag_memory += "Code Response: [responses]
" /datum/antagonist/traitor/proc/add_law_zero() var/mob/living/silicon/ai/killer = owner.current diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm index 085cf61769..31e99535d1 100644 --- a/code/modules/food_and_drinks/food/condiment.dm +++ b/code/modules/food_and_drinks/food/condiment.dm @@ -24,7 +24,8 @@ "blackpepper" = list("peppermillsmall", "pepper mill", "Often used to flavor food or make people sneeze"), "cornoil" = list("oliveoil", "corn oil bottle", "A delicious oil used in cooking. Made from corn"), "sugar" = list("emptycondiment", "sugar bottle", "Tasty spacey sugar!"), - "mayonnaise" = list("mayonnaise", "mayonnaise jar", "An oily condiment made from egg yolks.")) + "mayonnaise" = list("mayonnaise", "mayonnaise jar", "An oily condiment made from egg yolks."), + "peanut_butter" = list("peanutbutter", "peanut butter jar", "A deliciously and sticky spread made from peanuts.")) var/originalname = "condiment" //Can't use initial(name) for this. This stores the name set by condimasters. /obj/item/reagent_containers/food/condiment/suicide_act(mob/living/carbon/user) diff --git a/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm b/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm index 1b602b6759..17a710ada2 100644 --- a/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm +++ b/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm @@ -52,6 +52,33 @@ list_reagents = list("nutriment" = 2, "cherryjelly" = 5, "vitamin" = 2) foodtype = GRAIN | FRUIT +/obj/item/reagent_containers/food/snacks/jellysandwich/pbj + name = "\improper PB & J sandwich" + desc = "A grand creation of peanut butter, jelly and bread! An all-american classic." + icon_state = "pbjsandwich" + tastes = list("bread" = 1, "jelly" = 1, "peanuts" = 1) + +/obj/item/reagent_containers/food/snacks/jellysandwich/pbj/cherry + bonus_reagents = list("cherryjelly" = 5, "peanut_butter" = 5, "vitamin" = 2) + list_reagents = list("nutriment" = 2, "cherryjelly" = 5, "peanut_butter" = 5, "vitamin" = 2) + foodtype = GRAIN | FRUIT + +/obj/item/reagent_containers/food/snacks/jellysandwich/pbj/slime + bonus_reagents = list("slimejelly" = 5, "peanut_butter" = 5, "vitamin" = 2) + list_reagents = list("nutriment" = 2, "slimejelly" = 5, "peanut_butter" = 5, "vitamin" = 2) + foodtype = GRAIN | TOXIC + +/obj/item/reagent_containers/food/snacks/peanutbutter_sandwich + name = "peanut butter sandwich" + desc = "You wish you had some jelly to go with this..." + icon = 'icons/obj/food/burgerbread.dmi' + icon_state = "peanutbuttersandwich" + trash = /obj/item/trash/plate + bitesize = 3 + bonus_reagents = list("peanut_butter" = 5, "vitamin" = 2) + list_reagents = list("nutriment" = 2, "peanut_butter" = 5, "vitamin" = 2) + foodtype = GRAIN + /obj/item/reagent_containers/food/snacks/notasandwich name = "not-a-sandwich" desc = "Something seems to be wrong with this, you can't quite figure what. Maybe it's his moustache." @@ -83,6 +110,19 @@ list_reagents = list("nutriment" = 1, "slimejelly" = 5, "vitamin" = 2) foodtype = GRAIN | TOXIC | SUGAR +/obj/item/reagent_containers/food/snacks/peanut_buttertoast + name = "peanut butter toast" + desc = "A slice of toast covered with delicious peanut butter." + icon = 'icons/obj/food/burgerbread.dmi' + icon_state = "peanutbuttertoast" + trash = /obj/item/trash/plate + bitesize = 3 + bonus_reagents = list("peanut_butter" = 5, "vitamin" = 2) + list_reagents = list("nutriment" = 1, "peanut_butter" = 5, "vitamin" = 2) + tastes = list("toast" = 1, "peanuts" = 1) + foodtype = GRAIN + + /obj/item/reagent_containers/food/snacks/twobread name = "two bread" desc = "This seems awfully bitter." diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm index 0c4e2c2e30..a6240e5b48 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm @@ -116,7 +116,7 @@ result = /obj/item/reagent_containers/food/snacks/jelliedtoast/slime subcategory = CAT_MISCFOOD -/datum/crafting_recipe/food/jelliedyoast +/datum/crafting_recipe/food/jelliedtoast name = "Jellied toast" reqs = list( /datum/reagent/consumable/cherryjelly = 5, @@ -125,6 +125,15 @@ result = /obj/item/reagent_containers/food/snacks/jelliedtoast/cherry subcategory = CAT_MISCFOOD +/datum/crafting_recipe/food/peanutbuttertoast + name = "Peanut butter toast" + reqs = list( + /datum/reagent/consumable/peanut_butter = 5, + /obj/item/reagent_containers/food/snacks/breadslice/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/peanut_buttertoast + subcategory = CAT_MISCFOOD + /datum/crafting_recipe/food/twobread name = "Two bread" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm index 133713ac75..127b2cc238 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm @@ -43,6 +43,48 @@ result = /obj/item/reagent_containers/food/snacks/jellysandwich/cherry subcategory = CAT_SANDWICH +/datum/crafting_recipe/food/pbj_slimesandwich + name = "PB&J sandwich" + reqs = list( + /datum/reagent/toxin/slimejelly = 5, + /datum/reagent/consumable/peanut_butter = 5, + /obj/item/reagent_containers/food/snacks/breadslice/plain = 2, + ) + result = /obj/item/reagent_containers/food/snacks/jellysandwich/pbj/slime + subcategory = CAT_SANDWICH + +/datum/crafting_recipe/food/pbj_slimesandwich/alt + reqs = list( + /obj/item/reagent_containers/food/snacks/jelliedtoast/slime = 1, + /obj/item/reagent_containers/food/snacks/peanut_buttertoast = 1, + ) + +/datum/crafting_recipe/food/pbj_sandwich + name = "PB&J sandwich" + reqs = list( + /datum/reagent/consumable/cherryjelly = 5, + /datum/reagent/consumable/peanut_butter = 5, + /obj/item/reagent_containers/food/snacks/breadslice/plain = 2, + ) + result = /obj/item/reagent_containers/food/snacks/jellysandwich/pbj/cherry + subcategory = CAT_SANDWICH + +/datum/crafting_recipe/food/pbj_sandwich/alt + reqs = list( + /obj/item/reagent_containers/food/snacks/jelliedtoast/cherry = 1, + /obj/item/reagent_containers/food/snacks/peanut_buttertoast = 1, + ) + +/datum/crafting_recipe/peanutbutter_sandwich + name = "Peanut butter sandwich" + reqs = list( + /datum/reagent/consumable/peanut_butter = 5, + /obj/item/reagent_containers/food/snacks/breadslice/plain = 2, + ) + result = /obj/item/reagent_containers/food/snacks/peanutbutter_sandwich + subcategory = CAT_SANDWICH + + /datum/crafting_recipe/food/notasandwich name = "Not a sandwich" reqs = list( diff --git a/code/modules/goonchat/browserassets/css/browserOutput.css b/code/modules/goonchat/browserassets/css/browserOutput.css index 920087e026..e455255eb0 100644 --- a/code/modules/goonchat/browserassets/css/browserOutput.css +++ b/code/modules/goonchat/browserassets/css/browserOutput.css @@ -322,6 +322,7 @@ h1.alert, h2.alert {color: #99aab5;} .unconscious {color: #a4bad6; font-weight: bold;} .suicide {color: #ff5050; font-style: italic;} .red {color: #FF0000} +.pink {color: #ff70c1;} .blue {color: #215cff} .green {color: #059223;} .nicegreen {color: #059223;} diff --git a/code/modules/goonchat/browserassets/css/browserOutput_white.css b/code/modules/goonchat/browserassets/css/browserOutput_white.css index 337510982e..c54f1a8573 100644 --- a/code/modules/goonchat/browserassets/css/browserOutput_white.css +++ b/code/modules/goonchat/browserassets/css/browserOutput_white.css @@ -319,6 +319,7 @@ h1.alert, h2.alert {color: #000000;} .suicide {color: #ff5050; font-style: italic;} .green {color: #03ff39;} .red {color: #FF0000} +.pink {color: #FF69Bf;} .blue {color: #0000FF} .nicegreen {color: #14a833;} .userlove {color: #FF1493; font-style: italic; font-weight: bold; text-shadow: 0 0 6px #ff6dbc;} diff --git a/code/modules/hydroponics/grown/peanuts.dm b/code/modules/hydroponics/grown/peanuts.dm new file mode 100644 index 0000000000..2423300cc4 --- /dev/null +++ b/code/modules/hydroponics/grown/peanuts.dm @@ -0,0 +1,30 @@ +/obj/item/seeds/peanutseed + name = "pack of peanut seeds" + desc = "These seeds grow to produce fruits botanically classified as legumes, but mundanely referred as nuts." + icon_state = "seed-peanut" + species = "peanut" + plantname = "Peanut Vines" + product = /obj/item/reagent_containers/food/snacks/grown/peanut + yield = 6 + growthstages = 4 + growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi' + reagents_add = list("vitamin" = 0.02, "nutriment" = 0.15, "cooking_oil" = 0.03) + +/obj/item/reagent_containers/food/snacks/grown/peanut + seed = /obj/item/seeds/peanutseed + name = "peanut" + desc = "Peanuts for the peanut gallery!" //get me a better description, boys. + icon_state = "peanut" + filling_color = "#C4AE7A" + bitesize = 100 + foodtype = VEGETABLES + dried_type = /obj/item/reagent_containers/food/snacks/roasted_peanuts + cooked_type = /obj/item/reagent_containers/food/snacks/roasted_peanuts + +/obj/item/reagent_containers/food/snacks/roasted_peanuts + name = "roasted peanuts" + desc = "A handful of roasted peanuts, with or without salt." + icon_state = "roasted_peanuts" + foodtype = VEGETABLES + list_reagents = list("nutriment" = 6, "vitamin" = 1) + juice_results = list("peanut_butter" = 3) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/say.dm b/code/modules/mob/living/carbon/say.dm index f6e43f487f..c52b827964 100644 --- a/code/modules/mob/living/carbon/say.dm +++ b/code/modules/mob/living/carbon/say.dm @@ -39,10 +39,21 @@ else . = initial(dt.flags) & TONGUELESS_SPEECH -/mob/living/carbon/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) +/mob/living/carbon/hear_intercept(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) . = ..() if(!client) return for(var/T in get_traumas()) var/datum/brain_trauma/trauma = T - message = trauma.on_hear(message, speaker, message_language, raw_message, radio_freq) \ No newline at end of file + message = trauma.on_hear(message, speaker, message_language, raw_message, radio_freq) + + if (src.mind.has_antag_datum(/datum/antagonist/traitor)) + for (var/codeword in GLOB.syndicate_code_phrase) + var/regex/codeword_match = new("([codeword])", "ig") + message = codeword_match.Replace(message, "$1") + + for (var/codeword in GLOB.syndicate_code_response) + var/regex/codeword_match = new("([codeword])", "ig") + message = codeword_match.Replace(message, "$1") + + return message diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index e2f62b054c..160e596882 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -229,9 +229,14 @@ GLOBAL_LIST_INIT(department_radio_keys, list( // Recompose message for AI hrefs, language incomprehension. message = compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mode) + message = hear_intercept(message, speaker, message_language, raw_message, radio_freq, spans, message_mode) + show_message(message, 2, deaf_message, deaf_type) return message +/mob/living/proc/hear_intercept(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) + return message + /mob/living/send_speech(message, message_range = 6, obj/source = src, bubble_type = bubble_icon, list/spans, datum/language/message_language=null, message_mode) var/static/list/eavesdropping_modes = list(MODE_WHISPER = TRUE, MODE_WHISPER_CRIT = TRUE) var/eavesdrop_range = 0 @@ -389,8 +394,8 @@ GLOBAL_LIST_INIT(department_radio_keys, list( else . = ..() -/mob/living/whisper(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null) - say("#[message]", bubble_type, spans, sanitize, language) +/mob/living/whisper(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) + say("#[message]", bubble_type, spans, sanitize, language, ignore_spam, forced) /mob/living/get_language_holder(shadow=TRUE) if(mind && shadow) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index e71e269222..29fbd39e2c 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -580,6 +580,19 @@ else return ..() +/mob/living/silicon/robot/crowbar_act(mob/living/user, obj/item/I) //TODO: make fucking everything up there in that attackby() proc use the proper tool_act() procs. But honestly, who has time for that? 'cause I know for sure that you, the person reading this, sure as hell doesn't. + var/validbreakout = FALSE + for(var/obj/item/dogborg/sleeper/S in held_items) + if(!LAZYLEN(S.contents)) + continue + if(!validbreakout) + visible_message("[user] wedges [I] into the crevice separating [S] from [src]'s chassis, and begins to pry...", "You wedge [I] into the crevice separating [S] from [src]'s chassis, and begin to pry...") + validbreakout = TRUE + S.go_out() + if(validbreakout) + return TRUE + return ..() + /mob/living/silicon/robot/verb/unlock_own_cover() set category = "Robot Commands" set name = "Unlock Cover" diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index d0c08d9534..7efa13898d 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -438,6 +438,14 @@ . = 1 ..() +/datum/reagent/consumable/peanut_butter + name = "Peanut Butter" + id = "peanut_butter" + description = "A popular food paste made from ground dry-roasted peanuts." + color = "#C29261" + nutriment_factor = 15 * REAGENTS_METABOLISM + taste_description = "peanuts" + /datum/reagent/consumable/cornoil name = "Corn Oil" id = "cornoil" diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index af1c954c5b..e41eebf7d6 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -418,7 +418,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) surplus = 30 include_modes = list(/datum/game_mode/nuclear) -/datum/uplink_item/badass/rapid +/datum/uplink_item/dangerous/rapid name = "Gloves of the North Star" desc = "These gloves let the user punch people very fast. Does not improve weapon attack speed or the meaty fists of a hulk." item = /obj/item/clothing/gloves/rapid diff --git a/code/modules/vending/megaseed.dm b/code/modules/vending/megaseed.dm index 9aa11c7bfb..4594048256 100644 --- a/code/modules/vending/megaseed.dm +++ b/code/modules/vending/megaseed.dm @@ -23,6 +23,7 @@ /obj/item/seeds/lime = 3, /obj/item/seeds/onion = 3, /obj/item/seeds/orange = 3, + /obj/item/seeds/peanutseed = 3, /obj/item/seeds/pineapple = 3, /obj/item/seeds/potato = 3, /obj/item/seeds/poppy = 3, diff --git a/html/changelogs/AutoChangeLog-pr-8632.yml b/html/changelogs/AutoChangeLog-pr-8632.yml new file mode 100644 index 0000000000..b2f74869c2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8632.yml @@ -0,0 +1,4 @@ +author: "Arturlang" +delete-after: True +changes: + - rscadd: "Traitor codewords are now highlighted for traitors." diff --git a/html/changelogs/AutoChangeLog-pr-8663.yml b/html/changelogs/AutoChangeLog-pr-8663.yml new file mode 100644 index 0000000000..3f5aeacd3c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8663.yml @@ -0,0 +1,5 @@ +author: "Ghommie" +delete-after: True +changes: + - rscadd: "Adding in peanuts, peanut butter, peanut butter toasts and sandwiches, and the PB&J sandwich. +The peanuts contain a little bit of extractable cooking oil (similarly to soy beans) and can be microwaved or dried in a drying rack to make roasted peanuts, which can be mixed in a all-in-one-grinder for peanut butter, required to make those sandwiches." diff --git a/html/changelogs/AutoChangeLog-pr-8790.yml b/html/changelogs/AutoChangeLog-pr-8790.yml new file mode 100644 index 0000000000..0c0e6cd116 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8790.yml @@ -0,0 +1,6 @@ +author: "Bhijn" +delete-after: True +changes: + - rscadd: "It's now possible to forcefully eject the occupants of a dogborg's sleeper by using a crowbar on them. This action is instant." + - tweak: "Resist values for dogborg sleepers have been adjusted. The baseline has been decreased from 30 seconds to 15 seconds. Medihound sleepers have a resist timer of 3 seconds. Sechound sleepers retain a resist timer of 30 seconds." + - tweak: "It now takes 10 full seconds to insert people into your sleeper. This should hopefully give people some more room to breathe and react to a dogborg attempting to sleeper someone either for no reason or in a way that violates law 2." diff --git a/html/changelogs/AutoChangeLog-pr-8794.yml b/html/changelogs/AutoChangeLog-pr-8794.yml new file mode 100644 index 0000000000..612a3e655b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8794.yml @@ -0,0 +1,5 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Fixing the `(pointless) badassary` category appearing between the `dangerous and conspicious` and `stealthy and inconspicious` categories." + - bugfix: "Combat gloves plus now properly use the combat gloves sprite." diff --git a/html/changelogs/AutoChangeLog-pr-8805.yml b/html/changelogs/AutoChangeLog-pr-8805.yml new file mode 100644 index 0000000000..8abefd9ce2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8805.yml @@ -0,0 +1,4 @@ +author: "Linzolle" +delete-after: True +changes: + - bugfix: "supply display are now properly on the wall" diff --git a/icons/emoji.dmi b/icons/emoji.dmi index 128a3b243c..089c0ff3f8 100644 Binary files a/icons/emoji.dmi and b/icons/emoji.dmi differ diff --git a/icons/obj/food/burgerbread.dmi b/icons/obj/food/burgerbread.dmi index c40dfaaa22..cd7fc1742b 100644 Binary files a/icons/obj/food/burgerbread.dmi and b/icons/obj/food/burgerbread.dmi differ diff --git a/icons/obj/food/containers.dmi b/icons/obj/food/containers.dmi index ad3073a140..f64dfd4740 100644 Binary files a/icons/obj/food/containers.dmi and b/icons/obj/food/containers.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index 6292f7e21a..92b5203f5d 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/hydroponics/growing_vegetables.dmi b/icons/obj/hydroponics/growing_vegetables.dmi index 9fc1520175..63cf069186 100644 Binary files a/icons/obj/hydroponics/growing_vegetables.dmi and b/icons/obj/hydroponics/growing_vegetables.dmi differ diff --git a/icons/obj/hydroponics/harvest.dmi b/icons/obj/hydroponics/harvest.dmi index 054aa47bbd..a1ab5b08e5 100644 Binary files a/icons/obj/hydroponics/harvest.dmi and b/icons/obj/hydroponics/harvest.dmi differ diff --git a/icons/obj/hydroponics/seeds.dmi b/icons/obj/hydroponics/seeds.dmi index 4c898aecd3..5a2088c332 100644 Binary files a/icons/obj/hydroponics/seeds.dmi and b/icons/obj/hydroponics/seeds.dmi differ diff --git a/modular_citadel/code/modules/mentor/mentorpm.dm b/modular_citadel/code/modules/mentor/mentorpm.dm index 34ace6f002..4c9a4766ec 100644 --- a/modular_citadel/code/modules/mentor/mentorpm.dm +++ b/modular_citadel/code/modules/mentor/mentorpm.dm @@ -3,7 +3,7 @@ set category = "Mentor" set name = "Mentor PM" if(!is_mentor()) - to_chat(src, "Error: Mentor-PM-Panel: Only Mentors and Admins may use this command.") + to_chat(src, "Error: Mentor-PM-Panel: Only Mentors and Admins may use this command.") return var/list/client/targets[0] for(var/client/T) @@ -27,24 +27,24 @@ else if(istype(whom,/client)) C = whom if(!C) - if(is_mentor()) to_chat(src, "Error: Mentor-PM: Client not found.") + if(is_mentor()) to_chat(src, "Error: Mentor-PM: Client not found.") else mentorhelp(msg) //Mentor we are replying to left. Mentorhelp instead(check below) return if(is_mentor(whom)) - to_chat(GLOB.admins | GLOB.mentors, "[src] has started replying to [whom]'s mhelp.") + to_chat(GLOB.admins | GLOB.mentors, "[src] has started replying to [whom]'s mhelp.") //get message text, limit it's length.and clean/escape html if(!msg) msg = input(src,"Message:", "Private message") as text|null - + if(!msg && is_mentor(whom)) - to_chat(GLOB.admins | GLOB.mentors, "[src] has stopped their reply to [whom]'s mhelp.") + to_chat(GLOB.admins | GLOB.mentors, "[src] has stopped their reply to [whom]'s mhelp.") return if(!C) if(is_mentor()) - to_chat(src, "Error: Mentor-PM: Client not found.") + to_chat(src, "Error: Mentor-PM: Client not found.") else mentorhelp(msg) //Mentor we are replying to has vanished, Mentorhelp instead (how the fuck does this work?let's hope it works,shrug) return @@ -54,8 +54,8 @@ return msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN)) - if(!msg && is_mentor(whom)) - to_chat(GLOB.admins | GLOB.mentors, "[src] has stopped their reply to [whom]'s mhelp.") + if(!msg && is_mentor(whom)) + to_chat(GLOB.admins | GLOB.mentors, "[src] has stopped their reply to [whom]'s mhelp.") return log_mentor("Mentor PM: [key_name(src)]->[key_name(C)]: [msg]") @@ -65,21 +65,21 @@ var/show_char = CONFIG_GET(flag/mentors_mobname_only) if(C.is_mentor()) if(is_mentor())//both are mentors - to_chat(C, "Mentor PM from-[key_name_mentor(src, C, 1, 0, 0)]: [msg]") - to_chat(src, "Mentor PM to-[key_name_mentor(C, C, 1, 0, 0)]: [msg]") + to_chat(C, "Mentor PM from-[key_name_mentor(src, C, 1, 0, 0)]: [msg]") + to_chat(src, "Mentor PM to-[key_name_mentor(C, C, 1, 0, 0)]: [msg]") - else //recipient is an mentor but sender is not - to_chat(C, "Reply PM from-[key_name_mentor(src, C, 1, 0, show_char)]: [msg]") - to_chat(src, "Mentor PM to-[key_name_mentor(C, C, 1, 0, 0)]: [msg]") + else //recipient is a mentor but sender is not + to_chat(C, "Reply PM from-[key_name_mentor(src, C, 1, 0, show_char)]: [msg]") + to_chat(src, "Mentor PM to-[key_name_mentor(C, C, 1, 0, 0)]: [msg]") else - if(is_mentor()) //sender is an mentor but recipient is not. - to_chat(C, "Mentor PM from-[key_name_mentor(src, C, 1, 0, 0)]: [msg]") - to_chat(src, "Mentor PM to-[key_name_mentor(C, C, 1, 0, show_char)]: [msg]") + if(is_mentor()) //sender is a mentor but recipient is not. + to_chat(C, "Mentor PM from-[key_name_mentor(src, C, 1, 0, 0)]: [msg]") + to_chat(src, "Mentor PM to-[key_name_mentor(C, C, 1, 0, show_char)]: [msg]") //we don't use message_Mentors here because the sender/receiver might get it too var/show_char_sender = !is_mentor() && CONFIG_GET(flag/mentors_mobname_only) var/show_char_recip = !C.is_mentor() && CONFIG_GET(flag/mentors_mobname_only) for(var/client/X in GLOB.mentors | GLOB.admins) if(X.key!=key && X.key!=C.key) //check client/X is an Mentor and isn't the sender or recipient - to_chat(X, "Mentor PM: [key_name_mentor(src, X, 0, 0, show_char_sender)]->[key_name_mentor(C, X, 0, 0, show_char_recip)]: [msg]") //inform X + to_chat(X, "Mentor PM: [key_name_mentor(src, X, 0, 0, show_char_sender)]->[key_name_mentor(C, X, 0, 0, show_char_recip)]: [msg]") //inform X diff --git a/tgstation.dme b/tgstation.dme index 88cc64a64e..b7e590e4f7 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1720,6 +1720,7 @@ #include "code\modules\hydroponics\grown\mushrooms.dm" #include "code\modules\hydroponics\grown\nettle.dm" #include "code\modules\hydroponics\grown\onion.dm" +#include "code\modules\hydroponics\grown\peanuts.dm" #include "code\modules\hydroponics\grown\pineapple.dm" #include "code\modules\hydroponics\grown\potato.dm" #include "code\modules\hydroponics\grown\pumpkin.dm"