Adds an origin and culture system to govern possible faction items, citizenships, accents, religions. (#13400)

This commit is contained in:
Matt Atlas
2022-04-24 17:29:44 +02:00
committed by GitHub
parent fd242cef4c
commit b7b9db101f
85 changed files with 2020 additions and 280 deletions
@@ -425,6 +425,16 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.rlimb_data.Cut()
pref.body_markings.Cut()
var/new_culture = mob_species.possible_cultures[1]
pref.culture = "[new_culture]"
var/decl/origin_item/culture/OC = decls_repository.get_decl(text2path(pref.culture))
var/new_origin = OC.possible_origins[1]
pref.origin = "[new_origin]"
var/decl/origin_item/origin/OO = decls_repository.get_decl(text2path(pref.origin))
pref.accent = OO.possible_accents[1]
pref.citizenship = OO.possible_citizenships[1]
pref.religion = OO.possible_religions[1]
// Follows roughly the same way hair does above, but for gradient styles
var/global/list/valid_gradients = list()
@@ -6,19 +6,11 @@
S["med_record"] >> pref.med_record
S["sec_record"] >> pref.sec_record
S["gen_record"] >> pref.gen_record
S["citizenship"] >> pref.citizenship
S["religion"] >> pref.religion
S["accent"] >> pref.accent
S["economic_status"] >> pref.economic_status
/datum/category_item/player_setup_item/general/background/save_character(var/savefile/S)
S["med_record"] << pref.med_record
S["sec_record"] << pref.sec_record
S["gen_record"] << pref.gen_record
S["citizenship"] << pref.citizenship
S["religion"] << pref.religion
S["accent"] << pref.accent
S["economic_status"] << pref.economic_status
/datum/category_item/player_setup_item/general/background/gather_load_query()
return list(
@@ -30,21 +22,11 @@
"records_ccia" = "ccia_record"
),
"args" = list("char_id")
),
"ss13_characters" = list(
"vars" = list(
"economic_status",
"citizenship",
"religion",
"accent"
),
"args" = list("id")
)
)
/datum/category_item/player_setup_item/general/background/gather_load_parameters()
return list(
"id" = pref.current_character,
"char_id" = pref.current_character
)
@@ -55,14 +37,6 @@
"records_medical",
"records_security",
"char_id" = 1
),
"ss13_characters" = list(
"economic_status",
"citizenship",
"religion",
"accent",
"id" = 1,
"ckey" = 1
)
)
@@ -72,41 +46,11 @@
"records_medical" = pref.med_record,
"records_security" = pref.sec_record,
"char_id" = pref.current_character,
"economic_status" = pref.economic_status,
"citizenship" = pref.citizenship,
"religion" = pref.religion,
"accent" = pref.accent,
"id" = pref.current_character,
"ckey" = PREF_CLIENT_CKEY
)
/datum/category_item/player_setup_item/general/background/sanitize_character()
var/datum/species/S = all_species[pref.species]
if(!pref.citizenship)
pref.citizenship = S.default_citizenship
if(!pref.religion)
pref.religion = RELIGION_NONE
if(!(pref.citizenship in S.allowed_citizenships))
pref.citizenship = S.default_citizenship
if(!(pref.religion in S.allowed_religions))
pref.religion = RELIGION_NONE
if(!(pref.accent in S.allowed_accents))
pref.accent = S.default_accent
pref.economic_status = sanitize_inlist(pref.economic_status, ECONOMIC_POSITIONS, initial(pref.economic_status))
/datum/category_item/player_setup_item/general/background/content(var/mob/user)
var/list/dat = list(
"<b>Background Information</b><br>",
"Economic Status: <a href='?src=\ref[src];economic_status=1'>[pref.economic_status]</a><br/>",
"Citizenship: <a href='?src=\ref[src];citizenship=1'>[pref.citizenship]</a><br/>",
"Religion: <a href='?src=\ref[src];religion=1'>[pref.religion]</a><br/>",
"Accent: <a href='?src=\ref[src];accent=1'>[pref.accent]</a><br/>",
"<br/><b>Records</b>:<br/>"
)
var/list/dat = list("<br/><b>Records</b>:<br/>")
if(jobban_isbanned(user, "Records"))
dat += "<span class='danger'>You are banned from using character records.</span><br>"
@@ -121,50 +65,7 @@
. = dat.Join()
/datum/category_item/player_setup_item/general/background/OnTopic(var/href,var/list/href_list, var/mob/user)
var/datum/species/S = all_species[pref.species]
if(href_list["economic_status"])
var/new_status = input(user, "Choose how wealthy your character is. Note that this applies a multiplier to a value that is also affected by your species and job.", "Character Preference", pref.economic_status) as null|anything in ECONOMIC_POSITIONS
if(new_status && CanUseTopic(user))
pref.economic_status = new_status
return TOPIC_REFRESH
else if(href_list["citizenship"])
var/choice = input(user, "Please choose your current citizenship.", "Character Preference", pref.citizenship) as null|anything in S.allowed_citizenships
if(!choice || !CanUseTopic(user))
return TOPIC_NOACTION
show_citizenship_menu(user, choice)
return TOPIC_REFRESH
else if(href_list["set_citizenship"])
pref.citizenship = (html_decode(href_list["set_citizenship"]))
sanitize_character()
return TOPIC_REFRESH
else if(href_list["religion"])
var/choice = input(user, "Please choose a religion.", "Character Preference", pref.religion) as null|anything in S.allowed_religions
if(!choice || !CanUseTopic(user))
return TOPIC_NOACTION
show_religion_menu(user, choice)
return TOPIC_REFRESH
else if(href_list["set_religion"])
pref.religion = (html_decode(href_list["set_religion"]))
sanitize_character()
return TOPIC_REFRESH
else if(href_list["accent"])
var/choice = input(user, "Please choose an accent.", "Character Preference", pref.accent) as null|anything in S.allowed_accents
if(!choice || !CanUseTopic(user))
return TOPIC_NOACTION
show_accent_menu(user, choice)
return TOPIC_REFRESH
else if(href_list["set_accent"])
pref.accent = (html_decode(href_list["set_accent"]))
sanitize_character()
return TOPIC_REFRESH
else if(href_list["set_medical_records"])
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)
if(!isnull(new_medical) && !jobban_isbanned(user, "Records") && CanUseTopic(user))
pref.med_record = new_medical
@@ -196,34 +97,4 @@
return TOPIC_REFRESH
return ..()
/datum/category_item/player_setup_item/general/background/proc/show_citizenship_menu(mob/user, selected_citizenship)
var/datum/citizenship/citizenship = SSrecords.citizenships[selected_citizenship]
if(citizenship)
var/list/dat = list("<center><b>[citizenship.name]</center></b>")
dat += "<br><br><center><a href='?src=\ref[user.client];JSlink=wiki;wiki_page=[replacetext(citizenship.name, " ", "_")]'>Read the Wiki</a></center>"
dat += "<br>[citizenship.description]"
dat += "<br><center>\[<a href='?src=\ref[src];set_citizenship=[html_encode(citizenship.name)]'>Select</a>\]</center>"
show_browser(user, dat.Join(), "window=citizenshippreview;size=400x500")
/datum/category_item/player_setup_item/general/background/proc/show_religion_menu(mob/user, selected_religion)
var/datum/religion/religion = SSrecords.religions[selected_religion]
if(religion)
var/list/dat = list("<center><b>[religion.name]</center></b>")
dat += "<br>[religion.description]"
dat += "<br><center>\[<a href='?src=\ref[src];set_religion=[html_encode(religion.name)]'>Select</a>\]</center>"
show_browser(user, dat.Join(), "window=religionpreview;size=400x500")
/datum/category_item/player_setup_item/general/background/proc/show_accent_menu(mob/user, selected_accent)
var/datum/accent/accent = SSrecords.accents[selected_accent]
if(accent)
var/list/dat = list("<center><b>[accent.name]</center></b>")
dat += "<br>[accent.description]"
dat += "<br><center>\[<a href='?src=\ref[src];set_accent=[html_encode(accent.name)]'>Select</a>\]</center>"
show_browser(user, dat.Join(), "window=accentpreview;size=400x500")
return ..()
@@ -292,6 +292,8 @@ var/list/gear_datums = list()
var/list/allowed_roles //Roles that can spawn with this item.
var/whitelisted //Term to check the whitelist for..
var/faction //Is this item whitelisted for a faction?
var/list/culture_restriction //Is this item restricted to certain cultures? The contents are paths.
var/list/origin_restriction //Is this item restricted to certain origins? The contents are paths.
var/sort_category = "General"
var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned.
var/flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION
@@ -349,6 +349,7 @@
description = "A selection of cadre brassards from Gadpathur."
path = /obj/item/clothing/accessory/armband/gadpathur
flags = GEAR_HAS_DESC_SELECTION
origin_restriction = list(/decl/origin_item/origin/gadpathur)
/datum/gear/accessory/gadpathur/New()
..()
@@ -363,12 +364,14 @@
description = "A small metal badge worn by Gadpathurian Section Leaders."
path = /obj/item/clothing/accessory/gadpathurian_leader
flags = GEAR_HAS_DESC_SELECTION
origin_restriction = list(/decl/origin_item/origin/gadpathur)
/datum/gear/accessory/gadpathur_dogtags
display_name = "gadpathurian dogtags"
description = "Dogtags issued to Gadpathurians."
path = /obj/item/clothing/accessory/dogtags/gadpathur
flags = GEAR_HAS_DESC_SELECTION
origin_restriction = list(/decl/origin_item/origin/gadpathur)
/datum/gear/accessory/sash_coloured
display_name = "sash (colourable)"
@@ -326,6 +326,7 @@
/datum/gear/gadbook
display_name = "gadpathurian morale manual"
path = /obj/item/device/litanybook/gadpathur
origin_restriction = list(/decl/origin_item/origin/gadpathur)
/datum/gear/aurora_miniature
display_name = "aurora miniature"
@@ -332,6 +332,7 @@
description = "A selection of headgear from Gadpathur."
path = /obj/item/clothing/head/gadpathur
flags = GEAR_HAS_DESC_SELECTION
origin_restriction = list(/decl/origin_item/origin/gadpathur)
/datum/gear/head/gadpathur/New()
..()
@@ -37,6 +37,7 @@
display_name = "dominian robe selection"
description = "A selection of robes belonging to Dominia's Moroz Holy Tribunal."
path = /obj/item/clothing/under/dominia/priest
culture_restriction = list(/decl/origin_item/culture/dominia, /decl/origin_item/culture/dominian_unathi)
/datum/gear/religion/dominia/robe/New()
..()
@@ -49,6 +50,7 @@
display_name = "dominian beret selection"
description = "A selection of modified berets belonging to Dominia's Moroz Holy Tribunal."
path = /obj/item/clothing/under/dominia/priest
culture_restriction = list(/decl/origin_item/culture/dominia, /decl/origin_item/culture/dominian_unathi)
/datum/gear/religion/dominia/beret/New()
..()
@@ -61,6 +63,7 @@
display_name = "dominian outerwear selection"
description = "A selection of capes and outerwear worn by the Moroz Holy Tribunal."
path = /obj/item/clothing/under/dominia/priest
culture_restriction = list(/decl/origin_item/culture/dominia, /decl/origin_item/culture/dominian_unathi)
/datum/gear/religion/dominia/cape/New()
..()
@@ -74,6 +77,7 @@
display_name = "assunzione robe selection"
description = "A selection of robes worn by adherents to Luceism."
path = /obj/item/clothing/accessory/poncho/assunzione
origin_restriction = list(/decl/origin_item/origin/assunzione, /decl/origin_item/origin/ipc_assunzione)
/datum/gear/religion/assunzione/robe/New()
..()
@@ -91,6 +95,7 @@
display_name = "tribunalist medical beret"
path = /obj/item/clothing/head/beret/dominia/medical
allowed_roles = list("Chief Medical Officer", "Physician", "Surgeon", "Pharmacist", "First Responder", "Medical Intern")
culture_restriction = list(/decl/origin_item/culture/dominia, /decl/origin_item/culture/dominian_unathi)
/datum/gear/religion/shaman_staff
display_name = "shaman staff"
@@ -101,33 +106,40 @@
description = "The traditional red-black-gold uniform of a priestly member of His Majesty's Diplomatic Service."
path = /obj/item/clothing/under/dominia/priest/consular
allowed_roles = list("Consular Officer")
culture_restriction = list(/decl/origin_item/culture/dominia, /decl/origin_item/culture/dominian_unathi)
/datum/gear/religion/dominia/beret_consular
display_name = "tribunalist consular beret"
description = "A n elegant and well-tailored gold-and-red beret worn by priestly members of His Majesty's Diplomatic Service."
path = /obj/item/clothing/head/beret/dominia/consular
allowed_roles = list("Consular Officer")
culture_restriction = list(/decl/origin_item/culture/dominia, /decl/origin_item/culture/dominian_unathi)
/datum/gear/religion/dominia/cape_consular
display_name = "tribunalist cousular cape"
description = "A truly majestic gold and red cape worn by members of the clergy affiliated with His Majesty's Diplomatic Service."
path = /obj/item/clothing/accessory/poncho/dominia/consular
allowed_roles = list("Consular Officer")
culture_restriction = list(/decl/origin_item/culture/dominia, /decl/origin_item/culture/dominian_unathi)
/datum/gear/religion/assunzione/accessory
display_name = "luceian amulet"
path = /obj/item/clothing/accessory/assunzione
origin_restriction = list(/decl/origin_item/origin/assunzione, /decl/origin_item/origin/ipc_assunzione)
/datum/gear/religion/assunzioneorb
display_name = "assunzione warding sphere"
description = "A religious artefact commonly associated with Luceism."
path = /obj/item/assunzioneorb
origin_restriction = list(/decl/origin_item/origin/assunzione, /decl/origin_item/origin/ipc_assunzione)
/datum/gear/religion/assunzionesheath
display_name = "assunzione warding sphere sheath"
description = "A small metal shell designed to hold a warding sphere."
path = /obj/item/storage/assunzionesheath
origin_restriction = list(/decl/origin_item/origin/assunzione, /decl/origin_item/origin/ipc_assunzione)
/datum/gear/religion/dominia/codex
display_name = "tribunal codex"
path = /obj/item/device/litanybook
path = /obj/item/device/litanybook
culture_restriction = list(/decl/origin_item/culture/dominia, /decl/origin_item/culture/dominian_unathi)
@@ -286,6 +286,7 @@ datum/gear/suit/colorvest
display_name = "dominian cape"
path = /obj/item/clothing/accessory/poncho/dominia_cape
flags = GEAR_HAS_DESC_SELECTION
culture_restriction = list(/decl/origin_item/culture/dominia, /decl/origin_item/culture/dominian_unathi)
/datum/gear/suit/dominia_cape/New()
..()
@@ -303,6 +304,7 @@ datum/gear/suit/colorvest
description = "A selection of Dominian coats and jackets."
path = /obj/item/clothing/suit/storage/toggle/dominia
flags = GEAR_HAS_DESC_SELECTION
culture_restriction = list(/decl/origin_item/culture/dominia, /decl/origin_item/culture/dominian_unathi)
/datum/gear/suit/dominia/New()
..()
@@ -323,6 +325,7 @@ datum/gear/suit/colorvest
description = "A selection of Fisanduhian jackets."
path = /obj/item/clothing/suit/storage/toggle/dominia/bomber
flags = GEAR_HAS_DESC_SELECTION
culture_restriction = list(/decl/origin_item/culture/dominia, /decl/origin_item/culture/dominian_unathi)
/datum/gear/suit/fisanduhian_bomber/New()
..()
@@ -413,6 +416,7 @@ datum/gear/suit/colorvest
display_name = "himean coat selection"
path = /obj/item/clothing/suit/storage/toggle/himeo
flags = GEAR_HAS_DESC_SELECTION
origin_restriction = list(/decl/origin_item/origin/himeo)
/datum/gear/suit/himeo/New()
..()
@@ -426,6 +430,7 @@ datum/gear/suit/colorvest
description = "A selection of Vysokan chokhas."
path = /obj/item/clothing/suit/storage/vysoka
flags = GEAR_HAS_DESC_SELECTION | GEAR_HAS_COLOR_SELECTION
origin_restriction = list(/decl/origin_item/origin/vysoka)
/datum/gear/suit/vysoka/New()
..()
@@ -460,6 +465,7 @@ datum/gear/suit/colorvest
display_name = "gadpathurian coat selection"
path = /obj/item/clothing/suit/storage/gadpathur
flags = GEAR_HAS_DESC_SELECTION
origin_restriction = list(/decl/origin_item/origin/gadpathur)
/datum/gear/suit/gadpathur/New()
..()
@@ -214,6 +214,7 @@
description = "A selection of Dominian clothing."
path = /obj/item/clothing/under/dominia
flags = GEAR_HAS_DESC_SELECTION
culture_restriction = list(/decl/origin_item/culture/dominia, /decl/origin_item/culture/dominian_unathi)
/datum/gear/uniform/dominia/New()
..()
@@ -230,6 +231,7 @@
display_name = "dominian dress selection"
description = "A selection of fancy Dominian dresses."
path = /obj/item/clothing/under/dominia/dress
culture_restriction = list(/decl/origin_item/culture/dominia, /decl/origin_item/culture/dominian_unathi)
/datum/gear/uniform/dominia_dress/New()
..()
@@ -244,6 +246,7 @@
description = "A selection of Dominian clothing belonging to the Diplomatic Service."
path = /obj/item/clothing/under/dominia/consular
allowed_roles = list("Consular Officer")
culture_restriction = list(/decl/origin_item/culture/dominia, /decl/origin_item/culture/dominian_unathi)
/datum/gear/uniform/dominia_consular/New()
..()
@@ -256,6 +259,7 @@
display_name = "fisanduhian sweater"
path = /obj/item/clothing/under/dominia/sweater
flags = GEAR_HAS_DESC_SELECTION
culture_restriction = list(/decl/origin_item/culture/dominia, /decl/origin_item/culture/dominian_unathi)
/datum/gear/uniform/elyra_holo
display_name = "elyran holographic suit selection"
@@ -332,6 +336,7 @@
display_name = "gadpathurian fatigues"
path = /obj/item/clothing/under/uniform/gadpathur
flags = GEAR_HAS_DESC_SELECTION
origin_restriction = list(/decl/origin_item/origin/gadpathur)
/datum/gear/uniform/miscellaneous/qipao
display_name = "qipao"
@@ -1,7 +1,7 @@
/datum/gear/suit/unathi_mantle
display_name = "hide mantle selection"
description = "A selection of hide mantles, one for each of the desert, forest, and mountainous \
regions of Moghes. The forest mantle from the coveted Tul is exclusively for nobility these days."
display_name = "peasant hide mantle selection"
description = "A selection of hide mantles, one for each of the desert, and mountainous \
regions of Moghes. The forest mantle is exclusively for nobility these days."
path = /obj/item/clothing/accessory/poncho/unathimantle
cost = 1
whitelisted = list(SPECIES_UNATHI)
@@ -12,10 +12,19 @@
..()
var/list/mantles = list()
mantles["hide mantle, desert"] = /obj/item/clothing/accessory/poncho/unathimantle
mantles["hide mantle, forest"] = /obj/item/clothing/accessory/poncho/unathimantle/forest
mantles["hide mantle, mountain"] = /obj/item/clothing/accessory/poncho/unathimantle/mountain
gear_tweaks += new /datum/gear_tweak/path(mantles)
/datum/gear/suit/unathi_mantle_noble
display_name = "forest mantle"
description = "A forest hide mantle, reserved exclusively for nobility."
path = /obj/item/clothing/accessory/poncho/unathimantle/forest
cost = 1
whitelisted = list(SPECIES_UNATHI)
origin_restriction = list(/decl/origin_item/origin/izweski_upper, /decl/origin_item/origin/trad_nobles)
sort_category = "Xenowear - Unathi"
flags = GEAR_HAS_COLOR_SELECTION
/datum/gear/suit/unathi_robe
display_name = "roughspun robe"
path = /obj/item/clothing/suit/unathi/robe
@@ -26,6 +35,7 @@
/datum/gear/suit/unathi_robe/kilt
display_name = "wasteland kilt"
origin_restriction = list(/decl/origin_item/origin/wastelander)
path = /obj/item/clothing/suit/unathi/robe/kilt
/datum/gear/suit/robe_coat
@@ -90,6 +100,7 @@
display_name = "wasteland goggles"
path = /obj/item/clothing/glasses/safety/goggles/wasteland
whitelisted = list(SPECIES_UNATHI)
origin_restriction = list(/decl/origin_item/origin/wastelander)
sort_category = "Xenowear - Unathi"
/datum/gear/accessory/sinta_hood
@@ -239,6 +250,7 @@
display_name = "shaman staff"
path = /obj/item/cane/shaman
sort_category = "Xenowear - Unathi"
origin_restriction = list(/decl/origin_item/origin/izweski_upper, /decl/origin_item/origin/trad_nobles)
whitelisted = list(SPECIES_UNATHI)
/datum/gear/suit/maxtlatl
@@ -247,6 +259,7 @@
cost = 1
whitelisted = list(SPECIES_UNATHI)
allowed_roles = list("Chaplain")
origin_restriction = list(/decl/origin_item/origin/izweski_upper, /decl/origin_item/origin/trad_nobles)
sort_category = "Xenowear - Unathi"
flags = GEAR_HAS_DESC_SELECTION
@@ -254,6 +267,7 @@
display_name = "Thakhist wristguards"
path = /obj/item/clothing/wrists/unathi/maxtlatl
whitelisted = list(SPECIES_UNATHI)
origin_restriction = list(/decl/origin_item/origin/izweski_upper, /decl/origin_item/origin/trad_nobles)
allowed_roles = list("Chaplain")
sort_category = "Xenowear - Unathi"
flags = GEAR_HAS_DESC_SELECTION
@@ -262,6 +276,7 @@
display_name = "Thakhist headgear"
path = /obj/item/clothing/head/unathi/maxtlatl
whitelisted = list(SPECIES_UNATHI)
origin_restriction = list(/decl/origin_item/origin/izweski_upper, /decl/origin_item/origin/trad_nobles)
allowed_roles = list("Chaplain")
sort_category = "Xenowear - Unathi"
flags = GEAR_HAS_DESC_SELECTION
@@ -271,6 +286,7 @@
path = /obj/item/clothing/accessory/poncho/rockstone
cost = 1
whitelisted = list(SPECIES_UNATHI)
origin_restriction = list(/decl/origin_item/origin/izweski_upper, /decl/origin_item/origin/trad_nobles)
sort_category = "Xenowear - Unathi"
flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION | GEAR_HAS_COLOR_SELECTION | GEAR_HAS_ADDITIONAL_COLOR_SELECTION
@@ -278,6 +294,7 @@
display_name = "jeweled bracers"
path = /obj/item/clothing/wrists/unathi/jeweled
whitelisted = list(SPECIES_UNATHI)
origin_restriction = list(/decl/origin_item/origin/izweski_upper, /decl/origin_item/origin/trad_nobles)
sort_category = "Xenowear - Unathi"
flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION | GEAR_HAS_COLOR_SELECTION
@@ -294,5 +311,6 @@
path = /obj/item/clothing/suit/unathi/jokfar
cost = 1
whitelisted = list(SPECIES_UNATHI)
origin_restriction = list(/decl/origin_item/origin/izweski_upper, /decl/origin_item/origin/trad_nobles)
sort_category = "Xenowear - Unathi"
flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION | GEAR_HAS_COLOR_SELECTION
@@ -0,0 +1,242 @@
/mob/living/carbon/human
var/decl/origin_item/culture/culture
var/decl/origin_item/origin/origin
/datum/category_item/player_setup_item/origin
name = "Origin"
sort_order = 1
/datum/category_item/player_setup_item/origin/load_character(var/savefile/S)
S["culture"] >> pref.culture
S["origin"] >> pref.origin
S["citizenship"] >> pref.citizenship
S["religion"] >> pref.religion
S["accent"] >> pref.accent
S["economic_status"] >> pref.economic_status
/datum/category_item/player_setup_item/origin/save_character(var/savefile/S)
S["culture"] << pref.culture
S["origin"] << pref.origin
S["citizenship"] << pref.citizenship
S["religion"] << pref.religion
S["accent"] << pref.accent
S["economic_status"] << pref.economic_status
/datum/category_item/player_setup_item/origin/gather_load_query()
return list(
"ss13_characters" = list(
"vars" = list(
"culture",
"origin",
"economic_status",
"citizenship",
"religion",
"accent"
),
"args" = list("id")
)
)
/datum/category_item/player_setup_item/origin/gather_load_parameters()
return list("id" = pref.current_character)
/datum/category_item/player_setup_item/origin/gather_save_query()
return list(
"ss13_characters" = list(
"culture",
"origin",
"economic_status",
"citizenship",
"religion",
"accent",
"id" = 1,
"ckey" = 1
)
)
/datum/category_item/player_setup_item/origin/gather_save_parameters()
return list(
"culture" = pref.culture,
"origin" = pref.origin,
"economic_status" = pref.economic_status,
"citizenship" = pref.citizenship,
"religion" = pref.religion,
"accent" = pref.accent,
"id" = pref.current_character,
"ckey" = PREF_CLIENT_CKEY
)
/datum/category_item/player_setup_item/origin/sanitize_character(var/sql_load = 0)
var/datum/species/S = all_species[pref.species]
if(!istext(pref.culture) || !ispath(text2path(pref.culture), /decl/origin_item/culture))
var/decl/origin_item/culture/CI = S.possible_cultures[1]
pref.culture = "[CI]"
var/decl/origin_item/culture/our_culture = decls_repository.get_decl(text2path(pref.culture))
if(!istext(pref.origin) || !ispath(text2path(pref.origin), /decl/origin_item/origin))
var/decl/origin_item/origin/OI = pick(our_culture.possible_origins)
pref.origin = "[OI]"
else
var/decl/origin_item/origin/origin_check = text2path(pref.origin)
if(!(origin_check in our_culture.possible_origins))
to_client_chat(SPAN_WARNING("Your origin has been reset due to it being incompatible with your culture!"))
var/decl/origin_item/origin/OI = pick(our_culture.possible_origins)
pref.origin = "[OI]"
var/decl/origin_item/origin/our_origin = decls_repository.get_decl(text2path(pref.origin))
if(!(pref.citizenship in our_origin.possible_citizenships))
to_client_chat(SPAN_WARNING("Your previous citizenship is invalid for this origin! Resetting."))
pref.citizenship = our_origin.possible_citizenships[1]
if(!(pref.religion in our_origin.possible_religions))
to_client_chat(SPAN_WARNING("Your previous religion is invalid for this origin! Resetting."))
pref.religion = our_origin.possible_religions[1]
if(!(pref.accent in our_origin.possible_accents))
to_client_chat(SPAN_WARNING("Your previous accent is invalid for this origin! Resetting."))
pref.accent = our_origin.possible_accents[1]
pref.economic_status = sanitize_inlist(pref.economic_status, ECONOMIC_POSITIONS, initial(pref.economic_status))
/datum/category_item/player_setup_item/origin/content(var/mob/user)
if(SSrecords.init_state != SS_INITSTATE_DONE)
return "<center><large>Records controller not initialized yet. Please wait a bit and reload this section.</large></center>"
var/list/dat = list()
var/decl/origin_item/culture/CL = decls_repository.get_decl(text2path(pref.culture))
var/decl/origin_item/origin/OR = decls_repository.get_decl(text2path(pref.origin))
dat += "<b>Culture: </b><a href='?src=\ref[src];open_culture_menu=1'>[CL.name]</a><br>"
dat += "<i>- [CL.desc]</i><hr>"
if(CL.important_information)
dat += "<br><i>- <font color=red>[CL.important_information]</font></i>"
dat += "<b>Origin: </b><a href='?src=\ref[src];open_origin_menu=1'>[OR.name]</a><br>"
dat += "<i>- [OR.desc]</i>"
if(OR.important_information)
dat += "<br><i>- <font color=red>[OR.important_information]</font></i>"
dat += "<hr>"
dat += "<b>Economic Status:</b> <a href='?src=\ref[src];economic_status=1'>[pref.economic_status]</a><br/>"
dat += "<b>Citizenship:</b> <a href='?src=\ref[src];citizenship=1'>[pref.citizenship]</a><br/>"
dat += "<b>Religion:</b> <a href='?src=\ref[src];religion=1'>[pref.religion]</a><br/>"
dat += "<b>Accent:</b> <a href='?src=\ref[src];accent=1'>[pref.accent]</a><br/>"
. = dat.Join()
/datum/category_item/player_setup_item/origin/OnTopic(href, href_list, user)
var/datum/species/S = all_species[pref.species]
if(href_list["open_culture_menu"])
var/list/options = list()
var/list/possible_cultures = decls_repository.get_decls(S.possible_cultures)
for(var/decl_type in possible_cultures)
var/decl/origin_item/culture/CL = possible_cultures[decl_type]
options[CL.name] = CL
var/result = input(user, "Choose your character's culture.", "Culture") as null|anything in options
var/decl/origin_item/culture/chosen_culture = options[result]
if(chosen_culture)
show_window(chosen_culture, "set_culture_data", user)
return TOPIC_REFRESH
if(href_list["open_origin_menu"])
var/list/options = list()
var/decl/origin_item/culture/our_culture = decls_repository.get_decl(text2path(pref.culture)) //plutonians be like
var/list/decl/origin_item/origin/origins_list = decls_repository.get_decls(our_culture.possible_origins)
for(var/decl_type in origins_list)
var/decl/origin_item/origin/OR = origins_list[decl_type]
options[OR.name] = OR
var/result = input(user, "Choose your character's origin.", "Origins") as null|anything in options
var/decl/origin_item/origin/chosen_origin = options[result]
if(chosen_origin)
show_window(chosen_origin, "set_origin_data", user)
return TOPIC_REFRESH
if(href_list["set_culture_data"])
pref.culture = html_decode(href_list["set_culture_data"])
sanitize_character()
return TOPIC_REFRESH
if(href_list["set_origin_data"])
pref.origin = html_decode(href_list["set_origin_data"])
sanitize_character()
return TOPIC_REFRESH
if(href_list["economic_status"])
var/new_status = input(user, "Choose how wealthy your character is. Note that this applies a multiplier to a value that is also affected by your species and job.", "Character Preference", pref.economic_status) as null|anything in ECONOMIC_POSITIONS
if(new_status && CanUseTopic(user))
pref.economic_status = new_status
return TOPIC_REFRESH
if(href_list["citizenship"])
var/decl/origin_item/origin/our_origin = decls_repository.get_decl(text2path(pref.origin))
var/choice = input(user, "Please choose your current citizenship.", "Character Preference", pref.citizenship) as null|anything in our_origin.possible_citizenships
if(!choice || !CanUseTopic(user))
return TOPIC_NOACTION
show_citizenship_menu(user, choice)
return TOPIC_REFRESH
if(href_list["set_citizenship"])
pref.citizenship = (html_decode(href_list["set_citizenship"]))
sanitize_character()
return TOPIC_REFRESH
if(href_list["religion"])
var/decl/origin_item/origin/our_origin = decls_repository.get_decl(text2path(pref.origin))
var/choice = input(user, "Please choose a religion.", "Character Preference", pref.religion) as null|anything in our_origin.possible_religions
if(!choice || !CanUseTopic(user))
return TOPIC_NOACTION
show_religion_menu(user, choice)
return TOPIC_REFRESH
if(href_list["set_religion"])
pref.religion = (html_decode(href_list["set_religion"]))
sanitize_character()
return TOPIC_REFRESH
if(href_list["accent"])
var/decl/origin_item/origin/our_origin = decls_repository.get_decl(text2path(pref.origin))
var/choice = input(user, "Please choose an accent.", "Character Preference", pref.accent) as null|anything in our_origin.possible_accents
if(!choice || !CanUseTopic(user))
return TOPIC_NOACTION
show_accent_menu(user, choice)
return TOPIC_REFRESH
if(href_list["set_accent"])
pref.accent = (html_decode(href_list["set_accent"]))
sanitize_character()
return TOPIC_REFRESH
/datum/category_item/player_setup_item/origin/proc/show_window(var/decl/origin_item/OI, var/topic_data, var/mob/user)
var/datum/browser/origin_win = new(user, topic_data, "Origins Selection")
var/dat = "<html><center><b>[OI.name]</center></b>"
dat += "<hr>[OI.desc]<br>"
if(OI.important_information)
dat += "<font color=red><i>[OI.important_information]</i></font>"
dat += "<br><center>\[<a href='?src=\ref[src];[topic_data]=[html_encode(OI.type)]'>Select</a>\]</center>"
dat += "</html>"
origin_win.set_content(dat)
origin_win.open()
/datum/category_item/player_setup_item/origin/proc/show_citizenship_menu(mob/user, selected_citizenship)
var/datum/citizenship/citizenship = SSrecords.citizenships[selected_citizenship]
if(citizenship)
var/datum/browser/citizen_win = new(user, "citizen_win", "Citizenship")
var/dat = "<html><center><b>[citizenship.name]</center></b>"
dat += "<br><br><center><a href='?src=\ref[user.client];JSlink=wiki;wiki_page=[replacetext(citizenship.name, " ", "_")]'>Read the Wiki</a></center>"
dat += "<br>[citizenship.description]"
dat += "<br><center>\[<a href='?src=\ref[src];set_citizenship=[html_encode(citizenship.name)]'>Select</a>\]</center>"
dat += "</html>"
citizen_win.set_content(dat)
citizen_win.open()
/datum/category_item/player_setup_item/origin/proc/show_religion_menu(mob/user, selected_religion)
var/datum/religion/religion = SSrecords.religions[selected_religion]
if(religion)
var/datum/browser/rel_win = new(user, "rel_win", "Religion")
var/dat = "<center><b>[religion.name]</center></b>"
dat += "<br>[religion.description]"
dat += "<br><center>\[<a href='?src=\ref[src];set_religion=[html_encode(religion.name)]'>Select</a>\]</center>"
dat += "</html>"
rel_win.set_content(dat)
rel_win.open()
/datum/category_item/player_setup_item/origin/proc/show_accent_menu(mob/user, selected_accent)
var/datum/accent/accent = SSrecords.accents[selected_accent]
if(accent)
var/datum/browser/acc_win = new(user, "acc_win", "Accent")
var/dat = "<html><center><b>[accent.name]</center></b>"
dat += "<br>[accent.description]"
dat += "<br><center>\[<a href='?src=\ref[src];set_accent=[html_encode(accent.name)]'>Select</a>\]</center>"
dat += "</html>"
acc_win.set_content(dat)
acc_win.open()
@@ -23,35 +23,40 @@
sort_order = 1
category_item_type = /datum/category_item/player_setup_item/general
/datum/category_group/player_setup_category/origin
name = "Origin"
sort_order = 2
category_item_type = /datum/category_item/player_setup_item/origin
/datum/category_group/player_setup_category/skill_preferences
name = "Skills"
sort_order = 2
sort_order = 3
category_item_type = /datum/category_item/player_setup_item/skills
/datum/category_group/player_setup_category/occupation_preferences
name = "Occupation"
sort_order = 3
sort_order = 4
category_item_type = /datum/category_item/player_setup_item/occupation
/datum/category_group/player_setup_category/appearance_preferences
name = "Roles"
sort_order = 4
sort_order = 5
category_item_type = /datum/category_item/player_setup_item/antagonism
/datum/category_group/player_setup_category/loadout_preferences
name = "Loadout"
sort_order = 5
sort_order = 6
category_item_type = /datum/category_item/player_setup_item/loadout
/datum/category_group/player_setup_category/global_preferences
name = "Global"
sort_order = 6
sort_order = 7
category_item_type = /datum/category_item/player_setup_item/player_global
sql_role = SQL_PREFERENCES
/datum/category_group/player_setup_category/other_preferences
name = "Other"
sort_order = 7
sort_order = 8
category_item_type = /datum/category_item/player_setup_item/other
/****************************
+5
View File
@@ -91,6 +91,9 @@ datum/preferences
var/religion = "None" //Religious association.
var/accent = "None" //Character accent.
var/culture
var/origin
var/list/char_render_holders //Should only be a key-value list of north/south/east/west = obj/screen.
var/static/list/preview_screen_locs = list(
"1" = "character_preview_map:1,5:-12",
@@ -461,6 +464,8 @@ datum/preferences
character.employer_faction = faction
character.religion = religion
character.accent = accent
character.origin = decls_repository.get_decl(text2path(origin))
character.culture = decls_repository.get_decl(text2path(culture))
character.skills = skills
character.used_skillpoints = used_skillpoints