mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-05 22:43:46 +00:00
About The Pull Request Dragging prone mobs (resting, knocked down, stunned, dead, in crit, etc) that aren't buckled to anything slows you down. You can fireman carry by aggressive grabbing then click dragging onto yourself. This causes a slight speed penalty that is lower than dragging. Why It's Good For The Game Prevents the classic "stun and beat the shit out of while zipping off" which is obnoxious and I don't think anybody likes besides the people who do it. Makes it so if you feel like being a cunt you can rest while being arrested to make you a pain to take back. Makes it harder to steal bodies and move away before anybody can properly react, but makes dragging bodies riskier at the same time Fireman carrying adds an element of risk reward, it takes a little while of standing still to pick them up and also slows you down slightly. More useful to move someone a long distance out of a relatively safe area than a quick pull away. Changelog cl add: fireman carrying. Aggressive grab then click drag onto yourself. tweak: pulling prone mobs slows you down. tweak: carrying another human slows you down. tweak: pacifists can aggressive grab. /cl
105 lines
3.2 KiB
Plaintext
105 lines
3.2 KiB
Plaintext
/datum/component/footstep
|
|
var/steps = 0
|
|
var/volume
|
|
var/e_range
|
|
|
|
/datum/component/footstep/Initialize(volume_ = 0.5, e_range_ = -1)
|
|
if(!isliving(parent))
|
|
return COMPONENT_INCOMPATIBLE
|
|
volume = volume_
|
|
e_range = e_range_
|
|
RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/play_footstep)
|
|
|
|
/datum/component/footstep/proc/play_footstep()
|
|
var/turf/open/T = get_turf(parent)
|
|
if(!istype(T))
|
|
return
|
|
|
|
var/mob/living/LM = parent
|
|
var/v = volume
|
|
var/e = e_range
|
|
if(!T.footstep || LM.buckled || LM.lying || !CHECK_MULTIPLE_BITFIELDS(LM.mobility_flags, MOBILITY_STAND | MOBILITY_MOVE) || LM.throwing || LM.movement_type & (VENTCRAWLING | FLYING))
|
|
if (LM.lying && !LM.buckled && !(!T.footstep || LM.movement_type & (VENTCRAWLING | FLYING))) //play crawling sound if we're lying
|
|
playsound(T, 'sound/effects/footstep/crawl1.ogg', 15 * v)
|
|
return
|
|
|
|
if(iscarbon(LM))
|
|
var/mob/living/carbon/C = LM
|
|
if(!C.get_bodypart(BODY_ZONE_L_LEG) && !C.get_bodypart(BODY_ZONE_R_LEG))
|
|
return
|
|
if(ishuman(C) && C.m_intent == MOVE_INTENT_WALK)
|
|
v /= 2
|
|
e -= 5
|
|
steps++
|
|
|
|
if(steps >= 6)
|
|
steps = 0
|
|
|
|
if(steps % 2)
|
|
return
|
|
|
|
if(!LM.has_gravity(T) && steps != 0) // don't need to step as often when you hop around
|
|
return
|
|
|
|
//begin playsound shenanigans//
|
|
|
|
//for barefooted non-clawed mobs like monkeys
|
|
if(isbarefoot(LM))
|
|
playsound(T, pick(GLOB.barefootstep[T.barefootstep][1]),
|
|
GLOB.barefootstep[T.barefootstep][2] * v,
|
|
TRUE,
|
|
GLOB.barefootstep[T.barefootstep][3] + e)
|
|
return
|
|
|
|
//for xenomorphs, dogs, and other clawed mobs
|
|
if(isclawfoot(LM))
|
|
if(isalienadult(LM)) //xenos are stealthy and get quieter footsteps
|
|
v /= 3
|
|
e -= 5
|
|
|
|
playsound(T, pick(GLOB.clawfootstep[T.clawfootstep][1]),
|
|
GLOB.clawfootstep[T.clawfootstep][2] * v,
|
|
TRUE,
|
|
GLOB.clawfootstep[T.clawfootstep][3] + e)
|
|
return
|
|
|
|
//for megafauna and other large and imtimidating mobs such as the bloodminer
|
|
if(isheavyfoot(LM))
|
|
playsound(T, pick(GLOB.heavyfootstep[T.heavyfootstep][1]),
|
|
GLOB.heavyfootstep[T.heavyfootstep][2] * v,
|
|
TRUE,
|
|
GLOB.heavyfootstep[T.heavyfootstep][3] + e)
|
|
return
|
|
|
|
//for slimes
|
|
if(isslime(LM))
|
|
playsound(T, 'sound/effects/footstep/slime1.ogg', 15 * v)
|
|
return
|
|
|
|
//for (simple) humanoid mobs (clowns, russians, pirates, etc.)
|
|
if(isshoefoot(LM))
|
|
if(!ishuman(LM))
|
|
playsound(T, pick(GLOB.footstep[T.footstep][1]),
|
|
GLOB.footstep[T.footstep][2] * v,
|
|
TRUE,
|
|
GLOB.footstep[T.footstep][3] + e)
|
|
return
|
|
if(ishuman(LM)) //for proper humans, they're special
|
|
var/mob/living/carbon/human/H = LM
|
|
var/feetCover = (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)) || (H.w_uniform && (H.w_uniform.body_parts_covered & FEET))
|
|
|
|
if(H.shoes || feetCover) //are we wearing shoes
|
|
playsound(T, pick(GLOB.footstep[T.footstep][1]),
|
|
GLOB.footstep[T.footstep][2] * v,
|
|
TRUE,
|
|
GLOB.footstep[T.footstep][3] + e)
|
|
|
|
if((!H.shoes && !feetCover)) //are we NOT wearing shoes
|
|
if(H.dna.species.special_step_sounds)
|
|
playsound(T, pick(H.dna.species.special_step_sounds), 50, TRUE)
|
|
else
|
|
playsound(T, pick(GLOB.barefootstep[T.barefootstep][1]),
|
|
GLOB.barefootstep[T.barefootstep][2] * v,
|
|
TRUE,
|
|
GLOB.barefootstep[T.barefootstep][3] + e)
|