mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-29 19:42:42 +00:00
Merge branch 'master' of git://github.com/Baystation12/Baystation12
Conflicts: code/game/objects/closets/secure/engineering.dm maps/tgstation.2.0.8.dmm Signed-off-by: CaelAislinn <cael_aislinn@yahoo.com.au>
This commit is contained in:
@@ -187,7 +187,17 @@ A list of items and costs is stored under the datum of every game mode, alongsid
|
||||
|
||||
//A Syndicate uplink disguised as a portable radio
|
||||
/obj/item/device/uplink/radio/implanted
|
||||
uses = 5
|
||||
New()
|
||||
..()
|
||||
uses = 5
|
||||
return
|
||||
|
||||
explode()
|
||||
var/obj/item/weapon/implant/uplink/U = src.loc
|
||||
var/mob/living/A = U.imp_in
|
||||
A.gib()
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/device/uplink/radio
|
||||
name = "ship bounced radio"
|
||||
@@ -228,12 +238,10 @@ A list of items and costs is stored under the datum of every game mode, alongsid
|
||||
if (usr.stat || usr.restrained())
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = usr
|
||||
|
||||
if (!( istype(H, /mob/living/carbon/human)))
|
||||
if (!( istype(usr, /mob/living/carbon/human)))
|
||||
return 1
|
||||
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)) || istype(src.loc,/obj/item/weapon/implant/uplink)))
|
||||
usr.machine = src
|
||||
|
||||
if(href_list["buy_item"])
|
||||
@@ -241,6 +249,9 @@ A list of items and costs is stored under the datum of every game mode, alongsid
|
||||
var/path_obj = text2path(href_list["buy_item"])
|
||||
var/item = new path_obj(get_turf(src.loc))
|
||||
var/mob/A = src.loc
|
||||
if(istype(src.loc,/obj/item/weapon/implant/uplink))
|
||||
var/obj/item/weapon/implant/uplink/U = src.loc
|
||||
A = U.imp_in
|
||||
if(ismob(A) && !(locate(item) in NotInHand)) //&& !istype(item, /obj/spawner))
|
||||
if(!A.r_hand)
|
||||
item:loc = A
|
||||
@@ -295,12 +306,13 @@ A list of items and costs is stored under the datum of every game mode, alongsid
|
||||
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)
|
||||
attack_self(usr)
|
||||
// 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()
|
||||
|
||||
78
code/WorkInProgress/SkyMarshal/wardrobes.dm
Normal file → Executable file
78
code/WorkInProgress/SkyMarshal/wardrobes.dm
Normal file → Executable file
@@ -1,19 +1,22 @@
|
||||
/obj/item/wardrobe
|
||||
name = "wardrobe"
|
||||
desc = "Seems to have everything I need for my job in it, sweet."
|
||||
desc = "A standard-issue bag for clothing and equipment. Usually comes sealed, stocked with everything you need for a particular job."
|
||||
icon = 'suits.dmi'
|
||||
icon_state = "wardrobe"
|
||||
icon_state = "wardrobe_sealed"
|
||||
item_state = "wardrobe"
|
||||
w_class = 4
|
||||
layer = 2.9
|
||||
var
|
||||
descriptor = "various clothing."
|
||||
descriptor = "various clothing"
|
||||
seal_torn = 0
|
||||
|
||||
attack_self(mob/user)
|
||||
if(!contents.len)
|
||||
user << "It's empty!"
|
||||
else
|
||||
user.visible_message("\blue [user] unwraps the clothing from the [src]")
|
||||
user.visible_message("\blue [user] unwraps the clothing from the [src][seal_torn ? "" : ", tearing the seal"].")
|
||||
seal_torn = 1
|
||||
|
||||
for(var/obj/item/I in src)
|
||||
I.loc = get_turf(src)
|
||||
update_icon()
|
||||
@@ -26,8 +29,11 @@
|
||||
if(istype(I, /obj/item/weapon/grab))
|
||||
return
|
||||
user.drop_item()
|
||||
|
||||
if(I)
|
||||
I.loc = src.loc
|
||||
I.loc = src
|
||||
|
||||
update_icon()
|
||||
else
|
||||
user << "\red There's not enough space to fit that!"
|
||||
return
|
||||
@@ -35,7 +41,11 @@
|
||||
examine()
|
||||
set src in usr
|
||||
..()
|
||||
usr << "It claims to contain [contents.len ? descriptor : descriptor + "... but it looks empty"]"
|
||||
usr << "It claims to contain [contents.len ? descriptor : descriptor + "... but it looks empty"]."
|
||||
if(seal_torn && !contents.len)
|
||||
usr << "The seal on the bag is broken."
|
||||
else
|
||||
usr << "The seal on the bag is[seal_torn ? ", however, not intact" : " intact"]."
|
||||
return
|
||||
|
||||
update_icon()
|
||||
@@ -52,7 +62,7 @@
|
||||
|
||||
/obj/item/wardrobe/assistant
|
||||
name = "assistant wardrobe"
|
||||
descriptor = "clothing for an assistant"
|
||||
descriptor = "clothing and basic equipment for an assistant"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -66,7 +76,7 @@
|
||||
|
||||
/obj/item/wardrobe/chief_engineer
|
||||
name = "Chief Engineer wardrobe"
|
||||
descriptor = "clothing for a Chief Engineer"
|
||||
descriptor = "clothing and basic equipment for a Chief Engineer"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -90,7 +100,7 @@
|
||||
|
||||
/obj/item/wardrobe/engineer
|
||||
name = "Station Engineer wardrobe"
|
||||
descriptor = "clothing for a Station Engineer"
|
||||
descriptor = "clothing and basic equipment for a Station Engineer"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -111,7 +121,7 @@
|
||||
|
||||
/obj/item/wardrobe/atmos
|
||||
name = "Atmospheric Technician wardrobe"
|
||||
descriptor = "clothing for an Atmospheric Technician"
|
||||
descriptor = "clothing and basic equipment for an Atmospheric Technician"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -126,7 +136,7 @@
|
||||
|
||||
/obj/item/wardrobe/roboticist
|
||||
name = "Roboticist wardrobe"
|
||||
descriptor = "clothing for a Roboticist"
|
||||
descriptor = "clothing and basic equipment for a Roboticist"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -143,7 +153,7 @@
|
||||
|
||||
/obj/item/wardrobe/chaplain
|
||||
name = "Chaplain wardrobe"
|
||||
descriptor = "clothing for a Chaplain"
|
||||
descriptor = "clothing and basic equipment for a Chaplain"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -158,7 +168,7 @@
|
||||
|
||||
/obj/item/wardrobe/captain
|
||||
name = "Captain wardrobe"
|
||||
descriptor = "clothing for a Captain"
|
||||
descriptor = "clothing and basic equipment for a Captain"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -181,7 +191,7 @@
|
||||
|
||||
/obj/item/wardrobe/hop
|
||||
name = "Head of Personnel wardrobe"
|
||||
descriptor = "clothing for a Head of Personnel"
|
||||
descriptor = "clothing and basic equipment for a Head of Personnel"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -202,7 +212,7 @@
|
||||
|
||||
/obj/item/wardrobe/cmo
|
||||
name = "Chief Medical Officer wardrobe"
|
||||
descriptor = "clothing for a Chief Medical Officer"
|
||||
descriptor = "clothing and basic equipment for a Chief Medical Officer"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -222,7 +232,7 @@
|
||||
|
||||
/obj/item/wardrobe/doctor
|
||||
name = "Medical Doctor wardrobe"
|
||||
descriptor = "clothing for a Medical Doctor"
|
||||
descriptor = "clothing and basic equipment for a Medical Doctor"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -242,7 +252,7 @@
|
||||
|
||||
/obj/item/wardrobe/geneticist
|
||||
name = "Geneticist wardrobe"
|
||||
descriptor = "clothing for a Geneticist"
|
||||
descriptor = "clothing and basic equipment for a Geneticist"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -258,7 +268,7 @@
|
||||
|
||||
/obj/item/wardrobe/virologist
|
||||
name = "Virologist wardrobe"
|
||||
descriptor = "clothing for a Virologist"
|
||||
descriptor = "clothing and basic equipment for a Virologist"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -275,7 +285,7 @@
|
||||
|
||||
/obj/item/wardrobe/rd
|
||||
name = "Research Director wardrobe"
|
||||
descriptor = "clothing for a Research Director"
|
||||
descriptor = "clothing and basic equipment for a Research Director"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -296,7 +306,7 @@
|
||||
|
||||
/obj/item/wardrobe/scientist
|
||||
name = "Scientist wardrobe"
|
||||
descriptor = "clothing for a Scientist"
|
||||
descriptor = "clothing and basic equipment for a Scientist"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -313,7 +323,7 @@
|
||||
|
||||
/obj/item/wardrobe/chemist
|
||||
name = "Chemist wardrobe"
|
||||
descriptor = "clothing for a Chemist"
|
||||
descriptor = "clothing and basic equipment for a Chemist"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -328,7 +338,7 @@
|
||||
|
||||
/obj/item/wardrobe/hos
|
||||
name = "Head of Security wardrobe"
|
||||
descriptor = "clothing for a Head of Security"
|
||||
descriptor = "clothing and basic equipment for a Head of Security"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -351,7 +361,7 @@
|
||||
|
||||
/obj/item/wardrobe/warden
|
||||
name = "Warden wardrobe"
|
||||
descriptor = "clothing for a Warden"
|
||||
descriptor = "clothing and basic equipment for a Warden"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -374,7 +384,7 @@
|
||||
|
||||
/obj/item/wardrobe/detective
|
||||
name = "Detective wardrobe"
|
||||
descriptor = "clothing for a Detective"
|
||||
descriptor = "clothing and basic equipment for a Detective"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -396,7 +406,7 @@
|
||||
|
||||
/obj/item/wardrobe/officer
|
||||
name = "Security Officer wardrobe"
|
||||
descriptor = "clothing for a Security Officer"
|
||||
descriptor = "clothing and basic equipment for a Security Officer"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -424,7 +434,7 @@
|
||||
|
||||
/obj/item/wardrobe/bartender
|
||||
name = "Bartender wardrobe"
|
||||
descriptor = "clothing for a Bartender"
|
||||
descriptor = "clothing and basic equipment for a Bartender"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -442,7 +452,7 @@
|
||||
|
||||
/obj/item/wardrobe/chef
|
||||
name = "Chef wardrobe"
|
||||
descriptor = "clothing for a Chef"
|
||||
descriptor = "clothing and basic equipment for a Chef"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -457,7 +467,7 @@
|
||||
|
||||
/obj/item/wardrobe/hydro
|
||||
name = "Botanist wardrobe"
|
||||
descriptor = "clothing for a Botanist"
|
||||
descriptor = "clothing and basic equipment for a Botanist"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -473,7 +483,7 @@
|
||||
|
||||
/obj/item/wardrobe/qm
|
||||
name = "Quartermaster wardrobe"
|
||||
descriptor = "clothing for a Quartermaster"
|
||||
descriptor = "clothing and basic equipment for a Quartermaster"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -489,7 +499,7 @@
|
||||
|
||||
/obj/item/wardrobe/cargo_tech
|
||||
name = "Cargo Technician wardrobe"
|
||||
descriptor = "clothing for a Cargo Technician"
|
||||
descriptor = "clothing and basic equipment for a Cargo Technician"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -503,7 +513,7 @@
|
||||
|
||||
/obj/item/wardrobe/mining
|
||||
name = "Shaft Miner wardrobe"
|
||||
descriptor = "clothing for a Shaft Miner"
|
||||
descriptor = "clothing and basic equipment for a Shaft Miner"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -523,7 +533,7 @@
|
||||
|
||||
/obj/item/wardrobe/janitor
|
||||
name = "Janitor wardrobe"
|
||||
descriptor = "clothing for a Janitor"
|
||||
descriptor = "clothing and basic equipment for a Janitor"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -536,7 +546,7 @@
|
||||
|
||||
/obj/item/wardrobe/librarian
|
||||
name = "Librarian wardrobe"
|
||||
descriptor = "clothing for a Librarian"
|
||||
descriptor = "clothing and basic equipment for a Librarian"
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -549,7 +559,7 @@
|
||||
|
||||
/obj/item/wardrobe/lawyer
|
||||
name = "Lawyer wardrobe"
|
||||
descriptor = "clothing for a Lawyer"
|
||||
descriptor = "clothing and basic equipment for a Lawyer"
|
||||
|
||||
New()
|
||||
..()
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
speak_chance = 1
|
||||
turns_per_move = 15
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
response_help = "pets "
|
||||
response_disarm = "gently pushes aside "
|
||||
response_harm = "kicks "
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "kicks"
|
||||
var/max_nutrition = 100 // different animals get hungry faster, basically number of 5-second steps from full to starving (60 == 5 minutes)
|
||||
var/nutrition_step // cycle step in nutrition system
|
||||
var/obj/movement_target // eating-ing target
|
||||
@@ -17,6 +17,9 @@
|
||||
if(!nutrition)
|
||||
nutrition = max_nutrition * 0.33 // at 1/3 nutrition
|
||||
|
||||
reagents = new()
|
||||
reagents.my_atom = src
|
||||
|
||||
Life()
|
||||
..()
|
||||
|
||||
@@ -38,12 +41,14 @@
|
||||
if(nutrition >= max_nutrition)
|
||||
return
|
||||
|
||||
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
|
||||
if((movement_target) && !(isturf(movement_target.loc)))
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
a_intent = "help"
|
||||
turns_per_move = initial(turns_per_move)
|
||||
if( !movement_target || !(movement_target.loc in oview(src, 3)) )
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
a_intent = "help"
|
||||
turns_per_move = initial(turns_per_move)
|
||||
for(var/obj/item/weapon/reagent_containers/food/snacks/S in oview(src,3))
|
||||
if(isturf(S.loc) || ishuman(S.loc))
|
||||
movement_target = S
|
||||
|
||||
@@ -83,7 +83,7 @@ obj/machinery/computer/forensic_scanning
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/book/manual/detective(get_turf(src)) //DEEEERP
|
||||
new /obj/item/weapon/book/manual/detective(get_turf(src))
|
||||
return
|
||||
|
||||
|
||||
@@ -187,7 +187,7 @@ obj/machinery/computer/forensic_scanning
|
||||
if(files && files.len)
|
||||
temp = "<b>Criminal Evidence Database</b><br><br>"
|
||||
temp += "Consolidated data points:<br>"
|
||||
for(var/i = 1, i < (files.len + 1), i++)
|
||||
for(var/i = 1, i <= files.len, i++)
|
||||
temp += "<a href='?src=\ref[src];operation=record;identifier=[i]'>{Dossier [i]}</a><br>"
|
||||
temp += "<br><a href='?src=\ref[src];operation=card'>{Insert Finger Print Card}</a><br><br><br>"
|
||||
else
|
||||
@@ -197,7 +197,7 @@ obj/machinery/computer/forensic_scanning
|
||||
delete_record(text2num(href_list["delete"]))
|
||||
temp += "<b>Auxiliary Evidence Database</b><br><br>"
|
||||
temp += "This is where anything without fingerprints goes.<br><br>"
|
||||
for(var/i = 1, i < (misc.len + 1), i++)
|
||||
for(var/i = 1, i <= misc.len, i++)
|
||||
var/list/temp_list = misc[i]
|
||||
var/item_name = get_name(temp_list[1])
|
||||
temp += "<a href='?src=\ref[src];operation=auxiliary;identifier=[i]'>{[item_name]}</a><br>"
|
||||
@@ -213,7 +213,7 @@ obj/machinery/computer/forensic_scanning
|
||||
if(stringpercent(prints[num2text(2)]) <= FINGERPRINT_COMPLETE)
|
||||
print_string = "Fingerprints: (80% or higher completion reached)<br>" + prints[num2text(2)] + "<br>"
|
||||
temp += print_string
|
||||
for(var/i = 2, i < (dossier.len + 1), i++)
|
||||
for(var/i = 2, i <= dossier.len, i++)
|
||||
var/list/outputs = dossier[i]
|
||||
var/item_name = get_name(outputs[1])
|
||||
var/list/prints_len = outputs[2]
|
||||
@@ -222,7 +222,7 @@ obj/machinery/computer/forensic_scanning
|
||||
var/list/fibers = outputs[3]
|
||||
if(fibers && fibers.len)
|
||||
var/dat = "[fibers[1]]"
|
||||
for(var/j = 2, j < (fibers.len + 1), j++)
|
||||
for(var/j = 2, j <= fibers.len, j++)
|
||||
dat += ",<br> [fibers[j]]"
|
||||
temp += " Fibers: [dat]<br>"
|
||||
else
|
||||
@@ -231,7 +231,7 @@ obj/machinery/computer/forensic_scanning
|
||||
if(blood && blood.len)
|
||||
var/dat = "[blood[1]]"
|
||||
if(blood.len > 1)
|
||||
for(var/j = 2, j < (blood.len + 1), j++)
|
||||
for(var/j = 2, j <= blood.len, j++)
|
||||
dat += ",<br> [blood[j]]"
|
||||
temp += " Blood: [dat]<br>"
|
||||
else
|
||||
@@ -253,7 +253,7 @@ obj/machinery/computer/forensic_scanning
|
||||
if(stringpercent(prints[num2text(2)]) <= FINGERPRINT_COMPLETE)
|
||||
print_string = "Fingerprints: " + prints[num2text(2)] + "<BR>"
|
||||
P.info += print_string
|
||||
for(var/i = 2, i < (dossier.len + 1), i++)
|
||||
for(var/i = 2, i <= dossier.len, i++)
|
||||
var/list/outputs = dossier[i]
|
||||
var/item_name = get_name(outputs[1])
|
||||
var/list/prints_len = outputs[2]
|
||||
@@ -262,7 +262,7 @@ obj/machinery/computer/forensic_scanning
|
||||
var/list/fibers = outputs[3]
|
||||
if(fibers && fibers.len)
|
||||
var/dat = "[fibers[1]]"
|
||||
for(var/j = 2, j < (fibers.len + 1), j++)
|
||||
for(var/j = 2, j <= fibers.len, j++)
|
||||
dat += ",<br> [fibers[j]]"
|
||||
P.info += " Fibers: [dat]<br>"
|
||||
else
|
||||
@@ -271,7 +271,7 @@ obj/machinery/computer/forensic_scanning
|
||||
if(blood && blood.len)
|
||||
var/dat = "[blood[1]]"
|
||||
if(blood.len > 1)
|
||||
for(var/j = 2, j < (blood.len + 1), j++)
|
||||
for(var/j = 2, j <= blood.len, j++)
|
||||
dat += ",<br> [blood[j]]"
|
||||
P.info += " Blood: [dat]<br>"
|
||||
else
|
||||
@@ -366,7 +366,7 @@ obj/machinery/computer/forensic_scanning
|
||||
scan_data = "<u>[scanning]</u><br><br>"
|
||||
if (scanning.blood_DNA.len)
|
||||
scan_data += "Blood Found:<br>"
|
||||
for(var/i = 1, i < (scanning.blood_DNA.len + 1), i++)
|
||||
for(var/i = 1, i <= scanning.blood_DNA.len, i++)
|
||||
var/list/templist = scanning.blood_DNA[i]
|
||||
scan_data += "-Blood type: [templist[2]]\nDNA: [templist[1]]<br><br>"
|
||||
else
|
||||
@@ -432,11 +432,13 @@ obj/machinery/computer/forensic_scanning
|
||||
updateUsrDialog()
|
||||
|
||||
verb/reset()
|
||||
set name = "Reset Screen"
|
||||
set name = "Reset Database"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
temp = ""
|
||||
add_fingerprint(usr)
|
||||
files = list()
|
||||
misc = list()
|
||||
return
|
||||
|
||||
|
||||
@@ -445,9 +447,10 @@ obj/machinery/computer/forensic_scanning
|
||||
|
||||
|
||||
proc/add_data_scanner(var/obj/item/device/detective_scanner/W)
|
||||
for(var/i = 1, i < (W.stored.len + 1), i++)
|
||||
for(var/i = 1, i <= W.stored.len, i++)
|
||||
var/list/data = W.stored[i]
|
||||
add_data(data[1],1,data[2],data[3],data[4])
|
||||
W.stored = list()
|
||||
|
||||
|
||||
proc/add_data(var/atom/A, var/override = 0, var/tempfingerprints, var/tempsuit_fibers,var/tempblood_DNA)
|
||||
@@ -469,7 +472,7 @@ obj/machinery/computer/forensic_scanning
|
||||
if(!misc)
|
||||
misc = list()
|
||||
if(misc)
|
||||
for(var/i = 1, i < (misc.len + 1), i++) //Lets see if we can find it.
|
||||
for(var/i = 1, i <= misc.len, i++) //Lets see if we can find it.
|
||||
var/list/templist = misc[i]
|
||||
var/check = templist[1]
|
||||
if(check == A) //There it is!
|
||||
@@ -478,14 +481,14 @@ obj/machinery/computer/forensic_scanning
|
||||
if(!fibers)
|
||||
fibers = list()
|
||||
if(A.suit_fibers)
|
||||
for(var/j = 1, j < (A.suit_fibers.len + 1), j++) //Fibers~~~
|
||||
for(var/j = 1, j <= A.suit_fibers.len, j++) //Fibers~~~
|
||||
if(!fibers.Find(A.suit_fibers[j])) //It isn't! Add!
|
||||
fibers += A.suit_fibers[j]
|
||||
var/list/blood = templist[3]
|
||||
if(!blood)
|
||||
blood = list()
|
||||
if(A.blood_DNA)
|
||||
for(var/j = 1, j < (A.blood_DNA.len + 1), j++) //Blood~~~
|
||||
for(var/j = 1, j <= A.blood_DNA.len, j++) //Blood~~~
|
||||
if(!blood.Find(A.blood_DNA[j])) //It isn't! Add!
|
||||
blood += A.blood_DNA[j]
|
||||
var/list/sum_list[3] //Pack it back up!
|
||||
@@ -504,21 +507,21 @@ obj/machinery/computer/forensic_scanning
|
||||
return !merged
|
||||
else //Has prints.
|
||||
var/list/found_prints[A.fingerprints.len + 1]
|
||||
for(var/i = 1, i < (found_prints.len + 1), i++)
|
||||
for(var/i = 1, i <= found_prints.len, i++)
|
||||
found_prints[i] = 0
|
||||
if(!files)
|
||||
files = list()
|
||||
for(var/i = 1, i < (files.len + 1), i++) //Lets see if we can find the owner of the prints
|
||||
for(var/i = 1, i <= files.len, i++) //Lets see if we can find the owner of the prints
|
||||
var/list/perp_list = files[i]
|
||||
var/list/perp_prints = params2list(perp_list[1])
|
||||
var/perp = perp_prints[num2text(1)]
|
||||
var/found2 = 0
|
||||
for(var/m = 1, m < (A.fingerprints.len + 1), m++) //Compare database prints with prints on object.
|
||||
for(var/m = 1, m <= A.fingerprints.len, m++) //Compare database prints with prints on object.
|
||||
var/list/test_prints_list = params2list(A.fingerprints[m])
|
||||
var/checker = test_prints_list[num2text(1)]
|
||||
if(checker == perp) //Found 'em! Merge!
|
||||
found_prints[m] = 1
|
||||
for(var/n = 2, n < (perp_list.len + 1), n++) //Lets see if it is already in the database
|
||||
for(var/n = 2, n <= perp_list.len, n++) //Lets see if it is already in the database
|
||||
var/list/target = perp_list[n]
|
||||
if(target[1] == A) //Found the original object!
|
||||
found2 = 1
|
||||
@@ -526,11 +529,11 @@ obj/machinery/computer/forensic_scanning
|
||||
if(!prints)
|
||||
prints = list()
|
||||
if(A.fingerprints)
|
||||
for(var/j = 1, j < (A.fingerprints.len + 1), j++) //Fingerprints~~~
|
||||
for(var/j = 1, j <= A.fingerprints.len, j++) //Fingerprints~~~
|
||||
var/list/print_test1 = params2list(A.fingerprints[j])
|
||||
var/test_print1 = print_test1[num2text(1)]
|
||||
var/found = 0
|
||||
for(var/k = 1, k <= (prints.len + 1), k++) //Lets see if the print is already in there
|
||||
for(var/k = 1, k <= prints.len, k++) //Lets see if the print is already in there
|
||||
var/list/print_test2 = params2list(prints[k])
|
||||
var/test_print2 = print_test2[num2text(1)]
|
||||
if(test_print2 == test_print1) //It is! Merge!
|
||||
@@ -594,15 +597,15 @@ obj/machinery/computer/forensic_scanning
|
||||
|
||||
|
||||
proc/update_fingerprints() //I am tired, but this updates the master print, which is used to determine completion of a print.
|
||||
for(var/k = 1, k < (files.len + 1), k++)
|
||||
for(var/k = 1, k <= files.len, k++)
|
||||
var/list/perp_list = files[k]
|
||||
var/list/perp_prints = params2list(perp_list[1])
|
||||
var/perp = perp_prints[num2text(1)]
|
||||
var/list/found_prints = list()
|
||||
for(var/i = 2, i < (perp_list.len + 1), i++)
|
||||
for(var/i = 2, i <= perp_list.len, i++)
|
||||
var/list/test_list = perp_list[i]
|
||||
var/list/test_prints = test_list[2]
|
||||
for(var/j = 1, j < (test_prints.len + 1), j++)
|
||||
for(var/j = 1, j <= test_prints.len, j++)
|
||||
var/list/test_list_2 = params2list(test_prints[j])
|
||||
var/test_prints_2 = test_list_2[num2text(1)]
|
||||
if(test_prints_2 == perp)
|
||||
@@ -617,10 +620,10 @@ obj/machinery/computer/forensic_scanning
|
||||
proc/process_card() //I am tired, but this updates the master print from a fingerprint card
|
||||
//which is used to determine completion of a print.
|
||||
if(card.fingerprints)
|
||||
for(var/k = 1, k < (card.fingerprints.len + 1), k++)
|
||||
for(var/k = 1, k <= card.fingerprints.len, k++)
|
||||
var/list/test_prints = params2list(card.fingerprints[k])
|
||||
var/print = test_prints[num2text(1)]
|
||||
for(var/i = 1, i < (files.len + 1), i++)
|
||||
for(var/i = 1, i <= files.len, i++)
|
||||
var/list/test_list = files[i]
|
||||
var/list/perp_prints = params2list(test_list[1])
|
||||
var/perp = perp_prints[num2text(1)]
|
||||
|
||||
@@ -9,6 +9,8 @@ datum/mind
|
||||
var/assigned_role
|
||||
var/special_role
|
||||
|
||||
var/role_alt_title
|
||||
|
||||
var/datum/job/assigned_job
|
||||
|
||||
var/list/datum/objective/objectives = list()
|
||||
@@ -287,6 +289,7 @@ datum/mind
|
||||
var/new_role = input("Select new role", "Assigned role", assigned_role) as null|anything in get_all_jobs()
|
||||
if (!new_role) return
|
||||
assigned_role = new_role
|
||||
role_alt_title = null
|
||||
|
||||
else if (href_list["memory_edit"])
|
||||
var/new_memo = input("Write new memory", "Memory", memory) as null|message
|
||||
@@ -345,7 +348,7 @@ datum/mind
|
||||
new_objective.owner = src
|
||||
new_objective:target = new_target:mind
|
||||
//Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops.
|
||||
new_objective.explanation_text = "[objective_type] [new_target:real_name], the [new_target:mind:assigned_role=="MODE" ? (new_target:mind:special_role) : (new_target:mind:assigned_role)]."
|
||||
new_objective.explanation_text = "[objective_type] [new_target:real_name], the [new_target:mind:assigned_role=="MODE" ? (new_target:mind:special_role) : (new_target:mind:role_alt_title ? new_target:mind:role_alt_title : new_target:mind:assigned_role)]."
|
||||
|
||||
if ("hijack")
|
||||
new_objective = new /datum/objective/hijack
|
||||
|
||||
@@ -356,6 +356,11 @@
|
||||
m_amt = 60
|
||||
g_amt = 20
|
||||
|
||||
/obj/item/device/hacktool/engineer
|
||||
name = "door debugger"
|
||||
desc = "An item of immense complexion, it appears to work by magic."
|
||||
icon_state = "hacktool-g"
|
||||
|
||||
/obj/item/blueprints
|
||||
name = "station blueprints"
|
||||
desc = "Blueprints of the station. There's stamp \"Classified\" and several coffee stains on it."
|
||||
|
||||
@@ -322,7 +322,7 @@
|
||||
containertype = "/obj/structure/closet/crate"
|
||||
containername = "Replacement lights"
|
||||
|
||||
/*/datum/supply_packs/costume
|
||||
/datum/supply_packs/costume
|
||||
name = "Standard Costume crate"
|
||||
contains = list("/obj/item/weapon/storage/backpack/clown",
|
||||
"/obj/item/clothing/shoes/clown_shoes",
|
||||
@@ -340,7 +340,7 @@
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Standard Costumes"
|
||||
access = access_theatre
|
||||
group = "Clothing" */
|
||||
group = "Clothing"
|
||||
|
||||
/datum/supply_packs/wizard
|
||||
name = "Wizard costume"
|
||||
@@ -421,7 +421,8 @@
|
||||
"/obj/item/weapon/reagent_containers/glass/bottle/antitoxin",
|
||||
"/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline",
|
||||
"/obj/item/weapon/reagent_containers/glass/bottle/stoxin",
|
||||
"/obj/item/weapon/storage/syringes")
|
||||
"/obj/item/weapon/storage/syringes",
|
||||
"/obj/item/weapon/reagent_containers/glass/large")
|
||||
cost = 10
|
||||
containertype = "/obj/structure/closet/crate/medical"
|
||||
containername = "Medical crate"
|
||||
|
||||
@@ -168,7 +168,7 @@
|
||||
icon_state = "sec"
|
||||
icon_deny = "sec-deny"
|
||||
req_access_txt = "1"
|
||||
product_paths = "/obj/item/weapon/handcuffs;/obj/item/weapon/flashbang;/obj/item/device/flash;/obj/item/weapon/reagent_containers/food/snacks/donut;/obj/item/weapon/evidencebag"
|
||||
product_paths = "/obj/item/weapon/handcuffs;/obj/item/weapon/flashbang;/obj/item/device/flash;/obj/item/weapon/reagent_containers/food/snacks/donut;/obj/item/weapon/storage/box/evidence"
|
||||
product_amounts = "8;4;5;12;6"
|
||||
product_hidden = "/obj/item/clothing/glasses/sunglasses;/obj/item/kitchen/donut_box"
|
||||
product_hideamt = "2;2"
|
||||
|
||||
@@ -122,6 +122,8 @@
|
||||
if(new_prints)
|
||||
src.fingerprints[new_prints] = text("1=[]&2=[]", md5(H.dna.uni_identity), stringmerge(prints,stars(md5(H.dna.uni_identity), (H.gloves ? rand(10,20) : rand(25,40)))))
|
||||
else if(new_prints == 0)
|
||||
if(!src.fingerprints)
|
||||
src.fingerprints = list(text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40))))
|
||||
src.fingerprints += text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40)))
|
||||
for(var/i = 1, i <= src.fingerprints.len, i++)
|
||||
if(length(src.fingerprints[i]) != 69)
|
||||
@@ -254,8 +256,9 @@
|
||||
if (istype(src, /turf/simulated))
|
||||
var/obj/item/source2 = src
|
||||
source2.blood_DNA = list()
|
||||
var/icon/I = new /icon(source2.icon_old, source2.icon_state)
|
||||
source2.icon = I
|
||||
if(source2.icon_old)
|
||||
var/icon/I = new /icon(source2.icon_old, source2.icon_state)
|
||||
source2.icon = I
|
||||
if(src.fingerprints && src.fingerprints.len)
|
||||
var/done = 0
|
||||
while(!done)
|
||||
@@ -275,6 +278,8 @@
|
||||
break
|
||||
else
|
||||
src.fingerprints[i] = "1=" + prints["1"] + "&2=" + new_print
|
||||
if(!src.fingerprints)
|
||||
src.fingerprints = list()
|
||||
return
|
||||
|
||||
/atom/MouseDrop(atom/over_object as mob|obj|turf|area)
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
APCs += APC
|
||||
|
||||
for(var/obj/machinery/door/airlock/Door in world)
|
||||
if(Door.z == 1)
|
||||
if(Door.z == 1 && !istype(Door,/obj/machinery/door/airlock/secure))
|
||||
Doors += Door
|
||||
|
||||
for(var/obj/machinery/telecomms/processor/T in world)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
for (var/obj/machinery/door/airlock/security/temp_airlock in world)
|
||||
if(istype(get_area(temp_airlock), /area/security/brig))
|
||||
temp_airlock.prison_open()
|
||||
for (var/obj/machinery/door/airlock/glass_security/temp_glassairlock in world)
|
||||
for (var/obj/machinery/door/airlock/glass/glass_security/temp_glassairlock in world)
|
||||
if(istype(get_area(temp_glassairlock), /area/security/brig))
|
||||
temp_glassairlock.prison_open()
|
||||
for (var/obj/machinery/door_timer/temp_timer in world)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
*/
|
||||
|
||||
var/list/DisallowedEvents = list(/datum/event/spaceninja, /datum/event/prisonbreak, /datum/event/immovablerod, /datum/event/gravitationalanomaly, /datum/event/alieninfestation)
|
||||
var/list/DisallowedEvents = list(/datum/event/spaceninja, /datum/event/prisonbreak, /datum/event/immovablerod, /datum/event/gravitationalanomaly, /datum/event/alieninfestation, /datum/event/meteorstorm)
|
||||
var/list/EventTypes = typesof(/datum/event) - /datum/event - DisallowedEvents
|
||||
var/list/OneTimeEvents = list(/datum/event/spacecarp, /datum/event/miniblob)
|
||||
var/datum/event/ActiveEvent = null
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
explanation = "Our knowledge must live on. Make sure at least [acolytes_needed] acolytes escape on the shuttle to spread their work on an another station."
|
||||
if("sacrifice")
|
||||
if(sacrifice_target && sacrifice_target.current)
|
||||
explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.assigned_role]. You will need the sacrifice rune (Hell blood join) and three acolytes to do so."
|
||||
explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.role_alt_title ? sacrifice_target.role_alt_title : sacrifice_target.assigned_role]. You will need the sacrifice rune (Hell blood join) and three acolytes to do so."
|
||||
else
|
||||
explanation = "Free objective."
|
||||
if("eldergod")
|
||||
@@ -307,9 +307,9 @@
|
||||
explanation = "Free objective"
|
||||
else
|
||||
if(sacrificed.Find(sacrifice_target))
|
||||
explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.assigned_role]. \green <b>Success!</b>"
|
||||
explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.role_alt_title ? sacrifice_target.role_alt_title : sacrifice_target.assigned_role]. \green <b>Success!</b>"
|
||||
else if(sacrifice_target && sacrifice_target.current)
|
||||
explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.assigned_role]. \red Failed."
|
||||
explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.role_alt_title ? sacrifice_target.role_alt_title : sacrifice_target.assigned_role]. \red Failed."
|
||||
else
|
||||
explanation = "Sacrifice Unknown, the Unknown whos body was likely gibbed. \red Failed."
|
||||
if("eldergod")
|
||||
|
||||
@@ -48,8 +48,8 @@ Stealth and Camouflage Items;
|
||||
/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/card/emag:4:Cryptographic Sequencer (Limited uses, almost full access);
|
||||
/obj/item/device/hacktool:3:Hacktool (Slow, but stealthy. Unlimited uses);
|
||||
/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;
|
||||
|
||||
@@ -33,7 +33,7 @@ datum/objective/decapitate
|
||||
find_target()
|
||||
..()
|
||||
if(target && target.current)
|
||||
explanation_text = "[target.current.real_name], the [target.assigned_role], has defied us for the last time. Make an example of him, and bring us his severed head."
|
||||
explanation_text = "[target.current.real_name], the [target.role_alt_title ? target.role_alt_title : target.assigned_role], has defied us for the last time. Make an example of him, and bring us his severed head."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
@@ -42,7 +42,7 @@ datum/objective/decapitate
|
||||
find_target_by_role(role, role_type=0)
|
||||
..(role, role_type)
|
||||
if(target && target.current)
|
||||
explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role], has defied us for the last time. Make an example of him, and bring us his severed head."
|
||||
explanation_text = "[target.current.real_name], the [target.role_alt_title ? target.role_alt_title : (!role_type ? target.assigned_role : target.special_role)], has defied us for the last time. Make an example of him, and bring us his severed head."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
@@ -66,7 +66,7 @@ datum/objective/assassinate
|
||||
find_target()
|
||||
..()
|
||||
if(target && target.current)
|
||||
explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]."
|
||||
explanation_text = "Assassinate [target.current.real_name], the [target.role_alt_title ? target.role_alt_title : target.assigned_role]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
@@ -75,7 +75,7 @@ datum/objective/assassinate
|
||||
find_target_by_role(role, role_type=0)
|
||||
..(role, role_type)
|
||||
if(target && target.current)
|
||||
explanation_text = "Assassinate [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]."
|
||||
explanation_text = "Assassinate [target.current.real_name], the [target.role_alt_title ? target.role_alt_title : (!role_type ? target.assigned_role : target.special_role)]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
@@ -96,7 +96,7 @@ datum/objective/mutiny
|
||||
find_target()
|
||||
..()
|
||||
if(target && target.current)
|
||||
explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]."
|
||||
explanation_text = "Assassinate [target.current.real_name], the [target.role_alt_title ? target.role_alt_title : target.assigned_role]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
@@ -105,7 +105,7 @@ datum/objective/mutiny
|
||||
find_target_by_role(role, role_type=0)
|
||||
..(role, role_type)
|
||||
if(target && target.current)
|
||||
explanation_text = "Assassinate [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]."
|
||||
explanation_text = "Assassinate [target.current.real_name], the [target.role_alt_title ? target.role_alt_title : (!role_type ? target.assigned_role : target.special_role)]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
@@ -138,7 +138,7 @@ datum/objective/debrain//I want braaaainssss
|
||||
find_target_by_role(role, role_type=0)
|
||||
..(role, role_type)
|
||||
if(target && target.current)
|
||||
explanation_text = "Steal the brain of [target.current.real_name] the [!role_type ? target.assigned_role : target.special_role]."
|
||||
explanation_text = "Steal the brain of [target.current.real_name] the [target.role_alt_title ? target.role_alt_title : (!role_type ? target.assigned_role : target.special_role)]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
@@ -162,7 +162,7 @@ datum/objective/protect//The opposite of killing a dude.
|
||||
find_target()
|
||||
..()
|
||||
if(target && target.current)
|
||||
explanation_text = "Protect [target.current.real_name], the [target.assigned_role]."
|
||||
explanation_text = "Protect [target.current.real_name], the [target.role_alt_title ? target.role_alt_title : target.assigned_role]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
@@ -171,7 +171,7 @@ datum/objective/protect//The opposite of killing a dude.
|
||||
find_target_by_role(role, role_type=0)
|
||||
..(role, role_type)
|
||||
if(target && target.current)
|
||||
explanation_text = "Protect [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]."
|
||||
explanation_text = "Protect [target.current.real_name], the [target.role_alt_title ? target.role_alt_title : (!role_type ? target.assigned_role : target.special_role)]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
var/datum/objective/assassinate/rev_obj = new
|
||||
rev_obj.owner = rev_mind
|
||||
rev_obj.target = head_mind
|
||||
rev_obj.explanation_text = "Assassinate [head_mind.current.real_name], the [head_mind.assigned_role]."
|
||||
rev_obj.explanation_text = "Assassinate [head_mind.current.real_name], the [head_mind.role_alt_title ? head_mind.role_alt_title : head_mind.assigned_role]."
|
||||
rev_mind.objectives += rev_obj
|
||||
|
||||
equip_traitor(rev_mind.current, 1) //changing how revs get assigned their uplink so they can get PDA uplinks. --NEO
|
||||
@@ -102,7 +102,7 @@
|
||||
var/datum/objective/mutiny/rev_obj = new
|
||||
rev_obj.owner = rev_mind
|
||||
rev_obj.target = head_mind
|
||||
rev_obj.explanation_text = "Assassinate [head_mind.current.real_name], the [head_mind.assigned_role]."
|
||||
rev_obj.explanation_text = "Assassinate [head_mind.current.real_name], the [head_mind.role_alt_title ? head_mind.role_alt_title : head_mind.assigned_role]."
|
||||
rev_mind.objectives += rev_obj
|
||||
|
||||
/datum/game_mode/proc/greet_revolutionary(var/datum/mind/rev_mind, var/you_are=1)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
alt_titles = list("Counselor")
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
@@ -19,7 +20,7 @@
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
|
||||
spawn(0)
|
||||
var/religion_name = "Christianity"
|
||||
var/new_religion = input(H, "You are the Chaplain. Would you like to change your religion? Default is Christianity, in SPACE.", "Name change", religion_name)
|
||||
var/new_religion = input(H, "You are the Chaplain / Councelor. For game mechanics purposes, you need to choose a religion either way. Would you like to change your religion? Default is Christianity, in SPACE.", "Name change", religion_name)
|
||||
|
||||
if ((length(new_religion) == 0) || (new_religion == "Christianity"))
|
||||
new_religion = religion_name
|
||||
|
||||
@@ -22,5 +22,8 @@
|
||||
//Supervisors, who this person answers to directly
|
||||
var/supervisors = ""
|
||||
|
||||
//List of alternate titles, if any
|
||||
var/list/alt_titles
|
||||
|
||||
/datum/job/proc/equip(var/mob/living/carbon/human/H)
|
||||
return 1
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
total_positions = 5
|
||||
spawn_positions = 3
|
||||
supervisors = "the chief medical officer"
|
||||
alt_titles = list("Virologist", "Surgeon")
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
@@ -68,7 +69,7 @@
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
/*
|
||||
/datum/job/virologist
|
||||
title = "Virologist"
|
||||
flag = VIROLOGIST
|
||||
@@ -90,5 +91,5 @@
|
||||
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/virologist(H), H.slot_wear_suit)
|
||||
H.equip_if_possible(new /obj/item/device/flashlight/pen(H), H.slot_s_store)
|
||||
return 1
|
||||
|
||||
*/
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
total_positions = 5
|
||||
spawn_positions = 3
|
||||
supervisors = "the research director"
|
||||
alt_titles = list("Plasma Researcher", "Xenobiologist")
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
|
||||
@@ -68,6 +68,7 @@
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of security"
|
||||
alt_titles = list("Forensic Technician")
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
|
||||
@@ -44,6 +44,10 @@ var/global/datum/controller/occupations/job_master
|
||||
return null
|
||||
|
||||
|
||||
proc/GetAltTitle(mob/new_player/player, rank)
|
||||
return player.preferences.GetAltTitle(GetJob(rank))
|
||||
|
||||
|
||||
proc/AssignRole(var/mob/new_player/player, var/rank, var/latejoin = 0)
|
||||
Debug("Running AR, Player: [player], Rank: [rank], LJ: [latejoin]")
|
||||
if((player) && (player.mind) && (rank))
|
||||
@@ -56,6 +60,7 @@ var/global/datum/controller/occupations/job_master
|
||||
if((job.current_positions < position_limit) || position_limit == -1)
|
||||
Debug("Player: [player] is now Rank: [rank], JCP:[job.current_positions], JPL:[position_limit]")
|
||||
player.mind.assigned_role = rank
|
||||
player.mind.role_alt_title = GetAltTitle(player, rank)
|
||||
unassigned -= player
|
||||
job.current_positions++
|
||||
return 1
|
||||
@@ -83,6 +88,7 @@ var/global/datum/controller/occupations/job_master
|
||||
for(var/mob/new_player/player in world)
|
||||
if((player) && (player.mind))
|
||||
player.mind.assigned_role = null
|
||||
player.mind.role_alt_title = null
|
||||
player.mind.special_role = null
|
||||
SetupOccupations()
|
||||
unassigned = list()
|
||||
@@ -207,12 +213,16 @@ var/global/datum/controller/occupations/job_master
|
||||
else
|
||||
H << "Your job is [rank] and the game just can't handle it! Please report this bug to an administrator."
|
||||
|
||||
spawnId(H,rank)
|
||||
if(H.mind.assigned_role == rank && H.mind.role_alt_title)
|
||||
spawnId(H, rank, H.mind.role_alt_title)
|
||||
else
|
||||
spawnId(H, rank)
|
||||
H << "<B>You are the [rank].</B>"
|
||||
H << "<b>As the [rank] you answer directly to [job.supervisors]. Special circumstances may change this.</b>"
|
||||
H.job = rank
|
||||
if(H.mind)
|
||||
if(H.mind && H.mind.assigned_role != rank)
|
||||
H.mind.assigned_role = rank
|
||||
H.mind.role_alt_title = null
|
||||
|
||||
if(!joined_late && rank != "Tourist")
|
||||
var/obj/S = null
|
||||
@@ -239,8 +249,9 @@ var/global/datum/controller/occupations/job_master
|
||||
return 1
|
||||
|
||||
|
||||
proc/spawnId(var/mob/living/carbon/human/H, rank)
|
||||
proc/spawnId(var/mob/living/carbon/human/H, rank, title)
|
||||
if(!H) return 0
|
||||
if(!title) title = rank
|
||||
var/obj/item/weapon/card/id/C = null
|
||||
switch(rank)
|
||||
if("Cyborg")
|
||||
@@ -251,9 +262,9 @@ var/global/datum/controller/occupations/job_master
|
||||
C = new /obj/item/weapon/card/id(H)
|
||||
if(C)
|
||||
C.registered_name = H.real_name
|
||||
C.assignment = rank
|
||||
C.assignment = title
|
||||
C.name = "[C.registered_name]'s ID Card ([C.assignment])"
|
||||
C.access = get_access(C.assignment)
|
||||
C.access = get_access(rank)
|
||||
H.equip_if_possible(C, H.slot_wear_id)
|
||||
if(!H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_r_store))
|
||||
H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_ears)
|
||||
|
||||
@@ -22,7 +22,6 @@ var/const
|
||||
CMO =(1<<3)
|
||||
DOCTOR =(1<<4)
|
||||
GENETICIST =(1<<5)
|
||||
VIROLOGIST =(1<<6)
|
||||
|
||||
|
||||
CIVILIAN =(1<<2)
|
||||
@@ -74,8 +73,7 @@ var/list/engineering_positions = list(
|
||||
var/list/medical_positions = list(
|
||||
"Chief Medical Officer",
|
||||
"Medical Doctor",
|
||||
"Geneticist",
|
||||
"Virologist"
|
||||
"Geneticist"
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
else
|
||||
user << "\blue [src] does not need a repair!"
|
||||
else if (istype(W, /obj/item/weapon/card/emag) && !emagged)
|
||||
var/obj/item/weapon/card/emag/E = W
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
Emag(user)
|
||||
else
|
||||
switch(W.damtype)
|
||||
|
||||
@@ -123,6 +123,11 @@
|
||||
// other: chance to knock rider off bot
|
||||
/obj/machinery/bot/mulebot/attackby(var/obj/item/I, var/mob/user)
|
||||
if(istype(I,/obj/item/weapon/card/emag))
|
||||
var/obj/item/weapon/card/emag/E = I
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
locked = !locked
|
||||
user << "\blue You [locked ? "lock" : "unlock"] the mulebot's controls!"
|
||||
flick("mulebot-emagged", src)
|
||||
|
||||
@@ -39,6 +39,11 @@
|
||||
..()
|
||||
if(istype(I,/obj/item/weapon/card/emag))
|
||||
if(network)
|
||||
var/obj/item/weapon/card/emag/E = I
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
authorised = 1
|
||||
user << "\blue You authorised the circuit network!"
|
||||
updateDialog()
|
||||
@@ -103,6 +108,11 @@
|
||||
authorised = 1
|
||||
if(istype(I,/obj/item/weapon/card/emag))
|
||||
if(network)
|
||||
var/obj/item/weapon/card/emag/E = I
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
authorised = 1
|
||||
usr << "\blue You authorised the circuit network!"
|
||||
updateDialog()
|
||||
|
||||
@@ -653,6 +653,11 @@
|
||||
else if (istype(W, /obj/item/weapon/card/emag))
|
||||
if (isnull(src.occupant))
|
||||
return
|
||||
var/obj/item/weapon/card/emag/E = W
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
user << "You force an emergency ejection."
|
||||
src.locked = 0
|
||||
src.go_out()
|
||||
|
||||
@@ -202,6 +202,11 @@
|
||||
|
||||
/obj/machinery/computer/arcade/attackby(I as obj, user as mob)
|
||||
if(istype(I, /obj/item/weapon/card/emag) && !emagged)
|
||||
var/obj/item/weapon/card/emag/E = I
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
temp = "If you die in the game, you die for real!"
|
||||
player_hp = 30
|
||||
player_mp = 10
|
||||
|
||||
@@ -189,7 +189,7 @@ Pod/Blast Doors computer
|
||||
L.fields["sex"] = H.gender
|
||||
L.fields["age"] = H.age
|
||||
L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]")
|
||||
L.fields["rank"] = H.mind.assigned_role
|
||||
L.fields["rank"] = H.mind.role_alt_title ? H.mind.role_alt_title : H.mind.assigned_role
|
||||
L.fields["b_type"] = H.dna.b_type
|
||||
L.fields["b_dna"] = H.dna.unique_enzymes
|
||||
L.fields["enzymes"] = H.dna.struc_enzymes
|
||||
@@ -266,7 +266,7 @@ Pod/Blast Doors computer
|
||||
L.fields["sex"] = H.gender
|
||||
L.fields["age"] = H.age
|
||||
L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]")
|
||||
L.fields["rank"] = H.mind.assigned_role
|
||||
L.fields["rank"] = H.mind.role_alt_title ? H.mind.role_alt_title : H.mind.assigned_role
|
||||
L.fields["b_type"] = H.dna.b_type
|
||||
L.fields["b_dna"] = H.dna.unique_enzymes
|
||||
L.fields["enzymes"] = H.dna.struc_enzymes
|
||||
|
||||
@@ -187,6 +187,11 @@ for reference:
|
||||
return
|
||||
return
|
||||
else if (istype(W, /obj/item/weapon/card/emag))
|
||||
var/obj/item/weapon/card/emag/E = W
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
if (src.emagged == 0)
|
||||
src.emagged = 1
|
||||
src.req_access = null
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -137,7 +137,13 @@
|
||||
if (!src.requiresID())
|
||||
//don't care who they are or what they have, act as if they're NOTHING
|
||||
user = null
|
||||
if (src.density && (istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade)))
|
||||
if (src.density && (istype(I, /obj/item/weapon/card/emag) ||istype(I, /obj/item/weapon/melee/energy/blade)))
|
||||
if(istype(I, /obj/item/weapon/card/emag))
|
||||
var/obj/item/weapon/card/emag/E = I
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
src.operating = -1
|
||||
if(istype(I, /obj/item/weapon/melee/energy/blade))
|
||||
if(istype(src, /obj/machinery/door/airlock))
|
||||
@@ -342,12 +348,13 @@
|
||||
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
|
||||
if(!src.forcecrush)
|
||||
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()
|
||||
|
||||
@@ -121,6 +121,12 @@
|
||||
//don't care who they are or what they have, act as if they're NOTHING
|
||||
user = null
|
||||
if (src.density && (istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade)))
|
||||
if(istype(I, /obj/item/weapon/card/emag))
|
||||
var/obj/item/weapon/card/emag/E = I
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
src.operating = -1
|
||||
if(istype(I, /obj/item/weapon/melee/energy/blade))
|
||||
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
||||
|
||||
@@ -50,6 +50,11 @@
|
||||
|
||||
/obj/machinery/gibber/attackby(obj/item/weapon/grab/G as obj, mob/user as mob)
|
||||
if(istype(G,/obj/item/weapon/card/emag))
|
||||
var/obj/item/weapon/card/emag/E = G
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
user.visible_message( \
|
||||
"\red [user] swipes a strange card through \the [src]'s control panel!", \
|
||||
"\red You swipe a strange card through \the [src]'s control panel!", \
|
||||
|
||||
@@ -172,6 +172,11 @@ Neutralize All Unidentified Life Signs: []<BR>"},
|
||||
|
||||
|
||||
if ((istype(W, /obj/item/weapon/card/emag)) && (!src.emagged))
|
||||
var/obj/item/weapon/card/emag/E = W
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
// Emagging the turret makes it go bonkers and stun everyone. It also makes
|
||||
// the turret shoot much, much faster.
|
||||
|
||||
@@ -861,6 +866,11 @@ Neutralize All Unidentified Life Signs: []<BR>"},
|
||||
/obj/machinery/porta_turret_cover/attackby(obj/item/W as obj, mob/user as mob)
|
||||
|
||||
if ((istype(W, /obj/item/weapon/card/emag)) && (!Parent_Turret.emagged))
|
||||
var/obj/item/weapon/card/emag/E = W
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
user << "\red You short out [Parent_Turret]'s threat assessment circuits."
|
||||
spawn(0)
|
||||
for(var/mob/O in hearers(Parent_Turret, null))
|
||||
|
||||
@@ -5,13 +5,18 @@
|
||||
desc = "A sink used for washing one's hands and face."
|
||||
anchored = 1
|
||||
var/busy = 0 //Something's being washed at the moment
|
||||
var/mode = 0 //0 == fill, 1 == pour
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
verbs += /obj/machinery/sink/proc/mode_pour
|
||||
|
||||
attack_hand(mob/M as mob)
|
||||
if(busy)
|
||||
M << "\red Someone's already washing something here."
|
||||
return
|
||||
usr << "\blue You start washing up."
|
||||
M << "\blue You start washing up."
|
||||
|
||||
busy = 1
|
||||
if(do_after(M,40))
|
||||
@@ -43,6 +48,25 @@
|
||||
V.show_message(text("\blue [M] washes up using \the [src]."))
|
||||
busy = 0
|
||||
|
||||
proc/mode_pour()
|
||||
set name = "Mode -> Pour"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
mode = 1
|
||||
verbs -= /obj/machinery/sink/proc/mode_pour
|
||||
verbs += /obj/machinery/sink/proc/mode_fill
|
||||
usr << "You will now pour reagents down \the [src]."
|
||||
|
||||
proc/mode_fill()
|
||||
set name = "Mode -> Fill"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
mode = 0
|
||||
verbs -= /obj/machinery/sink/proc/mode_fill
|
||||
verbs += /obj/machinery/sink/proc/mode_pour
|
||||
usr << "You will now fill your container from the faucet."
|
||||
|
||||
attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(busy)
|
||||
@@ -50,15 +74,26 @@
|
||||
return
|
||||
|
||||
if (istype(O, /obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/food/drinks))
|
||||
if(O.reagents.total_volume < O.reagents.maximum_volume)
|
||||
O:reagents.add_reagent("water", 10)
|
||||
user.visible_message( \
|
||||
"\blue [user] fills the [O] using the [src].", \
|
||||
"\blue You fill the [O] using the [src].")
|
||||
if(!mode)
|
||||
// fill
|
||||
if(O.reagents.total_volume < O.reagents.maximum_volume)
|
||||
O:reagents.add_reagent("water", 10)
|
||||
user.visible_message( \
|
||||
"\blue [user] fills the [O] using the [src].", \
|
||||
"\blue You fill the [O] using the [src].")
|
||||
else
|
||||
user.visible_message( \
|
||||
"\blue [user] spills water out of the overflowing [O] into the [src].", \
|
||||
"\blue You spill water out of the overflowing [O] into the [src].")
|
||||
else
|
||||
user.visible_message( \
|
||||
"\blue [user] spills water out of the overflowing [O] into the [src].", \
|
||||
"\blue You spill water out of the overflowing [O] into the [src].")
|
||||
// pour
|
||||
if(O.reagents.total_volume > 0)
|
||||
O.reagents.clear_reagents()
|
||||
user.visible_message( \
|
||||
"\blue [user] pours the contents of \the [O] into \the [src].", \
|
||||
"\blue You pour the contents of \the [O] into \the [src].")
|
||||
else
|
||||
user << "\The [O] is empty."
|
||||
return
|
||||
else if (istype(O, /obj/item/weapon/melee/baton))
|
||||
var/obj/item/weapon/melee/baton/B = O
|
||||
|
||||
@@ -224,6 +224,11 @@
|
||||
A.anchored = 1
|
||||
del(src)
|
||||
else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
|
||||
var/obj/item/weapon/card/emag/E = D
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
playsound(src.loc, 'sparks4.ogg', 75, 1)
|
||||
emagged = 1
|
||||
user << "\blue You you disable the security protocols"
|
||||
|
||||
@@ -154,6 +154,11 @@
|
||||
A.anchored = 1
|
||||
del(src)
|
||||
else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
|
||||
var/obj/item/weapon/card/emag/E = D
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
playsound(src.loc, 'sparks4.ogg', 75, 1)
|
||||
emagged = 1
|
||||
user << "\blue You you disable the security protocols"
|
||||
|
||||
@@ -319,6 +319,11 @@ To combat this, I changed the window name. -- Doohl
|
||||
|
||||
/obj/machinery/vending/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/card/emag))
|
||||
var/obj/item/weapon/card/emag/E = W
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
src.emagged = 1
|
||||
user << "You short out the ID lock on [src]"
|
||||
return
|
||||
|
||||
@@ -720,6 +720,11 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
|
||||
|
||||
/obj/machinery/librarycomp/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (src.density && istype(W, /obj/item/weapon/card/emag))
|
||||
var/obj/item/weapon/card/emag/E = W
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
src.emagged = 1
|
||||
if(istype(W, /obj/item/weapon/barcodescanner))
|
||||
var/obj/item/weapon/barcodescanner/scanner = W
|
||||
|
||||
@@ -45,6 +45,12 @@
|
||||
else
|
||||
user << "\red Access Denied"
|
||||
else if( (istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken)
|
||||
if(istype(W, /obj/item/weapon/card/emag))
|
||||
var/obj/item/weapon/card/emag/E = W
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
broken = 1
|
||||
locked = 0
|
||||
desc = "It appears to be broken."
|
||||
|
||||
@@ -38,6 +38,12 @@
|
||||
user << "\red It appears to be broken."
|
||||
return
|
||||
else if((istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken)
|
||||
if(istype(W, /obj/item/weapon/card/emag))
|
||||
var/obj/item/weapon/card/emag/E = W
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
broken = 1
|
||||
locked = 0
|
||||
desc = "It appears to be broken."
|
||||
|
||||
@@ -48,6 +48,11 @@
|
||||
user << "\red It appears to be broken."
|
||||
return
|
||||
else if(istype(W, /obj/item/weapon/card/emag) && !src.broken)
|
||||
var/obj/item/weapon/card/emag/E = W
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
src.broken = 1
|
||||
src.locked = 0
|
||||
src.icon_state = src.icon_broken
|
||||
|
||||
@@ -207,12 +207,12 @@ MASS SPECTROMETER
|
||||
var/list/prints = temp[2]
|
||||
if(!prints)
|
||||
prints = list()
|
||||
if(A.fingerprints)
|
||||
for(var/j = 1, j < (A.fingerprints.len + 1), j++) //Fingerprints~~~
|
||||
if(A.fingerprints && A.fingerprints.len)
|
||||
for(var/j = 1, j <= A.fingerprints.len, j++) //Fingerprints~~~
|
||||
var/list/print_test1 = params2list(A.fingerprints[j])
|
||||
var/test_print1 = print_test1[num2text(1)]
|
||||
var/found = 0
|
||||
for(var/k = 1, k < (prints.len + 1), k++) //Lets see if the print is already in there
|
||||
for(var/k = 1, k <= prints.len, k++) //Lets see if the print is already in there
|
||||
var/list/print_test2 = params2list(prints[k])
|
||||
var/test_print2 = print_test2[num2text(1)]
|
||||
if(test_print2 == test_print1) //It is! Merge!
|
||||
@@ -224,15 +224,15 @@ MASS SPECTROMETER
|
||||
var/list/fibers = temp[3]
|
||||
if(!fibers)
|
||||
fibers = list()
|
||||
if(A.suit_fibers)
|
||||
for(var/j = 1, j < (A.suit_fibers.len + 1), j++) //Fibers~~~
|
||||
if(A.suit_fibers && A.suit_fibers.len)
|
||||
for(var/j = 1, j <= A.suit_fibers.len, j++) //Fibers~~~
|
||||
if(!fibers.Find(A.suit_fibers[j])) //It isn't! Add!
|
||||
fibers += A.suit_fibers[j]
|
||||
var/list/blood = temp[4]
|
||||
if(!blood)
|
||||
blood = list()
|
||||
if(A.blood_DNA.len)
|
||||
for(var/j = 1, j < (A.blood_DNA.len + 1), j++) //Blood~~~
|
||||
if(A.blood_DNA.len && A.blood_DNA)
|
||||
for(var/j = 1, j <= A.blood_DNA.len, j++) //Blood~~~
|
||||
if(!blood.Find(A.blood_DNA[j])) //It isn't! Add!
|
||||
blood += A.blood_DNA[j]
|
||||
var/list/sum_list[4] //Pack it back up!
|
||||
@@ -245,7 +245,11 @@ MASS SPECTROMETER
|
||||
if(!merged) //Uh, oh! New data point!
|
||||
var/list/sum_list[4] //Pack it back up!
|
||||
sum_list[1] = A
|
||||
sum_list[2] = A.fingerprints
|
||||
if(!A.fingerprints)
|
||||
world << "Report this to a dev! [A] was lacking a list() for fingerprints!"
|
||||
sum_list[2] = list()
|
||||
else
|
||||
sum_list[2] = A.fingerprints
|
||||
sum_list[3] = A.suit_fibers
|
||||
sum_list[4] = A.blood_DNA
|
||||
stored.len++
|
||||
|
||||
@@ -43,7 +43,7 @@ obj/structure/door_assembly
|
||||
name = "Security Airlock Assembly"
|
||||
icon_state = "door_as_sec1"
|
||||
glass_base_icon_state = "door_as_gsec"
|
||||
glass_type = /obj/machinery/door/airlock/glass_security
|
||||
glass_type = /obj/machinery/door/airlock/glass/glass_security
|
||||
airlock_type = /obj/machinery/door/airlock/security
|
||||
anchored = 1
|
||||
density = 1
|
||||
@@ -58,7 +58,7 @@ obj/structure/door_assembly
|
||||
name = "Engineering Airlock Assembly"
|
||||
icon_state = "door_as_eng1"
|
||||
glass_base_icon_state = "door_as_geng"
|
||||
glass_type = /obj/machinery/door/airlock/glass_engineering
|
||||
glass_type = /obj/machinery/door/airlock/glass/glass_engineering
|
||||
airlock_type = /obj/machinery/door/airlock/engineering
|
||||
anchored = 1
|
||||
density = 1
|
||||
@@ -73,7 +73,7 @@ obj/structure/door_assembly
|
||||
name = "Medical Airlock Assembly"
|
||||
icon_state = "door_as_med1"
|
||||
glass_base_icon_state = "door_as_gmed"
|
||||
glass_type = /obj/machinery/door/airlock/glass_medical
|
||||
glass_type = /obj/machinery/door/airlock/glass/glass_medical
|
||||
airlock_type = /obj/machinery/door/airlock/medical
|
||||
anchored = 1
|
||||
density = 1
|
||||
|
||||
13
code/game/objects/items/item.dm
Normal file → Executable file
13
code/game/objects/items/item.dm
Normal file → Executable file
@@ -219,6 +219,7 @@
|
||||
O.amount -= 1
|
||||
else if(istype(W,/obj/item/wardrobe))
|
||||
var/obj/item/wardrobe/I = W
|
||||
var/could_fill = 1
|
||||
for (var/obj/O in locate(src.x,src.y,src.z))
|
||||
if (I.contents.len < 20)
|
||||
if(istype(O,/obj/item/wardrobe))
|
||||
@@ -227,10 +228,14 @@
|
||||
continue
|
||||
I.contents += O;
|
||||
else
|
||||
user << "\blue The wardrobe is full."
|
||||
return
|
||||
user << "\blue You pick up all the items."
|
||||
user.visible_message("\blue [user] gathers up the pile of stuff, and puts it into \the [W]")
|
||||
could_fill = 0
|
||||
break
|
||||
|
||||
if(could_fill)
|
||||
user << "\blue You pick up all the items."
|
||||
else
|
||||
user << "\blue You try to pick up all of the items, but run out of space in the bag."
|
||||
user.visible_message("\blue [user] gathers up[could_fill ? " " : " most of "]the pile of items and puts it into the [W].")
|
||||
I.update_icon()
|
||||
|
||||
/obj/item/attack_self(mob/user as mob)
|
||||
|
||||
@@ -20,7 +20,12 @@ FINGERPRINT CARD
|
||||
icon_state = "emag"
|
||||
item_state = "card-id"
|
||||
origin_tech = "magnets=2;syndicate=2"
|
||||
var/uses = 5
|
||||
|
||||
New()
|
||||
..()
|
||||
uses = rand(3,5)
|
||||
return
|
||||
|
||||
// DATA CARDS
|
||||
/obj/item/weapon/card/data
|
||||
@@ -271,7 +276,7 @@ FINGERPRINT CARD
|
||||
var/dat = "<B>Fingerprints on Card</B><HR>"
|
||||
for(var/i = 1, i < (src.fingerprints.len + 1), i++)
|
||||
var/list/L = params2list(src.fingerprints[i])
|
||||
dat += text("[]<BR>", L[1])
|
||||
dat += text("[]<BR>", L["1"])
|
||||
//Foreach goto(41)
|
||||
return dat
|
||||
else
|
||||
|
||||
@@ -929,7 +929,7 @@
|
||||
/obj/item/weapon/book/manual/detective
|
||||
name = "The Film Noir: Proper Procedures for Investigations"
|
||||
icon_state ="bookHacking"
|
||||
author = "Nanotrasen"
|
||||
author = "NanoTrasen"
|
||||
|
||||
dat = {"<html>
|
||||
<head>
|
||||
|
||||
@@ -93,7 +93,13 @@
|
||||
|
||||
/obj/item/weapon/secstorage/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if ( (istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && (src.locked == 1) && (!src.emagged))
|
||||
if ((istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && (src.locked == 1) && (!src.emagged))
|
||||
if(istype(W, /obj/item/weapon/card/emag))
|
||||
var/obj/item/weapon/card/emag/E = W
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
emagged = 1
|
||||
src.overlays += image('storage.dmi', icon_sparking)
|
||||
sleep(6)
|
||||
|
||||
@@ -258,6 +258,12 @@
|
||||
overlays += redlight
|
||||
return
|
||||
else if ( (istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && locked &&!broken)
|
||||
if(istype(W, /obj/item/weapon/card/emag))
|
||||
var/obj/item/weapon/card/emag/E = W
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
overlays = null
|
||||
overlays += emag
|
||||
overlays += sparks
|
||||
|
||||
@@ -34,6 +34,12 @@
|
||||
else
|
||||
user << "\red Access Denied"
|
||||
else if((istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken)
|
||||
if(istype(W, /obj/item/weapon/card/emag))
|
||||
var/obj/item/weapon/card/emag/E = W
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
broken = 1
|
||||
locked = 0
|
||||
desc = "It appears to be broken."
|
||||
|
||||
@@ -35,6 +35,11 @@ var/prison_shuttle_timeleft = 0
|
||||
|
||||
attackby(I as obj, user as mob)
|
||||
if(istype(I,/obj/item/weapon/card/emag) && (!hacked))
|
||||
var/obj/item/weapon/card/emag/E = I
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
hacked = 1
|
||||
user << "\blue You disable the lock."
|
||||
else
|
||||
|
||||
@@ -402,6 +402,11 @@ var/list/supply_groups = new()
|
||||
|
||||
/obj/machinery/computer/supplycomp/attackby(I as obj, user as mob)
|
||||
if(istype(I,/obj/item/weapon/card/emag) && !hacked)
|
||||
var/obj/item/weapon/card/emag/E = I
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
user << "\blue Special supplies unlocked."
|
||||
src.hacked = 1
|
||||
return
|
||||
|
||||
@@ -335,7 +335,7 @@
|
||||
jobs += "<a href='?src=\ref[src];newjobban2=Chemist_RD_CMO;jobban4=\ref[M]'>Chemist+RD+CMO</a> <br>"
|
||||
jobs += "<a href='?src=\ref[src];newjobban2=Geneticist_RD_CMO;jobban4=\ref[M]'>Geneticist+RD+CMO</a> <br>"
|
||||
jobs += "<a href='?src=\ref[src];newjobban2=MD_CMO;jobban4=\ref[M]'>MD+CMO</a> <br>"
|
||||
jobs += "<a href='?src=\ref[src];newjobban2=Virologist_RD_CMO;jobban4=\ref[M]'>Virologist+RD+CMO</a> <br>"
|
||||
/*jobs += "<a href='?src=\ref[src];newjobban2=Virologist_RD_CMO;jobban4=\ref[M]'>Virologist+RD+CMO</a> <br>"*/
|
||||
jobs += "<a href='?src=\ref[src];newjobban2=Scientist_RD;jobban4=\ref[M]'>Scientist+RD</a> <br>"
|
||||
jobs += "<a href='?src=\ref[src];newjobban2=AI_Cyborg;jobban4=\ref[M]'>AI+Cyborg</a> <br>"
|
||||
jobs += "<a href='?src=\ref[src];newjobban2=Detective_HoS;jobban4=\ref[M]'>Detective+HoS</a> <br><br>"
|
||||
|
||||
@@ -315,6 +315,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if(!record_found)//We have to pick their role if they have no record.
|
||||
if(G_found.mind&&G_found.mind.assigned_role)//But they may have an assigned role already.
|
||||
new_character.mind.assigned_role = G_found.mind.assigned_role//Also makes sure our MODE people are equipped right later on.
|
||||
new_character.mind.role_alt_title = G_found.mind.role_alt_title
|
||||
else
|
||||
var/assigned_role = input("Please specify which job the character will be respawned as.", "Assigned role") as null|anything in get_all_jobs()
|
||||
if(!assigned_role) new_character.mind.assigned_role = "Assistant"//Defaults to assistant.
|
||||
|
||||
@@ -132,17 +132,27 @@
|
||||
playsound(src.loc, 'Crowbar.ogg', 50, 1)
|
||||
user << "\blue You remove the remote signalling device."
|
||||
src.state = 3
|
||||
new /obj/item/device/assembly/signaler( src.loc, 1 )
|
||||
var/obj/item/device/assembly/signaler/S = locate() in src
|
||||
if(S)
|
||||
S.loc = src.loc
|
||||
else
|
||||
new /obj/item/device/assembly/signaler( src.loc, 1 )
|
||||
if(isprox(W) && motion == 0)
|
||||
// if(W:amount >= 1)
|
||||
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
|
||||
// W:use(1)
|
||||
user << "\blue You attach the proximity sensor."
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
motion = 1
|
||||
if(istype(W, /obj/item/weapon/crowbar) && motion)
|
||||
playsound(src.loc, 'Crowbar.ogg', 50, 1)
|
||||
user << "\blue You remove the proximity sensor."
|
||||
new /obj/item/device/assembly/prox_sensor( src.loc, 1 )
|
||||
var/obj/item/device/assembly/prox_sensor/S = locate() in src
|
||||
if(S)
|
||||
S.loc = src.loc
|
||||
else
|
||||
new /obj/item/device/assembly/prox_sensor( src.loc, 1 )
|
||||
motion = 0
|
||||
if(istype(W, /obj/item/stack/sheet/glass))
|
||||
if(W:amount >= 1)
|
||||
|
||||
@@ -86,6 +86,11 @@ proc/move_mining_shuttle()
|
||||
/obj/machinery/computer/mining_shuttle/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
|
||||
if (istype(W, /obj/item/weapon/card/emag))
|
||||
var/obj/item/weapon/card/emag/E = W
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
src.req_access = list()
|
||||
hacked = 1
|
||||
usr << "You fried the consoles ID checking system. It's now available to everyone!"
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/mob/living/carbon/human/say(var/message)
|
||||
if(src.mutantrace == "lizard")
|
||||
if(copytext(message, 1, 2) != "*")
|
||||
message = dd_replaceText(message, "s", stutter("ss"))
|
||||
if(src.mutantrace == "metroid" && prob(5))
|
||||
if(copytext(message, 1, 2) != "*")
|
||||
if(copytext(message, 1, 2) == ";")
|
||||
|
||||
@@ -421,6 +421,11 @@
|
||||
user << "\red Access denied."
|
||||
|
||||
else if(istype(W, /obj/item/weapon/card/emag)) // trying to unlock with an emag card
|
||||
var/obj/item/weapon/card/emag/E = W
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
if(!opened)//Cover is closed
|
||||
if(locked)
|
||||
if(prob(90))
|
||||
|
||||
@@ -253,9 +253,9 @@
|
||||
src << alert("[rank] is not available. Please try another.")
|
||||
return 0
|
||||
|
||||
job_master.AssignRole(src, rank, 1)
|
||||
var/mob/living/carbon/human/character = create_character()
|
||||
var/icon/char_icon = getFlatIcon(character,0)//We're creating out own cache so it's not needed.
|
||||
job_master.AssignRole(character, rank, 1)
|
||||
job_master.EquipRank(character, rank, 1)
|
||||
EquipCustomItems(character)
|
||||
character.loc = pick(latejoin)
|
||||
@@ -327,7 +327,7 @@
|
||||
L.fields["sex"] = H.gender
|
||||
L.fields["age"] = H.age
|
||||
L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]")
|
||||
L.fields["rank"] = H.mind.assigned_role
|
||||
L.fields["rank"] = H.mind.role_alt_title ? H.mind.role_alt_title : H.mind.assigned_role
|
||||
L.fields["b_type"] = H.dna.b_type
|
||||
L.fields["b_dna"] = H.dna.unique_enzymes
|
||||
L.fields["enzymes"] = H.dna.struc_enzymes
|
||||
|
||||
@@ -104,6 +104,8 @@ datum/preferences
|
||||
job_engsec_med = 0
|
||||
job_engsec_low = 0
|
||||
|
||||
list/job_alt_titles = new() // the default name of a job like "Medical Doctor"
|
||||
|
||||
flavor_text = ""
|
||||
|
||||
// slot stuff
|
||||
@@ -213,6 +215,19 @@ datum/preferences
|
||||
proc/closesave(mob/user)
|
||||
user << browse(null, "window=saves;size=300x640")
|
||||
|
||||
proc/GetAltTitle(datum/job/job)
|
||||
return job_alt_titles.Find(job.title) > 0 \
|
||||
? job_alt_titles[job.title] \
|
||||
: job.title
|
||||
|
||||
proc/SetAltTitle(datum/job/job, new_title)
|
||||
// remove existing entry
|
||||
if(job_alt_titles.Find(job.title))
|
||||
job_alt_titles -= job.title
|
||||
// add one if it's not default
|
||||
if(job.title != new_title)
|
||||
job_alt_titles[job.title] = new_title
|
||||
|
||||
proc/SetChoices(mob/user, changedjob)
|
||||
var/HTML = "<body>"
|
||||
HTML += "<tt><center>"
|
||||
@@ -246,14 +261,17 @@ datum/preferences
|
||||
HTML += "<font color=orange>\[Low]</font>"
|
||||
else
|
||||
HTML += "<font color=red>\[NEVER]</font>"
|
||||
HTML += "</a><br>"
|
||||
if(job.alt_titles)
|
||||
HTML += "</a> <a href=\"byond://?src=\ref[user];preferences=1;alt_title=1;job=\ref[job]\">\[[GetAltTitle(job)]\]</a><br>"
|
||||
else
|
||||
HTML += "</a><br>"
|
||||
|
||||
HTML += "<br>"
|
||||
HTML += "<a href=\"byond://?src=\ref[user];preferences=1;occ=0;job=cancel\">\[Done\]</a>"
|
||||
HTML += "</center></tt>"
|
||||
|
||||
user << browse(null, "window=preferences")
|
||||
user << browse(HTML, "window=mob_occupation;size=320x600")
|
||||
user << browse(HTML, "window=mob_occupation;size=350x600")
|
||||
return
|
||||
|
||||
|
||||
@@ -378,6 +396,14 @@ datum/preferences
|
||||
|
||||
return 1
|
||||
|
||||
if(link_tags["alt_title"] && link_tags["job"])
|
||||
var/datum/job/job = locate(link_tags["job"])
|
||||
var/choices = list(job.title) + job.alt_titles
|
||||
var/choice = input("Pick a title for [job.title].", "Character Generation", GetAltTitle(job)) as anything in choices | null
|
||||
if(choice)
|
||||
SetAltTitle(job, choice)
|
||||
SetChoices(user)
|
||||
|
||||
if(link_tags["real_name"])
|
||||
var/new_name
|
||||
|
||||
@@ -638,6 +664,7 @@ datum/preferences
|
||||
job_engsec_high = 0
|
||||
job_engsec_med = 0
|
||||
job_engsec_low = 0
|
||||
job_alt_titles = new()
|
||||
underwear = 1
|
||||
be_special = 0
|
||||
be_random_name = 0
|
||||
|
||||
@@ -115,6 +115,8 @@ datum/preferences/proc/savefile_save(mob/user, slot)
|
||||
F["job_engsec_med"] << src.job_engsec_med
|
||||
F["job_engsec_low"] << src.job_engsec_low
|
||||
|
||||
F["job_alt_titles"] << job_alt_titles
|
||||
|
||||
//Body data
|
||||
F["hair_red"] << src.r_hair
|
||||
F["hair_green"] << src.g_hair
|
||||
@@ -212,6 +214,10 @@ datum/preferences/proc/savefile_load(mob/user, slot)
|
||||
F["job_engsec_med"] >> src.job_engsec_med
|
||||
F["job_engsec_low"] >> src.job_engsec_low
|
||||
|
||||
F["job_alt_titles"] >> job_alt_titles
|
||||
if(!job_alt_titles)
|
||||
job_alt_titles = new()
|
||||
|
||||
//NOTE: Conversion things go inside this if statement
|
||||
//When updating the save file remember to add 1 to BOTH the savefile constants
|
||||
//Also take the old conversion things that no longer apply out of this if
|
||||
|
||||
@@ -300,6 +300,12 @@
|
||||
else
|
||||
user << "\red Access denied."
|
||||
else if (istype(W, /obj/item/weapon/card/emag) && !(emagged || malfhack)) // trying to unlock with an emag card
|
||||
if(istype(W, /obj/item/weapon/card/emag))
|
||||
var/obj/item/weapon/card/emag/E = W
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
if(opened)
|
||||
user << "You must close the cover to swipe an ID card."
|
||||
else if(wiresexposed)
|
||||
@@ -859,7 +865,7 @@
|
||||
else
|
||||
src.malfai = usr
|
||||
malfai << "Hack complete. The APC is now under your exclusive control."
|
||||
updateicon()
|
||||
updateicon()
|
||||
|
||||
else if (href_list["occupyapc"])
|
||||
malfoccupy(usr)
|
||||
@@ -876,21 +882,21 @@
|
||||
return
|
||||
if(src.z != 1)
|
||||
return
|
||||
|
||||
|
||||
src.occupant = new /mob/living/silicon/ai(src,malf.laws,null,1)
|
||||
src.occupant.adjustOxyLoss(malf.getOxyLoss())
|
||||
src.occupant.name = "[malf.name] APC Copy"
|
||||
|
||||
|
||||
if(malf.parent)
|
||||
src.occupant.parent = malf.parent
|
||||
else
|
||||
src.occupant.parent = malf
|
||||
|
||||
|
||||
malf.mind.transfer_to(src.occupant)
|
||||
|
||||
|
||||
if(malf.parent)
|
||||
del(malf)
|
||||
|
||||
|
||||
src.occupant.verbs += /mob/living/silicon/ai/proc/corereturn
|
||||
src.occupant.cancel_camera()
|
||||
|
||||
|
||||
@@ -81,6 +81,11 @@
|
||||
O.loc = src
|
||||
user << "\blue You add the plasma tank to the generator."
|
||||
else if (istype(O, /obj/item/weapon/card/emag))
|
||||
var/obj/item/weapon/card/emag/E = O
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
emagged = 1
|
||||
emp_act(1)
|
||||
else if(!active)
|
||||
|
||||
@@ -196,6 +196,11 @@ display round(lastgen) and plasmatank amount
|
||||
del(O)
|
||||
user << "\blue You add a coin to the generator."
|
||||
else if (istype(O, /obj/item/weapon/card/emag))
|
||||
var/obj/item/weapon/card/emag/E = O
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
emagged = 1
|
||||
emp_act(1)
|
||||
else if(!active)
|
||||
|
||||
@@ -176,6 +176,11 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
D.loc = src
|
||||
user << "\blue You add the disk to the machine!"
|
||||
else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
|
||||
var/obj/item/weapon/card/emag/E = D
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
playsound(src.loc, 'sparks4.ogg', 75, 1)
|
||||
emagged = 1
|
||||
user << "\blue You you disable the security protocols"
|
||||
|
||||
@@ -326,6 +326,11 @@
|
||||
A.anchored = 1
|
||||
del(src)
|
||||
else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
|
||||
var/obj/item/weapon/card/emag/E = D
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
playsound(src.loc, 'sparks4.ogg', 75, 1)
|
||||
emagged = 1
|
||||
user << "\blue You you disable the security protocols"
|
||||
|
||||
Reference in New Issue
Block a user