mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-02-09 15:49:19 +00:00
76 lines
2.4 KiB
Plaintext
76 lines
2.4 KiB
Plaintext
/obj/item/mecha_parts/mecha_equipment/gravcatapult
|
|
name = "gravitational catapult"
|
|
desc = "An exosuit mounted gravitational catapult."
|
|
icon_state = "mecha_teleport"
|
|
origin_tech = list(TECH_BLUESPACE = 2, TECH_MAGNET = 3)
|
|
equip_cooldown = 10
|
|
energy_drain = 100
|
|
range = MELEE|RANGED
|
|
var/atom/movable/locked
|
|
var/mode = 1 //1 - gravsling 2 - gravpush
|
|
|
|
var/last_fired = 0 //Concept stolen from guns.
|
|
var/fire_delay = 10 //Used to prevent spam-brute against humans.
|
|
|
|
equip_type = EQUIP_UTILITY
|
|
|
|
/obj/item/mecha_parts/mecha_equipment/gravcatapult/action(atom/movable/target)
|
|
|
|
if(world.time >= last_fired + fire_delay)
|
|
last_fired = world.time
|
|
else
|
|
if (world.time % 3)
|
|
occupant_message("<span class='warning'>[src] is not ready to fire again!</span>")
|
|
return 0
|
|
|
|
switch(mode)
|
|
if(1)
|
|
if(!action_checks(target) && !locked) return
|
|
if(!locked)
|
|
if(!istype(target) || target.anchored)
|
|
occupant_message("Unable to lock on [target]")
|
|
return
|
|
locked = target
|
|
occupant_message("Locked on [target]")
|
|
send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info())
|
|
return
|
|
else if(target!=locked)
|
|
if(locked in view(chassis))
|
|
locked.throw_at(target, 14, 1.5, chassis)
|
|
locked = null
|
|
send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info())
|
|
set_ready_state(0)
|
|
chassis.use_power(energy_drain)
|
|
do_after_cooldown()
|
|
else
|
|
locked = null
|
|
occupant_message("Lock on [locked] disengaged.")
|
|
send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info())
|
|
if(2)
|
|
if(!action_checks(target)) return
|
|
var/list/atoms = list()
|
|
if(isturf(target))
|
|
atoms = range(target,3)
|
|
else
|
|
atoms = orange(target,3)
|
|
for(var/atom/movable/A in atoms)
|
|
if(A.anchored) continue
|
|
spawn(0)
|
|
var/iter = 5-get_dist(A,target)
|
|
for(var/i=0 to iter)
|
|
step_away(A,target)
|
|
sleep(2)
|
|
set_ready_state(0)
|
|
chassis.use_power(energy_drain)
|
|
do_after_cooldown()
|
|
return
|
|
|
|
/obj/item/mecha_parts/mecha_equipment/gravcatapult/get_equip_info()
|
|
return "[..()] [mode==1?"([locked||"Nothing"])":null] \[<a href='?src=\ref[src];mode=1'>S</a>|<a href='?src=\ref[src];mode=2'>P</a>\]"
|
|
|
|
/obj/item/mecha_parts/mecha_equipment/gravcatapult/Topic(href, href_list)
|
|
..()
|
|
if(href_list["mode"])
|
|
mode = text2num(href_list["mode"])
|
|
send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info())
|
|
return |