|
|
|
@@ -6,6 +6,7 @@
|
|
|
|
|
lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
|
|
|
|
|
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
|
|
|
|
|
flags_1 = CONDUCT_1
|
|
|
|
|
item_flags = NEEDS_PERMIT | NO_COMBAT_MODE_FORCE_MODIFIER //To avoid ambushing and oneshotting healthy crewmembers on force setting 3.
|
|
|
|
|
attack_verb = list("whacked", "fisted", "power-punched")
|
|
|
|
|
force = 20
|
|
|
|
|
throwforce = 10
|
|
|
|
@@ -13,7 +14,7 @@
|
|
|
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
|
|
|
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 40)
|
|
|
|
|
resistance_flags = FIRE_PROOF
|
|
|
|
|
var/click_delay = 1.5
|
|
|
|
|
click_delay = CLICK_CD_MELEE * 1.5
|
|
|
|
|
var/fisto_setting = 1
|
|
|
|
|
var/gasperfist = 3
|
|
|
|
|
var/obj/item/tank/internals/tank = null //Tank used for the gauntlet's piston-ram.
|
|
|
|
@@ -70,42 +71,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/obj/item/melee/powerfist/attack(mob/living/target, mob/living/user)
|
|
|
|
|
if(!tank)
|
|
|
|
|
to_chat(user, "<span class='warning'>\The [src] can't operate without a source of gas!</span>")
|
|
|
|
|
return
|
|
|
|
|
var/datum/gas_mixture/gasused = tank.air_contents.remove(gasperfist * fisto_setting)
|
|
|
|
|
var/turf/T = get_turf(src)
|
|
|
|
|
if(!T)
|
|
|
|
|
return
|
|
|
|
|
T.assume_air(gasused)
|
|
|
|
|
T.air_update_turf()
|
|
|
|
|
if(!gasused)
|
|
|
|
|
to_chat(user, "<span class='warning'>\The [src]'s tank is empty!</span>")
|
|
|
|
|
target.apply_damage((force / 5), BRUTE)
|
|
|
|
|
playsound(loc, 'sound/weapons/punch1.ogg', 50, 1)
|
|
|
|
|
target.visible_message("<span class='danger'>[user]'s powerfist lets out a dull thunk as [user.p_they()] punch[user.p_es()] [target.name]!</span>", \
|
|
|
|
|
"<span class='userdanger'>[user]'s punches you!</span>")
|
|
|
|
|
return
|
|
|
|
|
if(gasused.total_moles() < gasperfist * fisto_setting)
|
|
|
|
|
to_chat(user, "<span class='warning'>\The [src]'s piston-ram lets out a weak hiss, it needs more gas!</span>")
|
|
|
|
|
playsound(loc, 'sound/weapons/punch4.ogg', 50, 1)
|
|
|
|
|
target.apply_damage((force / 2), BRUTE)
|
|
|
|
|
target.visible_message("<span class='danger'>[user]'s powerfist lets out a weak hiss as [user.p_they()] punch[user.p_es()] [target.name]!</span>", \
|
|
|
|
|
"<span class='userdanger'>[user]'s punch strikes with force!</span>")
|
|
|
|
|
return
|
|
|
|
|
target.apply_damage(force * fisto_setting, BRUTE)
|
|
|
|
|
target.visible_message("<span class='danger'>[user]'s powerfist lets out a loud hiss as [user.p_they()] punch[user.p_es()] [target.name]!</span>", \
|
|
|
|
|
"<span class='userdanger'>You cry out in pain as [user]'s punch flings you backwards!</span>")
|
|
|
|
|
new /obj/effect/temp_visual/kinetic_blast(target.loc)
|
|
|
|
|
playsound(loc, 'sound/weapons/resonator_blast.ogg', 50, 1)
|
|
|
|
|
playsound(loc, 'sound/weapons/genhit2.ogg', 50, 1)
|
|
|
|
|
if(HAS_TRAIT(user, TRAIT_PACIFISM))
|
|
|
|
|
to_chat(user, "<span class='warning'>You don't want to harm other living beings!</span>")
|
|
|
|
|
return FALSE
|
|
|
|
|
if(!tank)
|
|
|
|
|
to_chat(user, "<span class='warning'>\The [src] can't operate without a source of gas!</span>")
|
|
|
|
|
return FALSE
|
|
|
|
|
var/datum/gas_mixture/gasused = tank.air_contents.remove(gasperfist * fisto_setting)
|
|
|
|
|
var/turf/T = get_turf(src)
|
|
|
|
|
if(!T)
|
|
|
|
|
return FALSE
|
|
|
|
|
var/totalitemdamage = target.pre_attacked_by(src, user)
|
|
|
|
|
T.assume_air(gasused)
|
|
|
|
|
T.air_update_turf()
|
|
|
|
|
if(!gasused)
|
|
|
|
|
to_chat(user, "<span class='warning'>\The [src]'s tank is empty!</span>")
|
|
|
|
|
target.apply_damage((totalitemdamage / 5), BRUTE)
|
|
|
|
|
playsound(loc, 'sound/weapons/punch1.ogg', 50, 1)
|
|
|
|
|
target.visible_message("<span class='danger'>[user]'s powerfist lets out a dull thunk as [user.p_they()] punch[user.p_es()] [target.name]!</span>", \
|
|
|
|
|
"<span class='userdanger'>[user]'s punches you!</span>")
|
|
|
|
|
return
|
|
|
|
|
if(gasused.total_moles() < gasperfist * fisto_setting)
|
|
|
|
|
to_chat(user, "<span class='warning'>\The [src]'s piston-ram lets out a weak hiss, it needs more gas!</span>")
|
|
|
|
|
playsound(loc, 'sound/weapons/punch4.ogg', 50, 1)
|
|
|
|
|
target.apply_damage((totalitemdamage / 2), BRUTE)
|
|
|
|
|
target.visible_message("<span class='danger'>[user]'s powerfist lets out a weak hiss as [user.p_they()] punch[user.p_es()] [target.name]!</span>", \
|
|
|
|
|
"<span class='userdanger'>[user]'s punch strikes with force!</span>")
|
|
|
|
|
return
|
|
|
|
|
target.apply_damage(totalitemdamage * fisto_setting, BRUTE)
|
|
|
|
|
target.visible_message("<span class='danger'>[user]'s powerfist lets out a loud hiss as [user.p_they()] punch[user.p_es()] [target.name]!</span>", \
|
|
|
|
|
"<span class='userdanger'>You cry out in pain as [user]'s punch flings you backwards!</span>")
|
|
|
|
|
new /obj/effect/temp_visual/kinetic_blast(target.loc)
|
|
|
|
|
playsound(loc, 'sound/weapons/resonator_blast.ogg', 50, 1)
|
|
|
|
|
playsound(loc, 'sound/weapons/genhit2.ogg', 50, 1)
|
|
|
|
|
|
|
|
|
|
var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src)))
|
|
|
|
|
var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src)))
|
|
|
|
|
target.throw_at(throw_target, 5 * fisto_setting, 0.5 + (fisto_setting / 2))
|
|
|
|
|
|
|
|
|
|
target.throw_at(throw_target, 5 * fisto_setting, 0.5 + (fisto_setting / 2))
|
|
|
|
|
log_combat(user, target, "power fisted", src)
|
|
|
|
|
|
|
|
|
|
log_combat(user, target, "power fisted", src)
|
|
|
|
|
|
|
|
|
|
user.changeNext_move(CLICK_CD_MELEE * click_delay)
|
|
|
|
|
|
|
|
|
|
return
|
|
|
|
|
var/weight = getweight(user, STAM_COST_ATTACK_MOB_MULT)
|
|
|
|
|
if(weight)
|
|
|
|
|
user.adjustStaminaLossBuffered(weight)
|
|
|
|
|
return TRUE
|
|
|
|
|