Files
Polaris/code/game/mecha/combat/combat.dm

187 lines
5.4 KiB
Plaintext

/obj/mecha/combat
var/force = 30
var/damtype = "brute"
var/melee_cooldown = 10
var/melee_can_hit = 1
var/list/destroyable_obj = list(/obj/mecha, /obj/structure/window, /obj/structure/grille, /turf/simulated/wall)
internal_damage_threshold = 50
maint_access = 0
damage_absorption = list("brute"=0.7,"fire"=1,"bullet"=0.7,"laser"=0.85,"energy"=1,"bomb"=0.8)
/*
/obj/mecha/combat/verb/switch_weapon()
set category = "Exosuit Interface"
set name = "Switch weapon"
set src in view(0)
if(usr!=src.occupant)
return
if(state || !cell || cell.charge<=0) return
if(selected_weapon == weapon_1)
selected_weapon = weapon_2
else if(selected_weapon == weapon_2)
selected_weapon = weapon_1
src.occupant << "You switch to [selected_weapon.name]"
for (var/mob/M in oviewers(src))
M.show_message("[src.name] raises [selected_weapon.name]")
return
*/
/*
/obj/mecha/combat/range_action(target as obj|mob|turf)
if(internal_damage&MECHA_INT_CONTROL_LOST)
target = pick(view(3,target))
if(selected_weapon)
selected_weapon.fire(target)
return
*/
/obj/mecha/combat/melee_action(target as obj|mob|turf)
if(internal_damage&MECHA_INT_CONTROL_LOST)
target = safepick(oview(1,src))
if(!melee_can_hit || !istype(target, /atom)) return
if(istype(target, /mob/living))
var/mob/living/M = target
if(src.occupant.a_intent == "hurt")
playsound(src, 'punch4.ogg', 50, 1)
if(damtype == "brute")
step_away(M,src,15)
if(M.stat>1)
M.gib()
melee_can_hit = 0
if(do_after(melee_cooldown))
melee_can_hit = 1
return
if(istype(target, /mob/living/carbon/human))
var/mob/living/carbon/human/H = target
// if (M.health <= 0) return
var/datum/organ/external/temp = H.get_organ(pick("chest", "chest", "chest", "head"))
if(temp)
switch(damtype)
if("brute")
H.Paralyse(1)
temp.take_damage(rand(force/2, force), 0)
if("fire")
temp.take_damage(0, rand(force/2, force))
if("tox")
if(H.reagents)
if(H.reagents.get_reagent_amount("carpotoxin") + force < force*2)
H.reagents.add_reagent("carpotoxin", force)
if(H.reagents.get_reagent_amount("cryptobiolin") + force < force*2)
H.reagents.add_reagent("cryptobiolin", force)
else
return
H.UpdateDamageIcon()
H.updatehealth()
else
switch(damtype)
if("brute")
M.Paralyse(1)
M.take_overall_damage(rand(force/2, force))
if("fire")
M.take_overall_damage(0, rand(force/2, force))
if("tox")
if(M.reagents)
if(M.reagents.get_reagent_amount("carpotoxin") + force < force*2)
M.reagents.add_reagent("carpotoxin", force)
if(M.reagents.get_reagent_amount("cryptobiolin") + force < force*2)
M.reagents.add_reagent("cryptobiolin", force)
else
return
M.updatehealth()
src.occupant_message("You hit [target].")
src.visible_message("<font color='red'><b>[src.name] hits [target].</b></font>")
else
step_away(M,src)
src.occupant_message("You push [target] out of the way.")
src.visible_message("[src] pushes [target] out of the way.")
melee_can_hit = 0
if(do_after(melee_cooldown))
melee_can_hit = 1
return
else
if(damtype == "brute")
for(var/target_type in src.destroyable_obj)
if(istype(target, target_type) && hascall(target, "attackby"))
src.occupant_message("You hit [target].")
src.visible_message("<font color='red'><b>[src.name] hits [target]</b></font>")
if(!istype(target, /turf/simulated/wall))
target:attackby(src,src.occupant)
else if(prob(5))
target:dismantle_wall(1)
src.occupant_message("\blue You smash through the wall.")
src.visible_message("<b>[src.name] smashes through the wall</b>")
playsound(src, 'smash.ogg', 50, 1)
melee_can_hit = 0
if(do_after(melee_cooldown))
melee_can_hit = 1
break
return
/*
/obj/mecha/combat/proc/mega_shake(target)
if(!istype(target, /obj) && !istype(target, /mob)) return
if(istype(target, /mob))
var/mob/M = target
M.make_dizzy(3)
M.adjustBruteLoss(1)
M.updatehealth()
for (var/mob/V in viewers(src))
V.show_message("[src.name] shakes [M] like a rag doll.")
return
*/
/*
if(energy>0 && can_move)
if(step(src,direction))
can_move = 0
spawn(step_in) can_move = 1
if(overload)
energy = energy-2
health--
else
energy--
return 1
return 0
*/
/obj/mecha/combat/moved_inside(var/mob/living/carbon/human/H as mob)
if(..())
if(H.client)
H.client.mouse_pointer_icon = file("icons/misc/mecha_mouse.dmi")
return 1
else
return 0
/obj/mecha/combat/go_out()
if(src.occupant && src.occupant.client)
src.occupant.client.mouse_pointer_icon = initial(src.occupant.client.mouse_pointer_icon)
..()
return
/*
/obj/mecha/combat/get_stats_part()
var/output = ..()
output += "<b>Weapon systems:</b><div style=\"margin-left: 15px;\">"
if(equipment.len)
for(var/obj/item/mecha_parts/mecha_equipment/W in equipment)
output += "[selected==W?"<b>":"<a href='?src=\ref[src];select_equip=\ref[W]'>"][W.get_equip_info()][selected==W?"</b>":"</a>"]<br>"
else
output += "None"
output += "</div>"
return output
*/
/* //the garbage collector should handle this
/obj/mecha/combat/Del()
for(var/weapon in weapons)
del weapon
..()
return
*/