Merge branch 'master' of https://github.com/PolarisSS13/Polaris into vatborn

This commit is contained in:
Anewbe
2017-10-19 09:57:26 -05:00
144 changed files with 1595 additions and 847 deletions
+10 -6
View File
@@ -385,26 +385,30 @@
for(var/areatype in areas_without_camera)
world << "* [areatype]"
/datum/admins/proc/cmd_admin_dress()
/datum/admins/proc/cmd_admin_dress(input in getmobs())
set category = "Fun"
set name = "Select equipment"
if(!check_rights(R_FUN))
return
var/mob/living/carbon/human/H = input("Select mob.", "Select equipment.") as null|anything in human_mob_list
if(!H)
var/target = getmobs()[input]
if(!target)
return
if(!ishuman(target))
return
var/mob/living/carbon/human/H = target
var/decl/hierarchy/outfit/outfit = input("Select outfit.", "Select equipment.") as null|anything in outfits()
if(!outfit)
return
feedback_add_details("admin_verb","SEQ")
dressup_human(H, outfit, TRUE)
dressup_human(H, outfit, 1)
/proc/dressup_human(var/mob/living/carbon/human/H, var/decl/hierarchy/outfit/outfit, var/undress = TRUE)
world << "dressup_human"
/proc/dressup_human(var/mob/living/carbon/human/H, var/decl/hierarchy/outfit/outfit, var/undress = 1)
if(!H || !outfit)
return
if(undress)
+7 -7
View File
@@ -83,12 +83,12 @@
if (!fqs)
output += "&nbsp;&nbsp;<b>ERROR</b><br>"
continue
for (var/filter in fqs.devices)
var/list/f = fqs.devices[filter]
for (var/radio_filter in fqs.devices)
var/list/f = fqs.devices[radio_filter]
if (!f)
output += "&nbsp;&nbsp;[filter]: ERROR<br>"
output += "&nbsp;&nbsp;[radio_filter]: ERROR<br>"
continue
output += "&nbsp;&nbsp;[filter]: [f.len]<br>"
output += "&nbsp;&nbsp;[radio_filter]: [f.len]<br>"
for (var/device in f)
if (isobj(device))
output += "&nbsp;&nbsp;&nbsp;&nbsp;[device] ([device:x],[device:y],[device:z] in area [get_area(device:loc)])<br>"
@@ -177,11 +177,11 @@
set desc = "This searches all the active jobban entries for the current round and outputs the results to standard output."
set category = "Debug"
var/filter = input("Contains what?","Filter") as text|null
if(!filter)
var/job_filter = input("Contains what?","Job Filter") as text|null
if(!job_filter)
return
usr << "<b>Jobbans active in this round.</b>"
for(var/t in jobban_keylist)
if(findtext(t, filter))
if(findtext(t, job_filter))
usr << "[t]"
@@ -29,6 +29,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
S["organ_data"] >> pref.organ_data
S["rlimb_data"] >> pref.rlimb_data
S["body_markings"] >> pref.body_markings
S["synth_color"] >> pref.synth_color
S["synth_red"] >> pref.r_synth
S["synth_green"] >> pref.g_synth
S["synth_blue"] >> pref.b_synth
pref.preview_icon = null
/datum/category_item/player_setup_item/general/body/save_character(var/savefile/S)
@@ -53,6 +57,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
S["organ_data"] << pref.organ_data
S["rlimb_data"] << pref.rlimb_data
S["body_markings"] << pref.body_markings
S["synth_color"] << pref.synth_color
S["synth_red"] << pref.r_synth
S["synth_green"] << pref.g_synth
S["synth_blue"] << pref.b_synth
/datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S)
if(!pref.species || !(pref.species in playable_species))
@@ -101,6 +109,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
character.h_style = pref.h_style
character.f_style = pref.f_style
character.b_type = pref.b_type
character.synth_color = pref.synth_color
character.r_synth = pref.r_synth
character.g_synth = pref.g_synth
character.b_synth = pref.b_synth
// Destroy/cyborgize organs and limbs.
for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO))
@@ -284,6 +296,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
. += "<font face='fixedsys' size='3' color='[pref.body_markings[M]]'><table style='display:inline;' bgcolor='[pref.body_markings[M]]'><tr><td>__</td></tr></table></font>"
. += "<br>"
. += "<br>"
. += "<b>Allow Synth color:</b> <a href='?src=\ref[src];synth_color=1'><b>[pref.synth_color ? "Yes" : "No"]</b></a><br>"
if(pref.synth_color)
. += "<a href='?src=\ref[src];synth2_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_synth, 2)][num2hex(pref.g_synth, 2)][num2hex(pref.b_synth, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_synth, 2)][num2hex(pref.g_synth, 2)][num2hex(pref.b_synth)]'><tr><td>__</td></tr></table></font> "
. = jointext(.,null)
/datum/category_item/player_setup_item/general/body/proc/has_flag(var/datum/species/mob_species, var/flag)
@@ -665,6 +682,18 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.equip_preview_mob ^= text2num(href_list["toggle_preview_value"])
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["synth_color"])
pref.synth_color = !pref.synth_color
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["synth2_color"])
var/new_color = input(user, "Choose your character's synth colour: ", "Character Preference", rgb(pref.r_synth, pref.g_synth, pref.b_synth)) as color|null
if(new_color && CanUseTopic(user))
pref.r_synth = hex2num(copytext(new_color, 2, 4))
pref.g_synth = hex2num(copytext(new_color, 4, 6))
pref.b_synth = hex2num(copytext(new_color, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
return ..()
/datum/category_item/player_setup_item/general/body/proc/reset_limbs()
@@ -14,7 +14,8 @@ var/list/gear_datums = list()
//create a list of gear datums to sort
for(var/geartype in typesof(/datum/gear)-/datum/gear)
var/datum/gear/G = geartype
if(initial(G.type_category) == geartype)
continue
var/use_name = initial(G.display_name)
var/use_category = initial(G.sort_category)
@@ -205,6 +206,7 @@ var/list/gear_datums = list()
var/sort_category = "General"
var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned.
var/exploitable = 0 //Does it go on the exploitable information list?
var/type_category = null
/datum/gear/New()
..()
@@ -1,42 +1,28 @@
/datum/gear/accessory
display_name = "armband, red"
path = /obj/item/clothing/accessory/armband
display_name = "accessory"
slot = slot_tie
sort_category = "Accessories"
type_category = /datum/gear/accessory
path = /obj/item/clothing/accessory
cost = 1
/datum/gear/accessory/cargo
display_name = "armband, cargo"
path = /obj/item/clothing/accessory/armband/cargo
/datum/gear/accessory/armband
display_name = "armband selection"
path = /obj/item/clothing/accessory/armband
/datum/gear/accessory/emt
display_name = "armband, EMT"
path = /obj/item/clothing/accessory/armband/medblue
/datum/gear/accessory/armband/New()
..()
var/list/armbands = list()
for(var/armband in (typesof(/obj/item/clothing/accessory/armband) - typesof(/obj/item/clothing/accessory/armband/med/color)))
var/obj/item/clothing/accessory/armband_type = armband
armbands[initial(armband_type.name)] = armband_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(armbands))
/datum/gear/accessory/engineering
display_name = "armband, engineering"
path = /obj/item/clothing/accessory/armband/engine
/datum/gear/accessory/hydroponics
display_name = "armband, hydroponics"
path = /obj/item/clothing/accessory/armband/hydro
/datum/gear/accessory/medical
display_name = "armband, medical"
path = /obj/item/clothing/accessory/armband/med
/datum/gear/accessory/medical/cross
display_name = "armband, medic"
path = /obj/item/clothing/accessory/armband/med/cross
/datum/gear/accessory/science
display_name = "armband, science"
path = /obj/item/clothing/accessory/armband/science
/datum/gear/accessory/colored
/datum/gear/accessory/armband/colored
display_name = "armband"
path = /obj/item/clothing/accessory/armband/med/color
/datum/gear/accessory/colored/New()
/datum/gear/accessory/armband/colored/New()
..()
gear_tweaks = list(gear_tweak_free_color_choice)
@@ -74,215 +60,109 @@
..()
gear_tweaks = list(gear_tweak_free_color_choice)
/datum/gear/accessory/wcoat
display_name = "waistcoat"
display_name = "waistcoat selection"
path = /obj/item/clothing/accessory/wcoat
cost = 1
/datum/gear/accessory/wcoat/red
display_name = "waistcoat, red"
path = /obj/item/clothing/accessory/wcoat/red
/datum/gear/accessory/wcoat/grey
display_name = "waistcoat, grey"
path = /obj/item/clothing/accessory/wcoat/grey
/datum/gear/accessory/wcoat/brown
display_name = "waistcoat, brown"
path = /obj/item/clothing/accessory/wcoat/brown
/datum/gear/accessory/swvest
display_name = "sweatervest, black"
path = /obj/item/clothing/accessory/wcoat/swvest
cost = 1
/datum/gear/accessory/swvest/blue
display_name = "sweatervest, blue"
path = /obj/item/clothing/accessory/wcoat/swvest/blue
/datum/gear/accessory/swvest/red
display_name = "sweatervest, red"
path = /obj/item/clothing/accessory/wcoat/swvest/red
/datum/gear/accessory/wcoat/New()
..()
var/list/wcoats = list()
for(var/wcoat in typesof(/obj/item/clothing/accessory/wcoat))
var/obj/item/clothing/accessory/wcoat_type = wcoat
wcoats[initial(wcoat_type.name)] = wcoat_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(wcoats))
/datum/gear/accessory/holster
display_name = "holster, armpit"
path = /obj/item/clothing/accessory/holster/armpit
display_name = "holster selection (Security, CD, HoP)"
path = /obj/item/clothing/accessory/holster
allowed_roles = list("Colony Director", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective")
/datum/gear/accessory/holster/hip
display_name = "holster, hip"
path = /obj/item/clothing/accessory/holster/hip
/datum/gear/accessory/holster/leg
display_name = "holster, leg"
path = /obj/item/clothing/accessory/holster/leg
/datum/gear/accessory/holster/waist
display_name = "holster, waist"
path = /obj/item/clothing/accessory/holster/waist
/datum/gear/accessory/holster/New()
..()
var/list/holsters = list()
for(var/holster in typesof(/obj/item/clothing/accessory/holster))
var/obj/item/clothing/accessory/holster_type = holster
holsters[initial(holster_type.name)] = holster_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(holsters))
/datum/gear/accessory/tie
display_name = "tie, black"
path = /obj/item/clothing/accessory/black
display_name = "tie selection"
path = /obj/item/clothing/accessory/tie
cost = 1
/datum/gear/accessory/tie/blue
display_name = "tie, blue"
path = /obj/item/clothing/accessory/blue
/datum/gear/accessory/tie/blue_clip
display_name = "tie, blue with clip"
path = /obj/item/clothing/accessory/blue_clip
/datum/gear/accessory/tie/blue_long
display_name = "tie, blue long"
path = /obj/item/clothing/accessory/blue_long
/datum/gear/accessory/tie/red
display_name = "tie, red"
path = /obj/item/clothing/accessory/red
/datum/gear/accessory/tie/red_clip
display_name = "tie, red with clip"
path = /obj/item/clothing/accessory/red_clip
/datum/gear/accessory/tie/red_long
display_name = "tie, red long"
path = /obj/item/clothing/accessory/red_long
/datum/gear/accessory/tie/yellow
display_name = "tie, yellow"
path = /obj/item/clothing/accessory/yellow
/datum/gear/accessory/tie/navy
display_name = "tie, navy blue"
path = /obj/item/clothing/accessory/navy
/datum/gear/accessory/tie/white
display_name = "tie, white"
path = /obj/item/clothing/accessory/white
/datum/gear/accessory/tie/horrible
display_name = "tie, socially disgraceful"
path = /obj/item/clothing/accessory/horrible
/datum/gear/accessory/tie/New()
..()
var/list/ties = list()
for(var/tie in typesof(/obj/item/clothing/accessory/tie))
var/obj/item/clothing/accessory/tie_type = tie
ties[initial(tie_type.name)] = tie_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(ties))
/datum/gear/accessory/scarf
display_name = "scarf"
display_name = "scarf selection"
path = /obj/item/clothing/accessory/scarf
cost = 1
/datum/gear/accessory/scarf/red
display_name = "scarf, red"
path = /obj/item/clothing/accessory/scarf/red
/datum/gear/accessory/scarf/New()
..()
var/list/scarfs = list()
for(var/scarf in typesof(/obj/item/clothing/accessory/scarf))
var/obj/item/clothing/accessory/scarf_type = scarf
scarfs[initial(scarf_type.name)] = scarf_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(scarfs))
/datum/gear/accessory/scarf/green
display_name = "scarf, green"
path = /obj/item/clothing/accessory/scarf/green
/datum/gear/accessory/jacket
display_name = "suit jacket selection"
path = /obj/item/clothing/accessory/jacket
cost = 1
/datum/gear/accessory/scarf/darkblue
display_name = "scarf, dark blue"
path = /obj/item/clothing/accessory/scarf/darkblue
/datum/gear/accessory/scarf/purple
display_name = "scarf, purple"
path = /obj/item/clothing/accessory/scarf/purple
/datum/gear/accessory/scarf/yellow
display_name = "scarf, yellow"
path = /obj/item/clothing/accessory/scarf/yellow
/datum/gear/accessory/scarf/orange
display_name = "scarf, orange"
path = /obj/item/clothing/accessory/scarf/orange
/datum/gear/accessory/scarf/lightblue
display_name = "scarf, light blue"
path = /obj/item/clothing/accessory/scarf/lightblue
/datum/gear/accessory/scarf/white
display_name = "scarf, white"
path = /obj/item/clothing/accessory/scarf/white
/datum/gear/accessory/scarf/black
display_name = "scarf, black"
path = /obj/item/clothing/accessory/scarf/black
/datum/gear/accessory/scarf/zebra
display_name = "scarf, zebra"
path = /obj/item/clothing/accessory/scarf/zebra
/datum/gear/accessory/scarf/christmas
display_name = "scarf, christmas"
path = /obj/item/clothing/accessory/scarf/christmas
/datum/gear/accessory/scarf/stripedred
display_name = "scarf, striped red"
path = /obj/item/clothing/accessory/stripedredscarf
/datum/gear/accessory/scarf/stripedgreen
display_name = "scarf, striped green"
path = /obj/item/clothing/accessory/stripedgreenscarf
/datum/gear/accessory/scarf/stripedblue
display_name = "scarf, striped blue"
path = /obj/item/clothing/accessory/stripedbluescarf
/datum/gear/accessory/suitjacket
display_name = "suit jacket, tan"
path = /obj/item/clothing/accessory/tan_jacket
/datum/gear/accessory/suitjacket/charcoal
display_name = "suit jacket, charcoal"
path = /obj/item/clothing/accessory/charcoal_jacket
/datum/gear/accessory/suitjacket/navy
display_name = "suit jacket, navy blue"
path = /obj/item/clothing/accessory/navy_jacket
/datum/gear/accessory/suitjacket/burgundy
display_name = "suit jacket, burgundy"
path = /obj/item/clothing/accessory/burgundy_jacket
/datum/gear/accessory/suitjacket/checkered
display_name = "suit jacket, checkered"
path = /obj/item/clothing/accessory/checkered_jacket
/datum/gear/accessory/jacket/New()
..()
var/list/jackets = list()
for(var/jacket in typesof(/obj/item/clothing/accessory/jacket))
var/obj/item/clothing/accessory/jacket_type = jacket
jackets[initial(jacket_type.name)] = jacket_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(jackets))
/datum/gear/accessory/suitvest
display_name = "suit vest"
path = /obj/item/clothing/accessory/vest
/datum/gear/accessory/brown_vest
display_name = "webbing, engineering"
display_name = "webbing, brown"
path = /obj/item/clothing/accessory/storage/brown_vest
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
/datum/gear/accessory/black_vest
display_name = "webbing, security"
display_name = "webbing, black"
path = /obj/item/clothing/accessory/storage/black_vest
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
/datum/gear/accessory/white_vest
display_name = "webbing, medical"
display_name = "webbing, white"
path = /obj/item/clothing/accessory/storage/white_vest
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
/datum/gear/accessory/brown_drop_pouches
display_name = "drop pouches, engineering"
display_name = "drop pouches, brown"
path = /obj/item/clothing/accessory/storage/brown_drop_pouches
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
/datum/gear/accessory/black_drop_pouches
display_name = "drop pouches, security"
display_name = "drop pouches, black"
path = /obj/item/clothing/accessory/storage/black_drop_pouches
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
/datum/gear/accessory/white_drop_pouches
display_name = "drop pouches, medical"
display_name = "drop pouches, white"
path = /obj/item/clothing/accessory/storage/white_drop_pouches
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
/datum/gear/accessory/fannypack
display_name = "fannypack selection"
cost = 2
path = /obj/item/weapon/storage/belt/fannypack
/datum/gear/accessory/fannypack/New()
..()
@@ -68,9 +68,9 @@
path = /obj/item/clothing/glasses/sunglasses/medhud/aviator/prescription
/datum/gear/eyes/meson
display_name = "Optical Meson Scanners (Engineering)"
display_name = "Optical Meson Scanners (Engineering, Science)"
path = /obj/item/clothing/glasses/meson
allowed_roles = list("Station Engineer","Chief Engineer","Atmospheric Technician")
allowed_roles = list("Station Engineer","Chief Engineer","Atmospheric Technician", "Scientist", "Research Director")
/datum/gear/eyes/meson/prescription
display_name = "Optical Meson Scanners, prescription (Engineering)"
@@ -115,4 +115,3 @@
/datum/gear/eyes/sun/prescriptionsun
display_name = "sunglasses, presciption (Security/Command)"
path = /obj/item/clothing/glasses/sunglasses/prescription
cost = 2
@@ -68,10 +68,34 @@
cost = 3
/datum/gear/gloves/forensic
display_name = "gloves, forensic"
display_name = "gloves, forensic (Detective)"
path = /obj/item/clothing/gloves/forensic
allowed_roles = list("Detective")
/datum/gear/gloves/fingerless
display_name = "fingerless gloves"
path = /obj/item/clothing/gloves/fingerless
path = /obj/item/clothing/gloves/fingerless
/datum/gear/gloves/ring
display_name = "ring selection"
description = "Choose from a number of rings."
path = /obj/item/clothing/gloves/ring
cost = 1
/datum/gear/gloves/ring/New()
..()
var/ringtype = list()
ringtype["CTI ring"] = /obj/item/clothing/gloves/ring/cti
ringtype["Mariner University ring"] = /obj/item/clothing/gloves/ring/mariner
ringtype["engagement ring"] = /obj/item/clothing/gloves/ring/engagement
ringtype["signet ring"] = /obj/item/clothing/gloves/ring/seal/signet
ringtype["masonic ring"] = /obj/item/clothing/gloves/ring/seal/mason
ringtype["ring, steel"] = /obj/item/clothing/gloves/ring/material/steel
ringtype["ring, iron"] = /obj/item/clothing/gloves/ring/material/iron
ringtype["ring, silver"] = /obj/item/clothing/gloves/ring/material/silver
ringtype["ring, gold"] = /obj/item/clothing/gloves/ring/material/gold
ringtype["ring, platinum"] = /obj/item/clothing/gloves/ring/material/platinum
ringtype["ring, glass"] = /obj/item/clothing/gloves/ring/material/glass
ringtype["ring, wood"] = /obj/item/clothing/gloves/ring/material/wood
ringtype["ring, plastic"] = /obj/item/clothing/gloves/ring/material/plastic
gear_tweaks += new/datum/gear_tweak/path(ringtype)
@@ -136,7 +136,6 @@
/datum/gear/head/cowboy
display_name = "cowboy, rodeo"
path = /obj/item/clothing/head/cowboy_hat
cost = 3
/datum/gear/head/cowboy/black
display_name = "cowboy, black"
@@ -268,6 +267,11 @@
..()
gear_tweaks = list(gear_tweak_free_color_choice)
/datum/gear/head/kitty
display_name = "kitty ears"
path = /obj/item/clothing/head/kitty
/datum/gear/head/beanie
display_name = "beanie"
path = /obj/item/clothing/head/beanie
@@ -195,6 +195,10 @@
..()
gear_tweaks = list(gear_tweak_free_color_choice)
/datum/gear/shoes/slippers
display_name = "bunny slippers"
path = /obj/item/clothing/shoes/slippers
/datum/gear/shoes/boots/winter
display_name = "winter boots"
path = /obj/item/clothing/shoes/boots/winter
@@ -227,7 +231,7 @@
/datum/gear/shoes/boots/winter/medical
display_name = "medical winter boots"
path = /obj/item/clothing/shoes/boots/winter/medical
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
/datum/gear/shoes/boots/winter/mining
display_name = "mining winter boots"
@@ -149,7 +149,7 @@
/datum/gear/suit/labcoat/emt
display_name = "labcoat, EMT (Medical)"
path = /obj/item/clothing/suit/storage/toggle/labcoat/emt
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
/datum/gear/suit/roles/surgical_apron
display_name = "surgical apron"
@@ -182,7 +182,7 @@
/datum/gear/suit/roles/poncho/medical
display_name = "poncho, medical"
path = /obj/item/clothing/accessory/poncho/roles/medical
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
/datum/gear/suit/roles/poncho/engineering
display_name = "poncho, engineering"
@@ -199,6 +199,41 @@
path = /obj/item/clothing/accessory/poncho/roles/cargo
allowed_roles = list("Quartermaster","Cargo Technician")
/datum/gear/suit/roles/poncho/cloak/hos
display_name = "cloak, head of security"
path = /obj/item/clothing/accessory/poncho/roles/cloak/hos
allowed_roles = list("Head of Security")
/datum/gear/suit/roles/poncho/cloak/cmo
display_name = "cloak, chief medical officer"
path = /obj/item/clothing/accessory/poncho/roles/cloak/cmo
allowed_roles = list("Chief Medical Officer")
/datum/gear/suit/roles/poncho/cloak/ce
display_name = "cloak, chief engineer"
path = /obj/item/clothing/accessory/poncho/roles/cloak/ce
allowed_roles = list("Chief Engineer")
/datum/gear/suit/roles/poncho/cloak/rd
display_name = "cloak, research director"
path = /obj/item/clothing/accessory/poncho/roles/cloak/rd
allowed_roles = list("Research Director")
/datum/gear/suit/roles/poncho/cloak/qm
display_name = "cloak, quartermaster"
path = /obj/item/clothing/accessory/poncho/roles/cloak/qm
allowed_roles = list("Quartermaster")
/datum/gear/suit/roles/poncho/cloak/captain
display_name = "cloak, colony director"
path = /obj/item/clothing/accessory/poncho/roles/cloak/captain
allowed_roles = list("Colony Director")
/datum/gear/suit/roles/poncho/cloak/hop
display_name = "cloak, head of personnel"
path = /obj/item/clothing/accessory/poncho/roles/cloak/hop
allowed_roles = list("Head of Personnel")
/datum/gear/suit/unathi_robe
display_name = "roughspun robe"
path = /obj/item/clothing/suit/unathi/robe
@@ -257,7 +292,7 @@
/datum/gear/suit/wintercoat/medical
display_name = "winter coat, medical"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
/datum/gear/suit/wintercoat/science
display_name = "winter coat, science"
@@ -410,7 +445,7 @@
/datum/gear/suit/snowsuit/medical
display_name = "snowsuit, medical"
path = /obj/item/clothing/suit/storage/snowsuit/medical
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
/datum/gear/suit/snowsuit/science
display_name = "snowsuit, science"
@@ -243,7 +243,6 @@
/datum/gear/uniform/scrub
display_name = "scrubs selection"
path = /obj/item/clothing/under/rank/medical/scrubs
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Roboticist")
/datum/gear/uniform/scrub/New()
..()
@@ -455,3 +454,7 @@
/datum/gear/uniform/red_swept_dress
display_name = "red swept dress"
path = /obj/item/clothing/under/dress/red_swept_dress
/datum/gear/uniform/bathrobe
display_name = "bathrobe"
path = /obj/item/clothing/under/bathrobe
@@ -30,14 +30,14 @@
name = "Flimsy"
desc = "You're more fragile than most, and have less of an ability to endure harm."
modifier_type = /datum/modifier/trait/flimsy
muturally_exclusive = list(/datum/trait/modifier/physical/frail)
mutually_exclusive = list(/datum/trait/modifier/physical/frail)
/datum/trait/modifier/physical/frail
name = "Frail"
desc = "Your body is very fragile, and has even less of an ability to endure harm."
modifier_type = /datum/modifier/trait/frail
muturally_exclusive = list(/datum/trait/modifier/physical/flimsy)
mutually_exclusive = list(/datum/trait/modifier/physical/flimsy)
/datum/trait/modifier/physical/haemophilia
@@ -51,10 +51,19 @@
// If a species lacking blood is added, it is suggested to add a check for them here.
return ..()
/datum/trait/modifier/physical/weak
name = "Weak"
desc = "A lack of physical strength causes a diminshed capability in close quarters combat."
modifier_type = /datum/modifier/trait/weak
mutually_exclusive = list(/datum/trait/modifier/physical/wimpy)
/datum/trait/modifier/physical/wimpy
name = "Wimpy"
desc = "An extreme lack of physical strength causes a greatly diminished capability in close quarters combat."
modifier_type = /datum/modifier/trait/wimpy
mutually_exclusive = list(/datum/trait/modifier/physical/weak)
/datum/trait/modifier/physical/inaccurate
@@ -68,6 +77,7 @@
/datum/trait/modifier/physical/high_metabolism
name = "High Metabolism"
modifier_type = /datum/modifier/trait/high_metabolism
mutually_exclusive = list(/datum/trait/modifier/physical/low_metabolism)
/datum/trait/modifier/physical/high_metabolism/test_for_invalidity(var/datum/category_item/player_setup_item/traits/setup)
if(setup.is_FBP())
@@ -78,6 +88,7 @@
/datum/trait/modifier/physical/low_metabolism
name = "Low Metabolism"
modifier_type = /datum/modifier/trait/low_metabolism
mutually_exclusive = list(/datum/trait/modifier/physical/high_metabolism)
/datum/trait/modifier/physical/low_metabolism/test_for_invalidity(var/datum/category_item/player_setup_item/traits/setup)
if(setup.is_FBP())
@@ -165,7 +176,7 @@
name = "Xenophobic"
desc = "The mind of the Alien is unknowable, and as such, their intentions cannot be known. You always watch the xenos closely, as they most certainly are watching you \
closely, waiting to strike."
muturally_exclusive = list(
mutually_exclusive = list(
/datum/trait/modifier/mental/humanphobe,
/datum/trait/modifier/mental/skrellphobe,
/datum/trait/modifier/mental/tajaraphobe,
@@ -177,36 +188,36 @@
/datum/trait/modifier/mental/humanphobe
name = "Human-phobic"
desc = "Boilerplate racism for monkeys goes here."
muturally_exclusive = list(/datum/trait/modifier/mental/xenophobe)
mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe)
/datum/trait/modifier/mental/skrellphobe
name = "Skrell-phobic"
desc = "Boilerplate racism for squid goes here."
muturally_exclusive = list(/datum/trait/modifier/mental/xenophobe)
mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe)
/datum/trait/modifier/mental/tajaraphobe
name = "Tajara-phobic"
desc = "Boilerplate racism for cats goes here."
muturally_exclusive = list(/datum/trait/modifier/mental/xenophobe)
mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe)
/datum/trait/modifier/mental/unathiphobe
name = "Unathi-phobic"
desc = "Boilerplate racism for lizards goes here."
muturally_exclusive = list(/datum/trait/modifier/mental/xenophobe)
mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe)
// Not sure why anyone would hate/fear these guys but for the sake of completeness here we are.
/datum/trait/modifier/mental/dionaphobe
name = "Diona-phobic"
desc = "Boilerplate racism for trees goes here."
muturally_exclusive = list(/datum/trait/modifier/mental/xenophobe)
mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe)
/datum/trait/modifier/mental/teshariphobe
name = "Teshari-phobic"
desc = "Boilerplate racism for birds goes here."
muturally_exclusive = list(/datum/trait/modifier/mental/xenophobe)
mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe)
/datum/trait/modifier/mental/prometheanphobe
name = "Promethean-phobic"
desc = "Boilerplate racism for jellos goes here."
muturally_exclusive = list(/datum/trait/modifier/mental/xenophobe)
mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe)
*/
@@ -79,7 +79,7 @@ var/list/trait_categories = list() // The categories available for the trait men
if(invalidity)
invalid += "[invalidity] "
if(conflicts)
invalid += "This trait is muturally exclusive with [conflicts]."
invalid += "This trait is mutually exclusive with [conflicts]."
. += "<td width = 75%><font size=2><i>[T.desc]</i>\
[invalid ? "<font color='#FF0000'><br>Cannot take trait. Reason: [invalid]</font>":""]</font></td></tr>"
@@ -114,7 +114,7 @@ var/list/trait_categories = list() // The categories available for the trait men
var/conflicts = T.test_for_trait_conflict(pref.traits)
if(conflicts)
pref.traits -= trait_name
to_chat(preference_mob, "<span class='warning'>The [trait_name] trait is muturally exclusive with [conflicts].</span>")
to_chat(preference_mob, "<span class='warning'>The [trait_name] trait is mutually exclusive with [conflicts].</span>")
/datum/category_item/player_setup_item/traits/OnTopic(href, href_list, user)
if(href_list["toggle_trait"])
@@ -129,7 +129,7 @@ var/list/trait_categories = list() // The categories available for the trait men
var/conflicts = T.test_for_trait_conflict(pref.traits)
if(conflicts)
to_chat(user, "<span class='warning'>The [T.name] trait is muturally exclusive with [conflicts].</span>")
to_chat(user, "<span class='warning'>The [T.name] trait is mutually exclusive with [conflicts].</span>")
return TOPIC_NOACTION
pref.traits += T.name
@@ -143,7 +143,7 @@ var/list/trait_categories = list() // The categories available for the trait men
/datum/trait
var/name = null // Name to show on UI
var/desc = null // Description of what it does, also shown on UI.
var/list/muturally_exclusive = list() // List of trait types which cannot be taken alongside this trait.
var/list/mutually_exclusive = list() // List of trait types which cannot be taken alongside this trait.
var/category = null // What section to place this trait inside.
// Applies effects to the newly spawned mob.
@@ -156,16 +156,16 @@ var/list/trait_categories = list() // The categories available for the trait men
/datum/trait/proc/test_for_invalidity(var/datum/category_item/player_setup_item/traits/setup)
return null
// Checks muturally_exclusive. current_traits needs to be a list of strings.
// Checks mutually_exclusive. current_traits needs to be a list of strings.
// Returns null if everything is well, similar to the above proc. Otherwise returns an english_list() of conflicting traits.
/datum/trait/proc/test_for_trait_conflict(var/list/current_traits)
var/list/conflicts = list()
var/result
if(muturally_exclusive.len)
if(mutually_exclusive.len)
for(var/trait_name in current_traits)
var/datum/trait/T = trait_datums[trait_name]
if(T.type in muturally_exclusive)
if(T.type in mutually_exclusive)
conflicts.Add(T.name)
if(conflicts.len)
+4
View File
@@ -51,6 +51,10 @@ datum/preferences
var/list/language_prefixes = list() //Kanguage prefix keys
var/list/gear //Custom/fluff item loadout.
var/list/traits //Traits which modifier characters for better or worse (mostly worse).
var/synth_color = 0 //Lets normally uncolorable synth parts be colorable.
var/r_synth //Used with synth_color to color synth parts that normaly can't be colored.
var/g_synth //Same as above
var/b_synth //Same as above
//Some faction information.
var/home_system = "Unset" //System of birth.
+60 -1
View File
@@ -170,6 +170,7 @@
icon_state = O.icon_state
set_dir(O.dir)
////////////////////////////////////////////////////////////////////////////////////////
//Gloves
/obj/item/clothing/gloves
name = "gloves"
@@ -183,8 +184,11 @@
siemens_coefficient = 0.75
var/wired = 0
var/obj/item/weapon/cell/cell = 0
var/overgloves = 0
var/fingerprint_chance = 0 //How likely the glove is to let fingerprints through
var/obj/item/clothing/gloves/ring = null //Covered ring
var/mob/living/carbon/human/wearer = null //Used for covered rings when dropping
var/glove_level = 2 //What "layer" the glove is on
var/overgloves = 0 //Used by gauntlets and arm_guards
body_parts_covered = HANDS
slot_flags = SLOT_GLOVES
attack_verb = list("challenged")
@@ -201,6 +205,8 @@
/obj/item/clothing/gloves/emp_act(severity)
if(cell)
cell.emp_act(severity)
if(ring)
ring.emp_act(severity)
..()
// Called just before an attack_hand(), in mob/UnarmedAttack()
@@ -225,6 +231,59 @@
species_restricted -= "Tajara"
return
*/
/obj/item/clothing/gloves/mob_can_equip(mob/user, slot)
var/mob/living/carbon/human/H = user
if(slot && slot == slot_gloves)
if(istype(H.gloves, /obj/item/clothing/gloves/ring))
ring = H.gloves
if(ring.glove_level >= src.glove_level)
to_chat(user, "You are unable to wear \the [src] as \the [H.gloves] are in the way.")
ring = null
return 0
else
H.drop_from_inventory(ring) //Remove the ring (or other under-glove item in the hand slot?) so you can put on the gloves.
ring.forceMove(src)
to_chat(user, "You slip \the [src] on over \the [src.ring].")
else
ring = null
if(!..())
if(ring) //Put the ring back on if the check fails.
if(H.equip_to_slot_if_possible(ring, slot_gloves))
src.ring = null
return 0
wearer = H //TODO clean this when magboots are cleaned
return 1
/obj/item/clothing/gloves/dropped()
..()
if(!wearer)
return
var/mob/living/carbon/human/H = wearer
if(ring && istype(H))
if(!H.equip_to_slot_if_possible(ring, slot_gloves))
ring.forceMove(get_turf(src))
src.ring = null
wearer = null
/////////////////////////////////////////////////////////////////////
//Rings
/obj/item/clothing/gloves/ring
name = "ring"
w_class = ITEMSIZE_TINY
icon = 'icons/obj/clothing/rings.dmi'
gender = NEUTER
species_restricted = list("exclude", "Diona")
siemens_coefficient = 1
glove_level = 1
fingerprint_chance = 100
///////////////////////////////////////////////////////////////////////
//Head
/obj/item/clothing/head
+2 -2
View File
@@ -5,11 +5,11 @@
overgloves = 1
w_class = ITEMSIZE_NORMAL
/obj/item/clothing/gloves/arm_guard/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
/obj/item/clothing/gloves/arm_guard/mob_can_equip(var/mob/living/carbon/human/H, slot)
if(..()) //This will only run if no other problems occured when equiping.
if(H.wear_suit)
if(H.wear_suit.body_parts_covered & ARMS)
H << "<span class='warning'>You can't wear \the [src] with \the [H.wear_suit], it's in the way.</span>"
to_chat(H, "<span class='warning'>You can't wear \the [src] with \the [H.wear_suit], it's in the way.</span>")
return 0
return 1
+6 -5
View File
@@ -9,16 +9,16 @@
/obj/item/clothing/gloves/gauntlets //Used to cover gloves, otherwise act as gloves.
name = "gauntlets"
desc = "These gloves go over regular gloves."
glove_level = 3
overgloves = 1
var/obj/item/clothing/gloves/gloves = null //Undergloves
var/mob/living/carbon/human/wearer = null //For glove procs
/obj/item/clothing/gloves/gauntlets/mob_can_equip(mob/user)
var/mob/living/carbon/human/H = user
if(H.gloves)
gloves = H.gloves
if(gloves.overgloves)
user << "You are unable to wear \the [src] as \the [H.gloves] are in the way."
to_chat(user, "You are unable to wear \the [src] as \the [H.gloves] are in the way.")
gloves = null
return 0
H.drop_from_inventory(gloves)
@@ -30,7 +30,7 @@
gloves = null
return 0
if(gloves)
user << "You slip \the [src] on over \the [gloves]."
to_chat(user, "You slip \the [src] on over \the [gloves].")
wearer = H
return 1
@@ -39,6 +39,7 @@
if(gloves)
if(!H.equip_to_slot_if_possible(gloves, slot_gloves))
gloves.forceMove(get_turf(src))
if(ring)
gloves.ring = ring
src.gloves = null
wearer = null
..()
wearer = null
+8 -1
View File
@@ -31,12 +31,19 @@
//Chaplain
/obj/item/clothing/head/chaplain_hood
name = "chaplain's hood"
desc = "It's hood that covers the head. It keeps you warm during the space winters."
desc = "It's a hood that covers the head. It keeps you warm during the space winters."
icon_state = "chaplain_hood"
item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black")
flags_inv = BLOCKHAIR
body_parts_covered = HEAD
//Chaplain but spookier
/obj/item/clothing/head/chaplain_hood/whiteout
name = "white hood"
desc = "It's a generic white hood. Very spooky."
icon_state = "whiteout_hood"
item_state_slots = list(slot_r_hand_str = "beret_white", slot_l_hand_str = "beret_white")
//Chaplain
/obj/item/clothing/head/nun_hood
name = "nun hood"
+5 -5
View File
@@ -15,17 +15,17 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 75, rad = 0)
/obj/item/clothing/mask/gas/filter_air(datum/gas_mixture/air)
var/datum/gas_mixture/filtered = new
var/datum/gas_mixture/gas_filtered = new
for(var/g in filtered_gases)
if(air.gas[g])
filtered.gas[g] = air.gas[g] * gas_filter_strength
air.gas[g] -= filtered.gas[g]
gas_filtered.gas[g] = air.gas[g] * gas_filter_strength
air.gas[g] -= gas_filtered.gas[g]
air.update_values()
filtered.update_values()
gas_filtered.update_values()
return filtered
return gas_filtered
/obj/item/clothing/mask/gas/half
name = "face mask"
+47
View File
@@ -0,0 +1,47 @@
/////////////////////////////////////////
//Material Rings
/obj/item/clothing/gloves/ring/material
icon = 'icons/obj/clothing/rings.dmi'
icon_state = "material"
/obj/item/clothing/gloves/ring/material/New(var/newloc, var/new_material)
..(newloc)
if(!new_material)
new_material = DEFAULT_WALL_MATERIAL
material = get_material_by_name(new_material)
if(!istype(material))
qdel(src)
return
name = "[material.display_name] ring"
desc = "A ring made from [material.display_name]."
color = material.icon_colour
/obj/item/clothing/gloves/ring/material/get_material()
return material
/obj/item/clothing/gloves/ring/material/wood/New(var/newloc)
..(newloc, "wood")
/obj/item/clothing/gloves/ring/material/plastic/New(var/newloc)
..(newloc, "plastic")
/obj/item/clothing/gloves/ring/material/iron/New(var/newloc)
..(newloc, "iron")
/obj/item/clothing/gloves/ring/material/steel/New(var/newloc)
..(newloc, "steel")
/obj/item/clothing/gloves/ring/material/silver/New(var/newloc)
..(newloc, "silver")
/obj/item/clothing/gloves/ring/material/gold/New(var/newloc)
..(newloc, "gold")
/obj/item/clothing/gloves/ring/material/platinum/New(var/newloc)
..(newloc, "platinum")
/obj/item/clothing/gloves/ring/material/phoron/New(var/newloc)
..(newloc, "phoron")
/obj/item/clothing/gloves/ring/material/glass/New(var/newloc)
..(newloc, "glass")
+85
View File
@@ -0,0 +1,85 @@
/////////////////////////////////////////
//Standard Rings
/obj/item/clothing/gloves/ring/engagement
name = "engagement ring"
desc = "An engagement ring. It certainly looks expensive."
icon_state = "diamond"
/obj/item/clothing/gloves/ring/engagement/attack_self(mob/user)
user.visible_message("<span class='warning'>\The [user] gets down on one knee, presenting \the [src].</span>","<span class='warning'>You get down on one knee, presenting \the [src].</span>")
/obj/item/clothing/gloves/ring/cti
name = "CTI ring"
desc = "A ring commemorating graduation from CTI."
icon_state = "cti-grad"
/obj/item/clothing/gloves/ring/mariner
name = "Mariner University ring"
desc = "A ring commemorating graduation from Mariner University."
icon_state = "mariner-grad"
/////////////////////////////////////////
//Reagent Rings
/obj/item/clothing/gloves/ring/reagent
flags = OPENCONTAINER
origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 4)
/obj/item/clothing/gloves/ring/reagent/New()
..()
create_reagents(15)
/obj/item/clothing/gloves/ring/reagent/equipped(var/mob/living/carbon/human/H)
..()
if(istype(H) && H.gloves==src)
if(reagents.total_volume)
to_chat(H, "<span class='danger'>You feel a prick as you slip on \the [src].</span>")
if(H.reagents)
var/contained_reagents = reagents.get_reagents()
var/trans = reagents.trans_to_mob(H, 15, CHEM_BLOOD)
admin_inject_log(usr, H, src, contained_reagents, trans)
return
//Sleepy Ring
/obj/item/clothing/gloves/ring/reagent/sleepy
name = "silver ring"
desc = "A ring made from what appears to be silver."
icon_state = "material"
origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
/obj/item/clothing/gloves/ring/reagent/sleepy/New()
..()
reagents.add_reagent(/datum/reagent/chloralhydrate, 15) // Less than a sleepy-pen, but still enough to knock someone out
/////////////////////////////////////////
//Seals and Signet Rings
/obj/item/clothing/gloves/ring/seal/secgen
name = "Secretary-General's official seal"
desc = "The official seal of the Secretary-General of the Sol Central Government, featured prominently on a silver ring."
icon_state = "seal-secgen"
/obj/item/clothing/gloves/ring/seal/mason
name = "masonic ring"
desc = "The Square and Compasses feature prominently on this Masonic ring."
icon_state = "seal-masonic"
/obj/item/clothing/gloves/ring/seal/signet
name = "signet ring"
desc = "A signet ring, for when you're too sophisticated to sign letters."
icon_state = "seal-signet"
var/nameset = 0
/obj/item/clothing/gloves/ring/seal/signet/attack_self(mob/user)
if(nameset)
to_chat(user, "<span class='notice'>The [src] has already been claimed!</span>")
return
to_chat(user, "<span class='notice'>You claim the [src] as your own!</span>")
change_name(user)
nameset = 1
/obj/item/clothing/gloves/ring/seal/signet/proc/change_name(var/signet_name = "Unknown")
name = "[signet_name]'s signet ring"
desc = "A signet ring belonging to [signet_name], for when you're too sophisticated to sign letters."
+5 -3
View File
@@ -36,13 +36,14 @@
user.update_inv_shoes() //so our mob-overlays update
user.update_action_buttons()
/obj/item/clothing/shoes/magboots/mob_can_equip(mob/user)
/obj/item/clothing/shoes/magboots/mob_can_equip(mob/user, slot)
var/mob/living/carbon/human/H = user
if(H.shoes)
shoes = H.shoes
if(shoes.overshoes)
user << "You are unable to wear \the [src] as \the [H.shoes] are in the way."
if(slot && slot == slot_shoes)
to_chat(user, "You are unable to wear \the [src] as \the [H.shoes] are in the way.")
shoes = null
return 0
H.drop_from_inventory(shoes) //Remove the old shoes so you can put on the magboots.
@@ -55,7 +56,8 @@
return 0
if (shoes)
user << "You slip \the [src] on over \the [shoes]."
if(slot && slot == slot_shoes)
to_chat(user, "You slip \the [src] on over \the [shoes].")
set_slowdown()
wearer = H
return 1
+9
View File
@@ -39,6 +39,15 @@
hoodtype = /obj/item/clothing/head/chaplain_hood
allowed = list (/obj/item/weapon/storage/bible)
//Chaplain but spookier
/obj/item/clothing/suit/storage/hooded/chaplain_hoodie/whiteout
name = "white robe"
desc = "A long, flowing white robe. It looks comfortable, but not very warm."
icon_state = "whiteout_robe"
item_state_slots = list(slot_r_hand_str = "suit_white", slot_l_hand_str = "suit_white")
flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
hoodtype = /obj/item/clothing/head/chaplain_hood/whiteout
//Chaplain
/obj/item/clothing/suit/nun
name = "nun robe"
@@ -594,6 +594,12 @@ obj/item/clothing/suit/storage/toggle/peacoat
icon_state = "smw_hoodie"
item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black")
/obj/item/clothing/suit/storage/toggle/hoodie/nrti
name = "New Reykjavik Technical Institute hoodie"
desc = "A warm, gray sweatshirt. It bears the letters ‘NRT’ on the back, in reference to Sif's premiere technical institute."
icon_state = "nrti_hoodie"
item_state_slots = list(slot_r_hand_str = "suit_grey", slot_l_hand_str = "suit_grey")
/obj/item/clothing/suit/whitedress
name = "white dress"
desc = "A fancy dress."
@@ -80,51 +80,51 @@
return //we aren't an object on the ground so don't call parent
..()
/obj/item/clothing/accessory/blue
/obj/item/clothing/accessory/tie
name = "blue tie"
icon_state = "bluetie"
/obj/item/clothing/accessory/red
/obj/item/clothing/accessory/tie/red
name = "red tie"
icon_state = "redtie"
/obj/item/clothing/accessory/blue_clip
/obj/item/clothing/accessory/tie/blue_clip
name = "blue tie with a clip"
icon_state = "bluecliptie"
/obj/item/clothing/accessory/blue_long
/obj/item/clothing/accessory/tie/blue_long
name = "blue long tie"
icon_state = "bluelongtie"
/obj/item/clothing/accessory/red_clip
/obj/item/clothing/accessory/tie/red_clip
name = "red tie with a clip"
icon_state = "redcliptie"
/obj/item/clothing/accessory/red_long
/obj/item/clothing/accessory/tie/red_long
name = "red long tie"
icon_state = "redlongtie"
/obj/item/clothing/accessory/black
/obj/item/clothing/accessory/tie/black
name = "black tie"
icon_state = "blacktie"
/obj/item/clothing/accessory/darkgreen
/obj/item/clothing/accessory/tie/darkgreen
name = "dark green tie"
icon_state = "dgreentie"
/obj/item/clothing/accessory/yellow
/obj/item/clothing/accessory/tie/yellow
name = "yellow tie"
icon_state = "yellowtie"
/obj/item/clothing/accessory/navy
/obj/item/clothing/accessory/tie/navy
name = "navy tie"
icon_state = "navytie"
/obj/item/clothing/accessory/white
/obj/item/clothing/accessory/tie/white
name = "white tie"
icon_state = "whitetie"
/obj/item/clothing/accessory/horrible
/obj/item/clothing/accessory/tie/horrible
name = "horrible tie"
desc = "A neosilk clip-on tie. This one is disgusting."
icon_state = "horribletie"
@@ -237,17 +237,14 @@
//Scarves
/obj/item/clothing/accessory/scarf
name = "scarf"
name = "green scarf"
desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks."
icon_state = "greenscarf"
/obj/item/clothing/accessory/scarf/red
name = "red scarf"
icon_state = "redscarf"
/obj/item/clothing/accessory/scarf/green
name = "green scarf"
icon_state = "greenscarf"
/obj/item/clothing/accessory/scarf/darkblue
name = "dark blue scarf"
icon_state = "darkbluescarf"
@@ -284,14 +281,14 @@
name = "christmas scarf"
icon_state = "christmasscarf"
/obj/item/clothing/accessory/stripedredscarf
/obj/item/clothing/accessory/scarf/stripedred
name = "striped red scarf"
icon_state = "stripedredscarf"
/obj/item/clothing/accessory/stripedgreenscarf
/obj/item/clothing/accessory/scarf/stripedgreen
name = "striped green scarf"
icon_state = "stripedgreenscarf"
/obj/item/clothing/accessory/stripedbluescarf
/obj/item/clothing/accessory/scarf/stripedblue
name = "striped blue scarf"
icon_state = "stripedbluescarf"
@@ -3,27 +3,27 @@
desc = "Slick black suit vest."
icon_state = "det_vest"
/obj/item/clothing/accessory/tan_jacket
/obj/item/clothing/accessory/jacket/
name = "tan suit jacket"
desc = "Cozy suit jacket."
icon_state = "tan_jacket"
/obj/item/clothing/accessory/charcoal_jacket
/obj/item/clothing/accessory/jacket/charcoal
name = "charcoal suit jacket"
desc = "Strict suit jacket."
icon_state = "charcoal_jacket"
/obj/item/clothing/accessory/navy_jacket
/obj/item/clothing/accessory/jacket/navy
name = "navy suit jacket"
desc = "Official suit jacket."
icon_state = "navy_jacket"
/obj/item/clothing/accessory/burgundy_jacket
/obj/item/clothing/accessory/jacket/burgundy
name = "burgundy suit jacket"
desc = "Expensive suit jacket."
icon_state = "burgundy_jacket"
/obj/item/clothing/accessory/checkered_jacket
/obj/item/clothing/accessory/jacket/checkered
name = "checkered suit jacket"
desc = "Lucky suit jacket."
icon_state = "checkered_jacket"
@@ -115,6 +115,58 @@
icon_state = "cargoponcho"
item_state = "cargoponcho"
/*
* Cloak
*/
/obj/item/clothing/accessory/poncho/roles/cloak
name = "brown cloak"
desc = "An elaborate brown cloak."
icon_state = "qmcloak"
item_state = "qmcloak"
body_parts_covered = null
/obj/item/clothing/accessory/poncho/roles/cloak/ce
name = "chief engineer's cloak"
desc = "An elaborate cloak worn by the chief engineer."
icon_state = "cecloak"
item_state = "cecloak"
/obj/item/clothing/accessory/poncho/roles/cloak/cmo
name = "chief medical officer's cloak"
desc = "An elaborate cloak meant to be worn by the chief medical officer."
icon_state = "cmocloak"
item_state = "cmocloak"
/obj/item/clothing/accessory/poncho/roles/cloak/hop
name = "head of personnel's cloak"
desc = "An elaborate cloak meant to be worn by the head of personnel."
icon_state = "hopcloak"
item_state = "hopcloak"
/obj/item/clothing/accessory/poncho/roles/cloak/rd
name = "research director's cloak"
desc = "An elaborate cloak meant to be worn by the research director."
icon_state = "rdcloak"
item_state = "rdcloak"
/obj/item/clothing/accessory/poncho/roles/cloak/qm
name = "quartermaster's cloak"
desc = "An elaborate cloak meant to be worn by the quartermaster."
icon_state = "qmcloak"
item_state = "qmcloak"
/obj/item/clothing/accessory/poncho/roles/cloak/hos
name = "head of security's cloak"
desc = "An elaborate cloak meant to be worn by the head of security."
icon_state = "hoscloak"
item_state = "hoscloak"
/obj/item/clothing/accessory/poncho/roles/cloak/captain
name = "colony director's cloak"
desc = "An elaborate cloak meant to be worn by the colony director."
icon_state = "capcloak"
item_state = "capcloak"
/obj/item/clothing/accessory/hawaii
name = "flower-pattern shirt"
desc = "You probably need some welder googles to look at this."
+2 -2
View File
@@ -101,7 +101,7 @@
icon_state = "internalaffairs"
item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit")
rolled_sleeves = 0
starting_accessories = list(/obj/item/clothing/accessory/black)
starting_accessories = list(/obj/item/clothing/accessory/tie/black)
/obj/item/clothing/under/rank/internalaffairs/skirt
desc = "The plain, professional attire of an Internal Affairs Agent. The top button is sewn shut."
@@ -156,7 +156,7 @@
desc = "A classy suit."
icon_state = "bluesuit"
item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue")
starting_accessories = list(/obj/item/clothing/accessory/red)
starting_accessories = list(/obj/item/clothing/accessory/tie/red)
/obj/item/clothing/under/lawyer/bluesuit/skirt
name = "blue skirt suit"
+5 -5
View File
@@ -73,7 +73,7 @@
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
rolled_sleeves = 0
starting_accessories = list(/obj/item/clothing/accessory/blue_clip)
starting_accessories = list(/obj/item/clothing/accessory/tie/blue_clip)
/*
/obj/item/clothing/under/det/verb/rollup()
@@ -89,13 +89,13 @@
/obj/item/clothing/under/det/grey
icon_state = "detective2"
desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks."
starting_accessories = list(/obj/item/clothing/accessory/red_long)
starting_accessories = list(/obj/item/clothing/accessory/tie/red_long)
/obj/item/clothing/under/det/black
icon_state = "detective3"
item_state_slots = list(slot_r_hand_str = "sl_suit", slot_l_hand_str = "sl_suit")
desc = "An immaculate white dress shirt, paired with a pair of dark grey dress pants, a red tie, and a charcoal vest."
starting_accessories = list(/obj/item/clothing/accessory/red_long, /obj/item/clothing/accessory/vest)
starting_accessories = list(/obj/item/clothing/accessory/tie/red_long, /obj/item/clothing/accessory/vest)
/obj/item/clothing/under/det/corporate
name = "detective's jumpsuit"
@@ -106,12 +106,12 @@
/obj/item/clothing/under/det/waistcoat
icon_state = "detective"
desc = "A rumpled white dress shirt paired with well-worn grey slacks, complete with a blue striped tie, faux-gold tie clip, and waistcoat."
starting_accessories = list(/obj/item/clothing/accessory/blue_clip, /obj/item/clothing/accessory/wcoat)
starting_accessories = list(/obj/item/clothing/accessory/tie/blue_clip, /obj/item/clothing/accessory/wcoat)
/obj/item/clothing/under/det/grey/waistcoat
icon_state = "detective2"
desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks, complete with a red striped tie and waistcoat."
starting_accessories = list(/obj/item/clothing/accessory/red_long, /obj/item/clothing/accessory/wcoat)
starting_accessories = list(/obj/item/clothing/accessory/tie/red_long, /obj/item/clothing/accessory/wcoat)
/obj/item/clothing/under/det/skirt
name = "detective's skirt"
+7 -7
View File
@@ -101,7 +101,7 @@
icon_state = "greensuit"
item_state_slots = list(slot_r_hand_str = "centcom", slot_l_hand_str = "centcom")
rolled_sleeves = 0
starting_accessories = list(/obj/item/clothing/accessory/darkgreen)
starting_accessories = list(/obj/item/clothing/accessory/tie/darkgreen)
/obj/item/clothing/under/gov/skirt
name = "Green formal skirt uniform"
@@ -161,7 +161,7 @@
icon_state = "gentlesuit"
item_state_slots = list(slot_r_hand_str = "grey", slot_l_hand_str = "grey")
rolled_sleeves = 0
starting_accessories = list(/obj/item/clothing/accessory/white, /obj/item/clothing/accessory/wcoat/gentleman)
starting_accessories = list(/obj/item/clothing/accessory/tie/white, /obj/item/clothing/accessory/wcoat/gentleman)
/obj/item/clothing/under/gentlesuit/skirt
name = "lady's suit"
@@ -472,7 +472,7 @@
desc = "A charcoal suit and red tie. Very professional."
icon_state = "charcoal_suit"
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
starting_accessories = list(/obj/item/clothing/accessory/navy, /obj/item/clothing/accessory/charcoal_jacket)
starting_accessories = list(/obj/item/clothing/accessory/tie/navy, /obj/item/clothing/accessory/jacket/charcoal)
/obj/item/clothing/under/suit_jacket/charcoal/skirt
name = "charcoal skirt"
@@ -483,7 +483,7 @@
desc = "A navy suit and red tie, intended for the station's finest."
icon_state = "navy_suit"
item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue")
starting_accessories = list(/obj/item/clothing/accessory/red, /obj/item/clothing/accessory/navy_jacket)
starting_accessories = list(/obj/item/clothing/accessory/tie/red, /obj/item/clothing/accessory/jacket/navy)
/obj/item/clothing/under/suit_jacket/navy/skirt
name = "navy skirt"
@@ -494,7 +494,7 @@
desc = "A burgundy suit and black tie. Somewhat formal."
icon_state = "burgundy_suit"
item_state_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red")
starting_accessories = list(/obj/item/clothing/accessory/black, /obj/item/clothing/accessory/burgundy_jacket)
starting_accessories = list(/obj/item/clothing/accessory/tie/black, /obj/item/clothing/accessory/jacket/burgundy)
/obj/item/clothing/under/suit_jacket/burgundy/skirt
name = "burgundy skirt"
@@ -505,7 +505,7 @@
desc = "That's a very nice suit you have there. Shame if something were to happen to it, eh?"
icon_state = "checkered_suit"
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
starting_accessories = list(/obj/item/clothing/accessory/black, /obj/item/clothing/accessory/checkered_jacket)
starting_accessories = list(/obj/item/clothing/accessory/tie/black, /obj/item/clothing/accessory/jacket/checkered)
/obj/item/clothing/under/suit_jacket/checkered/skirt
name = "checkered skirt"
@@ -516,7 +516,7 @@
desc = "A tan suit. Smart, but casual."
icon_state = "tan_suit"
item_state_slots = list(slot_r_hand_str = "tan_suit", slot_l_hand_str = "tan_suit")
starting_accessories = list(/obj/item/clothing/accessory/yellow, /obj/item/clothing/accessory/tan_jacket)
starting_accessories = list(/obj/item/clothing/accessory/tie/yellow, /obj/item/clothing/accessory/jacket)
/obj/item/clothing/under/suit_jacket/tan/skirt
name = "tan skirt"
@@ -222,6 +222,8 @@
existing_item = M.wear_id
else if(citem.item_path == /obj/item/device/pda)
existing_item = locate(/obj/item/device/pda) in M.contents
else if(citem.item_path == /obj/item/weapon/storage/backpack)
existing_item = locate(/obj/item/weapon/storage/backpack) in M.contents
// Spawn and equip the item.
if(existing_item)
@@ -127,7 +127,7 @@
It can be controlled from an Air Alarm. It can be configured to drain all air rapidly with a 'panic syphon' from an air alarm."
//Omni filters
/obj/machinery/atmospherics/omni/filter
/obj/machinery/atmospherics/omni/atmos_filter
description_info = "Filters gas from a custom input direction, with up to two filtered outputs and a 'everything else' \
output. The filtered output's arrows glow orange."
+2
View File
@@ -29,4 +29,6 @@ var/global/list/description_icons = list(
"power cell" = image(icon='icons/obj/power.dmi',icon_state="hcell"),
"device cell" = image(icon='icons/obj/power.dmi',icon_state="dcell"),
"weapon cell" = image(icon='icons/obj/power.dmi',icon_state="wcell"),
"hatchet" = image(icon='icons/obj/weapons.dmi',icon_state="hatchet"),
)
@@ -12,6 +12,8 @@
recipes += new/datum/stack_recipe("[display_name] spoon", /obj/item/weapon/material/kitchen/utensil/spoon/plastic, 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] armor plate", /obj/item/weapon/material/armor_plating, 1, time = 20, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] grave marker", /obj/item/weapon/material/gravemarker, 5, time = 50, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]")
if(integrity>=50)
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
@@ -137,6 +139,9 @@
recipes += new/datum/stack_recipe("wooden bucket", /obj/item/weapon/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0)
recipes += new/datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5)
/material/wood/log/generate_recipes()
return // Feel free to add log-only recipes here later if desired.
/material/cardboard/generate_recipes()
..()
recipes += new/datum/stack_recipe("box", /obj/item/weapon/storage/box)
+29
View File
@@ -203,6 +203,35 @@
icon_state = "sheet-wood"
default_type = "wood"
/obj/item/stack/material/log
name = "log"
icon_state = "sheet-log"
default_type = "log"
no_variants = FALSE
color = "#824B28"
max_amount = 25
w_class = ITEMSIZE_HUGE
/obj/item/stack/material/log/sif
name = "alien log"
color = "#0099cc"
/obj/item/stack/material/log/attackby(var/obj/item/W, var/mob/user)
if(!istype(W))
return ..()
if(W.sharp && W.edge && use(1))
to_chat(user, "<span class='notice'>You cut up a log into planks.</span>")
playsound(get_turf(src), 'sound/effects/woodcutting.ogg', 50, 1)
var/obj/item/stack/material/wood/existing_wood = locate() in user.loc
var/obj/item/stack/material/wood/new_wood = new(user.loc)
new_wood.amount = 2
if(existing_wood)
if(new_wood.transfer_to(existing_wood))
to_chat(user, "<span class='notice'>You add the newly-formed wood to the stack. It now contains [existing_wood.amount] planks.</span>")
else
return ..()
/obj/item/stack/material/cloth
name = "cloth"
icon_state = "sheet-cloth"
+12
View File
@@ -680,6 +680,18 @@ var/list/name_to_material
sheet_singular_name = "plank"
sheet_plural_name = "planks"
/material/wood/log
name = "log"
icon_base = "log"
stack_type = /obj/item/stack/material/log
sheet_singular_name = "log"
sheet_plural_name = "logs"
/material/wood/log/sif
name = "alien log"
icon_colour = "#0099cc" // Cyan-ish
stack_origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 2)
/material/wood/holographic
name = "holowood"
display_name = "wood"
+1 -1
View File
@@ -54,7 +54,7 @@
if(46 to 50)
new/obj/item/clothing/under/chameleon(src)
for(var/i = 0, i < 7, i++)
new/obj/item/clothing/accessory/horrible(src)
new/obj/item/clothing/accessory/tie/horrible(src)
if(51 to 52) // Uncommon, 2% each
new/obj/item/weapon/melee/classic_baton(src)
if(53 to 54)
+6
View File
@@ -24,6 +24,12 @@
name = "weak"
desc = "A lack of physical strength causes a diminshed capability in close quarters combat"
outgoing_melee_damage_percent = 0.8
/datum/modifier/trait/wimpy
name = "wimpy"
desc = "An extreme lack of physical strength causes greatly diminished capability in close quarters combat."
outgoing_melee_damage_percent = 0.6
/datum/modifier/trait/haemophilia
+2 -2
View File
@@ -63,8 +63,8 @@
//handle mask filtering
if(istype(wear_mask, /obj/item/clothing/mask) && breath)
var/obj/item/clothing/mask/M = wear_mask
var/datum/gas_mixture/filtered = M.filter_air(breath)
loc.assume_air(filtered)
var/datum/gas_mixture/gas_filtered = M.filter_air(breath)
loc.assume_air(gas_filtered)
return breath
return null
@@ -23,6 +23,12 @@
var/g_skin = 0
var/b_skin = 0
//Synth colors
var/synth_color = 0 //Lets normally uncolorable synth parts be colorable.
var/r_synth //Used with synth_color to color synth parts that normaly can't be colored.
var/g_synth //Same as above
var/b_synth //Same as above
var/size_multiplier = 1 //multiplier for the mob's icon size
var/damage_multiplier = 1 //multiplies melee combat damage
var/icon_update = 1 //whether icon updating shall take place
+3 -4
View File
@@ -302,7 +302,7 @@ proc/get_radio_key_from_channel(var/channel)
var/image/speech_bubble = image('icons/mob/talk.dmi',src,"[speech_type][speech_bubble_test]")
spawn(30) qdel(speech_bubble)
// VOREStation Edit - Attempt Multi-Z Talking
// Attempt Multi-Z Talking
var/mob/above = src.shadow
while(!QDELETED(above))
var/turf/ST = get_turf(above)
@@ -315,7 +315,6 @@ proc/get_radio_key_from_channel(var/channel)
listening[item] = z_speech_bubble
listening_obj |= results["objs"]
above = above.shadow
// VOREStation Edit End
//Main 'say' and 'whisper' message delivery
for(var/mob/M in listening)
@@ -325,12 +324,12 @@ proc/get_radio_key_from_channel(var/channel)
var/dst = get_dist(get_turf(M),get_turf(src))
if(dst <= message_range || (M.stat == DEAD && !forbid_seeing_deadchat)) //Inside normal message range, or dead with ears (handled in the view proc)
M << (listening[M] || speech_bubble) // VOREStation Edit - Send the image attached to shadow mob if available
M << (listening[M] || speech_bubble) // Send the image attached to shadow mob if available
M.hear_say(message, verb, speaking, alt_name, italics, src, speech_sound, sound_vol)
if(whispering) //Don't even bother with these unless whispering
if(dst > message_range && dst <= w_scramble_range) //Inside whisper scramble range
M << (listening[M] || speech_bubble) // VOREStation Edit - Send the image attached to shadow mob if available
M << (listening[M] || speech_bubble) // Send the image attached to shadow mob if available
M.hear_say(stars(message), verb, speaking, alt_name, italics, src, speech_sound, sound_vol*0.2)
if(dst > w_scramble_range && dst <= world.view) //Inside whisper 'visible' range
M.show_message("<span class='game say'><span class='name'>[src.name]</span> [w_not_heard].</span>", 2)
+2 -4
View File
@@ -57,10 +57,8 @@
if(!A.CanPass(src, start, 1.5, 0))
to_chat(src, "<span class='warning'>\The [A] blocks you.</span>")
return 0
//VOREStation Edit
if(!Move(destination))
return 0
//VOREStation Edit End
return 1
/mob/observer/zMove(direction)
@@ -199,7 +197,7 @@
/obj/structure/catwalk/CanFallThru(atom/movable/mover as mob|obj, turf/target as turf)
if(target.z < z)
return FALSE // TODO - Technically should be density = 1 and flags |= ON_BORDER
if(!isturf(mover.loc)) // VORESTATION EDIT. Feel free to do an upstream suggestion as well.
if(!isturf(mover.loc))
return FALSE // Only let loose floor items fall. No more snatching things off people's hands.
else
return TRUE
@@ -213,7 +211,7 @@
return TRUE // We don't block sideways or upward movement.
else if(istype(mover) && mover.checkpass(PASSGRILLE))
return TRUE // Anything small enough to pass a grille will pass a lattice
if(!isturf(mover.loc)) // VORESTATION EDIT. Feel free to do an upstream suggestion as well.
if(!isturf(mover.loc))
return FALSE // Only let loose floor items fall. No more snatching things off people's hands.
else
return FALSE // TODO - Technically should be density = 1 and flags |= ON_BORDER
+1 -2
View File
@@ -85,13 +85,12 @@
bottom_turf.plane = src.plane
bottom_turf.color = below.color
underlays = list(bottom_turf)
// VOREStation Edit - Hack workaround to byond crash bug - Include the magic overlay holder object.
// Hack workaround to byond crash bug - Include the magic overlay holder object.
overlays += below.overlays
// if(below.overlay_holder)
// overlays += (below.overlays + below.overlay_holder.overlays)
// else
// overlays += below.overlays
// VOREStation Edit End
// get objects (not mobs, they are handled by /obj/zshadow)
var/list/o_img = list()
+1 -1
View File
@@ -121,7 +121,7 @@
/mob/zshadow/set_typing_indicator(var/state)
if(!typing_indicator)
typing_indicator = new
typing_indicator.icon = 'icons/mob/talk.dmi' //VOREStation Edit - Looks better on the right with job icons.
typing_indicator.icon = 'icons/mob/talk.dmi' // Looks better on the right with job icons.
typing_indicator.icon_state = "typing"
if(state && !typing)
overlays += typing_indicator
+2
View File
@@ -19,6 +19,8 @@ var/global/list/limb_icon_cache = list()
if(robotic >= ORGAN_ROBOT)
var/datum/robolimb/franchise = all_robolimbs[model]
if(!(franchise && franchise.lifelike))
if(human.synth_color)
s_col = list(human.r_synth, human.g_synth, human.b_synth)
return
if(species && human.species && species.name != human.species.name)
return
+14
View File
@@ -245,6 +245,20 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
green=xion_green;\
rgb=xion_rgb"
/datum/robolimb/xion_alt3
company = "Xion - Whiteout"
desc = "This limb has a minimalist black and white casing."
icon = 'icons/mob/human_races/cyberlimbs/xion/xion_alt3.dmi'
unavailable_to_build = 1
/datum/robolimb/xion_alt4
company = "Xion - Breach - Whiteout"
desc = "This limb has a minimalist black and white casing. Looks a bit menacing."
icon = 'icons/mob/human_races/cyberlimbs/xion/xion_alt4.dmi'
unavailable_to_build = 1
parts = list(BP_HEAD)
/datum/robolimb/xion_monitor
company = "Xion Monitor"
desc = "Xion Mfg.'s unique spin on a popular prosthetic head model. It looks and minimalist and utilitarian."
+2 -2
View File
@@ -2,7 +2,7 @@
name = "microbattery"
desc = "A small, powerful cell for use in fully prosthetic bodies."
icon_state = "scell"
organ_tag = "cell"
organ_tag = O_CELL
parent_organ = BP_TORSO
vital = 1
@@ -21,7 +21,7 @@
// Used for an MMI or posibrain being installed into a human.
/obj/item/organ/internal/mmi_holder
name = "brain interface"
organ_tag = "brain"
organ_tag = O_BRAIN
parent_organ = BP_HEAD
vital = 1
var/brain_type = /obj/item/device/mmi
+1 -1
View File
@@ -466,7 +466,7 @@
user << browse("<HTML><HEAD><TITLE>[name]</TITLE></HEAD><BODY>[info_links][stamps]</BODY></HTML>", "window=[name]")
return
else if(istype(P, /obj/item/weapon/stamp))
else if(istype(P, /obj/item/weapon/stamp) || istype(P, /obj/item/clothing/gloves/ring/seal))
if((!in_range(src, usr) && loc != user && !( istype(loc, /obj/item/weapon/clipboard) ) && loc.loc != user && user.get_active_hand() != P))
return
+1 -1
View File
@@ -8,7 +8,7 @@
name = "large power cable"
desc = "This cable is tough. It cannot be cut with simple hand tools."
layer = 2.39 //Just below pipes, which are at 2.4
color = null //VOREStation Edit
color = null
/obj/structure/cable/heavyduty/attackby(obj/item/W, mob/user)
@@ -56,7 +56,7 @@
C.energy_setting = ENERGY_PHORON
continue
for(var/obj/effect/engine_setup/filter/F in world)
for(var/obj/effect/engine_setup/atmo_filter/F in world)
F.coolant = response
var/list/delayed_objects = list()
@@ -227,13 +227,13 @@
// Sets up filters. This assumes filters are set to filter out N2 back to the core loop by default!
/obj/effect/engine_setup/filter/
/obj/effect/engine_setup/atmo_filter/
name = "Omni Filter Marker"
var/coolant = null
/obj/effect/engine_setup/filter/activate()
/obj/effect/engine_setup/atmo_filter/activate()
..()
var/obj/machinery/atmospherics/omni/filter/F = locate() in get_turf(src)
var/obj/machinery/atmospherics/omni/atmos_filter/F = locate() in get_turf(src)
if(!F)
log_and_message_admins("## WARNING: Unable to locate omni filter at [x] [y] [z]!")
return SETUP_WARNING
+14 -3
View File
@@ -235,9 +235,18 @@
//if they have a neck grab on someone, that person gets hit instead
var/obj/item/weapon/grab/G = locate() in M
if(G && G.state >= GRAB_NECK)
visible_message("<span class='danger'>\The [M] uses [G.affecting] as a shield!</span>")
if(Bump(G.affecting, forced=1))
return //If Bump() returns 0 (keep going) then we continue on to attack M.
if(G.affecting.stat == DEAD)
var/shield_chance = min(80, (30 * (M.mob_size / 10))) //Small mobs have a harder time keeping a dead body as a shield than a human-sized one. Unathi would have an easier job, if they are made to be SIZE_LARGE in the future. -Mech
if(prob(shield_chance))
visible_message("<span class='danger'>\The [M] uses [G.affecting] as a shield!</span>")
if(Bump(G.affecting, forced=1))
return
else
visible_message("<span class='danger'>\The [M] tries to use [G.affecting] as a shield, but fails!</span>")
else
visible_message("<span class='danger'>\The [M] uses [G.affecting] as a shield!</span>")
if(Bump(G.affecting, forced=1))
return //If Bump() returns 0 (keep going) then we continue on to attack M.
passthrough = !attack_mob(M, distance)
else
@@ -410,6 +419,8 @@
return //cannot shoot yourself
if(istype(A, /obj/item/projectile))
return
if(istype(A, /obj/structure/foamedmetal)) //Turrets can detect through foamed metal, but will have to blast through it. Similar to windows, if someone runs behind it, a person should probably just not shoot.
return
if(istype(A, /mob/living) || istype(A, /obj/mecha) || istype(A, /obj/vehicle))
result = 2 //We hit someone, return 1!
return
@@ -96,7 +96,6 @@
reagent_state = LIQUID
color = "#0064C877"
metabolism = REM * 10
mrate_static = TRUE
glass_name = "water"
glass_desc = "The father of all refreshments."
@@ -16,7 +16,6 @@
reagent_state = SOLID
color = "#1C1300"
ingest_met = REM * 5
mrate_static = TRUE
/datum/reagent/carbon/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
@@ -74,8 +73,6 @@
var/targ_temp = 310
var/halluci = 0
mrate_static = TRUE
glass_name = "ethanol"
glass_desc = "A well-known alcohol with a variety of applications."
@@ -7,7 +7,6 @@
taste_mult = 4
reagent_state = SOLID
metabolism = REM * 4
mrate_static = TRUE
var/nutriment_factor = 30 // Per unit
var/injectable = 0
color = "#664330"
@@ -9,7 +9,6 @@
color = "#00BFFF"
overdose = REAGENTS_OVERDOSE * 2
metabolism = REM * 0.5
mrate_static = TRUE
scannable = 1
/datum/reagent/inaprovaline/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
@@ -141,7 +140,6 @@
taste_description = "bitterness"
reagent_state = LIQUID
color = "#0040FF"
mrate_static = TRUE //Until it's not crazy strong, at least
overdose = REAGENTS_OVERDOSE * 0.5
scannable = 1
+2 -2
View File
@@ -170,10 +170,10 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid).
/obj/machinery/r_n_d/circuit_imprinter/proc/canBuild(var/datum/design/D)
for(var/M in D.materials)
if(materials[M] < D.materials[M])
if(materials[M] < (D.materials[M] * mat_efficiency))
return 0
for(var/C in D.chemicals)
if(!reagents.has_reagent(C, D.chemicals[C]))
if(!reagents.has_reagent(C, D.chemicals[C] * mat_efficiency))
return 0
return 1
+1 -1
View File
@@ -671,7 +671,7 @@ other types of metals and chemistry for reagents).
id = "s-filter"
req_tech = list(TECH_DATA = 3, TECH_MAGNET = 3)
materials = list(DEFAULT_WALL_MATERIAL = 40, "silver" = 10)
build_path = /obj/item/weapon/stock_parts/subspace/filter
build_path = /obj/item/weapon/stock_parts/subspace/sub_filter
sort_string = "UAAAB"
/datum/design/item/stock_part/subspace_amplifier
+32
View File
@@ -156,6 +156,38 @@
materials = list(DEFAULT_WALL_MATERIAL = 5625, "glass" = 5625)
// req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 2)
/datum/design/item/prosfab/pros/heart
name = "Prosthetic heart"
id = "pros_heart"
build_path = /obj/item/organ/internal/heart
time = 15
materials = list(DEFAULT_WALL_MATERIAL = 5625, "glass" = 1000)
// req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 2)
/datum/design/item/prosfab/pros/lungs
name = "Prosthetic lungs"
id = "pros_lung"
build_path = /obj/item/organ/internal/lungs
time = 15
materials = list(DEFAULT_WALL_MATERIAL = 5625, "glass" = 1000)
// req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 2)
/datum/design/item/prosfab/pros/liver
name = "Prosthetic liver"
id = "pros_liver"
build_path = /obj/item/organ/internal/liver
time = 15
materials = list(DEFAULT_WALL_MATERIAL = 5625, "glass" = 1000)
// req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 2)
/datum/design/item/prosfab/pros/kidneys
name = "Prosthetic liver"
id = "pros_kidney"
build_path = /obj/item/organ/internal/kidneys
time = 15
materials = list(DEFAULT_WALL_MATERIAL = 5625, "glass" = 1000)
// req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 2)
//////////////////// Cyborg Parts ////////////////////
/datum/design/item/prosfab/cyborg
category = "Cyborg Parts"
+2 -2
View File
@@ -164,10 +164,10 @@
/obj/machinery/r_n_d/protolathe/proc/canBuild(var/datum/design/D)
for(var/M in D.materials)
if(materials[M] < D.materials[M])
if(materials[M] < (D.materials[M] * mat_efficiency))
return 0
for(var/C in D.chemicals)
if(!reagents.has_reagent(C, D.chemicals[C]))
if(!reagents.has_reagent(C, D.chemicals[C] * mat_efficiency))
return 0
return 1
+6 -3
View File
@@ -27,13 +27,16 @@
var/obj/item/organ/external/P = target.organs_by_name[E.parent_organ]
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (affected)
user << "<span class='warning'>Something is in the way! You can't attach [E] here!</span>"
to_chat(user, "<span class='warning'>Something is in the way! You can't attach [E] here!</span>")
return 0
if(!P)
user << "<span class='warning'>There's nothing to attach [E] to!</span>"
to_chat(user, "<span class='warning'>There's nothing to attach [E] to!</span>")
return 0
else if((P.robotic >= ORGAN_ROBOT) && (E.robotic < ORGAN_ROBOT))
user << "<span class='warning'>Attaching [E] to [P] wouldn't work well.</span>"
to_chat(user, "<span class='warning'>Attaching [E] to [P] wouldn't work well.</span>")
return 0
else if(istype(E, /obj/item/organ/external/head) && E.robotic >= ORGAN_ROBOT && P.robotic < ORGAN_ROBOT)
to_chat(user, "<span class='warning'>Attaching [E] to [P] might break [E].</span>")
return 0
else
return 1
@@ -6,10 +6,15 @@
name = "Crystal"
icon = 'icons/obj/mining.dmi'
icon_state = "crystal"
density = TRUE
anchored = TRUE
/obj/machinery/crystal/New()
if(prob(50))
icon_state = "crystal2"
set_light(3, 3, "#CC00CC")
else
set_light(3, 3, "#33CC33")
//large finds
/*