diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index 33e8dae8d6..844ce6ef00 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -280,7 +280,7 @@
user.listed_turf = null
else
user.listed_turf = T
- user.client.statpanel = T.name
+ user.client.statpanel = "Turf"
return
/mob/proc/TurfAdjacent(var/turf/T)
diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm
index 93c2fd57bb..02d85234ed 100644
--- a/code/game/objects/buckling.dm
+++ b/code/game/objects/buckling.dm
@@ -56,7 +56,8 @@
user << "You can't buckle anyone in before the game starts."
if(!user.Adjacent(M) || user.restrained() || user.lying || user.stat || istype(user, /mob/living/silicon/pai))
return
-
+ if(M == buckled_mob)
+ return
if(istype(M, /mob/living/carbon/slime))
user << "The [M] is too squishy to buckle in."
return
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index f7fa46678b..f360133593 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -320,7 +320,7 @@
qdel(src)
/obj/item/device/paicard/see_emote(mob/living/M, text)
- if(pai && pai.client)
+ if(pai && pai.client && !pai.canmove)
var/rendered = "[text]"
pai.show_message(rendered, 2)
..()
diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm
index 6b9cfa7132..6d0504a195 100644
--- a/code/game/objects/items/weapons/material/kitchen.dm
+++ b/code/game/objects/items/weapons/material/kitchen.dm
@@ -47,7 +47,8 @@
overlays.Cut()
return
else
- ..()
+ user << "You don't have anything on \the [src]." //if we have help intent and no food scooped up DON'T STAB OURSELVES WITH THE FORK GODDAMNIT
+ return
/obj/item/weapon/material/kitchen/utensil/fork
name = "fork"
@@ -80,14 +81,14 @@
/obj/item/weapon/material/kitchen/utensil/knife/attack(target as mob, mob/living/user as mob)
if ((CLUMSY in user.mutations) && prob(50))
- user << "You accidentally cut yourself with the [src]."
+ user << "You accidentally cut yourself with \the [src]."
user.take_organ_damage(20)
return
return ..()
/obj/item/weapon/material/kitchen/utensil/knife/attack(target as mob, mob/living/user as mob)
if ((CLUMSY in user.mutations) && prob(50))
- user << "You somehow managed to cut yourself with the [src]."
+ user << "You somehow managed to cut yourself with \the [src]."
user.take_organ_damage(20)
return
return ..()
@@ -110,7 +111,7 @@
/obj/item/weapon/material/kitchen/rollingpin/attack(mob/living/M as mob, mob/living/user as mob)
if ((CLUMSY in user.mutations) && prob(50))
- user << "The [src] slips out of your hand and hits your head."
+ user << "\The [src] slips out of your hand and hits your head."
user.take_organ_damage(10)
user.Paralyse(2)
return
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 1f25043e89..df25ef150c 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -73,7 +73,7 @@
return ..()
/obj/structure/proc/can_climb(var/mob/living/user, post_climb_check=0)
- if (!can_touch(user) || !climbable || (!post_climb_check && (user in climbers)))
+ if (!climbable || !can_touch(user) || (!post_climb_check && (user in climbers)))
return 0
if (!user.Adjacent(src))
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 5c65b7f2e5..42edef4c56 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -136,7 +136,7 @@
return 1
if(is_full_window())
return 0 //full tile window, you can't move into it!
- if(get_dir(loc, target) == dir)
+ if(get_dir(loc, target) & dir)
return !density
else
return 1
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 6bd0da514e..85d1619dcd 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -160,7 +160,6 @@ var/list/ai_verbs_default = list(
spawn(5)
new /obj/machinery/ai_powersupply(src)
-
hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[LIFE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
@@ -202,8 +201,23 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/Destroy()
ai_list -= src
+
qdel(eyeobj)
- ..()
+ eyeobj = null
+
+ qdel(psupply)
+ psupply = null
+
+ qdel(aiMulti)
+ aiMulti = null
+
+ qdel(aiRadio)
+ aiRadio = null
+
+ qdel(aiCamera)
+ aiCamera = null
+
+ return ..()
/mob/living/silicon/ai/proc/setup_icon()
var/file = file2text("config/custom_sprites.txt")
@@ -258,20 +272,22 @@ var/list/ai_verbs_default = list(
/obj/machinery/ai_powersupply/New(var/mob/living/silicon/ai/ai=null)
powered_ai = ai
powered_ai.psupply = src
- if(isnull(powered_ai))
- qdel(src)
-
- loc = powered_ai.loc
- use_power(1) // Just incase we need to wake up the power system.
+ forceMove(powered_ai.loc)
..()
+ use_power(1) // Just incase we need to wake up the power system.
+
+/obj/machinery/ai_powersupply/Destroy()
+ . = ..()
+ powered_ai = null
/obj/machinery/ai_powersupply/process()
- if(!powered_ai || powered_ai.stat & DEAD)
- qdel()
+ if(!powered_ai || powered_ai.stat == DEAD)
+ qdel(src)
return
if(powered_ai.psupply != src) // For some reason, the AI has different powersupply object. Delete this one, it's no longer needed.
qdel(src)
+ return
if(powered_ai.APU_power)
use_power = 0
return
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index a82f528fcb..28d6093500 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -674,17 +674,17 @@
if(!TurfAdjacent(listed_turf))
listed_turf = null
else
- statpanel(listed_turf.name, null, listed_turf)
- for(var/atom/A in listed_turf)
- if(!A.mouse_opacity)
- continue
- if(A.invisibility > see_invisible)
- continue
- if(is_type_in_list(A, shouldnt_see))
- continue
- statpanel(listed_turf.name, null, A)
+ if(statpanel("Turf"))
+ stat("\icon[listed_turf]", listed_turf.name)
+ for(var/atom/A in listed_turf)
+ if(!A.mouse_opacity)
+ continue
+ if(A.invisibility > see_invisible)
+ continue
+ if(is_type_in_list(A, shouldnt_see))
+ continue
+ stat(A)
- sleep(4) //Prevent updating the stat panel for the next .4 seconds, prevents clientside latency from updates
// facing verbs
/mob/proc/canface()
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 9f4905540b..4595e1f136 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -171,7 +171,9 @@
qdel(src)
/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume)
- if(temperature > T0C+500)
+ if (modded)
+ explode()
+ else if (temperature > T0C+500)
explode()
return ..()
diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm
index 624f9f11b5..8abf95bf98 100644
--- a/code/modules/supermatter/supermatter.dm
+++ b/code/modules/supermatter/supermatter.dm
@@ -348,6 +348,8 @@
/obj/machinery/power/supermatter/Bumped(atom/AM as mob|obj)
+ if(istype(AM, /obj/effect))
+ return
if(istype(AM, /mob/living))
AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... \his body starts to glow and catch flame before flashing into ash.",\
"You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\