mirror of
https://github.com/goonstation/goonstation-2020.git
synced 2026-07-20 03:23:17 +01:00
178 lines
4.6 KiB
Plaintext
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()
|