diff --git a/code/modules/vore/appearance/sprite_accessories_vr.dm b/code/modules/vore/appearance/sprite_accessories_vr.dm index 30dfcf7d636..2ab40c46d71 100644 --- a/code/modules/vore/appearance/sprite_accessories_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_vr.dm @@ -1056,6 +1056,33 @@ do_colouration = 1 // Yes color, using tail color color_blend_mode = ICON_MULTIPLY // The sprites for taurs are designed for ICON_MULTIPLY + //Could do nested lists but it started becoming a nightmare. It'd be more fun for lookups of a_intent and m_intent, but then subtypes need to + //duplicate all the messages, and it starts getting awkward. These are singletons, anyway! + + //Messages to owner when stepping on/over + var/msg_owner_help_walk = "You carefully step over %prey." + var/msg_owner_help_run = "You carefully step over %prey." + var/msg_owner_harm_walk = "You methodically place your foot down upon %prey's body, slowly applying pressure, crushing them against the floor below!" + var/msg_owner_harm_run = "You carelessly step down onto %prey, crushing them!" + var/msg_owner_disarm_walk = "You firmly push your foot down on %prey, painfully but harmlessly pinning them to the ground!" + var/msg_owner_disarm_run = "You quickly push %prey to the ground with your foot!" + var/msg_owner_grab_fail = "You step down onto %prey, squishing them and forcing them down to the ground!" + var/msg_owner_grab_success = "You pin %prey down onto the floor with your foot and curl your toes up around their body, trapping them inbetween them!" + + //Messages to prey when stepping on/over + var/msg_prey_help_walk = "%owner steps over you carefully!" + var/msg_prey_help_run = "%owner steps over you carefully!" + var/msg_prey_harm_walk = "%owner methodically places their foot upon your body, slowly applying pressure, crushing you against the floor below!" + var/msg_prey_harm_run = "%owner steps carelessly on your body, crushing you!" + var/msg_prey_disarm_walk = "%owner firmly pushes their foot down on you, quite painfully but harmlessly pinning you to the ground!" + var/msg_prey_disarm_run = "%owner pushes you down to the ground with their foot!" + var/msg_prey_grab_fail = "%owner steps down and squishes you with their foot, forcing you down to the ground!" + var/msg_prey_grab_success = "%owner pins you down to the floor with their foot and curls their toes up around your body, trapping you inbetween them!" + + //Messages for smalls moving under larges + var/msg_owner_stepunder = "%owner runs between your legs." //Weird becuase in the case this is used, %owner is the 'bumper' (src) + var/msg_prey_stepunder = "You run between %prey's legs." //Same, inverse + /datum/sprite_accessory/tail/taur/roiz_long_lizard // Not ACTUALLY a taur, but it uses 32x64 so it wouldn't fit in tails.dmi, and having it as a tail bugs up the sprite. name = "Long Lizard Tail (Roiz Lizden)" icon_state = "roiz_tail_s" @@ -1063,118 +1090,268 @@ ckeys_allowed = list("spoopylizz") /datum/sprite_accessory/tail/taur/wolf - name = "Wolf" + name = "Wolf (Taur)" icon_state = "wolf_s" /datum/sprite_accessory/tail/taur/wolf/wolf_2c - name = "Wolf dual-color" + name = "Wolf dual-color (Taur)" icon_state = "wolf_s" extra_overlay = "wolf_markings" /datum/sprite_accessory/tail/taur/wolf/synthwolf - name = "SynthWolf dual-color" + name = "SynthWolf dual-color (Taur)" icon_state = "synthwolf_s" extra_overlay = "synthwolf_markings" /datum/sprite_accessory/tail/taur/naga - name = "Naga" + name = "Naga (Taur)" icon_state = "naga_s" + msg_owner_help_walk = "You carefully slither around %prey." + msg_prey_help_walk = "%owner's huge tail slithers past beside you!" + + msg_owner_help_run = "You carefully slither around %prey." + msg_prey_help_run = "%owner's huge tail slithers past beside you!" + + msg_owner_disarm_run = "Your tail slides over %prey, pushing them down to the ground!" + msg_prey_disarm_run = "%owner's tail slides over you, forcing you down to the ground!" + + msg_owner_disarm_walk = "You push down on %prey with your tail, pinning them down under you!" + msg_prey_disarm_walk = "%owner pushes down on you with their tail, pinning you down below them!" + + msg_owner_harm_run = "Your heavy tail carelessly slides past %prey, crushing them!" + msg_prey_harm_run = "%owner quickly goes over your body, carelessly crushing you with their heavy tail!" + + msg_owner_harm_walk = "Your heavy tail slowly and methodically slides down upon %prey, crushing against the floor below!" + msg_prey_harm_walk = "%owner's thick, heavy tail slowly and methodically slides down upon your body, mercilessly crushing you into the floor below!" + + msg_owner_grab_success = "You slither over %prey with your large, thick tail, smushing them against the ground before coiling up around them, trapping them within the tight confines of your tail!" + msg_prey_grab_success = "%owner slithers over you with their large, thick tail, smushing you against the ground before coiling up around you, trapping you within the tight confines of their tail!" + + msg_owner_grab_fail = "You squish %prey under your large, thick tail, forcing them onto the ground!" + msg_prey_grab_fail = "%owner pins you under their large, thick tail, forcing you onto the ground!" + + msg_prey_stepunder = "You jump over %prey's thick tail." + msg_owner_stepunder = "%owner bounds over your tail." + /datum/sprite_accessory/tail/taur/naga/naga_2c - name = "Naga dual-color" + name = "Naga dual-color (Taur)" icon_state = "naga_s" extra_overlay = "naga_markings" /datum/sprite_accessory/tail/taur/horse - name = "Horse" + name = "Horse (Taur)" icon_state = "horse_s" + msg_owner_disarm_run = "You quickly push %prey to the ground with your hoof!" + msg_prey_disarm_run = "%owner pushes you down to the ground with their hoof!" + + msg_owner_disarm_walk = "You firmly push your hoof down on %prey, painfully but harmlessly pinning them to the ground!" + msg_prey_disarm_walk = "%owner firmly pushes their hoof down on you, quite painfully but harmlessly pinning you to the ground!" + + msg_owner_harm_walk = "You methodically place your hoof down upon %prey's body, slowly applying pressure, crushing them against the floor below!" + msg_prey_harm_walk = "%owner methodically places their hoof upon your body, slowly applying pressure, crushing you against the floor below!" + + msg_owner_grab_success = "You pin %prey to the ground before scooping them up with your hooves!" + msg_prey_grab_success = "%owner pins you to the ground before scooping you up with their hooves!" + + msg_owner_grab_fail = "You step down onto %prey, squishing them and forcing them down to the ground!" + msg_prey_grab_fail = "%owner steps down and squishes you with their hoof, forcing you down to the ground!" + /datum/sprite_accessory/tail/taur/horse/synthhorse - name = "SynthHorse dual-color" + name = "SynthHorse dual-color (Taur)" icon_state = "synthhorse_s" extra_overlay = "synthhorse_markings" /datum/sprite_accessory/tail/taur/cow - name = "Cow" + name = "Cow (Taur)" icon_state = "cow_s" + msg_owner_disarm_run = "You quickly push %prey to the ground with your hoof!" + msg_prey_disarm_run = "%owner pushes you down to the ground with their hoof!" + + msg_owner_disarm_walk = "You firmly push your hoof down on %prey, painfully but harmlessly pinning them to the ground!" + msg_prey_disarm_walk = "%owner firmly pushes their hoof down on you, quite painfully but harmlessly pinning you to the ground!" + + msg_owner_harm_walk = "You methodically place your hoof down upon %prey's body, slowly applying pressure, crushing them against the floor below!" + msg_prey_harm_walk = "%owner methodically places their hoof upon your body, slowly applying pressure, crushing you against the floor below!" + + msg_owner_grab_success = "You pin %prey to the ground before scooping them up with your hooves!" + msg_prey_grab_success = "%owner pins you to the ground before scooping you up with their hooves!" + + msg_owner_grab_fail = "You step down onto %prey, squishing them and forcing them down to the ground!" + msg_prey_grab_fail = "%owner steps down and squishes you with their hoof, forcing you down to the ground!" + /datum/sprite_accessory/tail/taur/lizard - name = "Lizard" + name = "Lizard (Taur)" icon_state = "lizard_s" /datum/sprite_accessory/tail/taur/lizard/lizard_2c - name = "Lizard dual-color" + name = "Lizard dual-color (Taur)" icon_state = "lizard_s" extra_overlay = "lizard_markings" /datum/sprite_accessory/tail/taur/lizard/synthlizard - name = "SynthLizard dual-color" + name = "SynthLizard dual-color (Taur)" icon_state = "synthlizard_s" extra_overlay = "synthlizard_markings" /datum/sprite_accessory/tail/taur/spider - name = "Spider" + name = "Spider (Taur)" icon_state = "spider_s" + msg_owner_disarm_run = "You quickly push %prey to the ground with your leg!" + msg_prey_disarm_run = "%owner pushes you down to the ground with their leg!" + + msg_owner_disarm_walk = "You firmly push your leg down on %prey, painfully but harmlessly pinning them to the ground!" + msg_prey_disarm_walk = "%owner firmly pushes their leg down on you, quite painfully but harmlessly pinning you to the ground!" + + msg_owner_harm_walk = "You methodically place your leg down upon %prey's body, slowly applying pressure, crushing them against the floor below!" + msg_prey_harm_walk = "%owner methodically places their leg upon your body, slowly applying pressure, crushing you against the floor below!" + + msg_owner_grab_success = "You pin %prey down on the ground with your front leg before using your other leg to pick them up, trapping them between two of your front legs!" + msg_prey_grab_success = "%owner pins you down on the ground with their front leg before using their other leg to pick you up, trapping you between two of their front legs!" + + msg_owner_grab_fail = "You step down onto %prey, squishing them and forcing them down to the ground!" + msg_prey_grab_fail = "%owner steps down and squishes you with their leg, forcing you down to the ground!" + /datum/sprite_accessory/tail/taur/tents - name = "Tentacles" + name = "Tentacles (Taur)" icon_state = "tent_s" + msg_prey_stepunder = "You run between %prey's tentacles." + msg_owner_stepunder = "%owner runs between your tentacles." + + msg_owner_disarm_run = "You quickly push %prey to the ground with some of your tentacles!" + msg_prey_disarm_run = "%owner pushes you down to the ground with some of their tentacles!" + + msg_owner_disarm_walk = "You push down on %prey with some of your tentacles, pinning them down firmly under you!" + msg_prey_disarm_walk = "%owner pushes down on you with some of their tentacles, pinning you down firmly below them!" + + msg_owner_harm_run = "Your tentacles carelessly slide past %prey, crushing them!" + msg_prey_harm_run = "%owner quickly goes over your body, carelessly crushing you with their tentacles!" + + msg_owner_harm_walk = "Your tentacles methodically apply pressure on %prey's body, crushing them against the floor below!" + msg_prey_harm_walk = "%owner's thick tentacles methodically apply pressure on your body, crushing you into the floor below!" + + msg_owner_grab_success = "You slide over %prey with your tentacles, smushing them against the ground before wrapping one up around them, trapping them within the tight confines of your tentacles!" + msg_prey_grab_success = "%owner slides over you with their tentacles, smushing you against the ground before wrapping one up around you, trapping you within the tight confines of their tentacles!" + + msg_owner_grab_fail = "You step down onto %prey with one of your tentacles, forcing them onto the ground!" + msg_prey_grab_fail = "%owner steps down onto you with one of their tentacles, squishing you and forcing you onto the ground!" + /datum/sprite_accessory/tail/taur/feline - name = "Feline" + name = "Feline (Taur)" icon_state = "feline_s" /datum/sprite_accessory/tail/taur/feline/feline_2c - name = "Feline dual-color" + name = "Feline dual-color (Taur)" icon_state = "feline_s" extra_overlay = "feline_markings" /datum/sprite_accessory/tail/taur/feline/synthfeline - name = "SynthFeline dual-color" + name = "SynthFeline dual-color (Taur)" icon_state = "synthfeline_s" extra_overlay = "synthfeline_markings" /datum/sprite_accessory/tail/taur/slug - name = "Slug" + name = "Slug (Taur)" icon_state = "slug_s" + msg_owner_help_walk = "You carefully slither around %prey." + msg_prey_help_walk = "%owner's huge tail slithers past beside you!" + + msg_owner_help_run = "You carefully slither around %prey." + msg_prey_help_run = "%owner's huge tail slithers past beside you!" + + msg_owner_disarm_run = "Your tail slides over %prey, pushing them down to the ground!" + msg_prey_disarm_run = "%owner's tail slides over you, forcing you down to the ground!" + + msg_owner_disarm_walk = "You push down on %prey with your tail, pinning them down under you!" + msg_prey_disarm_walk = "%owner pushes down on you with their tail, pinning you down below them!" + + msg_owner_harm_run = "Your heavy tail carelessly slides past %prey, crushing them!" + msg_prey_harm_run = "%owner quickly goes over your body, carelessly crushing you with their heavy tail!" + + msg_owner_harm_walk = "Your heavy tail slowly and methodically slides down upon %prey, crushing against the floor below!" + msg_prey_harm_walk = "%owner's thick, heavy tail slowly and methodically slides down upon your body, mercilessly crushing you into the floor below!" + + msg_owner_grab_success = "You slither over %prey with your large, thick tail, smushing them against the ground before coiling up around them, trapping them within the tight confines of your tail!" + msg_prey_grab_success = "%owner slithers over you with their large, thick tail, smushing you against the ground before coiling up around you, trapping you within the tight confines of their tail!" + + msg_owner_grab_fail = "You squish %prey under your large, thick tail, forcing them onto the ground!" + msg_prey_grab_fail = "%owner pins you under their large, thick tail, forcing you onto the ground!" + + msg_prey_stepunder = "You jump over %prey's thick tail." + msg_owner_stepunder = "%owner bounds over your tail." + /datum/sprite_accessory/tail/taur/frog - name = "Frog" + name = "Frog (Taur)" icon_state = "frog_s" /datum/sprite_accessory/tail/taur/drake //Enabling on request, no suit compatibility but then again see 2 above. - name = "Drake" + name = "Drake (Taur)" icon_state = "drake_s" extra_overlay = "drake_markings" -/datum/sprite_accessory/tail/taur/otie //Eh whatever. - name = "Otie" +/datum/sprite_accessory/tail/taur/otie + name = "Otie (Taur)" icon_state = "otie_s" extra_overlay = "otie_markings" //wickedtemp: Chakat Tempest /datum/sprite_accessory/tail/taur/feline/tempest - name = "Feline (wickedtemp)" + name = "Feline (wickedtemp) (Taur)" icon_state = "tempest_s" ckeys_allowed = list("wickedtemp") //silencedmp5a5: Serdykov Antoz /datum/sprite_accessory/tail/taur/wolf/serdy - name = "CyberSerdy (silencedmp5a5)" + name = "CyberSerdy (silencedmp5a5) (Taur)" icon_state = "serdy_s" ckeys_allowed = list("silencedmp5a5") //liquidfirefly: Ariana Scol /datum/sprite_accessory/tail/taur/centipede - name = "Centipede (liquidfirefly)" + name = "Centipede (liquidfirefly) (Taur)" icon_state = "ariana_s" ckeys_allowed = list("liquidfirefly") do_colouration = 0 + msg_owner_disarm_run = "You quickly push %prey to the ground with your leg!" + msg_prey_disarm_run = "%owner pushes you down to the ground with their leg!" + + msg_owner_disarm_walk = "You firmly push your leg down on %prey, painfully but harmlessly pinning them to the ground!" + msg_prey_disarm_walk = "%owner firmly pushes their leg down on you, quite painfully but harmlessly pinning you to the ground!" + + msg_owner_harm_walk = "You methodically place your leg down upon %prey's body, slowly applying pressure, crushing them against the floor below!" + msg_prey_harm_walk = "%owner methodically places their leg upon your body, slowly applying pressure, crushing you against the floor below!" + + msg_owner_grab_success = "You pin %prey down on the ground with your front leg before using your other leg to pick them up, trapping them between two of your front legs!" + msg_prey_grab_success = "%owner pins you down on the ground with their front leg before using their other leg to pick you up, trapping you between two of their front legs!" + + msg_owner_grab_fail = "You step down onto %prey, squishing them and forcing them down to the ground!" + msg_prey_grab_fail = "%owner steps down and squishes you with their leg, forcing you down to the ground!" + //liquidfirefly: Ariana Scol /datum/sprite_accessory/tail/taur/alraune - name = "Alraune (natje)" + name = "Alraune (natje) (Taur)" icon_state = "alraune_s" ani_state = "alraune_closed_s" ckeys_allowed = list("natje") do_colouration = 0 + + msg_owner_disarm_run = "You quickly push %prey to the ground with your leg!" + msg_prey_disarm_run = "%owner pushes you down to the ground with their leg!" + + msg_owner_disarm_walk = "You firmly push your leg down on %prey, painfully but harmlessly pinning them to the ground!" + msg_prey_disarm_walk = "%owner firmly pushes their leg down on you, quite painfully but harmlessly pinning you to the ground!" + + msg_owner_harm_walk = "You methodically place your leg down upon %prey's body, slowly applying pressure, crushing them against the floor below!" + msg_prey_harm_walk = "%owner methodically places their leg upon your body, slowly applying pressure, crushing you against the floor below!" + + msg_owner_grab_success = "You pin %prey down on the ground with your front leg before using your other leg to pick them up, trapping them between two of your front legs!" + msg_prey_grab_success = "%owner pins you down on the ground with their front leg before using their other leg to pick you up, trapping you between two of their front legs!" + + msg_owner_grab_fail = "You step down onto %prey, squishing them and forcing them down to the ground!" + msg_prey_grab_fail = "%owner steps down and squishes you with their leg, forcing you down to the ground!" diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm index 54fc47392ec..29e7d86fe16 100644 --- a/code/modules/vore/resizing/resize_vr.dm +++ b/code/modules/vore/resizing/resize_vr.dm @@ -129,6 +129,8 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 else return 0; // Unable to scoop, let other code run +#define STEP_TEXT_OWNER(x) "[replacetext(x,"%prey",tmob)]" +#define STEP_TEXT_PREY(x) "[replacetext(x,"%owner",src)]" /** * Handle bumping into someone with helping intent. * Called from /mob/living/Bump() in the 'brohugs all around' section. @@ -136,197 +138,236 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 * // TODO - can the now_pushing = 0 be moved up? What does it do anyway? */ /mob/living/proc/handle_micro_bump_helping(var/mob/living/tmob) + + //Both small! Go ahead and go. if(src.get_effective_size() <= RESIZE_A_SMALLTINY && tmob.get_effective_size() <= RESIZE_A_SMALLTINY) - // Both small! Go ahead and now_pushing = 0 return 1 - if(abs(src.get_effective_size() - tmob.get_effective_size()) >= 0.50) + + //Worthy of doing messages at all + if(abs(get_effective_size() - tmob.get_effective_size()) >= 0.50) now_pushing = 0 - if(src.get_effective_size() > tmob.get_effective_size()) + + //Smaller person being stepped onto + if(get_effective_size() > tmob.get_effective_size() && ishuman(src)) var/mob/living/carbon/human/H = src if(H.flying) return 1 //Silently pass without a message. - if(istype(H) && (istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/slug))) - src << "You carefully slither around [tmob]." - tmob << "[src]'s huge tail slithers past beside you!" + if(isTaurTail(H.tail_style)) + var/datum/sprite_accessory/tail/taur/tail = H.tail_style + to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_help_run)) + to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_help_run)) else - src << "You carefully step over [tmob]." - tmob << "[src] steps over you carefully!" - if(tmob.get_effective_size() > src.get_effective_size()) + to_chat(src,"You carefully step over [tmob].") + to_chat(tmob,"[src] steps over you carefully!") + + //Smaller person stepping under larger person + else if(tmob.get_effective_size() > get_effective_size() && ishuman(tmob)) var/mob/living/carbon/human/H = tmob - if(istype(H) && (istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/slug))) - src << "You jump over [tmob]'s thick tail." - tmob << "[src] bounds over your tail." - else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/tents)) - src << "You run between [tmob]'s tentacles." - tmob << "[src] runs between your tentacles." + if(isTaurTail(H.tail_style)) + var/datum/sprite_accessory/tail/taur/tail = H.tail_style + to_chat(src,STEP_TEXT_OWNER(tail.msg_prey_stepunder)) + to_chat(tmob,STEP_TEXT_PREY(tail.msg_owner_stepunder)) else - src << "You run between [tmob]'s legs." - tmob << "[src] runs between your legs." - return 1 + to_chat(src,"You run between [tmob]'s legs.") + to_chat(tmob,"[src] runs between your legs.") + return 1 /** * Handle bumping into someone without mutual help intent. * Called from /mob/living/Bump() - * NW was here, adding even more options for stomping! * * @return false if normal code should continue, 1 to prevent normal code. */ /mob/living/proc/handle_micro_bump_other(var/mob/living/tmob) - ASSERT(istype(tmob)) // Baby don't hurt me + ASSERT(istype(tmob)) + + //If they're flying, don't do any special interactions. if(ishuman(src)) var/mob/living/carbon/human/P = src - if(P.flying) //If they're flying, don't do any special interactions. + if(P.flying) return + + //If the prey is flying, don't smush them. if(ishuman(tmob)) var/mob/living/carbon/human/D = tmob - if(D.flying) //if the prey is flying, don't smush them. + if(D.flying) return - if(src.a_intent == I_DISARM && src.canmove && !src.buckled) - // If bigger than them by at least 0.75, move onto them and print message. - if((src.get_effective_size() - tmob.get_effective_size()) >= 0.75) - now_pushing = 0 - src.forceMove(tmob.loc) - if(src.m_intent == "run") //Running down the hallway with disarm intent? - tmob.resting = 1 //Force them down to the ground. - var/mob/living/carbon/human/H = src - if(istype(H) && (istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/slug))) - src << "Your tail slides over [tmob], pushing them down to the ground!" - tmob << "[src]'s tail slides over you, forcing you down to the ground!" - else if(istype(H) && (istype(H.tail_style, /datum/sprite_accessory/tail/taur/spider) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/centipede) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/alraune))) - src << "You quickly push [tmob] to the ground with your leg!" - tmob << "[src] pushes you down to the ground with their leg!" - else if(istype(H) && (istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/cow))) - src << "You quickly push [tmob] to the ground with your hoof!" - tmob << "[src] pushes you down to the ground with their hoof!" - else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse)) - src << "You quickly push [tmob] to the ground with some of your tentacles!" - tmob << "[src] pushes you down to the ground with some of their tentacles!" + //They can't be stepping on anyone + if(!canmove || buckled) + return + + //Test/set if human + var/mob/living/carbon/human/H + if(ishuman(src)) + H = src + + var/mob/living/carbon/human/Ht + if(ishuman(tmob)) + Ht = tmob + + //Depending on intent... + switch(a_intent) + + //src stepped on someone with disarm intent + if(I_DISARM) + // If bigger than them by at least 0.75, move onto them and print message. + if((get_effective_size() - tmob.get_effective_size()) >= 0.75) + now_pushing = 0 + forceMove(tmob.loc) + + //Running on I_DISARM + if(m_intent == "run") + tmob.resting = 1 //Force them down to the ground. + + //Log it for admins (as opposed to walk which logs damage) + admin_attack_log(src, tmob, "Pinned [tmob.name] under foot.", "Was pinned under foot by [src.name].", "Pinned [tmob.name] under foot.") + + //Not a human, or not a taur, generic message only + if(!H || !isTaurTail(H.tail_style)) + to_chat(src,"You quickly push [tmob] to the ground with your foot!") + to_chat(tmob,"[src] pushes you down to the ground with their foot!") + + //Human with taur tail, special messages are sent + else + var/datum/sprite_accessory/tail/taur/tail = H.tail_style + to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_disarm_run)) + to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_disarm_run)) + + //Walking on I_DISARM else - src << "You quickly push [tmob] to the ground with your foot!" - tmob << "[src] pushes you down to the ground with their foot!" - admin_attack_log(src, tmob, "Pinned [tmob.name] under foot.", "Was pinned under foot by [src.name].", "Pinned [tmob.name] under foot.") - return 1 - if(src.m_intent == "walk") //Most likely intentionally stepping on them. - var/size_damage_multiplier = (src.size_multiplier - tmob.size_multiplier) - var/damage = (rand(15,30)* size_damage_multiplier) //Since stunned is broken, let's do this. Rand 15-30 multiplied by 1 min or 1.75 max. 15 holo to 52.5 holo, depending on RNG and size differnece. - tmob.apply_damage(damage, HALLOSS) - tmob.resting = 1 - var/mob/living/carbon/human/H = src - admin_attack_log(src, tmob, "Pinned [tmob.name] under foot for [damage] HALLOSS.", "Was pinned under foot by [src.name] for [damage] HALLOSS.", "Pinned [tmob.name] under foot for [damage] HALLOSS.") - if(istype(H) && (istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/slug))) - src << "You push down on [tmob] with your tail, pinning them down under you!" - tmob << "[src] pushes down on you with their tail, pinning you down below them!" - else if(istype(H) && (istype(H.tail_style, /datum/sprite_accessory/tail/taur/spider) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/centipede) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/alraune))) - src << "You firmly push your leg down on [tmob], painfully but harmlessly pinning them to the ground!" - tmob << "[src] firmly pushes their leg down on you, quite painfully but harmlessly pinning you to the ground!" - else if(istype(H) && (istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/cow))) - src << "You firmly push your hoof down on [tmob], painfully but harmlessly pinning them to the ground!" - tmob << "[src] firmly pushes their hoof down on you, quite painfully but harmlessly pinning you to the ground!" - else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/tents)) - src << "You push down on [tmob] with some of your tentacles, pinning them down firmly under you!" - tmob << "[src] pushes down on you with some of their tentacles, pinning you down firmly below them!" - else - src << "You firmly push your foot down on [tmob], painfully but harmlessly pinning them to the ground!" - tmob << "[src] firmly pushes their foot down on you, quite painfully but harmlessly pinning you to the ground!" + //Perform some HALLOSS damage to the smaller. + var/size_damage_multiplier = (src.size_multiplier - tmob.size_multiplier) + var/damage = (rand(15,30)* size_damage_multiplier) //Since stunned is broken, let's do this. Rand 15-30 multiplied by 1 min or 1.75 max. 15 holo to 52.5 holo, depending on RNG and size differnece. + tmob.apply_damage(damage, HALLOSS) + tmob.resting = 1 + //Log it for admins (as opposed to run which logs no damage) + admin_attack_log(src, tmob, "Pinned [tmob.name] under foot for [damage] HALLOSS.", "Was pinned under foot by [src.name] for [damage] HALLOSS.", "Pinned [tmob.name] under foot for [damage] HALLOSS.") - if(src.a_intent == I_HURT && src.canmove && !src.buckled) - if((src.get_effective_size() - tmob.get_effective_size()) >= 0.75) - now_pushing = 0 - src.forceMove(tmob.loc) - var/size_damage_multiplier = (src.size_multiplier - tmob.size_multiplier) - var/damage = (rand(1,3)* size_damage_multiplier) //Rand 1-3 multiplied by 1 min or 1.75 max. 1 min 5.25 max damage to each limb. - var/calculated_damage = damage/2 //This will sting, but not kill. Does .5 to 2.625 damage, randomly, to each limb. + //Not a human, or not a taur, generic message only + if(!H || !isTaurTail(H.tail_style)) + to_chat(src,"You firmly push your foot down on [tmob], painfully but harmlessly pinning them to the ground!") + to_chat(tmob,"[src] firmly pushes their foot down on you, quite painfully but harmlessly pinning you to the ground!") - if(src.m_intent == "run") - var/mob/living/carbon/human/H = src - if(istype(tmob,/mob/living/carbon/human)) - var/mob/living/carbon/human/M = tmob - for(var/obj/item/organ/external/I in M.organs) - I.take_damage(calculated_damage, 0) // 5 damage min, 26.25 damage max, depending on size & RNG. If they're only stepped on once, the damage will heal over time. - M.drip(0.1) - admin_attack_log(src, M, "crushed [tmob.name] under foot for [damage * 10] damage.", "Was crushed under foot by [H.name] for [damage * 10] damage.", "Crushed [M.name] for [damage * 10] damage.") - if(istype(H) && (istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/slug))) - src << "Your heavy tail carelessly slides past [tmob], crushing them!" - tmob << "[src] quickly goes over your body, carelessly crushing you with their heavy tail!" - else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/tents)) - src << "Your tentacles carelessly slide past [tmob], crushing them!" - tmob << "[src] quickly goes over your body, carelessly crushing you with their tentacles!" - else - src << "You carelessly step down onto [tmob], crushing them!" - tmob << "[src] steps carelessly on your body, crushing you!" - return 1 + //Human with taur tail, special messages are sent + else + var/datum/sprite_accessory/tail/taur/tail = H.tail_style + to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_disarm_walk)) + to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_disarm_walk)) - if(src.m_intent == "walk") //Oh my. - damage = calculated_damage * 3.5 //Multiplies the above damage by 3.5. This means a min of 1.75 damage, or a max of 9.1875. damage to each limb, depending on size and RNG. - var/mob/living/carbon/human/H = src - if(istype(tmob,/mob/living/carbon/human)) - var/mob/living/carbon/human/M = tmob - for(var/obj/item/organ/I in M.organs) - I.take_damage(calculated_damage, 0) - M.drip(3) - admin_attack_log(src, M, "Crushed [M.name] under foot for [damage * 10] damage.", "Was crushed under foot by [H.name] for [damage * 10] damage.", "Crushed [M.name] for [damage * 10] damage.") - if(istype(H) && (istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/slug))) - src << "Your heavy tail slowly and methodically slides down upon [tmob], crushing against the floor below!" - tmob << "[src]'s thick, heavy tail slowly and methodically slides down upon your body, mercilessly crushing you into the floor below!" - else if(istype(H) && (istype(H.tail_style, /datum/sprite_accessory/tail/taur/spider) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/centipede) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/alraune))) - src << "You methodically place your leg down upon [tmob]'s body, slowly applying pressure, crushing them against the floor below!" - tmob << "[src] methodically places their leg upon your body, slowly applying pressure, crushing you against the floor below!" - else if(istype(H) && (istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/cow))) - src << "You methodically place your hoof down upon [tmob]'s body, slowly applying pressure, crushing them against the floor below!" - tmob << "[src] methodically places their hoof upon your body, slowly applying pressure, crushing you against the floor below!" - else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/tents)) - src << "Your tentacles methodically apply pressure on [tmob]'s body, crushing them against the floor below!" - tmob << "[src]'s thick tentacles methodically apply pressure on your body, crushing you into the floor below!" - else - src << "You methodically place your foot down upon [tmob]'s body, slowly applying pressure, crushing them against the floor below!" - tmob << "[src] methodically places their foot upon your body, slowly applying pressure, crushing you against the floor below!" - return 1 + //Return true, the sizediff was enough that we handled it. + return TRUE - if(src.a_intent == I_GRAB && src.canmove && !src.buckled) - if((src.get_effective_size() - tmob.get_effective_size()) >= 0.50) - now_pushing = 0 - src.forceMove(tmob.loc) - - var/mob/living/carbon/human/H = src - if(istype(H) && !H.shoes) - // User is a human (capable of scooping) and not wearing shoes! Scoop into foot slot! - equip_to_slot_if_possible(tmob.get_scooped(H), slot_shoes, 0, 1) - if(istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/slug)) - src << "You slither over [tmob] with your large, thick tail, smushing them against the ground before coiling up around them, trapping them within the tight confines of your tail!" - tmob << "[src] slithers over you with their large, thick tail, smushing you against the ground before coiling up around you, trapping you within the tight confines of their tail!" - else if(istype(H.tail_style, /datum/sprite_accessory/tail/taur/spider) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/centipede) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/alraune)) - src << "You pin [tmob] down on the ground with your front leg before using your other leg to pick them up, trapping them between two of your front legs!" - tmob << "[src] pins you down on the ground with their front leg before using their other leg to pick you up, trapping you between two of their front legs!" - else if(istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/cow)) //this is placeholder till someone gets better idea - src << "You pin [tmob] to the ground before scooping them up with your hooves!" - tmob << "[src] pins you to the ground before scooping you up with their hooves!" - else if (istype(H.tail_style, /datum/sprite_accessory/tail/taur/tents)) - src << "You slide over [tmob] with your tentacles, smushing them against the ground before wrapping one up around them, trapping them within the tight confines of your tentacles!" - tmob << "[src] slides over you with their tentacles, smushing you against the ground before wrapping one up around you, trapping you within the tight confines of their tentacles!" - else - src << "You pin [tmob] down onto the floor with your foot and curl your toes up around their body, trapping them inbetween them!" - tmob << "[src] pins you down to the floor with their foot and curls their toes up around your body, trapping you inbetween them!" - else if(istype(H) && (istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/slug))) - src << "You squish [tmob] under your large, thick tail, forcing them onto the ground!" - tmob << "[src] pins you under their large, thick tail, forcing you onto the ground!" - tmob.resting = 1 - else if(istype(H) && (istype(H.tail_style, /datum/sprite_accessory/tail/taur/spider) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/centipede) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/alraune))) - src << "You step down onto [tmob], squishing them and forcing them down to the ground!" - tmob << "[src] steps down and squishes you with their leg, forcing you down to the ground!" - tmob.resting = 1 - else if(istype(H) && (istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse) || istype(H.tail_style, /datum/sprite_accessory/tail/taur/cow))) - src << "You step down onto [tmob], squishing them and forcing them down to the ground!" - tmob << "[src] steps down and squishes you with their hoof, forcing you down to the ground!" - tmob.resting = 1 - else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/tents)) - src << "You step down onto [tmob] with one of your tentacles, forcing them onto the ground!" - tmob << "[src] steps down onto you with one of your tentacles, squishing you and forcing you onto the ground!" - tmob.resting = 1 + //Not enough sizediff for I_DISARM to do anything. else - src << "You step down onto [tmob], squishing them and forcing them down to the ground!" - tmob << "[src] steps down and squishes you with their foot, forcing you down to the ground!" + return FALSE + + //src stepped on someone with harm intent + if(I_HURT) + // If bigger than them by at least 0.75, move onto them and print message. + if((get_effective_size() - tmob.get_effective_size()) >= 0.75) + now_pushing = 0 + forceMove(tmob.loc) + + //Precalculate base damage + var/size_damage_multiplier = (src.size_multiplier - tmob.size_multiplier) + var/damage = (rand(1,3)* size_damage_multiplier) //Rand 1-3 multiplied by 1 min or 1.75 max. 1 min 5.25 max damage to each limb. + var/calculated_damage = damage/2 //This will sting, but not kill. Does .5 to 2.625 damage, randomly, to each limb. + + //Running on I_HURT + if(m_intent == "run") + + //Not a human, or not a taur, generic message only + if(!H || !isTaurTail(H.tail_style)) + to_chat(src,"You carelessly step down onto [tmob], crushing them!") + to_chat(tmob,"[src] steps carelessly on your body, crushing you!") + + //Human with taur tail, special messages are sent + else + var/datum/sprite_accessory/tail/taur/tail = H.tail_style + to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_harm_run)) + to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_harm_run)) + + //If they are a human, do damage (doesn't hurt other mobs...?) + if(Ht) + for(var/obj/item/organ/external/I in Ht.organs) + I.take_damage(calculated_damage, 0) // 5 damage min, 26.25 damage max, depending on size & RNG. If they're only stepped on once, the damage will (probably not...) heal over time. + Ht.drip(0.1) + admin_attack_log(src, Ht, "crushed [Ht] under foot for [calculated_damage * 11] damage.", "Was crushed under foot by [Ht] for [calculated_damage * 11] damage.", "Crushed [Ht] for [damage * 10] damage.") + + //Walking on I_HURT + else + //Multiplies the above damage by 3.5. This means a min of 1.75 damage, or a max of 9.1875. damage to each limb, depending on size and RNG. + calculated_damage *= 3.5 + + //If they are a human, do damage (doesn't hurt other mobs...?) + if(Ht) + for(var/obj/item/organ/I in Ht.organs) + I.take_damage(calculated_damage, 0) + Ht.drip(3) + admin_attack_log(src, Ht, "Crushed [Ht] under foot for [calculated_damage * 11] damage.", "Was crushed under foot by [Ht] for [calculated_damage * 11] damage.", "Crushed [Ht] for [calculated_damage * 11] damage.") + + //Not a human, or not a taur, generic message only + if(!H || !isTaurTail(H.tail_style)) + to_chat(src,"You methodically place your foot down upon [tmob]'s body, slowly applying pressure, crushing them against the floor below!") + to_chat(tmob,"[src] methodically places their foot upon your body, slowly applying pressure, crushing you against the floor below!") + + //Human with taur tail, special messages are sent + else + var/datum/sprite_accessory/tail/taur/tail = H.tail_style + to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_harm_walk)) + to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_harm_walk)) + + //Return true, the sizediff was enough that we handled it. + return TRUE + + //Not enough sizediff for I_HURT to do anything. + else + return FALSE + + //src stepped on someone with grab intent + if(I_GRAB) + // If bigger than them by at least 0.50, move onto them and print message. + if((get_effective_size() - tmob.get_effective_size()) >= 0.50) + now_pushing = 0 tmob.resting = 1 - return 1 + forceMove(tmob.loc) + + //Log it for admins (still a mechanical attack due to the pin) + admin_attack_log(src, tmob, "Pinned (grab w/ shoes) [tmob.name] under foot.", "Was pinned (grab w/ shoes) under foot by [src.name].", "Pinned (grab w/ shoes) [tmob.name] under foot.") + + //Not a human, or not a taur while wearing shoes = no grab + if(!H || (!isTaurTail(H.tail_style) && H.shoes)) + to_chat(src,"You step down onto [tmob], squishing them and forcing them down to the ground!") + to_chat(tmob,"[src] steps down and squishes you with their foot, forcing you down to the ground!") + + //Human, not a taur, but not wearing shoes = yes grab + else if(H && (!isTaurTail(H.tail_style) && !H.shoes)) + to_chat(src,"You pin [tmob] down onto the floor with your foot and curl your toes up around their body, trapping them inbetween them!") + to_chat(tmob,"[src] pins you down to the floor with their foot and curls their toes up around your body, trapping you inbetween them!") + equip_to_slot_if_possible(tmob.get_scooped(H), slot_shoes, 0, 1) + + //Human, taur, shoes = no grab, special message + else if(H.shoes) + var/datum/sprite_accessory/tail/taur/tail = H.tail_style + to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_grab_fail)) + to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_grab_fail)) + + //Human, taur, no shoes = yes grab, special message + else + var/datum/sprite_accessory/tail/taur/tail = H.tail_style + to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_grab_success)) + to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_grab_success)) + equip_to_slot_if_possible(tmob.get_scooped(H), slot_shoes, 0, 1) + + //Return true, the sizediff was enough that we handled it. + return TRUE + + //Not enough sizediff for I_GRAB to do anything. + else + return FALSE + +#undef STEP_TEXT_OWNER +#undef STEP_TEXT_PREY \ No newline at end of file