Merge remote-tracking branch 'refs/remotes/ParadiseSS13/master'

This commit is contained in:
scrubmcnoob
2017-04-29 19:42:10 -04:00
736 changed files with 17483 additions and 14420 deletions
+1 -2
View File
@@ -29,8 +29,7 @@
Remove(owner)
if(target)
target = null
qdel(button)
button = null
QDEL_NULL(button)
return ..()
/datum/action/proc/Grant(mob/M)
+8 -8
View File
@@ -341,13 +341,13 @@
C:broken = 1
C.open()
C.update_icon()
master.visible_message("\red [master] breaks open [C]!")
master.visible_message("<span class='warning'>[master] breaks open [C]!</span>")
else
master.visible_message("\blue [master] is trying to force [C] open!")
master.visible_message("<span class='notice'>[master] is trying to force [C] open!</span>")
master.sleep += 1 // mechanical strain
return BIG_OBJECT_WORK
master.visible_message("\blue [master] is trying to open [C], but can't!")
master.visible_message("<span class='notice'>[master] is trying to open [C], but can't!</span>")
master.sleep = 5
return 0
@@ -647,7 +647,7 @@
M.loc = master
master.types[M.type] = src
M.apply_damage(damage) // todo: ugly
M.visible_message("\red [M.name] gets pulled into the machine!")
M.visible_message("<span class='warning'>[M.name] gets pulled into the machine!</span>")
return MOB_WORK
outlet_reaction(var/atom/W,var/turf/D)
var/mob/living/M = W
@@ -659,7 +659,7 @@
if(bruteloss < 100) // requires tenderization
M.apply_damage(rand(5,15),BRUTE)
to_chat(M, "The machine is tearing you apart!")
master.visible_message("\red [master] makes a squishy grinding noise.")
master.visible_message("<span class='warning'>[master] makes a squishy grinding noise.</span>")
return
M.loc = master.loc
M.gib()
@@ -700,7 +700,7 @@
M.forceMove(master)
master.types[M.type] = src
M.apply_damage(damage) // todo: ugly
M.visible_message("\red [M.name] gets pulled into the machine!")
M.visible_message("<span class='warning'>[M.name] gets pulled into the machine!</span>")
return MOB_WORK
outlet_reaction(var/atom/W,var/turf/D)
@@ -711,7 +711,7 @@
D = get_step(D,master.outdir) // throw attempt
eject_speed = rand(0,4)
M.visible_message("\blue [M.name] is ejected from the unloader.")
M.visible_message("<span class='notice'>[M.name] is ejected from the unloader.</span>")
M.throw_at(D,eject_speed,eject_speed)
return
@@ -752,7 +752,7 @@
if(!damage)
playsound(master.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
master.visible_message("\red \The [src] punched at [M], but whiffed!")
master.visible_message("<span class='warning'>\The [src] punched at [M], but whiffed!</span>")
if(maxpunches > 1 && prob(50)) // Follow through on a miss, 50% chance
return punch(M,maxpunches - 1) + 1
+2 -2
View File
@@ -16,7 +16,7 @@
if(2)
/*
if(affected_mob.sleeping && prob(40)) //removed until sleeping is fixed
to_chat(affected_mob, "\blue You feel better.")
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
cure()
return
*/
@@ -39,7 +39,7 @@
if(3)
/*
if(affected_mob.sleeping && prob(25)) //removed until sleeping is fixed
to_chat(affected_mob, "\blue You feel better.")
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
cure()
return
*/
+1 -1
View File
@@ -139,7 +139,7 @@ Data storage vars:
arg_list = arguments
return 1
else
// to_chat(world, "\red Invalid arguments supplied for [src.type], ref = \ref[src]")
// to_chat(world, "<span class='warning'>Invalid arguments supplied for [src.type], ref = \ref[src]</span>")
return 0
proc/toggle_null_checks()
+13 -1
View File
@@ -114,6 +114,7 @@
preloadRuinTemplates()
preloadShelterTemplates()
preloadShuttleTemplates()
preloadVRTemplates()
/proc/preloadRuinTemplates()
// Still supporting bans by filename
@@ -163,4 +164,15 @@
var/datum/map_template/shuttle/S = new shuttle_type()
shuttle_templates[S.shuttle_id] = S
map_templates[S.shuttle_id] = S
map_templates[S.shuttle_id] = S
/proc/preloadVRTemplates()
for(var/item in subtypesof(/datum/map_template/vr))
var/datum/map_template/vr/vr_type = item
if(!initial(vr_type.suffix))
continue
var/datum/map_template/vr/V = new vr_type()
vr_templates[V.id] = V
map_templates[V.id] = V
+35 -35
View File
@@ -157,7 +157,7 @@
var/mob/living/carbon/human/H = current
if(ishuman(current))
/** Impanted**/
if(isloyal(H))
if(ismindshielded(H))
text = "Mindshield Implant:<a href='?src=[UID()];implant=remove'>Remove</a>|<b><font color='green'>Implanted</font></b></br>"
else
text = "Mindshield Implant:<b>No Implant</b>|<a href='?src=[UID()];implant=add'>Implant him!</a></br>"
@@ -167,7 +167,7 @@
if(ticker.mode.config_tag=="revolution")
text += uppertext(text)
text = "<i><b>[text]</b></i>: "
if(isloyal(H))
if(ismindshielded(H))
text += "<b>NO</b>|headrev|rev"
else if(src in ticker.mode.head_revolutionaries)
text += "<a href='?src=[UID()];revolution=clear'>no</a>|<b><font color='red'>HEADREV</font></b>|<a href='?src=[UID()];revolution=rev'>rev</a>"
@@ -203,7 +203,7 @@
if(ticker.mode.config_tag=="cult")
text = uppertext(text)
text = "<i><b>[text]</b></i>: "
if(isloyal(H))
if(ismindshielded(H))
text += "<B>NO</B>|cultist"
else if(src in ticker.mode.cult)
text += "<a href='?src=[UID()];cult=clear'>no</a>|<b><font color='red'>CULTIST</font></b>"
@@ -657,15 +657,15 @@
switch(href_list["implant"])
if("remove")
for(var/obj/item/weapon/implant/loyalty/I in H.contents)
for(var/obj/item/weapon/implant/mindshield/I in H.contents)
if(I && I.implanted)
I.removed(H)
qdel(I)
to_chat(H, "\blue <Font size =3><B>Your mindshield implant has been deactivated.</B></FONT>")
to_chat(H, "<span class='notice'><Font size =3><B>Your mindshield implant has been deactivated.</B></FONT></span>")
log_admin("[key_name(usr)] has deactivated [key_name(current)]'s mindshield implant")
message_admins("[key_name_admin(usr)] has deactivated [key_name_admin(current)]'s mindshield implant")
if("add")
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(H)
L.imp_in = H
L.implanted = 1
H.sec_hud_set_implants()
@@ -673,15 +673,15 @@
log_admin("[key_name(usr)] has given [key_name(current)] a mindshield implant")
message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] a mindshield implant")
to_chat(H, "\red <Font size =3><B>You somehow have become the recepient of a mindshield transplant, and it just activated!</B></FONT>")
to_chat(H, "<span class='warning'><Font size =3><B>You somehow have become the recepient of a mindshield transplant, and it just activated!</B></FONT></span>")
if(src in ticker.mode.revolutionaries)
special_role = null
ticker.mode.revolutionaries -= src
to_chat(src, "\red <Font size = 3><B>The nanobots in the mindshield implant remove all thoughts about being a revolutionary. Get back to work!</B></Font>")
to_chat(src, "<span class='warning'><Font size = 3><B>The nanobots in the mindshield implant remove all thoughts about being a revolutionary. Get back to work!</B></Font></span>")
if(src in ticker.mode.head_revolutionaries)
special_role = null
ticker.mode.head_revolutionaries -=src
to_chat(src, "\red <Font size = 3><B>The nanobots in the mindshield implant remove all thoughts about being a revolutionary. Get back to work!</B></Font>")
to_chat(src, "<span class='warning'><Font size = 3><B>The nanobots in the mindshield implant remove all thoughts about being a revolutionary. Get back to work!</B></Font></span>")
if(src in ticker.mode.cult)
ticker.mode.cult -= src
ticker.mode.update_cult_icons_removed(src)
@@ -689,7 +689,7 @@
var/datum/game_mode/cult/cult = ticker.mode
if(istype(cult))
cult.memorize_cult_objectives(src)
to_chat(current, "\red <FONT size = 3><B>The nanobots in the mindshield implant remove all thoughts about being in a cult. Have a productive day!</B></FONT>")
to_chat(current, "<span class='warning'><FONT size = 3><B>The nanobots in the mindshield implant remove all thoughts about being in a cult. Have a productive day!</B></FONT></span>")
memory = ""
else if(href_list["revolution"])
@@ -698,12 +698,12 @@
if("clear")
if(src in ticker.mode.revolutionaries)
ticker.mode.revolutionaries -= src
to_chat(current, "\red <FONT size = 3><B>You have been brainwashed! You are no longer a revolutionary!</B></FONT>")
to_chat(current, "<span class='warning'><FONT size = 3><B>You have been brainwashed! You are no longer a revolutionary!</B></FONT></span>")
ticker.mode.update_rev_icons_removed(src)
special_role = null
if(src in ticker.mode.head_revolutionaries)
ticker.mode.head_revolutionaries -= src
to_chat(current, "\red <FONT size = 3><B>You have been brainwashed! You are no longer a head revolutionary!</B></FONT>")
to_chat(current, "<span class='warning'><FONT size = 3><B>You have been brainwashed! You are no longer a head revolutionary!</B></FONT></span>")
ticker.mode.update_rev_icons_removed(src)
special_role = null
log_admin("[key_name(usr)] has de-rev'd [key_name(current)]")
@@ -713,9 +713,9 @@
if(src in ticker.mode.head_revolutionaries)
ticker.mode.head_revolutionaries -= src
ticker.mode.update_rev_icons_removed(src)
to_chat(current, "\red <FONT size = 3><B>Revolution has been disappointed of your leadership traits! You are a regular revolutionary now!</B></FONT>")
to_chat(current, "<span class='warning'><FONT size = 3><B>Revolution has been disappointed of your leadership traits! You are a regular revolutionary now!</B></FONT></span>")
else if(!(src in ticker.mode.revolutionaries))
to_chat(current, "\red <FONT size = 3> You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!</FONT>")
to_chat(current, "<span class='warning'><FONT size = 3> You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!</FONT></span>")
else
return
ticker.mode.revolutionaries += src
@@ -728,9 +728,9 @@
if(src in ticker.mode.revolutionaries)
ticker.mode.revolutionaries -= src
ticker.mode.update_rev_icons_removed(src)
to_chat(current, "\red <FONT size = 3><B>You have proven your devotion to revolution! You are a head revolutionary now!</B></FONT>")
to_chat(current, "<span class='warning'>\red <FONT size = 3><B>You have proven your devotion to revolution! You are a head revolutionary now!</B></FONT></span>")
else if(!(src in ticker.mode.head_revolutionaries))
to_chat(current, "\blue You are a member of the revolutionaries' leadership now!")
to_chat(current, "<span class='notice'>You are a member of the revolutionaries' leadership now!</span>")
else
return
if(ticker.mode.head_revolutionaries.len>0)
@@ -758,7 +758,7 @@
if("flash")
if(!ticker.mode.equip_revolutionary(current))
to_chat(usr, "\red Spawning flash failed!")
to_chat(usr, "<span class='warning'>Spawning flash failed!</span>")
log_admin("[key_name(usr)] has given [key_name(current)] a flash")
message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] a flash")
@@ -766,7 +766,7 @@
var/list/L = current.get_contents()
var/obj/item/device/flash/flash = locate() in L
if(!flash)
to_chat(usr, "\red Deleting flash failed!")
to_chat(usr, "<span class='warning'>Deleting flash failed!</span>")
qdel(flash)
log_admin("[key_name(usr)] has taken [key_name(current)]'s flash")
message_admins("[key_name_admin(usr)] has taken [key_name_admin(current)]'s flash")
@@ -775,7 +775,7 @@
var/list/L = current.get_contents()
var/obj/item/device/flash/flash = locate() in L
if(!flash)
to_chat(usr, "\red Repairing flash failed!")
to_chat(usr, "<span class='warning'>Repairing flash failed!</span>")
else
flash.broken = 0
log_admin("[key_name(usr)] has repaired [key_name(current)]'s flash")
@@ -790,7 +790,7 @@
fail |= !ticker.mode.equip_traitor(current, 1)
fail |= !ticker.mode.equip_revolutionary(current)
if(fail)
to_chat(usr, "\red Reequipping revolutionary goes wrong!")
to_chat(usr, "<span class='warning'>Reequipping revolutionary goes wrong!</span>")
return
log_admin("[key_name(usr)] has equipped [key_name(current)] as a revolutionary")
message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a revolutionary")
@@ -825,7 +825,7 @@
)
var/where = H.equip_in_one_of_slots(T, slots)
if(!where)
to_chat(usr, "\red Spawning tome failed!")
to_chat(usr, "<span class='warning'>Spawning tome failed!</span>")
qdel(T)
else
to_chat(H, "A tome, a message from your new master, appears in your [where].")
@@ -834,7 +834,7 @@
if("equip")
if(!ticker.mode.equip_cultist(current))
to_chat(usr, "\red Spawning equipment failed!")
to_chat(usr, "<span class='warning'>Spawning equipment failed!</span>")
log_admin("[key_name(usr)] has equipped [key_name(current)] as a cultist")
message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a cultist")
@@ -848,7 +848,7 @@
current.spellremove(current)
current.faction = list("Station")
ticker.mode.update_wiz_icons_removed(src)
to_chat(current, "\red <FONT size = 3><B>You have been brainwashed! You are no longer a wizard!</B></FONT>")
to_chat(current, "<span class='warning'><FONT size = 3><B>You have been brainwashed! You are no longer a wizard!</B></FONT></span>")
log_admin("[key_name(usr)] has de-wizarded [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-wizarded [key_name_admin(current)]")
if("wizard")
@@ -875,7 +875,7 @@
message_admins("[key_name_admin(usr)] has allowed wizard [key_name_admin(current)] to name themselves")
if("autoobjectives")
ticker.mode.forge_wizard_objectives(src)
to_chat(usr, "\blue The objectives for wizard [key] have been generated. You can edit them and announce manually.")
to_chat(usr, "<span class='notice'>The objectives for wizard [key] have been generated. You can edit them and announce manually.</span>")
log_admin("[key_name(usr)] has automatically forged wizard objectives for [key_name(current)]")
message_admins("[key_name_admin(usr)] has automatically forged wizard objectives for [key_name_admin(current)]")
@@ -904,13 +904,13 @@
if("autoobjectives")
ticker.mode.forge_changeling_objectives(src)
to_chat(usr, "\blue The objectives for changeling [key] have been generated. You can edit them and announce manually.")
to_chat(usr, "<span class='notice'>The objectives for changeling [key] have been generated. You can edit them and announce manually.</span>")
log_admin("[key_name(usr)] has automatically forged objectives for [key_name(current)]")
message_admins("[key_name_admin(usr)] has automatically forged objectives for [key_name_admin(current)]")
if("initialdna")
if(!changeling || !changeling.absorbed_dna.len)
to_chat(usr, "\red Resetting DNA failed!")
to_chat(usr, "<span class='warning'>Resetting DNA failed!</span>")
else
current.dna = changeling.absorbed_dna[1]
current.real_name = current.dna.real_name
@@ -948,7 +948,7 @@
if("autoobjectives")
ticker.mode.forge_vampire_objectives(src)
to_chat(usr, "\blue The objectives for vampire [key] have been generated. You can edit them and announce manually.")
to_chat(usr, "<span class='notice'>The objectives for vampire [key] have been generated. You can edit them and announce manually.</span>")
log_admin("[key_name(usr)] has automatically forged objectives for [key_name(current)]")
message_admins("[key_name_admin(usr)] has automatically forged objectives for [key_name_admin(current)]")
@@ -971,7 +971,7 @@
special_role = null
for(var/datum/objective/nuclear/O in objectives)
objectives-=O
to_chat(current, "\red <FONT size = 3><B>You have been brainwashed! You are no longer a syndicate operative!</B></FONT>")
to_chat(current, "<span class='warning'><FONT size = 3><B>You have been brainwashed! You are no longer a syndicate operative!</B></FONT></span>")
log_admin("[key_name(usr)] has de-nuke op'd [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-nuke op'd [key_name_admin(current)]")
if("nuclear")
@@ -983,7 +983,7 @@
else
current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
special_role = SPECIAL_ROLE_NUKEOPS
to_chat(current, "\blue You are a [syndicate_name()] agent!")
to_chat(current, "<span class='notice'>You are a [syndicate_name()] agent!</span>")
ticker.mode.forge_syndicate_objectives(src)
ticker.mode.greet_syndicate(src)
log_admin("[key_name(usr)] has nuke op'd [key_name(current)]")
@@ -1006,7 +1006,7 @@
qdel(H.w_uniform)
if(!ticker.mode.equip_syndicate(current))
to_chat(usr, "\red Equipping a syndicate failed!")
to_chat(usr, "<span class='warning'>Equipping a syndicate failed!</span>")
return
log_admin("[key_name(usr)] has equipped [key_name(current)] as a nuclear operative")
message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a nuclear operative")
@@ -1023,7 +1023,7 @@
log_admin("[key_name(usr)] has given [key_name(current)] the nuclear authorization code")
message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] the nuclear authorization code")
else
to_chat(usr, "\red No valid nuke found!")
to_chat(usr, "<span class='warning'>No valid nuke found!</span>")
else if(href_list["traitor"])
switch(href_list["traitor"])
@@ -1031,7 +1031,7 @@
if(src in ticker.mode.traitors)
ticker.mode.traitors -= src
special_role = null
to_chat(current, "\red <FONT size = 3><B>You have been brainwashed! You are no longer a traitor!</B></FONT>")
to_chat(current, "<span class='warning'><FONT size = 3><B>You have been brainwashed! You are no longer a traitor!</B></FONT></span>")
log_admin("[key_name(usr)] has de-traitored [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-traitored [key_name_admin(current)]")
if(isAI(current))
@@ -1061,7 +1061,7 @@
if("autoobjectives")
ticker.mode.forge_traitor_objectives(src)
to_chat(usr, "\blue The objectives for traitor [key] have been generated. You can edit them and announce manually.")
to_chat(usr, "<span class='notice'>The objectives for traitor [key] have been generated. You can edit them and announce manually.</span>")
log_admin("[key_name(usr)] has automatically forged objectives for [key_name(current)]")
message_admins("[key_name_admin(usr)] has automatically forged objectives for [key_name_admin(current)]")
@@ -1197,7 +1197,7 @@
message_admins("[key_name_admin(usr)] has set [key_name_admin(current)]'s telecrystals to [crystals]")
if("uplink")
if(!ticker.mode.equip_traitor(current, !(src in ticker.mode.traitors)))
to_chat(usr, "\red Equipping a syndicate failed!")
to_chat(usr, "<span class='warning'>Equipping a syndicate failed!</span>")
return
log_admin("[key_name(usr)] has given [key_name(current)] an uplink")
message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] an uplink")
@@ -1276,7 +1276,7 @@
current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
special_role = SPECIAL_ROLE_NUKEOPS
assigned_role = "MODE"
to_chat(current, "\blue You are a [syndicate_name()] agent!")
to_chat(current, "<span class='notice'>You are a [syndicate_name()] agent!</span>")
ticker.mode.forge_syndicate_objectives(src)
ticker.mode.greet_syndicate(src)
File diff suppressed because it is too large Load Diff
+10 -7
View File
@@ -15,6 +15,7 @@
if(goal_number)
goal = goal_number
bar = image('icons/effects/progessbar.dmi', target, "prog_bar_0", HUD_LAYER)
bar.alpha = 0
bar.plane = HUD_PLANE
bar.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA
user = User
@@ -26,7 +27,7 @@
var/list/bars = user.progressbars[bar.loc]
bars.Add(src)
listindex = bars.len
bar.pixel_y = 32 + (PROGRESSBAR_HEIGHT * (listindex - 1))
animate(bar, pixel_y = 32 + (PROGRESSBAR_HEIGHT * (listindex - 1)), alpha = 255, time = 5, easing = SINE_EASING)
/datum/progressbar/proc/update(progress)
if(!user || !user.client)
@@ -46,7 +47,8 @@
/datum/progressbar/proc/shiftDown()
--listindex
bar.pixel_y -= PROGRESSBAR_HEIGHT
var/shiftheight = bar.pixel_y - PROGRESSBAR_HEIGHT
animate(bar, pixel_y = shiftheight, time = 5, easing = SINE_EASING)
/datum/progressbar/Destroy()
for(var/I in user.progressbars[bar.loc])
@@ -58,10 +60,11 @@
bars.Remove(src)
if(!bars.len)
LAZYREMOVE(user.progressbars, bar.loc)
if(client)
client.images -= bar
qdel(bar)
animate(bar, alpha = 0, time = 5)
spawn(5)
if(client)
client.images -= bar
qdel(bar)
. = ..()
#undef PROGRESSBAR_HEIGHT
#undef PROGRESSBAR_HEIGHT
+7
View File
@@ -99,6 +99,13 @@
treasure in this disused warehouse, launch it into space, and then \
ignore it. Forever."
/datum/map_template/ruin/space/listeningpost
id = "listeningpost"
suffix = "listeningpost.dmm"
name = "Syndie Listening Post"
description = "What happens to Nuclear Operatives that fail in their mission? \
Certainly not assignment to a backwater listening post..."
/datum/map_template/ruin/space/empty_shell
id = "empty-shell"
suffix = "emptyshell.dmm"
+7 -8
View File
@@ -100,7 +100,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
var/action_icon = 'icons/mob/actions.dmi'
var/action_icon_state = "spell_default"
var/action_background_icon_state = "bg_spell"
var/sound = null //The sound the spell makes when it is cast
/obj/effect/proc_holder/spell/proc/cast_check(skipcharge = 0, mob/living/user = usr) //checks if the spell can be cast based on its settings; skipcharge is used when an additional cast_check is called inside the spell
@@ -184,8 +184,8 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
user.visible_message(invocation, invocation_emote_self) //same style as in mob/living/emote.dm
/obj/effect/proc_holder/spell/proc/playMagSound()
playsound(get_turf(usr), sound,50,1)
playsound(get_turf(usr), sound,50,1)
/obj/effect/proc_holder/spell/New()
..()
action = new(src)
@@ -194,8 +194,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
charge_counter = charge_max
/obj/effect/proc_holder/spell/Destroy()
qdel(action)
action = null
QDEL_NULL(action)
return ..()
/obj/effect/proc_holder/spell/Click()
@@ -223,10 +222,10 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
spawn(0)
if(charge_type == "recharge" && recharge)
start_recharge()
if(sound)
playMagSound()
playMagSound()
if(prob(critfailchance))
critfail(targets)
else
+15 -13
View File
@@ -26,9 +26,9 @@
if(M.mind)
for(var/obj/effect/proc_holder/spell/S in M.mind.spell_list)
S.charge_counter = S.charge_max
to_chat(M, "<span class='notice'>you feel raw magic flowing through you, it feels good!</span>")
to_chat(M, "<span class='notice'>You feel raw magical energy flowing through you, it feels good!</span>")
else
to_chat(M, "<span class='notice'>you feel very strange for a moment, but then it passes.</span>")
to_chat(M, "<span class='notice'>You feel very strange for a moment, but then it passes.</span>")
burnt_out = 1
charged_item = M
break
@@ -62,11 +62,12 @@
break
else if(istype(item, /obj/item/weapon/stock_parts/cell/))
var/obj/item/weapon/stock_parts/cell/C = item
if(prob(80))
C.maxcharge -= 200
if(C.maxcharge <= 1) //Div by 0 protection
C.maxcharge = 1
burnt_out = 1
if(!C.self_recharge)
if(prob(80))
C.maxcharge -= 200
if(C.maxcharge <= 1) //Div by 0 protection
C.maxcharge = 1
burnt_out = 1
C.charge = C.maxcharge
charged_item = C
break
@@ -75,17 +76,18 @@
for(I in item.contents)
if(istype(I, /obj/item/weapon/stock_parts/cell/))
var/obj/item/weapon/stock_parts/cell/C = I
if(prob(80))
C.maxcharge -= 200
if(C.maxcharge <= 1) //Div by 0 protection
C.maxcharge = 1
burnt_out = 1
if(!C.self_recharge)
if(prob(80))
C.maxcharge -= 200
if(C.maxcharge <= 1) //Div by 0 protection
C.maxcharge = 1
burnt_out = 1
C.charge = C.maxcharge
item.update_icon()
charged_item = item
break
if(!charged_item)
to_chat(L, "<span class='notice'>you feel magical power surging to your hands, but the feeling rapidly fades...</span>")
to_chat(L, "<span class='notice'>You feel magical power surging to your hands, but the feeling rapidly fades...</span>")
else if(burnt_out)
to_chat(L, "<span class='caution'>[charged_item] doesn't seem to be reacting to the spell...</span>")
else
+1 -1
View File
@@ -33,7 +33,7 @@
targets -= spawn_place
if(ispath(summoned_object_type,/turf))
if(istype(get_turf(user),/turf/simulated/shuttle))
to_chat(user, "\red You can't build things on shuttles!")
to_chat(user, "<span class='warning'>You can't build things on shuttles!</span>")
break
var/turf/O = spawn_place
var/N = summoned_object_type
+3 -3
View File
@@ -6,7 +6,7 @@
action_background_icon_state = "bg_cult"
/obj/effect/proc_holder/spell/aoe_turf/conjure/floor
name = "Floor Construction"
name = "Summon Cult Floor"
desc = "This spell constructs a cult floor"
action_icon_state = "floorconstruct"
action_background_icon_state = "bg_cult"
@@ -20,7 +20,7 @@
centcom_cancast = 0 //Stop crashing the server by spawning turfs on transit tiles
/obj/effect/proc_holder/spell/aoe_turf/conjure/wall
name = "Lesser Construction"
name = "Summon Cult Wall"
desc = "This spell constructs a cult wall"
action_icon_state = "lesserconstruct"
action_background_icon_state = "bg_cult"
@@ -30,7 +30,7 @@
invocation = "none"
invocation_type = "none"
range = 0
summon_type = list(/turf/simulated/wall/cult)
summon_type = list(/turf/simulated/wall/cult/artificer) //we don't want artificer-based runed metal farms
centcom_cancast = 0 //Stop crashing the server by spawning turfs on transit tiles
/obj/effect/proc_holder/spell/aoe_turf/conjure/wall/reinforced
+34 -12
View File
@@ -15,13 +15,15 @@
var/image/halo = null
action_icon_state = "lightning"
var/sound/Snd // so far only way i can think of to stop a sound, thank MSO for the idea.
var/damaging = TRUE
/obj/effect/proc_holder/spell/targeted/lightning/lightnian
clothes_req = 0
invocation_type = "none"
damaging = 0
/obj/effect/proc_holder/spell/targeted/lightning/Click()
if(!ready && start_time==0)
if(!ready && start_time == 0)
if(cast_check())
StartChargeup()
else
@@ -32,12 +34,12 @@
/obj/effect/proc_holder/spell/targeted/lightning/proc/StartChargeup(mob/user = usr)
ready = 1
to_chat(user, "<span class='notice'>You start gathering the power.</span>")
Snd = new/sound('sound/magic/lightning_chargeup.ogg',channel = 7)
Snd = new/sound('sound/magic/lightning_chargeup.ogg', channel = 7)
halo = image("icon"='icons/effects/effects.dmi',"icon_state" ="electricity","layer" = EFFECTS_LAYER)
user.overlays.Add(halo)
playsound(get_turf(user), Snd, 50, 0)
start_time = world.time
if(do_mob(user,user,100,uninterruptible=1))
if(do_mob(user, user, 100, uninterruptible=1))
if(ready)
Discharge()
@@ -61,9 +63,9 @@ obj/effect/proc_holder/spell/targeted/lightning/proc/Reset(mob/user = usr)
/obj/effect/proc_holder/spell/targeted/lightning/cast(list/targets, mob/user = usr)
ready = 0
var/mob/living/carbon/target = targets[1]
Snd=sound(null, repeat = 0, wait = 1, channel = Snd.channel) //byond, why you suck?
playsound(get_turf(user),Snd,50,0)// Sorry MrPerson, but the other ways just didn't do it the way i needed to work, this is the only way.
var/mob/living/target = targets[1]
Snd = sound(null, repeat = 0, wait = 1, channel = Snd.channel) //byond, why you suck?
playsound(get_turf(user), Snd, 50, 0)// Sorry MrPerson, but the other ways just didn't do it the way i needed to work, this is the only way.
if(get_dist(user,target)>range)
to_chat(user, "<span class='notice'>They are too far away!</span>")
Reset(user)
@@ -73,17 +75,37 @@ obj/effect/proc_holder/spell/targeted/lightning/proc/Reset(mob/user = usr)
user.Beam(target,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5)
var/energy = min(world.time - start_time,100)
Bolt(user,target,max(15,energy/2),5,user) //5 bounces for energy/2 burn
if(damaging)
Bolt(user,target,max(15,energy/2),5,user) //5 bounces for energy/2 burn
else
var/bounces = round(energy/20)
Bolt(user,target,0,bounces,user)
Reset(user)
/obj/effect/proc_holder/spell/targeted/lightning/proc/Bolt(mob/origin, mob/target, bolt_energy, bounces, mob/user = usr)
origin.Beam(target,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5)
var/mob/living/carbon/current = target
/obj/effect/proc_holder/spell/targeted/lightning/proc/Bolt(mob/origin, mob/living/target, bolt_energy, bounces, mob/user = usr)
origin.Beam(target,icon_state="lightning[rand(1,12)]", icon='icons/effects/effects.dmi', time=5)
var/mob/living/current = target
if(bounces < 1)
current.electrocute_act(bolt_energy,"Lightning Bolt",safety=1)
if(damaging)
current.electrocute_act(bolt_energy,"Lightning Bolt",safety=1)
else
current.AdjustJitter(1000) //High numbers for violent convulsions
current.do_jitter_animation(current.jitteriness)
current.AdjustStuttering(2)
current.Slowed(3)
spawn(20)
current.AdjustJitter(-1000, bound_lower = 10) //Still jittery, but vastly less
playsound(get_turf(current), 'sound/magic/LightningShock.ogg', 50, 1, -1)
else
current.electrocute_act(bolt_energy,"Lightning Bolt",safety=1)
if(damaging)
current.electrocute_act(bolt_energy,"Lightning Bolt",safety=1)
else
current.AdjustJitter(1000) //High numbers for violent convulsions
current.do_jitter_animation(current.jitteriness)
current.AdjustStuttering(2)
current.Slowed(3)
spawn(20)
current.AdjustJitter(-1000, bound_lower = 10) //Still jittery, but vastly less
playsound(get_turf(current), 'sound/magic/LightningShock.ogg', 50, 1, -1)
var/list/possible_targets = new
for(var/mob/living/M in view_or_range(range,target,"view"))
+20 -17
View File
@@ -12,34 +12,37 @@
random_target = 1
var/energy = 0
var/ready = 0
var/start_time = 0
var/image/halo = null
var/sound/Snd // so far only way i can think of to stop a sound, thank MSO for the idea.
action_icon_state = "tech"
/obj/effect/proc_holder/spell/targeted/magnet/Click()
if(!ready)
if(!ready && start_time == 0)
if(cast_check())
StartChargeup()
else
if(cast_check(skipcharge=1))
if(ready && cast_check(skipcharge=1))
choose_targets()
return 1
/obj/effect/proc_holder/spell/targeted/magnet/proc/StartChargeup(mob/user = usr)
ready = 1
to_chat(user, "<span class='notice'>You start gathering the power.</span>")
Snd = new/sound('sound/magic/lightning_chargeup.ogg', channel = 7)
halo = image("icon"='icons/effects/effects.dmi',"icon_state" ="electricity","layer" = EFFECTS_LAYER)
user.overlays.Add(halo)
spawn(0)
while(ready)
sleep(1)
energy++
if(energy >= 100 && ready)
Discharge()
playsound(get_turf(user), Snd, 50, 0)
start_time = world.time
if(do_mob(user, user, 100, uninterruptible=1))
if(ready)
Discharge()
obj/effect/proc_holder/spell/targeted/magnet/proc/Reset(mob/user = usr)
ready = 0
energy = 0
start_time = 0
if(halo)
user.overlays.Remove(halo)
@@ -50,16 +53,16 @@ obj/effect/proc_holder/spell/targeted/magnet/proc/Reset(mob/user = usr)
/obj/effect/proc_holder/spell/targeted/magnet/proc/Discharge(mob/user = usr)
var/mob/living/M = user
//M.electrocute_act(25,"magnet Bolt")
to_chat(M, "<span class='danger'>You lose control over the power.</span>")
Reset(user)
start_recharge()
/obj/effect/proc_holder/spell/targeted/magnet/cast(list/targets, mob/user = usr)
var/mob/living/carbon/target = targets[1]
ready = 0
var/mob/living/target = targets[1]
Snd = sound(null, repeat = 0, wait = 1, channel = Snd.channel) //byond, why you suck?
playsound(get_turf(user), Snd, 50, 0)// Sorry MrPerson, but the other ways just didn't do it the way i needed to work, this is the only way.
if(get_dist(user,target)>range)
to_chat(user, "<span class='notice'>They are too far away!</span>")
Reset(user)
@@ -88,13 +91,13 @@ obj/effect/proc_holder/spell/targeted/magnet/proc/Reset(mob/user = usr)
playsound(get_turf(target), 'sound/machines/defib_zap.ogg', 50, 1, -1)
if(75 to 100)
//CHAIN magnet
Bolt(user,target,energy,user)
Bolt(user,target,energy,5,user)
Reset(user)
/obj/effect/proc_holder/spell/targeted/magnet/proc/Bolt(mob/origin,mob/target,bolt_energy,mob/user = usr)
origin.Beam(target,icon_state="lightning",icon='icons/effects/effects.dmi',time=5)
/obj/effect/proc_holder/spell/targeted/magnet/proc/Bolt(mob/origin,mob/target,bolt_energy,bounces, mob/user = usr)
origin.Beam(target, icon_state="lightning", icon='icons/effects/effects.dmi', time=5)
var/mob/living/carbon/current = target
if(bolt_energy < 75)
if(bounces < 1)
for(var/obj/item/I in target.l_hand)
if(I.flags & CONDUCT)
I.throw_at(user, I.throw_range, 4, target)
@@ -119,4 +122,4 @@ obj/effect/proc_holder/spell/targeted/magnet/proc/Reset(mob/user = usr)
return
var/mob/living/next = pick(possible_targets)
if(next)
Bolt(current,next,bolt_energy-6,user) // 5 max bounces
Bolt(current,next,bolt_energy,bounces-1,user) // 5 max bounces
+2 -2
View File
@@ -45,7 +45,7 @@
clothes_req = 1
invocation = "BIRUZ BENNAR"
invocation_type = "shout"
message = "\blue You feel strong! You feel a pressure building behind your eyes!"
message = "<span class='notice'>You feel strong! You feel a pressure building behind your eyes!</span>"
range = -1
include_user = 1
centcom_cancast = 0
@@ -235,7 +235,7 @@
clothes_req = 0
invocation = "STI KALY"
invocation_type = "whisper"
message = "\blue Your eyes cry out in pain!"
message = "<span class='notice'>Your eyes cry out in pain!</span>"
cooldown_min = 50 //12 deciseconds reduction per rank
starting_spells = list("/obj/effect/proc_holder/spell/targeted/inflict_handler/blind","/obj/effect/proc_holder/spell/targeted/genetic/blind")
+38 -4
View File
@@ -326,6 +326,17 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/////// Weapons: Specialist
/datum/supply_packs/security/armory/ballistic
name = "Riot Shotguns Crate"
contains = list(/obj/item/weapon/gun/projectile/shotgun/riot,
/obj/item/weapon/gun/projectile/shotgun/riot,
/obj/item/weapon/gun/projectile/shotgun/riot,
/obj/item/weapon/storage/belt/bandolier,
/obj/item/weapon/storage/belt/bandolier,
/obj/item/weapon/storage/belt/bandolier)
cost = 45
containername = "riot shotgun crate"
/datum/supply_packs/security/armory/ballisticauto
name = "Combat Shotguns Crate"
contains = list(/obj/item/weapon/gun/projectile/shotgun/automatic/combat,
/obj/item/weapon/gun/projectile/shotgun/automatic/combat,
@@ -333,13 +344,36 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/obj/item/weapon/storage/belt/bandolier,
/obj/item/weapon/storage/belt/bandolier,
/obj/item/weapon/storage/belt/bandolier)
cost = 20
cost = 80
containername = "combat shotgun crate"
/datum/supply_packs/security/armory/buckshotammo
name = "Buckshot Ammo Crate"
contains = list(/obj/item/weapon/storage/box/buck,
/obj/item/weapon/storage/box/buck,
/obj/item/weapon/storage/box/buck,
/obj/item/weapon/storage/box/buck,
/obj/item/weapon/storage/box/buck,
/obj/item/weapon/storage/box/buck)
cost = 45
containername = "buckshot ammo crate"
/datum/supply_packs/security/armory/slugammo
name = "Slug Ammo Crate"
contains = list(/obj/item/weapon/storage/box/slug,
/obj/item/weapon/storage/box/slug,
/obj/item/weapon/storage/box/slug,
/obj/item/weapon/storage/box/slug,
/obj/item/weapon/storage/box/slug,
/obj/item/weapon/storage/box/slug)
cost = 45
containername = "slug ammo crate"
/datum/supply_packs/security/armory/expenergy
name = "Energy Guns Crate"
contains = list(/obj/item/weapon/gun/energy/gun,
/obj/item/weapon/gun/energy/gun) // Only two guns to keep costs down
/obj/item/weapon/gun/energy/gun,
/obj/item/weapon/gun/energy/gun)
cost = 25
containertype = /obj/structure/closet/crate/secure/plasma
containername = "energy gun crate"
@@ -376,9 +410,9 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/////// Implants & etc
/datum/supply_packs/security/armory/loyalty
/datum/supply_packs/security/armory/mindshield
name = "Mindshield Implants Crate"
contains = list (/obj/item/weapon/storage/lockbox/loyalty)
contains = list (/obj/item/weapon/storage/lockbox/mindshield)
cost = 40
containername = "mindshield implant crate"
+2 -1
View File
@@ -319,7 +319,7 @@ var/list/uplink_items = list()
cost = 6
job = list("Life Support Specialist")
/datum/uplink_item/dangerous/energizedfireaxe
/datum/uplink_item/jobspecific/energizedfireaxe
name = "Energized Fire Axe"
desc = "A fire axe with a massive electrical charge built into it. It can release this charge on its first victim and will be rather plain after that."
reference = "EFA"
@@ -352,6 +352,7 @@ var/list/uplink_items = list()
/datum/uplink_item/jobspecific/poison_pen
name = "Poison Pen"
desc = "Cutting edge of deadly writing implements technology, this gadget will infuse any piece of paper with delayed contact poison."
reference = "PP"
item = /obj/item/weapon/pen/poison
cost = 2
excludefrom = list(/datum/game_mode/nuclear)
+15
View File
@@ -0,0 +1,15 @@
/datum/map_template/vr
name = null
var/id = null // For blacklisting purposes, all vr levels need an id
var/description = "This is a placeholder. Please contact your virtual adminsitrator if you see this."
var/outfit = null
var/prefix = null
var/suffix = null
/datum/map_template/vr/New()
if(!name && id)
name = id
mappath = prefix + suffix
..(path = mappath)
+16
View File
@@ -0,0 +1,16 @@
/datum/map_template/vr/level
prefix = "_maps/map_files/vr/"
/datum/map_template/vr/level/lobby
id = "lobby"
suffix = "lobby.dmm"
name = "Virtual Hub Facility"
description = "This is the lobby. The hub for all things VR."
outfit = /datum/outfit/vr/vr_basic
/datum/map_template/vr/level/roman
id = "roman"
suffix = "blood_and_sand.dmm"
name = "Blood and Sand Arena"
description = "To the Death!"
outfit = /datum/outfit/vr/roman
+21 -29
View File
@@ -11,52 +11,44 @@
var/const/AIRLOCK_WIRE_IDSCAN = 1
var/const/AIRLOCK_WIRE_MAIN_POWER1 = 2
var/const/AIRLOCK_WIRE_MAIN_POWER2 = 4
var/const/AIRLOCK_WIRE_DOOR_BOLTS = 8
var/const/AIRLOCK_WIRE_BACKUP_POWER1 = 16
var/const/AIRLOCK_WIRE_BACKUP_POWER2 = 32
var/const/AIRLOCK_WIRE_OPEN_DOOR = 64
var/const/AIRLOCK_WIRE_AI_CONTROL = 128
var/const/AIRLOCK_WIRE_ELECTRIFY = 256
var/const/AIRLOCK_WIRE_SAFETY = 512
var/const/AIRLOCK_WIRE_SPEED = 1024
var/const/AIRLOCK_WIRE_LIGHT = 2048
var/const/AIRLOCK_WIRE_DOOR_BOLTS = 4
var/const/AIRLOCK_WIRE_BACKUP_POWER1 = 8
var/const/AIRLOCK_WIRE_OPEN_DOOR = 16
var/const/AIRLOCK_WIRE_AI_CONTROL = 32
var/const/AIRLOCK_WIRE_ELECTRIFY = 64
var/const/AIRLOCK_WIRE_SAFETY = 128
var/const/AIRLOCK_WIRE_SPEED = 256
var/const/AIRLOCK_WIRE_LIGHT = 512
/datum/wires/airlock/GetWireName(index)
switch(index)
if(AIRLOCK_WIRE_IDSCAN)
return "ID Scan"
if(AIRLOCK_WIRE_MAIN_POWER1)
return "Primary Power"
if(AIRLOCK_WIRE_MAIN_POWER2)
return "Secondary Power"
if(AIRLOCK_WIRE_DOOR_BOLTS)
return "Door Bolts"
if(AIRLOCK_WIRE_BACKUP_POWER1)
return "Primary Backup Power"
if(AIRLOCK_WIRE_BACKUP_POWER2)
return "Secondary Backup Power"
if(AIRLOCK_WIRE_OPEN_DOOR)
return "Door State"
if(AIRLOCK_WIRE_AI_CONTROL)
return "AI Control"
if(AIRLOCK_WIRE_ELECTRIFY)
return "Electrification"
if(AIRLOCK_WIRE_ELECTRIFY)
return "Door Safeties"
if(AIRLOCK_WIRE_ELECTRIFY)
return "Door Timing"
if(AIRLOCK_WIRE_ELECTRIFY)
return "Bolt Lights"
@@ -89,7 +81,7 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
switch(index)
if(AIRLOCK_WIRE_IDSCAN)
A.aiDisabledIdScanner = !mended
if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
if(AIRLOCK_WIRE_MAIN_POWER1)
if(!mended)
//Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be crowbarred open, but bolts-raising will not work. Cutting these wires may electocute the user.
@@ -99,7 +91,7 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
A.regainMainPower()
A.shock(usr, 50)
if(AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
if(AIRLOCK_WIRE_BACKUP_POWER1)
if(!mended)
//Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user.
@@ -165,7 +157,7 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
if(A.emergency)
A.emergency = 0
A.update_icon()
if(AIRLOCK_WIRE_MAIN_POWER1 || AIRLOCK_WIRE_MAIN_POWER2)
if(AIRLOCK_WIRE_MAIN_POWER1)
//Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter).
A.loseMainPower()
if(AIRLOCK_WIRE_DOOR_BOLTS)
@@ -176,7 +168,7 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
else
A.unlock()
if(AIRLOCK_WIRE_BACKUP_POWER1 || AIRLOCK_WIRE_BACKUP_POWER2)
if(AIRLOCK_WIRE_BACKUP_POWER1)
//two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter).
A.loseBackupPower()
if(AIRLOCK_WIRE_AI_CONTROL)
+5 -5
View File
@@ -52,15 +52,15 @@ var/const/WIRE_BEACON_RX = 256 // beacon ping recv
/datum/wires/mulebot/UpdatePulsed(index)
switch(index)
if(WIRE_POWER1, WIRE_POWER2)
holder.visible_message("\blue [bicon(holder)] The charge light flickers.")
holder.visible_message("<span class='notice'>[bicon(holder)] The charge light flickers.</span>")
if(WIRE_AVOIDANCE)
holder.visible_message("\blue [bicon(holder)] The external warning lights flash briefly.")
holder.visible_message("<span class='notice'>[bicon(holder)] The external warning lights flash briefly.</span>")
if(WIRE_LOADCHECK)
holder.visible_message("\blue [bicon(holder)] The load platform clunks.")
holder.visible_message("<span class='notice'>[bicon(holder)] The load platform clunks.</span>")
if(WIRE_MOTOR1, WIRE_MOTOR2)
holder.visible_message("\blue [bicon(holder)] The drive motor whines briefly.")
holder.visible_message("<span class='notice'>[bicon(holder)] The drive motor whines briefly.</span>")
else
holder.visible_message("\blue [bicon(holder)] You hear a radio crackle.")
holder.visible_message("<span class='notice'>[bicon(holder)] You hear a radio crackle.</span>")
..()
// HELPER PROCS
+2 -2
View File
@@ -52,12 +52,12 @@ var/const/NUCLEARBOMB_WIRE_SAFETY = 4
if(N.safety == 1)
if(!N.is_syndicate)
set_security_level(N.previous_level)
N.visible_message("\blue The [N] quiets down.")
N.visible_message("<span class='notice'>The [N] quiets down.</span>")
if(!N.lighthack)
if(N.icon_state == "nuclearbomb2")
N.icon_state = "nuclearbomb1"
else
N.visible_message("\blue The [N] emits a quiet whirling noise!")
N.visible_message("<span class='notice'>The [N] emits a quiet whirling noise!</span>")
updateUIs()
/datum/wires/nuclearbomb/UpdateCut(index, mended)
+23
View File
@@ -0,0 +1,23 @@
/datum/wires/tesla_coil
wire_count = 1
holder_type = /obj/machinery/power/tesla_coil
var/const/WIRE_ZAP = 1
/datum/wires/tesla_coil/GetWireName(index)
switch(index)
if(WIRE_ZAP)
return "Zap"
/datum/wires/tesla_coil/CanUse(mob/living/L)
var/obj/machinery/power/tesla_coil/T = holder
if(T && T.panel_open)
return 1
return 0
/datum/wires/tesla_coil/UpdatePulsed(index)
var/obj/machinery/power/tesla_coil/T = holder
switch(index)
if(WIRE_ZAP)
T.zap()
..()