Files
2024-01-05 00:28:56 -03:00

118 lines
5.3 KiB
Plaintext

///Called when a mech melee attacks an atom
/atom/proc/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker)
return
/turf/closed/wall/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker)
mecha_attacker.do_attack_animation(src)
switch(mecha_attacker.damtype)
if(BRUTE)
playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE)
mecha_attacker.visible_message("<span class='danger'>[mecha_attacker.name] hits [src]!</span>", \
"<span class='danger'>You hit [src]!</span>", null, COMBAT_MESSAGE_RANGE)
if(prob(hardness + mecha_attacker.force) && mecha_attacker.force > 20)
dismantle_wall(1)
playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE)
else
add_dent(WALL_DENT_HIT)
if(BURN)
playsound(src, 'sound/items/welder.ogg', 100, TRUE)
if(TOX)
playsound(src, 'sound/effects/spray2.ogg', 100, TRUE)
return FALSE
/obj/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker)
mecha_attacker.do_attack_animation(src)
var/play_soundeffect = 0
var/mech_damtype = mecha_attacker.damtype
if(mecha_attacker.selected)
mech_damtype = mecha_attacker.selected.damtype
play_soundeffect = 1
else
switch(mecha_attacker.damtype)
if(BRUTE)
playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE)
if(BURN)
playsound(src, 'sound/items/welder.ogg', 50, TRUE)
if(TOX)
playsound(src, 'sound/effects/spray2.ogg', 50, TRUE)
return FALSE
else
return FALSE
mecha_attacker.visible_message("<span class='danger'>[mecha_attacker.name] hits [src]!</span>", "<span class='danger'>You hit [src]!</span>", null, COMBAT_MESSAGE_RANGE)
return take_damage(mecha_attacker.force * 3, mech_damtype, MELEE, play_soundeffect, get_dir(src, mecha_attacker)) // multiplied by 3 so we can hit objs hard but not be overpowered against mobs.
/obj/structure/window/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker)
if(!can_be_reached())
return
return ..()
/mob/living/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker, mob/user)
if(user.a_intent == INTENT_HARM)
if(HAS_TRAIT(user, TRAIT_PACIFISM))
to_chat(user, "<span class='warning'>You don't want to harm other living beings!</span>")
return
mecha_attacker.do_attack_animation(src)
if(mecha_attacker.damtype == "brute")
step_away(src, mecha_attacker, 15)
switch(mecha_attacker.damtype)
if(BRUTE)
Unconscious(20)
take_overall_damage(rand(mecha_attacker.force/2, mecha_attacker.force))
playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE)
if(BURN)
take_overall_damage(0, rand(mecha_attacker.force * 0.5, mecha_attacker.force))
playsound(src, 'sound/items/welder.ogg', 50, TRUE)
if(TOX)
mecha_attacker.mech_toxin_damage(src)
else
return
updatehealth()
visible_message("<span class='danger'>[mecha_attacker.name] hits [src]!</span>", \
"<span class='userdanger'>[mecha_attacker.name] hits you!</span>", "<span class='hear'>You hear a sickening sound of flesh hitting flesh!</span>", COMBAT_MESSAGE_RANGE, mecha_attacker)
to_chat(mecha_attacker, "<span class='danger'>You hit [src]!</span>")
log_combat(user, src, "attacked", mecha_attacker, "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(mecha_attacker.damtype)])")
else
step_away(src, mecha_attacker)
log_combat(user, src, "pushed", mecha_attacker)
visible_message("<span class='warning'>[mecha_attacker] pushes [src] out of the way.</span>", \
"<span class='warning'>[mecha_attacker] pushes you out of the way.</span>", "<span class='hear'>You hear aggressive shuffling!</span>", 5, list(mecha_attacker))
to_chat(mecha_attacker, "<span class='danger'>You push [src] out of the way.</span>")
/mob/living/carbon/human/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker, mob/user)
if(user.a_intent == INTENT_HARM)
if(HAS_TRAIT(user, TRAIT_PACIFISM))
to_chat(user, "<span class='warning'>You don't want to harm other living beings!</span>")
return
mecha_attacker.do_attack_animation(src)
if(mecha_attacker.damtype == BRUTE)
step_away(src, mecha_attacker, 15)
var/obj/item/bodypart/temp = get_bodypart(pick(BODY_ZONE_CHEST, BODY_ZONE_CHEST, BODY_ZONE_CHEST, BODY_ZONE_HEAD))
if(temp)
var/update = 0
var/dmg = rand(mecha_attacker.force * 0.5, mecha_attacker.force)
switch(mecha_attacker.damtype)
if(BRUTE)
if(mecha_attacker.force > 35) // durand and other heavy mechas
Unconscious(20)
else if(mecha_attacker.force > 20 && !IsKnockdown()) // lightweight mechas like gygax
Knockdown(40)
update |= temp.receive_damage(dmg, 0)
playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE)
if(BURN)
update |= temp.receive_damage(0, dmg)
playsound(src, 'sound/items/welder.ogg', 50, TRUE)
if(TOX)
mecha_attacker.mech_toxin_damage(src)
else
return
if(update)
update_damage_overlays()
updatehealth()
visible_message("<span class='danger'>[mecha_attacker.name] hits [src]!</span>", \
"<span class='userdanger'>[mecha_attacker.name] hits you!</span>", "<span class='hear'>You hear a sickening sound of flesh hitting flesh!</span>", COMBAT_MESSAGE_RANGE, list(mecha_attacker))
to_chat(mecha_attacker, "<span class='danger'>You hit [src]!</span>")
log_combat(user, src, "attacked", mecha_attacker, "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(mecha_attacker.damtype)])")
else
return ..()