mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 11:37:40 +01:00
Ported Uplinks, Door stuff, Hacktools, Compressed Matter implant.
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
/obj/item/weapon/storage/syndie_kit
|
||||
name = "Box"
|
||||
desc = "A sleek, sturdy box"
|
||||
icon_state = "box_of_doom"
|
||||
item_state = "syringe_kit"
|
||||
|
||||
/obj/item/weapon/storage/syndie_kit/imp_freedom
|
||||
name = "Freedom Implant (with injector)"
|
||||
|
||||
/obj/item/weapon/storage/syndie_kit/imp_freedom/New()
|
||||
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(src)
|
||||
O.imp = new /obj/item/weapon/implant/freedom(O)
|
||||
O.update()
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/syndie_kit/imp_compress
|
||||
name = "Compressed Matter Implant (with injector)"
|
||||
|
||||
/obj/item/weapon/storage/syndie_kit/imp_compress/New()
|
||||
new /obj/item/weapon/implanter/compressed(src)
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/syndie_kit/imp_explosive
|
||||
name = "Explosive Implant (with injector)"
|
||||
|
||||
/obj/item/weapon/storage/syndie_kit/imp_explosive/New()
|
||||
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(src)
|
||||
O.imp = new /obj/item/weapon/implant/explosive(O)
|
||||
O.name = "(BIO-HAZARD) BIO-detpack"
|
||||
O.update()
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/syndie_kit/imp_uplink
|
||||
name = "Uplink Implant (with injector)"
|
||||
|
||||
/obj/item/weapon/storage/syndie_kit/imp_uplink/New()
|
||||
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(src)
|
||||
O.imp = new /obj/item/weapon/implant/uplink(O)
|
||||
O.update()
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/syndie_kit/space
|
||||
name = "Space Suit and Helmet"
|
||||
|
||||
/obj/item/weapon/storage/syndie_kit/space/New()
|
||||
new /obj/item/clothing/suit/space/syndicate(src)
|
||||
new /obj/item/clothing/head/helmet/space/syndicate(src)
|
||||
..()
|
||||
return
|
||||
@@ -0,0 +1,337 @@
|
||||
/*
|
||||
|
||||
SYNDICATE UPLINKS
|
||||
|
||||
TO-DO:
|
||||
Once wizard is fixed, make sure the uplinks work correctly for it. wizard.dm is right now uncompiled and with broken code in it.
|
||||
|
||||
Clean the code up and comment it. Part of it is right now copy-pasted, with the general Topic() and modifications by Abi79.
|
||||
|
||||
I should take a more in-depth look at both the copy-pasted code for the individual uplinks below, and at each gamemode's code
|
||||
to see how uplinks are assigned and if there are any bugs with those.
|
||||
|
||||
|
||||
A list of items and costs is stored under the datum of every game mode, alongside the number of crystals, and the welcoming message.
|
||||
|
||||
*/
|
||||
|
||||
/obj/item/device/uplink
|
||||
var/welcome // Welcoming menu message
|
||||
var/menu_message = "" // The actual menu text
|
||||
var/items // List of items
|
||||
var/list/ItemList // Parsed list of items
|
||||
var/uses // Numbers of crystals
|
||||
|
||||
New()
|
||||
welcome = ticker.mode.uplink_welcome
|
||||
items = dd_replacetext(ticker.mode.uplink_items, "\n", "") // Getting the text string of items
|
||||
ItemList = dd_text2list(src.items, ";") // Parsing the items text string
|
||||
uses = ticker.mode.uplink_uses
|
||||
|
||||
//Let's build a menu!
|
||||
proc/generate_menu()
|
||||
src.menu_message = "<B>[src.welcome]</B><BR>"
|
||||
src.menu_message += "Tele-Crystals left: [src.uses]<BR>"
|
||||
src.menu_message += "<HR>"
|
||||
src.menu_message += "<B>Request item:</B><BR>"
|
||||
src.menu_message += "<I>Each item costs a number of tele-crystals as indicated by the number following their name.</I><BR>"
|
||||
|
||||
var/cost
|
||||
var/item
|
||||
var/name
|
||||
var/path_obj
|
||||
var/path_text
|
||||
var/category_items = 1 //To prevent stupid :P
|
||||
|
||||
for(var/D in ItemList)
|
||||
var/list/O = stringsplit(D, ":")
|
||||
if(O.len != 3) //If it is not an actual item, make a break in the menu.
|
||||
if(category_items < 1) //If there were no itens in the last category...
|
||||
src.menu_message += "<i>We apologize, as you could not afford anything from this category.</i><br>"
|
||||
if(O.len == 1) //If there is one item, it's probably a title
|
||||
src.menu_message += "<b>[O[1]]</b><br>"
|
||||
category_items = 0
|
||||
else //Else, it's a white space.
|
||||
src.menu_message += "<br>"
|
||||
continue
|
||||
|
||||
path_text = O[1]
|
||||
cost = text2num(O[2])
|
||||
|
||||
if(cost>uses)
|
||||
continue
|
||||
|
||||
path_obj = text2path(path_text)
|
||||
item = new path_obj()
|
||||
name = O[3]
|
||||
del item
|
||||
|
||||
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=[path_text];cost=[cost]'>[name]</A> ([cost])<BR>"
|
||||
category_items++
|
||||
|
||||
src.menu_message += "<HR>"
|
||||
return
|
||||
|
||||
Topic(href, href_list)
|
||||
if (href_list["buy_item"])
|
||||
if(text2num(href_list["cost"]) > uses) // Not enough crystals for the item
|
||||
return 0
|
||||
|
||||
if(usr:mind && ticker.mode.traitors[usr:mind])
|
||||
var/datum/traitorinfo/info = ticker.mode.traitors[usr:mind]
|
||||
info.spawnlist += href_list["buy_item"]
|
||||
|
||||
uses -= text2num(href_list["cost"])
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
/*
|
||||
*PDA uplink
|
||||
*/
|
||||
|
||||
//Syndicate uplink hidden inside a traitor PDA
|
||||
//Communicate with traitor through the PDA's note function.
|
||||
|
||||
/obj/item/device/uplink/pda
|
||||
name = "uplink module"
|
||||
desc = "An electronic uplink system of unknown origin."
|
||||
icon = 'module.dmi'
|
||||
icon_state = "power_mod"
|
||||
var/obj/item/device/pda/hostpda = null
|
||||
|
||||
var/orignote = null //Restore original notes when locked.
|
||||
var/active = 0 //Are we currently active?
|
||||
var/lock_code = "" //The unlocking password.
|
||||
|
||||
proc
|
||||
unlock()
|
||||
if ((isnull(src.hostpda)) || (src.active))
|
||||
return
|
||||
|
||||
src.orignote = src.hostpda.note
|
||||
src.active = 1
|
||||
src.hostpda.mode = 1 //Switch right to the notes program
|
||||
|
||||
src.generate_menu()
|
||||
print_to_host(menu_message)
|
||||
|
||||
for (var/mob/M in viewers(1, src.hostpda.loc))
|
||||
if (M.client && M.machine == src.hostpda)
|
||||
src.hostpda.attack_self(M)
|
||||
|
||||
return
|
||||
|
||||
print_to_host(var/text)
|
||||
if (isnull(hostpda))
|
||||
return
|
||||
hostpda.note = text
|
||||
|
||||
for (var/mob/M in viewers(1, hostpda.loc))
|
||||
if (M.client && M.machine == hostpda)
|
||||
hostpda.attack_self(M)
|
||||
return
|
||||
|
||||
shutdown_uplink()
|
||||
if (isnull(src.hostpda))
|
||||
return
|
||||
active = 0
|
||||
hostpda.note = orignote
|
||||
if (hostpda.mode==1)
|
||||
hostpda.mode = 0
|
||||
hostpda.updateDialog()
|
||||
return
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
src.generate_menu()
|
||||
src.hostpda.note = src.menu_message
|
||||
|
||||
|
||||
Topic(href, href_list)
|
||||
if ((isnull(src.hostpda)) || (!src.active))
|
||||
return
|
||||
|
||||
if (usr.stat || usr.restrained() || !in_range(src.hostpda, usr))
|
||||
return
|
||||
|
||||
if(..() == 1) // We can afford the item
|
||||
var/path_obj = text2path(href_list["buy_item"])
|
||||
var/mob/A = src.hostpda.loc
|
||||
var/item = new path_obj(get_turf(src.hostpda))
|
||||
if(ismob(A)) //&& !istype(item, /obj/spawner))
|
||||
if(!A.r_hand)
|
||||
item:loc = A
|
||||
A.r_hand = item
|
||||
item:layer = 20
|
||||
else if(!A.l_hand)
|
||||
item:loc = A
|
||||
A.l_hand = item
|
||||
item:layer = 20
|
||||
usr.update_clothing()
|
||||
// usr.client.onBought("[item:name]") When we have the stats again, uncomment.
|
||||
/* if(istype(item, /obj/spawner)) // Spawners need to have del called on them to avoid leaving a marker behind
|
||||
del item*/
|
||||
//HEADFINDBACK
|
||||
src.attack_self(usr)
|
||||
src.hostpda.attack_self(usr)
|
||||
return
|
||||
|
||||
|
||||
/*
|
||||
*Portable radio uplink
|
||||
*/
|
||||
|
||||
//A Syndicate uplink disguised as a portable radio
|
||||
/obj/item/device/uplink/radio/implanted
|
||||
uses = 5
|
||||
|
||||
/obj/item/device/uplink/radio
|
||||
name = "ship bounced radio"
|
||||
icon = 'device.dmi'
|
||||
icon_state = "radio"
|
||||
var/temp = null //Temporary storage area for a message offering the option to destroy the radio
|
||||
var/selfdestruct = 0 //Set to 1 while the radio is self destructing itself.
|
||||
var/obj/item/device/radio/origradio = null
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
|
||||
w_class = 2.0
|
||||
item_state = "radio"
|
||||
throwforce = 5
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
m_amt = 100
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
var/dat
|
||||
|
||||
if (src.selfdestruct)
|
||||
dat = "Self Destructing..."
|
||||
else
|
||||
if (src.temp)
|
||||
dat = "[src.temp]<BR><BR><A href='byond://?src=\ref[src];clear_selfdestruct=1'>Clear</A>"
|
||||
else
|
||||
src.generate_menu()
|
||||
dat = src.menu_message
|
||||
if (src.origradio) // Checking because sometimes the radio uplink may be spawned by itself, not as a normal unlockable radio
|
||||
dat += "<A href='byond://?src=\ref[src];lock=1'>Lock</A><BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<A href='byond://?src=\ref[src];selfdestruct=1'>Self-Destruct</A>"
|
||||
|
||||
user << browse(dat, "window=radio")
|
||||
onclose(user, "radio")
|
||||
return
|
||||
|
||||
Topic(href, href_list)
|
||||
if (usr.stat || usr.restrained())
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = usr
|
||||
|
||||
if (!( istype(H, /mob/living/carbon/human)))
|
||||
return 1
|
||||
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
|
||||
usr.machine = src
|
||||
|
||||
if(href_list["buy_item"])
|
||||
if(..() == 1) // We can afford the item
|
||||
var/path_obj = text2path(href_list["buy_item"])
|
||||
var/item = new path_obj(get_turf(src.loc))
|
||||
var/mob/A = src.loc
|
||||
if(ismob(A)) //&& !istype(item, /obj/spawner))
|
||||
if(!A.r_hand)
|
||||
item:loc = A
|
||||
A.r_hand = item
|
||||
item:layer = 20
|
||||
else if(!A.l_hand)
|
||||
item:loc = A
|
||||
A.l_hand = item
|
||||
item:layer = 20
|
||||
/* if(istype(item, /obj/spawner)) // Spawners need to have del called on them to avoid leaving a marker behind
|
||||
del item*/
|
||||
// usr.client.onBought("[item:name]") When we have the stats again, uncomment.
|
||||
src.attack_self(usr)
|
||||
return
|
||||
|
||||
else if (href_list["lock"] && src.origradio)
|
||||
// presto chango, a regular radio again! (reset the freq too...)
|
||||
usr.machine = null
|
||||
usr << browse(null, "window=radio")
|
||||
var/obj/item/device/radio/T = src.origradio
|
||||
var/obj/item/device/uplink/radio/R = src
|
||||
R.loc = T
|
||||
T.loc = usr
|
||||
// R.layer = initial(R.layer)
|
||||
R.layer = 0
|
||||
if (usr.client)
|
||||
usr.client.screen -= R
|
||||
if (usr.r_hand == R)
|
||||
usr.u_equip(R)
|
||||
usr.r_hand = T
|
||||
|
||||
else
|
||||
usr.u_equip(R)
|
||||
usr.l_hand = T
|
||||
R.loc = T
|
||||
T.layer = 20
|
||||
T.set_frequency(initial(T.frequency))
|
||||
T.attack_self(usr)
|
||||
return
|
||||
|
||||
else if (href_list["selfdestruct"])
|
||||
src.temp = "<A href='byond://?src=\ref[src];selfdestruct2=1'>Self-Destruct</A>"
|
||||
|
||||
else if (href_list["selfdestruct2"])
|
||||
src.selfdestruct = 1
|
||||
spawn (100)
|
||||
explode()
|
||||
return
|
||||
|
||||
else if (href_list["clear_selfdestruct"])
|
||||
src.temp = null
|
||||
|
||||
if (istype(src.loc, /mob))
|
||||
attack_self(src.loc)
|
||||
else
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if (M.client)
|
||||
src.attack_self(M)
|
||||
return
|
||||
|
||||
proc/explode()
|
||||
var/turf/location = get_turf(src.loc)
|
||||
if(location)
|
||||
location.hotspot_expose(700,125)
|
||||
explosion(location, 0, 0, 2, 4, 1)
|
||||
|
||||
del(src.master)
|
||||
del(src)
|
||||
return
|
||||
|
||||
proc/shutdown_uplink()
|
||||
if (!src.origradio)
|
||||
return
|
||||
var/list/nearby = viewers(1, src)
|
||||
for(var/mob/M in nearby)
|
||||
if (M.client && M.machine == src)
|
||||
M << browse(null, "window=radio")
|
||||
M.machine = null
|
||||
|
||||
var/obj/item/device/radio/T = src.origradio
|
||||
var/obj/item/weapon/syndicate_uplink/R = src
|
||||
var/mob/L = src.loc
|
||||
R.loc = T
|
||||
T.loc = L
|
||||
// R.layer = initial(R.layer)
|
||||
R.layer = 0
|
||||
if (istype(L))
|
||||
if (L.client)
|
||||
L.client.screen -= R
|
||||
if (L.r_hand == R)
|
||||
L.u_equip(R)
|
||||
L.r_hand = T
|
||||
else
|
||||
L.u_equip(R)
|
||||
L.l_hand = T
|
||||
T.layer = 20
|
||||
T.set_frequency(initial(T.frequency))
|
||||
return
|
||||
@@ -0,0 +1,156 @@
|
||||
// Contains: copy machine
|
||||
|
||||
/obj/machinery/copier
|
||||
name = "Copy Machine"
|
||||
icon = 'bureaucracy.dmi'
|
||||
icon_state = "copier"
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/num_copies = 1 // number of copies selected, will be maintained between jobs
|
||||
var/copying = 0 // are we copying
|
||||
var/job_num_copies = 0 // number of copies remaining
|
||||
var/top_open = 1 // the top is open
|
||||
var/obj/item/weapon/template // the paper OR photo being scanned
|
||||
var/copy_wait = 0 // wait for current page to finish
|
||||
var/max_copies = 10 // MAP EDITOR: can set the number of max copies, possibly to 5 or something for public, more for QM, robutist, etc.
|
||||
|
||||
/obj/machinery/copier/New()
|
||||
..()
|
||||
update()
|
||||
|
||||
/obj/machinery/copier/attackby(obj/item/weapon/O as obj, mob/user as mob)
|
||||
if(!top_open)
|
||||
return
|
||||
|
||||
if (istype(O, /obj/item/weapon/paper) || istype(O, /obj/item/weapon/photo))
|
||||
// put it inside
|
||||
template = O
|
||||
usr.drop_item()
|
||||
O.loc = src
|
||||
top_open = 0
|
||||
update()
|
||||
updateDialog()
|
||||
|
||||
/obj/machinery/copier/attack_paw(user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/copier/attack_ai(user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/copier/attack_hand(user as mob)
|
||||
// da UI
|
||||
var/dat
|
||||
if(..())
|
||||
return
|
||||
|
||||
if(src.stat)
|
||||
user << "[name] does not seem to be responding to your button mashing."
|
||||
return
|
||||
|
||||
/*
|
||||
if(top_open)
|
||||
user << "[name] beeps, \"Please place a paper on top and close the lid.\""
|
||||
return
|
||||
*/
|
||||
|
||||
dat = "<HEAD><TITLE>Copy Machine</TITLE></HEAD><TT><b>Xeno Corp. Copying Machine</b><hr>"
|
||||
|
||||
if(copying)
|
||||
dat += "[job_num_copies] copies remaining.<br><br>"
|
||||
dat += "<A href='?src=\ref[src];cancel=1'>Cancel</a>"
|
||||
else
|
||||
if(!top_open)
|
||||
dat += "<A href='?src=\ref[src];open=1'>Open Top</a><br><br>"
|
||||
|
||||
dat += "Number of Copies: "
|
||||
|
||||
dat += "<A href='?src=\ref[src];num=-10'>-</a>"
|
||||
dat += "<A href='?src=\ref[src];num=-1'>-</a>"
|
||||
dat += " [num_copies] "
|
||||
dat += "<A href='?src=\ref[src];num=1'>+</a>"
|
||||
dat += "<A href='?src=\ref[src];num=10'>+</a><br><br>"
|
||||
|
||||
if(template)
|
||||
dat += "<A href='?src=\ref[src];copy=1'>Copy</a>"
|
||||
else
|
||||
dat += "<b>No paper to be copied.<br>"
|
||||
dat += "Please place a paper or photograph on top and close the lid.</b>"
|
||||
|
||||
dat += "<hr></TT>"
|
||||
|
||||
user << browse(dat, "window=copy_machine")
|
||||
onclose(user, "copy_machine")
|
||||
|
||||
/obj/machinery/copier/proc/update()
|
||||
if(top_open)
|
||||
icon_state = "copier_o"
|
||||
else if(copying)
|
||||
icon_state = "copier_s"
|
||||
else
|
||||
icon_state = "copier"
|
||||
|
||||
/obj/machinery/copier/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
usr.machine = src
|
||||
src.add_fingerprint(usr)
|
||||
|
||||
if(href_list["num"])
|
||||
num_copies += text2num(href_list["num"])
|
||||
if(num_copies < 1)
|
||||
num_copies = 1
|
||||
else if(num_copies > max_copies)
|
||||
num_copies = max_copies
|
||||
updateDialog()
|
||||
if(href_list["open"])
|
||||
template.loc = src.loc
|
||||
template = null
|
||||
top_open = 1
|
||||
updateDialog()
|
||||
update()
|
||||
if(href_list["copy"])
|
||||
copying = 1
|
||||
job_num_copies = num_copies
|
||||
update()
|
||||
updateDialog()
|
||||
if(href_list["cancel"])
|
||||
copying = 0
|
||||
job_num_copies = 0
|
||||
update()
|
||||
updateDialog()
|
||||
|
||||
/obj/machinery/copier/process()
|
||||
if(src.stat)
|
||||
usr << "[name] does not seem to be responding to your button mashing."
|
||||
return
|
||||
|
||||
if(copying && !copy_wait)
|
||||
copy_wait = 1
|
||||
// make noise
|
||||
playsound(src, 'polaroid1.ogg', 50, 1)
|
||||
spawn(5)
|
||||
if(!copying)
|
||||
return // user cancelled
|
||||
|
||||
if(istype(template, /obj/item/weapon/paper))
|
||||
// make duplicate paper
|
||||
var/obj/item/weapon/paper/P = new(src.loc)
|
||||
P.name = template.name
|
||||
P.info = template:info
|
||||
P.stamped = template:stamped
|
||||
P.icon_state = template.icon_state
|
||||
else if(istype(template, /obj/item/weapon/photo))
|
||||
// make duplicate photo
|
||||
var/obj/item/weapon/photo/P = new(src.loc)
|
||||
P.name = template.name
|
||||
P.desc = template.desc
|
||||
P.icon = template.icon
|
||||
|
||||
// copy counting stuff
|
||||
job_num_copies -= 1
|
||||
if(job_num_copies == 0)
|
||||
usr << "[name] beeps happily."
|
||||
copying = 0
|
||||
update()
|
||||
updateDialog()
|
||||
copy_wait = 0
|
||||
@@ -0,0 +1,23 @@
|
||||
/obj/structure/filingcabinet
|
||||
name = "Filing Cabinet"
|
||||
desc = "A large cabinet with drawers."
|
||||
icon = 'computer.dmi'
|
||||
icon_state = "messyfiles"
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
/obj/structure/filingcabinet/attackby(obj/item/weapon/paper/P,mob/M)
|
||||
if(istype(P))
|
||||
M << "You put the [P] in the [src]."
|
||||
M.drop_item()
|
||||
P.loc = src
|
||||
else
|
||||
M << "You can't put a [P] in the [src]!"
|
||||
|
||||
/obj/structure/filingcabinet/attack_hand(mob/user)
|
||||
if(src.contents.len <= 0)
|
||||
user << "The [src] is empty."
|
||||
return
|
||||
var/obj/item/weapon/paper/P = input(user,"Choose a sheet to take out.","[src]", "Cancel") as null|obj in src.contents
|
||||
if(in_range(src,user))
|
||||
P.loc = user.loc
|
||||
@@ -0,0 +1,208 @@
|
||||
/obj/spawner
|
||||
name = "object spawner"
|
||||
|
||||
/obj/spawner/bomb
|
||||
name = "bomb"
|
||||
icon = 'screen1.dmi'
|
||||
icon_state = "x"
|
||||
var/btype = 0 //0 = radio, 1= prox, 2=time
|
||||
var/explosive = 1 // 0= firebomb
|
||||
var/btemp = 500 // bomb temperature (degC)
|
||||
var/active = 0
|
||||
|
||||
/obj/spawner/bomb/radio
|
||||
btype = 0
|
||||
|
||||
/obj/spawner/bomb/proximity
|
||||
btype = 1
|
||||
|
||||
/obj/spawner/bomb/timer
|
||||
btype = 2
|
||||
|
||||
/obj/spawner/bomb/timer/syndicate
|
||||
btemp = 450
|
||||
|
||||
/obj/spawner/bomb/suicide
|
||||
btype = 3
|
||||
|
||||
/obj/spawner/newbomb
|
||||
// Remember to delete it if you use it for anything else other than uplinks. See the commented line in its New() - Abi
|
||||
// Going in depth: the reason we do not do a Del() in its New()is because then we cannot access its properties.
|
||||
// I might be doing this wrong / not knowing of a Byond function. If I'm doing it wrong, let me know please.
|
||||
name = "bomb"
|
||||
icon = 'screen1.dmi'
|
||||
icon_state = "x"
|
||||
var/btype = 0 // 0=radio, 1=prox, 2=time
|
||||
var/btemp1 = 1500
|
||||
var/btemp2 = 1000 // tank temperatures
|
||||
|
||||
/obj/spawner/newbomb/timer
|
||||
btype = 2
|
||||
|
||||
/obj/spawner/newbomb/timer/syndicate
|
||||
name = "Low-Yield Bomb"
|
||||
btemp1 = 1500
|
||||
btemp2 = 1000
|
||||
|
||||
/obj/spawner/newbomb/proximity
|
||||
btype = 1
|
||||
|
||||
/obj/spawner/newbomb/radio
|
||||
btype = 0
|
||||
|
||||
/obj/spawner/bomb/New()
|
||||
..()
|
||||
|
||||
switch (src.btype)
|
||||
// radio
|
||||
if (0)
|
||||
var/obj/item/assembly/r_i_ptank/R = new /obj/item/assembly/r_i_ptank(src.loc)
|
||||
var/obj/item/weapon/tank/plasma/p3 = new /obj/item/weapon/tank/plasma(R)
|
||||
var/obj/item/device/radio/signaler/p1 = new /obj/item/device/radio/signaler(R)
|
||||
var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
|
||||
R.part1 = p1
|
||||
R.part2 = p2
|
||||
R.part3 = p3
|
||||
p1.master = R
|
||||
p2.master = R
|
||||
p3.master = R
|
||||
R.status = explosive
|
||||
p1.b_stat = 0
|
||||
p2.status = 1
|
||||
p3.air_contents.temperature = btemp + T0C
|
||||
|
||||
// proximity
|
||||
if (1)
|
||||
var/obj/item/assembly/m_i_ptank/R = new /obj/item/assembly/m_i_ptank(src.loc)
|
||||
var/obj/item/weapon/tank/plasma/p3 = new /obj/item/weapon/tank/plasma(R)
|
||||
var/obj/item/device/prox_sensor/p1 = new /obj/item/device/prox_sensor(R)
|
||||
var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
|
||||
R.part1 = p1
|
||||
R.part2 = p2
|
||||
R.part3 = p3
|
||||
p1.master = R
|
||||
p2.master = R
|
||||
p3.master = R
|
||||
R.status = explosive
|
||||
|
||||
p3.air_contents.temperature = btemp + T0C
|
||||
p2.status = 1
|
||||
|
||||
if(src.active)
|
||||
R.part1.state = 1
|
||||
R.part1.icon_state = text("motion[]", 1)
|
||||
R.c_state(1, src)
|
||||
|
||||
// timer
|
||||
if (2)
|
||||
var/obj/item/assembly/t_i_ptank/R = new /obj/item/assembly/t_i_ptank(src.loc)
|
||||
var/obj/item/weapon/tank/plasma/p3 = new /obj/item/weapon/tank/plasma(R)
|
||||
var/obj/item/device/timer/p1 = new /obj/item/device/timer(R)
|
||||
var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
|
||||
R.part1 = p1
|
||||
R.part2 = p2
|
||||
R.part3 = p3
|
||||
p1.master = R
|
||||
p2.master = R
|
||||
p3.master = R
|
||||
R.status = explosive
|
||||
|
||||
p3.air_contents.temperature = btemp + T0C
|
||||
p2.status = 1
|
||||
//bombvest
|
||||
if(3)
|
||||
var/obj/item/clothing/suit/armor/a_i_a_ptank/R = new /obj/item/clothing/suit/armor/a_i_a_ptank(src.loc)
|
||||
var/obj/item/weapon/tank/plasma/p4 = new /obj/item/weapon/tank/plasma(R)
|
||||
var/obj/item/device/healthanalyzer/p1 = new /obj/item/device/healthanalyzer(R)
|
||||
var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
|
||||
var/obj/item/clothing/suit/armor/vest/p3 = new /obj/item/clothing/suit/armor/vest(R)
|
||||
R.part1 = p1
|
||||
R.part2 = p2
|
||||
R.part3 = p3
|
||||
R.part4 = p4
|
||||
p1.master = R
|
||||
p2.master = R
|
||||
p3.master = R
|
||||
p4.master = R
|
||||
R.status = explosive
|
||||
|
||||
p4.air_contents.temperature = btemp + T0C
|
||||
p2.status = 1
|
||||
|
||||
del(src)
|
||||
|
||||
|
||||
/obj/spawner/newbomb/New()
|
||||
..()
|
||||
|
||||
switch (src.btype)
|
||||
// radio
|
||||
if (0)
|
||||
|
||||
var/obj/item/device/transfer_valve/V = new(src.loc)
|
||||
var/obj/item/weapon/tank/plasma/PT = new(V)
|
||||
var/obj/item/weapon/tank/oxygen/OT = new(V)
|
||||
|
||||
var/obj/item/device/radio/signaler/S = new(V)
|
||||
|
||||
V.tank_one = PT
|
||||
V.tank_two = OT
|
||||
V.attached_device = S
|
||||
|
||||
S.master = V
|
||||
PT.master = V
|
||||
OT.master = V
|
||||
|
||||
S.b_stat = 0
|
||||
|
||||
PT.air_contents.temperature = btemp1 + T0C
|
||||
OT.air_contents.temperature = btemp2 + T0C
|
||||
|
||||
V.update_icon()
|
||||
|
||||
// proximity
|
||||
if (1)
|
||||
|
||||
var/obj/item/device/transfer_valve/V = new(src.loc)
|
||||
var/obj/item/weapon/tank/plasma/PT = new(V)
|
||||
var/obj/item/weapon/tank/oxygen/OT = new(V)
|
||||
|
||||
var/obj/item/device/prox_sensor/P = new(V)
|
||||
|
||||
V.tank_one = PT
|
||||
V.tank_two = OT
|
||||
V.attached_device = P
|
||||
|
||||
P.master = V
|
||||
PT.master = V
|
||||
OT.master = V
|
||||
|
||||
|
||||
PT.air_contents.temperature = btemp1 + T0C
|
||||
OT.air_contents.temperature = btemp2 + T0C
|
||||
|
||||
V.update_icon()
|
||||
|
||||
|
||||
// timer
|
||||
if (2)
|
||||
var/obj/item/device/transfer_valve/V = new(src.loc)
|
||||
var/obj/item/weapon/tank/plasma/PT = new(V)
|
||||
var/obj/item/weapon/tank/oxygen/OT = new(V)
|
||||
|
||||
var/obj/item/device/timer/T = new(V)
|
||||
|
||||
V.tank_one = PT
|
||||
V.tank_two = OT
|
||||
V.attached_device = T
|
||||
|
||||
T.master = V
|
||||
PT.master = V
|
||||
OT.master = V
|
||||
T.time = 30
|
||||
|
||||
PT.air_contents.temperature = btemp1 + T0C
|
||||
OT.air_contents.temperature = btemp2 + T0C
|
||||
|
||||
V.update_icon()
|
||||
//del(src)
|
||||
@@ -0,0 +1,128 @@
|
||||
/obj/machinery/engine/laser
|
||||
name = "Zero-point laser"
|
||||
desc = "A super-powerful laser"
|
||||
var/visible = 1
|
||||
var/state = 1.0
|
||||
var/obj/beam/e_beam/first
|
||||
var/power = 500
|
||||
icon = 'engine.dmi'
|
||||
icon_state = "laser"
|
||||
anchored = 1
|
||||
var/id
|
||||
var/on = 0
|
||||
var/freq = 50000
|
||||
var/phase = 0
|
||||
var/phase_variance = 0
|
||||
|
||||
/obj/machinery/engine/laser/process()
|
||||
if(on)
|
||||
if(!first)
|
||||
src.first = new /obj/beam/e_beam(src.loc)
|
||||
src.first.master = src
|
||||
src.first.dir = src.dir
|
||||
src.first.power = src.power
|
||||
src.first.freq = src.freq
|
||||
src.first.phase = src.phase
|
||||
src.first.phase_variance = src.phase_variance
|
||||
step(first, dir)
|
||||
if(first)
|
||||
src.first.updatebeam()
|
||||
else
|
||||
src.first.updatebeam()
|
||||
else
|
||||
if(first)
|
||||
del first
|
||||
|
||||
/obj/machinery/engine/laser/proc/setpower(var/powera)
|
||||
src.power = powera
|
||||
if(first)
|
||||
first.setpower(src.power)
|
||||
|
||||
|
||||
/obj/beam/e_beam
|
||||
name = "Laser beam"
|
||||
icon = 'projectiles.dmi'
|
||||
icon_state = "u_laser"
|
||||
var/obj/machinery/engine/laser/master = null
|
||||
var/obj/beam/e_beam/next = null
|
||||
var/power
|
||||
var/freq = 50000
|
||||
var/phase = 0
|
||||
var/phase_variance = 0
|
||||
anchored = 1
|
||||
|
||||
/obj/beam/e_beam/New()
|
||||
src.sd_SetLuminosity(4)
|
||||
|
||||
/obj/beam/e_beam/proc/updatebeam()
|
||||
if(!next)
|
||||
if(get_step(src.loc,src.dir))
|
||||
var/obj/beam/e_beam/e = new /obj/beam/e_beam(src.loc)
|
||||
e.dir = src.dir
|
||||
src.next = e
|
||||
e.master = src.master
|
||||
e.power = src.power
|
||||
e.phase = src.phase
|
||||
src.phase+=src.phase_variance
|
||||
e.freq = src.freq
|
||||
e.phase_variance = src.phase_variance
|
||||
if(src.loc.density == 0)
|
||||
for(var/atom/o in src.loc.contents)
|
||||
if(o.density || o == src.master || (ismob(o) && !istype(o, /mob/dead)) )
|
||||
o.laser_act(src)
|
||||
del src
|
||||
return
|
||||
else
|
||||
src.loc.laser_act(src)
|
||||
del e
|
||||
return
|
||||
step(e,e.dir)
|
||||
if(e)
|
||||
e.updatebeam()
|
||||
else
|
||||
next.updatebeam()
|
||||
|
||||
/atom/proc/laser_act(var/obj/beam/e_beam/b)
|
||||
return
|
||||
|
||||
/mob/living/carbon/laser_act(var/obj/beam/e_beam/b)
|
||||
for(var/t in organs)
|
||||
var/datum/organ/external/affecting = organs["[t]"]
|
||||
if (affecting.take_damage(0, b.power/400,0,0))
|
||||
UpdateDamageIcon()
|
||||
else
|
||||
UpdateDamage()
|
||||
|
||||
/obj/beam/e_beam/Bump(atom/Obstacle)
|
||||
Obstacle.laser_act(src)
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
/obj/beam/e_beam/proc/setpower(var/powera)
|
||||
src.power = powera
|
||||
if(src.next)
|
||||
src.next.setpower(powera)
|
||||
|
||||
/obj/beam/e_beam/Bumped()
|
||||
src.hit()
|
||||
return
|
||||
|
||||
/obj/beam/e_beam/HasEntered(atom/movable/AM as mob|obj)
|
||||
if (istype(AM, /obj/beam))
|
||||
return
|
||||
spawn( 0 )
|
||||
AM.laser_act(src)
|
||||
src.hit()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/beam/e_beam/Del()
|
||||
if(next)
|
||||
del(next)
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/beam/e_beam/proc/hit()
|
||||
del src
|
||||
return
|
||||
@@ -0,0 +1,130 @@
|
||||
//The laser control computer
|
||||
//Used to control the lasers
|
||||
/obj/machinery/computer/lasercon
|
||||
name = "Laser control computer"
|
||||
var/obj/machinery/engine/laser/laser = null
|
||||
icon_state = "atmos"
|
||||
var/id
|
||||
var/advanced = 0
|
||||
|
||||
/obj/machinery/computer/lasercon/New()
|
||||
spawn(1)
|
||||
if(istype(src.id,/list))
|
||||
laser = list()
|
||||
for(var/obj/machinery/engine/laser/las in world)
|
||||
if(las.id in src.id)
|
||||
laser += las
|
||||
else
|
||||
for(var/obj/machinery/engine/laser/las in world)
|
||||
if(las.id == src.id)
|
||||
laser = list(las)
|
||||
|
||||
|
||||
|
||||
/obj/machinery/computer/lasercon/attack_ai(mob/user)
|
||||
add_fingerprint(user)
|
||||
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/computer/lasercon/attack_hand(mob/user)
|
||||
add_fingerprint(user)
|
||||
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
interact(user)
|
||||
|
||||
|
||||
/obj/machinery/computer/lasercon/proc/interact(mob/user)
|
||||
|
||||
if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) )
|
||||
if (!istype(user, /mob/living/silicon))
|
||||
user.machine = null
|
||||
user << browse(null, "window=powcomp")
|
||||
return
|
||||
|
||||
|
||||
user.machine = src
|
||||
var/t = "<TT><B>Laser status monitor</B><HR>"
|
||||
|
||||
var/obj/machinery/engine/laser/laser = src.laser[1]
|
||||
|
||||
if(!laser)
|
||||
t += "\red No laser found"
|
||||
else
|
||||
|
||||
|
||||
t += "Power level: <A href = '?src=\ref[src];input=-4'>-</A> <A href = '?src=\ref[src];input=-3'>-</A> <A href = '?src=\ref[src];input=-2'>-</A> <A href = '?src=\ref[src];input=-1'>-</A> [add_lspace(laser.power,5)] <A href = '?src=\ref[src];input=1'>+</A> <A href = '?src=\ref[src];input=2'>+</A> <A href = '?src=\ref[src];input=3'>+</A> <A href = '?src=\ref[src];input=4'>+</A><BR>"
|
||||
if(advanced)
|
||||
t += "Frequency: <A href = '?src=\ref[src];freq=-10000'>-</A> <A href = '?src=\ref[src];freq=-1000'>-</A> [add_lspace(laser.freq,5)] <A href = '?src=\ref[src];freq=1000'>+</A> <A href = '?src=\ref[src];freq=10000'>+</A><BR>"
|
||||
|
||||
t += "Output: [laser.on ? "<B>Online</B> <A href = '?src=\ref[src];online=1'>Offline</A>" : "<A href = '?src=\ref[src];online=1'>Online</A> <B>Offline</B> "]<BR>"
|
||||
|
||||
t += "<BR><HR><A href='?src=\ref[src];close=1'>Close</A></TT>"
|
||||
|
||||
user << browse(t, "window=lascomp;size=420x700")
|
||||
onclose(user, "lascomp")
|
||||
|
||||
|
||||
/obj/machinery/computer/lasercon/Topic(href, href_list)
|
||||
..()
|
||||
if( href_list["close"] )
|
||||
usr << browse(null, "window=lascomp")
|
||||
usr.machine = null
|
||||
return
|
||||
|
||||
else if( href_list["input"] )
|
||||
var/i = text2num(href_list["input"])
|
||||
var/d = 0
|
||||
switch(i)
|
||||
if(-4)
|
||||
d = -1000
|
||||
if(4)
|
||||
d = 1000
|
||||
if(1)
|
||||
d = 1
|
||||
if(-1)
|
||||
d = -1
|
||||
if(2)
|
||||
d = 10
|
||||
if(-2)
|
||||
d = -10
|
||||
if(3)
|
||||
d = 100
|
||||
if(-3)
|
||||
d = -100
|
||||
for(var/obj/machinery/engine/laser/laser in src.laser)
|
||||
laser.power += d
|
||||
laser.setpower(max(1, min(3000, laser.power)))// clamp to range
|
||||
src.updateDialog()
|
||||
else if( href_list["online"] )
|
||||
for(var/obj/machinery/engine/laser/laser in src.laser)
|
||||
laser.on = !laser.on
|
||||
src.updateDialog()
|
||||
else if( href_list["freq"] )
|
||||
var/amt = text2num(href_list["freq"])
|
||||
for(var/obj/machinery/engine/laser/laser in src.laser)
|
||||
if(laser.freq+amt>0)
|
||||
laser.freq+=amt
|
||||
src.updateDialog()
|
||||
/obj/machinery/computer/lasercon/process()
|
||||
if(!(stat & (NOPOWER|BROKEN)) )
|
||||
use_power(250)
|
||||
|
||||
//src.updateDialog()
|
||||
|
||||
|
||||
/obj/machinery/computer/lasercon/power_change()
|
||||
|
||||
if(stat & BROKEN)
|
||||
icon_state = "broken"
|
||||
else
|
||||
if( powered() )
|
||||
icon_state = initial(icon_state)
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
spawn(rand(0, 15))
|
||||
src.icon_state = "c_unpowered"
|
||||
stat |= NOPOWER
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
#define NITROGEN_RETARDATION_FACTOR 4 //Higher == N2 slows reaction more
|
||||
#define THERMAL_RELEASE_MODIFIER 50 //Higher == less heat released during reaction
|
||||
#define PLASMA_RELEASE_MODIFIER 750 //Higher == less plasma released by reaction
|
||||
#define OXYGEN_RELEASE_MODIFIER 1500 //Higher == less oxygen released at high temperature/power
|
||||
#define REACTION_POWER_MODIFIER 1.1 //Higher == more overall power
|
||||
|
||||
/obj/machinery/engine/supermatter
|
||||
name = "Supermatter"
|
||||
desc = "A strangely translucent and iridescent crystal. \red You get headaches just from looking at it."
|
||||
icon = 'engine.dmi'
|
||||
icon_state = "darkmatter"
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
var/gasefficency = 0.25
|
||||
|
||||
var/det = 0
|
||||
var/previousdet = 0
|
||||
var/const/explosiondet = 3500
|
||||
|
||||
var/const/warningtime = 50 // Make the CORE OVERLOAD message repeat only every aprox. ?? seconds
|
||||
var/lastwarning = 0 // Time in 1/10th of seconds since the last sent warning
|
||||
|
||||
/obj/machinery/engine/klaxon
|
||||
name = "Emergency Klaxon"
|
||||
icon = 'engine.dmi'
|
||||
icon_state = "darkmatter"
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/obj/machinery/engine/supermatter/sup
|
||||
|
||||
/obj/machinery/engine/klaxon/process()
|
||||
if(!sup)
|
||||
for(var/obj/machinery/engine/supermatter/T in world)
|
||||
sup = T
|
||||
break
|
||||
if(sup.det >= 1)
|
||||
return
|
||||
|
||||
/obj/machinery/engine/supermatter/process()
|
||||
|
||||
var/turf/simulated/L = loc
|
||||
|
||||
//Ok, get the air from the turf
|
||||
var/datum/gas_mixture/env = L.return_air()
|
||||
|
||||
//Remove gas from surrounding area
|
||||
var/transfer_moles = gasefficency * env.total_moles()
|
||||
var/datum/gas_mixture/removed = env.remove(transfer_moles)
|
||||
|
||||
previousdet = det
|
||||
det += (removed.temperature - 1000) / 150
|
||||
det = max(det, 0)
|
||||
|
||||
if(det > 0 && removed.temperature > 1000) // while the core is still damaged and it's still worth noting its status
|
||||
if((world.realtime - lastwarning) / 10 >= warningtime)
|
||||
lastwarning = world.realtime
|
||||
if(explosiondet - det <= 300)
|
||||
radioalert("CORE EXPLOSION IMMINENT","Core control computer")
|
||||
else if(det >= previousdet) // The damage is still going up
|
||||
radioalert("CORE OVERLOAD","Core control computer")
|
||||
else // Phew, we're safe
|
||||
radioalert("Core returning to safe operating levels.","Core control computer")
|
||||
|
||||
if(det > explosiondet)
|
||||
roundinfo.core = 1
|
||||
//proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, force = 0)
|
||||
explosion(src.loc,8,15,20,30,1)
|
||||
det = 0
|
||||
|
||||
if (!removed)
|
||||
return 1
|
||||
|
||||
var/power = max(round((removed.temperature - T0C) / 20), 0) //Total laser power plus an overload factor
|
||||
|
||||
//Get the collective laser power
|
||||
for(var/dir in cardinal)
|
||||
var/turf/T = get_step(L, dir)
|
||||
for(var/obj/beam/e_beam/item in T)
|
||||
power += item.power
|
||||
|
||||
//Ok, 100% oxygen atmosphere = best reaction
|
||||
//Maxes out at 100% oxygen pressure
|
||||
var/oxygen = max(min((removed.oxygen - (removed.nitrogen * NITROGEN_RETARDATION_FACTOR)) / MOLES_CELLSTANDARD, 1), 0)
|
||||
|
||||
var/device_energy = oxygen * power
|
||||
|
||||
device_energy *= removed.temperature / T0C
|
||||
|
||||
device_energy = round(device_energy * REACTION_POWER_MODIFIER)
|
||||
|
||||
//To figure out how much temperature to add each tick, consider that at one atmosphere's worth
|
||||
//of pure oxygen, with all four lasers firing at standard energy and no N2 present, at room temperature
|
||||
//that the device energy is around 2140. At that stage, we don't want too much heat to be put out
|
||||
//Since the core is effectively "cold"
|
||||
|
||||
//Also keep in mind we are only adding this temperature to (efficiency)% of the one tile the rock
|
||||
//is on. An increase of 4*C @ 25% efficiency here results in an increase of 1*C / (#tilesincore) overall.
|
||||
removed.temperature += max((device_energy / THERMAL_RELEASE_MODIFIER), 0)
|
||||
|
||||
removed.temperature = min(removed.temperature, 1500)
|
||||
|
||||
//Calculate how much gas to release
|
||||
removed.toxins += max(round(device_energy / PLASMA_RELEASE_MODIFIER), 0)
|
||||
|
||||
removed.oxygen += max(round((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER), 0)
|
||||
|
||||
env.merge(removed)
|
||||
|
||||
//Not functional currently. -- SkyMarshal
|
||||
/*
|
||||
for(var/mob/living/carbon/l in view(src, 6)) // you have to be seeing the core to get hallucinations
|
||||
if(prob(10) && !(l.glasses && istype(l.glasses, /obj/item/clothing/glasses/meson)))
|
||||
l.hallucination = 50
|
||||
*/
|
||||
for(var/mob/living/l in view(src,3))
|
||||
l.bruteloss += 50
|
||||
l.updatehealth()
|
||||
|
||||
return 1
|
||||
@@ -0,0 +1,54 @@
|
||||
//This looks to be the traitor win tracker code. Gonna comment it out as we lack it currently.
|
||||
/*
|
||||
client/proc/add_roundsjoined()
|
||||
if(!makejson)
|
||||
return
|
||||
var/DBQuery/cquery = dbcon.NewQuery("INSERT INTO `roundsjoined` (`ckey`) VALUES ('[ckey(src.key)]')")
|
||||
if(!cquery.Execute()) message_admins(cquery.ErrorMsg())
|
||||
client/proc/add_roundssurvived()
|
||||
if(!makejson)
|
||||
return
|
||||
var/DBQuery/cquery = dbcon.NewQuery("INSERT INTO `roundsurvived` (`ckey`) VALUES ('[ckey(src.key)]')")
|
||||
if(!cquery.Execute()) message_admins(cquery.ErrorMsg())
|
||||
client/proc/onDeath(var/mob/A = src.mob)
|
||||
if(!makejson)
|
||||
return
|
||||
roundinfo.deaths++
|
||||
if(!ismob(A))
|
||||
return
|
||||
var/ckey = src.ckey
|
||||
var/area
|
||||
var/attacker
|
||||
var/tod = time2text(world.realtime)
|
||||
var/health
|
||||
var/last
|
||||
if(isturf(A.loc))
|
||||
area = A.loc:loc:name
|
||||
else
|
||||
area = A.loc:name
|
||||
if(ishuman(A.lastattacker))
|
||||
attacker = A.lastattacker:name
|
||||
else
|
||||
attacker = "None"
|
||||
health = "Oxy:[A.oxyloss]Brute:[A.bruteloss]Burn:[A.fireloss]Toxins:[A.toxloss]"
|
||||
if(A.logs.len >= 1)
|
||||
last = A.logs[A.logs.len]
|
||||
else
|
||||
last = "None"
|
||||
var/DBQuery/cquery = dbcon.NewQuery("INSERT INTO `deathlog` (`ckey`,`location`,`lastattacker`,`ToD`,`health`,`lasthit`) VALUES ('[ckey]',[dbcon.Quote(area)],[dbcon.Quote(attacker)],'[tod]','[health]',[dbcon.Quote(last)])")
|
||||
if(!cquery.Execute()) message_admins(cquery.ErrorMsg())
|
||||
client/proc/onBought(names)
|
||||
if(!makejson) return
|
||||
if(!names) return
|
||||
var/DBQuery/cquery = dbcon.NewQuery("INSERT INTO `traitorbuy` (`type`) VALUES ([dbcon.Quote(names)])")
|
||||
if(!cquery.Execute()) message_admins(cquery.ErrorMsg())
|
||||
*/
|
||||
|
||||
datum/roundinfo
|
||||
var/core = 0
|
||||
var/deaths = 0
|
||||
var/revies = 0
|
||||
var/starttime = 0
|
||||
var/endtime = 0
|
||||
var/lenght = 0
|
||||
var/mode = 0
|
||||
@@ -0,0 +1,167 @@
|
||||
/obj/item/policetaperoll/attack_self(mob/user as mob)
|
||||
if(icon_state == "rollstart")
|
||||
tapestartx = src.loc.x
|
||||
tapestarty = src.loc.y
|
||||
tapestartz = src.loc.z
|
||||
usr << "\blue You place the first end of the police tape."
|
||||
icon_state = "rollstop"
|
||||
else
|
||||
tapeendx = src.loc.x
|
||||
tapeendy = src.loc.y
|
||||
tapeendz = src.loc.z
|
||||
var/tapetest = 0
|
||||
if(tapestartx == tapeendx && tapestarty > tapeendy && tapestartz == tapeendz)
|
||||
for(var/Y=tapestarty,Y>=tapeendy,Y--)
|
||||
var/turf/T = get_turf(locate(tapestartx,Y,tapestartz))
|
||||
if(T.density == 1)
|
||||
usr << "\blue You can't run police tape through a wall!"
|
||||
icon_state = "rollstart"
|
||||
return
|
||||
for(var/Y=tapestarty,Y>=tapeendy,Y--)
|
||||
var/turf/T = get_turf(locate(tapestartx,Y,tapestartz))
|
||||
for(var/obj/item/policetape/Ptest in T)
|
||||
if(Ptest.icon_state == "vertical")
|
||||
tapetest = 1
|
||||
if(tapetest != 1)
|
||||
var/obj/item/policetape/P = new/obj/item/policetape(tapestartx,Y,tapestartz)
|
||||
P.loc = locate(tapestartx,Y,tapestartz)
|
||||
P.icon_state = "vertical"
|
||||
usr << "\blue You finish placing the police tape." //Git Test
|
||||
|
||||
if(tapestartx == tapeendx && tapestarty < tapeendy && tapestartz == tapeendz)
|
||||
for(var/Y=tapestarty,Y<=tapeendy,Y++)
|
||||
var/turf/T = get_turf(locate(tapestartx,Y,tapestartz))
|
||||
if(T.density == 1)
|
||||
usr << "\blue You can't run police tape through a wall!"
|
||||
icon_state = "rollstart"
|
||||
return
|
||||
for(var/Y=tapestarty,Y<=tapeendy,Y++)
|
||||
var/turf/T = get_turf(locate(tapestartx,Y,tapestartz))
|
||||
for(var/obj/item/policetape/Ptest in T)
|
||||
if(Ptest.icon_state == "vertical")
|
||||
tapetest = 1
|
||||
if(tapetest != 1)
|
||||
var/obj/item/policetape/P = new/obj/item/policetape(tapestartx,Y,tapestartz)
|
||||
P.loc = locate(tapestartx,Y,tapestartz)
|
||||
P.icon_state = "vertical"
|
||||
usr << "\blue You finish placing the police tape."
|
||||
|
||||
if(tapestarty == tapeendy && tapestartx > tapeendx && tapestartz == tapeendz)
|
||||
for(var/X=tapestartx,X>=tapeendx,X--)
|
||||
var/turf/T = get_turf(locate(X,tapestarty,tapestartz))
|
||||
if(T.density == 1)
|
||||
usr << "\blue You can't run police tape through a wall!"
|
||||
icon_state = "rollstart"
|
||||
return
|
||||
for(var/X=tapestartx,X>=tapeendx,X--)
|
||||
var/turf/T = get_turf(locate(X,tapestarty,tapestartz))
|
||||
for(var/obj/item/policetape/Ptest in T)
|
||||
if(Ptest.icon_state == "horizontal")
|
||||
tapetest = 1
|
||||
if(tapetest != 1)
|
||||
var/obj/item/policetape/P = new/obj/item/policetape(X,tapestarty,tapestartz)
|
||||
P.loc = locate(X,tapestarty,tapestartz)
|
||||
P.icon_state = "horizontal"
|
||||
usr << "\blue You finish placing the police tape."
|
||||
|
||||
if(tapestarty == tapeendy && tapestartx < tapeendx && tapestartz == tapeendz)
|
||||
for(var/X=tapestartx,X<=tapeendx,X++)
|
||||
var/turf/T = get_turf(locate(X,tapestarty,tapestartz))
|
||||
if(T.density == 1)
|
||||
usr << "\blue You can't run police tape through a wall!"
|
||||
icon_state = "rollstart"
|
||||
return
|
||||
for(var/X=tapestartx,X<=tapeendx,X++)
|
||||
var/turf/T = get_turf(locate(X,tapestarty,tapestartz))
|
||||
for(var/obj/item/policetape/Ptest in T)
|
||||
if(Ptest.icon_state == "horizontal")
|
||||
tapetest = 1
|
||||
if(tapetest != 1)
|
||||
var/obj/item/policetape/P = new/obj/item/policetape(X,tapestarty,tapestartz)
|
||||
P.loc = locate(X,tapestarty,tapestartz)
|
||||
P.icon_state = "horizontal"
|
||||
usr << "\blue You finish placing the police tape."
|
||||
|
||||
if(tapestarty != tapeendy && tapestartx != tapeendx)
|
||||
usr << "\blue Police tape can only be laid horizontally or vertically."
|
||||
icon_state = "rollstart"
|
||||
|
||||
/obj/item/policetape/Bumped(M as mob)
|
||||
if(src.allowed(M))
|
||||
var/turf/T = get_turf(src)
|
||||
M:loc = T
|
||||
|
||||
/obj/item/policetape/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0)) return 1
|
||||
|
||||
if ((mover.flags & 2 || istype(mover, /obj/effect/meteor) || mover.throwing == 1) )
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/item/policetape/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
breaktape(W, user)
|
||||
|
||||
/obj/item/policetape/attack_hand(mob/user as mob)
|
||||
breaktape(null, user)
|
||||
|
||||
/obj/item/policetape/attack_paw(mob/user as mob)
|
||||
breaktape(/obj/item/weapon/wirecutters,user)
|
||||
|
||||
/obj/item/policetape/proc/breaktape(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(user.a_intent == "help" && ((!is_sharp(W) && src.allowed(user)) ||(!is_cut(W) && !src.allowed(user))))
|
||||
user << "You can't break the tape with that!"
|
||||
return
|
||||
user.show_viewers(text("\blue [] breaks the police tape!", user))
|
||||
var/OX = src.x
|
||||
var/OY = src.y
|
||||
if(src.icon_state == "horizontal")
|
||||
var/N = 0
|
||||
var/X = OX + 1
|
||||
var/turf/T = src.loc
|
||||
while(N != 1)
|
||||
N = 1
|
||||
T = locate(X,T.y,T.z)
|
||||
for (var/obj/item/policetape/P in T)
|
||||
N = 0
|
||||
if(P.icon_state == "horizontal")
|
||||
del(P)
|
||||
X += 1
|
||||
|
||||
X = OX - 1
|
||||
N = 0
|
||||
while(N != 1)
|
||||
N = 1
|
||||
T = locate(X,T.y,T.z)
|
||||
for (var/obj/item/policetape/P in T)
|
||||
N = 0
|
||||
if(P.icon_state == "horizontal")
|
||||
del(P)
|
||||
X -= 1
|
||||
|
||||
if(src.icon_state == "vertical")
|
||||
var/N = 0
|
||||
var/Y = OY + 1
|
||||
var/turf/T = src.loc
|
||||
while(N != 1)
|
||||
N = 1
|
||||
T = locate(T.x,Y,T.z)
|
||||
for (var/obj/item/policetape/P in T)
|
||||
N = 0
|
||||
if(P.icon_state == "vertical")
|
||||
del(P)
|
||||
Y += 1
|
||||
|
||||
Y = OY - 1
|
||||
N = 0
|
||||
while(N != 1)
|
||||
N = 1
|
||||
T = locate(T.x,Y,T.z)
|
||||
for (var/obj/item/policetape/P in T)
|
||||
N = 0
|
||||
if(P.icon_state == "vertical")
|
||||
del(P)
|
||||
Y -= 1
|
||||
|
||||
del(src)
|
||||
return
|
||||
+5
-5
@@ -246,7 +246,7 @@ datum/mind
|
||||
|
||||
text = "Uplink: <a href='?src=\ref[src];common=uplink'>give</a>"
|
||||
var/obj/item/weapon/syndicate_uplink/suplink = find_syndicate_uplink()
|
||||
var/obj/item/weapon/integrated_uplink/iuplink = find_integrated_uplink()
|
||||
var/obj/item/device/uplink/iuplink = find_integrated_uplink()
|
||||
var/crystals
|
||||
if (suplink)
|
||||
crystals = suplink.uses
|
||||
@@ -799,7 +799,7 @@ datum/mind
|
||||
if("crystals")
|
||||
if (usr.client.holder.level >= 3)
|
||||
var/obj/item/weapon/syndicate_uplink/suplink = find_syndicate_uplink()
|
||||
var/obj/item/weapon/integrated_uplink/iuplink = find_integrated_uplink()
|
||||
var/obj/item/device/uplink/iuplink = find_integrated_uplink()
|
||||
var/crystals
|
||||
if (suplink)
|
||||
crystals = suplink.uses
|
||||
@@ -867,7 +867,7 @@ datum/mind
|
||||
|
||||
proc/find_integrated_uplink()
|
||||
//world << "DEBUG: find_integrated_uplink()"
|
||||
var/obj/item/weapon/integrated_uplink/uplink = null
|
||||
var/obj/item/device/uplink/uplink = null
|
||||
var/list/L = current.get_contents()
|
||||
for (var/obj/item/device/pda/pda in L)
|
||||
uplink = pda.uplink
|
||||
@@ -877,8 +877,8 @@ datum/mind
|
||||
|
||||
proc/take_uplink() //assuming only one uplink because I am tired of all this uplink shit --rastaf0
|
||||
var/list/L = current.get_contents()
|
||||
var/obj/item/weapon/syndicate_uplink/suplink = null
|
||||
var/obj/item/weapon/integrated_uplink/iuplink = null
|
||||
var/obj/item/device/uplink/radio/suplink = null
|
||||
var/obj/item/device/uplink/pda/iuplink = null
|
||||
for (var/obj/item/device/radio/radio in L)
|
||||
suplink = radio.traitorradio
|
||||
if (suplink)
|
||||
|
||||
@@ -342,6 +342,20 @@
|
||||
origin_tech = "magnets=1;engineering=1"
|
||||
var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage
|
||||
|
||||
/obj/item/device/hacktool
|
||||
name = "hacktool"
|
||||
icon_state = "hacktool"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
var/in_use = 0
|
||||
force = 5.0
|
||||
w_class = 2.0
|
||||
throwforce = 5.0
|
||||
throw_range = 15
|
||||
throw_speed = 3
|
||||
desc = "An item of dubious origins, with wires and antennas protruding out of it."
|
||||
m_amt = 60
|
||||
g_amt = 20
|
||||
|
||||
/obj/item/blueprints
|
||||
name = "station blueprints"
|
||||
desc = "Blueprints of the station. There's stamp \"Classified\" and several coffee stains on it."
|
||||
|
||||
@@ -6,13 +6,15 @@
|
||||
opacity = 1
|
||||
density = 1
|
||||
layer = 2.7
|
||||
anchored = 1
|
||||
var/secondsElectrified = 0
|
||||
var/visible = 1
|
||||
var/p_open = 0
|
||||
var/operating = 0
|
||||
anchored = 1
|
||||
var/autoclose = 0
|
||||
var/glass = 0
|
||||
var/forcecrush = 0
|
||||
var/holdopen = 0
|
||||
|
||||
|
||||
/obj/machinery/door/firedoor
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
desc = "Full of masks and emergency anesthetic tanks."
|
||||
|
||||
/obj/item/weapon/storage/box/syndicate
|
||||
icon_state = "box_of_doom"
|
||||
|
||||
/obj/item/weapon/storage/box/ert
|
||||
name = "medical box"
|
||||
|
||||
@@ -25,20 +25,36 @@
|
||||
return A
|
||||
return 0
|
||||
|
||||
/proc/in_range(source, user)
|
||||
/proc/get_random_turf(var/atom/A, var/list/L)
|
||||
while(L.len > 0)
|
||||
var/dir = pick(L)
|
||||
L -= dir
|
||||
var/turf/T = get_step(A,dir)
|
||||
var/possible = 1
|
||||
|
||||
if(T.density == 0)
|
||||
for(var/obj/I in T)
|
||||
if(I.density == 1)
|
||||
possible = 0
|
||||
break
|
||||
|
||||
if(possible)
|
||||
return T
|
||||
|
||||
return
|
||||
|
||||
/proc/in_range(source, user, telepathy=1)
|
||||
if(get_dist(source, user) <= 1)
|
||||
return 1
|
||||
/*
|
||||
else//TK TODO: remove this
|
||||
if(istype(user, /mob/living/carbon))
|
||||
if(user:mutations & TK && get_dist(source, user) <= 7)
|
||||
if(user:equipped()) return 0
|
||||
else
|
||||
if (istype(user, /mob/living/carbon))
|
||||
if (user:mutations & telepathy)
|
||||
var/X = source:x
|
||||
var/Y = source:y
|
||||
var/Z = source:z
|
||||
spawn(0)
|
||||
//I really shouldnt put this here but i dont have a better idea
|
||||
var/obj/effect/overlay/O = new /obj/effect/overlay ( locate(X,Y,Z) )
|
||||
var/obj/effect/overlay/O = new /obj/effect/overlay( locate(X,Y,Z) )
|
||||
O.name = "sparkles"
|
||||
O.anchored = 1
|
||||
O.density = 0
|
||||
@@ -49,7 +65,9 @@
|
||||
flick("empdisable",O)
|
||||
spawn(5)
|
||||
del(O)
|
||||
return 1*/
|
||||
|
||||
|
||||
return 1
|
||||
|
||||
return 0 //not in range and not telekinetic
|
||||
|
||||
|
||||
@@ -1470,4 +1470,24 @@ proc/get_opposite(var/checkdir)
|
||||
if(SOUTHEAST)
|
||||
return NORTHWEST
|
||||
if(SOUTHWEST)
|
||||
return NORTHEAST
|
||||
return NORTHEAST
|
||||
|
||||
/proc/stringsplit(txt, character)
|
||||
var
|
||||
cur_text = txt
|
||||
last_found = 1
|
||||
found_char = findtext(cur_text,character)
|
||||
list/list = list()
|
||||
if(found_char)
|
||||
var/fs = copytext(cur_text,last_found,found_char)
|
||||
list += fs
|
||||
last_found = found_char+length(character)
|
||||
found_char = findtext(cur_text,character,last_found)
|
||||
while(found_char)
|
||||
var
|
||||
found_string = copytext(cur_text,last_found,found_char)
|
||||
last_found = found_char+length(character)
|
||||
list += found_string
|
||||
found_char = findtext(cur_text,character,last_found)
|
||||
list += copytext(cur_text,last_found,length(cur_text)+1)
|
||||
return list
|
||||
@@ -3,6 +3,49 @@
|
||||
config_tag = "blob"
|
||||
required_players = 0
|
||||
|
||||
uplink_welcome = "Syndicate Uplink Console:"
|
||||
uplink_items = {"Highly Visible and Dangerous Weapons;
|
||||
/obj/item/weapon/gun/projectile:6:Revolver;
|
||||
/obj/item/ammo_magazine/a357:2:Ammo-357;
|
||||
/obj/item/weapon/gun/energy/crossbow:5:Energy Crossbow;
|
||||
/obj/item/weapon/melee/energy/sword:4:Energy Sword;
|
||||
/obj/item/weapon/storage/box/syndicate:10:Syndicate Bundle;
|
||||
/obj/item/weapon/storage/emp_kit:4:5 EMP Grenades;
|
||||
Whitespace:Seperator;
|
||||
Stealthy and Inconspicuous Weapons;
|
||||
/obj/item/weapon/pen/sleepypen:3:Sleepy Pen;
|
||||
/obj/item/weapon/soap/syndie:1:Syndicate Soap;
|
||||
/obj/item/weapon/cartridge/syndicate:3:Detomatix PDA Cartridge;
|
||||
Whitespace:Seperator;
|
||||
Stealth and Camouflage Items;
|
||||
/obj/item/clothing/under/chameleon:3:Chameleon Jumpsuit;
|
||||
/obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes;
|
||||
/obj/item/weapon/card/id/syndicate:3:Agent ID card;
|
||||
/obj/item/clothing/mask/gas/voice:4:Voice Changer;
|
||||
/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
|
||||
/obj/item/device/chameleon:4:Chameleon-Projector;
|
||||
/obj/item/weapon/stamperaser:1:Stamp Remover;
|
||||
Whitespace:Seperator;
|
||||
Devices and Tools;
|
||||
/obj/item/weapon/card/emag:3:Cryptographic Sequencer;
|
||||
/obj/item/device/hacktool:4:Hacktool;
|
||||
/obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox;
|
||||
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
|
||||
/obj/item/device/radio/headset/traitor:3:Headset with Binary Translator;
|
||||
/obj/item/weapon/plastique:2:C-4;
|
||||
/obj/item/device/powersink:5:Powersink (DANGER!);
|
||||
/obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!);
|
||||
Whitespace:Seperator;
|
||||
Implants;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_freedom:3:Freedom Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_compress:5:Compressed Matter Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_explosive:6:Explosive Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals);
|
||||
Whitespace:Seperator;
|
||||
Badassery;
|
||||
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"}
|
||||
uplink_uses = 10
|
||||
|
||||
var/const/waittime_l = 2000 //lower bound on time before intercept arrives (in tenths of seconds)
|
||||
var/const/waittime_h = 3000 //upper bound on time before intercept arrives (in tenths of seconds)
|
||||
|
||||
|
||||
@@ -9,6 +9,49 @@
|
||||
required_players = 1
|
||||
required_enemies = 1
|
||||
|
||||
uplink_welcome = "Syndicate Uplink Console:"
|
||||
uplink_items = {"Highly Visible and Dangerous Weapons;
|
||||
/obj/item/weapon/gun/projectile:6:Revolver;
|
||||
/obj/item/ammo_magazine/a357:2:Ammo-357;
|
||||
/obj/item/weapon/gun/energy/crossbow:5:Energy Crossbow;
|
||||
/obj/item/weapon/melee/energy/sword:4:Energy Sword;
|
||||
/obj/item/weapon/storage/box/syndicate:10:Syndicate Bundle;
|
||||
/obj/item/weapon/storage/emp_kit:4:5 EMP Grenades;
|
||||
Whitespace:Seperator;
|
||||
Stealthy and Inconspicuous Weapons;
|
||||
/obj/item/weapon/pen/sleepypen:3:Sleepy Pen;
|
||||
/obj/item/weapon/soap/syndie:1:Syndicate Soap;
|
||||
/obj/item/weapon/cartridge/syndicate:3:Detomatix PDA Cartridge;
|
||||
Whitespace:Seperator;
|
||||
Stealth and Camouflage Items;
|
||||
/obj/item/clothing/under/chameleon:3:Chameleon Jumpsuit;
|
||||
/obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes;
|
||||
/obj/item/weapon/card/id/syndicate:3:Agent ID card;
|
||||
/obj/item/clothing/mask/gas/voice:4:Voice Changer;
|
||||
/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
|
||||
/obj/item/device/chameleon:4:Chameleon-Projector;
|
||||
/obj/item/weapon/stamperaser:1:Stamp Remover;
|
||||
Whitespace:Seperator;
|
||||
Devices and Tools;
|
||||
/obj/item/weapon/card/emag:3:Cryptographic Sequencer;
|
||||
/obj/item/device/hacktool:4:Hacktool;
|
||||
/obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox;
|
||||
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
|
||||
/obj/item/device/radio/headset/traitor:3:Headset with Binary Translator;
|
||||
/obj/item/weapon/plastique:2:C-4;
|
||||
/obj/item/device/powersink:5:Powersink (DANGER!);
|
||||
/obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!);
|
||||
Whitespace:Seperator;
|
||||
Implants;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_freedom:3:Freedom Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_compress:5:Compressed Matter Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_explosive:6:Explosive Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals);
|
||||
Whitespace:Seperator;
|
||||
Badassery;
|
||||
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"}
|
||||
uplink_uses = 10
|
||||
|
||||
var
|
||||
changeling_amount
|
||||
const
|
||||
|
||||
@@ -5,6 +5,49 @@
|
||||
required_players = 20
|
||||
required_enemies = 2
|
||||
|
||||
uplink_welcome = "Syndicate Uplink Console:"
|
||||
uplink_items = {"Highly Visible and Dangerous Weapons;
|
||||
/obj/item/weapon/gun/projectile:6:Revolver;
|
||||
/obj/item/ammo_magazine/a357:2:Ammo-357;
|
||||
/obj/item/weapon/gun/energy/crossbow:5:Energy Crossbow;
|
||||
/obj/item/weapon/melee/energy/sword:4:Energy Sword;
|
||||
/obj/item/weapon/storage/box/syndicate:10:Syndicate Bundle;
|
||||
/obj/item/weapon/storage/emp_kit:4:5 EMP Grenades;
|
||||
Whitespace:Seperator;
|
||||
Stealthy and Inconspicuous Weapons;
|
||||
/obj/item/weapon/pen/sleepypen:3:Sleepy Pen;
|
||||
/obj/item/weapon/soap/syndie:1:Syndicate Soap;
|
||||
/obj/item/weapon/cartridge/syndicate:3:Detomatix PDA Cartridge;
|
||||
Whitespace:Seperator;
|
||||
Stealth and Camouflage Items;
|
||||
/obj/item/clothing/under/chameleon:3:Chameleon Jumpsuit;
|
||||
/obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes;
|
||||
/obj/item/weapon/card/id/syndicate:3:Agent ID card;
|
||||
/obj/item/clothing/mask/gas/voice:4:Voice Changer;
|
||||
/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
|
||||
/obj/item/device/chameleon:4:Chameleon-Projector;
|
||||
/obj/item/weapon/stamperaser:1:Stamp Remover;
|
||||
Whitespace:Seperator;
|
||||
Devices and Tools;
|
||||
/obj/item/weapon/card/emag:3:Cryptographic Sequencer;
|
||||
/obj/item/device/hacktool:4:Hacktool;
|
||||
/obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox;
|
||||
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
|
||||
/obj/item/device/radio/headset/traitor:3:Headset with Binary Translator;
|
||||
/obj/item/weapon/plastique:2:C-4;
|
||||
/obj/item/device/powersink:5:Powersink (DANGER!);
|
||||
/obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!);
|
||||
Whitespace:Seperator;
|
||||
Implants;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_freedom:3:Freedom Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_compress:5:Compressed Matter Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_explosive:6:Explosive Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals);
|
||||
Whitespace:Seperator;
|
||||
Badassery;
|
||||
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"}
|
||||
uplink_uses = 10
|
||||
|
||||
/datum/game_mode/traitor/changeling/announce()
|
||||
world << "<B>The current game mode is - Traitor+Changeling!</B>"
|
||||
world << "<B>There is an alien creature on the station along with some syndicate operatives out for their own gain! Do not let the changeling and the traitors succeed!</B>"
|
||||
|
||||
@@ -39,6 +39,49 @@
|
||||
var/const/max_cultists_to_start = 4
|
||||
var/acolytes_survived = 0
|
||||
|
||||
uplink_welcome = "Nar-Sie Uplink Console:"
|
||||
uplink_items = {"Highly Visible and Dangerous Weapons;
|
||||
/obj/item/weapon/gun/projectile:6:Revolver;
|
||||
/obj/item/ammo_magazine/a357:2:Ammo-357;
|
||||
/obj/item/weapon/gun/energy/crossbow:5:Energy Crossbow;
|
||||
/obj/item/weapon/melee/energy/sword:4:Energy Sword;
|
||||
/obj/item/weapon/storage/box/syndicate:10:Syndicate Bundle;
|
||||
/obj/item/weapon/storage/emp_kit:4:5 EMP Grenades;
|
||||
Whitespace:Seperator;
|
||||
Stealthy and Inconspicuous Weapons;
|
||||
/obj/item/weapon/pen/sleepypen:3:Sleepy Pen;
|
||||
/obj/item/weapon/soap/syndie:1:Syndicate Soap;
|
||||
/obj/item/weapon/cartridge/syndicate:3:Detomatix PDA Cartridge;
|
||||
Whitespace:Seperator;
|
||||
Stealth and Camouflage Items;
|
||||
/obj/item/clothing/under/chameleon:3:Chameleon Jumpsuit;
|
||||
/obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes;
|
||||
/obj/item/weapon/card/id/syndicate:3:Agent ID card;
|
||||
/obj/item/clothing/mask/gas/voice:4:Voice Changer;
|
||||
/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
|
||||
/obj/item/device/chameleon:4:Chameleon-Projector;
|
||||
/obj/item/weapon/stamperaser:1:Stamp Remover;
|
||||
Whitespace:Seperator;
|
||||
Devices and Tools;
|
||||
/obj/item/weapon/card/emag:3:Cryptographic Sequencer;
|
||||
/obj/item/device/hacktool:4:Hacktool;
|
||||
/obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox;
|
||||
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
|
||||
/obj/item/device/radio/headset/traitor:3:Headset with Binary Translator;
|
||||
/obj/item/weapon/plastique:2:C-4;
|
||||
/obj/item/device/powersink:5:Powersink (DANGER!);
|
||||
/obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!);
|
||||
Whitespace:Seperator;
|
||||
Implants;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_freedom:3:Freedom Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_compress:5:Compressed Matter Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_explosive:6:Explosive Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals);
|
||||
Whitespace:Seperator;
|
||||
Badassery;
|
||||
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"}
|
||||
uplink_uses = 10
|
||||
|
||||
|
||||
/datum/game_mode/cult/announce()
|
||||
world << "<B>The current game mode is - Cult!</B>"
|
||||
|
||||
@@ -3,6 +3,49 @@
|
||||
config_tag = "extended"
|
||||
required_players = 0
|
||||
|
||||
uplink_welcome = "Syndicate Uplink Console:"
|
||||
uplink_items = {"Highly Visible and Dangerous Weapons;
|
||||
/obj/item/weapon/gun/projectile:6:Revolver;
|
||||
/obj/item/ammo_magazine/a357:2:Ammo-357;
|
||||
/obj/item/weapon/gun/energy/crossbow:5:Energy Crossbow;
|
||||
/obj/item/weapon/melee/energy/sword:4:Energy Sword;
|
||||
/obj/item/weapon/storage/box/syndicate:10:Syndicate Bundle;
|
||||
/obj/item/weapon/storage/emp_kit:4:5 EMP Grenades;
|
||||
Whitespace:Seperator;
|
||||
Stealthy and Inconspicuous Weapons;
|
||||
/obj/item/weapon/pen/sleepypen:3:Sleepy Pen;
|
||||
/obj/item/weapon/soap/syndie:1:Syndicate Soap;
|
||||
/obj/item/weapon/cartridge/syndicate:3:Detomatix PDA Cartridge;
|
||||
Whitespace:Seperator;
|
||||
Stealth and Camouflage Items;
|
||||
/obj/item/clothing/under/chameleon:3:Chameleon Jumpsuit;
|
||||
/obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes;
|
||||
/obj/item/weapon/card/id/syndicate:3:Agent ID card;
|
||||
/obj/item/clothing/mask/gas/voice:4:Voice Changer;
|
||||
/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
|
||||
/obj/item/device/chameleon:4:Chameleon-Projector;
|
||||
/obj/item/weapon/stamperaser:1:Stamp Remover;
|
||||
Whitespace:Seperator;
|
||||
Devices and Tools;
|
||||
/obj/item/weapon/card/emag:3:Cryptographic Sequencer;
|
||||
/obj/item/device/hacktool:4:Hacktool;
|
||||
/obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox;
|
||||
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
|
||||
/obj/item/device/radio/headset/traitor:3:Headset with Binary Translator;
|
||||
/obj/item/weapon/plastique:2:C-4;
|
||||
/obj/item/device/powersink:5:Powersink (DANGER!);
|
||||
/obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!);
|
||||
Whitespace:Seperator;
|
||||
Implants;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_freedom:3:Freedom Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_compress:5:Compressed Matter Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_explosive:6:Explosive Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals);
|
||||
Whitespace:Seperator;
|
||||
Badassery;
|
||||
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"}
|
||||
uplink_uses = 10
|
||||
|
||||
/datum/game_mode/announce()
|
||||
world << "<B>The current game mode is - Extended Role-Playing!</B>"
|
||||
world << "<B>Just have fun and role-play!</B>"
|
||||
|
||||
@@ -23,6 +23,9 @@
|
||||
list/restricted_jobs = list()
|
||||
required_players = 0
|
||||
required_enemies = 0
|
||||
uplink_welcome
|
||||
uplink_items
|
||||
uplink_uses
|
||||
|
||||
/datum/game_mode/proc/announce() //to be calles when round starts
|
||||
world << "<B>Notice</B>: [src] did not define announce()"
|
||||
|
||||
@@ -15,6 +15,49 @@
|
||||
var/to_nuke_or_not_to_nuke = 0
|
||||
var/apcs = 0 //Adding dis to track how many APCs the AI hacks. --NeoFite
|
||||
|
||||
uplink_welcome = "Crazy AI Uplink Console:"
|
||||
uplink_items = {"Highly Visible and Dangerous Weapons;
|
||||
/obj/item/weapon/gun/projectile:6:Revolver;
|
||||
/obj/item/ammo_magazine/a357:2:Ammo-357;
|
||||
/obj/item/weapon/gun/energy/crossbow:5:Energy Crossbow;
|
||||
/obj/item/weapon/melee/energy/sword:4:Energy Sword;
|
||||
/obj/item/weapon/storage/box/syndicate:10:Syndicate Bundle;
|
||||
/obj/item/weapon/storage/emp_kit:4:5 EMP Grenades;
|
||||
Whitespace:Seperator;
|
||||
Stealthy and Inconspicuous Weapons;
|
||||
/obj/item/weapon/pen/sleepypen:3:Sleepy Pen;
|
||||
/obj/item/weapon/soap/syndie:1:Syndicate Soap;
|
||||
/obj/item/weapon/cartridge/syndicate:3:Detomatix PDA Cartridge;
|
||||
Whitespace:Seperator;
|
||||
Stealth and Camouflage Items;
|
||||
/obj/item/clothing/under/chameleon:3:Chameleon Jumpsuit;
|
||||
/obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes;
|
||||
/obj/item/weapon/card/id/syndicate:3:Agent ID card;
|
||||
/obj/item/clothing/mask/gas/voice:4:Voice Changer;
|
||||
/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
|
||||
/obj/item/device/chameleon:4:Chameleon-Projector;
|
||||
/obj/item/weapon/stamperaser:1:Stamp Remover;
|
||||
Whitespace:Seperator;
|
||||
Devices and Tools;
|
||||
/obj/item/weapon/card/emag:3:Cryptographic Sequencer;
|
||||
/obj/item/device/hacktool:4:Hacktool;
|
||||
/obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox;
|
||||
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
|
||||
/obj/item/device/radio/headset/traitor:3:Headset with Binary Translator;
|
||||
/obj/item/weapon/plastique:2:C-4;
|
||||
/obj/item/device/powersink:5:Powersink (DANGER!);
|
||||
/obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!);
|
||||
Whitespace:Seperator;
|
||||
Implants;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_freedom:3:Freedom Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_compress:5:Compressed Matter Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_explosive:6:Explosive Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals);
|
||||
Whitespace:Seperator;
|
||||
Badassery;
|
||||
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"}
|
||||
uplink_uses = 10
|
||||
|
||||
|
||||
/datum/game_mode/malfunction/announce()
|
||||
world << "<B>The current game mode is - AI Malfunction!</B>"
|
||||
|
||||
@@ -7,6 +7,48 @@
|
||||
var/nometeors = 1
|
||||
required_players = 0
|
||||
|
||||
uplink_welcome = "EVIL METEOR Uplink Console:"
|
||||
uplink_items = {"Highly Visible and Dangerous Weapons;
|
||||
/obj/item/weapon/gun/projectile:6:Revolver;
|
||||
/obj/item/ammo_magazine/a357:2:Ammo-357;
|
||||
/obj/item/weapon/gun/energy/crossbow:5:Energy Crossbow;
|
||||
/obj/item/weapon/melee/energy/sword:4:Energy Sword;
|
||||
/obj/item/weapon/storage/box/syndicate:10:Syndicate Bundle;
|
||||
/obj/item/weapon/storage/emp_kit:4:5 EMP Grenades;
|
||||
Whitespace:Seperator;
|
||||
Stealthy and Inconspicuous Weapons;
|
||||
/obj/item/weapon/pen/sleepypen:3:Sleepy Pen;
|
||||
/obj/item/weapon/soap/syndie:1:Syndicate Soap;
|
||||
/obj/item/weapon/cartridge/syndicate:3:Detomatix PDA Cartridge;
|
||||
Whitespace:Seperator;
|
||||
Stealth and Camouflage Items;
|
||||
/obj/item/clothing/under/chameleon:3:Chameleon Jumpsuit;
|
||||
/obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes;
|
||||
/obj/item/weapon/card/id/syndicate:3:Agent ID card;
|
||||
/obj/item/clothing/mask/gas/voice:4:Voice Changer;
|
||||
/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
|
||||
/obj/item/device/chameleon:4:Chameleon-Projector;
|
||||
/obj/item/weapon/stamperaser:1:Stamp Remover;
|
||||
Whitespace:Seperator;
|
||||
Devices and Tools;
|
||||
/obj/item/weapon/card/emag:3:Cryptographic Sequencer;
|
||||
/obj/item/device/hacktool:4:Hacktool;
|
||||
/obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox;
|
||||
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
|
||||
/obj/item/device/radio/headset/traitor:3:Headset with Binary Translator;
|
||||
/obj/item/weapon/plastique:2:C-4;
|
||||
/obj/item/device/powersink:5:Powersink (DANGER!);
|
||||
/obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!);
|
||||
Whitespace:Seperator;
|
||||
Implants;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_freedom:3:Freedom Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_compress:5:Compressed Matter Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_explosive:6:Explosive Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals);
|
||||
Whitespace:Seperator;
|
||||
Badassery;
|
||||
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"}
|
||||
uplink_uses = 10
|
||||
|
||||
/datum/game_mode/meteor/announce()
|
||||
world << "<B>The current game mode is - Meteor!</B>"
|
||||
|
||||
@@ -8,6 +8,49 @@
|
||||
required_players = 3
|
||||
required_enemies = 2
|
||||
|
||||
uplink_welcome = "Corporate Backed Uplink Console:"
|
||||
uplink_items = {"Highly Visible and Dangerous Weapons;
|
||||
/obj/item/weapon/gun/projectile:6:Revolver;
|
||||
/obj/item/ammo_magazine/a357:2:Ammo-357;
|
||||
/obj/item/weapon/gun/energy/crossbow:5:Energy Crossbow;
|
||||
/obj/item/weapon/melee/energy/sword:4:Energy Sword;
|
||||
/obj/item/weapon/storage/box/syndicate:10:Syndicate Bundle;
|
||||
/obj/item/weapon/storage/emp_kit:4:5 EMP Grenades;
|
||||
Whitespace:Seperator;
|
||||
Stealthy and Inconspicuous Weapons;
|
||||
/obj/item/weapon/pen/sleepypen:3:Sleepy Pen;
|
||||
/obj/item/weapon/soap/syndie:1:Syndicate Soap;
|
||||
/obj/item/weapon/cartridge/syndicate:3:Detomatix PDA Cartridge;
|
||||
Whitespace:Seperator;
|
||||
Stealth and Camouflage Items;
|
||||
/obj/item/clothing/under/chameleon:3:Chameleon Jumpsuit;
|
||||
/obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes;
|
||||
/obj/item/weapon/card/id/syndicate:3:Agent ID card;
|
||||
/obj/item/clothing/mask/gas/voice:4:Voice Changer;
|
||||
/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
|
||||
/obj/item/device/chameleon:4:Chameleon-Projector;
|
||||
/obj/item/weapon/stamperaser:1:Stamp Remover;
|
||||
Whitespace:Seperator;
|
||||
Devices and Tools;
|
||||
/obj/item/weapon/card/emag:3:Cryptographic Sequencer;
|
||||
/obj/item/device/hacktool:4:Hacktool;
|
||||
/obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox;
|
||||
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
|
||||
/obj/item/device/radio/headset/traitor:3:Headset with Binary Translator;
|
||||
/obj/item/weapon/plastique:2:C-4;
|
||||
/obj/item/device/powersink:5:Powersink (DANGER!);
|
||||
/obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!);
|
||||
Whitespace:Seperator;
|
||||
Implants;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_freedom:3:Freedom Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_compress:5:Compressed Matter Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_explosive:6:Explosive Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals);
|
||||
Whitespace:Seperator;
|
||||
Badassery;
|
||||
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"}
|
||||
uplink_uses = 40
|
||||
|
||||
var/const/agents_possible = 5 //If we ever need more syndicate agents.
|
||||
var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds)
|
||||
var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
|
||||
|
||||
@@ -18,6 +18,49 @@
|
||||
required_players = 3
|
||||
required_enemies = 3
|
||||
|
||||
uplink_welcome = "Revolutionary Uplink Console:"
|
||||
uplink_items = {"Highly Visible and Dangerous Weapons;
|
||||
/obj/item/weapon/gun/projectile:6:Revolver;
|
||||
/obj/item/ammo_magazine/a357:2:Ammo-357;
|
||||
/obj/item/weapon/gun/energy/crossbow:5:Energy Crossbow;
|
||||
/obj/item/weapon/melee/energy/sword:4:Energy Sword;
|
||||
/obj/item/weapon/storage/box/syndicate:10:Syndicate Bundle;
|
||||
/obj/item/weapon/storage/emp_kit:4:5 EMP Grenades;
|
||||
Whitespace:Seperator;
|
||||
Stealthy and Inconspicuous Weapons;
|
||||
/obj/item/weapon/pen/sleepypen:3:Sleepy Pen;
|
||||
/obj/item/weapon/soap/syndie:1:Syndicate Soap;
|
||||
/obj/item/weapon/cartridge/syndicate:3:Detomatix PDA Cartridge;
|
||||
Whitespace:Seperator;
|
||||
Stealth and Camouflage Items;
|
||||
/obj/item/clothing/under/chameleon:3:Chameleon Jumpsuit;
|
||||
/obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes;
|
||||
/obj/item/weapon/card/id/syndicate:3:Agent ID card;
|
||||
/obj/item/clothing/mask/gas/voice:4:Voice Changer;
|
||||
/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
|
||||
/obj/item/device/chameleon:4:Chameleon-Projector;
|
||||
/obj/item/weapon/stamperaser:1:Stamp Remover;
|
||||
Whitespace:Seperator;
|
||||
Devices and Tools;
|
||||
/obj/item/weapon/card/emag:3:Cryptographic Sequencer;
|
||||
/obj/item/device/hacktool:4:Hacktool;
|
||||
/obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox;
|
||||
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
|
||||
/obj/item/device/radio/headset/traitor:3:Headset with Binary Translator;
|
||||
/obj/item/weapon/plastique:2:C-4;
|
||||
/obj/item/device/powersink:5:Powersink (DANGER!);
|
||||
/obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!);
|
||||
Whitespace:Seperator;
|
||||
Implants;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_freedom:3:Freedom Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_compress:5:Compressed Matter Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_explosive:6:Explosive Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals);
|
||||
Whitespace:Seperator;
|
||||
Badassery;
|
||||
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"}
|
||||
uplink_uses = 10
|
||||
|
||||
var/finished = 0
|
||||
var/checkwin_counter = 0
|
||||
var/const/max_headrevs = 3
|
||||
@@ -130,7 +173,7 @@
|
||||
if (!where)
|
||||
mob << "The Syndicate were unfortunately unable to get you a flash."
|
||||
else
|
||||
mob << "The flash in your [where] would help you to use your extremal persuade skill."
|
||||
mob << "The flash in your [where] would help you to use your extreme persuasion skills."
|
||||
return 1
|
||||
|
||||
//////////////////////////////////////
|
||||
|
||||
@@ -9,6 +9,49 @@
|
||||
required_players = 0
|
||||
required_enemies = 1
|
||||
|
||||
uplink_welcome = "Syndicate Uplink Console:"
|
||||
uplink_items = {"Highly Visible and Dangerous Weapons;
|
||||
/obj/item/weapon/gun/projectile:6:Revolver;
|
||||
/obj/item/ammo_magazine/a357:2:Ammo-357;
|
||||
/obj/item/weapon/gun/energy/crossbow:5:Energy Crossbow;
|
||||
/obj/item/weapon/melee/energy/sword:4:Energy Sword;
|
||||
/obj/item/weapon/storage/box/syndicate:10:Syndicate Bundle;
|
||||
/obj/item/weapon/storage/emp_kit:4:5 EMP Grenades;
|
||||
Whitespace:Seperator;
|
||||
Stealthy and Inconspicuous Weapons;
|
||||
/obj/item/weapon/pen/sleepypen:3:Sleepy Pen;
|
||||
/obj/item/weapon/soap/syndie:1:Syndicate Soap;
|
||||
/obj/item/weapon/cartridge/syndicate:3:Detomatix PDA Cartridge;
|
||||
Whitespace:Seperator;
|
||||
Stealth and Camouflage Items;
|
||||
/obj/item/clothing/under/chameleon:3:Chameleon Jumpsuit;
|
||||
/obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes;
|
||||
/obj/item/weapon/card/id/syndicate:3:Agent ID card;
|
||||
/obj/item/clothing/mask/gas/voice:4:Voice Changer;
|
||||
/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
|
||||
/obj/item/device/chameleon:4:Chameleon-Projector;
|
||||
/obj/item/weapon/stamperaser:1:Stamp Remover;
|
||||
Whitespace:Seperator;
|
||||
Devices and Tools;
|
||||
/obj/item/weapon/card/emag:3:Cryptographic Sequencer;
|
||||
/obj/item/device/hacktool:4:Hacktool;
|
||||
/obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox;
|
||||
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
|
||||
/obj/item/device/radio/headset/traitor:3:Headset with Binary Translator;
|
||||
/obj/item/weapon/plastique:2:C-4;
|
||||
/obj/item/device/powersink:5:Powersink (DANGER!);
|
||||
/obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!);
|
||||
Whitespace:Seperator;
|
||||
Implants;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_freedom:3:Freedom Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_compress:5:Compressed Matter Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_explosive:6:Explosive Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals);
|
||||
Whitespace:Seperator;
|
||||
Badassery;
|
||||
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"}
|
||||
uplink_uses = 10
|
||||
|
||||
var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds)
|
||||
var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
|
||||
|
||||
@@ -163,12 +206,12 @@
|
||||
killer << "\red Code Phrase: \black [syndicate_code_phrase]"
|
||||
killer.mind.store_memory("<b>Code Phrase</b>: [syndicate_code_phrase]")
|
||||
else
|
||||
killer << "Unfortunetly, the Syndicate did not provide you with a code phrase."
|
||||
killer << "Unfortunately, the Syndicate did not provide you with a code phrase."
|
||||
if(prob(80))
|
||||
killer << "\red Code Response: \black [syndicate_code_response]"
|
||||
killer.mind.store_memory("<b>Code Response</b>: [syndicate_code_response]")
|
||||
else
|
||||
killer << "Unfortunetly, the Syndicate did not provide you with a code response."
|
||||
killer << "Unfortunately, the Syndicate did not provide you with a code response."
|
||||
killer << "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe."
|
||||
//End code phrase.
|
||||
|
||||
@@ -215,7 +258,7 @@
|
||||
traitor_mob << "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself."
|
||||
traitor_mob.mutations &= ~CLUMSY
|
||||
|
||||
// find a radio! toolbox(es), backpack, belt, headset
|
||||
// find a radio! toolbox(es), backpack, belt, headset, pockets
|
||||
var/loc = ""
|
||||
var/obj/item/device/R = null //Hide the uplink in a PDA if available, otherwise radio
|
||||
if (!R && istype(traitor_mob.belt, /obj/item/device/pda))
|
||||
@@ -248,11 +291,11 @@
|
||||
R = foo
|
||||
loc = "in the [S.name] on your back"
|
||||
break
|
||||
if (!R && istype(traitor_mob.slot_l_store, /obj/item/device/pda))
|
||||
R = traitor_mob.slot_l_store
|
||||
if (!R && istype(traitor_mob.l_store, /obj/item/device/pda))
|
||||
R = traitor_mob.l_store
|
||||
loc = "in your pocket"
|
||||
if (!R && istype(traitor_mob.slot_r_store, /obj/item/device/pda))
|
||||
R = traitor_mob.slot_r_store
|
||||
if (!R && istype(traitor_mob.r_store, /obj/item/device/pda))
|
||||
R = traitor_mob.r_store
|
||||
loc = "in your pocket"
|
||||
if (!R && traitor_mob.w_uniform && istype(traitor_mob.belt, /obj/item/device/radio))
|
||||
R = traitor_mob.belt
|
||||
@@ -264,10 +307,10 @@
|
||||
R = traitor_mob.r_ear
|
||||
loc = "on your head"
|
||||
if (!R)
|
||||
traitor_mob << "Unfortunately, the Syndicate wasn't able to get you a radio."
|
||||
traitor_mob << "Unfortunately, the Syndicate wasn't able to get you an uplink."
|
||||
. = 0
|
||||
else
|
||||
if (istype(R, /obj/item/device/radio))
|
||||
if (istype(R, /obj/item/device/radio) || prob(10))
|
||||
// generate list of radio freqs
|
||||
var/freq = 1441
|
||||
var/list/freqlist = list()
|
||||
@@ -279,10 +322,12 @@
|
||||
freq += 1
|
||||
freq = freqlist[rand(1, freqlist.len)]
|
||||
|
||||
var/obj/item/weapon/syndicate_uplink/T = new /obj/item/weapon/syndicate_uplink(R)
|
||||
var/obj/item/device/uplink/radio/T = new /obj/item/device/uplink/radio(R)
|
||||
R:traitorradio = T
|
||||
R:traitor_frequency = freq
|
||||
T.name = R.name
|
||||
T.icon = R.icon
|
||||
T.w_class = R.w_class
|
||||
T.icon_state = R.icon_state
|
||||
T.origradio = R
|
||||
traitor_mob << "The Syndicate have cunningly disguised a Syndicate Uplink as your [R.name] [loc]. Simply dial the frequency [format_frequency(freq)] to unlock its hidden features."
|
||||
@@ -291,7 +336,7 @@
|
||||
// generate a passcode if the uplink is hidden in a PDA
|
||||
var/pda_pass = "[rand(100,999)] [pick("Alpha","Bravo","Delta","Omega")]"
|
||||
|
||||
var/obj/item/weapon/integrated_uplink/T = new /obj/item/weapon/integrated_uplink(R)
|
||||
var/obj/item/device/uplink/pda/T = new /obj/item/device/uplink/pda(R)
|
||||
R:uplink = T
|
||||
T.lock_code = pda_pass
|
||||
T.hostpda = R
|
||||
@@ -304,11 +349,11 @@
|
||||
traitor_mob << "\red Code Phrase: \black [syndicate_code_phrase]"
|
||||
traitor_mob.mind.store_memory("<b>Code Phrase</b>: [syndicate_code_phrase]")
|
||||
else
|
||||
traitor_mob << "Unfortunetly, the Syndicate did not provide you with a code phrase."
|
||||
traitor_mob << "Unfortunately, the Syndicate did not provide you with a code phrase."
|
||||
if(prob(80))
|
||||
traitor_mob << "\red Code Response: \black [syndicate_code_response]"
|
||||
traitor_mob.mind.store_memory("<b>Code Response</b>: [syndicate_code_response]")
|
||||
else
|
||||
traitor_mob << "Unfortunetly, the Syndicate did not provide you with a code response."
|
||||
traitor_mob << "Unfortunately, the Syndicate did not provide you with a code response."
|
||||
traitor_mob << "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe."
|
||||
//End code phrase.
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
/datum/traitorinfo
|
||||
var/starting_objective = ""
|
||||
var/starting_player_count = 0
|
||||
var/starting_occupation = ""
|
||||
var/ckey = ""
|
||||
var/list/spawnlist = list( )
|
||||
@@ -8,6 +8,49 @@
|
||||
required_players = 0
|
||||
required_enemies = 1
|
||||
|
||||
uplink_welcome = "Wizardly Uplink Console:"
|
||||
uplink_items = {"Highly Visible and Dangerous Weapons;
|
||||
/obj/item/weapon/gun/projectile:6:Revolver;
|
||||
/obj/item/ammo_magazine/a357:2:Ammo-357;
|
||||
/obj/item/weapon/gun/energy/crossbow:5:Energy Crossbow;
|
||||
/obj/item/weapon/melee/energy/sword:4:Energy Sword;
|
||||
/obj/item/weapon/storage/box/syndicate:10:Syndicate Bundle;
|
||||
/obj/item/weapon/storage/emp_kit:4:5 EMP Grenades;
|
||||
Whitespace:Seperator;
|
||||
Stealthy and Inconspicuous Weapons;
|
||||
/obj/item/weapon/pen/sleepypen:3:Sleepy Pen;
|
||||
/obj/item/weapon/soap/syndie:1:Syndicate Soap;
|
||||
/obj/item/weapon/cartridge/syndicate:3:Detomatix PDA Cartridge;
|
||||
Whitespace:Seperator;
|
||||
Stealth and Camouflage Items;
|
||||
/obj/item/clothing/under/chameleon:3:Chameleon Jumpsuit;
|
||||
/obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes;
|
||||
/obj/item/weapon/card/id/syndicate:3:Agent ID card;
|
||||
/obj/item/clothing/mask/gas/voice:4:Voice Changer;
|
||||
/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
|
||||
/obj/item/device/chameleon:4:Chameleon-Projector;
|
||||
/obj/item/weapon/stamperaser:1:Stamp Remover;
|
||||
Whitespace:Seperator;
|
||||
Devices and Tools;
|
||||
/obj/item/weapon/card/emag:3:Cryptographic Sequencer;
|
||||
/obj/item/device/hacktool:4:Hacktool;
|
||||
/obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox;
|
||||
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
|
||||
/obj/item/device/radio/headset/traitor:3:Headset with Binary Translator;
|
||||
/obj/item/weapon/plastique:2:C-4;
|
||||
/obj/item/device/powersink:5:Powersink (DANGER!);
|
||||
/obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!);
|
||||
Whitespace:Seperator;
|
||||
Implants;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_freedom:3:Freedom Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_compress:5:Compressed Matter Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_explosive:6:Explosive Implant;
|
||||
/obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals);
|
||||
Whitespace:Seperator;
|
||||
Badassery;
|
||||
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"}
|
||||
uplink_uses = 10
|
||||
|
||||
var/finished = 0
|
||||
|
||||
var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds)
|
||||
|
||||
@@ -7,6 +7,9 @@
|
||||
#define AIRLOCK_WIRE_OPEN_DOOR 7
|
||||
#define AIRLOCK_WIRE_AI_CONTROL 8
|
||||
#define AIRLOCK_WIRE_ELECTRIFY 9
|
||||
#define AIRLOCK_WIRE_CRUSH 10
|
||||
#define AIRLOCK_WIRE_LIGHT 11
|
||||
#define AIRLOCK_WIRE_HOLDOPEN 12
|
||||
|
||||
/*
|
||||
New methods:
|
||||
@@ -30,16 +33,16 @@
|
||||
//This generates the randomized airlock wire assignments for the game.
|
||||
/proc/RandomAirlockWires()
|
||||
//to make this not randomize the wires, just set index to 1 and increment it in the flag for loop (after doing everything else).
|
||||
var/list/wires = list(0, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||
airlockIndexToFlag = list(0, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||
airlockIndexToWireColor = list(0, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||
airlockWireColorToIndex = list(0, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||
var/list/wires = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||
airlockIndexToFlag = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||
airlockIndexToWireColor = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||
airlockWireColorToIndex = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||
var/flagIndex = 1
|
||||
for (var/flag=1, flag<512, flag+=flag)
|
||||
for (var/flag=1, flag<4096, flag+=flag)
|
||||
var/valid = 0
|
||||
while (!valid)
|
||||
var/colorIndex = rand(1, 9)
|
||||
if (wires[colorIndex]==0)
|
||||
var/colorIndex = rand(1, 11)
|
||||
if (wires[colorIndex] == 0)
|
||||
valid = 1
|
||||
wires[colorIndex] = flag
|
||||
airlockIndexToFlag[flagIndex] = flag
|
||||
@@ -61,12 +64,14 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
|
||||
icon_state = "door_closed"
|
||||
|
||||
var/aiControlDisabled = 0 //If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
|
||||
var/synDoorHacked = 0 // Has it been hacked? bool 1 = yes / 0 = no
|
||||
var/synHacking = 0 // Is hack in process y/n?
|
||||
var/secondsMainPowerLost = 0 //The number of seconds until power is restored.
|
||||
var/secondsBackupPowerLost = 0 //The number of seconds until power is restored.
|
||||
var/spawnPowerRestoreRunning = 0
|
||||
var/welded = null
|
||||
var/locked = 0
|
||||
var/wires = 511
|
||||
var/wires = 4095
|
||||
secondsElectrified = 0 //How many seconds remain until the door is no longer electrified. -1 if it is permanently electrified until someone fixes it.
|
||||
var/aiDisabledIdScanner = 0
|
||||
var/aiHacking = 0
|
||||
@@ -77,8 +82,11 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
|
||||
autoclose = 1
|
||||
var/doortype = 0
|
||||
var/justzap = 0
|
||||
var/safetylight = 1
|
||||
var/obj/item/weapon/airlock_electronics/electronics = null
|
||||
|
||||
/obj/machinery/door/airlock/New()
|
||||
|
||||
/obj/machinery/door/airlock/command
|
||||
name = "Airlock"
|
||||
icon = 'Doorcom.dmi'
|
||||
@@ -266,6 +274,12 @@ About the new airlock wires panel:
|
||||
open()
|
||||
else
|
||||
close()
|
||||
if(AIRLOCK_WIRE_CRUSH)
|
||||
src.forcecrush = !src.forcecrush
|
||||
if(AIRLOCK_WIRE_LIGHT)
|
||||
src.safetylight = !src.safetylight
|
||||
if(AIRLOCK_WIRE_HOLDOPEN)
|
||||
src.holdopen = !src.holdopen
|
||||
|
||||
|
||||
|
||||
@@ -350,6 +364,13 @@ About the new airlock wires panel:
|
||||
/obj/machinery/door/airlock/proc/canAIHack()
|
||||
return ((src.aiControlDisabled==1) && (!src.isAllPowerCut()));
|
||||
|
||||
/obj/machinery/door/airlock/proc/canSynControl()
|
||||
return (src.synDoorHacked && (!src.isAllPowerCut()));
|
||||
|
||||
/obj/machinery/door/airlock/proc/canSynHack(obj/item/device/hacktool/H)
|
||||
if(in_range(src, usr) && get_dist(src, H) <= 1 && src.synDoorHacked==0 && !src.isAllPowerCut())
|
||||
return 1
|
||||
|
||||
/obj/machinery/door/airlock/proc/arePowerSystemsOn()
|
||||
return (src.secondsMainPowerLost==0 || src.secondsBackupPowerLost==0)
|
||||
|
||||
@@ -421,7 +442,7 @@ About the new airlock wires panel:
|
||||
/obj/machinery/door/airlock/update_icon()
|
||||
if(overlays) overlays = null
|
||||
if(density)
|
||||
if(locked)
|
||||
if(locked && safetylight)
|
||||
icon_state = "door_locked"
|
||||
else
|
||||
icon_state = "door_closed"
|
||||
@@ -505,6 +526,121 @@ About the new airlock wires panel:
|
||||
if (src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER2))
|
||||
t1 += text("Backup Power Output wire is cut.<br>\n")
|
||||
|
||||
if (src.isWireCut(AIRLOCK_WIRE_CRUSH))
|
||||
t1 += text("Airlock extra force wire is cut.<br>\n")
|
||||
else if(!src.forcecrush)
|
||||
t1 += text("Airlock extra force disabled <A href='?src=\ref[src];aiEnable=8'>Enable it?</a><br>\n")
|
||||
else
|
||||
t1 += text("Airlock extra force enabled <A href='?src=\ref[src];aiDisable=8'>Disable it?</a><br>\n")
|
||||
|
||||
if (src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS))
|
||||
t1 += text("Door bolt drop wire is cut.<br>\n")
|
||||
else if (!src.locked)
|
||||
t1 += text("Door bolts are up. <A href='?src=\ref[];aiDisable=4'>Drop them?</a><br>\n", src)
|
||||
else
|
||||
t1 += text("Door bolts are down.")
|
||||
if (src.arePowerSystemsOn())
|
||||
t1 += text(" <A href='?src=\ref[];aiEnable=4'>Raise?</a><br>\n", src)
|
||||
else
|
||||
t1 += text(" Cannot raise door bolts due to power failure.<br>\n")
|
||||
|
||||
if (src.isWireCut(AIRLOCK_WIRE_ELECTRIFY))
|
||||
t1 += text("Electrification wire is cut.<br>\n")
|
||||
if (src.secondsElectrified==-1)
|
||||
t1 += text("Door is electrified indefinitely. <A href='?src=\ref[];aiDisable=5'>Un-electrify it?</a><br>\n", src)
|
||||
else if (src.secondsElectrified>0)
|
||||
t1 += text("Door is electrified temporarily ([] seconds). <A href='?src=\ref[];aiDisable=5'>Un-electrify it?</a><br>\n", src.secondsElectrified, src)
|
||||
else
|
||||
t1 += text("Door is not electrified. <A href='?src=\ref[];aiEnable=5'>Electrify it for 30 seconds?</a> Or, <A href='?src=\ref[];aiEnable=6'>Electrify it indefinitely until someone cancels the electrification?</a><br>\n", src, src)
|
||||
|
||||
if(src.isWireCut(AIRLOCK_WIRE_LIGHT))
|
||||
t1 += "Bolt indication light wire is cut.<br>\n"
|
||||
else if(!src.safetylight)
|
||||
t1 += text("Bolt Indication light is disabled <A href='?src=\ref[src];aiEnable=9'>Enable it?</a><br>\n")
|
||||
else
|
||||
t1 += text("Bolt Indication light is enabled <A href='?src=\ref[src];aiDisable=9'>Disable it?</a><br>\n")
|
||||
|
||||
if(src.isWireCut(AIRLOCK_WIRE_HOLDOPEN))
|
||||
t1 += "Behavior Control light wire is cut.<br>\n"
|
||||
else if(!src.holdopen)
|
||||
t1 += text("Door behavior is set to: Automatically close <A href='?src=\ref[src];aiEnable=10'>Toggle?</a><br>\n")
|
||||
else
|
||||
t1 += text("Door behavior is set to: Wait for clearance to close <A href='?src=\ref[src];aiDisable=10'>Toggle?</a><br>\n")
|
||||
|
||||
if (src.welded)
|
||||
t1 += text("Door appears to have been welded shut.<br>\n")
|
||||
else if (!src.locked)
|
||||
if (src.density)
|
||||
t1 += text("<A href='?src=\ref[];aiEnable=7'>Open door</a><br>\n", src)
|
||||
else
|
||||
t1 += text("<A href='?src=\ref[];aiDisable=7'>Close door</a><br>\n", src)
|
||||
|
||||
t1 += text("<p><a href='?src=\ref[];close=1'>Close</a></p>\n", src)
|
||||
user << browse(t1, "window=airlock")
|
||||
onclose(user, "airlock")
|
||||
|
||||
//aiDisable - 1 idscan, 2 disrupt main power, 3 disrupt backup power, 4 drop door bolts, 5 un-electrify door, 7 close door
|
||||
//aiEnable - 1 idscan, 4 raise door bolts, 5 electrify door for 30 seconds, 6 electrify door indefinitely, 7 open door
|
||||
|
||||
/obj/machinery/door/airlock/proc/attack_hack(mob/user as mob, obj/item/device/hacktool/C)
|
||||
if(!C)
|
||||
return
|
||||
if(C.in_use)
|
||||
user << "We are already hacking another airlock."
|
||||
return
|
||||
if (!src.canSynControl() && src.canSynHack(C))
|
||||
src.synhack(user, C)
|
||||
return
|
||||
|
||||
//Separate interface for the hacker.
|
||||
var/t1 = text("<B>Airlock Control</B><br>\n")
|
||||
if (src.secondsMainPowerLost > 0)
|
||||
if ((!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2)))
|
||||
t1 += text("Main power is offline for [] seconds.<br>\n", src.secondsMainPowerLost)
|
||||
else
|
||||
t1 += text("Main power is offline indefinitely.<br>\n")
|
||||
else
|
||||
t1 += text("Main power is online.")
|
||||
|
||||
if (src.secondsBackupPowerLost > 0)
|
||||
if ((!src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER2)))
|
||||
t1 += text("Backup power is offline for [] seconds.<br>\n", src.secondsBackupPowerLost)
|
||||
else
|
||||
t1 += text("Backup power is offline indefinitely.<br>\n")
|
||||
else if (src.secondsMainPowerLost > 0)
|
||||
t1 += text("Backup power is online.")
|
||||
else
|
||||
t1 += text("Backup power is offline, but will turn on if main power fails.")
|
||||
t1 += "<br>\n"
|
||||
|
||||
if (src.isWireCut(AIRLOCK_WIRE_IDSCAN))
|
||||
t1 += text("IdScan wire is cut.<br>\n")
|
||||
else if (src.aiDisabledIdScanner)
|
||||
t1 += text("IdScan disabled. <A href='?src=\ref[];aiEnable=1'>Enable?</a><br>\n", src)
|
||||
else
|
||||
t1 += text("IdScan enabled. <A href='?src=\ref[];aiDisable=1'>Disable?</a><br>\n", src)
|
||||
|
||||
if (src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1))
|
||||
t1 += text("Main Power Input wire is cut.<br>\n")
|
||||
if (src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2))
|
||||
t1 += text("Main Power Output wire is cut.<br>\n")
|
||||
if (src.secondsMainPowerLost == 0)
|
||||
t1 += text("<A href='?src=\ref[];aiDisable=2'>Temporarily disrupt main power?</a>.<br>\n", src)
|
||||
if (src.secondsBackupPowerLost == 0)
|
||||
t1 += text("<A href='?src=\ref[];aiDisable=3'>Temporarily disrupt backup power?</a>.<br>\n", src)
|
||||
|
||||
if (src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER1))
|
||||
t1 += text("Backup Power Input wire is cut.<br>\n")
|
||||
if (src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER2))
|
||||
t1 += text("Backup Power Output wire is cut.<br>\n")
|
||||
|
||||
if (src.isWireCut(AIRLOCK_WIRE_CRUSH))
|
||||
t1 += text("Airlock extra force wire is cut.<br>\n")
|
||||
else if(!src.forcecrush)
|
||||
t1 += text("Airlock extra force disabled <A href='?src=\ref[src];aiEnable=8'>Enable it?</a><br>\n")
|
||||
else
|
||||
t1 += text("Airlock extra force enabled <A href='?src=\ref[src];aiDisable=8'>Disable it?</a><br>\n")
|
||||
|
||||
if (src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS))
|
||||
t1 += text("Door bolt drop wire is cut.<br>\n")
|
||||
else if (!src.locked)
|
||||
@@ -524,6 +660,20 @@ About the new airlock wires panel:
|
||||
else
|
||||
t1 += text("Door is not electrified. <A href='?src=\ref[];aiEnable=5'>Electrify it for 30 seconds?</a> Or, <A href='?src=\ref[];aiEnable=6'>Electrify it indefinitely until someone cancels the electrification?</a><br>\n", src, src)
|
||||
|
||||
if(src.isWireCut(AIRLOCK_WIRE_LIGHT))
|
||||
t1 += "Bolt indication light wire is cut.<br>\n"
|
||||
else if(!src.safetylight)
|
||||
t1 += text("Bolt indication light is disabled <A href='?src=\ref[src];aiEnable=9'>Enable it?</a><br>\n")
|
||||
else
|
||||
t1 += text("Bolt indication light is enabled <A href='?src=\ref[src];aiDisable=9'>Disable it?</a><br>\n")
|
||||
|
||||
if(src.isWireCut(AIRLOCK_WIRE_HOLDOPEN))
|
||||
t1 += "Behavior Control light wire is cut.<br>\n"
|
||||
else if(!src.holdopen)
|
||||
t1 += text("Door behavior is set to: Automatically close <A href='?src=\ref[src];aiEnable=10'>Toggle?</a><br>\n")
|
||||
else
|
||||
t1 += text("Door behavior is set to: Wait for clearance to close <A href='?src=\ref[src];aiDisable=10'>Toggle?</a><br>\n")
|
||||
|
||||
if (src.welded)
|
||||
t1 += text("Door appears to have been welded shut.<br>\n")
|
||||
else if (!src.locked)
|
||||
@@ -536,10 +686,6 @@ About the new airlock wires panel:
|
||||
user << browse(t1, "window=airlock")
|
||||
onclose(user, "airlock")
|
||||
|
||||
//aiDisable - 1 idscan, 2 disrupt main power, 3 disrupt backup power, 4 drop door bolts, 5 un-electrify door, 7 close door
|
||||
//aiEnable - 1 idscan, 4 raise door bolts, 5 electrify door for 30 seconds, 6 electrify door indefinitely, 7 open door
|
||||
|
||||
|
||||
/obj/machinery/door/airlock/proc/hack(mob/user as mob)
|
||||
if (src.aiHacking==0)
|
||||
src.aiHacking=1
|
||||
@@ -628,7 +774,10 @@ About the new airlock wires panel:
|
||||
"Blue" = 6,
|
||||
"Green" = 7,
|
||||
"Grey" = 8,
|
||||
"Black" = 9
|
||||
"Black" = 9,
|
||||
"Pink" = 10,
|
||||
"Brown" = 11,
|
||||
"Maroon" = 12
|
||||
)
|
||||
for(var/wiredesc in wires)
|
||||
var/is_uncut = src.wires & airlockWireColorToFlag[wires[wiredesc]]
|
||||
@@ -644,7 +793,7 @@ About the new airlock wires panel:
|
||||
t1 += "<a href='?src=\ref[src];signaler=[wires[wiredesc]]'>Attach signaler</a>"
|
||||
t1 += "<br>"
|
||||
|
||||
t1 += text("<br>\n[]<br>\n[]<br>\n[]", (src.locked ? "The door bolts have fallen!" : "The door bolts look up."), ((src.arePowerSystemsOn() && !(stat & NOPOWER)) ? "The test light is on." : "The test light is off!"), (src.aiControlDisabled==0 ? "The 'AI control allowed' light is on." : "The 'AI control allowed' light is off."))
|
||||
t1 += text("<br>\n[]<br>\n[]<br>\n[]<br>\n[]<br>\n[]", (src.locked ? "The door bolts have fallen!" : "The door bolts look up."), ((src.arePowerSystemsOn() && !(stat & NOPOWER)) ? "The test light is on." : "The test light is off!"), (src.aiControlDisabled==0 ? "The 'AI control allowed' light is on." : "The 'AI control allowed' light is off."), (src.secondsElectrified!=0 ? "The safety light is flashing!" : "The safety light is on."), (src.forcecrush==0 ? "The hydraulics control light is a solid green." : "The hydraulics control light is flashing red."))
|
||||
|
||||
t1 += text("<p><a href='?src=\ref[];close=1'>Close</a></p>\n", src)
|
||||
|
||||
@@ -716,9 +865,8 @@ About the new airlock wires panel:
|
||||
src.update_icon()
|
||||
add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
else if(istype(usr, /mob/living/silicon)) // unranged silicon interface
|
||||
//AI
|
||||
if (!src.canAIControl())
|
||||
else //AI or Syndicate using hacktool
|
||||
if (!src.canAIControl() || (istype(usr.equipped(), /obj/item/device/hacktool/) && (!src.canSynControl() || !in_range(src, usr))))
|
||||
usr << "Airlock control connection lost!"
|
||||
return
|
||||
//aiDisable - 1 idscan, 2 disrupt main power, 3 disrupt backup power, 4 drop door bolts, 5 un-electrify door, 7 close door
|
||||
@@ -771,6 +919,21 @@ About the new airlock wires panel:
|
||||
close()
|
||||
else
|
||||
usr << text("The airlock is already closed.<br>\n")
|
||||
if (8)
|
||||
if(!src.forcecrush)
|
||||
usr << text("Door extra force not enabled!<br>\n")
|
||||
else
|
||||
src.forcecrush = 0
|
||||
if (9)
|
||||
if(!src.safetylight)
|
||||
usr << text("Bolt indication light not enabled!<br>\n")
|
||||
else
|
||||
src.safetylight = 0
|
||||
if (10)
|
||||
if(!src.holdopen)
|
||||
usr << text("Door Behavior already set to: Wait for clearance to close<br>\n")
|
||||
else
|
||||
src.holdopen = 1
|
||||
|
||||
else if (href_list["aiEnable"])
|
||||
var/code = text2num(href_list["aiEnable"])
|
||||
@@ -834,6 +997,21 @@ About the new airlock wires panel:
|
||||
// close()
|
||||
else
|
||||
usr << text("The airlock is already opened.<br>\n")
|
||||
if (8)
|
||||
if(src.forcecrush)
|
||||
usr << text("Door extra force already enabled!<br>\n")
|
||||
else
|
||||
src.forcecrush = 1
|
||||
if (9)
|
||||
if(src.safetylight)
|
||||
usr << text("Bolt indication light already enabled!<br>\n")
|
||||
else
|
||||
src.safetylight = 1
|
||||
if (10)
|
||||
if(src.holdopen)
|
||||
usr << text("Door Behavior already set to: Automatically close<br>\n")
|
||||
else
|
||||
src.holdopen = 0
|
||||
|
||||
src.update_icon()
|
||||
src.updateUsrDialog()
|
||||
@@ -866,6 +1044,8 @@ About the new airlock wires panel:
|
||||
return src.attack_hand(user)
|
||||
else if (istype(C, /obj/item/device/multitool))
|
||||
return src.attack_hand(user)
|
||||
else if (istype(C, /obj/item/device/hacktool))
|
||||
return src.attack_hack(user, C)
|
||||
else if (istype(C, /obj/item/device/assembly/signaler))
|
||||
return src.attack_hand(user)
|
||||
else if (istype(C, /obj/item/weapon/pai_cable)) // -- TLE
|
||||
@@ -980,6 +1160,85 @@ About the new airlock wires panel:
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/machinery/door/airlock/proc/synhack(mob/user as mob, obj/item/device/hacktool/I)
|
||||
if (src.synHacking==0)
|
||||
src.synHacking=1
|
||||
I.in_use = 1
|
||||
spawn(20 )
|
||||
user << "Jacking in. Stay close to the airlock or you'll rip the cables out and we'll have to start over."
|
||||
sleep(25 )
|
||||
if (src.canSynControl())
|
||||
user << "Hack cancelled, control already possible."
|
||||
src.synHacking=0
|
||||
I.in_use = 0
|
||||
return
|
||||
else if (!src.canSynHack(I))
|
||||
user << "\red Connection lost. Stand still and stay near the airlock!"
|
||||
src.synHacking=0
|
||||
I.in_use = 0
|
||||
return
|
||||
user << "Connection established."
|
||||
sleep(10 )
|
||||
user << "Attempting to hack into airlock. This may take some time."
|
||||
sleep(100 )
|
||||
// Alerting the AIs
|
||||
var/list/cameras = list()
|
||||
for (var/obj/machinery/camera/C in src.loc.loc.contents) // getting all cameras in the area
|
||||
cameras += C
|
||||
|
||||
var/alertoption = prob(50) // 50% chance of warning the AI
|
||||
if(prob(15)) //15% chance of sending the AI all the details (camera, area, warning)
|
||||
alertoption = 3
|
||||
else if (prob(18)) //18% chance of sending the AI just the area
|
||||
alertoption = 2
|
||||
|
||||
for (var/mob/living/silicon/ai/aiPlayer in world)
|
||||
if (aiPlayer.stat != 2)
|
||||
switch(alertoption)
|
||||
if(3) aiPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc, cameras)
|
||||
if(2) aiPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
|
||||
if(1) aiPlayer.triggerUnmarkedAlarm("AirlockHacking")
|
||||
for (var/mob/living/silicon/robot/robotPlayer in world)
|
||||
if (robotPlayer.stat != 2)
|
||||
switch(alertoption)
|
||||
if(2,3) robotPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
|
||||
if(1) robotPlayer.triggerUnmarkedAlarm("AirlockHacking")
|
||||
|
||||
// ...And done
|
||||
|
||||
if (!src.canSynHack(I))
|
||||
user << "\red Hack aborted: landline connection lost. Stay closer to the airlock."
|
||||
src.synHacking=0
|
||||
I.in_use = 0
|
||||
return
|
||||
else if (src.canSynControl())
|
||||
user << "Local override already in place, hack aborted."
|
||||
src.synHacking=0
|
||||
I.in_use = 0
|
||||
return
|
||||
user << "Upload access confirmed. Loading control program into airlock software."
|
||||
sleep(85 )
|
||||
if (!src.canSynHack(I))
|
||||
user << "\red Hack aborted: cable connection lost. Do not move away from the airlock."
|
||||
src.synHacking=0
|
||||
I.in_use = 0
|
||||
return
|
||||
else if (src.canSynControl())
|
||||
user << "Upload access aborted, local override already in place."
|
||||
src.synHacking=0
|
||||
I.in_use = 0
|
||||
return
|
||||
user << "Transfer complete. Forcing airlock to execute program."
|
||||
sleep(25 )
|
||||
//disable blocked control
|
||||
src.synDoorHacked = 1
|
||||
user << "Bingo! We're in. Airlock control panel coming right up."
|
||||
sleep(5 )
|
||||
//bring up airlock dialog
|
||||
src.synHacking = 0
|
||||
I.in_use = 0
|
||||
src.attack_hack(user, I)
|
||||
|
||||
/obj/machinery/door/airlock/open()
|
||||
if (src.welded || src.locked || (!src.arePowerSystemsOn()) || (stat & NOPOWER) || src.isWireCut(AIRLOCK_WIRE_OPEN_DOOR))
|
||||
return 0
|
||||
@@ -1002,6 +1261,8 @@ About the new airlock wires panel:
|
||||
|
||||
/obj/machinery/door/airlock/New()
|
||||
..()
|
||||
if(src.holdopen)
|
||||
wires -= 2^11
|
||||
if (src.closeOtherId != null)
|
||||
spawn (5)
|
||||
for (var/obj/machinery/door/airlock/A in machines)
|
||||
|
||||
@@ -289,14 +289,63 @@
|
||||
/obj/machinery/door/proc/close()
|
||||
if(density)
|
||||
return 1
|
||||
if(src.operating)
|
||||
if (src.operating)
|
||||
return
|
||||
src.operating = 1
|
||||
|
||||
var/held = 0
|
||||
|
||||
if(src.holdopen)
|
||||
while(held == 0)
|
||||
var/list/objects = locate() in get_turf(src)
|
||||
for(var/obj/T in objects)
|
||||
if(T.anchored)
|
||||
held = 1
|
||||
break
|
||||
for(var/mob/T in objects)
|
||||
held = 1
|
||||
break
|
||||
sleep(150)
|
||||
animate("closing")
|
||||
src.density = 1
|
||||
src.layer = 3.1
|
||||
sleep(10)
|
||||
spawn(4)
|
||||
if(!istype(src, /obj/machinery/door/window))
|
||||
for(var/mob/living/L in src.loc) // Crush mobs and move them out of the way
|
||||
|
||||
if(src.forcecrush) // Save an AI, crush a limb
|
||||
var/limbname = pick("l arm", "r arm", "l hand","r hand", "l foot", "r foot")
|
||||
var/limbdisplay
|
||||
|
||||
for(var/organ in L:organs)
|
||||
var/datum/organ/external/temp = L:organs["[organ]"]
|
||||
if (istype(temp, /datum/organ/external) && temp.name == limbname)
|
||||
limbdisplay = temp.display_name // Take the name for down below
|
||||
temp.take_damage(60, 0) //OH GOD IT HURTS
|
||||
break
|
||||
|
||||
L << "\red The airlock crushes your [limbdisplay]!"
|
||||
for(var/mob/O in viewers(L, null))
|
||||
O.show_message("\red The airlock crushes [L.name]'s [limbdisplay]!", 1)
|
||||
|
||||
|
||||
else
|
||||
L << "\red The airlock forces you out of the way!" //Lucky you
|
||||
for(var/mob/O in viewers(L, null))
|
||||
O.show_message("\red The airlock pushes [L.name] out of the way!", 1)
|
||||
|
||||
var/list/lst = list(NORTH,SOUTH,EAST,WEST)
|
||||
var/turf/T = get_random_turf(L, lst)
|
||||
if(T)
|
||||
L.loc = T
|
||||
|
||||
for(var/obj/item/I in src.loc) // Move items out of the way
|
||||
if(!I.anchored)
|
||||
var/list/lst = list(NORTH,SOUTH,EAST,WEST)
|
||||
var/turf/T = get_random_turf(I, lst)
|
||||
if(T)
|
||||
I.loc = T
|
||||
|
||||
sleep(6)
|
||||
update_icon()
|
||||
|
||||
if(src.visible && (!src.glass))
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
var/cart = "" //A place to stick cartridge menu information
|
||||
var/over_jumpsuit = 1 // If set to 0, it won't display on top of the mob's jumpsuit
|
||||
|
||||
var/obj/item/weapon/integrated_uplink/uplink = null
|
||||
var/obj/item/device/uplink/pda/uplink = null
|
||||
|
||||
var/obj/item/weapon/card/id/id = null //Making it possible to slot an ID card into the PDA so it can function as both.
|
||||
var/ownjob = null //related to above
|
||||
|
||||
@@ -1,245 +0,0 @@
|
||||
/obj/item/weapon/integrated_uplink
|
||||
name = "uplink module"
|
||||
desc = "An electronic uplink system of unknown origin."
|
||||
icon = 'module.dmi'
|
||||
icon_state = "power_mod"
|
||||
var/uses = 10
|
||||
var/obj/item/device/pda/hostpda = null
|
||||
var/orignote = null //Restore original notes when locked.
|
||||
var/active = 0 //Are we currently active??
|
||||
var/menu_message = ""
|
||||
var/lock_code = "password" //What's the password?
|
||||
|
||||
//Communicate with traitor through the PDA's note function.
|
||||
/obj/item/weapon/integrated_uplink/proc/print_to_host(var/text)
|
||||
if (isnull(hostpda))
|
||||
return
|
||||
hostpda.note = text
|
||||
|
||||
for (var/mob/M in viewers(1, hostpda.loc))
|
||||
if (M.client && M.machine == hostpda)
|
||||
hostpda.attack_self(M)
|
||||
|
||||
return
|
||||
|
||||
//Let's build a menu!
|
||||
/obj/item/weapon/integrated_uplink/proc/generate_menu()
|
||||
menu_message = "<B>Syndicate Uplink Console:</B><BR>"
|
||||
menu_message += "Tele-Crystals left: [uses]<BR>"
|
||||
menu_message += "<HR>"
|
||||
menu_message += "<B>Request item:</B><BR>"
|
||||
menu_message += "<I>Each item costs a number of tele-crystals as indicated by the number following their name.</I><BR>"
|
||||
menu_message += "<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=revolver'>Revolver</A> (6)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=revolver_ammo'>Ammo-357</A> for use with Revolver (2)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=suffocation_revolver_ammo'>Ammo-418</A> for use with Revolver (3)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=xbow'>Energy Crossbow</A> (5)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=sword'>Energy Sword</A> (4)<BR>"
|
||||
menu_message += "<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=jump'>Chameleon Jumpsuit</A> (3)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=shoes'>Syndicate Shoes</A> (2)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=card'>Syndicate Card</A> (3)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=voice'>Voice-Changer</A> (4)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=thermal'>Thermal Glasses</A> (4)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=eraser'>Stamp Remover</A> (1)<BR>" //Allows doccuments to be de-stamped
|
||||
menu_message += "<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=imp_freedom'>Freedom Implant (with injector)</A> (3)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=imp_uplink'>Uplink Implant (5 crystals inside)</A> (10)<BR>"
|
||||
// menu_message += "<A href='byond://?src=\ref[src];buy_item=paralysispen'>Paralysis Pen</A> (3)<BR>"
|
||||
//When given the choice, people have been P2W
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=sleepypen'>Sleepy Pen</A> (4)<BR>" //Terrible -Pete.
|
||||
menu_message += "<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=imp_exp'>Explosive Implant (with injector)</A> (6)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=detomatix'>Detomatix Cartridge</A> (3)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=bomb'>Plastic Explosives</A> (2)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=powersink'>Power Sink</A> (5)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=space'>Syndicate-made Space Suit (inludes a helmet)</A> (3)<BR>"
|
||||
menu_message += "<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=projector'>Chameleon-projector</A> (4)<BR>"
|
||||
// menu_message += "<A href='byond://?src=\ref[src];buy_item=cloak'>Cloaking Device</A> (4)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=emag'>Electromagnet Card</A> (3)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=empbox'>5 EMP Grenades</A> (4)<BR>"
|
||||
menu_message += "<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=botchat'>Binary Translator</A> (3)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=lawmod'>Hacked AI Module</A> (7)<BR>"
|
||||
menu_message += "<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=singubeacon'>Singularity Beacon</A> (does not include a screwdriver) (7)<BR>"
|
||||
menu_message += "<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=toolbox'>Syndicate Toolbox</A> (Includes various tools) (1)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=soap'>Syndicate Soap</A> (1)<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=balloon'>Syndicate Balloon</A> (Useless) (10)<BR>"
|
||||
menu_message += "<BR>"
|
||||
menu_message += "<A href='byond://?src=\ref[src];buy_item=bundle'>Syndicate Bundle</A> (Contains an assorted selection of syndicate items)(10)<BR>"
|
||||
|
||||
menu_message += "<HR>"
|
||||
return
|
||||
|
||||
/obj/item/weapon/integrated_uplink/proc/unlock()
|
||||
if ((isnull(hostpda)) || (active))
|
||||
return
|
||||
|
||||
orignote = hostpda.note
|
||||
active = 1
|
||||
hostpda.mode = 1 //Switch right to the notes program
|
||||
|
||||
generate_menu()
|
||||
print_to_host(menu_message)
|
||||
return
|
||||
|
||||
/obj/item/weapon/integrated_uplink/Topic(href, href_list)
|
||||
if ((isnull(hostpda)) || (!active))
|
||||
return
|
||||
|
||||
if (usr.stat || usr.restrained() || !in_range(hostpda, usr))
|
||||
return
|
||||
|
||||
if (href_list["buy_item"])
|
||||
switch(href_list["buy_item"])
|
||||
if("revolver")
|
||||
if (uses >= 6)
|
||||
uses -= 6
|
||||
new /obj/item/weapon/gun/projectile(get_turf(hostpda))
|
||||
if("revolver_ammo")
|
||||
if (uses >= 2)
|
||||
uses -= 2
|
||||
new /obj/item/ammo_magazine/a357(get_turf(hostpda))
|
||||
if("suffocation_revolver_ammo")
|
||||
if (uses >= 3)
|
||||
uses -= 3
|
||||
new /obj/item/ammo_magazine/a418(get_turf(hostpda))
|
||||
if("xbow")
|
||||
if (uses >= 5)
|
||||
uses -= 5
|
||||
new /obj/item/weapon/gun/energy/crossbow(get_turf(hostpda))
|
||||
if("empbox")
|
||||
if (uses >= 4)
|
||||
uses -= 4
|
||||
new /obj/item/weapon/storage/emp_kit(get_turf(hostpda))
|
||||
if("voice")
|
||||
if (uses >= 4)
|
||||
uses -= 4
|
||||
new /obj/item/clothing/mask/gas/voice(get_turf(hostpda))
|
||||
if("jump")
|
||||
if (uses >= 3)
|
||||
uses -= 3
|
||||
new /obj/item/clothing/under/chameleon(get_turf(hostpda))
|
||||
if("shoes")
|
||||
if (uses >= 2)
|
||||
uses -= 2
|
||||
new /obj/item/clothing/shoes/syndigaloshes(get_turf(hostpda))
|
||||
if("card")
|
||||
if (uses >= 3)
|
||||
uses -= 3
|
||||
new /obj/item/weapon/card/id/syndicate(get_turf(hostpda))
|
||||
if("emag")
|
||||
if (uses >= 3)
|
||||
uses -= 3
|
||||
new /obj/item/weapon/card/emag(get_turf(hostpda))
|
||||
if("imp_freedom")
|
||||
if (uses >= 3)
|
||||
uses -= 3
|
||||
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(get_turf(hostpda))
|
||||
O.imp = new /obj/item/weapon/implant/freedom(O)
|
||||
O.update()
|
||||
if("imp_uplink")
|
||||
if (uses >= 10)
|
||||
uses -= 10
|
||||
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(get_turf(hostpda))
|
||||
O.imp = new /obj/item/weapon/implant/uplink(O)
|
||||
O.update()
|
||||
if("imp_exp")
|
||||
if (src.uses >= 6)
|
||||
src.uses -= 6
|
||||
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(get_turf(hostpda))
|
||||
O.imp = new /obj/item/weapon/implant/explosive(O)
|
||||
O.name = "(BIO-HAZARD) BIO-detpack"
|
||||
O.update()
|
||||
if("sleepypen")
|
||||
if (uses >= 4)
|
||||
uses -= 4
|
||||
new /obj/item/weapon/pen/sleepypen(get_turf(hostpda))
|
||||
if("paralysispen")
|
||||
if (uses >= 3)
|
||||
uses -= 3
|
||||
new /obj/item/weapon/pen/paralysis(get_turf(src))
|
||||
if("projector")
|
||||
if (uses >= 4)
|
||||
uses -= 4
|
||||
new /obj/item/device/chameleon(get_turf(hostpda))
|
||||
/*if("cloak")
|
||||
if (uses >= 4)
|
||||
uses -= 4
|
||||
new /obj/item/weapon/cloaking_device(get_turf(hostpda))*/
|
||||
if("thermal")
|
||||
if (src.uses >= 4)
|
||||
src.uses -= 4
|
||||
new /obj/item/clothing/glasses/thermal(get_turf(src))
|
||||
if("sword")
|
||||
if (uses >= 4)
|
||||
uses -= 4
|
||||
new /obj/item/weapon/melee/energy/sword(get_turf(hostpda))
|
||||
if("bomb")
|
||||
if (uses >= 2)
|
||||
uses -= 2
|
||||
new /obj/item/weapon/plastique(get_turf(hostpda))
|
||||
if("powersink")
|
||||
if (uses >= 5)
|
||||
uses -= 5
|
||||
new /obj/item/device/powersink(get_turf(hostpda))
|
||||
if("detomatix")
|
||||
if (uses >= 3)
|
||||
uses -= 3
|
||||
new /obj/item/weapon/cartridge/syndicate(get_turf(hostpda))
|
||||
if("space")
|
||||
if (uses >= 3)
|
||||
uses -= 3
|
||||
new /obj/item/clothing/suit/space/syndicate(get_turf(hostpda))
|
||||
new /obj/item/clothing/head/helmet/space/syndicate(get_turf(hostpda))
|
||||
if("lawmod")
|
||||
if (uses >= 7)
|
||||
uses -= 7
|
||||
new /obj/item/weapon/aiModule/syndicate(get_turf(hostpda))
|
||||
if("botchat")
|
||||
if (uses >= 3)
|
||||
uses -= 3
|
||||
new /obj/item/device/radio/headset/traitor(get_turf(hostpda))
|
||||
if("singubeacon")
|
||||
if(uses >= 7)
|
||||
uses -= 7
|
||||
new /obj/machinery/singularity_beacon/syndicate(get_turf(hostpda))
|
||||
if("toolbox")
|
||||
if(uses)
|
||||
uses--
|
||||
new /obj/item/weapon/storage/toolbox/syndicate(get_turf(hostpda))
|
||||
if("soap")
|
||||
if(uses)
|
||||
uses--
|
||||
new /obj/item/weapon/soap/syndie(get_turf(src))
|
||||
if("balloon")
|
||||
if(uses >= 10)
|
||||
uses -= 10
|
||||
new /obj/item/toy/syndicateballoon(get_turf(hostpda))
|
||||
if("bundle")
|
||||
if(uses >= 10)
|
||||
uses -= 10
|
||||
new /obj/item/weapon/storage/box/syndicate(get_turf(hostpda))
|
||||
if("eraser")
|
||||
if(uses >= 1)
|
||||
uses -= 1
|
||||
new /obj/item/weapon/stamperaser(get_turf(hostpda))
|
||||
|
||||
generate_menu()
|
||||
print_to_host(menu_message)
|
||||
return
|
||||
|
||||
return
|
||||
|
||||
/obj/item/weapon/integrated_uplink/proc/shutdown_uplink()
|
||||
if (isnull(src.hostpda))
|
||||
return
|
||||
active = 0
|
||||
hostpda.note = orignote
|
||||
if (hostpda.mode==1)
|
||||
hostpda.mode = 0
|
||||
hostpda.updateDialog()
|
||||
return
|
||||
@@ -38,12 +38,12 @@
|
||||
desc = "Summon things."
|
||||
var
|
||||
activation_emote = "chuckle"
|
||||
obj/item/weapon/syndicate_uplink/uplink = null
|
||||
obj/item/device/uplink/radio/uplink = null
|
||||
|
||||
|
||||
New()
|
||||
activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink")
|
||||
uplink = new /obj/item/weapon/syndicate_uplink/implanted(src)
|
||||
uplink = new /obj/item/device/uplink/radio/implanted(src)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -290,4 +290,38 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
||||
|
||||
implanted(mob/source as mob)
|
||||
mobname = source.real_name
|
||||
processing_objects.Add(src)
|
||||
processing_objects.Add(src)
|
||||
|
||||
/obj/item/weapon/implant/compressed
|
||||
name = "compressed matter implant"
|
||||
desc = "*fwooomp*"
|
||||
var/activation_emote = "sigh"
|
||||
var/obj/item/scanned = null
|
||||
|
||||
get_data()
|
||||
var/dat = {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> NanoTrasen \"Profit Margin\" Class Employee Lifesign Sensor<BR>
|
||||
<b>Life:</b> Activates upon death.<BR>
|
||||
<b>Important Notes:</b> Alerts crew to crewmember death.<BR>
|
||||
<HR>
|
||||
<b>Implant Details:</b><BR>
|
||||
<b>Function:</b> Contains a compact radio signaler that triggers when the host's lifesigns cease.<BR>
|
||||
<b>Special Features:</b> Alerts crew to crewmember death.<BR>
|
||||
<b>Integrity:</b> Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."}
|
||||
return dat
|
||||
|
||||
trigger(emote, mob/source as mob)
|
||||
if (src.scanned == null)
|
||||
return 0
|
||||
|
||||
if (emote == src.activation_emote)
|
||||
source << "The air glows as \the [src.scanned.name] uncompresses."
|
||||
var/turf/t = get_turf(source)
|
||||
src.scanned.loc = t
|
||||
del src
|
||||
|
||||
implanted(mob/source as mob)
|
||||
src.activation_emote = input("Choose activation emote:") in list("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink")
|
||||
source.mind.store_memory("Freedom implant can be activated by using the [src.activation_emote] emote, <B>say *[src.activation_emote]</B> to attempt to activate.", 0, 0)
|
||||
source << "The implanted freedom implant can be activated by using the [src.activation_emote] emote, <B>say *[src.activation_emote]</B> to attempt to activate."
|
||||
@@ -80,4 +80,39 @@
|
||||
src.imp = new /obj/item/weapon/implant/explosive( src )
|
||||
..()
|
||||
update()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/weapon/implanter/compressed
|
||||
name = "implanter-compressed"
|
||||
icon_state = "cimplanter0"
|
||||
|
||||
New()
|
||||
src.imp = new /obj/item/weapon/implant/compressed( src )
|
||||
..()
|
||||
update()
|
||||
return
|
||||
|
||||
update()
|
||||
if (src.imp)
|
||||
var/obj/item/weapon/implant/compressed/c = src.imp
|
||||
if(!c.scanned)
|
||||
src.icon_state = "cimplanter0"
|
||||
else
|
||||
src.icon_state = "cimplanter1"
|
||||
else
|
||||
src.icon_state = "cimplanter2"
|
||||
return
|
||||
|
||||
attack(mob/M as mob, mob/user as mob)
|
||||
var/obj/item/weapon/implant/compressed/c = src.imp
|
||||
if (c.scanned == null)
|
||||
user << "Please scan an object with the implanter first."
|
||||
return
|
||||
..()
|
||||
|
||||
afterattack(atom/A, mob/user as mob)
|
||||
if(istype(A,/obj/item))
|
||||
var/obj/item/weapon/implant/compressed/c = src.imp
|
||||
c.scanned = A
|
||||
A.loc.contents.Remove(A)
|
||||
src.update()
|
||||
@@ -1,255 +0,0 @@
|
||||
/*
|
||||
CONTAINS:
|
||||
SYNDICATE UPLINK
|
||||
*/
|
||||
|
||||
/obj/item/weapon/syndicate_uplink/implanted
|
||||
uses = 5
|
||||
|
||||
/obj/item/weapon/syndicate_uplink/proc/explode()
|
||||
var/turf/location = get_turf(src.loc)
|
||||
if(location)
|
||||
location.hotspot_expose(700,125)
|
||||
|
||||
explosion(location, 0, 0, 2, 4)
|
||||
|
||||
del(src.master)
|
||||
del(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/syndicate_uplink/attack_self(mob/user as mob)
|
||||
interact(user)
|
||||
|
||||
/obj/item/weapon/syndicate_uplink/proc/interact(mob/user as mob)
|
||||
currentUser = user
|
||||
user.machine = src
|
||||
var/dat
|
||||
if (src.selfdestruct)
|
||||
dat = "Self Destructing..."
|
||||
else
|
||||
if (src.temp)
|
||||
dat = "[src.temp]<BR><BR><A href='byond://?src=\ref[src];temp=1'>Clear</A>"
|
||||
else
|
||||
dat = "<B>Syndicate Uplink Access:</B><BR>"
|
||||
dat += "Tele-Crystals left: [src.uses]<BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<B>Request item:</B><BR>"
|
||||
dat += "<I>Each item costs a number of tele-crystals as indicated by the number following their name.</I><BR>"
|
||||
dat += "<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=revolver'>Revolver</A> (6)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=revolver_ammo'>Ammo-357</A> for use with Revolver (2)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=xbow'>Energy Crossbow</A> (5)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=sword'>Energy Sword</A> (4)<BR>"
|
||||
dat += "<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=jump'>Chameleon Jumpsuit</A> (3)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=shoes'>Syndicate Shoes</A> (2)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=card'>Syndicate Card</A> (3)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=voice'>Voice-Changer</A> (4)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=thermal'>Thermal Glasses</A> (4)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=eraser'>Stamp Remover</A> (1)<BR>"
|
||||
dat += "<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=imp_freedom'>Freedom Implant (with injector)</A> (3)<BR>"
|
||||
// dat += "<A href='byond://?src=\ref[src];buy_item=paralysispen'>Paralysis Pen</A> (3)<BR>" //Note that this goes to the updated sleepypen now.
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=sleepypen'>Sleepy Pen</A> (4)<BR>" //Terrible -Pete. //Reinstated -Skymarshal
|
||||
dat += "<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=imp_exp'>Explosive Implant (with injector)</A> (6)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=detomatix'>Detomatix Cartridge</A> (3)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=bomb'>Plastic Explosives</A> (2)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=powersink'>Power Sink</A> (5)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=space'>Syndicate-made Space Suit (inludes a helmet)</A> (3)<BR>"
|
||||
dat += "<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=projector'>Chameleon-projector</A> (4)<BR>"
|
||||
// dat += "<A href='byond://?src=\ref[src];buy_item=cloak'>Cloaking Device</A> (4)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=emag'>Electromagnet Card</A> (3)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=empbox'>5 EMP Grenades</A> (4)<BR>"
|
||||
dat += "<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=botchat'>Binary Translator</A> (3)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=lawmod'>Hacked AI Module</A> (7)<BR>"
|
||||
dat += "<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=toolbox'>Syndicate Toolbox</A> (Includes various tools) (1)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=soap'>Syndicate Soap</A> (1)<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];buy_item=balloon'>Syndicate Balloon</A> (Useless) (10)<BR>"
|
||||
dat += "<HR>"
|
||||
if (src.origradio)
|
||||
dat += "<A href='byond://?src=\ref[src];lock=1'>Lock</A><BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<A href='byond://?src=\ref[src];selfdestruct=1'>Self-Destruct</A>"
|
||||
user << browse(dat, "window=radio")
|
||||
onclose(user, "radio")
|
||||
return
|
||||
|
||||
/obj/item/weapon/syndicate_uplink/Topic(href, href_list)
|
||||
..()
|
||||
if(!currentUser)
|
||||
return
|
||||
if (currentUser.stat || currentUser.restrained())
|
||||
return
|
||||
if (!( istype(currentUser, /mob/living/carbon/human)))
|
||||
return
|
||||
if ((currentUser.contents.Find(src) || (in_range(src, currentUser) && istype(src.loc, /turf))) || istype(src,/obj/item/weapon/syndicate_uplink/implanted))
|
||||
currentUser.machine = src
|
||||
if (href_list["buy_item"])
|
||||
switch(href_list["buy_item"])
|
||||
if("revolver")
|
||||
if (src.uses >= 6)
|
||||
src.uses -= 6
|
||||
new /obj/item/weapon/gun/projectile(get_turf(src))
|
||||
if("revolver_ammo")
|
||||
if (src.uses >= 2)
|
||||
src.uses -= 2
|
||||
new /obj/item/ammo_magazine/a357(get_turf(src))
|
||||
if("xbow")
|
||||
if (src.uses >= 5)
|
||||
src.uses -= 5
|
||||
new /obj/item/weapon/gun/energy/crossbow(get_turf(src))
|
||||
if("empbox")
|
||||
if (src.uses >= 4)
|
||||
src.uses -= 4
|
||||
new /obj/item/weapon/storage/emp_kit(get_turf(src))
|
||||
if("voice")
|
||||
if (src.uses >= 4)
|
||||
src.uses -= 4
|
||||
new /obj/item/clothing/mask/gas/voice(get_turf(src))
|
||||
if("jump")
|
||||
if (src.uses >= 3)
|
||||
src.uses -= 3
|
||||
new /obj/item/clothing/under/chameleon(get_turf(src))
|
||||
if("shoes")
|
||||
if (uses >= 2)
|
||||
uses -= 2
|
||||
new /obj/item/clothing/shoes/syndigaloshes(get_turf(src))
|
||||
if("card")
|
||||
if (src.uses >= 3)
|
||||
src.uses -= 3
|
||||
new /obj/item/weapon/card/id/syndicate(get_turf(src))
|
||||
if("emag")
|
||||
if (src.uses >= 3)
|
||||
src.uses -= 3
|
||||
new /obj/item/weapon/card/emag(get_turf(src))
|
||||
if("imp_freedom")
|
||||
if (src.uses >= 3)
|
||||
src.uses -= 3
|
||||
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(get_turf(src))
|
||||
O.imp = new /obj/item/weapon/implant/freedom(O)
|
||||
if("imp_exp")
|
||||
if (src.uses >= 6)
|
||||
src.uses -= 6
|
||||
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(get_turf(src))
|
||||
O.imp = new /obj/item/weapon/implant/explosive(O)
|
||||
O.name = "(BIO-HAZARD) BIO-detpack"
|
||||
O.update()
|
||||
if("sleepypen")
|
||||
if (src.uses >= 4)
|
||||
src.uses -= 4
|
||||
new /obj/item/weapon/pen/sleepypen(get_turf(src))
|
||||
if("paralysispen")
|
||||
if (src.uses >= 3)
|
||||
src.uses -= 3
|
||||
new /obj/item/weapon/pen/paralysis(get_turf(src))
|
||||
if("projector")
|
||||
if (src.uses >= 4)
|
||||
src.uses -= 4
|
||||
new /obj/item/device/chameleon(get_turf(src))
|
||||
if("lawmod")
|
||||
if (src.uses >= 7)
|
||||
src.uses -= 7
|
||||
new /obj/item/weapon/aiModule/syndicate(get_turf(src))
|
||||
/* if("cloak")
|
||||
if (src.uses >= 4)
|
||||
if (ticker.mode.config_tag!="nuclear" || \
|
||||
(input(currentUser,"Spawning a cloak in nuke is generally regarded as entirely dumb, are you sure?") in list("Confirm", "Abort")) == "Confirm" \
|
||||
)
|
||||
if (src.uses >= 4)
|
||||
src.uses -= 4
|
||||
new /obj/item/weapon/cloaking_device(get_turf(src)) */
|
||||
if("sword")
|
||||
if (src.uses >= 4)
|
||||
src.uses -= 4
|
||||
new /obj/item/weapon/melee/energy/sword(get_turf(src))
|
||||
if("thermal")
|
||||
if (src.uses >= 4)
|
||||
src.uses -= 4
|
||||
new /obj/item/clothing/glasses/thermal(get_turf(src))
|
||||
if("bomb")
|
||||
if (src.uses >= 2)
|
||||
src.uses -= 2
|
||||
new /obj/item/weapon/plastique(get_turf(src))
|
||||
if("powersink")
|
||||
if (src.uses >= 5)
|
||||
src.uses -= 5
|
||||
new /obj/item/device/powersink(get_turf(src))
|
||||
if("detomatix")
|
||||
if (src.uses >= 3)
|
||||
src.uses -= 3
|
||||
new /obj/item/weapon/cartridge/syndicate(get_turf(src))
|
||||
if("space")
|
||||
if (src.uses >= 3)
|
||||
src.uses -= 3
|
||||
new /obj/item/clothing/suit/space/syndicate(get_turf(src))
|
||||
new /obj/item/clothing/head/helmet/space/syndicate(get_turf(src))
|
||||
if("botchat")
|
||||
if (src.uses >= 3)
|
||||
src.uses -= 3
|
||||
new /obj/item/device/radio/headset/traitor(get_turf(src))
|
||||
if("toolbox")
|
||||
if(uses)
|
||||
uses--
|
||||
new /obj/item/weapon/storage/toolbox/syndicate(get_turf(src))
|
||||
if("soap")
|
||||
if(uses)
|
||||
uses--
|
||||
new /obj/item/weapon/soap/syndie(get_turf(src))
|
||||
if("balloon")
|
||||
if (src.uses >= 10)
|
||||
uses -= 10
|
||||
new /obj/item/toy/syndicateballoon(get_turf(src))
|
||||
else if (href_list["lock"] && src.origradio)
|
||||
// presto chango, a regular radio again! (reset the freq too...)
|
||||
shutdown_uplink()
|
||||
return
|
||||
else if (href_list["selfdestruct"])
|
||||
src.temp = "<A href='byond://?src=\ref[src];selfdestruct2=1'>Self-Destruct</A>"
|
||||
else if (href_list["selfdestruct2"])
|
||||
src.selfdestruct = 1
|
||||
spawn (100)
|
||||
explode()
|
||||
return
|
||||
else
|
||||
if (href_list["temp"])
|
||||
src.temp = null
|
||||
if (istype(src.loc, /mob))
|
||||
interact(src.loc)
|
||||
else
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if (M.client)
|
||||
interact(M)
|
||||
return
|
||||
|
||||
/obj/item/weapon/syndicate_uplink/proc/shutdown_uplink()
|
||||
if (!src.origradio)
|
||||
return
|
||||
var/list/nearby = viewers(1, src)
|
||||
for(var/mob/M in nearby)
|
||||
if (M.client && M.machine == src)
|
||||
M << browse(null, "window=radio")
|
||||
M.machine = null
|
||||
|
||||
var/obj/item/device/radio/T = src.origradio
|
||||
var/obj/item/weapon/syndicate_uplink/R = src
|
||||
var/mob/L = src.loc
|
||||
R.loc = T
|
||||
T.loc = L
|
||||
// R.layer = initial(R.layer)
|
||||
R.layer = 0
|
||||
if (istype(L))
|
||||
if (L.client)
|
||||
L.client.screen -= R
|
||||
if (L.r_hand == R)
|
||||
L.u_equip(R)
|
||||
L.r_hand = T
|
||||
else
|
||||
L.u_equip(R)
|
||||
L.l_hand = T
|
||||
T.layer = 20
|
||||
T.set_frequency(initial(T.frequency))
|
||||
return
|
||||
@@ -354,6 +354,41 @@
|
||||
reset_view(C)
|
||||
return 1
|
||||
|
||||
/mob/living/silicon/ai/proc/triggerUnmarkedAlarm(var/class, area/A, var/O)
|
||||
if(stat == 2) // stat = 2 = dead AI
|
||||
return 1
|
||||
var/obj/machinery/camera/C = null
|
||||
var/list/CL = null
|
||||
var/alarmtext = ""
|
||||
if(class == "AirlockHacking") // In case more unmarked alerts would be added eventually;
|
||||
alarmtext = "--- Unauthorized remote access detected"
|
||||
if (O && istype(O, /list))
|
||||
CL = O
|
||||
if (CL.len == 1)
|
||||
C = CL[1]
|
||||
else if (O && istype(O, /obj/machinery/camera))
|
||||
C = O
|
||||
if (A)
|
||||
alarmtext += " in " + A.name
|
||||
if (O)
|
||||
if (C && C.status)
|
||||
alarmtext += text("! (<A HREF=?src=\ref[];switchcamera=\ref[]>[]</A>)", src, C, C.c_tag)
|
||||
else if (CL && CL.len)
|
||||
var/foo = 0
|
||||
var/dat2 = ""
|
||||
for (var/obj/machinery/camera/I in CL)
|
||||
dat2 += text("[]<A HREF=?src=\ref[];switchcamera=\ref[]>[]</A>", (!foo) ? "" : " | ", src, I, I.c_tag)
|
||||
foo = 1
|
||||
alarmtext += text("! ([])", dat2)
|
||||
else
|
||||
alarmtext += "! (No Camera)"
|
||||
else
|
||||
alarmtext += "! (No Camera)"
|
||||
else
|
||||
alarmtext += "!"
|
||||
src << alarmtext
|
||||
return 1
|
||||
|
||||
/mob/living/silicon/ai/triggerAlarm(var/class, area/A, var/O, var/alarmsource)
|
||||
if (stat == 2)
|
||||
return 1
|
||||
|
||||
@@ -293,6 +293,17 @@
|
||||
return
|
||||
return
|
||||
|
||||
/mob/living/silicon/robot/proc/triggerUnmarkedAlarm(var/class, area/A)
|
||||
if(stat == 2) // stat = 2 = dead Cyborg
|
||||
return 1
|
||||
var/alarmtext = ""
|
||||
if(class == "AirlockHacking") // In case more unmarked alerts would be added eventually;
|
||||
alarmtext = "--- Unauthorized remote access detected"
|
||||
if (A)
|
||||
alarmtext += " in " + A.name
|
||||
alarmtext += "!"
|
||||
src << alarmtext
|
||||
return 1
|
||||
|
||||
/mob/living/silicon/robot/triggerAlarm(var/class, area/A, var/O, var/alarmsource)
|
||||
if (stat == 2)
|
||||
|
||||
Reference in New Issue
Block a user