diff --git a/code/game/gamemodes/newobjective.dm b/code/game/gamemodes/newobjective.dm index 653bf079f8d..3e3eeb5c6ae 100644 --- a/code/game/gamemodes/newobjective.dm +++ b/code/game/gamemodes/newobjective.dm @@ -56,6 +56,11 @@ /proc/PickObjectiveFromList(var/list/objectivesArray) var/list/datum/objectives = objectivesArray[1] var/pick_index = text2num(pickweight(objectivesArray[2])) + + if (pick_index > objectives.len || pick_index < 1) + log_admin("Objective picking failed. Error logged. One or more traitors will need to be manually-assigned objectives") + CRASH("Objective picking failed. Pick_index was [pick_index].") + return objectives[pick_index] /proc/RemoveObjectiveFromList(var/list/objectiveArray, var/datum/objective/objective) diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 7747ea5c531..cca25ab9d63 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -285,7 +285,13 @@ the implant may become unstable and either pre-maturely inject the subject or si process() var/mob/M = src.loc - if(M.stat == 2) + + if(isnull(M)) // If the mob got gibbed + var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) + a.autosay("states, \"[mobname] has died-zzzzt in-in-in...\"", "[mobname]'s Death Alarm") + del(a) + processing_objects.Remove(src) + else if(M.stat == 2) var/turf/t = get_turf(M) var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) a.autosay("states, \"[mobname] has died in [t.loc.name]!\"", "[mobname]'s Death Alarm") diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index a2a04b36ee3..f65634c70ba 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -65,8 +65,11 @@ dat += "[M.mind.assigned_role] (No ID)" else if(isnull(id.assignment)) // Preventing runtime errors blocking the player panel - usr << "ERROR: Inform the coders that an [id.name] was checked for its assignment variable, and it was null." - dat += "ERROR" + if(istype(id, /obj/item/weapon/card/id/syndicate)) + dat += "Antagonist" + else + usr << "ERROR: Inform the coders that an [id.name] was checked for its assignment variable, and it was null." + dat += "ERROR" else if(M.mind.assigned_role == id.assignment) // Polymorph diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index b7c3e807228..046ab1e8867 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -130,25 +130,30 @@ /mob/living/carbon/human/proc/drip(var/amt as num) if(!amt) return + + var/amm = 0.1 * amt var/turf/T = get_turf(src) var/list/obj/effect/decal/cleanable/blood/drip/nums = list() - var/amm = 0.1 * amt + var/list/iconL = list("1","2","3","4","5") + vessel.remove_reagent("blood",amm) - var/list/hax = list("1","2","3","4","5") + for(var/obj/effect/decal/cleanable/blood/drip/G in T) nums += G - hax.Remove(G.icon_state) + iconL.Remove(G.icon_state) if(nums.len >= 3) var/obj/effect/decal/cleanable/blood/drip/D = pick(nums) D.blood_DNA.len++ D.blood_DNA[D.blood_DNA.len] = list(dna.unique_enzymes,dna.b_type) if(virus2) - D.virus2 += virus2.getcopy() + D.virus2 = virus2.getcopy() return + var/obj/effect/decal/cleanable/blood/drip/this = new(T) - this.icon_state = pick(hax) + this.icon_state = pick(iconL) this.blood_DNA = list(list(dna.unique_enzymes,dna.b_type)) this.blood_owner = src + if(virus2) this.virus2 = virus2.getcopy() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index f36240d8707..a4588ef4296 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1322,7 +1322,10 @@ if(M.virus2 && get_infection_chance()) infect_virus2(src,M.virus2) else - virus2.activate(src) + if(isnull(virus2)) // Trying to figure out a runtime error that keeps repeating + CRASH("virus2 nulled before calling activate()") + else + virus2.activate(src) // activate may have deleted the virus if(!virus2) return