Merge pull request #319 from SkyMarshal/master
Wardrobe stuff, burning paper, filing cabinets, copiers, bugfixes for telecomms and nerfed electrical storms.
@@ -34,6 +34,7 @@
|
||||
#define FILE_DIR "code/game/events/EventProcs"
|
||||
#define FILE_DIR "code/game/events/Events"
|
||||
#define FILE_DIR "code/game/gamemodes"
|
||||
#define FILE_DIR "code/game/gamemodes/autotraitor"
|
||||
#define FILE_DIR "code/game/gamemodes/blob"
|
||||
#define FILE_DIR "code/game/gamemodes/changeling"
|
||||
#define FILE_DIR "code/game/gamemodes/cult"
|
||||
@@ -145,6 +146,11 @@
|
||||
#define FILE_DIR "code/WorkInProgress/mapload"
|
||||
#define FILE_DIR "code/WorkInProgress/Mini"
|
||||
#define FILE_DIR "code/WorkInProgress/organs"
|
||||
#define FILE_DIR "code/WorkInProgress/Ported"
|
||||
#define FILE_DIR "code/WorkInProgress/Ported/Abi79"
|
||||
#define FILE_DIR "code/WorkInProgress/Ported/Bureaucracy"
|
||||
#define FILE_DIR "code/WorkInProgress/Ported/Spawners"
|
||||
#define FILE_DIR "code/WorkInProgress/Ported/ZeroPoint"
|
||||
#define FILE_DIR "code/WorkInProgress/SkyMarshal"
|
||||
#define FILE_DIR "code/WorkInProgress/Tastyfish"
|
||||
#define FILE_DIR "code/WorkInProgress/virus2"
|
||||
@@ -362,7 +368,6 @@
|
||||
#include "code\game\syndicate_shuttle.dm"
|
||||
#include "code\game\syndicate_specops_shuttle.dm"
|
||||
#include "code\game\throwing.dm"
|
||||
#include "code\game\topic.dm"
|
||||
#include "code\game\turf.dm"
|
||||
#include "code\game\vials.dm"
|
||||
#include "code\game\vote.dm"
|
||||
@@ -401,6 +406,7 @@
|
||||
#include "code\game\gamemodes\intercept_report.dm"
|
||||
#include "code\game\gamemodes\objective.dm"
|
||||
#include "code\game\gamemodes\setupgame.dm"
|
||||
#include "code\game\gamemodes\autotraitor\autotraitor.dm"
|
||||
#include "code\game\gamemodes\blob\blob.dm"
|
||||
#include "code\game\gamemodes\blob\theblob.dm"
|
||||
#include "code\game\gamemodes\changeling\changeling.dm"
|
||||
@@ -417,6 +423,7 @@
|
||||
#include "code\game\gamemodes\nuclear\nuclearbomb.dm"
|
||||
#include "code\game\gamemodes\nuclear\pinpointer.dm"
|
||||
#include "code\game\gamemodes\revolution\revolution.dm"
|
||||
#include "code\game\gamemodes\revolution\rp-revolution.dm"
|
||||
#include "code\game\gamemodes\sandbox\h_sandbox.dm"
|
||||
#include "code\game\gamemodes\sandbox\sandbox.dm"
|
||||
#include "code\game\gamemodes\traitor\traitor.dm"
|
||||
@@ -634,7 +641,6 @@
|
||||
#include "code\game\objects\devices\PDA\cart.dm"
|
||||
#include "code\game\objects\devices\PDA\PDA.dm"
|
||||
#include "code\game\objects\devices\PDA\radio.dm"
|
||||
#include "code\game\objects\devices\PDA\uplink.dm"
|
||||
#include "code\game\objects\items\apc_frame.dm"
|
||||
#include "code\game\objects\items\blueprints.dm"
|
||||
#include "code\game\objects\items\candle.dm"
|
||||
@@ -680,7 +686,6 @@
|
||||
#include "code\game\objects\items\weapons\toilets.dm"
|
||||
#include "code\game\objects\items\weapons\tools.dm"
|
||||
#include "code\game\objects\items\weapons\twohanded.dm"
|
||||
#include "code\game\objects\items\weapons\uplinks.dm"
|
||||
#include "code\game\objects\items\weapons\implants\implant.dm"
|
||||
#include "code\game\objects\items\weapons\implants\implantcase.dm"
|
||||
#include "code\game\objects\items\weapons\implants\implantchair.dm"
|
||||
@@ -1009,17 +1014,24 @@
|
||||
#include "code\modules\security levels\security levels.dm"
|
||||
#include "code\WorkInProgress\AI_Visibility.dm"
|
||||
#include "code\WorkInProgress\buildmode.dm"
|
||||
#include "code\WorkInProgress\copier.dm"
|
||||
#include "code\WorkInProgress\detective_work.dm"
|
||||
#include "code\WorkInProgress\explosion_particles.dm"
|
||||
#include "code\WorkInProgress\filing.dm"
|
||||
#include "code\WorkInProgress\mapload\dmm_suite.dm"
|
||||
#include "code\WorkInProgress\mapload\reader.dm"
|
||||
#include "code\WorkInProgress\Mini\atmos_control.dm"
|
||||
#include "code\WorkInProgress\Mini\customitems.dm"
|
||||
#include "code\WorkInProgress\Ported\head.dm"
|
||||
#include "code\WorkInProgress\Ported\policetape.dm"
|
||||
#include "code\WorkInProgress\Ported\Abi79\uplink_kits.dm"
|
||||
#include "code\WorkInProgress\Ported\Abi79\uplinks.dm"
|
||||
#include "code\WorkInProgress\Ported\Bureaucracy\copier.dm"
|
||||
#include "code\WorkInProgress\Ported\Bureaucracy\filing.dm"
|
||||
#include "code\WorkInProgress\Ported\ZeroPoint\Laser2.dm"
|
||||
#include "code\WorkInProgress\Ported\ZeroPoint\LaserComputer.dm"
|
||||
#include "code\WorkInProgress\Ported\ZeroPoint\SuperMatter.dm"
|
||||
#include "code\WorkInProgress\SkyMarshal\coatrack.dm"
|
||||
#include "code\WorkInProgress\SkyMarshal\policetape.dm"
|
||||
#include "code\WorkInProgress\SkyMarshal\traitoritems.dm"
|
||||
#include "code\WorkInProgress\SkyMarshal\wardrobes.dm"
|
||||
#include "code\WorkInProgress\Tastyfish\Eliza.dm"
|
||||
#include "code\WorkInProgress\Tastyfish\Eliza_Data.dm"
|
||||
#include "code\WorkInProgress\Tastyfish\livestock.dm"
|
||||
|
||||
@@ -309,6 +309,7 @@ var/datum/cameranet/cameranet = new()
|
||||
return
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/machinery/door/update_nearby_tiles(need_rebuild)
|
||||
. = ..(need_rebuild)
|
||||
cameranet.updateVisibility(loc)
|
||||
|
||||
@@ -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 = 'radio.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/device/uplink/radio/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,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,572 @@
|
||||
/obj/item/wardrobe
|
||||
name = "wardrobe"
|
||||
desc = "Seems to have everything I need for my job in it, sweet."
|
||||
icon = 'suits.dmi'
|
||||
icon_state = "wardrobe"
|
||||
item_state = "wardrobe"
|
||||
w_class = 4
|
||||
var
|
||||
descriptor = "various clothing."
|
||||
|
||||
attack_self(mob/user)
|
||||
if(!contents.len)
|
||||
user << "It's empty!"
|
||||
else
|
||||
user.visible_message("\blue [user] unwraps the clothing from the [src]")
|
||||
for(var/obj/item/I in src)
|
||||
I.loc = get_turf(src)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
attackby(var/obj/item/I as obj, var/mob/user as mob)
|
||||
if(istype(I, /obj/item/wardrobe))
|
||||
return
|
||||
if(contents.len < 20)
|
||||
if(istype(I, /obj/item/weapon/grab))
|
||||
return
|
||||
user.drop_item()
|
||||
if(I)
|
||||
I.loc = src.loc
|
||||
else
|
||||
user << "\red There's not enough space to fit that!"
|
||||
return
|
||||
|
||||
examine()
|
||||
set src in usr
|
||||
..()
|
||||
usr << "It claims to contain [contents.len ? descriptor : descriptor + "...but it looks empty"]"
|
||||
return
|
||||
|
||||
update_icon()
|
||||
if(contents.len)
|
||||
icon_state = "wardrobe"
|
||||
else
|
||||
icon_state = "wardrobe_empty"
|
||||
return
|
||||
|
||||
New()
|
||||
..()
|
||||
pixel_x = rand(0,4) -2
|
||||
pixel_y = rand(0,4) -2
|
||||
|
||||
/obj/item/wardrobe/assistant
|
||||
name = "assistant wardrobe"
|
||||
descriptor = "clothing for an assistant"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/BPK = new /obj/item/weapon/storage/backpack(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/pda(src)
|
||||
new /obj/item/device/radio/headset(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/under/color/grey(src)
|
||||
|
||||
/obj/item/wardrobe/chief_engineer
|
||||
name = "Chief Engineer wardrobe"
|
||||
descriptor = "clothing for a Chief Engineer"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/industrial/BPK = new /obj/item/weapon/storage/backpack/industrial(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/pda/heads/ce(src)
|
||||
new /obj/item/device/multitool(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/clothing/head/helmet/hardhat/white(src)
|
||||
new /obj/item/clothing/head/helmet/welding(src)
|
||||
new /obj/item/weapon/storage/belt/utility/full(src)
|
||||
new /obj/item/weapon/storage/toolbox/mechanical(src)
|
||||
new /obj/item/clothing/suit/hazardvest(src)
|
||||
new /obj/item/clothing/gloves/yellow(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
new /obj/item/device/radio/headset/heads/ce(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/under/rank/chief_engineer(src)
|
||||
|
||||
/obj/item/wardrobe/engineer
|
||||
name = "Station Engineer wardrobe"
|
||||
descriptor = "clothing for a Station Engineer"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/industrial/BPK = new /obj/item/weapon/storage/backpack/industrial(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/pda/engineering(src)
|
||||
new /obj/item/device/t_scanner(src)
|
||||
new /obj/item/clothing/suit/hazardvest(src)
|
||||
new /obj/item/weapon/storage/belt/utility/full(src)
|
||||
new /obj/item/weapon/storage/toolbox/mechanical(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/clothing/head/helmet/hardhat(src)
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
new /obj/item/device/radio/headset/headset_eng(src)
|
||||
new /obj/item/clothing/shoes/orange(src)
|
||||
new /obj/item/clothing/under/rank/engineer(src)
|
||||
|
||||
/obj/item/wardrobe/atmos
|
||||
name = "Atmospheric Technician wardrobe"
|
||||
descriptor = "clothing for an Atmospheric Technician"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/BPK = new /obj/item/weapon/storage/backpack(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/pda/engineering(src)
|
||||
new /obj/item/weapon/storage/toolbox/mechanical(src)
|
||||
new /obj/item/device/radio/headset/headset_eng(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/under/rank/atmospheric_technician(src)
|
||||
|
||||
/obj/item/wardrobe/roboticist
|
||||
name = "Roboticist wardrobe"
|
||||
descriptor = "clothing for a Roboticist"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/BPK = new /obj/item/weapon/storage/backpack(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/pda/engineering(src)
|
||||
new /obj/item/weapon/storage/toolbox/mechanical(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/device/radio/headset/headset_eng(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/under/rank/roboticist(src)
|
||||
|
||||
/obj/item/wardrobe/chaplain
|
||||
name = "Chaplain wardrobe"
|
||||
descriptor = "clothing for a Chaplain"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/BPK = new /obj/item/weapon/storage/backpack(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/weapon/storage/bible/booze(src)
|
||||
new /obj/item/device/pda/chaplain(src)
|
||||
new /obj/item/device/radio/headset(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/under/rank/chaplain(src)
|
||||
|
||||
/obj/item/wardrobe/captain
|
||||
name = "Captain wardrobe"
|
||||
descriptor = "clothing for a Captain"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/BPK = new /obj/item/weapon/storage/backpack(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/pda/captain(src)
|
||||
new /obj/item/weapon/storage/id_kit(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/flask(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/clothing/glasses/sunglasses(src)
|
||||
new /obj/item/clothing/suit/storage/captunic(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/clothing/head/caphat(src)
|
||||
new /obj/item/clothing/gloves/captain(src)
|
||||
new /obj/item/clothing/head/helmet/swat(src)
|
||||
new /obj/item/device/radio/headset/heads/captain(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/under/rank/captain(src)
|
||||
|
||||
/obj/item/wardrobe/hop
|
||||
name = "Head of Personnel wardrobe"
|
||||
descriptor = "clothing for a Head of Personnel"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/BPK = new /obj/item/weapon/storage/backpack(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/pda/heads/hop(src)
|
||||
new /obj/item/weapon/storage/id_kit(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/clothing/head/helmet(src)
|
||||
new /obj/item/clothing/glasses/sunglasses(src)
|
||||
new /obj/item/clothing/gloves/blue(src)
|
||||
new /obj/item/device/radio/headset/heads/hop(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/under/rank/head_of_personnel(src)
|
||||
|
||||
/obj/item/wardrobe/cmo
|
||||
name = "Chief Medical Officer wardrobe"
|
||||
descriptor = "clothing for a Chief Medical Officer"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/medic/BPK = new /obj/item/weapon/storage/backpack/medic(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/pda/heads/cmo(src)
|
||||
new /obj/item/weapon/storage/firstaid/regular(src)
|
||||
new /obj/item/device/flashlight/pen(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/clothing/suit/bio_suit/cmo(src)
|
||||
new /obj/item/clothing/head/bio_hood/general(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat/cmo(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/device/radio/headset/heads/cmo(src)
|
||||
new /obj/item/clothing/under/rank/chief_medical_officer(src)
|
||||
|
||||
/obj/item/wardrobe/doctor
|
||||
name = "Medical Doctor wardrobe"
|
||||
descriptor = "clothing for a Medical Doctor"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/medic/BPK = new /obj/item/weapon/storage/backpack/medic(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/pda/medical(src)
|
||||
new /obj/item/weapon/storage/firstaid/regular(src)
|
||||
new /obj/item/device/flashlight/pen(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/head/nursehat (src)
|
||||
new /obj/item/weapon/storage/belt/medical(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/device/radio/headset/headset_med(src)
|
||||
new /obj/item/clothing/under/rank/nursesuit (src)
|
||||
new /obj/item/clothing/under/rank/medical(src)
|
||||
|
||||
/obj/item/wardrobe/geneticist
|
||||
name = "Geneticist wardrobe"
|
||||
descriptor = "clothing for a Geneticist"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/medic/BPK = new /obj/item/weapon/storage/backpack/medic(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/pda/medical(src)
|
||||
new /obj/item/device/flashlight/pen(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat/genetics(src)
|
||||
new /obj/item/device/radio/headset/headset_medsci(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/under/rank/geneticist(src)
|
||||
|
||||
/obj/item/wardrobe/virologist
|
||||
name = "Virologist wardrobe"
|
||||
descriptor = "clothing for a Virologist"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/medic/BPK = new /obj/item/weapon/storage/backpack/medic(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/flashlight/pen(src)
|
||||
new /obj/item/device/pda/medical(src)
|
||||
new /obj/item/clothing/mask/surgical(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat/virologist(src)
|
||||
new /obj/item/device/radio/headset/headset_med(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/under/rank/medical(src)
|
||||
|
||||
/obj/item/wardrobe/rd
|
||||
name = "Research Director wardrobe"
|
||||
descriptor = "clothing for a Research Director"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/BPK = new /obj/item/weapon/storage/backpack(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/device/pda/heads/rd(src)
|
||||
new /obj/item/weapon/clipboard(src)
|
||||
new /obj/item/weapon/tank/air(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/clothing/suit/bio_suit/scientist(src)
|
||||
new /obj/item/clothing/head/bio_hood/scientist(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/device/radio/headset/heads/rd(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/under/rank/research_director(src)
|
||||
|
||||
/obj/item/wardrobe/scientist
|
||||
name = "Scientist wardrobe"
|
||||
descriptor = "clothing for a Scientist"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/BPK = new /obj/item/weapon/storage/backpack(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/pda/toxins(src)
|
||||
new /obj/item/weapon/tank/oxygen(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat/science(src)
|
||||
new /obj/item/device/radio/headset/headset_sci(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/under/rank/scientist(src)
|
||||
|
||||
/obj/item/wardrobe/chemist
|
||||
name = "Chemist wardrobe"
|
||||
descriptor = "clothing for a Chemist"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/medic/BPK = new /obj/item/weapon/storage/backpack/medic(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/radio/headset/headset_medsci(src)
|
||||
new /obj/item/clothing/under/rank/chemist(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/device/pda/toxins(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat/chemist(src)
|
||||
|
||||
/obj/item/wardrobe/hos
|
||||
name = "Head of Security wardrobe"
|
||||
descriptor = "clothing for a Head of Security"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/security/BPK = new /obj/item/weapon/storage/backpack/security(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/pda/heads/hos(src)
|
||||
new /obj/item/clothing/suit/storage/armourrigvest(src)
|
||||
new /obj/item/clothing/suit/armor/hos(src)
|
||||
new /obj/item/clothing/head/helmet/HoS(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/clothing/gloves/hos(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
new /obj/item/device/radio/headset/heads/hos(src)
|
||||
new /obj/item/clothing/shoes/jackboots(src)
|
||||
new /obj/item/clothing/under/rank/head_of_security(src)
|
||||
|
||||
/obj/item/wardrobe/warden
|
||||
name = "Warden wardrobe"
|
||||
descriptor = "clothing for a Warden"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/security/BPK = new /obj/item/weapon/storage/backpack/security(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
new /obj/item/weapon/gun/energy/taser(src)
|
||||
new /obj/item/device/pda/security(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/clothing/suit/storage/gearharness(src)
|
||||
new /obj/item/clothing/head/helmet/warden(src)
|
||||
new /obj/item/clothing/gloves/red(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/clothing/shoes/jackboots(src)
|
||||
new /obj/item/clothing/under/rank/warden(src)
|
||||
|
||||
/obj/item/wardrobe/detective
|
||||
name = "Detective wardrobe"
|
||||
descriptor = "clothing for a Detective"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/security/BPK = new /obj/item/weapon/storage/backpack/security(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/fcardholder(src)
|
||||
new /obj/item/weapon/clipboard(src)
|
||||
new /obj/item/device/detective_scanner(src)
|
||||
new /obj/item/policetaperoll(src)
|
||||
new /obj/item/weapon/storage/box/evidence(src)
|
||||
new /obj/item/device/pda/detective(src)
|
||||
new /obj/item/clothing/suit/det_suit/armor(src)
|
||||
new /obj/item/clothing/suit/storage/det_suit(src)
|
||||
new /obj/item/clothing/gloves/detective(src)
|
||||
new /obj/item/clothing/head/det_hat(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/under/det(src)
|
||||
|
||||
/obj/item/wardrobe/officer
|
||||
name = "Security Officer wardrobe"
|
||||
descriptor = "clothing for a Security Officer"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/security/BPK = new /obj/item/weapon/storage/backpack/security(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/weapon/pepperspray(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
new /obj/item/policetaperoll(src)
|
||||
new /obj/item/weapon/flashbang(src)
|
||||
new /obj/item/device/pda/security(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/clothing/suit/storage/gearharness(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/clothing/head/helmet(src)
|
||||
new /obj/item/clothing/head/secsoft(src)
|
||||
new /obj/item/clothing/gloves/red(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/clothing/shoes/jackboots(src)
|
||||
new /obj/item/clothing/under/rank/security(src)
|
||||
|
||||
|
||||
|
||||
/obj/item/wardrobe/bartender
|
||||
name = "Bartender wardrobe"
|
||||
descriptor = "clothing for a Bartender"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/BPK = new /obj/item/weapon/storage/backpack(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(BPK)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(BPK)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(BPK)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/radio/headset(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/under/rank/bartender(src)
|
||||
|
||||
/obj/item/wardrobe/chef
|
||||
name = "Chef wardrobe"
|
||||
descriptor = "clothing for a Chef"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/BPK = new /obj/item/weapon/storage/backpack(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/clothing/suit/storage/chef(src)
|
||||
new /obj/item/clothing/head/chefhat(src)
|
||||
new /obj/item/device/radio/headset(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/under/rank/chef(src)
|
||||
|
||||
/obj/item/wardrobe/hydro
|
||||
name = "Botanist wardrobe"
|
||||
descriptor = "clothing for a Botanist"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/BPK = new /obj/item/weapon/storage/backpack(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/analyzer/plant_analyzer(src)
|
||||
new /obj/item/clothing/suit/storage/apron(src)
|
||||
new /obj/item/clothing/gloves/botanic_leather(src)
|
||||
new /obj/item/device/radio/headset(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/under/rank/hydroponics(src)
|
||||
|
||||
/obj/item/wardrobe/qm
|
||||
name = "Quartermaster wardrobe"
|
||||
descriptor = "clothing for a Quartermaster"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/BPK = new /obj/item/weapon/storage/backpack(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/weapon/clipboard(src)
|
||||
new /obj/item/device/pda/quartermaster(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/glasses/sunglasses(src)
|
||||
new /obj/item/device/radio/headset/heads/qm(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/under/rank/cargo(src)
|
||||
|
||||
/obj/item/wardrobe/cargo_tech
|
||||
name = "Cargo Technician wardrobe"
|
||||
descriptor = "clothing for a Cargo Technician"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/BPK = new /obj/item/weapon/storage/backpack(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/pda/quartermaster(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/device/radio/headset/headset_cargo(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/under/rank/cargo(src)
|
||||
|
||||
/obj/item/wardrobe/mining
|
||||
name = "Shaft Miner wardrobe"
|
||||
descriptor = "clothing for a Shaft Miner"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/industrial/BPK = new /obj/item/weapon/storage/backpack/industrial(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/analyzer(src)
|
||||
new /obj/item/weapon/satchel(src)
|
||||
new /obj/item/device/flashlight/lantern(src)
|
||||
new /obj/item/weapon/shovel(src)
|
||||
new /obj/item/weapon/pickaxe(src)
|
||||
new /obj/item/weapon/crowbar(src)
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/device/radio/headset/headset_mine(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/under/rank/miner(src)
|
||||
|
||||
/obj/item/wardrobe/janitor
|
||||
name = "Janitor wardrobe"
|
||||
descriptor = "clothing for a Janitor"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/BPK = new /obj/item/weapon/storage/backpack(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/pda/janitor(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/under/rank/janitor(src)
|
||||
|
||||
/obj/item/wardrobe/librarian
|
||||
name = "Librarian wardrobe"
|
||||
descriptor = "clothing for a Librarian"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/BPK = new /obj/item/weapon/storage/backpack(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/weapon/barcodescanner(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/under/suit_jacket/red(src)
|
||||
|
||||
/obj/item/wardrobe/lawyer
|
||||
name = "Lawyer wardrobe"
|
||||
descriptor = "clothing for a Lawyer"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/backpack/BPK = new /obj/item/weapon/storage/backpack(src)
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/pda/lawyer(src)
|
||||
new /obj/item/device/detective_scanner(src)
|
||||
new /obj/item/weapon/storage/briefcase(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
if(prob(50))
|
||||
new /obj/item/clothing/under/lawyer/bluesuit(src)
|
||||
new /obj/item/clothing/suit/lawyer/bluejacket(src)
|
||||
else
|
||||
new /obj/item/clothing/under/lawyer/purpsuit(src)
|
||||
new /obj/item/clothing/suit/lawyer/purpjacket(src)
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ datum/mind
|
||||
var/list/datum/objective/special_verbs = list()
|
||||
|
||||
var/has_been_rev = 0//Tracks if this mind has been a rev or not
|
||||
var/rev_cooldown = 0
|
||||
|
||||
proc/transfer_to(mob/new_character)
|
||||
if(current)
|
||||
@@ -245,8 +246,8 @@ datum/mind
|
||||
istype(current,/mob/living/carbon/human) )
|
||||
|
||||
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/radio/suplink = find_syndicate_uplink()
|
||||
var/obj/item/device/uplink/iuplink = find_integrated_uplink()
|
||||
var/crystals
|
||||
if (suplink)
|
||||
crystals = suplink.uses
|
||||
@@ -798,8 +799,8 @@ datum/mind
|
||||
memory = null//Remove any memory they may have had.
|
||||
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/radio/suplink = find_syndicate_uplink()
|
||||
var/obj/item/device/uplink/iuplink = find_integrated_uplink()
|
||||
var/crystals
|
||||
if (suplink)
|
||||
crystals = suplink.uses
|
||||
@@ -837,7 +838,7 @@ datum/mind
|
||||
if (t:traitorradio) del(t:traitorradio)
|
||||
t:traitorradio = null
|
||||
t:traitor_frequency = 0.0
|
||||
else if (istype(t, /obj/item/weapon/SWF_uplink) || istype(t, /obj/item/weapon/syndicate_uplink))
|
||||
else if (istype(t, /obj/item/weapon/SWF_uplink) || istype(t, /obj/item/device/uplink/radio))
|
||||
if (t:origradio)
|
||||
var/obj/item/device/radio/R = t:origradio
|
||||
R.loc = current.loc
|
||||
@@ -856,7 +857,7 @@ datum/mind
|
||||
*/
|
||||
|
||||
proc/find_syndicate_uplink()
|
||||
var/obj/item/weapon/syndicate_uplink/uplink = null
|
||||
var/obj/item/device/uplink/radio/uplink = null
|
||||
var/list/L = current.get_contents()
|
||||
for (var/obj/item/device/radio/radio in L)
|
||||
uplink = radio.traitorradio
|
||||
@@ -867,7 +868,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 +878,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)
|
||||
|
||||
@@ -19,6 +19,7 @@ datum/shuttle_controller
|
||||
//timeleft = 360 //600
|
||||
fake_recall = 0 //Used in rounds to prevent "ON NOES, IT MUST [INSERT ROUND] BECAUSE SHUTTLE CAN'T BE CALLED"
|
||||
deny_shuttle = 0 //for admins not allowing it to be called.
|
||||
departed = 0
|
||||
|
||||
// call the shuttle
|
||||
// if not called before, set the endtime to T+600 seconds
|
||||
@@ -137,6 +138,7 @@ datum/shuttle_controller
|
||||
return 0
|
||||
|
||||
else
|
||||
departed = 1
|
||||
location = 2
|
||||
var/area/start_location = locate(/area/shuttle/escape/station)
|
||||
var/area/end_location = locate(/area/shuttle/escape/centcom)
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
|
||||
for(var/obj/machinery/power/tracker/T in machines)
|
||||
T.set_angle(angle)
|
||||
T.set_angle()
|
||||
|
||||
for(var/obj/machinery/power/solar/S in machines)
|
||||
if(S.control)
|
||||
|
||||
@@ -245,6 +245,7 @@ the mob is also allowed to move without any sort of restriction. For instance, i
|
||||
var/UI = 'screen1_old.dmi' // For changing the UI from preferences
|
||||
|
||||
// var/obj/effect/organstructure/organStructure = null //for dem organs
|
||||
var/list/organs = list( ) //List of organs.
|
||||
|
||||
|
||||
/mob/proc/contract_disease(var/datum/disease/virus, var/skip_this = 0, var/force_species_check=1)
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -557,6 +557,12 @@
|
||||
icon_state = "white"
|
||||
icon_closed = "white"
|
||||
|
||||
/obj/structure/closet/wardrobe/medic_white
|
||||
name = "Doctor's Wardrobe"
|
||||
desc = "Contains medical jumpsuits."
|
||||
icon_state = "white"
|
||||
icon_closed = "white"
|
||||
|
||||
/obj/structure/closet/wardrobe/yellow
|
||||
name = "Yellow Wardrobe"
|
||||
desc = "Contains yellow jumpsuits."
|
||||
@@ -569,6 +575,12 @@
|
||||
icon_state = "yellow"
|
||||
icon_closed = "yellow"
|
||||
|
||||
/obj/structure/closet/wardrobe/robotics_yellow
|
||||
name = "Robotics Wardrobe"
|
||||
desc = "Contains robotics jumpsuits."
|
||||
icon_state = "yellow"
|
||||
icon_closed = "yellow"
|
||||
|
||||
/obj/structure/closet/wardrobe/atmospherics_yellow
|
||||
name = "Atmospherics Wardrobe"
|
||||
desc = "Contains atmospheric jumpsuits."
|
||||
@@ -581,6 +593,48 @@
|
||||
icon_state = "grey"
|
||||
icon_closed = "grey"
|
||||
|
||||
/obj/structure/closet/wardrobe/bartender_black
|
||||
name = "Bartender Wardrobe"
|
||||
desc = "Closet of basic bartending clothes."
|
||||
icon_state = "black"
|
||||
icon_closed = "black"
|
||||
|
||||
/obj/structure/closet/wardrobe/chef_white
|
||||
name = "Chef's Wardrobe"
|
||||
desc = "Contains chef jumpsuits."
|
||||
icon_state = "white"
|
||||
icon_closed = "white"
|
||||
|
||||
/obj/structure/closet/wardrobe/hydro_green
|
||||
name = "Hydroponics Wardrobe"
|
||||
desc = "Contains botanist jumpsuits."
|
||||
icon_state = "green"
|
||||
icon_closed = "green"
|
||||
|
||||
/obj/structure/closet/wardrobe/librarian_red
|
||||
name = "Librarian Wardrobe"
|
||||
desc = "Contains librarian jumpsuits."
|
||||
icon_state = "red"
|
||||
icon_closed = "red"
|
||||
|
||||
/obj/structure/closet/wardrobe/cargo_yellow
|
||||
name = "Cargo Tech Wardrobe"
|
||||
desc = "Contains cargo tech jumpsuits."
|
||||
icon_state = "yellow"
|
||||
icon_closed = "yellow"
|
||||
|
||||
/obj/structure/closet/wardrobe/qm_yellow
|
||||
name = "Quartermaster Wardrobe"
|
||||
desc = "Contains quartermaster jumpsuits."
|
||||
icon_state = "yellow"
|
||||
icon_closed = "yellow"
|
||||
|
||||
/obj/structure/closet/wardrobe/virology_white
|
||||
name = "Virology Wardrobe"
|
||||
desc = "Contains virologist jumpsuits."
|
||||
icon_state = "white"
|
||||
icon_closed = "white"
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -846,6 +846,7 @@
|
||||
var/gas_transfer_coefficient = 1
|
||||
var/permeability_coefficient = 0.99
|
||||
var/siemens_coefficient = 0.80
|
||||
var/iteration
|
||||
|
||||
/obj/item/weapon/directions
|
||||
name = "Crumpled Paper"
|
||||
@@ -989,25 +990,6 @@
|
||||
item_state = "shard-glass"
|
||||
g_amt = 3750
|
||||
|
||||
/obj/item/weapon/syndicate_uplink
|
||||
name = "station bounced radio"
|
||||
desc = "Remain silent about this..."
|
||||
icon = 'radio.dmi'
|
||||
icon_state = "radio"
|
||||
var/temp = null
|
||||
var/uses = 10.0
|
||||
var/selfdestruct = 0.0
|
||||
var/traitor_frequency = 0.0
|
||||
var/mob/currentUser = null
|
||||
var/obj/item/device/radio/origradio = null
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
|
||||
w_class = 2.0
|
||||
item_state = "radio"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
m_amt = 100
|
||||
origin_tech = "magnets=2;syndicate=3"
|
||||
|
||||
/obj/item/weapon/SWF_uplink
|
||||
name = "station bounced radio"
|
||||
desc = "used to comunicate it appears."
|
||||
|
||||
@@ -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
|
||||
@@ -97,6 +97,10 @@ On the map:
|
||||
1455 for AI access
|
||||
*/
|
||||
|
||||
/proc/radioalert(var/message,var/from)
|
||||
var/obj/item/device/radio/intercom/a = new /obj/item/device/radio/intercom(null)
|
||||
a.autosay(message,from)
|
||||
|
||||
var/list/radiochannels = list(
|
||||
"Common" = 1459,
|
||||
"Science" = 1351,
|
||||
|
||||
@@ -5,11 +5,10 @@
|
||||
list/obj/machinery/light/Doors = list( )
|
||||
|
||||
Announce()
|
||||
Lifetime = rand(90, 300)
|
||||
command_alert("The station is flying through an electrical storm. Radio communications may be disrupted", "Anomaly Alert")
|
||||
|
||||
for(var/obj/machinery/light/Light in world)
|
||||
if(Light.z == 1)
|
||||
if(Light.z == 1 && Light.status != 0)
|
||||
Lights += Light
|
||||
|
||||
for(var/obj/machinery/power/apc/APC in world)
|
||||
@@ -48,6 +47,7 @@
|
||||
//sleep(2)
|
||||
Light.on = 1
|
||||
Light.broken()
|
||||
Lights -= Light
|
||||
|
||||
DisruptAPC()
|
||||
var/failed_attempts = 0
|
||||
@@ -62,6 +62,7 @@
|
||||
APC.operating = 0 //Blow its breaker
|
||||
if (prob(8))
|
||||
APC.set_broken()
|
||||
APCs -= APC
|
||||
|
||||
DisableDoor()
|
||||
var/obj/machinery/door/airlock/Airlock
|
||||
@@ -74,3 +75,4 @@
|
||||
Wire = rand(1, 9)
|
||||
Airlock.pulse(airlockIndexToWireColor[Wire])
|
||||
Airlock.update_icon()
|
||||
Doors -= Airlock
|
||||
|
||||
@@ -0,0 +1,211 @@
|
||||
//This is a beta game mode to test ways to implement an "infinite" traitor round in which more traitors are automatically added in as needed.
|
||||
//Automatic traitor adding is complete pending the inevitable bug fixes. Need to add a respawn system to let dead people respawn after 30 minutes or so.
|
||||
|
||||
|
||||
/datum/game_mode/traitor/autotraitor
|
||||
name = "AutoTraitor"
|
||||
config_tag = "Extend-A-Traitormongous"
|
||||
|
||||
var/list/possible_traitors
|
||||
|
||||
/datum/game_mode/traitor/autotraitor/announce()
|
||||
..()
|
||||
world << "<B>This is a test bed for theories and methods to implement an infinite traitor round. Traitors will be added to the round automagically as needed.<br>Expect bugs.</B>"
|
||||
|
||||
/datum/game_mode/traitor/autotraitor/pre_setup()
|
||||
possible_traitors = get_players_for_role(BE_TRAITOR)
|
||||
|
||||
for(var/mob/new_player/P in world)
|
||||
if(P.client && P.ready)
|
||||
num_players++
|
||||
|
||||
//var/r = rand(5)
|
||||
var/num_traitors = 1
|
||||
var/max_traitors = 1
|
||||
var/traitor_prob = 0
|
||||
max_traitors = round(num_players / 10) + 1
|
||||
traitor_prob = (num_players - (max_traitors - 1) * 10) * 10
|
||||
|
||||
// Stop setup if no possible traitors
|
||||
if(!possible_traitors.len)
|
||||
return 0
|
||||
|
||||
if(config.traitor_scaling)
|
||||
num_traitors = max_traitors - 1 + prob(traitor_prob)
|
||||
log_game("Number of traitors: [num_traitors]")
|
||||
message_admins("Players counted: [num_players] Number of traitors chosen: [num_traitors]")
|
||||
else
|
||||
num_traitors = max(1, min(num_players(), traitors_possible))
|
||||
|
||||
|
||||
for(var/i = 0, i < num_traitors, i++)
|
||||
var/datum/mind/traitor = pick(possible_traitors)
|
||||
traitors += traitor
|
||||
possible_traitors.Remove(traitor)
|
||||
|
||||
for(var/datum/mind/traitor in traitors)
|
||||
if(!traitor || !istype(traitor))
|
||||
traitors.Remove(traitor)
|
||||
continue
|
||||
if(istype(traitor))
|
||||
traitor.special_role = "traitor"
|
||||
|
||||
// if(!traitors.len)
|
||||
// return 0
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
|
||||
/datum/game_mode/traitor/autotraitor/post_setup()
|
||||
..()
|
||||
for(var/mob/T in world)
|
||||
if(T.mind in possible_traitors)
|
||||
T.be_syndicate = 1
|
||||
abandon_allowed = 1
|
||||
traitorcheckloop()
|
||||
|
||||
/datum/game_mode/traitor/autotraitor/proc/traitorcheckloop()
|
||||
spawn(9000)
|
||||
if(emergency_shuttle.departed)
|
||||
return
|
||||
//message_admins("Performing AutoTraitor Check")
|
||||
var/playercount = 0
|
||||
var/traitorcount = 0
|
||||
var/possible_traitors[0]
|
||||
for(var/mob/living/player in world)
|
||||
|
||||
if (player.client && player.stat != 2)
|
||||
playercount += 1
|
||||
if (player.client && player.mind && player.mind.special_role && player.stat != 2)
|
||||
traitorcount += 1
|
||||
if (player.client && player.mind && !player.mind.special_role && player.stat != 2 && player.be_syndicate && !jobban_isbanned(player, "Syndicate"))
|
||||
possible_traitors += player
|
||||
//message_admins("Live Players: [playercount]")
|
||||
//message_admins("Live Traitors: [traitorcount]")
|
||||
// message_admins("Potential Traitors:")
|
||||
// for(var/mob/living/traitorlist in possible_traitors)
|
||||
// message_admins("[traitorlist.real_name]")
|
||||
|
||||
// var/r = rand(5)
|
||||
// var/target_traitors = 1
|
||||
var/max_traitors = 1
|
||||
var/traitor_prob = 0
|
||||
max_traitors = round(playercount / 10) + 1
|
||||
traitor_prob = (playercount - (max_traitors - 1) * 10) * 5
|
||||
if(traitorcount < max_traitors - 1)
|
||||
traitor_prob += 50
|
||||
|
||||
|
||||
if(traitorcount < max_traitors)
|
||||
//message_admins("Number of Traitors is below maximum. Rolling for new Traitor.")
|
||||
//message_admins("The probability of a new traitor is [traitor_prob]%")
|
||||
|
||||
if(prob(traitor_prob))
|
||||
message_admins("Making a new Traitor.")
|
||||
if(!possible_traitors.len)
|
||||
message_admins("No potential traitors. Cancelling new traitor.")
|
||||
traitorcheckloop()
|
||||
return
|
||||
var/mob/living/newtraitor = pick(possible_traitors)
|
||||
//message_admins("[newtraitor.real_name] is the new Traitor.")
|
||||
|
||||
forge_traitor_objectives(newtraitor.mind)
|
||||
equip_traitor(newtraitor)
|
||||
traitors += newtraitor.mind
|
||||
newtraitor << "\red <B>ATTENTION:</B> \black It is time to pay your debt to the Syndicate..."
|
||||
newtraitor << "<B>You are now a traitor.</B>"
|
||||
newtraitor.mind.special_role = "traitor"
|
||||
var/obj_count = 1
|
||||
newtraitor << "\blue Your current objectives:"
|
||||
for(var/datum/objective/objective in newtraitor.mind.objectives)
|
||||
newtraitor << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
//else
|
||||
//message_admins("No new traitor being added.")
|
||||
//else
|
||||
//message_admins("Number of Traitors is at maximum. Not making a new Traitor.")
|
||||
|
||||
|
||||
/* Old equation. Commenting out.
|
||||
target_traitors = max(1, min(round((playercount + r) / 10, 1), traitors_possible))
|
||||
message_admins("Target Traitor Count is: [target_traitors]")
|
||||
|
||||
if (traitorcount < target_traitors)
|
||||
message_admins("Number of Traitors is below Target. Making a new Traitor.")
|
||||
var/mob/living/newtraitor = pick(possible_traitors)
|
||||
message_admins("[newtraitor.real_name] is the new Traitor.")
|
||||
|
||||
for(var/datum/objective/o in SelectObjectives(newtraitor.mind.assigned_role, newtraitor.mind))
|
||||
o.owner = newtraitor.mind
|
||||
newtraitor.mind.objectives += o
|
||||
|
||||
equip_traitor(newtraitor)
|
||||
traitors += newtraitor.mind
|
||||
newtraitor << "\red <B>ATTENTION:</B> \black It is time to pay your debt to the Syndicate..."
|
||||
newtraitor << "<B>You are now a traitor.</B>"
|
||||
newtraitor.mind.special_role = "traitor"
|
||||
var/obj_count = 1
|
||||
newtraitor << "\blue Your current objectives:"
|
||||
for(var/datum/objective/objective in newtraitor.mind.objectives)
|
||||
newtraitor << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
else
|
||||
message_admins("Number of Traitors is at Target. No new Traitor.")
|
||||
*/
|
||||
traitorcheckloop()
|
||||
|
||||
|
||||
|
||||
/datum/game_mode/traitor/autotraitor/latespawn(mob/living/carbon/human/character)
|
||||
..()
|
||||
if(emergency_shuttle.departed)
|
||||
return
|
||||
//message_admins("Late Join Check")
|
||||
if(character.be_syndicate == 1 && !jobban_isbanned(character, "Syndicate"))
|
||||
//message_admins("Late Joiner has Be Syndicate")
|
||||
//message_admins("Checking number of players")
|
||||
var/playercount = 0
|
||||
var/traitorcount = 0
|
||||
for(var/mob/living/player in world)
|
||||
|
||||
if (player.client && player.stat != 2)
|
||||
playercount += 1
|
||||
if (player.client && player.mind && player.mind.special_role && player.stat != 2)
|
||||
traitorcount += 1
|
||||
//message_admins("Live Players: [playercount]")
|
||||
//message_admins("Live Traitors: [traitorcount]")
|
||||
|
||||
//var/r = rand(5)
|
||||
//var/target_traitors = 1
|
||||
var/max_traitors = 2
|
||||
var/traitor_prob = 0
|
||||
max_traitors = round(playercount / 10) + 1
|
||||
traitor_prob = (playercount - (max_traitors - 1) * 10) * 5
|
||||
if(traitorcount < max_traitors - 1)
|
||||
traitor_prob += 50
|
||||
|
||||
//target_traitors = max(1, min(round((playercount + r) / 10, 1), traitors_possible))
|
||||
//message_admins("Target Traitor Count is: [target_traitors]")
|
||||
if (traitorcount < max_traitors)
|
||||
//message_admins("Number of Traitors is below maximum. Rolling for New Arrival Traitor.")
|
||||
//message_admins("The probability of a new traitor is [traitor_prob]%")
|
||||
if(prob(traitor_prob))
|
||||
message_admins("New traitor roll passed. Making a new Traitor.")
|
||||
forge_traitor_objectives(character.mind)
|
||||
equip_traitor(character)
|
||||
traitors += character.mind
|
||||
character << "\red <B>You are the traitor.</B>"
|
||||
character.mind.special_role = "traitor"
|
||||
var/obj_count = 1
|
||||
character << "\blue Your current objectives:"
|
||||
for(var/datum/objective/objective in character.mind.objectives)
|
||||
character << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
//else
|
||||
//message_admins("New traitor roll failed. No new traitor.")
|
||||
//else
|
||||
//message_admins("Late Joiner does not have Be Syndicate")
|
||||
|
||||
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
config_tag = "blob"
|
||||
required_players = 0
|
||||
|
||||
uplink_welcome = "Syndicate Uplink Console:"
|
||||
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,9 @@
|
||||
required_players = 1
|
||||
required_enemies = 1
|
||||
|
||||
uplink_welcome = "Syndicate Uplink Console:"
|
||||
uplink_uses = 10
|
||||
|
||||
var
|
||||
changeling_amount
|
||||
const
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
required_players = 20
|
||||
required_enemies = 2
|
||||
|
||||
uplink_welcome = "Syndicate Uplink Console:"
|
||||
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,9 @@
|
||||
var/const/max_cultists_to_start = 4
|
||||
var/acolytes_survived = 0
|
||||
|
||||
uplink_welcome = "Nar-Sie Uplink Console:"
|
||||
uplink_uses = 10
|
||||
|
||||
|
||||
/datum/game_mode/cult/announce()
|
||||
world << "<B>The current game mode is - Cult!</B>"
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
config_tag = "extended"
|
||||
required_players = 0
|
||||
|
||||
uplink_welcome = "Syndicate Uplink Console:"
|
||||
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,48 @@
|
||||
list/restricted_jobs = list()
|
||||
required_players = 0
|
||||
required_enemies = 0
|
||||
uplink_welcome
|
||||
uplink_uses
|
||||
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:3: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);"}
|
||||
|
||||
/datum/game_mode/proc/announce() //to be calles when round starts
|
||||
world << "<B>Notice</B>: [src] did not define announce()"
|
||||
@@ -77,6 +119,7 @@
|
||||
/datum/game_mode/proc/check_win() //universal trigger to be called at mob death, nuke explosion, etc. To be called from everywhere.
|
||||
return 0
|
||||
|
||||
/datum/game_mode/proc/latespawn(var/mob)
|
||||
|
||||
/datum/game_mode/proc/send_intercept()
|
||||
var/intercepttext = "<FONT size = 3><B>Cent. Com. Update</B> Requested staus information:</FONT><HR>"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
var/global/datum/controller/gameticker/ticker
|
||||
|
||||
var/datum/roundinfo/roundinfo = new()
|
||||
#define GAME_STATE_PREGAME 1
|
||||
#define GAME_STATE_SETTING_UP 2
|
||||
#define GAME_STATE_PLAYING 3
|
||||
|
||||
@@ -152,6 +152,7 @@ rcd light flash thingy on matter drain
|
||||
src.possible_modules += new /datum/AI_Module/small/interhack
|
||||
src.possible_modules += new /datum/AI_Module/small/blackout
|
||||
src.possible_modules += new /datum/AI_Module/small/reactivate_camera
|
||||
return
|
||||
|
||||
/datum/AI_Module/module_picker/proc/use(user as mob)
|
||||
var/dat
|
||||
|
||||
@@ -15,6 +15,9 @@
|
||||
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_uses = 10
|
||||
|
||||
|
||||
/datum/game_mode/malfunction/announce()
|
||||
world << "<B>The current game mode is - AI Malfunction!</B>"
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
var/nometeors = 1
|
||||
required_players = 0
|
||||
|
||||
uplink_welcome = "EVIL METEOR Uplink Console:"
|
||||
uplink_uses = 10
|
||||
|
||||
/datum/game_mode/meteor/announce()
|
||||
world << "<B>The current game mode is - Meteor!</B>"
|
||||
|
||||
@@ -8,6 +8,9 @@
|
||||
required_players = 3
|
||||
required_enemies = 2
|
||||
|
||||
uplink_welcome = "Corporate Backed Uplink Console:"
|
||||
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,9 @@
|
||||
required_players = 3
|
||||
required_enemies = 3
|
||||
|
||||
uplink_welcome = "Revolutionary Uplink Console:"
|
||||
uplink_uses = 10
|
||||
|
||||
var/finished = 0
|
||||
var/checkwin_counter = 0
|
||||
var/const/max_headrevs = 3
|
||||
@@ -130,7 +133,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
|
||||
|
||||
//////////////////////////////////////
|
||||
@@ -164,6 +167,8 @@
|
||||
rev_mind.current << "\red <FONT size = 3> You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!</FONT>"
|
||||
rev_mind.special_role = "Revolutionary"
|
||||
update_rev_icons_added(rev_mind)
|
||||
if(ticker.mode.name == "rp-revolution")
|
||||
rev_mind.current.verbs += /mob/living/carbon/human/proc/RevConvert
|
||||
return 1
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//Deals with players being converted from the revolution (Not a rev anymore)// // Modified to handle borged MMIs. Accepts another var if the target is being borged at the time -- Polymorph.
|
||||
@@ -186,6 +191,8 @@
|
||||
|
||||
else
|
||||
M << "[rev_mind.current] looks like they just remembered their real allegiance!"
|
||||
if(ticker.mode.name == "rp-revolution")
|
||||
rev_mind.current.verbs -= /mob/living/carbon/human/proc/RevConvert
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -0,0 +1,349 @@
|
||||
// To add a rev to the list of revolutionaries, make sure it's rev (with if(ticker.mode.name == "revolution)),
|
||||
// then call ticker.mode:add_revolutionary(_THE_PLAYERS_MIND_)
|
||||
// nothing else needs to be done, as that proc will check if they are a valid target.
|
||||
// Just make sure the converter is a head before you call it!
|
||||
// To remove a rev (from brainwashing or w/e), call ticker.mode:remove_revolutionary(_THE_PLAYERS_MIND_),
|
||||
// this will also check they're not a head, so it can just be called freely
|
||||
// If the rev icons start going wrong for some reason, ticker.mode:update_all_rev_icons() can be called to correct them.
|
||||
// If the game somtimes isn't registering a win properly, then ticker.mode.check_win() isn't being called somewhere.
|
||||
#define RPREV_REQUIRE_REVS_ALIVE 0
|
||||
#define RPREV_REQUIRE_HEADS_ALIVE 0
|
||||
|
||||
/datum/game_mode/rp_revolution
|
||||
name = "rp-revolution"
|
||||
config_tag = "rp-revolution"
|
||||
|
||||
var/finished = 0
|
||||
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)
|
||||
var/all_brigged = 0
|
||||
var/brigged_time = 0
|
||||
|
||||
uplink_welcome = "Syndicate Uplink Console:"
|
||||
uplink_uses = 10
|
||||
|
||||
|
||||
/datum/game_mode/rp_revolution/announce()
|
||||
world << "<B>The current game mode is - Revolution RP!</B>"
|
||||
// world << "<B>Some crewmembers are attempting to start a revolution!<BR>\nRevolutionaries - Kill the Captain, HoP, and HoS. Convert other crewmembers (excluding the Captain, HoP, HoS, and security officers) to your cause. Protect your leaders.<BR>\nPersonnel - Protect the Captain, HoP, and HoR. Kill the leaders of the revolution, and brainwash the other revolutionaries (by beating them in the head).</B>"
|
||||
|
||||
/datum/game_mode/rp_revolution/send_intercept()
|
||||
var/intercepttext = "<FONT size = 3><B>Cent. Com. Update</B> Requested staus information:</FONT><HR>"
|
||||
intercepttext += "<B> Cent. Com has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:</B>"
|
||||
|
||||
var/list/possible_modes = list()
|
||||
possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf")
|
||||
possible_modes -= "nuke"
|
||||
var/number = pick(2, 3)
|
||||
var/i = 0
|
||||
for(i = 0, i < number, i++)
|
||||
possible_modes.Remove(pick(possible_modes))
|
||||
possible_modes.Insert(rand(possible_modes.len), "nuke")
|
||||
|
||||
var/datum/intercept_text/i_text = new /datum/intercept_text
|
||||
for(var/A in possible_modes)
|
||||
intercepttext += i_text.build(A, pick(head_revolutionaries))
|
||||
|
||||
for (var/obj/machinery/computer/communications/comm in world)
|
||||
if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept)
|
||||
var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc )
|
||||
intercept.name = "paper- 'Cent. Com. Status Summary'"
|
||||
intercept.info = intercepttext
|
||||
|
||||
comm.messagetitle.Add("Cent. Com. Status Summary")
|
||||
comm.messagetext.Add(intercepttext)
|
||||
|
||||
command_alert("Summary downloaded and printed out at all communications consoles.", "Enemy communication intercept. Security Level Elevated.")
|
||||
|
||||
/datum/game_mode/rp_revolution/post_setup()
|
||||
|
||||
var/list/revs_possible = list()
|
||||
revs_possible = get_possible_revolutionaries()
|
||||
var/list/heads = list()
|
||||
heads = get_living_heads()
|
||||
var/rev_number = 0
|
||||
|
||||
if(!revs_possible || !heads)
|
||||
world << "<B> \red Not enough players for RP revolution game mode. Restarting world in 5 seconds."
|
||||
sleep(50)
|
||||
world.Reboot()
|
||||
return
|
||||
|
||||
if(revs_possible.len >= 3)
|
||||
rev_number = 3
|
||||
else
|
||||
rev_number = revs_possible.len
|
||||
|
||||
while(rev_number > 0)
|
||||
head_revolutionaries += pick(revs_possible - head_revolutionaries)
|
||||
rev_number--
|
||||
|
||||
for(var/datum/mind/rev_mind in head_revolutionaries)
|
||||
for(var/datum/mind/head_mind in heads)
|
||||
var/datum/objective/capture/rev_obj = new
|
||||
rev_obj.owner = rev_mind
|
||||
rev_obj.find_target_by_role(head_mind.assigned_role)
|
||||
rev_mind.objectives += rev_obj
|
||||
equip_revolutionary(rev_mind.current)
|
||||
rev_mind.current.verbs += /mob/living/carbon/human/proc/RevConvert
|
||||
update_rev_icons_added(rev_mind)
|
||||
|
||||
for(var/datum/mind/rev_mind in head_revolutionaries)
|
||||
var/obj_count = 1
|
||||
rev_mind.current << "\blue You are a member of the revolutionaries' leadership!"
|
||||
for(var/datum/objective/objective in rev_mind.objectives)
|
||||
rev_mind.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
|
||||
spawn (rand(waittime_l, waittime_h))
|
||||
send_intercept()
|
||||
|
||||
/datum/game_mode/rp_revolution/send_intercept()
|
||||
var/intercepttext = "<FONT size = 3><B>Cent. Com. Update</B> Requested staus information:</FONT><HR>"
|
||||
intercepttext += "<B> Cent. Com has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:</B>"
|
||||
|
||||
var/list/possible_modes = list()
|
||||
possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf")
|
||||
possible_modes -= "[ticker.mode]"
|
||||
var/number = pick(2, 3)
|
||||
var/i = 0
|
||||
for(i = 0, i < number, i++)
|
||||
possible_modes.Remove(pick(possible_modes))
|
||||
possible_modes.Insert(rand(possible_modes.len), "[ticker.mode]")
|
||||
|
||||
var/datum/intercept_text/i_text = new /datum/intercept_text
|
||||
for(var/A in possible_modes)
|
||||
intercepttext += i_text.build(A, pick(head_revolutionaries))
|
||||
|
||||
for (var/obj/machinery/computer/communications/comm in world)
|
||||
if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept)
|
||||
var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc )
|
||||
intercept.name = "paper- 'Cent. Com. Status Summary'"
|
||||
intercept.info = intercepttext
|
||||
|
||||
comm.messagetitle.Add("Cent. Com. Status Summary")
|
||||
comm.messagetext.Add(intercepttext)
|
||||
|
||||
command_alert("Summary downloaded and printed out at all communications consoles.", "Enemy communication intercept. Security Level Elevated.")
|
||||
|
||||
spawn(54000)
|
||||
command_alert("Summary downloaded and printed out at all communications consoles.", "The revolution leaders have been determined.")
|
||||
intercepttext = "<FONT size = 3><B>Cent. Com. Update</B> Requested status information:</FONT><HR>"
|
||||
intercepttext += "We have determined the revolution leaders to be:"
|
||||
for(var/datum/mind/revmind in head_revolutionaries)
|
||||
intercepttext += "<br>[revmind.current.real_name]"
|
||||
intercepttext += "<br>Please arrest them at once."
|
||||
for (var/obj/machinery/computer/communications/comm in world)
|
||||
if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept)
|
||||
var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc )
|
||||
intercept.name = "paper- 'Cent. Com. Status Summary'"
|
||||
intercept.info = intercepttext
|
||||
|
||||
comm.messagetitle.Add("Cent. Com. Status Summary")
|
||||
comm.messagetext.Add(intercepttext)
|
||||
spawn(12000)
|
||||
command_alert("Repeating the previous message over intercoms due to urgency. The station has enemy operatives onboard by the names of [reveal_rev_heads()], please arrest them at once.", "The revolution leaders have been determined.")
|
||||
|
||||
|
||||
/datum/game_mode/rp_revolution/proc/reveal_rev_heads()
|
||||
. = ""
|
||||
for(var/i = 1, i <= head_revolutionaries.len,i++)
|
||||
var/datum/mind/revmind = head_revolutionaries[i]
|
||||
if(i < head_revolutionaries.len)
|
||||
. += "[revmind.current.real_name],"
|
||||
else
|
||||
. += "and [revmind.current.real_name]"
|
||||
|
||||
///datum/game_mode/rp_revolution/proc/equip_revolutionary(mob/living/carbon/human/rev_mob)
|
||||
// if(!istype(rev_mob))
|
||||
// return
|
||||
|
||||
// spawn (100)
|
||||
// if (rev_mob.r_store)
|
||||
// rev_mob.equip_if_possible(new /obj/item/weapon/paper/communist_manifesto(rev_mob), rev_mob.slot_l_store)
|
||||
// if (rev_mob.l_store)
|
||||
// rev_mob.equip_if_possible(new /obj/item/weapon/paper/communist_manifesto(rev_mob), rev_mob.slot_r_store)
|
||||
|
||||
|
||||
/datum/game_mode/rp_revolution/check_win()
|
||||
if(check_rev_victory())
|
||||
finished = 1
|
||||
else if(check_heads_victory())
|
||||
finished = 2
|
||||
return
|
||||
|
||||
/datum/game_mode/rp_revolution/check_finished()
|
||||
if(finished != 0)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/datum/game_mode/rp_revolution/proc/get_possible_revolutionaries()
|
||||
var/list/candidates = list()
|
||||
|
||||
for(var/mob/living/carbon/human/player in world)
|
||||
if(player.client)
|
||||
if(player.be_syndicate)
|
||||
candidates += player.mind
|
||||
|
||||
if(candidates.len < 1)
|
||||
for(var/mob/living/carbon/human/player in world)
|
||||
if(player.client)
|
||||
candidates += player.mind
|
||||
|
||||
var/list/uncons = get_unconvertables()
|
||||
for(var/datum/mind/mind in uncons)
|
||||
candidates -= mind
|
||||
|
||||
if(candidates.len < 1)
|
||||
return null
|
||||
else
|
||||
return candidates
|
||||
|
||||
/datum/game_mode/rp_revolution/proc/get_unconvertables()
|
||||
var/list/ucs = list()
|
||||
for(var/mob/living/carbon/human/player in world)
|
||||
if(player.mind)
|
||||
var/role = player.mind.assigned_role
|
||||
if(role in list("Captain", "Head of Security", "Head of Personnel", "Chief Engineer", "Research Director", "Security Officer", "Forensic Technician", "AI"))
|
||||
ucs += player.mind
|
||||
|
||||
return ucs
|
||||
|
||||
/datum/game_mode/rp_revolution/proc/check_rev_victory()
|
||||
for(var/datum/mind/rev_mind in head_revolutionaries)
|
||||
for(var/datum/objective/objective in rev_mind.objectives)
|
||||
if(!(objective.check_completion()))
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
/datum/game_mode/rp_revolution/proc/check_heads_victory()
|
||||
for(var/datum/mind/rev_mind in head_revolutionaries)
|
||||
if(rev_mind.current.stat != 2)
|
||||
var/turf/revloc = rev_mind.current.loc
|
||||
if(!istype(revloc.loc,/area/security/brig) && !rev_mind.current.handcuffed)
|
||||
return 0
|
||||
else if(RPREV_REQUIRE_REVS_ALIVE) return 0
|
||||
return 1
|
||||
|
||||
/datum/game_mode/rp_revolution/declare_completion()
|
||||
|
||||
var/text = ""
|
||||
if(finished == 1)
|
||||
world << "\red <FONT size = 3><B> The heads of staff were relieved of their posts! The revolutionaries win!</B></FONT>"
|
||||
else if(finished == 2)
|
||||
world << "\red <FONT size = 3><B> The heads of staff managed to stop the revolution!</B></FONT>"
|
||||
|
||||
world << "<FONT size = 2><B>The head revolutionaries were: </B></FONT>"
|
||||
for(var/datum/mind/rev_mind in head_revolutionaries)
|
||||
text = ""
|
||||
if(rev_mind.current)
|
||||
text += "[rev_mind.current.real_name]"
|
||||
if(rev_mind.current.stat == 2)
|
||||
text += " (Dead)"
|
||||
else
|
||||
text += " (Survived!)"
|
||||
else
|
||||
text += "[rev_mind.key] (character destroyed)"
|
||||
|
||||
world << text
|
||||
|
||||
text = ""
|
||||
world << "<FONT size = 2><B>The converted revolutionaries were: </B></FONT>"
|
||||
for(var/datum/mind/rev_nh_mind in revolutionaries)
|
||||
if(rev_nh_mind.current)
|
||||
text += "[rev_nh_mind.current.real_name]"
|
||||
if(rev_nh_mind.current.stat == 2)
|
||||
text += " (Dead)"
|
||||
else
|
||||
text += " (Survived!)"
|
||||
else
|
||||
text += "[rev_nh_mind.key] (character destroyed)"
|
||||
text += ", "
|
||||
|
||||
world << text
|
||||
|
||||
world << "<FONT size = 2><B>The heads of staff were: </B></FONT>"
|
||||
var/list/heads = list()
|
||||
heads = get_all_heads()
|
||||
for(var/datum/mind/head_mind in heads)
|
||||
text = ""
|
||||
if(head_mind.current)
|
||||
text += "[head_mind.current.real_name]"
|
||||
if(head_mind.current.stat == 2)
|
||||
text += " (Dead)"
|
||||
else
|
||||
text += " (Survived!)"
|
||||
else
|
||||
text += "[head_mind.key] (character destroyed)"
|
||||
|
||||
world << text
|
||||
return 1
|
||||
|
||||
|
||||
/*obj/item/weapon/paper/communist_manifesto
|
||||
name = "Communist Manifesto"
|
||||
icon = 'books.dmi'
|
||||
icon_state = "redcommunist"
|
||||
info = "Supporters of the Revolution:<br><br>"
|
||||
attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(user.mind in ticker.mode:head_revolutionaries)
|
||||
if(RevConvert(M,user))
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message(text("\red [] converts [] with the Communist Manifesto!", user, M))
|
||||
info += "[M.real_name]<br>"
|
||||
else
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message(text("\red [] fails to convert [] with the Communist Manifesto!", user, M))
|
||||
else
|
||||
usr << "\red You are completely confounded as to the operation of this tome."
|
||||
return
|
||||
|
||||
proc/RevConvert(mob/living/carbon/M,mob/user)
|
||||
if(!istype(M)) return 0
|
||||
if((M.mind in ticker.mode:head_revolutionaries) || (M.mind in ticker.mode:revolutionaries))
|
||||
user << "\red <b>[M] is already a revolutionary!</b>"
|
||||
return 0
|
||||
else if(M.mind in ticker.mode:get_unconvertables())
|
||||
user << "\red <b>[M] cannot be a revolutionary!</b>"
|
||||
return 0
|
||||
else
|
||||
if(world.time < M.mind.rev_cooldown)
|
||||
user << "\red Wait five seconds before reconversion attempt."
|
||||
return 0
|
||||
user << "\red Attempting to convert [M]..."
|
||||
var/choice = alert(M,"Asked by [user]: Do you want to join the revolution?","Align Thyself with the Revolution!","No!","Yes!")
|
||||
if(choice == "Yes!")
|
||||
ticker.mode:add_revolutionary(M.mind)
|
||||
user << "\blue <b>[M] joins the revolution!</b>"
|
||||
. = 1
|
||||
else if(choice == "No!")
|
||||
user << "\red <b>[M] does not support the revolution!</b>"
|
||||
. = 0
|
||||
M.mind.rev_cooldown = world.time+50*/
|
||||
|
||||
mob/living/carbon/human/proc
|
||||
RevConvert(mob/M as mob in oview(src))
|
||||
set name = "Rev-Convert"
|
||||
if(((src.mind in ticker.mode:head_revolutionaries) || (src.mind in ticker.mode:revolutionaries)))
|
||||
if((M.mind in ticker.mode:head_revolutionaries) || (M.mind in ticker.mode:revolutionaries))
|
||||
src << "\red <b>[M] is already be a revolutionary!</b>"
|
||||
else if(src.mind in ticker.mode:get_unconvertables())
|
||||
src << "\red <b>[M] cannot be a revolutionary!</b>"
|
||||
else
|
||||
if(world.time < M.mind.rev_cooldown)
|
||||
src << "\red Wait five seconds before reconversion attempt."
|
||||
return
|
||||
src << "\red Attempting to convert [M]..."
|
||||
log_admin("[src]([src.ckey]) attempted to convert [M].")
|
||||
message_admins("\red [src]([src.ckey]) attempted to convert [M].")
|
||||
var/choice = alert(M,"Asked by [src]: Do you want to join the revolution?","Align Thyself with the Revolution!","No!","Yes!")
|
||||
if(choice == "Yes!")
|
||||
ticker.mode:add_revolutionary(M.mind)
|
||||
M << "\blue You join the revolution!"
|
||||
src << "\blue <b>[M] joins the revolution!</b>"
|
||||
else if(choice == "No!")
|
||||
M << "\red You reject this traitorous cause!"
|
||||
src << "\red <b>[M] does not support the revolution!</b>"
|
||||
M.mind.rev_cooldown = world.time+50
|
||||
@@ -9,12 +9,17 @@
|
||||
required_players = 0
|
||||
required_enemies = 1
|
||||
|
||||
uplink_welcome = "Syndicate Uplink Console:"
|
||||
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)
|
||||
|
||||
var/traitors_possible = 4 //hard limit on traitors if scaling is turned off
|
||||
var/const/traitor_scaling_coeff = 10.0 //how much does the amount of players get divided by to determine traitors
|
||||
|
||||
var/num_players = 0
|
||||
|
||||
|
||||
/datum/game_mode/traitor/announce()
|
||||
world << "<B>The current game mode is - Traitor!</B>"
|
||||
@@ -163,12 +168,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 +220,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,17 +253,23 @@
|
||||
R = foo
|
||||
loc = "in the [S.name] on your back"
|
||||
break
|
||||
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.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
|
||||
loc = "on your belt"
|
||||
if (!R && istype(traitor_mob.l_ear, /obj/item/device/radio))
|
||||
if (!R && istype(traitor_mob.l_ear, /obj/item/device/radio) || prob(10))
|
||||
R = traitor_mob.l_ear
|
||||
loc = "on your head"
|
||||
if (!R && istype(traitor_mob.r_ear, /obj/item/device/radio))
|
||||
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))
|
||||
@@ -273,10 +284,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."
|
||||
@@ -285,7 +298,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
|
||||
@@ -298,11 +311,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.
|
||||
|
||||
@@ -8,6 +8,9 @@
|
||||
required_players = 0
|
||||
required_enemies = 1
|
||||
|
||||
uplink_welcome = "Wizardly Uplink Console:"
|
||||
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, 12)
|
||||
if (wires[colorIndex] == 0)
|
||||
valid = 1
|
||||
wires[colorIndex] = flag
|
||||
airlockIndexToFlag[flagIndex] = flag
|
||||
@@ -61,23 +64,27 @@ 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
|
||||
var/obj/machinery/door/airlock/closeOther = null
|
||||
var/closeOtherId = null
|
||||
var/list/signalers[9]
|
||||
var/list/signalers[12]
|
||||
var/lockdownbyai = 0
|
||||
autoclose = 1
|
||||
var/doortype = 0
|
||||
var/justzap = 0
|
||||
var/safetylight = 1
|
||||
var/obj/item/weapon/airlock_electronics/electronics = null
|
||||
holdopen = 1
|
||||
|
||||
/obj/machinery/door/airlock/command
|
||||
name = "Airlock"
|
||||
@@ -266,6 +273,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 +363,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 +441,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 +525,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 +659,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 +685,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 +773,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 +792,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 +864,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 +918,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 = 0
|
||||
|
||||
else if (href_list["aiEnable"])
|
||||
var/code = text2num(href_list["aiEnable"])
|
||||
@@ -834,9 +996,26 @@ 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 = 1
|
||||
|
||||
src.update_icon()
|
||||
src.updateUsrDialog()
|
||||
if((istype(usr.equipped(), /obj/item/device/hacktool)))
|
||||
attack_hack(usr, usr.equipped())
|
||||
|
||||
return
|
||||
|
||||
@@ -866,6 +1045,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 +1161,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
|
||||
@@ -992,12 +1252,12 @@ About the new airlock wires panel:
|
||||
/obj/machinery/door/airlock/close()
|
||||
if (src.welded || src.locked || (!src.arePowerSystemsOn()) || (stat & NOPOWER) || src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS))
|
||||
return
|
||||
..()
|
||||
use_power(50)
|
||||
playsound(src.loc, 'airlock.ogg', 30, 1)
|
||||
var/obj/structure/window/killthis = (locate(/obj/structure/window) in get_turf(src))
|
||||
if(killthis)
|
||||
killthis.ex_act(2)//Smashin windows
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/machinery/door/airlock/New()
|
||||
|
||||
@@ -289,14 +289,62 @@
|
||||
/obj/machinery/door/proc/close()
|
||||
if(density)
|
||||
return 1
|
||||
if(src.operating)
|
||||
if (src.operating)
|
||||
return
|
||||
src.operating = 1
|
||||
|
||||
var/held = 1
|
||||
|
||||
if(src.holdopen)
|
||||
while(held == 1)
|
||||
held = 0
|
||||
var/list/objects = locate() in get_turf(src)
|
||||
for(var/obj/T in objects)
|
||||
if(T != src)
|
||||
held = 1
|
||||
for(var/mob/T in objects)
|
||||
held = 1
|
||||
sleep(10)
|
||||
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(rand(50,80), 0) //OH GOD IT HURTS
|
||||
break
|
||||
|
||||
L << "\red The airlock crushes your [limbdisplay]!"
|
||||
for(var/mob/O in viewers(L, null))
|
||||
if(O == L)
|
||||
continue
|
||||
O.show_message("\red The airlock crushes [L.name]'s [limbdisplay]!", 1)
|
||||
sleep(rand(2,8))
|
||||
|
||||
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))
|
||||
|
||||
@@ -72,7 +72,8 @@ var
|
||||
machinetype = 6
|
||||
heatgen = 0
|
||||
var/intercept = 0 // if nonzero, broadcasts all messages to syndicate channel
|
||||
var/syndi = 1 //If 1, it goes to syndicate frequency. Else, goes to deathsquad/Response Team
|
||||
var/frequency = 1439
|
||||
var/nuke = 0
|
||||
|
||||
receive_signal(datum/signal/signal)
|
||||
|
||||
@@ -96,20 +97,21 @@ var
|
||||
|
||||
var/datum/radio_frequency/connection = signal.data["connection"]
|
||||
|
||||
if(connection.frequency == NUKE_FREQ && syndi) // if syndicate broadcast, just
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"],, signal.data["compression"])
|
||||
else if(connection.frequency == 1439 && !syndi)
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"],, signal.data["compression"])
|
||||
else if (intercept)
|
||||
if(syndi)
|
||||
if(!intercept) // if syndicate broadcast, just
|
||||
if(connection.frequency == frequency && !nuke)
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"],, signal.data["compression"])
|
||||
else if(connection.frequency == NUKE_FREQ && !nuke)
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"],, signal.data["compression"])
|
||||
else
|
||||
if(nuke)
|
||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
@@ -120,7 +122,7 @@ var
|
||||
signal.data["vmask"], signal.data["vmessage"],
|
||||
signal.data["radio"], signal.data["message"],
|
||||
signal.data["name"], signal.data["job"],
|
||||
signal.data["realname"], signal.data["vname"], 4, signal.data["compression"])
|
||||
signal.data["realname"], signal.data["vname"], 4, signal.data["compression"], frequency)
|
||||
|
||||
|
||||
|
||||
@@ -177,7 +179,7 @@ var
|
||||
/proc/Broadcast_Message(var/datum/radio_frequency/connection, var/mob/M,
|
||||
var/vmask, var/vmessage, var/obj/item/device/radio/radio,
|
||||
var/message, var/name, var/job, var/realname, var/vname,
|
||||
var/data, var/compression)
|
||||
var/data, var/compression, var/intercept_frequency)
|
||||
|
||||
|
||||
/* ###### Prepare the radio connection ###### */
|
||||
@@ -219,11 +221,11 @@ var
|
||||
// --- Broadcast to response team radio! ---
|
||||
|
||||
else if(data == 4)
|
||||
var/datum/radio_frequency/syndicateconnection = radio_controller.return_frequency(1439)
|
||||
var/datum/radio_frequency/interceptconnection = radio_controller.return_frequency(intercept_frequency)
|
||||
|
||||
for (var/obj/item/device/radio/R in syndicateconnection.devices["[RADIO_CHAT]"])
|
||||
for (var/obj/item/device/radio/R in interceptconnection.devices["[RADIO_CHAT]"])
|
||||
|
||||
receive |= R.send_hear(1439)
|
||||
receive |= R.send_hear(intercept_frequency)
|
||||
|
||||
// --- Broadcast to ALL radio devices ---
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
for(var/obj/item/weapon/book/b in src.contents)
|
||||
books.Add(b)
|
||||
if(books.len)
|
||||
var/obj/item/weapon/book/choice = input("Which book would you like to remove from the shelf?") in books as obj|null
|
||||
var/obj/item/weapon/book/choice = input("Which book would you like to remove from the shelf?") in books|null as obj|null
|
||||
if(choice)
|
||||
choice.loc = src.loc
|
||||
else
|
||||
@@ -768,7 +768,10 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
|
||||
var/title = query.item[3]
|
||||
var/content = query.item[4]
|
||||
var/obj/item/weapon/book/B = new(src.loc)
|
||||
B.name = "Book: [title]"
|
||||
if(title)
|
||||
B.name = "[title]"
|
||||
else
|
||||
B.name = "Untitled book"
|
||||
B.title = title
|
||||
B.author = author
|
||||
B.dat = content
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
/obj/structure/closet/jcloset/New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/under/rank/janitor(src)
|
||||
new /obj/item/wardrobe/janitor(src)
|
||||
new /obj/item/wardrobe/janitor(src)
|
||||
new /obj/item/wardrobe/janitor(src)
|
||||
new /obj/item/device/flashlight(src)
|
||||
new /obj/item/clothing/shoes/galoshes(src)
|
||||
new /obj/item/weapon/caution(src)
|
||||
|
||||
@@ -19,6 +19,6 @@
|
||||
new /obj/item/weapon/pinpointer(src)
|
||||
new /obj/item/weapon/pinpointer(src)
|
||||
new /obj/item/device/pda/syndicate(src)
|
||||
var/obj/item/weapon/syndicate_uplink/U = new /obj/item/weapon/syndicate_uplink(src)
|
||||
var/obj/item/device/uplink/radio/U = new /obj/item/device/uplink/radio(src)
|
||||
U.uses = 40
|
||||
return
|
||||
|
||||
@@ -6,18 +6,9 @@
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/wardrobe/chief_engineer(src)
|
||||
new /obj/item/wardrobe/chief_engineer(src)
|
||||
new /obj/item/blueprints(src)
|
||||
new /obj/item/clothing/under/rank/chief_engineer(src)
|
||||
new /obj/item/clothing/suit/hazardvest(src)
|
||||
new /obj/item/clothing/head/helmet/hardhat/white(src)
|
||||
new /obj/item/clothing/head/helmet/welding(src)
|
||||
new /obj/item/clothing/gloves/yellow(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/device/radio/headset/heads/ce(src)
|
||||
new /obj/item/weapon/storage/toolbox/mechanical(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/device/multitool(src)
|
||||
new /obj/item/device/flash(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -68,11 +59,10 @@
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/under/rank/engineer(src)
|
||||
new /obj/item/clothing/suit/hazardvest(src)
|
||||
new /obj/item/clothing/shoes/orange(src)
|
||||
new /obj/item/device/radio/headset/headset_eng(src)
|
||||
new /obj/item/weapon/storage/toolbox/mechanical(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
new /obj/item/wardrobe/engineer(src)
|
||||
new /obj/item/wardrobe/engineer(src)
|
||||
new /obj/item/wardrobe/engineer(src)
|
||||
new /obj/item/wardrobe/engineer(src)
|
||||
new /obj/item/wardrobe/engineer(src)
|
||||
new /obj/item/wardrobe/engineer(src)
|
||||
return
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
/obj/structure/closet/secure_closet/medical2
|
||||
name = "Anesthetic"
|
||||
desc = "Used to knock people out."
|
||||
desc = "Used to knock people out, either by sleeping gas or brute force."
|
||||
icon_state = "medical1"
|
||||
icon_closed = "medical"
|
||||
icon_locked = "medical1"
|
||||
@@ -52,25 +52,19 @@
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/medical3
|
||||
name = "Medical Doctor's Locker"
|
||||
req_access = list(access_medical)
|
||||
name = "Chemist's Locker"
|
||||
req_access = list(access_chemistry)
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/weapon/storage/backpack/medic(src)
|
||||
new /obj/item/clothing/under/rank/nursesuit (src)
|
||||
new /obj/item/clothing/head/nursehat (src)
|
||||
new /obj/item/clothing/under/rank/medical(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/device/radio/headset/headset_med(src)
|
||||
new /obj/item/weapon/storage/belt/medical(src)
|
||||
new /obj/item/wardrobe/chemist(src)
|
||||
new /obj/item/wardrobe/chemist(src)
|
||||
new /obj/item/wardrobe/chemist(src)
|
||||
new /obj/item/wardrobe/chemist(src)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/CMO
|
||||
name = "Chief Medical Officer"
|
||||
req_access = list(access_cmo)
|
||||
@@ -79,13 +73,9 @@
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/suit/bio_suit/cmo(src)
|
||||
new /obj/item/clothing/head/bio_hood/general(src)
|
||||
new /obj/item/clothing/under/rank/chief_medical_officer(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat/cmo(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/clothing/shoes/brown (src)
|
||||
new /obj/item/device/radio/headset/heads/cmo(src)
|
||||
new /obj/item/wardrobe/cmo(src)
|
||||
new /obj/item/wardrobe/cmo(src)
|
||||
new /obj/item/wardrobe/cmo(src)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
/obj/structure/closet/secure_closet/personal/New()
|
||||
..()
|
||||
spawn(2)
|
||||
new /obj/item/weapon/storage/backpack( src )
|
||||
new /obj/item/device/radio/headset( src )
|
||||
new /obj/item/device/assembly/signaler(src)
|
||||
new /obj/item/wardrobe/assistant(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/personal/patient/New()
|
||||
@@ -37,6 +37,7 @@
|
||||
if(!src.registered)
|
||||
src.registered = I.registered
|
||||
src.desc = "Owned by [I.registered]."
|
||||
src.name = "Personal Closet - [I.registered]"
|
||||
else
|
||||
user << "\red Access Denied"
|
||||
else if( (istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken)
|
||||
@@ -54,4 +55,4 @@
|
||||
O.show_message(text("\blue The locker has been sliced open by [] with an energy blade!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2)
|
||||
else
|
||||
user << "\red Access Denied"
|
||||
return
|
||||
return
|
||||
@@ -1,21 +1,3 @@
|
||||
/obj/structure/closet/secure_closet/scientist
|
||||
name = "Scientist Locker"
|
||||
req_access = list(access_tox_storage)
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/under/rank/scientist(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/device/radio/headset/headset_sci(src)
|
||||
new /obj/item/weapon/tank/air(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/RD
|
||||
name = "Research Director"
|
||||
req_access = list(access_rd)
|
||||
@@ -24,14 +6,6 @@
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/suit/bio_suit/scientist(src)
|
||||
new /obj/item/clothing/head/bio_hood/scientist(src)
|
||||
new /obj/item/clothing/under/rank/research_director(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/device/radio/headset/heads/rd(src)
|
||||
new /obj/item/weapon/tank/air(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/wardrobe/rd(src)
|
||||
new /obj/item/wardrobe/rd(src)
|
||||
return
|
||||
@@ -6,17 +6,10 @@
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/suit/storage/captunic(src)
|
||||
new /obj/item/clothing/suit/armor/captain(src)
|
||||
new /obj/item/clothing/head/helmet/cap(src)
|
||||
new /obj/item/clothing/under/rank/captain(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/clothing/gloves/captain(src)
|
||||
new /obj/item/clothing/head/helmet/swat(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/device/radio/headset/heads/captain(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/flask(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/wardrobe/captain(src)
|
||||
new /obj/item/wardrobe/captain(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -29,17 +22,8 @@
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/under/rank/head_of_personnel(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/clothing/head/helmet(src)
|
||||
new /obj/item/device/radio/headset/heads/hop(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/weapon/storage/id_kit(src)
|
||||
new /obj/item/weapon/storage/id_kit( src )
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/clothing/glasses/sunglasses(src)
|
||||
new /obj/item/clothing/gloves/blue(src)
|
||||
new /obj/item/wardrobe/hop(src)
|
||||
new /obj/item/wardrobe/hop(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -52,19 +36,13 @@
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/under/jensen(src)
|
||||
new /obj/item/clothing/suit/armor/hos/jensen(src)
|
||||
new /obj/item/clothing/suit/armor/hos(src)
|
||||
new /obj/item/clothing/gloves/hos(src)
|
||||
new /obj/item/clothing/head/helmet/HoS/dermal(src)
|
||||
new /obj/item/device/radio/headset/heads/hos(src)
|
||||
new /obj/item/weapon/storage/lockbox/loyalty(src)
|
||||
new /obj/item/weapon/storage/flashbang_kit(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
new /obj/item/clothing/under/jensen(src)
|
||||
new /obj/item/clothing/suit/armor/hos/jensen(src)
|
||||
new /obj/item/clothing/head/helmet/HoS/dermal(src)
|
||||
new /obj/item/wardrobe/hos(src)
|
||||
new /obj/item/wardrobe/hos(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -77,17 +55,11 @@
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/under/rank/warden(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/clothing/suit/storage/gearharness(src)
|
||||
new /obj/item/clothing/head/helmet/warden(src)
|
||||
new /obj/item/clothing/gloves/red(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/weapon/storage/flashbang_kit(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
new /obj/item/weapon/gun/energy/taser(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
new /obj/item/wardrobe/warden(src)
|
||||
new /obj/item/wardrobe/warden(src)
|
||||
new /obj/item/wardrobe/warden(src)
|
||||
new /obj/item/wardrobe/warden(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -100,18 +72,12 @@
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/clothing/suit/storage/gearharness(src)
|
||||
new /obj/item/clothing/head/helmet(src)
|
||||
new /obj/item/clothing/gloves/red(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/policetaperoll(src)
|
||||
new /obj/item/weapon/flashbang(src)
|
||||
new /obj/item/weapon/pepperspray(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
new /obj/item/wardrobe/officer(src)
|
||||
new /obj/item/wardrobe/officer(src)
|
||||
new /obj/item/wardrobe/officer(src)
|
||||
new /obj/item/wardrobe/officer(src)
|
||||
new /obj/item/wardrobe/officer(src)
|
||||
new /obj/item/wardrobe/officer(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -130,21 +96,12 @@
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/under/det(src)
|
||||
new /obj/item/clothing/suit/det_suit/armor(src)
|
||||
new /obj/item/clothing/suit/storage/det_suit(src)
|
||||
new /obj/item/clothing/gloves/detective(src)
|
||||
new /obj/item/clothing/head/det_hat(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/weapon/storage/fcard_kit(src)
|
||||
new /obj/item/weapon/fcardholder(src)
|
||||
new /obj/item/weapon/clipboard(src)
|
||||
new /obj/item/device/detective_scanner(src)
|
||||
new /obj/item/weapon/pepperspray/small(src)
|
||||
new /obj/item/policetaperoll(src)
|
||||
new /obj/item/weapon/storage/box/evidence(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/dflask(src)
|
||||
new /obj/item/weapon/zippo(src)
|
||||
new /obj/item/weapon/pepperspray/small(src)
|
||||
new /obj/item/wardrobe/detective(src)
|
||||
new /obj/item/wardrobe/detective(src)
|
||||
new /obj/item/wardrobe/detective(src)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -45,8 +45,6 @@
|
||||
|
||||
/obj/structure/closet/wardrobe/chaplain_black/New()
|
||||
//new /obj/item/clothing/suit/imperium_monk(src) //No. -- Urist
|
||||
new /obj/item/clothing/under/rank/chaplain(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/suit/nun(src)
|
||||
new /obj/item/clothing/suit/storage/chaplain_hoodie(src)
|
||||
new /obj/item/clothing/head/chaplain_hood(src)
|
||||
@@ -56,6 +54,7 @@
|
||||
new /obj/item/weapon/storage/backpack/cultpack (src)
|
||||
new /obj/item/weapon/candlepack(src)
|
||||
new /obj/item/weapon/candlepack(src)
|
||||
new /obj/item/wardrobe/chaplain(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/wardrobe/green/New()
|
||||
@@ -86,12 +85,10 @@
|
||||
return
|
||||
|
||||
/obj/structure/closet/wardrobe/atmospherics_yellow/New()
|
||||
new /obj/item/clothing/under/rank/atmospheric_technician(src)
|
||||
new /obj/item/clothing/under/rank/atmospheric_technician(src)
|
||||
new /obj/item/clothing/under/rank/atmospheric_technician(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/wardrobe/atmos(src)
|
||||
new /obj/item/wardrobe/atmos(src)
|
||||
new /obj/item/wardrobe/atmos(src)
|
||||
new /obj/item/wardrobe/atmos(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/wardrobe/engineering_yellow/New()
|
||||
@@ -113,29 +110,19 @@
|
||||
return
|
||||
|
||||
/obj/structure/closet/wardrobe/toxins_white/New()
|
||||
new /obj/item/clothing/under/rank/scientist(src)
|
||||
new /obj/item/clothing/under/rank/scientist(src)
|
||||
new /obj/item/clothing/under/rank/scientist(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/wardrobe/scientist(src)
|
||||
new /obj/item/wardrobe/scientist(src)
|
||||
new /obj/item/wardrobe/scientist(src)
|
||||
new /obj/item/wardrobe/scientist(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/wardrobe/genetics_white/New()
|
||||
new /obj/item/clothing/under/rank/geneticist(src)
|
||||
new /obj/item/clothing/under/rank/geneticist(src)
|
||||
new /obj/item/clothing/under/rank/geneticist(src)
|
||||
new /obj/item/clothing/under/rank/geneticist(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/weapon/storage/stma_kit(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/wardrobe/geneticist(src)
|
||||
new /obj/item/wardrobe/geneticist(src)
|
||||
new /obj/item/wardrobe/geneticist(src)
|
||||
new /obj/item/wardrobe/geneticist(src)
|
||||
new /obj/item/wardrobe/geneticist(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/wardrobe/grey/New()
|
||||
@@ -160,11 +147,71 @@
|
||||
return
|
||||
|
||||
/obj/structure/closet/lawcloset/New()
|
||||
new /obj/item/clothing/under/lawyer/black(src)
|
||||
new /obj/item/clothing/under/lawyer/red(src)
|
||||
new /obj/item/clothing/under/lawyer/bluesuit(src)
|
||||
new /obj/item/clothing/suit/lawyer/bluejacket(src)
|
||||
new /obj/item/clothing/under/lawyer/purpsuit(src)
|
||||
new /obj/item/clothing/suit/lawyer/purpjacket(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/wardrobe/lawyer(src)
|
||||
new /obj/item/wardrobe/lawyer(src)
|
||||
new /obj/item/wardrobe/lawyer(src)
|
||||
new /obj/item/wardrobe/lawyer(src)
|
||||
|
||||
/obj/structure/closet/wardrobe/medic_white/New()
|
||||
new /obj/item/wardrobe/doctor(src)
|
||||
new /obj/item/wardrobe/doctor(src)
|
||||
new /obj/item/wardrobe/doctor(src)
|
||||
new /obj/item/wardrobe/doctor(src)
|
||||
new /obj/item/wardrobe/doctor(src)
|
||||
new /obj/item/wardrobe/doctor(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/wardrobe/robotics_yellow/New()
|
||||
new /obj/item/wardrobe/roboticist(src)
|
||||
new /obj/item/wardrobe/roboticist(src)
|
||||
new /obj/item/wardrobe/roboticist(src)
|
||||
new /obj/item/wardrobe/roboticist(src)
|
||||
return
|
||||
|
||||
|
||||
/obj/structure/closet/wardrobe/bartender_black/New()
|
||||
new /obj/item/wardrobe/bartender(src)
|
||||
new /obj/item/wardrobe/bartender(src)
|
||||
new /obj/item/wardrobe/bartender(src)
|
||||
new /obj/item/wardrobe/bartender(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/wardrobe/chef_white/New()
|
||||
new /obj/item/weapon/storage/lglo_kit(src)
|
||||
new /obj/item/wardrobe/chef(src)
|
||||
new /obj/item/wardrobe/chef(src)
|
||||
new /obj/item/wardrobe/chef(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/wardrobe/hydro_green/New()
|
||||
new /obj/item/wardrobe/hydro(src)
|
||||
new /obj/item/wardrobe/hydro(src)
|
||||
new /obj/item/wardrobe/hydro(src)
|
||||
new /obj/item/wardrobe/hydro(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/wardrobe/librarian_red/New()
|
||||
new /obj/item/wardrobe/librarian(src)
|
||||
new /obj/item/wardrobe/librarian(src)
|
||||
new /obj/item/wardrobe/librarian(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/wardrobe/cargo_yellow/New()
|
||||
new /obj/item/wardrobe/cargo_tech(src)
|
||||
new /obj/item/wardrobe/cargo_tech(src)
|
||||
new /obj/item/wardrobe/cargo_tech(src)
|
||||
new /obj/item/wardrobe/cargo_tech(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/wardrobe/qm_yellow/New()
|
||||
new /obj/item/wardrobe/qm(src)
|
||||
new /obj/item/wardrobe/qm(src)
|
||||
new /obj/item/wardrobe/qm(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/wardrobe/virology_white/New()
|
||||
new /obj/item/wardrobe/virologist(src)
|
||||
new /obj/item/wardrobe/virologist(src)
|
||||
new /obj/item/wardrobe/virologist(src)
|
||||
new /obj/item/wardrobe/virologist(src)
|
||||
return
|
||||
@@ -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
|
||||
@@ -244,7 +244,7 @@
|
||||
return
|
||||
|
||||
|
||||
//What the fuck is this code
|
||||
//What the fuck is this code Looks to be the parrying code. If you're grabbing someone, it might hit them instead... or something.--SkyMarshal
|
||||
/mob/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (user.intent != "harm")
|
||||
if (istype(src.l_hand,/obj/item/latexballon) && src.l_hand:air_contents && is_sharp(W))
|
||||
@@ -494,4 +494,10 @@
|
||||
istype(W, /obj/item/weapon/zippo) && W:lit || \
|
||||
istype(W, /obj/item/weapon/match) && W:lit || \
|
||||
istype(W, /obj/item/clothing/mask/cigarette) && W:lit \
|
||||
)
|
||||
)
|
||||
|
||||
/obj/item/weapon/paper/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature >= 373.15)
|
||||
for(var/mob/M in viewers(5, src))
|
||||
M << "\red \the [src] burns up."
|
||||
del(src)
|
||||
@@ -194,7 +194,7 @@
|
||||
user.update_clothing()
|
||||
return
|
||||
|
||||
/obj/item/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
/obj/item/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/packageWrap))
|
||||
if(istype(src,/obj/item/weapon/storage) && istype(src.loc, /mob)) //Put it into the bag
|
||||
return
|
||||
@@ -212,6 +212,20 @@
|
||||
|
||||
src.loc = P
|
||||
O.amount -= 1
|
||||
else if(istype(W,/obj/item/wardrobe))
|
||||
var/obj/item/wardrobe/I = W
|
||||
for (var/obj/O in locate(src.x,src.y,src.z))
|
||||
if (I.contents.len < 20)
|
||||
if(istype(O,/obj/item/wardrobe))
|
||||
continue
|
||||
if(O.anchored)
|
||||
continue
|
||||
I.contents += O;
|
||||
else
|
||||
user << "\blue The wardrobe is full."
|
||||
return
|
||||
user << "\blue You pick up all the items."
|
||||
I.update_icon()
|
||||
|
||||
/obj/item/attack_self(mob/user as mob)
|
||||
..()
|
||||
|
||||
@@ -22,7 +22,10 @@ ZIPPO
|
||||
|
||||
|
||||
process()
|
||||
while(src.lit == 1)
|
||||
var/turf/location = get_turf(src)
|
||||
if(src.lit == 1)
|
||||
if(location)
|
||||
location.hotspot_expose(700, 5)
|
||||
src.smoketime--
|
||||
sleep(10)
|
||||
if(src.smoketime < 1)
|
||||
@@ -31,15 +34,18 @@ ZIPPO
|
||||
processing_objects.Remove(src)
|
||||
return
|
||||
|
||||
|
||||
dropped(mob/user as mob)
|
||||
if(src.lit == 1)
|
||||
src.lit = -1
|
||||
src.damtype = "brute"
|
||||
src.icon_state = "match_burnt"
|
||||
src.item_state = "cigoff"
|
||||
src.name = "Burnt match"
|
||||
src.desc = "A match that has been burnt"
|
||||
spawn(10)
|
||||
var/turf/location = get_turf(src)
|
||||
location.hotspot_expose(700, 5)
|
||||
src.lit = -1
|
||||
src.damtype = "brute"
|
||||
src.icon_state = "match_burnt"
|
||||
src.item_state = "cigoff"
|
||||
src.name = "Burnt match"
|
||||
src.desc = "A match that has been burnt"
|
||||
processing_objects.Remove(src)
|
||||
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()
|
||||
@@ -21,11 +21,45 @@ CLIPBOARDS
|
||||
src.overlays += "paper_words"
|
||||
return
|
||||
|
||||
/obj/item/weapon/paper/process()
|
||||
if(iteration < 5)
|
||||
var/turf/location = src.loc
|
||||
if(istype(location, /mob/))
|
||||
var/mob/M = location
|
||||
if(M.l_hand == src || M.r_hand == src)
|
||||
location = get_turf(M)
|
||||
if (istype(location, /turf))
|
||||
location.hotspot_expose(700, 5)
|
||||
iteration++
|
||||
else
|
||||
for(var/mob/M in viewers(5, get_turf(src)))
|
||||
M << "\red \the [src] burns up."
|
||||
if(istype(src.loc,/mob))
|
||||
var/mob/M = src.loc
|
||||
M.total_luminosity -= 8
|
||||
else
|
||||
src.sd_SetLuminosity(0)
|
||||
processing_objects.Remove(src)
|
||||
del(src)
|
||||
|
||||
/obj/item/weapon/paper/update_icon() //derp.
|
||||
if(src.info)
|
||||
src.overlays += "paper_words"
|
||||
if(src.burning)
|
||||
src.overlays += "paper_fire"
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/paper/pickup(mob/user)
|
||||
if(burning)
|
||||
src.sd_SetLuminosity(0)
|
||||
user.total_luminosity += 8
|
||||
|
||||
/obj/item/weapon/paper/dropped(mob/user)
|
||||
if(burning)
|
||||
user.total_luminosity -= 8
|
||||
src.sd_SetLuminosity(8)
|
||||
|
||||
/obj/item/weapon/paper/examine()
|
||||
set src in view()
|
||||
|
||||
@@ -125,6 +159,14 @@ CLIPBOARDS
|
||||
|
||||
src.info = t
|
||||
else
|
||||
if(is_burn(P))
|
||||
for(var/mob/M in viewers(5, get_turf(src)))
|
||||
M << "\red [user] sets \the [src] on fire."
|
||||
user.total_luminosity += 8
|
||||
burning = 1
|
||||
processing_objects.Add(src)
|
||||
update_icon()
|
||||
return
|
||||
if(istype(P, /obj/item/weapon/stamp))
|
||||
if ((!in_range(src, usr) && src.loc != user && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != user && user.equipped() != P))
|
||||
return
|
||||
|
||||
@@ -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
|
||||
@@ -14,7 +14,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
|
||||
frequency = 1459 //common chat
|
||||
traitor_frequency = 0 //tune to frequency to unlock traitor supplies
|
||||
obj/item/device/radio/patch_link = null
|
||||
obj/item/weapon/syndicate_uplink/traitorradio = null
|
||||
obj/item/device/uplink/radio/traitorradio = null
|
||||
wires = WIRE_SIGNAL | WIRE_RECEIVE | WIRE_TRANSMIT
|
||||
b_stat = 0
|
||||
broadcasting = 0
|
||||
@@ -135,7 +135,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
|
||||
usr.machine = null
|
||||
usr << browse(null, "window=radio")
|
||||
// now transform the regular radio, into a (disguised)syndicate uplink!
|
||||
var/obj/item/weapon/syndicate_uplink/T = traitorradio
|
||||
var/obj/item/device/uplink/radio/T = traitorradio
|
||||
var/obj/item/device/radio/R = src
|
||||
R.loc = T
|
||||
T.loc = usr
|
||||
|
||||
@@ -230,15 +230,17 @@ proc/trigger_armed_response_team()
|
||||
equip_if_possible(new /obj/item/weapon/storage/firstaid/regular(src), slot_in_backpack)
|
||||
|
||||
var/obj/item/weapon/card/id/W = new(src)
|
||||
W.name = "[real_name]'s ID Card"
|
||||
W.name = "[real_name]'s ID Card (Emergency Response Team)"
|
||||
W.icon_state = "centcom"
|
||||
if(leader_selected)
|
||||
W.name = "[real_name]'s ID Card (Emergency Response Team Leader)"
|
||||
W.access = get_access("Captain")
|
||||
W.access += list(access_cent_teleporter)
|
||||
W.assignment = "Emergency Response Team Leader"
|
||||
else
|
||||
W.access = get_access("Head of Personnel")
|
||||
W.assignment = "Emergency Response Team"
|
||||
W.access += list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage)//Let's add their alloted CentCom access.
|
||||
W.assignment = "Emergency Response Team"
|
||||
W.registered = real_name
|
||||
equip_if_possible(W, slot_wear_id)
|
||||
|
||||
|
||||
@@ -21,16 +21,9 @@
|
||||
/obj/structure/closet/secure_closet/miner/New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/device/analyzer(src)
|
||||
new /obj/item/device/radio/headset/headset_mine(src)
|
||||
new /obj/item/clothing/under/rank/miner(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/weapon/satchel(src)
|
||||
new /obj/item/device/flashlight/lantern(src)
|
||||
new /obj/item/weapon/shovel(src)
|
||||
new /obj/item/weapon/pickaxe(src)
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
new /obj/item/wardrobe/mining(src)
|
||||
new /obj/item/wardrobe/mining(src)
|
||||
new /obj/item/wardrobe/mining(src)
|
||||
|
||||
|
||||
/**********************Shuttle Computer**************************/
|
||||
|
||||
@@ -201,4 +201,19 @@
|
||||
for(var/t in organs)
|
||||
if (istype(organs[text("[]", t)], /datum/organ/external))
|
||||
L += organs[text("[]", t)]
|
||||
return L
|
||||
return L
|
||||
|
||||
/mob/living/carbon/proc/UpdateDamage()
|
||||
|
||||
if (!(istype(src, /mob/living/carbon/human))) //Added by Strumpetplaya - Invincible Monkey Fix
|
||||
return //Possibly helps with other invincible mobs like Aliens?
|
||||
var/list/L = list( )
|
||||
for(var/t in organs)
|
||||
if (istype(organs[text("[]", t)], /datum/organ/external))
|
||||
L += organs[text("[]", t)]
|
||||
bruteloss = 0
|
||||
fireloss = 0
|
||||
for(var/datum/organ/external/O in L)
|
||||
bruteloss += O.get_damage_brute()
|
||||
fireloss += O.get_damage_fire()
|
||||
return
|
||||
@@ -54,7 +54,6 @@
|
||||
|
||||
var/mutantrace = null
|
||||
|
||||
var/list/organs = list()
|
||||
var/bloodloss = 0
|
||||
var/debug_leftarm
|
||||
var/debug_lefthand
|
||||
|
||||
@@ -253,10 +253,10 @@
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
var/datum/air_group/breath
|
||||
// HACK NEED CHANGING LATER
|
||||
if(health < config.health_threshold_dead)
|
||||
if(health < (config.health_threshold_dead + 50)) //PEOPLE ARE NOT DYING, DAMMIT
|
||||
losebreath++
|
||||
|
||||
if(losebreath>0) //Suffocating so do not take a breath
|
||||
if(losebreath>0 && prob(90)) //Suffocating so do not take a breath
|
||||
losebreath--
|
||||
if (prob(75)) //High chance of gasping for air
|
||||
spawn emote("gasp")
|
||||
|
||||
@@ -22,6 +22,40 @@
|
||||
if(name == "monkey")
|
||||
name = text("monkey ([rand(1, 1000)])")
|
||||
real_name = name
|
||||
var/datum/organ/external/chest/chest = new /datum/organ/external/chest( src )
|
||||
chest.owner = src
|
||||
var/datum/organ/external/groin/groin = new /datum/organ/external/groin( src )
|
||||
groin.owner = src
|
||||
var/datum/organ/external/head/head = new /datum/organ/external/head( src )
|
||||
head.owner = src
|
||||
var/datum/organ/external/l_arm/l_arm = new /datum/organ/external/l_arm( src )
|
||||
l_arm.owner = src
|
||||
var/datum/organ/external/r_arm/r_arm = new /datum/organ/external/r_arm( src )
|
||||
r_arm.owner = src
|
||||
var/datum/organ/external/l_hand/l_hand = new /datum/organ/external/l_hand( src )
|
||||
l_hand.owner = src
|
||||
var/datum/organ/external/r_hand/r_hand = new /datum/organ/external/r_hand( src )
|
||||
r_hand.owner = src
|
||||
var/datum/organ/external/l_leg/l_leg = new /datum/organ/external/l_leg( src )
|
||||
l_leg.owner = src
|
||||
var/datum/organ/external/r_leg/r_leg = new /datum/organ/external/r_leg( src )
|
||||
r_leg.owner = src
|
||||
var/datum/organ/external/l_foot/l_foot = new /datum/organ/external/l_foot( src )
|
||||
l_foot.owner = src
|
||||
var/datum/organ/external/r_foot/r_foot = new /datum/organ/external/r_foot( src )
|
||||
r_foot.owner = src
|
||||
|
||||
organs["chest"] = chest
|
||||
organs["groin"] = groin
|
||||
organs["head"] = head
|
||||
organs["l_arm"] = l_arm
|
||||
organs["r_arm"] = r_arm
|
||||
organs["l_hand"] = l_hand
|
||||
organs["r_hand"] = r_hand
|
||||
organs["l_leg"] = l_leg
|
||||
organs["r_leg"] = r_leg
|
||||
organs["l_foot"] = l_foot
|
||||
organs["r_foot"] = r_foot
|
||||
..()
|
||||
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)
|
||||
|
||||
@@ -258,6 +258,8 @@
|
||||
job_master.EquipRank(character, rank, 1)
|
||||
EquipCustomItems(character)
|
||||
character.loc = pick(latejoin)
|
||||
character.be_syndicate = src.preferences.be_special & BE_TRAITOR
|
||||
ticker.mode.latespawn(character)
|
||||
AnnounceArrival(character, rank)
|
||||
|
||||
if(character.mind.assigned_role != "Cyborg")
|
||||
|
||||
@@ -232,9 +232,7 @@ var/global/list/uneatable = list(
|
||||
if (istype(A,/mob/living))//Mobs get gibbed
|
||||
gain = 20
|
||||
if(istype(A,/mob/living/carbon/human))
|
||||
if(A:mind)
|
||||
if((A:mind:assigned_role == "Station Engineer") || (A:mind:assigned_role == "Chief Engineer") )
|
||||
gain = 100
|
||||
gain = 100
|
||||
spawn()
|
||||
A:gib()
|
||||
sleep(1)
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
|
||||
|
||||
// called by datum/sun/calc_position() as sun's angle changes
|
||||
proc/set_angle(var/angle)
|
||||
sun_angle = angle
|
||||
proc/set_angle()
|
||||
var/angle = sun.angle
|
||||
|
||||
//set icon dir to show sun illumination
|
||||
dir = turn(NORTH, -angle - 22.5) // 22.5 deg bias ensures, e.g. 67.5-112.5 is EAST
|
||||
|
||||
@@ -1 +1 @@
|
||||
traitor
|
||||
Extend-A-Traitormongous
|
||||
|
||||
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
@@ -5623,7 +5623,7 @@
|
||||
"ceg" = (/obj/structure/table,/obj/machinery/light/lamp{pixel_x = 4; pixel_y = 1},/turf/unsimulated/floor{icon = 'shuttle.dmi'; icon_state = "floor4"},/area/syndicate_station/start)
|
||||
"ceh" = (/obj/machinery/computer/syndicate_station,/turf/unsimulated/floor{icon = 'shuttle.dmi'; icon_state = "floor4"},/area/syndicate_station/start)
|
||||
"cei" = (/obj/structure/table,/obj/item/weapon/pen/sleepypen,/obj/item/weapon/paper,/turf/unsimulated/floor{icon = 'shuttle.dmi'; icon_state = "floor4"},/area/syndicate_station/start)
|
||||
"cej" = (/obj/machinery/telecomms/allinone{intercept = 1},/turf/unsimulated/floor{icon = 'shuttle.dmi'; icon_state = "floor4"},/area/syndicate_station/start)
|
||||
"cej" = (/obj/machinery/telecomms/allinone{intercept = 1; nuke = 1},/turf/unsimulated/floor{icon = 'shuttle.dmi'; icon_state = "floor4"},/area/syndicate_station/start)
|
||||
"cek" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon = 'shuttle.dmi'; icon_state = "floor4"},/area/syndicate_station/start)
|
||||
"cel" = (/obj/structure/table,/obj/item/weapon/storage/donkpocket_kit{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon = 'shuttle.dmi'; icon_state = "floor4"},/area/syndicate_station/start)
|
||||
"cem" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{icon = 'shuttle.dmi'; icon_state = "floor4"},/area/syndicate_station/start)
|
||||
@@ -9588,4 +9588,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
"}
|
||||
"}
|
||||
@@ -304,7 +304,7 @@
|
||||
"afR" = (/obj/item/weapon/hand_tele,/obj/structure/table/woodentable,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
|
||||
"afS" = (/obj/item/weapon/soap/deluxe,/obj/structure/table/woodentable,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
|
||||
"afT" = (/obj/item/weapon/camera_test,/obj/item/weapon/storage/photo_album{pixel_y = -10},/obj/structure/table/woodentable,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
|
||||
"afU" = (/obj/machinery/recharger{pixel_y = 4},/obj/item/weapon/melee/chainofcommand,/obj/machinery/light_switch{pixel_y = 24},/obj/structure/table/woodentable,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
|
||||
"afU" = (/obj/machinery/recharger{pixel_y = 4},/obj/machinery/light_switch{pixel_y = 24},/obj/structure/table/woodentable,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
|
||||
"afV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
|
||||
"afW" = (/obj/machinery/light/lamp{pixel_x = 4; pixel_y = 1},/obj/structure/table/woodentable,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
|
||||
"afX" = (/obj/machinery/computer/card,/obj/item/weapon/card/id/captains_spare,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
|
||||
@@ -4466,7 +4466,7 @@
|
||||
"bHT" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
|
||||
"bHU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/tdome)
|
||||
"bHV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/tdome)
|
||||
"bHW" = (/obj/structure/rack,/obj/item/clothing/head/that,/obj/item/clothing/under/suit_jacket,/obj/item/clothing/suit/wcoat,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/holding)
|
||||
"bHW" = (/obj/structure/rack,/obj/item/clothing/head/that,/obj/item/clothing/under/suit_jacket,/obj/item/clothing/suit/storage/wcoat,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/holding)
|
||||
"bHX" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
|
||||
"bHY" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
|
||||
"bHZ" = (/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
|
||||
|
||||