diff --git a/code/datums/uplink/uplink_categories.dm b/code/datums/uplink/uplink_categories.dm
index bdbc9d5f1d4..6817b7464bb 100644
--- a/code/datums/uplink/uplink_categories.dm
+++ b/code/datums/uplink/uplink_categories.dm
@@ -17,7 +17,7 @@
if(item.can_view(U))
return 1
- if(!antag_roles.len)
+ if(!LAZYLEN(antag_roles))
return 1
return 0
diff --git a/code/modules/integrated_electronics/core/helpers.dm b/code/modules/integrated_electronics/core/helpers.dm
index e221d0c656f..35f7c60374b 100644
--- a/code/modules/integrated_electronics/core/helpers.dm
+++ b/code/modules/integrated_electronics/core/helpers.dm
@@ -40,8 +40,6 @@
A.push_data()
/datum/integrated_io/proc/get_data()
- if(isnull(data))
- return
if(isweakref(data))
return data.resolve()
return data
diff --git a/code/modules/integrated_electronics/subtypes/logic.dm b/code/modules/integrated_electronics/subtypes/logic.dm
index 8bf55649ec5..60edfa66859 100644
--- a/code/modules/integrated_electronics/subtypes/logic.dm
+++ b/code/modules/integrated_electronics/subtypes/logic.dm
@@ -1,7 +1,7 @@
/obj/item/integrated_circuit/logic
name = "logic gate"
desc = "This tiny chip will decide for you!"
- extended_desc = "Logic circuits will treat a null, 0, and a \"\" string value as FALSE and anything else as TRUE."
+ extended_desc = "Logic circuits will treat a null, 0, and a \"\" string value as FALSE and anything else as TRUE. If inputs are of mismatching type, expect undocumented behaviour."
complexity = 3
outputs = list("result" = IC_PINTYPE_BOOLEAN)
activators = list("compare" = IC_PINTYPE_PULSE_IN)
@@ -22,7 +22,11 @@
/obj/item/integrated_circuit/logic/binary/do_work()
var/data1 = get_pin_data(IC_INPUT, 1)
var/data2 = get_pin_data(IC_INPUT, 2)
- var/result = !!do_compare(data1, data2)
+
+ var/result = FALSE
+ if (comparable(data1, data2))
+ result = !!do_compare(data1, data2)
+
set_pin_data(IC_OUTPUT, 1, result)
push_data()
@@ -34,6 +38,18 @@
/obj/item/integrated_circuit/logic/binary/proc/do_compare(A, B)
return FALSE
+/obj/item/integrated_circuit/logic/binary/proc/comparable(A, B)
+ if (isnum(A) && isnum(B))
+ . = TRUE
+ else if (istext(A) && istext(B))
+ . = TRUE
+ else if (islist(A) && islist(B))
+ . = TRUE
+ else if (isdatum(A) && isdatum(B))
+ . = TRUE
+ else
+ . = FALSE
+
/obj/item/integrated_circuit/logic/unary
inputs = list(
"A" = IC_PINTYPE_ANY
diff --git a/code/modules/mob/living/bot/cleanbot.dm b/code/modules/mob/living/bot/cleanbot.dm
index 5ecae44b822..7b358cbed0b 100644
--- a/code/modules/mob/living/bot/cleanbot.dm
+++ b/code/modules/mob/living/bot/cleanbot.dm
@@ -291,7 +291,7 @@ var/list/cleanbot_types // Going to use this to generate a list of types once th
get_targets()
if("patrol")
should_patrol = !should_patrol
- patrol_path = null
+ patrol_path = list()
if("freq")
var/freq = text2num(input("Select frequency for navigation beacons", "Frequnecy", num2text(beacon_freq / 10))) * 10
if (freq > 0)
diff --git a/code/modules/organs/subtypes/parasite.dm b/code/modules/organs/subtypes/parasite.dm
index eebe0dae190..4eb1a32964c 100644
--- a/code/modules/organs/subtypes/parasite.dm
+++ b/code/modules/organs/subtypes/parasite.dm
@@ -48,6 +48,9 @@
/obj/item/organ/parasite/kois/process()
..()
+ if (!owner)
+ return
+
if(prob(10) && !(owner.species.flags & NO_PAIN))
owner << "You feel a stinging pain in your abdomen!"
owner.emote("me",1,"winces slightly.")
diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm
index 4b60296d329..586e4fc006e 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_control.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm
@@ -94,7 +94,7 @@
if(href_list["togglep"])
if(!wires.IsIndexCut(PARTICLE_TOGGLE_WIRE))
- src.toggle_power()
+ src.toggle_power(usr)
else if(href_list["scan"])
src.part_scan()
@@ -212,11 +212,11 @@
return 0
-/obj/machinery/particle_accelerator/control_box/proc/toggle_power()
+/obj/machinery/particle_accelerator/control_box/proc/toggle_power(mob/user)
src.active = !src.active
- investigate_log("turned [active?"ON":"OFF"] by [usr ? usr.key : "outside forces"]","singulo")
- message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [key_name(usr, usr.client)](?) in ([x],[y],[z] - JMP)",0,1)
- log_game("PA Control Computer turned [active ?"ON":"OFF"] by [usr.ckey]([usr]) in ([x],[y],[z])",ckey=key_name(usr))
+ investigate_log("turned [active?"ON":"OFF"] by [user ? user.key : "outside forces"]","singulo")
+ message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [key_name(user, TRUE, highlight_special = TRUE)] in ([x],[y],[z] - JMP)",0,1)
+ log_game("PA Control Computer turned [active ?"ON":"OFF"] by [key_name(user)] in ([x],[y],[z])",ckey=key_name(user))
if(src.active)
update_use_power(2)
for(var/obj/structure/particle_accelerator/part in connected_parts)
diff --git a/code/modules/projectiles/targeting/targeting_triggers.dm b/code/modules/projectiles/targeting/targeting_triggers.dm
index 8435dc6d0a5..4c165ea658e 100644
--- a/code/modules/projectiles/targeting/targeting_triggers.dm
+++ b/code/modules/projectiles/targeting/targeting_triggers.dm
@@ -10,7 +10,7 @@
/obj/aiming_overlay/proc/trigger(var/perm)
- if((user.client.prefs.toggles_secondary & SAFETY_CHECK) && user.a_intent != I_HURT) //Check this first to save time.
+ if(user && user.client && (user.client.prefs.toggles_secondary & SAFETY_CHECK) && user.a_intent != I_HURT) //Check this first to save time.
user << "You refrain from firing, as you aren't on harm intent."
return
if(!owner || !aiming_with || !aiming_at || !locked)
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index 9e78dca6812..290fdda4810 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -33,17 +33,16 @@
reagents.add_reagent("nutriment",nutriment_amt,nutriment_desc)
/obj/item/weapon/reagent_containers/food/snacks/proc/On_Consume(var/mob/M)
- if(!usr) usr = M
if(!reagents.total_volume)
M.visible_message("[M] finishes eating \the [src].","You finish eating \the [src].")
- usr.drop_from_inventory(src) //so icons update :[
+ M.drop_from_inventory(src) //so icons update :[
if(trash)
if(ispath(trash,/obj/item))
- var/obj/item/TrashItem = new trash(usr)
- usr.put_in_hands(TrashItem)
+ var/obj/item/TrashItem = new trash(M)
+ M.put_in_hands(TrashItem)
else if(istype(trash,/obj/item))
- usr.put_in_hands(trash)
+ M.put_in_hands(trash)
qdel(src)
return
@@ -390,7 +389,9 @@
if(!src && !user.client)
user.custom_emote(1,"[pick("burps", "cries for more", "burps twice", "looks at the area where the food was")]")
qdel(src)
- On_Consume(user)
+
+ if (reagents)
+ On_Consume(user)
//////////////////////////////////////////////////
////////////////////////////////////////////Snacks
@@ -4874,4 +4875,4 @@
bitesize = 5
center_of_mass = list("x"=16, "y"=16)
nutriment_desc = list("regret" = 6)
- nutriment_amt = 6
\ No newline at end of file
+ nutriment_amt = 6
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 6d1c46d9fb2..6d1df1fe9f0 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -166,6 +166,9 @@
explode()
/obj/structure/reagent_dispensers/fueltank/proc/explode()
+ if (QDELETED(src))
+ return
+
if (reagents.total_volume > 500)
explosion(src.loc,1,2,4)
else if (reagents.total_volume > 100)
diff --git a/code/modules/shieldgen/sheldwallgen.dm b/code/modules/shieldgen/sheldwallgen.dm
index d5f2cb7731a..1f09d92ca4f 100644
--- a/code/modules/shieldgen/sheldwallgen.dm
+++ b/code/modules/shieldgen/sheldwallgen.dm
@@ -58,6 +58,9 @@
power = 0
return 0
var/turf/T = src.loc
+ if (!istype(T))
+ power = 0
+ return 0
var/obj/structure/cable/C = T.get_cable_node()
var/datum/powernet/PN
@@ -106,7 +109,7 @@
"You hear heavy droning fade out")
icon_state = "Shield_Gen"
src.active = 0
- for(var/dir in list(1,2,4,8))
+ for(var/dir in list(1,2,4,8))
cleanup(dir)
/obj/machinery/shieldwallgen/proc/setup_field(var/NSEW = 0)
diff --git a/code/modules/shieldgen/shield_capacitor.dm b/code/modules/shieldgen/shield_capacitor.dm
index bde7ecd1e64..76bb28e1df0 100644
--- a/code/modules/shieldgen/shield_capacitor.dm
+++ b/code/modules/shieldgen/shield_capacitor.dm
@@ -28,7 +28,7 @@
if(get_dir(src, possible_gen) == src.dir)
possible_gen.owned_capacitor = src
break
-
+
/obj/machinery/shield_capacitor/emag_act(var/remaining_charges, var/mob/user)
if(prob(75))
src.locked = !src.locked
@@ -106,7 +106,13 @@
//see if we can connect to a power net.
var/datum/powernet/PN
var/turf/T = src.loc
+
+ if (!istype(T))
+ active = 0
+ return
+
var/obj/structure/cable/C = T.get_cable_node()
+
if (C)
PN = C.powernet