diff --git a/code/_onclick/drag_drop.dm b/code/_onclick/drag_drop.dm index 42a0574f4d..65974fe009 100644 --- a/code/_onclick/drag_drop.dm +++ b/code/_onclick/drag_drop.dm @@ -5,6 +5,16 @@ recieving object instead, so that's the default action. This allows you to drag almost anything into a trash can. */ + +/atom/proc/CanMouseDrop(atom/over, var/mob/user = usr) + if(!user || !over) + return FALSE + if(user.incapacitated()) + return FALSE + if(!src.Adjacent(user) || !over.Adjacent(user)) + return FALSE // should stop you from dragging through windows + return TRUE + /atom/MouseDrop(atom/over) if(!usr || !over) return if(!Adjacent(usr) || !over.Adjacent(usr)) return // should stop you from dragging through windows diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 1c3d957b98..1a1bd9a463 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -181,7 +181,7 @@ use_power(7500) //This might need tweaking. return - else if((occupant.health >= heal_level) && (!eject_wait)) + else if((occupant.health >= heal_level || occupant.health == occupant.maxHealth) && (!eject_wait)) playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) audible_message("\The [src] signals that the cloning process is complete.") connected_message("Cloning Process Complete.") diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index cf96260358..f245682861 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -115,7 +115,7 @@ user << "You can't fit \the [W] inside." return - else if(istype(W, /obj/item/clothing)) + else if(istype(W, /obj/item/clothing) || istype(W, /obj/item/weapon/bedsheet)) if(washing.len < 5) if(state in list(1, 3)) user.drop_item() diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm index 018be58705..5df911cba8 100644 --- a/code/game/objects/items/devices/communicator/communicator.dm +++ b/code/game/objects/items/devices/communicator/communicator.dm @@ -261,7 +261,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() // Proc: ui_interact() // Parameters: 4 (standard NanoUI arguments) // Description: Uses a bunch of for loops to turn lists into lists of lists, so they can be displayed in nanoUI, then displays various buttons to the user. -/obj/item/device/communicator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/item/device/communicator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/key_state = null) // this is the data which will be sent to the ui var/data[0] //General nanoUI information var/communicators[0] //List of communicators @@ -356,7 +356,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() if(!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "communicator.tmpl", "Communicator", 475, 700) + ui = new(user, src, ui_key, "communicator.tmpl", "Communicator", 475, 700, state = key_state) // when the ui is first opened this is the data it will use ui.set_initial_data(data) // open the new ui window diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 809dd008a4..4c36a7ac15 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -472,6 +472,11 @@ if (constructed) state = 0 +/obj/structure/window/reinforced/full + dir = 5 + icon_state = "fwindow" + maxhealth = 60 + /obj/structure/window/reinforced/tinted name = "tinted window" desc = "It looks rather strong and opaque. Might take a few good hits to shatter it." diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm index b2e7836334..bd4fdca814 100644 --- a/code/game/turfs/unsimulated/floor.dm +++ b/code/game/turfs/unsimulated/floor.dm @@ -7,3 +7,6 @@ name = "mask" icon = 'icons/turf/walls.dmi' icon_state = "rockvault" + +/turf/unsimulated/floor/shuttle_ceiling + icon_state = "reinforced" \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index cb8c2ac767..615a3ecf53 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -21,7 +21,7 @@ var/cloaked = 0 // 0 for normal, 1 for cloaked close - if(mind.changeling && mind.changeling.cloaked && !istype(user, /mob/observer)) + if(mind && mind.changeling && mind.changeling.cloaked && !istype(user, /mob/observer)) var/distance = get_dist(user, src) if(distance > 2) src.loc.examine(user) @@ -472,7 +472,7 @@ /mob/living/carbon/human/get_description_fluff() - if(mind.changeling && mind.changeling.cloaked) + if(mind && mind.changeling && mind.changeling.cloaked) return "" else return ..() diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 09921cf58b..1f4f8ec756 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -162,7 +162,7 @@ active_power_usage = 20 power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list var/on = 0 // 1 if on, 0 if off - var/brightness_range = 10 // luminosity when on, also used in power calculation + var/brightness_range = 6 // luminosity when on, also used in power calculation var/brightness_power = 3 var/brightness_color = null var/status = LIGHT_OK // LIGHT_OK, _EMPTY, _BURNED or _BROKEN @@ -180,7 +180,7 @@ icon_state = "bulb1" base_state = "bulb" fitting = "bulb" - brightness_range = 6 + brightness_range = 4 brightness_power = 2 brightness_color = "#FFF4E5" desc = "A small lighting fixture." @@ -199,7 +199,7 @@ var/lamp_shade = 1 /obj/machinery/light/small/emergency - brightness_range = 6 + brightness_range = 4 brightness_power = 2 brightness_color = "#da0205" diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 49d251d311..e84a963446 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -227,7 +227,7 @@ src.add_fingerprint(user) if(bottle) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 20)) + if(do_after(user, 20) && bottle) user << "You unfasten the jug." var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = new /obj/item/weapon/reagent_containers/glass/cooler_bottle( src.loc ) for(var/datum/reagent/R in reagents.reagent_list) @@ -262,7 +262,7 @@ if(!bottle && !cupholder) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) user << "You start taking the water-cooler apart." - if(do_after(user, 20)) + if(do_after(user, 20) && !bottle && !cupholder) user << "You take the water-cooler apart." new /obj/item/stack/material/plastic( src.loc, 4 ) qdel(src) @@ -274,7 +274,7 @@ if(anchored) var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = I user << "You start to screw the bottle onto the water-cooler." - if(do_after(user, 20)) + if(do_after(user, 20) && !bottle && anchored) bottle = 1 update_icon() user << "You screw the bottle onto the water-cooler!" @@ -286,7 +286,7 @@ user << "You need to wrench down the cooler first." else user << "There is already a bottle there!" - return + return 1 if(istype(I, /obj/item/stack/material/plastic)) if(!cupholder) @@ -295,7 +295,7 @@ src.add_fingerprint(user) user << "You start to attach a cup dispenser onto the water-cooler." playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 20)) + if(do_after(user, 20) && !cupholder && anchored) if (P.use(1)) user << "You attach a cup dispenser onto the water-cooler." cupholder = 1 diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 3e49482c75..48aca377ee 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -13,22 +13,22 @@ return affected && affected.open == (affected.encased ? 3 : 2) && !(affected.status & ORGAN_BLEEDING) proc/get_max_wclass(var/obj/item/organ/external/affected) - switch (affected.name) - if ("head") - return 1 - if ("upper body") - return 3 - if ("lower body") - return 2 + switch (affected.organ_tag) + if (BP_HEAD) + return ITEMSIZE_TINY + if (BP_TORSO) + return ITEMSIZE_NORMAL + if (BP_GROIN) + return ITEMSIZE_SMALL return 0 proc/get_cavity(var/obj/item/organ/external/affected) - switch (affected.name) - if ("head") + switch (affected.organ_tag) + if (BP_HEAD) return "cranial" - if ("upper body") + if (BP_TORSO) return "thoracic" - if ("lower body") + if (BP_GROIN) return "abdominal" return "" diff --git a/code/modules/xenoarcheaology/anomaly_container.dm b/code/modules/xenoarcheaology/anomaly_container.dm new file mode 100644 index 0000000000..616b04b10d --- /dev/null +++ b/code/modules/xenoarcheaology/anomaly_container.dm @@ -0,0 +1,43 @@ +/obj/structure/anomaly_container + name = "anomaly container" + desc = "Used to safely contain and move anomalies." + icon = 'icons/obj/xenoarchaeology.dmi' + icon_state = "anomaly_container" + density = 1 + + var/obj/machinery/artifact/contained + +/obj/structure/anomaly_container/initialize() + ..() + + var/obj/machinery/artifact/A = locate() in loc + if(A) + contain(A) + +/obj/structure/anomaly_container/attack_hand(var/mob/user) + release() + +/obj/structure/anomaly_container/attack_robot(var/mob/user) + if(Adjacent(user)) + release() + +/obj/structure/anomaly_container/proc/contain(var/obj/machinery/artifact/artifact) + if(contained) + return + contained = artifact + artifact.forceMove(src) + underlays += image(artifact) + desc = "Used to safely contain and move anomalies. \The [contained] is kept inside." + +/obj/structure/anomaly_container/proc/release() + if(!contained) + return + contained.dropInto(src) + contained = null + underlays.Cut() + desc = initial(desc) + +/obj/machinery/artifact/MouseDrop(var/obj/structure/anomaly_container/over_object) + if(istype(over_object) && Adjacent(over_object) && CanMouseDrop(over_object, usr)) + Bumped(usr) + over_object.contain(src) \ No newline at end of file diff --git a/html/changelogs/Leshana-smol-fixes.yml b/html/changelogs/Leshana-smol-fixes.yml new file mode 100644 index 0000000000..9d972dec1a --- /dev/null +++ b/html/changelogs/Leshana-smol-fixes.yml @@ -0,0 +1,4 @@ +author: Leshana +delete-after: True +changes: + - bugfix: "Bedsheets can be put into washing machines again." diff --git a/icons/obj/xenoarchaeology.dmi b/icons/obj/xenoarchaeology.dmi index a074f17c3f..24ebc6ef6c 100644 Binary files a/icons/obj/xenoarchaeology.dmi and b/icons/obj/xenoarchaeology.dmi differ diff --git a/nano/templates/communicator.tmpl b/nano/templates/communicator.tmpl index 58b86a30d7..6157f45d61 100644 --- a/nano/templates/communicator.tmpl +++ b/nano/templates/communicator.tmpl @@ -152,7 +152,10 @@ Used In File(s): code\game\objects\items\devices\communicator\communicator.dm {{:value.name}}
-
{{:value.address}}
{{:helper.link('Copy', 'pencil', {'copy' : value.address, 'switch_tab' : 2})}} +
{{:value.address}}
+ {{:helper.link('Copy', 'pencil', {'copy' : value.address, 'switch_tab' : 2})}} + {{:helper.link('Call', 'phone', {'dial' : value.address, 'copy' : value.address, 'switch_tab' : 2})}} + {{:helper.link('Msg', 'mail-closed', {'copy' : value.address, 'copy_name' : value.name, 'switch_tab' : 40})}}
{{/for}} diff --git a/nano/templates/guest_pass.tmpl b/nano/templates/guest_pass.tmpl index 80525f5331..821ba0a474 100644 --- a/nano/templates/guest_pass.tmpl +++ b/nano/templates/guest_pass.tmpl @@ -19,7 +19,7 @@ {{else}}

Guest pass terminal #{{:data.uid}}

- {{:helper.link('View activity log', 'list', {'mode' : 1})}} {{:helper.link('Issure Pass', 'eject', {'action' : 'issue'})}} + {{:helper.link('View activity log', 'list', {'mode' : 1})}} {{:helper.link('Issue Pass', 'eject', {'action' : 'issue'})}}

diff --git a/polaris.dme b/polaris.dme index 942ada13d4..fc2c4fef68 100644 --- a/polaris.dme +++ b/polaris.dme @@ -2129,6 +2129,7 @@ #include "code\modules\virus2\helpers.dm" #include "code\modules\virus2\isolator.dm" #include "code\modules\virus2\items_devices.dm" +#include "code\modules\xenoarcheaology\anomaly_container.dm" #include "code\modules\xenoarcheaology\boulder.dm" #include "code\modules\xenoarcheaology\effect.dm" #include "code\modules\xenoarcheaology\manuals.dm"