Files
CHOMPStation2/code/game/mecha/working/tools/tools.dm
panurgomatic 953bc5189e - Further work on mechs.
- Turrets should now target mechs (there's a possibility of nasty errors there).
- Global iterator datum (just for lulz. Check readme inside global_iterator.dm and mecha.dm for examples).

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@684 316c924e-a436-60f5-8080-3fe189b3f50e
2010-12-21 11:07:22 +00:00

197 lines
4.8 KiB
Plaintext

/datum/mecha_tool
var/name = "mecha tool"
var/tool_cooldown = 0
var/tool_ready = 1
var/energy_drain = 0
var/obj/mecha/working/chassis = null
/datum/mecha_tool/New(mecha)
if(!istype(mecha, /obj/mecha/working))
return
src.chassis = mecha
return
/datum/mecha_tool/proc/action(atom/target)
if(!target)
return 0
if(!chassis)
return 0
if(energy_drain && chassis.cell.charge < energy_drain)
return 0
if(!tool_ready)
return 0
return 1
/*
//Merde, cette proc est tres bugged
/datum/mecha_tool/uni_interface
name = "Universal Interface"
tool_cooldown = 10
tool_ready = 1
energy_drain = 5
action(atom/target)
if(!..()) return
if(istype(target, /obj))
var/obj/O = target
if(O.allowed(chassis.occupant))
target.attack_hand(chassis.occupant)
return
*/
/datum/mecha_tool/hydraulic_clamp
name = "Hydraulic Clamp"
tool_cooldown = 15
tool_ready = 1
energy_drain = 10
var/force = 15
action(atom/target)
if(!..()) return
if(istype(target,/obj))
var/obj/O = target
if(!O.anchored)
if(chassis.cargo.len < chassis.cargo_capacity)
chassis.occupant_message("You lift [target] and start to load it into cargo compartment.")
chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.")
tool_ready = 0
chassis.cell.use(energy_drain)
O.anchored = 1
var/T = chassis.loc
spawn(tool_cooldown)
if(chassis)
if(T == chassis.loc && src == chassis.selected_tool)
chassis.cargo += O
O.loc = chassis
O.anchored = 0
chassis.occupant_message("<font color='blue'>[target] succesfully loaded.</font>")
else
chassis.occupant_message("<font color='red'>You must hold still while handling objects.</font>")
tool_ready = 1
else
chassis.occupant << "<font color='red'>Not enough room in cargo compartment.</font>"
else
chassis.occupant << "<font color='red'>[target] is firmly secured.</font>"
else if(istype(target,/mob))
var/mob/M = target
if(M.stat>1) return
if(chassis.occupant.a_intent == "hurt")
M.bruteloss += force
M.oxyloss += round(force/2)
M.updatehealth()
chassis.occupant_message("\red You squeese [target] with [src.name]. Something cracks.")
chassis.visible_message("\red [chassis] squeeses [target].")
else
step_away(M,chassis)
chassis.occupant_message("You push [target] out of the way.")
chassis.visible_message("[chassis] pushes [target] out of the way.")
tool_ready = 0
chassis.cell.use(energy_drain)
spawn(tool_cooldown)
tool_ready = 1
return
/datum/mecha_tool/drill
name = "Drill"
tool_cooldown = 40
tool_ready = 1
energy_drain = 20
var/force = 15
action(atom/target)
if(!..()) return
tool_ready = 0
chassis.cell.use(energy_drain)
chassis.visible_message("<font color='red'><b>[chassis] starts to drill [target]</b></font>", "You hear the drill.")
chassis.occupant_message("<font color='red'><b>You start to drill [target]</b></font>")
var/T = chassis.loc
spawn(tool_cooldown)
if(chassis)
if(T == chassis.loc && src == chassis.selected_tool)
target.ex_act(2)
tool_ready = 1
/*
/datum/mecha_tool/gimmick
name = "Gimmick"
tool_cooldown = 10
tool_ready = 1
energy_drain = 10
var/real_tool_type
var/real_tool_obj
action(atom/target)
if(!..()) return
target.attackby(real_tool_obj,chassis.occupant)
tool_ready = 0
chassis.cell.use(energy_drain)
spawn(tool_cooldown)
tool_ready = 1
return
New()
..()
real_tool_obj = new real_tool_type(chassis)
return
/datum/mecha_tool/gimmick/screwdriver
name = "Screwdriver"
tool_cooldown = 10
tool_ready = 1
energy_drain = 10
real_tool_type = /obj/item/weapon/screwdriver
/datum/mecha_tool/gimmick/wrench
name = "Wrench"
tool_cooldown = 10
tool_ready = 1
energy_drain = 10
real_tool_type = /obj/item/weapon/wrench
/datum/mecha_tool/gimmick/wirecutters
name = "Wirecutters"
tool_cooldown = 10
tool_ready = 1
energy_drain = 10
real_tool_type = /obj/item/weapon/wirecutters
/datum/mecha_tool/gimmick/multitool
name = "Multitool"
tool_cooldown = 10
tool_ready = 1
energy_drain = 10
real_tool_type = /obj/item/device/multitool
/datum/mecha_tool/gimmick/crowbar
name = "Crowbar"
tool_cooldown = 10
tool_ready = 1
energy_drain = 10
real_tool_type = /obj/item/weapon/crowbar
/datum/mecha_tool/gimmick/weldingtool
name = "Weldingtool"
tool_cooldown = 10
tool_ready = 1
energy_drain = 15
real_tool_type = /obj/item/weapon/weldingtool
action(atom/target)
var/obj/item/weapon/weldingtool/W = real_tool_obj
W.welding = 1
W.reagents.add_reagent("fuel", W.reagents.maximum_volume - W.get_fuel())
..()
return
*/