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

Conflicts:
	code/modules/client/client procs.dm
	nano/templates/robot_control.tmpl
This commit is contained in:
SinTwo
2016-07-27 16:11:55 -04:00
601 changed files with 16156 additions and 7173 deletions

View File

@@ -0,0 +1,3 @@
#define EQUIP_PREVIEW_LOADOUT 1
#define EQUIP_PREVIEW_JOB 2
#define EQUIP_PREVIEW_ALL (EQUIP_PREVIEW_LOADOUT|EQUIP_PREVIEW_JOB)

View File

@@ -7,19 +7,29 @@ var/global/list/uplink_locations = list("PDA", "Headset", "None")
/datum/category_item/player_setup_item/antagonism/basic/load_character(var/savefile/S)
S["uplinklocation"] >> pref.uplinklocation
S["exploit_record"] >> pref.exploit_record
S["antag_faction"] >> pref.antag_faction
S["antag_vis"] >> pref.antag_vis
/datum/category_item/player_setup_item/antagonism/basic/save_character(var/savefile/S)
S["uplinklocation"] << pref.uplinklocation
S["exploit_record"] << pref.exploit_record
S["antag_faction"] << pref.antag_faction
S["antag_vis"] << pref.antag_vis
/datum/category_item/player_setup_item/antagonism/basic/sanitize_character()
pref.uplinklocation = sanitize_inlist(pref.uplinklocation, uplink_locations, initial(pref.uplinklocation))
if(!pref.antag_faction) pref.antag_faction = "None"
if(!pref.antag_vis) pref.antag_vis = "Hidden"
// Moved from /datum/preferences/proc/copy_to()
/datum/category_item/player_setup_item/antagonism/basic/copy_to_mob(var/mob/living/carbon/human/character)
character.exploit_record = pref.exploit_record
character.antag_faction = pref.antag_faction
character.antag_vis = pref.antag_vis
/datum/category_item/player_setup_item/antagonism/basic/content(var/mob/user)
. += "Faction: <a href='?src=\ref[src];antagfaction=1'>[pref.antag_faction]</a><br/>"
. += "Visibility: <a href='?src=\ref[src];antagvis=1'>[pref.antag_vis]</a><br/>"
. +="<b>Uplink Type : <a href='?src=\ref[src];antagtask=1'>[pref.uplinklocation]</a></b>"
. +="<br>"
. +="<b>Exploitable information:</b><br>"
@@ -34,9 +44,29 @@ var/global/list/uplink_locations = list("PDA", "Headset", "None")
return TOPIC_REFRESH
if(href_list["exploitable_record"])
var/exploitmsg = sanitize(input(user,"Set exploitable information about you here.","Exploitable Information", html_decode(pref.exploit_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0)
var/exploitmsg = sanitize(input(user,"Set exploitable information about you here.","Exploitable Information", html_decode(pref.exploit_record)) as message|null, MAX_RECORD_LENGTH, extra = 0)
if(!isnull(exploitmsg) && !jobban_isbanned(user, "Records") && CanUseTopic(user))
pref.exploit_record = exploitmsg
return TOPIC_REFRESH
if(href_list["antagfaction"])
var/choice = input(user, "Please choose an antagonistic faction to work for.", "Character Preference", pref.antag_faction) as null|anything in antag_faction_choices + list("None","Other")
if(!choice || !CanUseTopic(user))
return TOPIC_NOACTION
if(choice == "Other")
var/raw_choice = sanitize(input(user, "Please enter a faction.", "Character Preference") as text|null, MAX_NAME_LEN)
if(raw_choice)
pref.antag_faction = raw_choice
else
pref.antag_faction = choice
return TOPIC_REFRESH
if(href_list["antagvis"])
var/choice = input(user, "Please choose an antagonistic visibility level.", "Character Preference", pref.antag_vis) as null|anything in antag_visiblity_choices
if(!choice || !CanUseTopic(user))
return TOPIC_NOACTION
else
pref.antag_vis = choice
return TOPIC_REFRESH
return ..()

View File

@@ -29,9 +29,7 @@ datum/preferences/proc/set_biological_gender(var/gender)
S["OOC_Notes"] << pref.metadata
/datum/category_item/player_setup_item/general/basic/sanitize_character()
if(!pref.species) pref.species = "Human"
var/datum/species/S = all_species[pref.species ? pref.species : "Human"]
pref.age = sanitize_integer(pref.age, S.min_age, S.max_age, initial(pref.age))
pref.age = sanitize_integer(pref.age, get_min_age(), get_max_age(), initial(pref.age))
pref.biological_gender = sanitize_inlist(pref.biological_gender, get_genders(), pick(get_genders()))
pref.identifying_gender = (pref.identifying_gender in all_genders_define_list) ? pref.identifying_gender : pref.biological_gender
pref.real_name = sanitize_name(pref.real_name, pref.species)
@@ -75,7 +73,6 @@ datum/preferences/proc/set_biological_gender(var/gender)
. = jointext(.,null)
/datum/category_item/player_setup_item/general/basic/OnTopic(var/href,var/list/href_list, var/mob/user)
var/datum/species/S = all_species[pref.species]
if(href_list["rename"])
var/raw_name = input(user, "Choose your character's name:", "Character Name") as text|null
if (!isnull(raw_name) && CanUseTopic(user))
@@ -108,10 +105,11 @@ datum/preferences/proc/set_biological_gender(var/gender)
return TOPIC_REFRESH
else if(href_list["age"])
if(!pref.species) pref.species = "Human"
var/new_age = input(user, "Choose your character's age:\n([S.min_age]-[S.max_age])", "Character Preference", pref.age) as num|null
var/min_age = get_min_age()
var/max_age = get_max_age()
var/new_age = input(user, "Choose your character's age:\n([min_age]-[max_age])", "Character Preference", pref.age) as num|null
if(new_age && CanUseTopic(user))
pref.age = max(min(round(text2num(new_age)), S.max_age), S.min_age)
pref.age = max(min(round(text2num(new_age)), max_age), min_age)
return TOPIC_REFRESH
else if(href_list["spawnpoint"])

View File

@@ -49,7 +49,7 @@
var/list/available_languages = S.secondary_langs.Copy()
for(var/L in all_languages)
var/datum/language/lang = all_languages[L]
if(!(lang.flags & RESTRICTED) && (!config.usealienwhitelist || is_alien_whitelisted(user, L) || !(lang.flags & WHITELISTED)))
if(!(lang.flags & RESTRICTED) && (is_lang_whitelisted(user, lang)))
available_languages |= L
// make sure we don't let them waste slots on the default languages

View File

@@ -1,7 +1,7 @@
var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-")
/datum/preferences
var/dress_mob = TRUE
var/equip_preview_mob = EQUIP_PREVIEW_ALL
/datum/category_item/player_setup_item/general/body
name = "Body"
@@ -121,6 +121,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
I.mechassist()
else if(status == "mechanical")
I.robotize()
else if(status == "digital")
I.digitize()
return
/datum/category_item/player_setup_item/general/body/content(var/mob/user)
@@ -197,6 +199,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
if(ind > 1)
. += ", "
. += "\tSynthetic [organ_name]"
else if(status == "digital")
++ind
if(ind > 1)
. += ", "
. += "\tDigital [organ_name]"
else if(status == "assisted")
++ind
if(ind > 1)
@@ -219,8 +226,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
. += "</td><td><b>Preview</b><br>"
. += "<div class='statusDisplay'><center><img src=previewicon.png width=[pref.preview_icon.Width()] height=[pref.preview_icon.Height()]></center></div>"
. += "<br><a href='?src=\ref[src];toggle_clothing=1'>[pref.dress_mob ? "Hide equipment" : "Show equipment"]</a>"
. += "<br><a href='?src=\ref[src];toggle_preview_value=[EQUIP_PREVIEW_LOADOUT]'>[pref.equip_preview_mob & EQUIP_PREVIEW_LOADOUT ? "Hide loadout" : "Show loadout"]</a>"
. += "<br><a href='?src=\ref[src];toggle_preview_value=[EQUIP_PREVIEW_JOB]'>[pref.equip_preview_mob & EQUIP_PREVIEW_JOB ? "Hide job gear" : "Show job gear"]</a>"
. += "</td></tr></table>"
. += "<b>Hair</b><br>"
@@ -324,8 +331,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
reset_limbs() // Safety for species with incompatible manufacturers; easier than trying to do it case by case.
var/datum/species/S = all_species[pref.species]
pref.age = max(min(pref.age, S.max_age), S.min_age)
var/min_age = get_min_age()
var/max_age = get_max_age()
pref.age = max(min(pref.age, max_age), min_age)
return TOPIC_REFRESH_UPDATE_PREVIEW
@@ -549,6 +557,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
var/list/organ_choices = list("Normal","Assisted","Mechanical")
if(pref.organ_data[BP_TORSO] == "cyborg")
organ_choices -= "Normal"
if(organ_name == "Brain")
organ_choices += "Digital"
var/new_state = input(user, "What state do you wish the organ to be in?") as null|anything in organ_choices
if(!new_state) return
@@ -560,6 +570,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.organ_data[organ] = "assisted"
if("Mechanical")
pref.organ_data[organ] = "mechanical"
if("Digital")
pref.organ_data[organ] = "digital"
return TOPIC_REFRESH
else if(href_list["disabilities"])
@@ -567,8 +579,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.disabilities ^= disability_flag
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["toggle_clothing"])
pref.dress_mob = !pref.dress_mob
else if(href_list["toggle_preview_value"])
pref.equip_preview_mob ^= text2num(href_list["toggle_preview_value"])
return TOPIC_REFRESH_UPDATE_PREVIEW
return ..()
@@ -629,11 +641,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
dat += "</table><center><hr/>"
var/restricted = 0
if(config.usealienwhitelist) //If we're using the whitelist, make sure to check it!
if(!(current_species.spawn_flags & SPECIES_CAN_JOIN))
restricted = 2
else if((current_species.spawn_flags & SPECIES_IS_WHITELISTED) && !is_alien_whitelisted(preference_mob(),current_species))
restricted = 1
if(!(current_species.spawn_flags & SPECIES_CAN_JOIN))
restricted = 2
else if(!is_alien_whitelisted(preference_mob(),current_species))
restricted = 1
if(restricted)
if(restricted == 1)

View File

@@ -115,19 +115,19 @@
return TOPIC_REFRESH
else if(href_list["set_medical_records"])
var/new_medical = sanitize(input(user,"Enter medical information here.","Character Preference", html_decode(pref.med_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0)
var/new_medical = sanitize(input(user,"Enter medical information here.","Character Preference", html_decode(pref.med_record)) as message|null, MAX_RECORD_LENGTH, extra = 0)
if(!isnull(new_medical) && !jobban_isbanned(user, "Records") && CanUseTopic(user))
pref.med_record = new_medical
return TOPIC_REFRESH
else if(href_list["set_general_records"])
var/new_general = sanitize(input(user,"Enter employment information here.","Character Preference", html_decode(pref.gen_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0)
var/new_general = sanitize(input(user,"Enter employment information here.","Character Preference", html_decode(pref.gen_record)) as message|null, MAX_RECORD_LENGTH, extra = 0)
if(!isnull(new_general) && !jobban_isbanned(user, "Records") && CanUseTopic(user))
pref.gen_record = new_general
return TOPIC_REFRESH
else if(href_list["set_security_records"])
var/sec_medical = sanitize(input(user,"Enter security information here.","Character Preference", html_decode(pref.sec_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0)
var/sec_medical = sanitize(input(user,"Enter security information here.","Character Preference", html_decode(pref.sec_record)) as message|null, MAX_RECORD_LENGTH, extra = 0)
if(!isnull(sec_medical) && !jobban_isbanned(user, "Records") && CanUseTopic(user))
pref.sec_record = sec_medical
return TOPIC_REFRESH

View File

@@ -55,7 +55,7 @@ var/list/gear_datums = list()
var/list/valid_gear_choices = list()
for(var/gear_name in gear_datums)
var/datum/gear/G = gear_datums[gear_name]
if(G.whitelisted && !is_alien_whitelisted(preference_mob(), G.whitelisted))
if(G.whitelisted && !is_alien_whitelisted(preference_mob(), all_species[G.whitelisted]))
continue
if(max_cost && G.cost > max_cost)
continue

View File

@@ -45,6 +45,10 @@
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

View File

@@ -3,8 +3,12 @@
path = /obj/item/weapon/cane
/datum/gear/dice
display_name = "d20"
path = /obj/item/weapon/dice/d20
display_name = "dice pack"
path = /obj/item/weapon/storage/pill_bottle/dice
/datum/gear/dice/nerd
display_name = "dice pack (gaming)"
path = /obj/item/weapon/storage/pill_bottle/dice_nerd
/datum/gear/cards
display_name = "deck of cards"

View File

@@ -48,4 +48,12 @@
/datum/gear/gloves/white
display_name = "gloves, white"
path = /obj/item/clothing/gloves/white
path = /obj/item/clothing/gloves/white
/datum/gear/gloves/evening
display_name = "evening gloves"
path = /obj/item/clothing/gloves/evening
/datum/gear/gloves/evening/New()
..()
gear_tweaks = list(gear_tweak_free_color_choice)

View File

@@ -31,6 +31,21 @@
path = /obj/item/clothing/head/beret/sec/navy/hos
allowed_roles = list("Head of Security")
/datum/gear/head/beret/csec
display_name = "beret, corporate (officer)"
path = /obj/item/clothing/head/beret/sec/corporate/officer
allowed_roles = list("Security Officer","Head of Security","Warden")
/datum/gear/head/beret/csec_warden
display_name = "beret, corporate (warden)"
path = /obj/item/clothing/head/beret/sec/corporate/warden
allowed_roles = list("Head of Security","Warden")
/datum/gear/head/beret/csec_hos
display_name = "beret, corporate (hos)"
path = /obj/item/clothing/head/beret/sec/corporate/hos
allowed_roles = list("Head of Security")
/datum/gear/head/beret/eng
display_name = "beret, engie-orange"
path = /obj/item/clothing/head/beret/engineering

View File

@@ -54,6 +54,10 @@
display_name = "military jacket, alt"
path = /obj/item/clothing/suit/storage/miljacket/alt
/datum/gear/suit/mil/green
display_name = "military jacket, green"
path = /obj/item/clothing/suit/storage/miljacket/green
/datum/gear/suit/hazard_vest
display_name = "hazard vest"
path = /obj/item/clothing/suit/storage/hazardvest
@@ -208,7 +212,7 @@
/datum/gear/suit/wintercoat/security
display_name = "winter coat, security"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/security
allowed_roles = list("Security Officer, Head of Security, Warden, Detective")
allowed_roles = list("Security Officer", "Head of Security", "Warden", "Detective")
/datum/gear/suit/wintercoat/medical
display_name = "winter coat, medical"
@@ -267,4 +271,20 @@
for(var/track_style in typesof(/obj/item/clothing/suit/storage/toggle/track))
var/obj/item/clothing/suit/storage/toggle/track/track = track_style
tracks[initial(track.name)] = track
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(tracks))
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(tracks))
/datum/gear/suit/flannel
display_name = "grey flannel"
path = /obj/item/clothing/suit/storage/flannel
/datum/gear/suit/flannel/red
display_name = "red flannel"
path = /obj/item/clothing/suit/storage/flannel/red
/datum/gear/suit/flannel/aqua
display_name = "aqua flannel"
path = /obj/item/clothing/suit/storage/flannel/aqua
/datum/gear/suit/flannel/brown
display_name = "brown flannel"
path = /obj/item/clothing/suit/storage/flannel/brown

View File

@@ -90,12 +90,12 @@
/datum/gear/uniform/job_skirt/ce
display_name = "skirt, ce"
path = /obj/item/clothing/under/rank/engineer/chief_engineer/skirt
path = /obj/item/clothing/under/rank/chief_engineer/skirt
allowed_roles = list("Chief Engineer")
/datum/gear/uniform/job_skirt/atmos
display_name = "skirt, atmos"
path = /obj/item/clothing/under/rank/engineer/atmospheric_technician/skirt
path = /obj/item/clothing/under/rank/atmospheric_technician/skirt
allowed_roles = list("Chief Engineer","Atmospheric Technician")
/datum/gear/uniform/job_skirt/eng
@@ -110,17 +110,17 @@
/datum/gear/uniform/job_skirt/cmo
display_name = "skirt, cmo"
path = /obj/item/clothing/under/rank/medical/chief_medical_officer/skirt
path = /obj/item/clothing/under/rank/chief_medical_officer/skirt
allowed_roles = list("Chief Medical Officer")
/datum/gear/uniform/job_skirt/chem
display_name = "skirt, chemist"
path = /obj/item/clothing/under/rank/medical/chemist/skirt
path = /obj/item/clothing/under/rank/chemist/skirt
allowed_roles = list("Chief Medical Officer","Chemist")
/datum/gear/uniform/job_skirt/viro
display_name = "skirt, virologist"
path = /obj/item/clothing/under/rank/medical/virologist/skirt
path = /obj/item/clothing/under/rank/virologist/skirt
allowed_roles = list("Chief Medical Officer","Medical Doctor")
/datum/gear/uniform/job_skirt/med
@@ -145,7 +145,7 @@
/datum/gear/uniform/job_skirt/warden
display_name = "skirt, warden"
path = /obj/item/clothing/under/rank/security/warden/skirt
path = /obj/item/clothing/under/rank/warden/skirt
allowed_roles = list("Head of Security", "Warden")
/datum/gear/uniform/job_skirt/security
@@ -155,7 +155,7 @@
/datum/gear/uniform/job_skirt/head_of_security
display_name = "skirt, hos"
path = /obj/item/clothing/under/rank/security/head_of_security/skirt
path = /obj/item/clothing/under/rank/head_of_security/skirt
allowed_roles = list("Head of Security")
/datum/gear/uniform/jeans_qm
@@ -325,7 +325,7 @@
allowed_roles = list("Security Officer","Head of Security","Warden")
/datum/gear/uniform/navywarsuit
display_name = "uniform, navy blue (Wardem)"
display_name = "uniform, navy blue (Warden)"
path = /obj/item/clothing/under/rank/warden/navyblue
allowed_roles = list("Head of Security","Warden")

View File

@@ -160,10 +160,10 @@
var/choice = input("Choose an title for [job.title].", "Choose Title", pref.GetPlayerAltTitle(job)) as anything in choices|null
if(choice && CanUseTopic(user))
SetPlayerAltTitle(job, choice)
return (pref.dress_mob ? TOPIC_REFRESH_UPDATE_PREVIEW : TOPIC_REFRESH)
return (pref.equip_preview_mob ? TOPIC_REFRESH_UPDATE_PREVIEW : TOPIC_REFRESH)
else if(href_list["set_job"])
if(SetJob(user, href_list["set_job"])) return (pref.dress_mob ? TOPIC_REFRESH_UPDATE_PREVIEW : TOPIC_REFRESH)
if(SetJob(user, href_list["set_job"])) return (pref.equip_preview_mob ? TOPIC_REFRESH_UPDATE_PREVIEW : TOPIC_REFRESH)
return ..()

View File

@@ -4,6 +4,10 @@
#define TOPIC_UPDATE_PREVIEW 4
#define TOPIC_REFRESH_UPDATE_PREVIEW (TOPIC_REFRESH|TOPIC_UPDATE_PREVIEW)
#define PREF_FBP_CYBORG "cyborg"
#define PREF_FBP_POSI "posi"
#define PREF_FBP_SOFTWARE "software"
/datum/category_group/player_setup_category/general_preferences
name = "General"
sort_order = 1
@@ -252,3 +256,50 @@
if(pref.client)
return pref.client.mob
// Checks in a really hacky way if a character's preferences say they are an FBP or not.
/datum/category_item/player_setup_item/proc/is_FBP()
if(pref.organ_data && pref.organ_data[BP_TORSO] != "cyborg")
return 0
return 1
// Returns what kind of FBP the player's prefs are. Returns 0 if they're not an FBP.
/datum/category_item/player_setup_item/proc/get_FBP_type()
if(!is_FBP())
return 0 // Not a robot.
switch(pref.organ_data["brain"])
if("assisted")
return PREF_FBP_CYBORG
if("mechanical")
return PREF_FBP_POSI
if("digital")
return PREF_FBP_SOFTWARE
return 0 //Something went wrong!
/datum/category_item/player_setup_item/proc/get_min_age()
var/datum/species/S = all_species[pref.species ? pref.species : "Human"]
if(!is_FBP())
return S.min_age // If they're not a robot, we can just use the species var.
var/FBP_type = get_FBP_type()
switch(FBP_type)
if(PREF_FBP_CYBORG)
return S.min_age
if(PREF_FBP_POSI)
return 1
if(PREF_FBP_SOFTWARE)
return 1
return S.min_age // welp
/datum/category_item/player_setup_item/proc/get_max_age()
var/datum/species/S = all_species[pref.species ? pref.species : "Human"]
if(!is_FBP())
return S.max_age // If they're not a robot, we can just use the species var.
var/FBP_type = get_FBP_type()
switch(FBP_type)
if(PREF_FBP_CYBORG)
return S.max_age + 20
if(PREF_FBP_POSI)
return 220
if(PREF_FBP_SOFTWARE)
return 150
return S.max_age // welp