diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm
index c569a2c59a..41f2c7142f 100644
--- a/code/modules/mob/living/blood.dm
+++ b/code/modules/mob/living/blood.dm
@@ -237,7 +237,7 @@
return /datum/reagent/blood/jellyblood
if(dna?.species?.exotic_blood)
return dna.species.exotic_blood
- else if((NOBLOOD in dna.species.species_traits) || (HAS_TRAIT(src, TRAIT_NOCLONE)))
+ else if((dna && (NOBLOOD in dna.species.species_traits)) || HAS_TRAIT(src, TRAIT_NOCLONE))
return
else
return /datum/reagent/blood
diff --git a/code/modules/projectiles/guns/energy/dueling.dm b/code/modules/projectiles/guns/energy/dueling.dm
index 2f0aa00027..fcb035f586 100644
--- a/code/modules/projectiles/guns/energy/dueling.dm
+++ b/code/modules/projectiles/guns/energy/dueling.dm
@@ -28,6 +28,16 @@
/datum/duel/New()
id = next_id++
+/datum/duel/Destroy()
+ if(gun_A)
+ gun_A.duel = null
+ gun_A = null
+ if(gun_B)
+ gun_B.duel = null
+ gun_B = null
+ STOP_PROCESSING(SSobjs, duel)
+ . = ..()
+
/datum/duel/proc/try_begin()
//Check if both guns are held and if so begin.
var/mob/living/A = get_duelist(gun_A)
@@ -45,13 +55,13 @@
message_duelists("Set your gun setting and move [required_distance] steps away from your opponent.")
- START_PROCESSING(SSobj,src)
+ START_PROCESSING(SSobj, src)
-/datum/duel/proc/get_duelist(obj/gun)
- var/mob/living/G = gun.loc
- if(!istype(G) || !G.is_holding(gun))
- return null
- return G
+/datum/duel/proc/get_duelist(obj/item/gun/energy/dueling/G)
+ var/mob/living/L = gun.loc
+ if(!istype(L) || !L.is_holding(G))
+ return
+ return L
/datum/duel/proc/message_duelists(message)
var/mob/living/LA = get_duelist(gun_A)
@@ -66,7 +76,7 @@
/datum/duel/proc/end()
message_duelists("Duel finished. Re-engaging safety.")
- STOP_PROCESSING(SSobj,src)
+ STOP_PROCESSING(SSobj, src)
state = DUEL_IDLE
/datum/duel/process()
@@ -129,10 +139,11 @@
return FALSE
if(!isturf(A.loc) || !isturf(B.loc))
return FALSE
- if(get_dist(A,B) != required_distance)
+ if(get_dist(A, B) != required_distance)
return FALSE
- for(var/turf/T in getline(get_turf(A),get_turf(B)))
- if(is_blocked_turf(T,TRUE))
+ for(var/i in getline(A.loc, B.loc))
+ var/turf/T = i
+ if(is_blocked_turf(T, TRUE))
return FALSE
return TRUE
@@ -180,7 +191,6 @@
return "duel_red"
/obj/item/gun/energy/dueling/attack_self(mob/living/user)
- . = ..()
if(duel.state == DUEL_IDLE)
duel.try_begin()
else
@@ -205,12 +215,9 @@
add_overlay(setting_overlay)
/obj/item/gun/energy/dueling/Destroy()
- . = ..()
- if(duel.gun_A == src)
- duel.gun_A = null
- if(duel.gun_B == src)
- duel.gun_B = null
- duel = null
+ if(duel)
+ qdel(duel)
+ return ..()
/obj/item/gun/energy/dueling/can_trigger_gun(mob/living/user)
. = ..()
@@ -234,10 +241,8 @@
if(duel.state == DUEL_READY)
duel.confirmations[src] = TRUE
to_chat(user,"You confirm your readiness.")
- return
else if(!is_duelist(target)) //I kinda want to leave this out just to see someone shoot a bystander or missing.
to_chat(user,"[src] safety system prevents shooting anyone but your designated opponent.")
- return
else
duel.fired[src] = TRUE
. = ..()
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index 2d177318aa..2974df29a6 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -356,7 +356,6 @@
replace_beaker(user, B)
to_chat(user, "You add [B] to [src].")
updateUsrDialog()
- update_icon()
else if(user.a_intent != INTENT_HARM && !istype(I, /obj/item/card/emag))
to_chat(user, "You can't load [I] into [src]!")
return ..()