diff --git a/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm b/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm index bd543535f81..c4af29c6ad3 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm @@ -726,9 +726,7 @@ /turf/simulated/floor/plating/airless, /area/ruin/onehalf/hallway) "bK" = ( -/obj/machinery/vending/coffee{ - name = "\improper Solar's Best Hot Drinks" - }, +/obj/machinery/vending/coffee, /obj/effect/landmark/damageturf, /turf/simulated/floor/plasteel/airless, /area/ruin/onehalf/hallway) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 4bbc7d03d07..5fd98794503 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1926,23 +1926,23 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) return pois -/proc/flash_color(mob_or_client, flash_color="#960000", flash_time=20) +/proc/flash_color(mob_or_client, flash_color = "#960000", flash_time = 2 SECONDS) + var/mob/M var/client/C - if(istype(mob_or_client, /mob)) - var/mob/M = mob_or_client - if(M.client) - C = M.client - else + if(ismob(mob_or_client)) + M = mob_or_client + if(!M.client) return - else if(istype(mob_or_client, /client)) + C = M.client + else if(isclient(mob_or_client)) C = mob_or_client + M = C.mob - if(!istype(C)) + if(!istype(C) || !istype(M)) return C.color = flash_color - spawn(0) - animate(C, color = initial(C.color), time = flash_time) + INVOKE_ASYNC(C, /client/.proc/colour_transition, M.get_screen_colour(), flash_time) #define RANDOM_COLOUR (rgb(rand(0,255),rand(0,255),rand(0,255))) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 14a952cb36f..28f69ba1795 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -287,7 +287,7 @@ SUBSYSTEM_DEF(ticker) else log_debug("Playercount: [playercount] versus trigger: [highpop_trigger] - keeping standard job config") - SSnightshift.check_nightshift() + SSnightshift.check_nightshift(TRUE) #ifdef UNIT_TESTS RunUnitTests() diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm index 4a812b40e4e..3efc5b1e094 100644 --- a/code/datums/progressbar.dm +++ b/code/datums/progressbar.dm @@ -14,9 +14,9 @@ EXCEPTION("Invalid target given") if(goal_number) goal = goal_number - bar = image('icons/effects/progessbar.dmi', target, "prog_bar_0", HUD_LAYER) + bar = image('icons/effects/progessbar.dmi', target, "prog_bar_0", ABOVE_HUD_LAYER) bar.alpha = 0 - bar.plane = HUD_PLANE + bar.plane = ABOVE_HUD_PLANE bar.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA user = User if(user) diff --git a/code/game/gamemodes/changeling/powers/epinephrine.dm b/code/game/gamemodes/changeling/powers/epinephrine.dm index ef22de10ce4..6d57f52bd15 100644 --- a/code/game/gamemodes/changeling/powers/epinephrine.dm +++ b/code/game/gamemodes/changeling/powers/epinephrine.dm @@ -16,7 +16,7 @@ else to_chat(user, "Adrenaline rushes through us.") user.SetSleeping(0) - user.stat = 0 + user.WakeUp() user.SetParalysis(0) user.SetStunned(0) user.SetWeakened(0) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index fbb6a0ad3c3..6d695141fc9 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -231,20 +231,23 @@ to destroy them and players will be able to make replacements. build_path = /obj/machinery/vending/boozeomat req_components = list(/obj/item/vending_refill/boozeomat = 1) - var/static/list/vending_names_paths = list( + var/static/list/vending_names_paths = list( // This should really get refactored at some point "Booze-O-Mat" = /obj/machinery/vending/boozeomat, - "Solar's Best Hot Drinks" = /obj/machinery/vending/coffee, + "Hot Drinks machine" = /obj/machinery/vending/coffee, "Getmore Chocolate Corp" = /obj/machinery/vending/snack, "Mr. Chang" = /obj/machinery/vending/chinese, "Robust Softdrinks" = /obj/machinery/vending/cola, - "ShadyCigs Deluxe" = /obj/machinery/vending/cigarette, + "cigarette machine" = /obj/machinery/vending/cigarette, + "ShadyCigs Ultra" = /obj/machinery/vending/cigarette/beach, "Hatlord 9000" = /obj/machinery/vending/hatdispenser, "Suitlord 9000" = /obj/machinery/vending/suitdispenser, "Shoelord 9000" = /obj/machinery/vending/shoedispenser, "AutoDrobe" = /obj/machinery/vending/autodrobe, "ClothesMate" = /obj/machinery/vending/clothing, - "NanoMed Plus" = /obj/machinery/vending/medical, "NanoMed" = /obj/machinery/vending/wallmed, + "Emergency NanoMed" = /obj/machinery/vending/wallmed, + "NanoMed Plus" = /obj/machinery/vending/medical, + "SyndiMed Plus" = /obj/machinery/vending/medical/syndicate_access, "Vendomat" = /obj/machinery/vending/assist, "YouTool" = /obj/machinery/vending/tool, "Engi-Vend" = /obj/machinery/vending/engivend, @@ -270,6 +273,9 @@ to destroy them and players will be able to make replacements. /obj/item/circuitboard/vendor/proc/set_type(type) var/obj/machinery/vending/typepath = vending_names_paths[type] + if(!typepath) + stack_trace("set_type() called with an invalid type variable. type: [type]") + build_path = typepath board_name = "[type] Vendor" format_board_name() diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 5d979ff2044..d40aa3424e0 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1646,7 +1646,7 @@ //don't forget to change the refill size if you change the machine's contents! /obj/machinery/vending/clothing - name = "\improper ClothesMate" //renamed to make the slogan rhyme + name = "\improper ClothesMate" //renamed to make the slogan rhyme desc = "A vending machine for clothing." icon_state = "clothes" slogan_list = list("Dress for success!","Prepare to look swagalicious!","Look at all this free swag!","Why leave style up to fate? Use the ClothesMate!") diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index 0f30d33d7b4..6e1c2ba7c99 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -266,9 +266,10 @@ possessed = TRUE - var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("Do you want to play as the spirit of [user.real_name]'s blade?", ROLE_PAI, FALSE, 10 SECONDS, source = src) + var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("Do you want to play as the spirit of [user.real_name]'s blade?", ROLE_PAI, FALSE, 10 SECONDS, source = src, role_cleanname = "Possessed Blade") var/mob/dead/observer/theghost = null - + if(QDELETED(src)) + return if(length(candidates)) theghost = pick(candidates) var/mob/living/simple_animal/shade/sword/S = new(src) diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 896ed8e5134..398e587145b 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -1,18 +1,15 @@ /obj/structure/sign icon = 'icons/obj/decals.dmi' - anchored = 1 - opacity = 0 - density = 0 - layer = 3.5 + anchored = TRUE + layer = NOT_HIGH_OBJ_LAYER max_integrity = 100 - armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2 /obj/structure/sign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) if(damage_amount) - playsound(src.loc, 'sound/weapons/slash.ogg', 80, TRUE) + playsound(loc, 'sound/weapons/slash.ogg', 80, TRUE) else playsound(loc, 'sound/weapons/tap.ogg', 50, TRUE) if(BURN) @@ -25,50 +22,41 @@ if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return to_chat(user, "You unfasten the sign with [I].") - var/obj/item/sign/S = new(src.loc) + var/obj/item/sign/S = new(get_turf(user)) // This is bad S.name = name S.desc = desc S.icon_state = icon_state - //var/icon/I = icon('icons/obj/decals.dmi', icon_state) - //S.icon = I.Scale(24, 24) - S.sign_state = icon_state qdel(src) /obj/item/sign name = "sign" - desc = "" icon = 'icons/obj/decals.dmi' w_class = WEIGHT_CLASS_NORMAL resistance_flags = FLAMMABLE - var/sign_state = "" -/obj/item/sign/attackby(obj/item/tool as obj, mob/user as mob) //construction - if(istype(tool, /obj/item/screwdriver) && isturf(user.loc)) - var/direction = input("In which direction?", "Select direction.") in list("North", "East", "South", "West", "Cancel") - if(direction == "Cancel") - return - if(QDELETED(src)) - return - var/obj/structure/sign/S = new(user.loc) - switch(direction) - if("North") - S.pixel_y = 32 - if("East") - S.pixel_x = 32 - if("South") - S.pixel_y = -32 - if("West") - S.pixel_x = -32 - else - return - S.name = name - S.desc = desc - S.icon_state = sign_state - to_chat(user, "You fasten \the [S] with your [tool].") - qdel(src) - else - return ..() +/obj/item/sign/screwdriver_act(mob/living/user, obj/item/I) + . = TRUE + var/direction = input("In which direction?", "Select direction.") as null|anything in list("North", "South", "East", "West") + if(!direction || QDELETED(src) || !in_range(src, user)) + return + if(!I.use_tool(src, user, 0, volume = I.tool_volume)) + return + var/obj/structure/sign/S = new(get_turf(src)) // This is also bad + switch(direction) + if("North") + S.pixel_y = 32 + if("South") + S.pixel_y = -32 + if("East") + S.pixel_x = 32 + if("West") + S.pixel_x = -32 + S.name = name + S.desc = desc + S.icon_state = icon_state + to_chat(user, "You fasten [src] with [I].") + qdel(src) /obj/structure/sign/double/map name = "station map" diff --git a/code/modules/awaymissions/mission_code/ruins/oldstation.dm b/code/modules/awaymissions/mission_code/ruins/oldstation.dm index ab1f4ca2603..2b3cdaff80d 100644 --- a/code/modules/awaymissions/mission_code/ruins/oldstation.dm +++ b/code/modules/awaymissions/mission_code/ruins/oldstation.dm @@ -43,7 +43,7 @@ /obj/item/card/id/away/old/apc name = "APC Access ID" desc = "A special ID card that allows access to APC terminals." - icon_state = "centcom_old" + icon_state = "guest_invalid" access = list(ACCESS_ENGINE_EQUIP) /obj/item/storage/backpack/old diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm index 65d820ce43f..4f15e3983e4 100644 --- a/code/modules/events/blob.dm +++ b/code/modules/events/blob.dm @@ -27,6 +27,7 @@ var/mob/living/simple_animal/mouse/blobinfected/B = new(vent.loc) var/mob/M = pick(candidates) B.key = M.key + B.mind.special_role = SPECIAL_ROLE_BLOB SSticker.mode.update_blob_icons_added(B.mind) to_chat(B, "You are now a mouse, infected with blob spores. Find somewhere isolated... before you burst and become the blob! Use ventcrawl (alt-click on vents) to move around.") diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm index f3ea93c80c4..e069fb4e5c8 100644 --- a/code/modules/events/rogue_drones.dm +++ b/code/modules/events/rogue_drones.dm @@ -22,7 +22,7 @@ else if(prob(50)) msg = "Contact has been lost with a combat drone wing operating out of the NSV Icarus. If any are sighted in the area, approach with caution." else - msg = "Unidentified hackers have targetted a combat drone wing deployed from the NSV Icarus. If any are sighted in the area, approach with caution." + msg = "Unidentified hackers have targeted a combat drone wing deployed from the NSV Icarus. If any are sighted in the area, approach with caution." GLOB.event_announcement.Announce(msg, "Rogue drone alert") /datum/event/rogue_drone/tick() diff --git a/code/modules/food_and_drinks/food/foods/candy.dm b/code/modules/food_and_drinks/food/foods/candy.dm index aeab2b52128..730ba91f413 100644 --- a/code/modules/food_and_drinks/food/foods/candy.dm +++ b/code/modules/food_and_drinks/food/foods/candy.dm @@ -132,6 +132,7 @@ filling_color = "#7D5F46" bitesize = 3 junkiness = 25 + antable = FALSE list_reagents = list("nutriment" = 1, "chocolate" = 1) tastes = list("chocolate" = 1) diff --git a/code/modules/food_and_drinks/food/foods/ethnic.dm b/code/modules/food_and_drinks/food/foods/ethnic.dm index 6523b7521e3..469f96d906a 100644 --- a/code/modules/food_and_drinks/food/foods/ethnic.dm +++ b/code/modules/food_and_drinks/food/foods/ethnic.dm @@ -58,6 +58,7 @@ desc = "What is in this anyways?" icon_state = "chinese1" junkiness = 25 + antable = FALSE list_reagents = list("nutriment" = 1, "beans" = 3, "msg" = 4, "sugar" = 2) tastes = list("noodle" = 1, "vegetables" = 1) diff --git a/code/modules/food_and_drinks/food/foods/junkfood.dm b/code/modules/food_and_drinks/food/foods/junkfood.dm index ec17f3c4a5a..7b7a665e0f5 100644 --- a/code/modules/food_and_drinks/food/foods/junkfood.dm +++ b/code/modules/food_and_drinks/food/foods/junkfood.dm @@ -11,6 +11,7 @@ trash = /obj/item/trash/chips filling_color = "#E8C31E" junkiness = 20 + antable = FALSE list_reagents = list("nutriment" = 1, "sodiumchloride" = 1, "sugar" = 3) tastes = list("crisps" = 1) @@ -21,6 +22,7 @@ trash = /obj/item/trash/sosjerky filling_color = "#631212" junkiness = 25 + antable = FALSE list_reagents = list("protein" = 1, "sugar" = 3) tastes = list("chewy beef" = 1) @@ -31,6 +33,7 @@ trash = /obj/item/trash/pistachios filling_color = "#BAD145" junkiness = 20 + antable = FALSE list_reagents = list("plantmatter" = 2, "sodiumchloride" = 1, "sugar" = 4) tastes = list("pistachios" = 1) @@ -41,6 +44,7 @@ trash = /obj/item/trash/raisins filling_color = "#343834" junkiness = 25 + antable = FALSE list_reagents = list("plantmatter" = 2, "sugar" = 4) tastes = list("dried raisins" = 1) @@ -61,6 +65,7 @@ trash = /obj/item/trash/cheesie filling_color = "#FFA305" junkiness = 25 + antable = FALSE list_reagents = list("nutriment" = 1, "fake_cheese" = 2, "sugar" = 3) tastes = list("cheese" = 1, "crisps" = 2) @@ -71,6 +76,7 @@ filling_color = "#FF5D05" trash = /obj/item/trash/syndi_cakes bitesize = 3 + antable = FALSE list_reagents = list("nutriment" = 4, "salglu_solution" = 5) tastes = list("sweetness" = 3, "cake" = 1) @@ -81,6 +87,7 @@ trash = /obj/item/trash/tastybread filling_color = "#A66829" junkiness = 20 + antable = FALSE list_reagents = list("nutriment" = 2, "sugar" = 4) tastes = list("bread" = 1) diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index 4ec135e9e01..740e8b8a103 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -24,6 +24,23 @@ idle_power_usage = 2 active_power_usage = 500 +/obj/machinery/gibber/Initialize(mapload) + . = ..() + overlays += image('icons/obj/kitchen.dmi', "grjam") + component_parts = list() + component_parts += new /obj/item/circuitboard/gibber(null) + component_parts += new /obj/item/stock_parts/matter_bin(null) + component_parts += new /obj/item/stock_parts/manipulator(null) + RefreshParts() + +/obj/machinery/gibber/Destroy() + if(contents.len) + for(var/atom/movable/A in contents) + A.loc = get_turf(src) + if(occupant) + occupant = null + return ..() + /obj/machinery/gibber/suicide_act(mob/user) if(occupant || locked) return FALSE @@ -36,21 +53,6 @@ addtimer(CALLBACK(src, .proc/startgibbing, user), 33) return OBLITERATION -/obj/machinery/gibber/Destroy() - if(contents.len) - for(var/atom/movable/A in contents) - A.loc = get_turf(src) - if(occupant) - occupant = null - return ..() - -/obj/machinery/gibber/RefreshParts() //If you want to make the machine upgradable, this is where you would change any vars basd on its stock parts. - return - -/obj/machinery/gibber/New() - ..() - overlays += image('icons/obj/kitchen.dmi', "grjam") - /obj/machinery/gibber/update_icon() overlays.Cut() diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm index 20b2a4d375a..ca0ab3f4051 100644 --- a/code/modules/mob/dead/observer/orbit.dm +++ b/code/modules/mob/dead/observer/orbit.dm @@ -31,10 +31,6 @@ update_static_data(owner, ui) . = TRUE -/datum/orbit_menu/ui_data(mob/user) - var/list/data = list() - return data - /datum/orbit_menu/ui_static_data(mob/user) var/list/data = list() @@ -96,6 +92,7 @@ ) if(SSticker && SSticker.mode) other_antags += list( + "Blob" = (mind.special_role = SPECIAL_ROLE_BLOB), "Cultist" = (mind in SSticker.mode.cult), "Wizard" = (mind in SSticker.mode.wizards), "Wizard's Apprentice" = (mind in SSticker.mode.apprentices), @@ -121,6 +118,10 @@ var/list/antag_serialized = serialized.Copy() antag_serialized["antag"] = "Terror Spider" antagonists += list(antag_serialized) + else if(istype(M, /mob/living/simple_animal/revenant)) + var/list/antag_serialized = serialized.Copy() + antag_serialized["antag"] = "Revenant" + antagonists += list(antag_serialized) else misc += list(serialized) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 160a9d55288..6b275922345 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -272,6 +272,8 @@ * * target - The mob who is currently on fire */ /mob/living/carbon/proc/pat_out(mob/living/target) + if(target == src) + return // Probably shouldn't be able to pat yourself out. var/self_message = "You try to extinguish [target]!" if(prob(30) && ishuman(src)) // 30% chance of burning your hands var/mob/living/carbon/human/H = src diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index a8a4133310d..348aab228ae 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -170,9 +170,13 @@ if("growl", "growls") var/M = handle_emote_param(param) - message = "[src] growls[M ? " at [M]" : ""]." - playsound(loc, "growls", 80, 1, frequency = get_age_pitch()) - m_type = 2 + if(miming) + message = "[src] acts out a growl[M ? " at [M]" : ""]!" + m_type = 1 + else + message = "[src] growls[M ? " at [M]" : ""]!" + playsound(loc, "growls", 80, 1, frequency = get_age_pitch()) + m_type = 2 if("ping", "pings") var/M = handle_emote_param(param) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 8276d06f126..3ac0ef0f64d 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -13,6 +13,7 @@ return 0 /mob/proc/get_screen_colour() + return /mob/proc/update_client_colour(time = 10) //Update the mob's client.color with an animation the specified time in length. if(!client) //No client_colour without client. If the player logs back in they'll be back through here anyway. diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 21c0f648a3b..1c8e886e736 100755 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -97,12 +97,10 @@ A.emp_act(severity) /obj/item/smallDelivery/attack_self(mob/user as mob) - if(wrapped && wrapped.loc) //sometimes items can disappear. For example, bombs. --rastaf0 - wrapped.loc = user.loc + if(wrapped?.loc == src) //sometimes items can disappear. For example, bombs. --rastaf0 + wrapped.forceMove(get_turf(src)) if(ishuman(user)) user.put_in_hands(wrapped) - else - wrapped.loc = get_turf(src) playsound(src.loc, 'sound/items/poster_ripped.ogg', 50, 1) qdel(src) @@ -163,6 +161,8 @@ if(is_type_in_list(target, no_wrap)) return + if(is_type_in_list(A.loc, list(/obj/item/smallDelivery, /obj/structure/bigDelivery))) + return if(target.anchored) return if(target in user) diff --git a/icons/mob/clothing/species/drask/gloves1.dmi b/icons/mob/clothing/species/drask/gloves1.dmi deleted file mode 100644 index 70423488ef5..00000000000 Binary files a/icons/mob/clothing/species/drask/gloves1.dmi and /dev/null differ diff --git a/icons/mob/clothing/species/drask/uniform.dmi b/icons/mob/clothing/species/drask/uniform.dmi index 25cfb51013c..82281f52c84 100644 Binary files a/icons/mob/clothing/species/drask/uniform.dmi and b/icons/mob/clothing/species/drask/uniform.dmi differ diff --git a/icons/mob/inhands/guns_righthand.dmi b/icons/mob/inhands/guns_righthand.dmi index 2c541898b08..32c27e7d57d 100644 Binary files a/icons/mob/inhands/guns_righthand.dmi and b/icons/mob/inhands/guns_righthand.dmi differ