Merge pull request #319 from SkyMarshal/master

Wardrobe stuff, burning paper, filing cabinets, copiers, bugfixes for telecomms and nerfed electrical storms.
This commit is contained in:
Albert Iordache
2012-01-28 02:13:02 -08:00
84 changed files with 3186 additions and 820 deletions
+18 -6
View File
@@ -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"
+1
View File
@@ -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
+337
View File
@@ -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
+54
View File
@@ -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
+572
View File
@@ -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)
+10 -9
View File
@@ -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)
+2
View File
@@ -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)
+1 -1
View File
@@ -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)
+1
View File
@@ -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)
+14
View File
@@ -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."
+54
View File
@@ -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
+3 -1
View File
@@ -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
+1
View File
@@ -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"
+1 -19
View File
@@ -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."
+26 -8
View File
@@ -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
+21 -1
View File
@@ -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
+4
View File
@@ -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,
+4 -2
View File
@@ -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
View File
@@ -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>"
+3
View File
@@ -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
View File
@@ -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>"
+43
View File
@@ -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 -1
View File
@@ -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>"
+2
View File
@@ -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>"
+3
View File
@@ -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)
+8 -1
View File
@@ -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
+22 -9
View File
@@ -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.
+3
View File
@@ -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)
+280 -20
View File
@@ -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()
+51 -3
View File
@@ -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))
+22 -20
View File
@@ -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 ---
+5 -2
View File
@@ -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
+3 -1
View File
@@ -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)
+1 -1
View File
@@ -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
+10 -20
View File
@@ -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 -3
View File
@@ -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
+2 -28
View File
@@ -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
+24 -67
View File
@@ -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
+82 -35
View File
@@ -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
+1 -1
View File
@@ -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
-245
View File
@@ -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
+8 -2
View File
@@ -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)
+15 -1
View File
@@ -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
-255
View File
@@ -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
+2 -2
View File
@@ -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
+4 -2
View File
@@ -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)
+3 -10
View File
@@ -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**************************/
+16 -1
View File
@@ -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
+2 -2
View File
@@ -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
+35
View File
@@ -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)
+2 -2
View File
@@ -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
View File
@@ -1 +1 @@
traitor
Extend-A-Traitormongous
Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

+2 -2
View File
@@ -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
"}
"}
+2 -2
View File
@@ -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)