diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index 27e47098f3c..e960e706435 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -18,6 +18,10 @@ var/list/devillaws = list() var/id = DEFAULT_AI_LAWID +/datum/ai_laws/Destroy() + owner = null + return ..() + /datum/ai_laws/proc/lawid_to_type(lawid) var/all_ai_laws = subtypesof(/datum/ai_laws) for(var/al in all_ai_laws) diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index a9cd245d34c..3219e4834af 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -25,16 +25,13 @@ update_icon() if(A == brain) brain = null - . = ..() + return ..() /obj/structure/ai_core/Destroy() - if(circuit) - qdel(circuit) - circuit = null - if(brain) - qdel(brain) - brain = null + QDEL_NULL(circuit) + QDEL_NULL(brain) + QDEL_NULL(laws) return ..() /obj/structure/ai_core/deactivated diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index 2f0ea04750b..6473a2c1509 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -14,6 +14,23 @@ var/force_replace_ai_name = FALSE var/overrides_aicore_laws = FALSE // Whether the laws on the MMI, if any, override possible pre-existing laws loaded on the AI core. +/obj/item/mmi/Initialize() + . = ..() + radio = new(src) //Spawns a radio inside the MMI. + radio.broadcasting = FALSE //researching radio mmis turned the robofabs into radios because this didnt start as 0. + laws.set_laws_config() + +/obj/item/mmi/Destroy() + if(iscyborg(loc)) + var/mob/living/silicon/robot/borg = loc + borg.mmi = null + mecha = null + QDEL_NULL(brainmob) + QDEL_NULL(brain) + QDEL_NULL(radio) + QDEL_NULL(laws) + return ..() + /obj/item/mmi/update_icon_state() if(!brain) icon_state = "mmi_off" @@ -32,12 +49,6 @@ else if(brain) . += "mmi_dead" -/obj/item/mmi/Initialize() - . = ..() - radio = new(src) //Spawns a radio inside the MMI. - radio.broadcasting = FALSE //researching radio mmis turned the robofabs into radios because this didnt start as 0. - laws.set_laws_config() - /obj/item/mmi/attackby(obj/item/O, mob/user, params) user.changeNext_move(CLICK_CD_MELEE) if(istype(O, /obj/item/organ/brain)) //Time to stick a brain in it --NEO @@ -184,23 +195,6 @@ brainmob.emp_damage = min(brainmob.emp_damage + rand(0,10), 30) brainmob.emote("alarm") -/obj/item/mmi/Destroy() - if(iscyborg(loc)) - var/mob/living/silicon/robot/borg = loc - borg.mmi = null - if(brainmob) - qdel(brainmob) - brainmob = null - if(brain) - qdel(brain) - brain = null - if(mecha) - mecha = null - if(radio) - qdel(radio) - radio = null - return ..() - /obj/item/mmi/deconstruct(disassembled = TRUE) if(brain) eject_brain() diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm index cd9bbf37920..4607b1ed006 100644 --- a/code/modules/mob/living/silicon/robot/laws.dm +++ b/code/modules/mob/living/silicon/robot/laws.dm @@ -45,7 +45,7 @@ /mob/living/silicon/robot/proc/lawsync() laws_sanity_check() - var/datum/ai_laws/master = connected_ai ? connected_ai.laws : null + var/datum/ai_laws/master = connected_ai?.laws var/temp if (master) laws.devillaws.len = master.devillaws.len diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index b7fd16ea800..83fc57bca8a 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -59,20 +59,21 @@ diag_hud_set_health() add_sensors() -/mob/living/silicon/med_hud_set_health() - return //we use a different hud - -/mob/living/silicon/med_hud_set_status() - return //we use a different hud - /mob/living/silicon/Destroy() QDEL_NULL(radio) QDEL_NULL(aicamera) QDEL_NULL(builtInCamera) QDEL_NULL(aiPDA) + QDEL_NULL(laws) GLOB.silicon_mobs -= src return ..() +/mob/living/silicon/med_hud_set_health() + return //we use a different hud + +/mob/living/silicon/med_hud_set_status() + return //we use a different hud + /mob/living/silicon/contents_explosion(severity, target) return