mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-24 09:03:05 +00:00
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2683 316c924e-a436-60f5-8080-3fe189b3f50e
187 lines
5.4 KiB
Plaintext
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
|
|
*/ |