137 lines
4.7 KiB
Plaintext
137 lines
4.7 KiB
Plaintext
|
|
/mob/living/silicon/grippedby(mob/living/user, instant = FALSE)
|
|
return //can't upgrade a simple pull into a more aggressive grab.
|
|
|
|
/mob/living/silicon/get_ear_protection()//no ears
|
|
return 2
|
|
|
|
/mob/living/silicon/attack_alien(mob/living/carbon/alien/humanoid/M)
|
|
. = ..()
|
|
if(!.) // the attack was blocked or was help/grab intent
|
|
return
|
|
if(M.a_intent == INTENT_HARM)
|
|
var/damage = 20
|
|
if (prob(90))
|
|
log_combat(M, src, "attacked")
|
|
playsound(loc, 'sound/weapons/slash.ogg', 25, 1, -1)
|
|
visible_message("<span class='danger'>[M] has slashed at [src]!</span>", \
|
|
"<span class='userdanger'>[M] has slashed at [src]!</span>")
|
|
if(prob(8))
|
|
flash_act(affect_silicon = 1)
|
|
log_combat(M, src, "attacked")
|
|
adjustBruteLoss(damage)
|
|
updatehealth()
|
|
else
|
|
playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1)
|
|
visible_message("<span class='danger'>[M] took a swipe at [src]!</span>", \
|
|
"<span class='userdanger'>[M] took a swipe at [src]!</span>")
|
|
|
|
/mob/living/silicon/attack_animal(mob/living/simple_animal/M)
|
|
. = ..()
|
|
if(.)
|
|
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
|
|
if(prob(damage))
|
|
for(var/mob/living/N in buckled_mobs)
|
|
N.Knockdown(20)
|
|
unbuckle_mob(N)
|
|
N.visible_message("<span class='boldwarning'>[N] is knocked off of [src] by [M]!</span>")
|
|
switch(M.melee_damage_type)
|
|
if(BRUTE)
|
|
adjustBruteLoss(damage)
|
|
if(BURN)
|
|
adjustFireLoss(damage)
|
|
if(TOX)
|
|
adjustToxLoss(damage)
|
|
if(OXY)
|
|
adjustOxyLoss(damage)
|
|
if(CLONE)
|
|
adjustCloneLoss(damage)
|
|
if(STAMINA)
|
|
adjustStaminaLoss(damage)
|
|
|
|
/mob/living/silicon/attack_paw(mob/living/user)
|
|
return attack_hand(user)
|
|
|
|
/mob/living/silicon/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE)
|
|
if(user.a_intent == INTENT_HARM)
|
|
. = ..(user, TRUE)
|
|
if(.)
|
|
return
|
|
adjustBruteLoss(rand(10, 15))
|
|
playsound(loc, "punch", 25, 1, -1)
|
|
visible_message("<span class='danger'>[user] has punched [src]!</span>", \
|
|
"<span class='userdanger'>[user] has punched [src]!</span>")
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/mob/living/silicon/attack_hand(mob/living/carbon/human/M)
|
|
. = ..()
|
|
if(.) //the attack was blocked
|
|
return
|
|
switch(M.a_intent)
|
|
if (INTENT_HELP)
|
|
M.visible_message("[M] pets [src].", \
|
|
"<span class='notice'>You pet [src].</span>")
|
|
if(INTENT_GRAB)
|
|
grabbedby(M)
|
|
else
|
|
M.do_attack_animation(src, ATTACK_EFFECT_PUNCH)
|
|
playsound(src.loc, 'sound/effects/bang.ogg', 10, 1)
|
|
visible_message("<span class='danger'>[M] punches [src], but doesn't leave a dent.</span>", \
|
|
"<span class='warning'>[M] punches [src], but doesn't leave a dent.</span>", null, COMBAT_MESSAGE_RANGE)
|
|
|
|
/mob/living/silicon/attack_drone(mob/living/simple_animal/drone/M)
|
|
if(M.a_intent == INTENT_HARM)
|
|
return
|
|
return ..()
|
|
|
|
/mob/living/silicon/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, tesla_shock = 0, illusion = 0, stun = TRUE)
|
|
if(buckled_mobs)
|
|
for(var/mob/living/M in buckled_mobs)
|
|
unbuckle_mob(M)
|
|
M.electrocute_act(shock_damage/100, source, siemens_coeff, safety, tesla_shock, illusion, stun) //Hard metal shell conducts!
|
|
return 0 //So borgs they don't die trying to fix wiring
|
|
|
|
/mob/living/silicon/emp_act(severity)
|
|
. = ..()
|
|
to_chat(src, "<span class='danger'>Warning: Electromagnetic pulse detected.</span>")
|
|
if(. & EMP_PROTECT_SELF)
|
|
return
|
|
switch(severity)
|
|
if(1)
|
|
src.take_bodypart_damage(20)
|
|
if(2)
|
|
src.take_bodypart_damage(10)
|
|
to_chat(src, "<span class='userdanger'>*BZZZT*</span>")
|
|
for(var/mob/living/M in buckled_mobs)
|
|
if(prob(severity*50))
|
|
unbuckle_mob(M)
|
|
M.Knockdown(40)
|
|
M.visible_message("<span class='boldwarning'>[M] is thrown off of [src]!</span>")
|
|
flash_act(affect_silicon = 1)
|
|
|
|
/mob/living/silicon/bullet_act(obj/item/projectile/P, def_zone)
|
|
if(P.original != src || P.firer != src) //try to block or reflect the bullet, can't do so when shooting oneself
|
|
if(reflect_bullet_check(P, def_zone))
|
|
return -1 // complete projectile permutation
|
|
if(check_shields(P, P.damage, "the [P.name]", PROJECTILE_ATTACK, P.armour_penetration))
|
|
P.on_hit(src, 100, def_zone)
|
|
return 2
|
|
if((P.damage_type == BRUTE || P.damage_type == BURN))
|
|
adjustBruteLoss(P.damage)
|
|
if(prob(P.damage*1.5))
|
|
for(var/mob/living/M in buckled_mobs)
|
|
M.visible_message("<span class='boldwarning'>[M] is knocked off of [src]!</span>")
|
|
unbuckle_mob(M)
|
|
M.Knockdown(40)
|
|
if(P.stun || P.knockdown)
|
|
for(var/mob/living/M in buckled_mobs)
|
|
unbuckle_mob(M)
|
|
M.visible_message("<span class='boldwarning'>[M] is knocked off of [src] by the [P]!</span>")
|
|
P.on_hit(src)
|
|
return BULLET_ACT_HIT
|
|
|
|
/mob/living/silicon/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash/static)
|
|
if(affect_silicon)
|
|
return ..()
|