mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-30 15:37:36 +01:00
Merge remote-tracking branch 'refs/remotes/ParadiseSS13/master'
This commit is contained in:
@@ -29,8 +29,7 @@
|
||||
Remove(owner)
|
||||
if(target)
|
||||
target = null
|
||||
qdel(button)
|
||||
button = null
|
||||
QDEL_NULL(button)
|
||||
return ..()
|
||||
|
||||
/datum/action/proc/Grant(mob/M)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
|
||||
+796
-681
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"))
|
||||
|
||||
@@ -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
|
||||
@@ -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")
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
..()
|
||||
Reference in New Issue
Block a user