This commit is contained in:
Tigercat2000
2014-11-26 13:28:52 -08:00
70 changed files with 897 additions and 460 deletions
@@ -1,45 +0,0 @@
// Reference: http://www.teuse.net/personal/harrington/hh_bible.htm
// http://www.trmn.org/portal/images/uniforms/rmn/rmn_officer_srv_dress_lrg.png
/obj/item/clothing/head/beret/centcom/officer
name = "officers beret"
desc = "A black beret adorned with the shield—a silver kite shield with an engraved sword—of the NanoTrasen security forces, announcing to the world that the wearer is a defender of NanoTrasen."
icon_state = "centcomofficerberet"
flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/centcom/captain
name = "captains beret"
desc = "A white beret adorned with the shield—a cobalt kite shield with an engraved sword—of the NanoTrasen security forces, worn only by those captaining a vessel of the NanoTrasen Navy."
icon_state = "centcomcaptain"
flags = FPRINT | TABLEPASS
/obj/item/clothing/shoes/centcom
name = "dress shoes"
desc = "They appear impeccably polished."
icon_state = "laceups"
/obj/item/clothing/under/rank/centcom/representative
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Ensign\" and bears \"N.C.V. Fearless CV-286\" on the left shounder."
name = "\improper NanoTrasen Navy Uniform"
icon_state = "officer"
item_state = "g_suit"
_color = "officer"
displays_id = 0
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
/obj/item/clothing/under/rank/centcom/officer
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Lieutenant Commander\" and bears \"N.C.V. Fearless CV-286\" on the left shounder."
name = "\improper NanoTrasen Officers Uniform"
icon_state = "officer"
item_state = "g_suit"
_color = "officer"
displays_id = 0
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
/obj/item/clothing/under/rank/centcom/captain
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Captain\" and bears \"N.C.V. Fearless CV-286\" on the left shounder."
name = "\improper NanoTrasen Captains Uniform"
icon_state = "centcom"
item_state = "dg_suit"
_color = "centcom"
displays_id = 0
+1 -1
View File
@@ -189,7 +189,7 @@
objects += O
for(var/client/C in clients)
if(!istype(C) || !C.eye)
if(!istype(C) || !C.eye || istype(C.eye, /mob/aiEye))
continue //I have no idea when this client check would be needed, but if this runtimes people won't hear anything
//So kinda paranoid about runtime avoidance.
if(istype(C.eye, /obj/machinery/camera))
+10
View File
@@ -39,6 +39,9 @@
return
var/list/modifiers = params2list(params)
if(modifiers["shift"] && modifiers["ctrl"])
CtrlShiftClickOn(A)
return
if(modifiers["middle"])
MiddleClickOn(A)
return
@@ -90,6 +93,8 @@
for AI shift, ctrl, and alt clicking.
*/
/mob/living/silicon/ai/CtrlShiftClickOn(var/atom/A)
A.AICtrlShiftClick(src)
/mob/living/silicon/ai/ShiftClickOn(var/atom/A)
A.AIShiftClick(src)
/mob/living/silicon/ai/CtrlClickOn(var/atom/A)
@@ -104,6 +109,11 @@
I have no idea why it was in atoms.dm instead of respective files.
*/
/atom/proc/AICtrlShiftClick(var/mob/user) // Examines
if(user.client && user.client.eye == user)
examine()
return
/atom/proc/AIShiftClick()
return
+14
View File
@@ -43,6 +43,9 @@
return
var/list/modifiers = params2list(params)
if(modifiers["shift"] && modifiers["ctrl"])
CtrlShiftClickOn(A)
return
if(modifiers["middle"])
MiddleClickOn(A)
return
@@ -258,6 +261,17 @@
/mob/proc/TurfAdjacent(var/turf/T)
return T.Adjacent(src)
/*
Control+Shift click
Unused except for AI
*/
/mob/proc/CtrlShiftClickOn(var/atom/A)
A.CtrlShiftClick(src)
return
/atom/proc/CtrlShiftClick(var/mob/user)
return
/*
Misc helpers
+11
View File
@@ -16,6 +16,9 @@
return
var/list/modifiers = params2list(params)
if(modifiers["shift"] && modifiers["ctrl"])
CtrlShiftClickOn(A)
return
if(modifiers["middle"])
MiddleClickOn(A)
return
@@ -103,6 +106,8 @@
//Give cyborgs hotkey clicks without breaking existing uses of hotkey clicks
// for non-doors/apcs
/mob/living/silicon/robot/CtrlShiftClickOn(var/atom/A)
A.BorgCtrlShiftClick(src)
/mob/living/silicon/robot/ShiftClickOn(var/atom/A)
A.BorgShiftClick(src)
/mob/living/silicon/robot/CtrlClickOn(var/atom/A)
@@ -110,6 +115,12 @@
/mob/living/silicon/robot/AltClickOn(var/atom/A)
A.BorgAltClick(src)
/atom/proc/BorgCtrlShiftClick(var/mob/user) // Examines
if(user.client && user.client.eye == user)
examine()
user.face_atom(src)
return
/atom/proc/BorgShiftClick()
return
+40
View File
@@ -188,6 +188,21 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
if("Head of Personnel")
clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
if("NanoTrasen Representative")
clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
if("NanoTrasen Recruiter")
clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
if("Blueshield")
clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "swat_gl"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "deus_blueshield"), ICON_OVERLAY)
if("Magistrate")
clothes_s = new /icon('icons/mob/uniform.dmi', "really_black_suit_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "judge"), ICON_OVERLAY)
if("Bartender")
clothes_s = new /icon('icons/mob/uniform.dmi', "ba_suit_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
@@ -246,6 +261,13 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir_open"), ICON_OVERLAY)
if("Psychiatrist")
clothes_s = new /icon('icons/mob/uniform.dmi', "psych_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_UNDERLAY)
if("Paramedic")
clothes_s = new /icon('icons/mob/uniform.dmi', "paramedic_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
if("Captain")
clothes_s = new /icon('icons/mob/uniform.dmi', "captain_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
@@ -259,6 +281,17 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
clothes_s = new /icon('icons/mob/uniform.dmi', "detective_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "detective"), ICON_OVERLAY)
if("Security Pod Pilot")
clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "bomber"), ICON_OVERLAY)
if("Customs Officer")
clothes_s = new /icon('icons/obj/custom_items.dmi', "milohachert_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
if("Brig Physician")
clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "fr_jacket_open"), ICON_OVERLAY)
if("Security Officer")
clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
@@ -274,10 +307,17 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
clothes_s = new /icon('icons/mob/uniform.dmi', "atmos_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
if("Mechanic")
clothes_s = new /icon('icons/mob/uniform.dmi', "mechanic_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
if("Roboticist")
clothes_s = new /icon('icons/mob/uniform.dmi', "robotics_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
else if(H.mind.assigned_role in get_all_centcom_jobs())
clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
else
clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+16 -8
View File
@@ -260,9 +260,9 @@ var/list/uplink_items = list()
gamemodes = list("nuclear emergency")
/datum/uplink_item/dangerous/emp
name = "5 EMP Grenades"
desc = "A box that contains 5 EMP grenades. Useful to disrupt communication and silicon lifeforms."
item = /obj/item/weapon/storage/box/emps
name = "EMP Kit"
desc = "A box that contains two EMP grenades, an EMP implant and a short ranged recharging device disguised as a flashlight. Useful to disrupt communication and silicon lifeforms."
item = /obj/item/weapon/storage/box/syndie_kit/emp
cost = 5
/datum/uplink_item/dangerous/syndicate_minibomb
@@ -473,6 +473,12 @@ var/list/uplink_items = list()
cost = 9
gamemodes = list("nuclear emergency")
/datum/uplink_item/badass/syndiecigs
name = "Syndicate Smokes"
desc = "Strong flavor, dense smoke, infused with Doctor's Delight."
item = /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate
cost = 4
/datum/uplink_item/device_tools/space_suit
name = "Space Suit"
desc = "The red and black syndicate space suit is less encumbering than Nanotrasen variants, fits inside bags, and has a weapon slot. Nanotrasen crewmembers are trained to report red space suit sightings."
@@ -485,6 +491,7 @@ var/list/uplink_items = list()
item = /obj/item/clothing/glasses/thermal/syndi
cost = 6
/*
/datum/uplink_item/device_tools/surveillance
name = "Camera Surveillance Kit"
desc = "This kit contains 5 Camera bugs and one mobile receiver. Attach camera bugs to a camera to enable remote viewing."
@@ -496,6 +503,7 @@ var/list/uplink_items = list()
desc = "This is a Camera bug resupply giving you 5 more camera bugs."
item = /obj/item/weapon/storage/box/surveillance
cost = 4
*/ //commented out until porting over TG's camera bug
/datum/uplink_item/device_tools/binary
name = "Binary Translator Key"
@@ -504,10 +512,10 @@ var/list/uplink_items = list()
cost = 5
/datum/uplink_item/device_tools/cipherkey
name = "Centcomm Encryption Key"
desc = "A key, that when inserted into a radio headset, allows you to listen to and talk on all known radio channels."
item = /obj/item/device/encryptionkey/syndicate/hacked
cost = 4
name = "Syndicate Encryption Key"
desc = "A key, that when inserted into a radio headset, allows you to listen to all station department channels as well as talk on an encrypted Syndicate channel."
item = /obj/item/device/encryptionkey/syndicate
cost = 5
/datum/uplink_item/device_tools/hacked_module
name = "Hacked AI Upload Module"
@@ -622,7 +630,7 @@ var/list/uplink_items = list()
/datum/uplink_item/badass/bundle
name = "Syndicate Bundle"
desc = "Syndicate Bundles are specialised groups of items that arrive in a plain box. These items are collectively worth more than 10 telecrystals, but you do not know which specialisation you will receive."
desc = "Syndicate Bundles are specialised groups of items that arrive in a plain box. These items are collectively worth more than 20 telecrystals, but you do not know which specialisation you will receive."
item = /obj/item/weapon/storage/box/syndicate
cost = 20
excludefrom = list("nuclear emergency")
+20 -8
View File
@@ -32,21 +32,33 @@
return
/obj/item/weapon/antag_spawner/borg_tele/proc/get_candidate_answer(mob/user as mob, var/list/possiblecandidates = list())
var/time_passed = world.time
if(possiblecandidates.len <= 0)
checking = 0
user << "<span class='notice'>Unable to connect to Syndicate Command. Please wait and try again later or use the teleporter on your uplink to get your points refunded.</span>"
return
else
var/possibleborg = pick(possiblecandidates)
var/input = alert(possibleborg,"Do you want to spawn in as a cyborg for the Syndicate operatives?","Syndicate Cyborg","No","Yes")
if(input == "Yes" && used == 0)
possiblecandidates -= possibleborg
used = 1
checking = 0
spawn_antag(possibleborg, get_turf(src.loc), "syndieborg")
else
possiblecandidates -= possibleborg
spawn(0)
var/input = alert(possibleborg,"Do you want to spawn in as a cyborg for the Syndicate operatives?","Please answer in thirty seconds!","Yes","No")
if(input == "Yes" && used == 0)
if((world.time-time_passed)>300)
return
possiblecandidates -= possibleborg
used = 1
checking = 0
spawn_antag(possibleborg, get_turf(src.loc), "syndieborg")
else
possiblecandidates -= possibleborg
get_candidate_answer(user, possiblecandidates)
return
sleep(300)
if(checking)
possiblecandidates -= possibleborg
get_candidate_answer(user, possiblecandidates)
return
/obj/item/weapon/antag_spawner/borg_tele/spawn_antag(var/client/C, var/turf/T, var/type = "")
var/datum/effect/effect/system/spark_spread/S = new /datum/effect/effect/system/spark_spread
+6 -7
View File
@@ -27,7 +27,7 @@ proc/issyndicate(mob/living/M as mob)
/datum/game_mode/nuclear/announce()
world << "<B>The current game mode is - Nuclear Emergency!</B>"
world << "<B>A [syndicate_name()] Strike Force is approaching [station_name()]!</B>"
world << "A nuclear explosive was being transported by Nanotrasen to a military base. The transport ship mysteriously lost contact with Space Traffic Control (STC). About that time a strange disk was discovered around [station_name()]. It was identified by Nanotrasen as a nuclear auth. disk and now Syndicate Operatives have arrived to retake the disk and detonate SS13! Also, most likely Syndicate star ships are in the vicinity so take care not to lose the disk!\n<B>Syndicate</B>: Reclaim the disk and detonate the nuclear bomb anywhere on SS13.\n<B>Personnel</B>: Hold the disk and <B>escape with the disk</B> on the shuttle!"
world << "A nuclear explosive was being transported by NanoTrasen to a military base. The transport ship mysteriously lost contact with Space Traffic Control (STC). About that time a strange disk was discovered around [station_name()]. It was identified by NanoTrasen as a nuclear authentication disk and now Syndicate Operatives have arrived to retake the disk and detonate SS13! There are most likely Syndicate starships are in the vicinity, so take care not to lose the disk!\n<B>Syndicate</B>: Reclaim the disk and detonate the nuclear bomb anywhere on SS13.\n<B>Personnel</B>: Hold the disk and <B>escape with the disk</B> on the shuttle!"
/datum/game_mode/nuclear/can_start()//This could be better, will likely have to recode it later
if(!..())
@@ -374,30 +374,30 @@ proc/issyndicate(mob/living/M as mob)
/datum/game_mode/proc/auto_declare_completion_nuclear()
if( syndicates.len || (ticker && istype(ticker.mode,/datum/game_mode/nuclear)) )
var/text = "<FONT size = 2><B>The syndicate operatives were:</B></FONT>"
var/text = "<br><FONT size=3><B>The syndicate operatives were:</B></FONT>"
var/purchases = ""
var/TC_uses = 0
for(var/datum/mind/syndicate in syndicates)
text += "<br>[syndicate.key] was [syndicate.name] ("
text += "<br><b>[syndicate.key]</b> was <b>[syndicate.name]</b> ("
if(syndicate.current)
if(syndicate.current.stat == DEAD)
text += "died"
else
text += "survived"
if(syndicate.current.real_name != syndicate.name)
text += " as [syndicate.current.real_name]"
text += " as <b>[syndicate.current.real_name]</b>"
else
text += "body destroyed"
text += ")"
for(var/obj/item/device/uplink/H in world_uplinks)
if(H && H.uplink_owner && H.uplink_owner==syndicate.name)
if(H && H.uplink_owner && H.uplink_owner==syndicate.key)
TC_uses += H.used_TC
purchases += H.purchase_log
text += "<br>"
text += "(Syndicates used [TC_uses] TC) [purchases]"
@@ -407,7 +407,6 @@ proc/issyndicate(mob/living/M as mob)
world << text
return 1
/proc/nukelastname(var/mob/M as mob) //--All praise goes to NEO|Phyte, all blame goes to DH, and it was Cindi-Kate's idea. Also praise Urist for copypasta ho.
var/randomname = pick(last_names)
var/newname = copytext(sanitize(input(M,"You are the nuke operative [pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord")]. Please choose a last name for your family.", "Name change",randomname)),1,MAX_NAME_LEN)
+7 -8
View File
@@ -238,7 +238,7 @@
var/uplink_true = 0
var/purchases = ""
for(var/obj/item/device/uplink/H in world_uplinks)
if(H && H.uplink_owner && H.uplink_owner==traitor.name)
if(H && H.uplink_owner && H.uplink_owner==traitor.key)
TC_uses += H.used_TC
uplink_true=1
purchases += H.purchase_log
@@ -287,7 +287,6 @@
traitor_mob.mutations.Remove(M_CLUMSY)
// find a radio! toolbox(es), backpack, belt, headset
var/loc = ""
var/obj/item/R = locate(/obj/item/device/pda) in traitor_mob.contents //Hide the uplink in a PDA if available, otherwise radio
if(!R)
R = locate(/obj/item/device/radio) in traitor_mob.contents
@@ -311,22 +310,22 @@
var/obj/item/device/uplink/hidden/T = new(R)
target_radio.hidden_uplink = T
T.uplink_owner = "[traitor_mob]"
T.uplink_owner = "[traitor_mob.key]"
target_radio.traitor_frequency = freq
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."
traitor_mob.mind.store_memory("<B>Radio Freq:</B> [format_frequency(freq)] ([R.name] [loc]).")
traitor_mob << "The Syndicate have cunningly disguised a Syndicate Uplink as your [R.name] [T.loc]. Simply dial the frequency [format_frequency(freq)] to unlock its hidden features."
traitor_mob.mind.store_memory("<B>Radio Freq:</B> [format_frequency(freq)] ([R.name] [T.loc]).")
else if (istype(R, /obj/item/device/pda))
// 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/device/uplink/hidden/T = new(R)
R.hidden_uplink = T
T.uplink_owner = "[traitor_mob]"
T.uplink_owner = "[traitor_mob.key]"
var/obj/item/device/pda/P = R
P.lock_code = pda_pass
traitor_mob << "The Syndicate have cunningly disguised a Syndicate Uplink as your [R.name] [loc]. Simply enter the code \"[pda_pass]\" into the ringtone select to unlock its hidden features."
traitor_mob.mind.store_memory("<B>Uplink Passcode:</B> [pda_pass] ([R.name] [loc]).")
traitor_mob << "The Syndicate have cunningly disguised a Syndicate Uplink as your [R.name] [T.loc]. Simply enter the code \"[pda_pass]\" into the ringtone select to unlock its hidden features."
traitor_mob.mind.store_memory("<B>Uplink Passcode:</B> [pda_pass] ([R.name] [T.loc]).")
if(!safety)//If they are not a rev. Can be added on to.
give_codewords(traitor_mob)
+13 -13
View File
@@ -201,27 +201,27 @@
if("Thunderdome Overseer")
return list(access_cent_general, access_cent_thunder)
if("Emergency Response Team")
return list(access_cent_general, access_cent_living, access_cent_storage)
return list(access_cent_general, access_cent_living, access_cent_storage) + get_all_accesses()
if("Emergency Response Team Leader")
return list(access_cent_general, access_cent_living, access_cent_storage, access_cent_teleporter)
return list(access_cent_general, access_cent_living, access_cent_storage, access_cent_teleporter) + get_all_accesses()
if("Intel Officer")
return list(access_cent_general, access_cent_living)
return list(access_cent_general, access_cent_living) + get_all_accesses()
if("Medical Officer")
return list(access_cent_general, access_cent_living, access_cent_medical)
return list(access_cent_general, access_cent_living, access_cent_medical) + get_all_accesses()
if("Death Commando")
return list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage)
return list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage) + get_all_accesses()
if("Research Officer")
return list(access_cent_general, access_cent_specops, access_cent_medical, access_cent_teleporter, access_cent_storage)
return list(access_cent_general, access_cent_specops, access_cent_medical, access_cent_teleporter, access_cent_storage) + get_all_accesses()
if("BlackOps Commander")
return list(access_cent_general, access_cent_thunder, access_cent_specops, access_cent_living, access_cent_storage, access_cent_creed)
return list(access_cent_general, access_cent_thunder, access_cent_specops, access_cent_living, access_cent_storage, access_cent_creed) + get_all_accesses()
if("Special Operations Officer")
return get_all_centcom_access()
return get_all_centcom_access() + get_all_accesses()
if("NanoTrasen Navy Officer")
return get_all_centcom_access()
return get_all_centcom_access() + get_all_accesses()
if("NanoTrasen Navy Captain")
return get_all_centcom_access()
return get_all_centcom_access() + get_all_accesses()
if("Supreme Commander")
return get_all_centcom_access()
return get_all_centcom_access() + get_all_accesses()
/proc/get_all_accesses()
return list(access_security, access_sec_doors, access_brig, access_armory, access_forensics_lockers, access_court,
@@ -369,9 +369,9 @@
if(access_qm)
return "Quartermaster"
if(access_clown)
return "HONK! Access"
return "Clown's Office"
if(access_mime)
return "Silent Access"
return "Mime's Office"
if(access_surgery)
return "Surgery"
if(access_theatre)
-94
View File
@@ -1,94 +0,0 @@
/*
Captain
*/
/datum/job/captain
title = "Captain"
flag = CAPTAIN
department_head = list("Centcom")
department_flag = ENGSEC
faction = "Station"
total_positions = 1
spawn_positions = 1
supervisors = "Nanotrasen officials and Space law"
selection_color = "#ccccff"
req_admin_notify = 1
minimal_player_age = 14
default_id = /obj/item/weapon/card/id/gold
default_pda = /obj/item/device/pda/captain
default_headset = /obj/item/device/radio/headset/heads/captain
default_backpack = /obj/item/weapon/storage/backpack/captain
default_satchel = /obj/item/weapon/storage/backpack/satchel_cap
access = list() //See get_access()
minimal_access = list() //See get_access()
/datum/job/captain/equip_items(var/mob/living/carbon/human/H)
var/obj/item/clothing/under/U = new /obj/item/clothing/under/rank/captain(H)
U.attachTie(new /obj/item/clothing/tie/medal/gold/captain())
H.equip_to_slot_or_del(U, slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/capcarapace(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/head/caphat(H), slot_head)
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
//Equip ID box
if(H.backbag == 1)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/silver_ids(H), slot_l_hand)
else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/silver_ids(H.back), slot_in_backpack)
//Implant him
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
world << "<b>[H.real_name] is the captain!</b>"
/datum/job/captain/get_access()
return get_all_accesses()
/*
Head of Personnel
*/
/datum/job/hop
title = "Head of Personnel"
flag = HOP
department_head = list("Captain")
department_flag = CIVILIAN
faction = "Station"
total_positions = 1
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ddddff"
req_admin_notify = 1
minimal_player_age = 10
default_id = /obj/item/weapon/card/id/silver
default_pda = /obj/item/device/pda/heads/hop
default_headset = /obj/item/device/radio/headset/heads/hop
access = list(access_security, access_sec_doors, access_brig, access_court, access_forensics_lockers, access_weapons,
access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads,
access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue,
access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer,
access_theatre, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
access_hop, access_RC_announce, access_keycard_auth, access_gateway, access_mineral_storeroom)
minimal_access = list(access_security, access_sec_doors, access_court, access_weapons,
access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads,
access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue,
access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer,
access_theatre, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
access_hop, access_RC_announce, access_keycard_auth, access_gateway, access_mineral_storeroom)
/datum/job/hop/equip_items(var/mob/living/carbon/human/H)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_personnel(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/head/hopcap(H), slot_head)
//Equip ID box
if(H.backbag == 1)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H), slot_l_hand)
else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack)
+1 -1
View File
@@ -4,7 +4,7 @@
department_flag = SUPPORT
total_positions = -1
spawn_positions = -1
supervisors = "absolutely everyone"
supervisors = "the head of personnel"
selection_color = "#dddddd"
access = list() //See /datum/job/assistant/get_access()
minimal_access = list() //See /datum/job/assistant/get_access()
+5 -8
View File
@@ -48,7 +48,7 @@
selection_color = "#ffeef0"
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
minimal_access = list(access_medical, access_morgue, access_surgery, access_maint_tunnels)
alt_titles = list("Surgeon","Nurse"/*,"Virologist","Medical Intern","Orderly","First Responder"*/)
alt_titles = list("Surgeon","Nurse","Mortician")
minimal_player_age = 3
equip(var/mob/living/carbon/human/H)
@@ -60,9 +60,9 @@
if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
if (H.mind.role_alt_title)
switch(H.mind.role_alt_title)
if("Emergency Physician")
H.equip_or_collect(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/suit/storage/fr_jacket(H), slot_wear_suit)
if("Mortician")
H.equip_or_collect(new /obj/item/clothing/under/rank/medical/mortician(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/suit/storage/labcoat/mortician(H), slot_wear_suit)
if("Surgeon")
H.equip_or_collect(new /obj/item/clothing/under/rank/medical/blue(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
@@ -132,7 +132,7 @@
department_flag = MEDSCI
total_positions = 2
spawn_positions = 2
supervisors = "the chief medical officer and research director"
supervisors = "the chief medical officer and the research director"
selection_color = "#ffeef0"
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_research)
minimal_access = list(access_medical, access_morgue, access_genetics, access_research, access_maint_tunnels)
@@ -254,6 +254,3 @@
H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H.back), slot_in_backpack)
H.equip_or_collect(new /obj/item/device/healthanalyzer(H.back), slot_in_backpack)
return 1
+3 -3
View File
@@ -9,11 +9,11 @@
idtype = /obj/item/weapon/card/id/silver
req_admin_notify = 1
access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue,
access_tox_storage, access_teleporter, access_sec_doors,
access_tox_storage, access_tech_storage, access_teleporter, access_sec_doors,
access_research, access_robotics, access_xenobiology, access_ai_upload,
access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch)
minimal_access = list(access_eva, access_rd, access_heads, access_tox, access_genetics, access_morgue,
access_tox_storage, access_teleporter, access_sec_doors,
access_tox_storage, access_tech_storage, access_teleporter, access_sec_doors,
access_research, access_robotics, access_xenobiology, access_ai_upload,
access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_maint_tunnels)
minimal_player_age = 21
@@ -117,7 +117,7 @@
department_flag = MEDSCI
total_positions = 2
spawn_positions = 2
supervisors = "research director"
supervisors = "the research director"
selection_color = "#ffeeff"
access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access.
minimal_access = list(access_robotics, access_tech_storage, access_morgue, access_research, access_maint_tunnels) //As a job that handles so many corpses, it makes sense for them to have morgue access.
+1 -1
View File
@@ -207,7 +207,7 @@
department_flag = KARMA
total_positions = 1
spawn_positions = 1
supervisors = "the warden"
supervisors = "the head of security"
selection_color = "#ffeeee"
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
minimal_access = list(access_medical, access_morgue, access_surgery, access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels)
+11 -11
View File
@@ -4,7 +4,7 @@
department_flag = ENGSEC
total_positions = 1
spawn_positions = 1
supervisors = "Nanotrasen officials and Space law"
supervisors = "NanoTrasen officials"
selection_color = "#ccccff"
idtype = /obj/item/weapon/card/id/gold
req_admin_notify = 1
@@ -96,12 +96,12 @@
/datum/job/nanotrasenrep
title = "Nanotrasen Representative"
flag = NANO
title = "NanoTrasen Representative"
flag = NANO
department_flag = KARMA
total_positions = 1
spawn_positions = 1
supervisors = "Nanotrasen Board of Directors"
supervisors = "the NanoTrasen Board of Directors"
selection_color = "#ddddff"
idtype = /obj/item/weapon/card/id/centcom
req_admin_notify = 1
@@ -141,12 +141,12 @@
return 1
/datum/job/nanotrasenrec
title = "Nanotrasen Recruiter"
flag = NANOREC
title = "NanoTrasen Recruiter"
flag = NANOREC
department_flag = KARMA
total_positions = 1
spawn_positions = 1
supervisors = "Nanotrasen Board of Directors"
supervisors = "the NanoTrasen Board of Directors"
selection_color = "#ddddff"
idtype = /obj/item/weapon/card/id/centcom
req_admin_notify = 1
@@ -186,11 +186,11 @@
/datum/job/blueshield
title = "Blueshield"
flag = BLUESHIELD
flag = BLUESHIELD
department_flag = KARMA
total_positions = 1
spawn_positions = 1
supervisors = "Whichever head your protect, and ultimately the Captain"
supervisors = "the captain"
selection_color = "#ddddff"
idtype = /obj/item/weapon/card/id/centcom
req_admin_notify = 1
@@ -236,11 +236,11 @@
/datum/job/judge
title = "Magistrate"
flag = JUDGE
flag = JUDGE
department_flag = KARMA
total_positions = 1
spawn_positions = 1
supervisors = "Centcom High Court"
supervisors = "the NanoTrasen Supreme Court"
selection_color = "#ddddff"
idtype = /obj/item/weapon/card/id/centcom
req_admin_notify = 1
+2 -2
View File
@@ -139,7 +139,7 @@
department_flag = SUPPORT
total_positions = 2
spawn_positions = 2
supervisors = "the quartermaster and the head of personnel"
supervisors = "the quartermaster"
selection_color = "#dddddd"
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station)
minimal_access = list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting)
@@ -166,7 +166,7 @@
department_flag = SUPPORT
total_positions = 3
spawn_positions = 3
supervisors = "the quartermaster and the head of personnel"
supervisors = "the quartermaster"
selection_color = "#dddddd"
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station)
minimal_access = list(access_mining, access_mint, access_mining_station, access_mailsorting, access_maint_tunnels)
+1 -1
View File
@@ -467,7 +467,7 @@ var/global/datum/controller/occupations/job_master
H << "<B>You are the [alt_title ? alt_title : rank].</B>"
H << "<b>As the [alt_title ? alt_title : rank] you answer directly to [job.supervisors]. Special circumstances may change this.</b>"
if(job.req_admin_notify)
H << "<b>You are playing a job that is important for Game Progression. If you have to disconnect, please notify the admins via adminhelp.</b>"
H << "<b>You are playing a job that is important for the game progression. If you have to disconnect, please notify the admins via adminhelp.</b>"
spawnId(H, rank, alt_title)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset(H), slot_l_ear)
+24 -22
View File
@@ -38,6 +38,7 @@ var/global/list/autolathe_recipes = list( \
new /obj/item/device/radio/off(), \
new /obj/item/device/assembly/infra(), \
new /obj/item/device/assembly/timer(), \
new /obj/item/device/assembly/prox_sensor(), \
new /obj/item/device/assembly/voice(), \
new /obj/item/weapon/light/tube(), \
new /obj/item/weapon/light/bulb(), \
@@ -45,10 +46,7 @@ var/global/list/autolathe_recipes = list( \
new /obj/item/weapon/rcd_ammo(), \
new /obj/item/ammo_casing/shotgun/beanbag(), \
new /obj/item/weapon/storage/box/blanks(), \
new /obj/item/weapon/storage/box/gauge(), \
new /obj/item/ammo_casing/shotgun/incendiary(), \
new /obj/item/ammo_box/c38(), \
new /obj/item/ammo_box/a357(), \
new /obj/item/clothing/ears/earmuffs/tribblemuffs(), \
new /obj/item/clothing/gloves/furgloves(), \
new /obj/item/clothing/head/furcap(), \
@@ -64,6 +62,10 @@ var/global/list/autolathe_recipes_hidden = list( \
new /obj/item/weapon/weldingtool/largetank(), \
new /obj/item/weapon/handcuffs(), \
new /obj/item/weapon/hatchet(), \
new /obj/item/ammo_box/a357(), \
new /obj/item/ammo_casing/shotgun(), \
new /obj/item/ammo_casing/shotgun/buck(), \
new /obj/item/ammo_casing/shotgun/incendiary(), \
/*new /obj/item/ammo_casing/shotgun/dart(), \
new /obj/item/weapon/shield/riot(), */ \
)
@@ -107,7 +109,7 @@ var/global/list/autolathe_recipes_hidden = list( \
SetLuminosity(2)
else
SetLuminosity(0)
/obj/machinery/autolathe/New()
..()
component_parts = list()
@@ -122,7 +124,7 @@ var/global/list/autolathe_recipes_hidden = list( \
wires = new(src)
src.L = autolathe_recipes
src.LL = autolathe_recipes_hidden
/obj/machinery/autolathe/proc/wires_win(mob/user as mob)
var/dat as text
dat += "Autolathe Wires:<BR>"
@@ -180,36 +182,36 @@ var/global/list/autolathe_recipes_hidden = list( \
/obj/machinery/autolathe/interact(mob/user as mob)
if(..())
return
if (src.shocked)
src.shock(user,50)
if (src.panel_open)
wires_win(user,50)
return
if (src.disabled)
user << "\red You press the button, but nothing happens."
return
regular_win(user)
return
/obj/machinery/autolathe/attackby(var/obj/item/O as obj, var/mob/user as mob)
if (stat)
return 1
if (busy)
user << "\red The autolathe is busy. Please wait for completion of previous operation."
return 1
if (istype(O, /obj/item/weapon/screwdriver))
default_deconstruction_screwdriver(user, "autolathe_t", "autolathe", O)
return 1
if(exchange_parts(user, O))
return
return
if (panel_open)
//Don't eat multitools or wirecutters used on an open lathe.
if(istype(O, /obj/item/device/multitool) || istype(O, /obj/item/weapon/wirecutters))
@@ -304,7 +306,7 @@ var/global/list/autolathe_recipes_hidden = list( \
usr.set_machine(src)
src.add_fingerprint(usr)
if (!busy)
if(href_list["make"])
if(href_list["make"])
var/coeff = 2 ** prod_coeff
var/turf/T = get_step(src.loc, get_dir(src,usr))
@@ -355,7 +357,7 @@ var/global/list/autolathe_recipes_hidden = list( \
src.m_amount -= template.m_amt*multiplier
src.g_amount -= template.g_amt*multiplier
src.f_amount -= template.f_amt*multiplier
var/obj/new_item = new template.type(T)
var/obj/new_item = new template.type(T)
var/obj/item/stack/S = new_item
S.amount = multiplier
else
@@ -364,16 +366,16 @@ var/global/list/autolathe_recipes_hidden = list( \
src.f_amount -= template.f_amt/coeff
var/obj/item/new_item = new template.type(T)
new_item.m_amt /= coeff
new_item.g_amt /= coeff
new_item.f_amt /= coeff
new_item.g_amt /= coeff
new_item.f_amt /= coeff
if(src.m_amount < 0)
src.m_amount = 0
if(src.g_amount < 0)
src.g_amount = 0
if(src.f_amount < 0)
src.f_amount = 0
busy = 0
busy = 0
if(href_list["act"])
var/temp_wire = href_list["wire"]
if(href_list["act"] == "pulse")
@@ -422,8 +424,8 @@ var/global/list/autolathe_recipes_hidden = list( \
max_g_amount = tot_rating
max_f_amount = tot_rating
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
prod_coeff += M.rating - 1
prod_coeff += M.rating - 1
/obj/machinery/autolathe/RefreshParts()
..()
var/tot_rating = 0
+6 -6
View File
@@ -219,7 +219,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
return
var/selected = plist[c]
aiPDA.create_message(user, selected)
/mob/living/silicon/ai/proc/cmd_show_message_log(mob/user as mob)
if(user.stat == 2)
user << "You can't do that because you are dead!"
@@ -247,7 +247,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
return
var/selected = plist[c]
create_message(usr, selected)
/obj/item/device/pda/ai/verb/cmd_show_message_log()
set category = "AI IM"
set name = "Show Message Log"
@@ -918,18 +918,18 @@ var/global/list/obj/item/device/pda/PDAs = list()
useMS.send_pda_message("[P.owner]","[owner]","[t]")
tnote.Add(list(list("sent" = 1, "owner" = "[P.owner]", "job" = "[P.ownjob]", "message" = "[t]", "target" = "\ref[P]")))
P.tnote.Add(list(list("sent" = 0, "owner" = "[owner]", "job" = "[ownjob]", "message" = "[t]", "target" = "\ref[src]")))
for(var/mob/M in player_list)
/* for(var/mob/M in player_list)
if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) // src.client is so that ghosts don't have to listen to mice
if(istype(M, /mob/new_player))
continue
M.show_message("<span class='game say'>PDA Message - <span class='name'>[owner]</span> -> <span class='name'>[P.owner]</span>: <span class='message'>[t]</span></span>")
M.show_message("<span class='game say'>PDA Message - <span class='name'>[owner]</span> -> <span class='name'>[P.owner]</span>: <span class='message'>[t]</span></span>") */
investigate_log("<span class='game say'>PDA Message - <span class='name'>[U.key] - [owner]</span> -> <span class='name'>[P.owner]</span>: <span class='message'>[t]</span></span>", "pda")
if(!conversations.Find("\ref[P]"))
conversations.Add("\ref[P]")
if(!P.conversations.Find("\ref[src]"))
P.conversations.Add("\ref[src]")
/*
if (prob(15)) //Give the AI a chance of intercepting the message
var/who = src.owner
if(prob(50))
@@ -938,7 +938,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
// Allows other AIs to intercept the message but the AI won't intercept their own message.
if(ai.aiPDA != P && ai.aiPDA != src)
ai.show_message("<i>Intercepted message from <b>[who]</b>: [t]</i>")
*/
if (!P.silent)
playsound(P.loc, 'sound/machines/twobeep.ogg', 50, 1)
+44 -1
View File
@@ -193,4 +193,47 @@
icon_state = initial(icon_state)
/obj/item/device/flashlight/slime/attack_self(mob/user)
return //Bio-luminescence does not toggle.
return //Bio-luminescence does not toggle.
/obj/item/device/flashlight/emp
origin_tech = "magnets=4;syndicate=5"
var/emp_max_charges = 4
var/emp_cur_charges = 4
var/charge_tick = 0
/obj/item/device/flashlight/emp/New()
..()
processing_objects.Add(src)
/obj/item/device/flashlight/emp/Destroy()
processing_objects.Remove(src)
..()
/obj/item/device/flashlight/emp/process()
charge_tick++
if(charge_tick < 10) return 0
charge_tick = 0
emp_cur_charges = min(emp_cur_charges+1, emp_max_charges)
return 1
/obj/item/device/flashlight/emp/attack(mob/living/M as mob, mob/living/user as mob)
if(on && user.zone_sel.selecting == "eyes") // call original attack proc only if aiming at the eyes
..()
return
/obj/item/device/flashlight/emp/afterattack(atom/A as mob|obj, mob/user, proximity)
if(!proximity) return
if (emp_cur_charges > 0)
emp_cur_charges -= 1
A.visible_message("<span class='danger'>[user] blinks \the [src] at \the [A].", \
"<span class='userdanger'>[user] blinks \the [src] at \the [A].")
if(ismob(A))
var/mob/M = A
add_logs(user, M, "attacked", object="EMP-light")
user << "\The [src] now has [emp_cur_charges] charge\s."
A.emp_act(1)
else
user << "<span class='warning'>\The [src] needs time to recharge!</span>"
return
+2 -2
View File
@@ -409,9 +409,9 @@
/obj/item/weapon/twohanded/dualsaber/toy/IsShield()
return 0
/*
/obj/item/weapon/twohanded/dualsaber/toy/IsReflect()//Stops Toy Dualsabers from reflecting energy projectiles
return 0 */ //uncomment this once reflecting is ported
return 0
/obj/item/toy/katana
name = "replica katana"
+6 -6
View File
@@ -13,7 +13,7 @@
*/
/obj/item/weapon/card
name = "card"
desc = "Does card things."
desc = "A card."
icon = 'icons/obj/card.dmi'
w_class = 1.0
var/associated_account_number = 0
@@ -22,7 +22,7 @@
/obj/item/weapon/card/data
name = "data card"
desc = "A disk of data."
desc = "A disk containing data."
icon_state = "data"
var/function = "storage"
var/data = "null"
@@ -191,7 +191,7 @@
/obj/item/weapon/card/id/attack_self(mob/user as mob)
for(var/mob/O in viewers(user, null))
O.show_message(text("[] shows you: \icon[] []: assignment: []", user, src, src.name, src.assignment), 1)
O.show_message(text("[] shows you: \icon[] []. The assignment on the card: []", user, src, src.name, src.assignment), 1)
if(mining_points)
user << "There's [mining_points] mining equipment redemption points loaded onto this card."
src.add_fingerprint(user)
@@ -324,7 +324,7 @@
/obj/item/weapon/card/id/captains_spare
name = "captain's spare ID"
desc = "The spare ID of the High Lord himself."
desc = "The spare ID of the captain."
icon_state = "gold"
item_state = "gold_id"
registered_name = "Captain"
@@ -335,8 +335,8 @@
..()
/obj/item/weapon/card/id/centcom
name = "\improper CentCom. ID"
desc = "An ID straight from Cent. Com."
name = "central command ID card"
desc = "An ID straight from Central Command."
icon_state = "centcom"
registered_name = "Central Command"
assignment = "General"
@@ -326,6 +326,18 @@ CIGARETTE PACKETS ARE IN FANCY.DM
return
if(location)
location.hotspot_expose(700, 5)
if(reagents && reagents.total_volume) // check if it has any reagents at all
if(iscarbon(loc) && (src == loc:wear_mask)) // if it's in the human/monkey mouth, transfer reagents to the mob
if(istype(loc, /mob/living/carbon/human))
var/mob/living/carbon/human/H = loc
if(H.species.flags & IS_SYNTHETIC)
return
var/mob/living/carbon/C = loc
if(prob(15)) // so it's not an instarape in case of acid
reagents.reaction(C, INGEST)
reagents.trans_to(C, REAGENTS_METABOLISM)
else // else just remove some of the reagents
reagents.remove_any(REAGENTS_METABOLISM)
return
/obj/item/clothing/mask/cigarette/pipe/attack_self(mob/user as mob) //Refills the pipe. Can be changed to an attackby later, if loose tobacco is added to vendors or something.
@@ -267,6 +267,11 @@
block = TELEBLOCK
..()
/obj/item/weapon/dnainjector/telemut/darkbundle
name = "DNA injector"
desc = "Good. Let the hate flow through you."
/obj/item/weapon/dnainjector/antitele
name = "DNA-Injector (Anti-Tele.)"
desc = "Will make you not able to control your mind."
@@ -567,3 +567,28 @@ the implant may become unstable and either pre-maturely inject the subject or si
name = "cortical stack"
desc = "A fist-sized mass of biocircuits and chips."
icon_state = "implant_evil"
/obj/item/weapon/implant/emp
name = "emp implant"
desc = "Triggers an EMP."
var/activation_emote = "chuckle"
var/uses = 2
/obj/item/weapon/implant/emp/New()
activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "smile", "pale", "sniff", "whimper", "wink")
..()
return
/obj/item/weapon/implant/emp/trigger(emote, mob/living/carbon/source as mob)
if (src.uses < 1) return 0
if (emote == src.activation_emote)
src.uses--
empulse(source, 3, 5)
return
/obj/item/weapon/implant/emp/implanted(mob/living/carbon/source)
source.mind.store_memory("EMP implant can be activated [uses] time\s by using the [src.activation_emote] emote, <B>say *[src.activation_emote]</B> to attempt to activate.", 0, 0)
source << "The implanted EMP implant can be activated [uses] time\s by using the [src.activation_emote] emote, <B>say *[src.activation_emote]</B> to attempt to activate."
return 1
@@ -170,3 +170,12 @@
..()
update()
return
/obj/item/weapon/implanter/emp
name = "implanter-EMP"
New()
src.imp = new /obj/item/weapon/implant/emp(src)
..()
update()
return
@@ -214,6 +214,17 @@
var/new_name = pick("evil", "suspicious", "ominous", "donk-flavored", "robust", "sneaky")
name = "[new_name] cigarette packet"
/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate
name = "cigarette packet"
desc = "An obscure brand of cigarettes."
icon_state = "syndiepacket"
item_state = "syndiepacket"
/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate/New()
..()
for(var/i = 1 to storage_slots)
reagents.add_reagent("doctorsdelight",15)
/*
* Vial Box
*/
@@ -1,11 +1,12 @@
/obj/item/weapon/storage/box/syndicate/
New()
..()
switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "screwed" = 1, "guns" = 1, "murder" = 1, "freedom" = 1, "hacker" = 1, "lordsingulo" = 1, "smoothoperator" = 1)))
switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "bond" = 1, "screwed" = 1, "guns" = 1, "murder" = 1, "implant" = 1, "hacker" = 1, "lordsingulo" = 1, "darklord" = 1)))
if("bloodyspai")
new /obj/item/clothing/under/chameleon(src)
new /obj/item/clothing/mask/gas/voice(src)
new /obj/item/weapon/card/id/syndicate(src)
new /obj/item/weapon/card/id/syndicate(src)
new /obj/item/clothing/shoes/syndigaloshes(src)
return
@@ -15,12 +16,20 @@
new /obj/item/device/chameleon(src)
return
if("bond")
new /obj/item/weapon/gun/projectile/automatic/pistol(src)
new /obj/item/weapon/silencer(src)
new /obj/item/ammo_box/magazine/m10mm(src)
new /obj/item/ammo_box/magazine/m10mm(src)
new /obj/item/clothing/under/chameleon(src)
new /obj/item/weapon/card/id/syndicate(src)
if("screwed")
new /obj/effect/spawner/newbomb/timer/syndicate(src)
new /obj/effect/spawner/newbomb/timer/syndicate(src)
new /obj/item/device/radio/beacon/syndicate/bomb(src)
new /obj/item/weapon/grenade/syndieminibomb(src)
new /obj/item/device/powersink(src)
new /obj/item/clothing/suit/space/syndicate(src)
new /obj/item/clothing/head/helmet/space/syndicate(src)
new /obj/item/clothing/suit/space/syndicate/black/red(src)
new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
return
if("guns")
@@ -37,11 +46,18 @@
new /obj/item/clothing/shoes/syndigaloshes(src)
return
if("freedom")
if("implant")
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(src)
O.imp = new /obj/item/weapon/implant/freedom(O)
var/obj/item/weapon/implanter/U = new /obj/item/weapon/implanter(src)
U.imp = new /obj/item/weapon/implant/uplink(U)
var/obj/item/weapon/implanter/C = new /obj/item/weapon/implanter(src)
C.imp = new /obj/item/weapon/implant/emp(C)
var/obj/item/weapon/implanter/K = new /obj/item/weapon/implanter(src)
K.imp = new /obj/item/weapon/implant/adrenalin(K)
var/obj/item/weapon/implanter/S = new /obj/item/weapon/implanter(src)
S.imp = new /obj/item/weapon/implant/explosive(S)
S.name += " (explosive)"
return
if("hacker")
@@ -52,19 +68,18 @@
if("lordsingulo")
new /obj/item/device/radio/beacon/syndicate(src)
new /obj/item/clothing/suit/space/syndicate(src)
new /obj/item/clothing/head/helmet/space/syndicate(src)
new /obj/item/clothing/suit/space/syndicate/black/red(src)
new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
new /obj/item/weapon/card/emag(src)
return
if("smoothoperator")
new /obj/item/weapon/gun/projectile/automatic/pistol(src)
new /obj/item/weapon/silencer(src)
new /obj/item/weapon/soap/syndie(src)
new /obj/item/weapon/storage/bag/trash(src)
new /obj/item/bodybag(src)
new /obj/item/clothing/under/suit_jacket(src)
new /obj/item/clothing/shoes/laceup(src)
if("darklord")
new /obj/item/weapon/melee/energy/sword(src)
new /obj/item/weapon/melee/energy/sword(src)
new /obj/item/weapon/dnainjector/telemut/darkbundle(src)
new /obj/item/clothing/head/chaplain_hood(src)
new /obj/item/clothing/suit/chaplain_hoodie(src)
new /obj/item/weapon/card/id/syndicate(src)
return
/obj/item/weapon/storage/box/syndie_kit
@@ -165,4 +180,14 @@
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
/obj/item/weapon/storage/box/syndie_kit/emp
name = "boxed EMP kit"
New()
..()
new /obj/item/weapon/grenade/empgrenade(src)
new /obj/item/weapon/grenade/empgrenade(src)
new /obj/item/weapon/implanter/emp/(src)
new /obj/item/device/flashlight/emp/(src)
+12
View File
@@ -322,4 +322,16 @@
desc = " A purple beret, with a small golden crescent moon sewn onto it."
icon_state = "purpleberet"
item_state = "purpleberet"
flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/centcom/officer
name = "officers beret"
desc = "A black beret adorned with the shield—a silver kite shield with an engraved sword—of the NanoTrasen security forces, announcing to the world that the wearer is a defender of NanoTrasen."
icon_state = "centcomofficerberet"
flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/centcom/captain
name = "captains beret"
desc = "A white beret adorned with the shield—a cobalt kite shield with an engraved sword—of the NanoTrasen security forces, worn only by those captaining a vessel of the NanoTrasen Navy."
icon_state = "centcomcaptain"
flags = FPRINT | TABLEPASS
@@ -143,3 +143,8 @@
icon_state = "roman"
item_state = "roman"
species_restricted = null
/obj/item/clothing/shoes/centcom
name = "dress shoes"
desc = "They appear impeccably polished."
icon_state = "laceups"
+19 -1
View File
@@ -371,7 +371,7 @@
..(user)
else
camera = new /obj/machinery/camera(src)
camera.network = list("NUKE")
camera.network = list("NukeOps")
cameranet.removeCamera(camera)
camera.c_tag = user.name
user << "\blue User scanned as [camera.c_tag]. Camera activated."
@@ -472,3 +472,21 @@
item_state = "atmos_hardsuit"
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 50)
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
//Singuloth armor
/obj/item/clothing/head/helmet/space/rig/singuloth
name = "singuloth knight's helmet"
desc = "This is an adamantium helmet from the chapter of the Singuloth Knights. It shines with a holy aura."
icon_state = "rig0-singuloth"
item_state = "singuloth_helm"
_color = "singuloth"
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 80)
/obj/item/clothing/suit/space/rig/singuloth
icon_state = "rig-singuloth"
name = "singuloth knight's armor"
desc = "This is a ceremonial armor from the chapter of the Singuloth Knights. It's made of pure forged adamantium."
item_state = "singuloth_hardsuit"
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 80)
+15
View File
@@ -63,6 +63,12 @@
if("labgreen")
src.icon_state = "labgreen_open"
usr << "You unbutton the labcoat."
if("labmort_open")
src.icon_state = "labcoat_mort"
usr << "You button up the labcoat."
if("labgreen")
src.icon_state = "labcoat_mort_open"
usr << "You unbutton the labcoat."
else
usr << "You attempt to button-up the velcro on your [src], before promptly realising how retarded you are."
return
@@ -124,3 +130,12 @@
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/suit.dmi'
)
/obj/item/clothing/suit/storage/labcoat/mortician
name = "Mortician Labcoat"
desc = "A suit that protects against minor chemical spills. Has a black stripe on the shoulder."
icon_state = "labcoat_mort_open"
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/suit.dmi'
)
@@ -76,6 +76,32 @@
item_state = "dg_suit"
_color = "centcom"
/obj/item/clothing/under/rank/centcom/officer
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Lieutenant Commander\" and bears \"N.C.V. Fearless CV-286\" on the left shounder."
name = "\improper NanoTrasen Officers Uniform"
icon_state = "officer"
item_state = "g_suit"
_color = "officer"
displays_id = 0
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
/obj/item/clothing/under/rank/centcom/captain
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Captain\" and bears \"N.C.V. Fearless CV-286\" on the left shounder."
name = "\improper NanoTrasen Captains Uniform"
icon_state = "centcom"
item_state = "dg_suit"
_color = "centcom"
displays_id = 0
/obj/item/clothing/under/rank/centcom/representative
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Ensign\" and bears \"N.C.V. Fearless CV-286\" on the left shounder."
name = "\improper NanoTrasen Navy Uniform"
icon_state = "officer"
item_state = "g_suit"
_color = "officer"
displays_id = 0
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
/obj/item/clothing/under/space
name = "\improper NASA jumpsuit"
desc = "It has a NASA logo on it and is made of space-proofed materials."
@@ -180,6 +206,7 @@
item_state = "r_suit"
_color = "red_suit"
species_fit = list("Vox")
flags = ONESIZEFITSALL
/obj/item/clothing/under/blackskirt
name = "black skirt"
+1 -1
View File
@@ -24,7 +24,7 @@
var/list/gunk = list("water","carbon","flour","radium","toxin","cleaner","nutriment","condensedcapsaicin","psilocybin","lube",
"plantbgone","banana","anti_toxin","space_drugs","hyperzine","holywater","ethanol","hot_coco","pacid",
"blood","stoxin","fluorine","ryetalyn","mutagen","oxycodone","fuel","cryptobiolin",
"impedrezene","mindbreaker","nanites","xenomicrobes","lipozine","frostoil","alchdranine","beepskysmash",
"impedrezene","mindbreaker","nanites","xenomicrobes","lipozine","frostoil","doctorsdelight","beepskysmash",
"tricordrazine", "amatoxin", "adminordrazine", "neurotoxin", "zombiepowder", "synaptizine")
var/datum/reagents/R = new/datum/reagents(50)
R.my_atom = vent
+6 -3
View File
@@ -1684,6 +1684,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
if(decaytime > 18000 && decaytime <= 27000)//45 minutes for decaylevel4 -- skeleton
decaylevel = 3
if(decaytime > 27000)
decaylevel = 4
makeSkeleton()
@@ -1693,9 +1694,11 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
for(var/mob/living/carbon/human/H in range(decaylevel, src))
if(prob(5))
if(airborne_can_reach(get_turf(src), get_turf(H)))
if(istype(loc,/obj/item/bodybag)) return
if(H.wear_mask && istype(H.wear_mask,/obj/item/clothing/mask/surgical)) return
if(H.wear_mask && istype(H.wear_mask,/obj/item/clothing/mask/breath/medical)) return
if(istype(loc,/obj/item/bodybag))
return
var/obj/item/clothing/mask/M = H.wear_mask
if(M && (M.flags & MASKCOVERSMOUTH))
return
H << "<spawn class='warning'>You smell something foul..."
H.vomit()
+15 -27
View File
@@ -20,7 +20,7 @@
if (src.stat == 2)
return src.say_dead(message)
if (src.stat && said_last_words) // TIME TO WHISPER WHILE IN CRIT
if (src.stat)
return
var/alt_name = ""
@@ -31,9 +31,6 @@
if (src.sdisabilities & MUTE)
return
if(M_WHISPER in src.mutations)
src.say(message)
if (istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
return
@@ -52,12 +49,12 @@
temp_message[H] = ninjaspeak(temp_message[H])
pick_list -= H
message = list2text(temp_message, " ")
message = replacetext(message, "o", "¤")
message = replacetext(message, "p", "þ")
message = replacetext(message, "l", "£")
message = replacetext(message, "s", "§")
message = replacetext(message, "u", "µ")
message = replacetext(message, "b", "ß")
message = replacetext(message, "o", "?")
message = replacetext(message, "p", "?")
message = replacetext(message, "l", "?")
message = replacetext(message, "s", "?")
message = replacetext(message, "u", "?")
message = replacetext(message, "b", "?")
if (src.stuttering)
message = stutter(message)
@@ -87,11 +84,6 @@
var/list/heard_a = list() // understood us
var/list/heard_b = list() // didn't understand us
var/and_passes_on=""
if(!said_last_words && src.isInCrit())
and_passes_on=" - and passes on"
said_last_words=src.stat
for (var/mob/M in listening)
if (M.say_understands(src))
@@ -103,9 +95,9 @@
for (var/mob/M in watching)
if (M.say_understands(src))
rendered = "<span class='game say'><span class='name'>[src.name]</span> whispers something[and_passes_on].</span>"
rendered = "<span class='game say'><span class='name'>[src.name]</span> whispers something.</span>"
else
rendered = "<span class='game say'><span class='name'>[src.voice_name]</span> whispers something[and_passes_on].</span>"
rendered = "<span class='game say'><span class='name'>[src.voice_name]</span> whispers something.</span>"
M.show_message(rendered, 2)
if (length(heard_a))
@@ -114,7 +106,8 @@
if (italics)
message_a = "<i>[message_a]</i>"
//This appears copied from carbon/living say.dm so the istype check for mob is probably not needed. Appending for src is also not needed as the game will check that automatically.
rendered = "<span class='game say'><span class='name'>[GetVoice()]</span>[alt_name] whispers, <span class='message'>\"[message_a]\"</span>[and_passes_on]</span>"
rendered = "<span class='game say'><span class='name'>[GetVoice()]</span>[alt_name] whispers, <span class='message'>\"[message_a]\"</span></span>"
for (var/mob/M in heard_a)
M.show_message(rendered, 2)
@@ -126,7 +119,7 @@
if (italics)
message_b = "<i>[message_b]</i>"
rendered = "<span class='game say'><span class='name'>[src.voice_name]</span> whispers, <span class='message'>\"[message_b]\"</span>[and_passes_on]</span>"
rendered = "<span class='game say'><span class='name'>[src.voice_name]</span> whispers, <span class='message'>\"[message_b]\"</span></span>"
for (var/mob/M in heard_b)
M.show_message(rendered, 2)
@@ -135,23 +128,18 @@
if (M.say_understands(src))
var/message_c
message_c = stars(message)
rendered = "<span class='game say'><span class='name'>[GetVoice()]</span>[alt_name] whispers, <span class='message'>\"[message_c]\"</span>[and_passes_on]</span>"
rendered = "<span class='game say'><span class='name'>[GetVoice()]</span>[alt_name] whispers, <span class='message'>\"[message_c]\"</span></span>"
M.show_message(rendered, 2)
else
rendered = "<span class='game say'><span class='name'>[src.voice_name]</span> whispers something[and_passes_on].</span>"
rendered = "<span class='game say'><span class='name'>[src.voice_name]</span> whispers something.</span>"
M.show_message(rendered, 2)
if (italics)
message = "<i>[message]</i>"
rendered = "<span class='game say'><span class='name'>[GetVoice()]</span>[alt_name] whispers, <span class='message'>\"[message]\"</span>[and_passes_on]</span>"
rendered = "<span class='game say'><span class='name'>[GetVoice()]</span>[alt_name] whispers, <span class='message'>\"[message]\"</span></span>"
for (var/mob/M in dead_mob_list)
if (!(M.client))
continue
if (M.stat > 1 && !(M in heard_a) && (M.client.prefs.toggles & CHAT_GHOSTEARS))
M.show_message(rendered, 2)
if(said_last_words)
src.stat = 2
src.death(0)
src.regenerate_icons()
@@ -84,5 +84,6 @@
icon_living = "Syndicat"
icon_dead = "Syndicat_dead"
gender = FEMALE
flags = IS_SYNTHETIC|NO_BREATHE
var/turns_since_scan = 0
var/mob/living/simple_animal/mouse/movement_target
@@ -153,6 +153,6 @@
for(counter=0, counter<=powerlevel, counter++)
var/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice/S = new /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice(src.loc)
S.reagents.add_reagent("mushroomhallucinogen", powerlevel)
S.reagents.add_reagent("alchdranine", powerlevel)
S.reagents.add_reagent("doctorsdelight", powerlevel)
S.reagents.add_reagent("synaptizine", powerlevel)
del(src)
@@ -161,7 +161,7 @@
if( abs(Environment.temperature - bodytemperature) > 40 )
bodytemperature += ((Environment.temperature - bodytemperature) / 5)
if(min_oxy)
if(Environment.oxygen < min_oxy)
atmos_suitable = 0
@@ -186,7 +186,9 @@
if(max_co2)
if(Environment.carbon_dioxide > max_co2)
atmos_suitable = 0
if(flags & NO_BREATHE || flags & IS_SYNTHETIC)
atmos_suitable = 1
//Atmos effect
if(bodytemperature < minbodytemp)
adjustBruteLoss(cold_damage_per_tick)
+2
View File
@@ -196,6 +196,8 @@ var/list/slot_equipment_priority = list( \
if(!istype(W)) return 0
for(var/slot in slot_equipment_priority)
if(istype(W,/obj/item/weapon/storage/) && slot == slot_head) // Storage items should be put on the belt before the head
continue
if(equip_to_slot_if_possible(W, slot, 0, 1, 1)) //del_on_fail = 0; disable_warning = 0; redraw_mob = 1
return 1
@@ -529,6 +529,27 @@ datum/preferences
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-vir"), ICON_OVERLAY)
if(4)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
if(PSYCHIATRIST)
clothes_s = new /icon(uniform_dmi, "psych_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
switch(backbag)
if(2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
if(3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(4)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
if(PARAMEDIC)
clothes_s = new /icon(uniform_dmi, "paramedic_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/mask.dmi', "cigoff"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "bluesoft"), ICON_OVERLAY)
switch(backbag)
if(2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY)
if(3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY)
if(ROBOTICIST)
clothes_s = new /icon(uniform_dmi, "robotics_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
@@ -676,7 +697,98 @@ datum/preferences
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
else if(backbag == 3 || backbag == 4)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
else if(job_karma_high)
switch(job_karma_high)
if(MECHANIC)
clothes_s = new /icon(uniform_dmi, "mechanic_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_yellow"), ICON_OVERLAY)
switch(backbag)
if(2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY)
if(3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY)
if(4)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
if(CUSTOMS)
clothes_s = new /icon(uniform_dmi, "milohachert_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "customshelm"), ICON_OVERLAY)
switch(backbag)
if(2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
if(3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY)
if(4)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
if(PILOT)
clothes_s = new /icon(uniform_dmi, "secred_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "bomber"), ICON_OVERLAY)
switch(backbag)
if(2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
if(3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY)
if(4)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
if(BRIGDOC)
clothes_s = new /icon(uniform_dmi, "medical_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "fr_jacket_open"), ICON_OVERLAY)
switch(backbag)
if(2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY)
if(3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY)
if(4)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
if(NANO)
clothes_s = new /icon(uniform_dmi, "officer_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
switch(backbag)
if(2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
if(3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(4)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
if(NANOREC)
clothes_s = new /icon(uniform_dmi, "officer_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
switch(backbag)
if(2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
if(3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(4)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
if(BLUESHIELD)
clothes_s = new /icon(uniform_dmi, "officer_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "swat_gl"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "deus_blueshield"), ICON_OVERLAY)
switch(backbag)
if(2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
if(3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(4)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
if(JUDGE)
clothes_s = new /icon(uniform_dmi, "really_black_suit_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "mercy_hood"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "judge"), ICON_UNDERLAY)
switch(backbag)
if(2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
if(3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(4)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
if(disabilities & NEARSIGHTED)
preview_icon.Blend(new /icon('icons/mob/eyes.dmi', "glasses"), ICON_OVERLAY)
+98 -29
View File
@@ -1717,8 +1717,6 @@ datum
description = "Alchdranine is an extremely strange chemical substance that can be used to treat almost any injury with a high level of effectiveness "
reagent_state = LIQUID
color = "#07a4d1" // rgb: 7, 164, 209
toxod = OVERDOSE/3
burnod = OVERDOSE/3
on_mob_life(var/mob/living/M as mob, var/alien)
if(M.stat == 2.0)
@@ -1913,6 +1911,21 @@ datum
..()
return
inacusiate
name = "Inacusiate"
id = "inacusiate"
description = "Heals ear damage."
reagent_state = LIQUID
color = "#6600FF" // rgb: 100, 165, 255
toxod = OVERDOSE
scannable = 1
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.ear_damage = 0
M.ear_deaf = 0
..()
return
peridaxon
name = "Peridaxon"
@@ -1986,9 +1999,9 @@ datum
if(!M) M = holder.my_atom
if(M.bodytemperature < 170)
M.adjustCloneLoss(-1)
M.adjustOxyLoss(-2)
M.heal_organ_damage(2,2)
M.adjustToxLoss(-2)
M.adjustOxyLoss(-3)
M.heal_organ_damage(3,3)
M.adjustToxLoss(-3)
..()
return
@@ -2003,7 +2016,11 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.bodytemperature < 170)
M.adjustCloneLoss(-4)
M.adjustCloneLoss(-3)
M.adjustOxyLoss(-3)
M.heal_organ_damage(3,3)
M.adjustToxLoss(-3)
M.status_flags &= ~DISFIGURED
..()
return
@@ -2272,6 +2289,7 @@ datum
M.drowsyness = 0
M.stuttering = 0
M.confused = 0
M.reagents.remove_all_type(/datum/reagent/ethanol, 1*REM, 0, 1)
..()
return
@@ -2309,9 +2327,9 @@ datum
M.sleeping += 1
if(51 to INFINITY)
M.sleeping += 1
M:toxloss += (data - 50)
M.adjustToxLoss((data - 50)*REM)
holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
..()
return
beer2 //copypasta of chloral hydrate, disguised as normal beer for use by emagged brobots
@@ -2515,27 +2533,37 @@ datum
return
else if ( mouth_covered ) // Reduced effects if partially protected
victim << "\red Your [safe_thing] protect you from most of the pepperspray!"
victim.eye_blurry = max(M.eye_blurry, 15)
victim.eye_blind = max(M.eye_blind, 5)
victim.Stun(5)
victim.Weaken(5)
//victim.Paralyse(10)
//victim.drop_item()
if(prob(5))
victim.emote("scream")
victim.eye_blurry = max(M.eye_blurry, 3)
victim.eye_blind = max(M.eye_blind, 1)
victim.confused = max(M.confused, 3)
victim.damageoverlaytemp = 60
victim.Weaken(3)
victim.drop_item()
return
else if ( eyes_covered ) // Eye cover is better than mouth cover
victim << "\red Your [safe_thing] protects your eyes from the pepperspray!"
victim.emote("scream")
victim.eye_blurry = max(M.eye_blurry, 5)
victim.eye_blurry = max(M.eye_blurry, 3)
victim.damageoverlaytemp = 30
return
else // Oh dear :D
victim.emote("scream")
if(prob(5))
victim.emote("scream")
victim << "\red You're sprayed directly in the eyes with pepperspray!"
victim.eye_blurry = max(M.eye_blurry, 25)
victim.eye_blind = max(M.eye_blind, 10)
victim.Stun(5)
victim.eye_blurry = max(M.eye_blurry, 5)
victim.eye_blind = max(M.eye_blind, 2)
victim.confused = max(M.confused, 6)
victim.damageoverlaytemp = 75
victim.Weaken(5)
//victim.Paralyse(10)
//victim.drop_item()
victim.drop_item()
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(prob(5))
M.visible_message("<span class='warning'>[M] [pick("dry heaves!","coughs!","splutters!")]</span>")
..()
return
frostoil
name = "Frost Oil"
@@ -2917,7 +2945,7 @@ datum
on_mob_life(var/mob/living/M as mob)
..()
if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1*REM)
if(M.getOxyLoss() && prob(30)) M.adjustOxyLoss(-1*REM)
return
tomatojuice
@@ -2967,15 +2995,16 @@ datum
id = "doctorsdelight"
description = "A gulp a day keeps the MediBot away. That's probably for the best."
reagent_state = LIQUID
nutriment_factor = 1 * FOOD_METABOLISM
color = "#664300" // rgb: 102, 67, 0
color = "#FF8CFF" // rgb: 255, 140, 255
on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
holder.remove_reagent(src.id, FOOD_METABOLISM)
if(!M) M = holder.my_atom
if(M:getToxLoss() && prob(80)) M:adjustToxLoss(-1)
if(M.getOxyLoss() && prob(80)) M.adjustOxyLoss(-2)
if(M.getBruteLoss() && prob(80)) M.heal_organ_damage(2,0)
if(M.getFireLoss() && prob(80)) M.heal_organ_damage(0,2)
if(M.getToxLoss() && prob(80)) M.adjustToxLoss(-2)
if(M.dizziness !=0) M.dizziness = max(0,M.dizziness-15)
if(M.confused !=0) M.confused = max(0,M.confused - 5)
..()
return
@@ -3014,11 +3043,31 @@ datum
description = "The raw essence of a banana."
color = "#863333" // rgb: 175, 175, 0
on_mob_life(var/mob/living/M as mob)
M.nutrition += nutriment_factor
if(istype(M, /mob/living/carbon/human) && M.job in list("Clown"))
if(!M) M = holder.my_atom
M.heal_organ_damage(1,1)
M.nutrition += nutriment_factor
..()
return
..()
nothing
name = "Nothing"
id = "nothing"
description = "Absolutely nothing."
on_mob_life(var/mob/living/M as mob)
M.nutrition += nutriment_factor
if(istype(M, /mob/living/carbon/human) && M.job in list("Mime"))
if(!M) M = holder.my_atom
M.heal_organ_damage(1,1)
M.nutrition += nutriment_factor
..()
return
..()
potato_juice
name = "Potato Juice"
id = "potato"
@@ -3938,6 +3987,16 @@ datum
nutriment_factor = 1 * FOOD_METABOLISM
color = "#664300" // rgb: 102, 67, 0
on_mob_life(var/mob/living/M as mob)
M.nutrition += nutriment_factor
if(istype(M, /mob/living/carbon/human) && M.job in list("Clown"))
if(!M) M = holder.my_atom
M.heal_organ_damage(1,1)
M.nutrition += nutriment_factor
..()
return
..()
silencer
name = "Silencer"
id = "silencer"
@@ -3945,6 +4004,16 @@ datum
nutriment_factor = 1 * FOOD_METABOLISM
color = "#664300" // rgb: 102, 67, 0
on_mob_life(var/mob/living/M as mob)
M.nutrition += nutriment_factor
if(istype(M, /mob/living/carbon/human) && M.job in list("Mime"))
if(!M) M = holder.my_atom
M.heal_organ_damage(1,1)
M.nutrition += nutriment_factor
..()
return
..()
changelingsting
name = "Changeling Sting"
id = "changelingsting"
+80 -1
View File
@@ -319,6 +319,13 @@ datum
required_reagents = list("carbon" = 1, "hydrogen" = 1, "anti_toxin" = 1)
result_amount = 2
inacusiate
name = "inacusiate"
id = "inacusiate"
result = "inacusiate"
required_reagents = list("water" = 1, "carbon" = 1, "anti_toxin" = 1)
result_amount = 2
ethylredoxrazine
name = "Ethylredoxrazine"
id = "ethylredoxrazine"
@@ -1397,6 +1404,78 @@ datum
var/obj/effect/golem_rune/Z = new /obj/effect/golem_rune
Z.loc = get_turf(holder.my_atom)
Z.announce_to_ghosts()
//Bluespace
slimecrystal
name = "Slime Crystal"
id = "m_crystal"
result = null
required_reagents = list("blood" = 1)
result_amount = 1
required_container = /obj/item/slime_extract/bluespace
required_other = 1
on_reaction(var/datum/reagents/holder, var/created_volume)
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
if(holder.my_atom)
var/obj/item/bluespace_crystal/BC = new(get_turf(holder.my_atom))
BC.visible_message("<span class='notice'>The [BC.name] appears out of thin air!</span>")
//Cerulean
slimepsteroid2
name = "Slime Steroid 2"
id = "m_steroid2"
result = null
required_reagents = list("plasma" = 1)
result_amount = 1
required_container = /obj/item/slime_extract/cerulean
required_other = 1
on_reaction(var/datum/reagents/holder)
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
var/obj/item/weapon/slimesteroid2/P = new /obj/item/weapon/slimesteroid2
P.loc = get_turf(holder.my_atom)
//Sepia
slimecamera
name = "Slime Camera"
id = "m_camera"
result = null
required_reagents = list("plasma" = 1)
result_amount = 1
required_container = /obj/item/slime_extract/sepia
required_other = 1
on_reaction(var/datum/reagents/holder)
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
var/obj/item/device/camera/P = new /obj/item/device/camera
P.loc = get_turf(holder.my_atom)
slimefilm
name = "Slime Film"
id = "m_film"
result = null
required_reagents = list("blood" = 1)
result_amount = 1
required_container = /obj/item/slime_extract/sepia
required_other = 1
on_reaction(var/datum/reagents/holder)
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
var/obj/item/device/camera_film/P = new /obj/item/device/camera_film
P.loc = get_turf(holder.my_atom)
//Pyrite
slimepaint
name = "Slime Paint"
id = "s_paint"
result = null
required_reagents = list("plasma" = 1)
result_amount = 1
required_container = /obj/item/slime_extract/pyrite
required_other = 1
on_reaction(var/datum/reagents/holder)
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
var/list/paints = typesof(/obj/item/weapon/reagent_containers/glass/paint) - /obj/item/weapon/reagent_containers/glass/paint
var/chosen = pick(paints)
var/obj/P = new chosen
if(P)
P.loc = get_turf(holder.my_atom)
//////////////////////////////////////////FOOD MIXTURES////////////////////////////////////
tofu
@@ -1697,7 +1776,7 @@ datum
name = "The Doctor's Delight"
id = "doctordelight"
result = "doctorsdelight"
required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1)
required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1, "tricordrazine" = 1)
result_amount = 5
irish_cream
@@ -15,14 +15,14 @@
var/recharge_time = 5 //Time it takes for shots to recharge (in seconds)
var/list/datum/reagents/reagent_list = list()
var/list/reagent_ids = list("tricordrazine", "inaprovaline", "spaceacillin")
var/list/reagent_ids = list("doctorsdelight", "inaprovaline", "spaceacillin")
//var/list/reagent_ids = list("dexalin", "kelotane", "bicaridine", "anti_toxin", "inaprovaline", "spaceacillin")
/obj/item/weapon/reagent_containers/borghypo/surgeon
reagent_ids = list("bicaridine", "inaprovaline", "dexalin")
/obj/item/weapon/reagent_containers/borghypo/crisis
reagent_ids = list("tricordrazine", "inaprovaline", "tramadol")
reagent_ids = list("doctorsdelight", "inaprovaline", "tramadol")
/obj/item/weapon/reagent_containers/borghypo/New()
..()
@@ -1276,7 +1276,7 @@
New()
..()
reagents.add_reagent("nutriment", 4)
reagents.add_reagent("alchdranine", 5)
reagents.add_reagent("doctorsdelight", 5)
bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato
@@ -2205,7 +2205,7 @@
New()
..()
reagents.add_reagent("nutriment", 8)
reagents.add_reagent("alchdranine", 5)
reagents.add_reagent("doctorsdelight", 5)
bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/appletart
@@ -20,7 +20,7 @@
/obj/item/weapon/reagent_containers/hypospray/New() //comment this to make hypos start off empty
..()
reagents.add_reagent("tricordrazine", 30)
reagents.add_reagent("doctorsdelight", 30)
return
/obj/item/weapon/reagent_containers/hypospray/attack(mob/M as mob, mob/user as mob)
@@ -64,7 +64,7 @@
/obj/item/weapon/reagent_containers/hypospray/combat/New()
..()
reagents.remove_reagent("tricordrazine", 30)
reagents.remove_reagent("doctorsdelight", 30)
reagents.add_reagent("synaptizine", 30)
@@ -76,10 +76,11 @@
amount_per_transfer_from_this = 5
possible_transfer_amounts = list(5)
volume = 5
var/emagged = 0
/obj/item/weapon/reagent_containers/hypospray/autoinjector/New()
..()
reagents.remove_reagent("tricordrazine", 30)
reagents.remove_reagent("doctorsdelight", 30)
reagents.add_reagent("tramadol", 4)
reagents.add_reagent("hyperzine", 1)
update_icon()
@@ -87,8 +88,9 @@
/obj/item/weapon/reagent_containers/hypospray/autoinjector/attack(mob/M as mob, mob/user as mob)
..()
if(reagents.total_volume <= 0) //Prevents autoinjectors to be refilled.
flags &= ~OPENCONTAINER
if(!emagged)
if(reagents.total_volume <= 0) //Prevents autoinjectors to be refilled.
flags &= ~OPENCONTAINER
update_icon()
return
@@ -105,6 +107,13 @@
else
usr << "\blue It is spent."
/obj/item/weapon/reagent_containers/hypospray/autoinjector/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
if(istype(D, /obj/item/weapon/card/emag) && !emagged)
emagged = 1
user << "<span class='notice'>You bypass the electronic child-safety lock on the reagent storage.</span>"
else
..()
return
/obj/item/weapon/reagent_containers/hypospray/hyperzine
name = "emergency stimulant autoinjector"
+1 -1
View File
@@ -207,7 +207,7 @@ datum/tech/bluespace
name = "'Blue-space' Research"
desc = "Research into the sub-reality known as 'blue-space'"
id = "bluespace"
max_level=4
max_level=6
datum/tech/biotech
name = "Biological Technology"
+1
View File
@@ -786,6 +786,7 @@ var/list/cheartstopper = list("potassium_chloride") //this stops the heart when
var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accessed by preexisting terminals. AIs and new terminals can't use them.
"CentCom",
"ERT",
"NukeOps",
"Thunderdome",
"Xeno"
)