mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-20 18:47:20 +01:00
Add appropriate soap-washing message for mouthless IPCs. (#32280)
* Add appropriate soap-washing message for mouthless IPCs. * Tweak soap message conditions. * Broaden the scope of mouth-related changes. * Apply suggestion from CRUNCH review. Co-authored-by: CRUNCH <143041327+CRUNCH-Borg@users.noreply.github.com> Signed-off-by: Alan <alfalfascout@users.noreply.github.com> * Make soap reagent affect synthetics. --------- Signed-off-by: Alan <alfalfascout@users.noreply.github.com> Co-authored-by: CRUNCH <143041327+CRUNCH-Borg@users.noreply.github.com>
This commit is contained in:
@@ -33,21 +33,25 @@
|
||||
if(!ishuman(target) || user.zone_selected != BODY_ZONE_PRECISE_MOUTH)
|
||||
return ..() // Cleaning mobs is done on attack() so they get visibly bonked by the soap.
|
||||
|
||||
var/mob/living/carbon/human/human_target = target
|
||||
// Mmm, delicious soap!
|
||||
if(isdrask(target) && user == target && user.a_intent == INTENT_GRAB)
|
||||
var/mob/living/carbon/human/muncher = target
|
||||
eat_soap(muncher)
|
||||
eat_soap(human_target)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
return ITEM_INTERACT_COMPLETE
|
||||
|
||||
var/mouth_term = "mouth out"
|
||||
if(!human_target.check_has_mouth())
|
||||
mouth_term = "speaker grille"
|
||||
|
||||
user.visible_message(
|
||||
SPAN_WARNING("[user] starts washing [target == user ? "[target.p_their()] own" : "[target]'s"] mouth out with [src]!"),
|
||||
SPAN_NOTICE("You start washing [target == user ? "your own" : "[target]'s"] mouth out with [src]!")
|
||||
SPAN_WARNING("[user] starts washing [target == user ? "[target.p_their()] own" : "[target]'s"] [mouth_term] with [src]!"),
|
||||
SPAN_NOTICE("You start washing [target == user ? "your own" : "[target]'s"] [mouth_term] with [src]!")
|
||||
)
|
||||
if(do_after_once(user, cleanspeed, target = target))
|
||||
user.visible_message(
|
||||
SPAN_WARNING("[user] washes [target == user ? "[target.p_their()] own" : "[target]'s"] mouth out with [src]!"),
|
||||
SPAN_WARNING("You wash [target == user ? "your own" : "[target]'s"] mouth out with [src]!")
|
||||
SPAN_WARNING("[user] washes [target == user ? "[target.p_their()] own" : "[target]'s"] [mouth_term] with [src]!"),
|
||||
SPAN_WARNING("You wash [target == user ? "your own" : "[target]'s"] [mouth_term] with [src]!")
|
||||
)
|
||||
target.reagents.add_reagent("soapreagent", 6)
|
||||
return ITEM_INTERACT_COMPLETE
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
. = ..()
|
||||
update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
/obj/item/stack/tape_roll/interact_with_atom(atom/target, mob/living/user, list/modifiers)
|
||||
/obj/item/stack/tape_roll/interact_with_atom(atom/target, mob/living/user, list/modifiers)
|
||||
if(!ishuman(target)) // What good is a duct tape mask if you are unable to speak?
|
||||
return ..()
|
||||
|
||||
@@ -25,28 +25,30 @@
|
||||
to_chat(user, SPAN_WARNING("You'll need more tape for this!"))
|
||||
return ITEM_INTERACT_COMPLETE
|
||||
|
||||
var/mouth_term = "mouth"
|
||||
if(!H.check_has_mouth())
|
||||
to_chat(user, "[H.p_they(TRUE)] [H.p_have()] no mouth to tape over!")
|
||||
return ITEM_INTERACT_COMPLETE
|
||||
mouth_term = "speaker grille"
|
||||
|
||||
user.visible_message(
|
||||
SPAN_WARNING("[user] is taping [H]'s mouth closed!"),
|
||||
SPAN_NOTICE("You try to tape [H == user ? "your own" : "[H]'s"] mouth shut!"),
|
||||
SPAN_WARNING("[user] is taping over [H]'s [mouth_term]!"),
|
||||
SPAN_NOTICE("You try to tape over [H == user ? "your own" : "[H]'s"] [mouth_term]!"),
|
||||
SPAN_WARNING("You hear tape ripping.")
|
||||
)
|
||||
if(!do_after(user, 5 SECONDS, target = H))
|
||||
return ITEM_INTERACT_COMPLETE
|
||||
|
||||
if(!use(2))
|
||||
to_chat(user, SPAN_NOTICE("You don't have enough tape!"))
|
||||
to_chat(user, SPAN_WARNING("You don't have enough tape!"))
|
||||
return ITEM_INTERACT_COMPLETE
|
||||
|
||||
if(H.wear_mask)
|
||||
to_chat(user, SPAN_NOTICE("[H == user ? user : H]'s mouth is already covered!"))
|
||||
to_chat(user, SPAN_WARNING("[H == user ? user : H]'s [mouth_term] is already covered!"))
|
||||
return ITEM_INTERACT_COMPLETE
|
||||
|
||||
user.visible_message(SPAN_WARNING("[user] tapes [H]'s mouth shut!"),
|
||||
SPAN_NOTICE("You cover [H == user ? "your own" : "[H]'s"] mouth with a piece of duct tape.[H == user ? null : " That will shut them up."]"))
|
||||
user.visible_message(
|
||||
SPAN_WARNING("[user] tapes over [H]'s [mouth_term]!"),
|
||||
SPAN_NOTICE("You cover [H == user ? "your own" : "[H]'s"] [mouth_term] with a piece of duct tape.[H == user ? null : " That will shut them up."]")
|
||||
)
|
||||
var/obj/item/clothing/mask/muzzle/G = new /obj/item/clothing/mask/muzzle/tapegag
|
||||
H.equip_to_slot(G, ITEM_SLOT_MASK)
|
||||
G.add_fingerprint(user)
|
||||
|
||||
@@ -1152,7 +1152,7 @@
|
||||
/mob/living/carbon/human/proc/check_has_mouth()
|
||||
// Todo, check stomach organ when implemented.
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
if(!H || !H.can_intake_reagents)
|
||||
if(!H || (!H.can_intake_reagents && !HAS_TRAIT(src, TRAIT_IPC_CAN_EAT)))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -1994,17 +1994,15 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
|
||||
|
||||
/mob/living/carbon/human/selfFeed(obj/item/food/toEat, fullness)
|
||||
if(!check_has_mouth())
|
||||
if(!ismachineperson(src) || (ismachineperson(src) && !HAS_TRAIT(src, TRAIT_IPC_CAN_EAT)))
|
||||
to_chat(src, SPAN_NOTICE("Where do you intend to put [toEat]? You don't have a mouth!"))
|
||||
return FALSE
|
||||
to_chat(src, SPAN_NOTICE("Where do you intend to put [toEat]? You don't have a mouth!"))
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/forceFed(obj/item/food/toEat, mob/user, fullness)
|
||||
if(!check_has_mouth())
|
||||
if(!ismachineperson(src) || !HAS_TRAIT(src, TRAIT_IPC_CAN_EAT))
|
||||
if(!((istype(toEat, /obj/item/reagent_containers/drinks) && (ismachineperson(src)))))
|
||||
to_chat(user, SPAN_NOTICE("Where do you intend to put [toEat]? \The [src] doesn't have a mouth!"))
|
||||
return FALSE
|
||||
if(!((istype(toEat, /obj/item/reagent_containers/drinks) && (ismachineperson(src)))))
|
||||
to_chat(user, SPAN_NOTICE("Where do you intend to put [toEat]? [src] doesn't have a mouth!"))
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/selfDrink(obj/item/reagent_containers/drinks/toDrink)
|
||||
|
||||
@@ -986,6 +986,7 @@
|
||||
color = "#FFFFFF"
|
||||
taste_description = "soap"
|
||||
yuck_description = "grime in your gears"
|
||||
process_flags = ORGANIC | SYNTHETIC
|
||||
|
||||
/datum/reagent/soap/on_mob_add(mob/living/L)
|
||||
ADD_TRAIT(L, TRAIT_SOAPY_MOUTH, id)
|
||||
|
||||
Reference in New Issue
Block a user