Files
2020-02-16 19:40:21 -08:00

178 lines
4.6 KiB
Plaintext

/obj/machinery/telejam
name = "teleportation jammer"
desc = "Generates a force field interferes with teleportation devices."
icon = 'icons/obj/meteor_shield.dmi'
icon_state = "shieldgen"
density = 1
opacity = 0
anchored = 0
mats = 9
var/obj/item/cell/PCEL = null
var/coveropen = 0
var/active = 0
var/range = 3
var/image/display_active = null
var/image/display_battery = null
var/image/display_panel = null
var/battery_level = 3
var/sound/sound_on = 'sound/effects/shielddown.ogg'
var/sound/sound_off = 'sound/effects/shielddown2.ogg'
var/sound/sound_battwarning = 'sound/machines/pod_alarm.ogg'
New()
PCEL = new /obj/item/cell/supercell(src)
PCEL.charge = PCEL.maxcharge
src.display_active = image('icons/obj/meteor_shield.dmi', "")
src.display_battery = image('icons/obj/meteor_shield.dmi', "")
src.display_panel = image('icons/obj/meteor_shield.dmi', "")
teleport_jammers += src
..()
disposing()
turn_off()
if (PCEL)
PCEL.dispose()
PCEL = null
display_active = null
display_battery = null
sound_on = null
sound_off = null
sound_battwarning = null
teleport_jammers -= src
..()
examine()
..()
if(usr.client)
var/charge_percentage = 0
if (PCEL && PCEL.charge > 0 && PCEL.maxcharge > 0)
charge_percentage = round((PCEL.charge/PCEL.maxcharge)*100)
boutput(usr, "It has [PCEL.charge]/[PCEL.maxcharge] ([charge_percentage]%) battery power left.")
boutput(usr, "The jammer's range is [src.range] units of distance.")
boutput(usr, "The unit will consume [5 * src.range] power a second.")
else
boutput(usr, "It seems to be missing a usable battery.")
process()
if (src.active)
if(!PCEL)
turn_off()
return
PCEL.charge -= 5 * src.range
var/charge_percentage = 0
var/current_battery_level = 0
if (PCEL && PCEL.charge > 0 && PCEL.maxcharge > 0)
charge_percentage = round((PCEL.charge/PCEL.maxcharge)*100)
switch(charge_percentage)
if (75 to 100)
current_battery_level = 3
if (35 to 74)
current_battery_level = 2
else
current_battery_level = 1
if (current_battery_level != src.battery_level)
src.battery_level = current_battery_level
src.build_icon()
if (src.battery_level == 1)
playsound(src.loc, src.sound_battwarning, 50, 1)
src.visible_message("<span style=\"color:red\"><b>[src] emits a low battery alarm!</b></span>")
if (PCEL.charge < 0)
src.visible_message("<b>[src]</b> runs out of power and shuts down.")
src.turn_off()
return
attack_hand(mob/user as mob)
if (src.coveropen && src.PCEL)
src.PCEL.set_loc(src.loc)
src.PCEL = null
boutput(user, "You remove the power cell.")
else
if (src.active)
turn_off()
src.visible_message("<b>[user.name]</b> powers down the [src].")
else
if (PCEL)
if (PCEL.charge > 0)
turn_on()
src.visible_message("<b>[user.name]</b> powers up the [src].")
else
boutput(user, "[src]'s battery light flickers briefly.")
else
boutput(user, "Nothing happens.")
build_icon()
attackby(obj/item/W as obj, mob/user as mob)
if (isscrewingtool(W))
src.coveropen = !src.coveropen
src.visible_message("<b>[user.name]</b> [src.coveropen ? "opens" : "closes"] [src]'s cell cover.")
if (istype(W,/obj/item/cell/) && src.coveropen && !src.PCEL)
user.drop_item()
W.set_loc(src)
src.PCEL = W
boutput(user, "You insert the power cell.")
else
..()
build_icon()
attack_ai(mob/user as mob)
return attack_hand(user)
proc/build_icon()
src.overlays = null
if (src.coveropen)
if (istype(src.PCEL,/obj/item/cell/))
src.display_panel.icon_state = "panel-batt"
else
src.display_panel.icon_state = "panel-nobatt"
src.overlays += src.display_panel
if (src.active)
src.display_active.icon_state = "on"
src.overlays += src.display_active
if (istype(src.PCEL,/obj/item/cell))
var/charge_percentage = null
if (PCEL.charge > 0 && PCEL.maxcharge > 0)
charge_percentage = round((PCEL.charge/PCEL.maxcharge)*100)
switch(charge_percentage)
if (75 to 100)
src.display_battery.icon_state = "batt-3"
if (35 to 74)
src.display_battery.icon_state = "batt-2"
else
src.display_battery.icon_state = "batt-1"
else
src.display_battery.icon_state = "batt-3"
src.overlays += src.display_battery
proc/turn_on()
if (!PCEL)
return
if (PCEL.charge < 0)
return
src.anchored = 1
src.active = 1
playsound(src.loc, src.sound_on, 50, 1)
build_icon()
proc/turn_off()
src.anchored = 0
src.active = 0
playsound(src.loc, src.sound_off, 50, 1)
build_icon()
active
New()
..()
turn_on()