mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-17 19:07:26 +01:00
@@ -555,12 +555,11 @@
|
||||
visible_message(SPAN_DANGER("[user] has [attack_message] [src]!"))
|
||||
|
||||
var/dam_zone = user.zone_sel?.selecting
|
||||
if(!dam_zone)
|
||||
dam_zone = pick(organs)
|
||||
var/obj/item/organ/external/affecting = get_organ(dam_zone)
|
||||
apply_damage(damage, DAMAGE_BRUTE, affecting, armor_pen = armor_penetration, damage_flags = attack_flags)
|
||||
updatehealth()
|
||||
return TRUE
|
||||
var/obj/item/organ/external/affecting = dam_zone ? get_organ(dam_zone) : pick(organs)
|
||||
if(affecting)
|
||||
apply_damage(damage, DAMAGE_BRUTE, affecting, armor_pen = armor_penetration, damage_flags = attack_flags)
|
||||
updatehealth()
|
||||
return affecting
|
||||
|
||||
//Used to attack a joint through grabbing
|
||||
/mob/living/carbon/human/proc/grab_joint(var/mob/living/user, var/def_zone)
|
||||
|
||||
@@ -397,25 +397,22 @@ This function restores all organs.
|
||||
to_chat(src, "<span class='danger'>You are now visible.</span>")
|
||||
src.invisibility = 0
|
||||
|
||||
var/obj/item/organ/external/organ = get_organ(def_zone, TRUE)
|
||||
var/obj/item/organ/external/organ = isorgan(def_zone) ? def_zone : get_organ(def_zone, TRUE)
|
||||
if(!organ)
|
||||
if(isorgan(def_zone))
|
||||
organ = def_zone
|
||||
else
|
||||
if(!def_zone)
|
||||
if(damage_flags & DAMAGE_FLAG_DISPERSED)
|
||||
var/old_damage = damage
|
||||
var/tally
|
||||
silent = TRUE // Will damage a lot of organs, probably, so avoid spam.
|
||||
for(var/zone in organ_rel_size)
|
||||
tally += organ_rel_size[zone]
|
||||
for(var/zone in organ_rel_size)
|
||||
damage = old_damage * organ_rel_size[zone]/tally
|
||||
def_zone = zone
|
||||
. = .() || .
|
||||
return
|
||||
def_zone = ran_zone(def_zone)
|
||||
organ = get_organ(check_zone(def_zone))
|
||||
if(!def_zone)
|
||||
if(damage_flags & DAMAGE_FLAG_DISPERSED)
|
||||
var/old_damage = damage
|
||||
var/tally
|
||||
silent = TRUE // Will damage a lot of organs, probably, so avoid spam.
|
||||
for(var/zone in organ_rel_size)
|
||||
tally += organ_rel_size[zone]
|
||||
for(var/zone in organ_rel_size)
|
||||
damage = old_damage * organ_rel_size[zone]/tally
|
||||
def_zone = zone
|
||||
. = .() || .
|
||||
return
|
||||
def_zone = ran_zone(def_zone)
|
||||
organ = get_organ(check_zone(def_zone))
|
||||
|
||||
//Handle other types of damage
|
||||
if(!(damagetype in list(DAMAGE_BRUTE, DAMAGE_BURN, DAMAGE_PAIN, DAMAGE_CLONE)))
|
||||
|
||||
@@ -103,44 +103,42 @@
|
||||
get_light_and_color(parent)
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/AttackingTarget()
|
||||
/mob/living/simple_animal/hostile/giant_spider/on_attack_mob(var/mob/hit_mob, var/obj/item/organ/external/limb)
|
||||
. = ..()
|
||||
if(isliving(.))
|
||||
var/mob/living/L = .
|
||||
if(L.reagents)
|
||||
L.reagents.add_reagent(/singleton/reagent/toxin, poison_per_bite)
|
||||
if(prob(poison_per_bite) && (!issilicon(L) && !isipc(L)))
|
||||
to_chat(L, "<span class='warning'>You feel a tiny prick.</span>")
|
||||
L.reagents.add_reagent(poison_type, 5)
|
||||
if(isliving(hit_mob) && istype(limb) && !BP_IS_ROBOTIC(limb))
|
||||
var/mob/living/target = hit_mob
|
||||
if(!target.reagents)
|
||||
return
|
||||
var/inject_probability = 100
|
||||
var/list/armors = target.get_armors_by_zone(limb.limb_name, DAMAGE_BRUTE, DAMAGE_FLAG_SHARP)
|
||||
for(var/armor in armors)
|
||||
var/datum/component/armor/armor_datum = armor
|
||||
inject_probability -= armor_datum.armor_values["melee"] * 1.8
|
||||
if(prob(inject_probability))
|
||||
to_chat(target, SPAN_WARNING("You feel a tiny prick."))
|
||||
target.reagents.add_reagent(poison_type, poison_per_bite)
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse/AttackingTarget()
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse/on_attack_mob(var/mob/hit_mob, var/obj/item/organ/external/limb)
|
||||
. = ..()
|
||||
if(ishuman(.))
|
||||
var/mob/living/carbon/human/H = .
|
||||
if(prob(poison_per_bite))
|
||||
var/obj/item/organ/external/O = pick(H.organs)
|
||||
if(!(O.status & (ORGAN_ROBOT|ORGAN_ADV_ROBOT)) && (O.limb_flags & ORGAN_CAN_AMPUTATE))
|
||||
var/eggs = new /obj/effect/spider/eggcluster(O, src)
|
||||
O.implants += eggs
|
||||
to_chat(H, "<span class='warning'>The [src] injects something into your [O.name]!</span>")
|
||||
if(ishuman(hit_mob) && istype(limb) && !BP_IS_ROBOTIC(limb) && prob(poison_per_bite))
|
||||
var/eggs = new /obj/effect/spider/eggcluster(limb, src)
|
||||
limb.implants += eggs
|
||||
to_chat(hit_mob, SPAN_WARNING("\The [src] injects something into your [limb.name]!"))
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/emp/AttackingTarget()
|
||||
/mob/living/simple_animal/hostile/giant_spider/emp/on_attack_mob(var/mob/hit_mob, var/obj/item/organ/external/limb)
|
||||
. = ..()
|
||||
if(ishuman(.))
|
||||
var/mob/living/carbon/human/H = .
|
||||
if(ishuman(hit_mob))
|
||||
var/mob/living/carbon/human/H = hit_mob
|
||||
if(prob(20))
|
||||
if(H.isSynthetic())
|
||||
var/obj/item/organ/internal/cell/cell_holder = locate() in H.internal_organs
|
||||
if(cell_holder)
|
||||
var/obj/item/cell/C = cell_holder.cell
|
||||
if(C)
|
||||
to_chat(H, SPAN_WARNING("\The [src] saps some of your energy!"))
|
||||
C.use(C.maxcharge / 15)
|
||||
if(length(H.organs))
|
||||
var/obj/item/organ/external/O = pick(H.organs)
|
||||
if(O.status & (ORGAN_ROBOT|ORGAN_ADV_ROBOT))
|
||||
H.visible_message(SPAN_WARNING("\The [src] bites down onto \the [H]'s [O.name]!"), SPAN_WARNING("\The [src] bites down onto your [O.name]!"))
|
||||
O.emp_act(2)
|
||||
var/obj/item/organ/internal/cell/cell_holder = locate() in H.internal_organs
|
||||
if(cell_holder)
|
||||
var/obj/item/cell/C = cell_holder.cell
|
||||
if(C)
|
||||
to_chat(H, SPAN_WARNING("\The [src] saps some of your energy!"))
|
||||
C.use(C.maxcharge / 15)
|
||||
if(istype(limb) && HAS_FLAG(limb.status, ORGAN_ROBOT|ORGAN_ADV_ROBOT))
|
||||
H.visible_message(SPAN_WARNING("\The [src] bites down onto \the [H]'s [limb.name]!"), SPAN_WARNING("\The [src] bites down onto your [limb.name]!"))
|
||||
limb.emp_act(2)
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/think()
|
||||
..()
|
||||
|
||||
@@ -187,7 +187,7 @@ mob/living/simple_animal/hostile/hitby(atom/movable/AM as mob|obj,var/speed = TH
|
||||
else
|
||||
return 0
|
||||
|
||||
/mob/living/simple_animal/hostile/proc/on_attack_mob(var/mob/hit_mob)
|
||||
/mob/living/simple_animal/hostile/proc/on_attack_mob(var/mob/hit_mob, var/obj/item/organ/external/limb)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/proc/AttackingTarget()
|
||||
@@ -207,8 +207,7 @@ mob/living/simple_animal/hostile/hitby(atom/movable/AM as mob|obj,var/speed = TH
|
||||
var/atom/target
|
||||
if(isliving(target_mob))
|
||||
var/mob/living/L = target_mob
|
||||
L.attack_generic(src, rand(melee_damage_lower, melee_damage_upper), attacktext, armor_penetration, attack_flags)
|
||||
on_attack_mob(L)
|
||||
on_attack_mob(L, L.attack_generic(src, rand(melee_damage_lower, melee_damage_upper), attacktext, armor_penetration, attack_flags))
|
||||
target = L
|
||||
else if(istype(target_mob, /obj/machinery/bot))
|
||||
var/obj/machinery/bot/B = target_mob
|
||||
|
||||
Reference in New Issue
Block a user