/obj/item/organ/stomach name = "stomach" icon_state = "stomach" w_class = WEIGHT_CLASS_NORMAL zone = BODY_ZONE_CHEST slot = ORGAN_SLOT_STOMACH attack_verb = list("gored", "squished", "slapped", "digested") desc = "Onaka ga suite imasu." var/disgust_metabolism = 1 healing_factor = STANDARD_ORGAN_HEALING decay_factor = STANDARD_ORGAN_DECAY low_threshold_passed = "Your stomach flashes with pain before subsiding. Food doesn't seem like a good idea right now." high_threshold_passed = "Your stomach flares up with constant pain- you can hardly stomach the idea of food right now!" high_threshold_cleared = "The pain in your stomach dies down for now, but food still seems unappealing." low_threshold_cleared = "The last bouts of pain in your stomach have died out." /obj/item/organ/stomach/on_life() . = ..() if(!owner) return if(ishuman(owner)) var/mob/living/carbon/human/H = owner if(.) H.dna.species.handle_digestion(H) handle_disgust(H) if(!damage) return var/datum/reagent/consumable/nutriment/Nutri = locate(/datum/reagent/consumable/nutriment) in owner.reagents.reagent_list if(!Nutri) return var/prob_divisor = damage > high_threshold ? 10 : 40 if(prob((damage/prob_divisor) * (Nutri.volume**2))) owner.vomit(damage) to_chat(owner, "Your stomach reels in pain as you're incapable of holding down all that food!") /obj/item/organ/stomach/proc/handle_disgust(mob/living/carbon/human/H) if(H.disgust) var/pukeprob = 5 + 0.05 * H.disgust if(H.disgust >= DISGUST_LEVEL_GROSS) if(prob(10)) H.stuttering += 1 H.confused += 2 if(prob(10) && !H.stat) to_chat(H, "You feel kind of iffy...") H.jitteriness = max(H.jitteriness - 3, 0) if(H.disgust >= DISGUST_LEVEL_VERYGROSS) if(prob(pukeprob)) //iT hAndLeS mOrE ThaN PukInG H.confused += 2.5 H.stuttering += 1 H.vomit(10, 0, 1, 0, 1, 0) H.Dizzy(5) if(H.disgust >= DISGUST_LEVEL_DISGUSTED) if(prob(25)) H.blur_eyes(3) //We need to add more shit down here H.adjust_disgust(-0.5 * disgust_metabolism) switch(H.disgust) if(0 to DISGUST_LEVEL_GROSS) H.clear_alert("disgust") SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "disgust") if(DISGUST_LEVEL_GROSS to DISGUST_LEVEL_VERYGROSS) H.throw_alert("disgust", /obj/screen/alert/gross) SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/gross) if(DISGUST_LEVEL_VERYGROSS to DISGUST_LEVEL_DISGUSTED) H.throw_alert("disgust", /obj/screen/alert/verygross) SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/verygross) if(DISGUST_LEVEL_DISGUSTED to INFINITY) H.throw_alert("disgust", /obj/screen/alert/disgusted) SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgusted) /obj/item/organ/stomach/Remove(special = FALSE) var/mob/living/carbon/human/H = owner if(H && istype(H)) H.clear_alert("disgust") SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "disgust") ..() /obj/item/organ/stomach/fly name = "insectoid stomach" icon_state = "stomach-x" //xenomorph liver? It's just a black liver so it fits. desc = "A mutant stomach designed to handle the unique diet of a flyperson." /obj/item/organ/stomach/plasmaman name = "digestive crystal" icon_state = "stomach-p" desc = "A strange crystal that is responsible for metabolizing the unseen energy force that feeds plasmamen." /obj/item/organ/stomach/ipc name = "ipc cell" icon_state = "stomach-ipc" /obj/item/organ/stomach/ipc/emp_act(severity) . = ..() if(!owner || . & EMP_PROTECT_SELF) return switch(severity) if(1) owner.nutrition = min(owner.nutrition - 50, 0) to_chat(owner, "Alert: Detected severe battery discharge!") if(2) owner.nutrition = min(owner.nutrition - 100, 0) to_chat(owner, "Alert: Minor battery discharge!") /obj/item/organ/stomach/ethereal name = "biological battery" icon_state = "stomach-p" //Welp. At least it's more unique in functionaliy. desc = "A crystal-like organ that stores the electric charge of ethereals." var/crystal_charge = ETHEREAL_CHARGE_FULL /obj/item/organ/stomach/ethereal/on_life() ..() adjust_charge(-ETHEREAL_CHARGE_FACTOR) /obj/item/organ/stomach/ethereal/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE) ..() RegisterSignal(owner, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, .proc/charge) RegisterSignal(owner, COMSIG_LIVING_ELECTROCUTE_ACT, .proc/on_electrocute) /obj/item/organ/stomach/ethereal/Remove(mob/living/carbon/M, special = 0) UnregisterSignal(owner, COMSIG_PROCESS_BORGCHARGER_OCCUPANT) UnregisterSignal(owner, COMSIG_LIVING_ELECTROCUTE_ACT) ..() /obj/item/organ/stomach/ethereal/proc/charge(datum/source, amount, repairs) adjust_charge(amount / 70) /obj/item/organ/stomach/ethereal/proc/on_electrocute(datum/source, shock_damage, siemens_coeff = 1, flags = NONE) if(flags & SHOCK_ILLUSION) return adjust_charge(shock_damage * siemens_coeff * 2) to_chat(owner, "You absorb some of the shock into your body!") /obj/item/organ/stomach/ethereal/proc/adjust_charge(amount) crystal_charge = clamp(crystal_charge + amount, ETHEREAL_CHARGE_NONE, ETHEREAL_CHARGE_DANGEROUS)