/mob/var/suiciding = 0 /mob/living/carbon/human/verb/suicide() set hidden = 1 if(!canSuicide()) return var/oldkey = ckey var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") if(ckey != oldkey) return if(!canSuicide()) return if(confirm == "Yes") suiciding = TRUE var/obj/item/held_item = get_active_held_item() if(held_item) var/damagetype = held_item.suicide_act(src) if(damagetype) if(damagetype & SHAME) adjustStaminaLoss(200) suiciding = FALSE SendSignal(COMSIG_ADD_MOOD_EVENT, "shameful_suicide", /datum/mood_event/shameful_suicide) return suicide_log() var/damage_mod = 0 for(var/T in list(BRUTELOSS, FIRELOSS, TOXLOSS, OXYLOSS)) damage_mod += (T & damagetype) ? 1 : 0 damage_mod = max(1, damage_mod) //Do 200 damage divided by the number of damage types applied. if(damagetype & BRUTELOSS) adjustBruteLoss(200/damage_mod) if(damagetype & FIRELOSS) adjustFireLoss(200/damage_mod) if(damagetype & TOXLOSS) adjustToxLoss(200/damage_mod) if(damagetype & OXYLOSS) adjustOxyLoss(200/damage_mod) if(damagetype & MANUAL_SUICIDE) //Assume the object will handle the death. return //If something went wrong, just do normal oxyloss if(!(damagetype & (BRUTELOSS | FIRELOSS | TOXLOSS | OXYLOSS) )) adjustOxyLoss(max(200 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) death(FALSE) return var/suicide_message if(a_intent == INTENT_DISARM) suicide_message = pick("[src] is attempting to push [p_their()] own head off [p_their()] shoulders! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is pushing [p_their()] thumbs into [p_their()] eye sockets! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is ripping [p_their()] own arms off! It looks like [p_theyre()] trying to commit suicide.")//heheh get it? if(a_intent == INTENT_GRAB) suicide_message = pick("[src] is attempting to pull [p_their()] own head off! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is aggressively grabbing [p_their()] own neck! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is pulling [p_their()] eyes out of their sockets! It looks like [p_theyre()] trying to commit suicide.") if(a_intent == INTENT_HELP) suicide_message = pick("[src] is hugging [p_them()]self to death! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is high-fiving [p_them()]self to death! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is getting too high on life! It looks like [p_theyre()] trying to commit suicide.") else suicide_message = pick("[src] is attempting to bite [p_their()] tongue off! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is jamming [p_their()] thumbs into [p_their()] eye sockets! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is twisting [p_their()] own neck! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is holding [p_their()] breath! It looks like [p_theyre()] trying to commit suicide.") visible_message("[suicide_message]", "[suicide_message]") suicide_log() adjustOxyLoss(max(200 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) death(0) /mob/living/brain/verb/suicide() set hidden = 1 if(!canSuicide()) return var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") if(!canSuicide()) return if(confirm == "Yes") suiciding = 1 visible_message("[src]'s brain is growing dull and lifeless. [p_they(TRUE)] look[p_s()] like [p_theyve()] lost the will to live.", \ "[src]'s brain is growing dull and lifeless. [p_they(TRUE)] look[p_s()] like [p_theyve()] lost the will to live.") suicide_log() death(0) /mob/living/carbon/monkey/verb/suicide() set hidden = 1 if(!canSuicide()) return var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") if(!canSuicide()) return if(confirm == "Yes") suiciding = 1 visible_message("[src] is attempting to bite [p_their()] tongue. It looks like [p_theyre()] trying to commit suicide.", \ "[src] is attempting to bite [p_their()] tongue. It looks like [p_theyre()] trying to commit suicide.") suicide_log() adjustOxyLoss(max(200- getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) death(0) /mob/living/silicon/ai/verb/suicide() set hidden = 1 if(!canSuicide()) return var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") if(!canSuicide()) return if(confirm == "Yes") suiciding = 1 visible_message("[src] is powering down. It looks like [p_theyre()] trying to commit suicide.", \ "[src] is powering down. It looks like [p_theyre()] trying to commit suicide.") suicide_log() //put em at -175 adjustOxyLoss(max(maxHealth * 2 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) death(0) /mob/living/silicon/robot/verb/suicide() set hidden = 1 if(!canSuicide()) return var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") if(!canSuicide()) return if(confirm == "Yes") suiciding = 1 visible_message("[src] is powering down. It looks like [p_theyre()] trying to commit suicide.", \ "[src] is powering down. It looks like [p_theyre()] trying to commit suicide.") suicide_log() //put em at -175 adjustOxyLoss(max(maxHealth * 2 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) death(0) /mob/living/silicon/pai/verb/suicide() set hidden = 1 var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") if(confirm == "Yes") var/turf/T = get_turf(src.loc) T.visible_message("[src] flashes a message across its screen, \"Wiping core files. Please acquire a new personality to continue using pAI device functions.\"", null, \ "[src] bleeps electronically.") suicide_log() death(0) else to_chat(src, "Aborting suicide attempt.") /mob/living/carbon/alien/humanoid/verb/suicide() set hidden = 1 if(!canSuicide()) return var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") if(!canSuicide()) return if(confirm == "Yes") suiciding = 1 visible_message("[src] is thrashing wildly! It looks like [p_theyre()] trying to commit suicide.", \ "[src] is thrashing wildly! It looks like [p_theyre()] trying to commit suicide.", \ "You hear thrashing.") suicide_log() //put em at -175 adjustOxyLoss(max(200 - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) death(0) /mob/living/simple_animal/verb/suicide() set hidden = 1 if(!canSuicide()) return var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") if(!canSuicide()) return if(confirm == "Yes") suiciding = 1 visible_message("[src] begins to fall down. It looks like [p_theyve()] lost the will to live.", \ "[src] begins to fall down. It looks like [p_theyve()] lost the will to live.") suicide_log() death(0) /mob/living/proc/suicide_log() var/turf/T = get_turf(src) log_game("[key_name(src)] committed suicide at [get_area(src)][COORD(T)] as [src.type].") message_admins("[key_name(src)] committed suicide at [get_area(src)] as [src.type].") /mob/living/carbon/human/suicide_log() var/turf/T = get_turf(src) log_game("[key_name(src)] (job: [src.job ? "[src.job]" : "None"]) committed suicide at [get_area(src)][COORD(T)].") message_admins("[key_name(src)] (job: [job ? "[job]" : "None"]) committed suicide at [get_area(src)].") /mob/living/proc/canSuicide() if(stat == CONSCIOUS) return TRUE else if(stat == DEAD) to_chat(src, "You're already dead!") else if(stat == UNCONSCIOUS) to_chat(src, "You need to be conscious to suicide!") return /mob/living/carbon/canSuicide() if(!..()) return if(!canmove || restrained()) //just while I finish up the new 'fun' suiciding verb. This is to prevent metagaming via suicide to_chat(src, "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))") return // if(has_brain_worms()) // to_chat(src, "You can't bring yourself to commit suicide!") // return return TRUE