diff --git a/code/game/dna/genes/goon_powers.dm b/code/game/dna/genes/goon_powers.dm index 9ee63594b70..910e12eccd1 100644 --- a/code/game/dna/genes/goon_powers.dm +++ b/code/game/dna/genes/goon_powers.dm @@ -1,4 +1,4 @@ - +#define EAT_MOB_DELAY 300 // 30s // WAS: /datum/bioEffect/alcres /datum/dna/gene/basic/sober @@ -224,12 +224,32 @@ var/atom/movable/the_item = targets[1] if(ismob(the_item)) - var/t_his="his" + //My gender + var/m_his="his" if(usr.gender==FEMALE) + m_his="her" + // Their gender + var/t_his="his" + if(the_item.gender==FEMALE) t_his="her" - usr.visible_message("\red [usr] begins stuffing [the_item] into [t_his] gaping maw!") - if(do_after(usr,50)) - usr.visible_message("\red [usr] eats [the_item]!") + usr.visible_message("\red [usr] begins stuffing [the_item] into [m_his] gaping maw!") + var/mob/living/carbon/human/H = the_item + var/datum/organ/external/limb = H.get_organ(usr.zone_sel.selecting) + if(!istype(limb)) + usr << "\red You can't eat this part of them!" + return 0 + if(!istype(limb,/datum/organ/external/head)) + // Bullshit, but prevents being unable to clone someone. + usr << "\red You try to put \the [limb] in your mouth, but [t_his] ears tickle your throat!" + return 0 + var/oldloc = H.loc + if(do_after(usr,EAT_MOB_DELAY)) + if(!limb || !H) + return + if(H.loc!=oldloc) + usr << "\red \The [limb] moved away from your mouth!" + return + usr.visible_message("\red [usr] [pick("chomps","bites")] off [the_item]'s [limb]!") playsound(usr.loc, 'sound/items/eatfood.ogg', 50, 0) var/mob/M=the_item M.drop_l_hand() diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 1cd26a4f610..1b5f16488f0 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -473,7 +473,7 @@ This function completely restores a damaged organ to perfect condition. O.setAmputatedTree() //Handles dismemberment -/datum/organ/external/proc/droplimb(var/override = 0,var/no_explode = 0) +/datum/organ/external/proc/droplimb(var/override = 0,var/no_explode = 0, var/spawn_limb=1) if(destspawn) return if(override) status |= ORGAN_DESTROYED @@ -493,6 +493,7 @@ This function completely restores a damaged organ to perfect condition. O.droplimb(1) var/obj/organ //Dropped limb object + switch(body_part) if(LOWER_TORSO) owner << "\red You are now sterile." @@ -511,76 +512,85 @@ This function completely restores a damaged organ to perfect condition. owner.u_equip(owner.r_ear) owner.u_equip(owner.wear_mask) if(ARM_RIGHT) - if(status & ORGAN_ROBOT) - organ = new /obj/item/robot_parts/r_arm(owner.loc) - else if(SKELETON in owner.mutations) - organ = new /obj/item/weapon/skeleton/r_arm(owner.loc) - else - organ= new /obj/item/weapon/organ/r_arm(owner.loc, owner) + if(!spawn_limb) + if(status & ORGAN_ROBOT) + organ = new /obj/item/robot_parts/r_arm(owner.loc) + else if(SKELETON in owner.mutations) + organ = new /obj/item/weapon/skeleton/r_arm(owner.loc) + else + organ= new /obj/item/weapon/organ/r_arm(owner.loc, owner) if(ARM_LEFT) - if(status & ORGAN_ROBOT) - organ= new /obj/item/robot_parts/l_arm(owner.loc) - else if(SKELETON in owner.mutations) - organ = new /obj/item/weapon/skeleton/l_arm(owner.loc) - else - organ= new /obj/item/weapon/organ/l_arm(owner.loc, owner) + if(!spawn_limb) + if(status & ORGAN_ROBOT) + organ= new /obj/item/robot_parts/l_arm(owner.loc) + else if(SKELETON in owner.mutations) + organ = new /obj/item/weapon/skeleton/l_arm(owner.loc) + else + organ= new /obj/item/weapon/organ/l_arm(owner.loc, owner) if(LEG_RIGHT) - if(status & ORGAN_ROBOT) - organ = new /obj/item/robot_parts/r_leg(owner.loc) - else if(SKELETON in owner.mutations) - organ = new /obj/item/weapon/skeleton/r_leg(owner.loc) - else - organ= new /obj/item/weapon/organ/r_leg(owner.loc, owner) + if(!spawn_limb) + if(status & ORGAN_ROBOT) + organ = new /obj/item/robot_parts/r_leg(owner.loc) + else if(SKELETON in owner.mutations) + organ = new /obj/item/weapon/skeleton/r_leg(owner.loc) + else + organ= new /obj/item/weapon/organ/r_leg(owner.loc, owner) if(LEG_LEFT) - if(status & ORGAN_ROBOT) - organ = new /obj/item/robot_parts/l_leg(owner.loc) - else if(SKELETON in owner.mutations) - organ = new /obj/item/weapon/skeleton/l_leg(owner.loc) - else - organ= new /obj/item/weapon/organ/l_leg(owner.loc, owner) + if(!spawn_limb) + if(status & ORGAN_ROBOT) + organ = new /obj/item/robot_parts/l_leg(owner.loc) + else if(SKELETON in owner.mutations) + organ = new /obj/item/weapon/skeleton/l_leg(owner.loc) + else + organ= new /obj/item/weapon/organ/l_leg(owner.loc, owner) if(HAND_RIGHT) - if(!(status & ORGAN_ROBOT)) - if(SKELETON in owner.mutations) - organ = new /obj/item/weapon/skeleton/r_hand(owner.loc) - else - organ= new /obj/item/weapon/organ/r_hand(owner.loc, owner) - owner.u_equip(owner.gloves) + if(!spawn_limb) + if(!(status & ORGAN_ROBOT)) + if(SKELETON in owner.mutations) + organ = new /obj/item/weapon/skeleton/r_hand(owner.loc) + else + organ= new /obj/item/weapon/organ/r_hand(owner.loc, owner) + owner.u_equip(owner.gloves) if(HAND_LEFT) - if(!(status & ORGAN_ROBOT)) - if(SKELETON in owner.mutations) - organ = new /obj/item/weapon/skeleton/l_hand(owner.loc) - else - organ= new /obj/item/weapon/organ/l_hand(owner.loc, owner) - owner.u_equip(owner.gloves) + if(!spawn_limb) + if(!(status & ORGAN_ROBOT)) + if(SKELETON in owner.mutations) + organ = new /obj/item/weapon/skeleton/l_hand(owner.loc) + else + organ= new /obj/item/weapon/organ/l_hand(owner.loc, owner) + owner.u_equip(owner.gloves) if(FOOT_RIGHT) - if(!(status & ORGAN_ROBOT)) - if(SKELETON in owner.mutations) - organ = new /obj/item/weapon/skeleton/r_foot(owner.loc) - else - organ= new /obj/item/weapon/organ/r_foot/(owner.loc, owner) - owner.u_equip(owner.shoes) + if(!spawn_limb) + if(!(status & ORGAN_ROBOT)) + if(SKELETON in owner.mutations) + organ = new /obj/item/weapon/skeleton/r_foot(owner.loc) + else + organ= new /obj/item/weapon/organ/r_foot/(owner.loc, owner) + owner.u_equip(owner.shoes) if(FOOT_LEFT) - if(!(status & ORGAN_ROBOT)) - if(SKELETON in owner.mutations) - organ = new /obj/item/weapon/skeleton/l_foot(owner.loc) - else - organ = new /obj/item/weapon/organ/l_foot(owner.loc, owner) + if(!spawn_limb) + if(!(status & ORGAN_ROBOT)) + if(SKELETON in owner.mutations) + organ = new /obj/item/weapon/skeleton/l_foot(owner.loc) + else + organ = new /obj/item/weapon/organ/l_foot(owner.loc, owner) owner.u_equip(owner.shoes) - if(organ) - destspawn = 1 - //Robotic limbs explode if sabotaged. - if(status & ORGAN_ROBOT && !no_explode && sabotaged) - owner.visible_message("\red \The [owner]'s [display_name] explodes violently!",\ - "\red Your [display_name] explodes!",\ - "You hear an explosion followed by a scream!") - explosion(get_turf(owner),-1,-1,2,3) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, owner) - spark_system.attach(owner) - spark_system.start() - spawn(10) - del(spark_system) + destspawn = 1 + //Robotic limbs explode if sabotaged. + if(status & ORGAN_ROBOT && !no_explode && sabotaged) + owner.visible_message("\red \The [owner]'s [display_name] explodes violently!",\ + "\red Your [display_name] explodes!",\ + "You hear an explosion followed by a scream!") + explosion(get_turf(owner),-1,-1,2,3) + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, owner) + spark_system.attach(owner) + spark_system.start() + spawn(10) + del(spark_system) + + if(organ) owner.visible_message("\red [owner.name]'s [display_name] flies off in an arc.",\ "Your [display_name] goes flying off!",\ "You hear a terrible sound of ripping tendons and flesh.") @@ -588,8 +598,7 @@ This function completely restores a damaged organ to perfect condition. //Throw organs around var/lol = pick(cardinal) step(organ,lol) - - owner.update_body(1) + owner.regenerate_icons() /****************************************************