mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-11 07:04:01 +01:00
Convert species, organ_data, and rlimb_data to TG (#19277)
* First test batch bulk change * remove desync'd old file * Small change
This commit is contained in:
@@ -31,11 +31,12 @@
|
||||
var/char_real_name = pref.read_preference(/datum/preference/name/real_name)
|
||||
var/char_bio_gender = pref.read_preference(/datum/preference/choiced/gender/biological)
|
||||
var/char_id_gender = pref.read_preference(/datum/preference/choiced/gender/identifying)
|
||||
var/pref_species = pref.read_preference(/datum/preference/choiced/species)
|
||||
// Re-sanitize name on join.
|
||||
// Fixes being able to swap from FBP to organic before round join to be organic with numbers in name.
|
||||
char_real_name = sanitize_name(char_real_name, pref.species, is_FBP())
|
||||
char_real_name = sanitize_name(char_real_name, pref_species, is_FBP())
|
||||
if(!char_real_name)
|
||||
char_real_name = random_name(char_id_gender, pref.species)
|
||||
char_real_name = random_name(char_id_gender, pref_species)
|
||||
if(CONFIG_GET(flag/humans_need_surnames))
|
||||
var/firstspace = findtext(char_real_name, " ")
|
||||
var/name_length = length(char_real_name)
|
||||
@@ -91,10 +92,12 @@
|
||||
var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin(pref.client_ckey)
|
||||
if(mannequin)
|
||||
species = mannequin.species
|
||||
else if(pref.species)
|
||||
species = GLOB.all_species[pref.species]
|
||||
else
|
||||
species = GLOB.all_species[SPECIES_HUMAN]
|
||||
var/pref_species = pref.read_preference(/datum/preference/choiced/species)
|
||||
if(pref_species)
|
||||
species = GLOB.all_species[pref_species]
|
||||
else
|
||||
species = GLOB.all_species[SPECIES_HUMAN]
|
||||
|
||||
var/list/species_stats = list(
|
||||
"total_health" = species.total_health,
|
||||
@@ -193,9 +196,10 @@
|
||||
switch(action)
|
||||
if("rename")
|
||||
var/current_name = pref.read_preference(/datum/preference/name/real_name)
|
||||
var/pref_species = pref.read_preference(/datum/preference/choiced/species)
|
||||
var/raw_name = tgui_input_text(user, "Choose your character's name:", "Character Name", current_name, encode = FALSE)
|
||||
if(!isnull(raw_name))
|
||||
var/new_name = sanitize_name(raw_name, pref.species, is_FBP())
|
||||
var/new_name = sanitize_name(raw_name, pref_species, is_FBP())
|
||||
if(new_name)
|
||||
pref.update_preference_by_type(/datum/preference/name/real_name, new_name)
|
||||
return TOPIC_REFRESH
|
||||
@@ -204,7 +208,7 @@
|
||||
return TOPIC_NOACTION
|
||||
|
||||
if("random_name")
|
||||
pref.update_preference_by_type(/datum/preference/name/real_name, random_name(pref.read_preference(/datum/preference/choiced/gender/identifying), pref.species))
|
||||
pref.update_preference_by_type(/datum/preference/name/real_name, random_name(pref.read_preference(/datum/preference/choiced/gender/identifying), pref.read_preference(/datum/preference/choiced/species)))
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if("always_random_name")
|
||||
@@ -213,9 +217,10 @@
|
||||
|
||||
if("nickname")
|
||||
var/current_nickname = pref.read_preference(/datum/preference/name/nickname)
|
||||
var/pref_species = pref.read_preference(/datum/preference/choiced/species)
|
||||
var/raw_nickname = tgui_input_text(user, "Choose your character's nickname:", "Character Nickname", current_nickname, encode = FALSE)
|
||||
if(!isnull(raw_nickname))
|
||||
var/new_nickname = sanitize_name(raw_nickname, pref.species, is_FBP())
|
||||
var/new_nickname = sanitize_name(raw_nickname, pref_species, is_FBP())
|
||||
if(new_nickname)
|
||||
pref.update_preference_by_type(/datum/preference/name/nickname, new_nickname)
|
||||
return TOPIC_REFRESH
|
||||
@@ -376,12 +381,14 @@
|
||||
|
||||
/datum/category_item/player_setup_item/general/basic/proc/get_genders()
|
||||
var/datum/species/S
|
||||
if(pref.species)
|
||||
S = GLOB.all_species[pref.species]
|
||||
var/pref_species = pref.read_preference(/datum/preference/choiced/species)
|
||||
if(pref_species)
|
||||
S = GLOB.all_species[pref_species]
|
||||
else
|
||||
S = GLOB.all_species[SPECIES_HUMAN]
|
||||
var/list/possible_genders = S.genders
|
||||
if(!pref.organ_data || pref.organ_data[BP_TORSO] != "cyborg")
|
||||
var/list/organ_data = pref.read_preference(/datum/preference/organ_data)
|
||||
if(!organ_data || organ_data[BP_TORSO] != "cyborg")
|
||||
return possible_genders
|
||||
possible_genders = possible_genders.Copy()
|
||||
possible_genders |= NEUTER
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
pref.alternate_languages = check_list_copy(save_data["language"])
|
||||
pref.extra_languages = save_data["extra_languages"]
|
||||
pref.language_prefixes = save_data["language_prefixes"]
|
||||
pref.species = save_data["species"]
|
||||
pref.preferred_language = save_data["preflang"]
|
||||
pref.language_custom_keys = check_list_copy(save_data["language_custom_keys"])
|
||||
pref.runechat_color = save_data["runechat_color"]
|
||||
@@ -32,10 +31,11 @@
|
||||
if(!islist(pref.alternate_languages))
|
||||
testing("LANGSANI: Sanitizing languages on [pref.client]'s character [char_name] because their character has no languages list")
|
||||
pref.alternate_languages = list()
|
||||
if(pref.species)
|
||||
var/datum/species/S = GLOB.all_species[pref.species]
|
||||
var/pref_species = pref.read_preference(/datum/preference/choiced/species)
|
||||
if(pref_species)
|
||||
var/datum/species/S = GLOB.all_species[pref_species]
|
||||
if(!istype(S))
|
||||
testing("LANGSANI: Failed sani on [pref.client]'s character [char_name] because their species ([pref.species]) isn't in the global list")
|
||||
testing("LANGSANI: Failed sani on [pref.client]'s character [char_name] because their species ([pref_species]) isn't in the global list")
|
||||
return
|
||||
|
||||
if(pref.alternate_languages.len > (S.num_alternate_languages + pref.extra_languages))
|
||||
@@ -62,7 +62,7 @@
|
||||
pref.language_prefixes -= prefix
|
||||
if(isnull(pref.language_custom_keys))
|
||||
pref.language_custom_keys = list()
|
||||
var/datum/species/S = GLOB.all_species[pref.species]
|
||||
var/datum/species/S = GLOB.all_species[pref.read_preference(/datum/preference/choiced/species)]
|
||||
for(var/key in pref.language_custom_keys)
|
||||
if(!pref.language_custom_keys[key])
|
||||
pref.language_custom_keys.Remove(key)
|
||||
@@ -76,7 +76,7 @@
|
||||
|
||||
var/list/languages_list = list()
|
||||
|
||||
var/datum/species/S = GLOB.all_species[pref.species]
|
||||
var/datum/species/S = GLOB.all_species[pref.read_preference(/datum/preference/choiced/species)]
|
||||
if(S.language)
|
||||
UNTYPED_LIST_ADD(languages_list, list(
|
||||
"name" = S.language,
|
||||
@@ -108,7 +108,7 @@
|
||||
return
|
||||
|
||||
var/mob/user = ui.user
|
||||
var/datum/species/S = GLOB.all_species[pref.species]
|
||||
var/datum/species/S = GLOB.all_species[pref.read_preference(/datum/preference/choiced/species)]
|
||||
|
||||
switch(action)
|
||||
if("remove_language")
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
|
||||
/datum/preferences/proc/get_available_styles(var/style_list)
|
||||
. = list("Normal" = null)
|
||||
var/pref_species = read_preference(/datum/preference/choiced/species)
|
||||
for(var/path in style_list)
|
||||
var/datum/sprite_accessory/instance = style_list[path]
|
||||
if(!istype(instance))
|
||||
@@ -58,7 +59,7 @@
|
||||
continue
|
||||
if(instance.ckeys_allowed && (!client || !(client.ckey in instance.ckeys_allowed)))
|
||||
continue
|
||||
if(instance.species_allowed && (!species || !(species in instance.species_allowed)) && (!client || !check_rights_for(client, R_ADMIN | R_EVENT | R_FUN)) && (!custom_base || !(custom_base in instance.species_allowed)))
|
||||
if(instance.species_allowed && (!pref_species || !(pref_species in instance.species_allowed)) && (!client || !check_rights_for(client, R_ADMIN | R_EVENT | R_FUN)) && (!custom_base || !(custom_base in instance.species_allowed)))
|
||||
continue
|
||||
if(!instance.can_be_selected && (!client || !check_rights_for(client, R_HOLDER)))
|
||||
continue
|
||||
@@ -79,14 +80,11 @@
|
||||
sort_order = 3
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/load_character(list/save_data)
|
||||
pref.species = save_data["species"]
|
||||
pref.s_tone = save_data["skin_tone"]
|
||||
pref.h_style = save_data["hair_style_name"]
|
||||
pref.f_style = save_data["facial_style_name"]
|
||||
pref.grad_style = save_data["grad_style_name"]
|
||||
pref.b_type = save_data["b_type"]
|
||||
pref.organ_data = check_list_copy(save_data["organ_data"])
|
||||
pref.rlimb_data = check_list_copy(save_data["rlimb_data"])
|
||||
pref.body_markings = check_list_copy(save_data["body_markings"])
|
||||
for(var/i in pref.body_markings)
|
||||
pref.body_markings[i] = check_list_copy(pref.body_markings[i])
|
||||
@@ -103,14 +101,11 @@
|
||||
pref.digitigrade = save_data["digitigrade"]
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/save_character(list/save_data)
|
||||
save_data["species"] = pref.species
|
||||
save_data["skin_tone"] = pref.s_tone
|
||||
save_data["hair_style_name"] = pref.h_style
|
||||
save_data["facial_style_name"] = pref.f_style
|
||||
save_data["grad_style_name"] = pref.grad_style
|
||||
save_data["b_type"] = pref.b_type
|
||||
save_data["organ_data"] = check_list_copy(pref.organ_data)
|
||||
save_data["rlimb_data"] = check_list_copy(pref.rlimb_data)
|
||||
var/list/body_markings = check_list_copy(pref.body_markings)
|
||||
for(var/i in pref.body_markings)
|
||||
body_markings[i] = check_list_copy(body_markings[i])
|
||||
@@ -128,28 +123,18 @@
|
||||
save_data["digitigrade"] = pref.digitigrade
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/sanitize_character()
|
||||
if(!pref.species || !(pref.species in GLOB.playable_species))
|
||||
pref.species = SPECIES_HUMAN
|
||||
pref.s_tone = sanitize_integer(pref.s_tone, -185, 34, initial(pref.s_tone))
|
||||
pref.h_style = sanitize_inlist(pref.h_style, GLOB.hair_styles_list, initial(pref.h_style))
|
||||
pref.f_style = sanitize_inlist(pref.f_style, GLOB.facial_hair_styles_list, initial(pref.f_style))
|
||||
pref.grad_style = sanitize_inlist(pref.grad_style, GLOB.hair_gradients, initial(pref.grad_style))
|
||||
pref.b_type = sanitize_text(pref.b_type, initial(pref.b_type))
|
||||
|
||||
if(!pref.organ_data) pref.organ_data = list()
|
||||
if(!pref.rlimb_data || !islist(pref.rlimb_data)) pref.rlimb_data = list()
|
||||
if(!pref.body_markings) pref.body_markings = list()
|
||||
else pref.body_markings &= GLOB.body_marking_styles_list
|
||||
for (var/M in pref.body_markings)
|
||||
if (!islist(pref.body_markings[M]))
|
||||
var/col = istext(pref.body_markings[M]) ? pref.body_markings[M] : "#000000"
|
||||
pref.body_markings[M] = pref.mass_edit_marking_list(M,color=col)
|
||||
for(var/limb in pref.rlimb_data)
|
||||
var/key = pref.rlimb_data[limb]
|
||||
if(!istext(key))
|
||||
pref.rlimb_data -= limb
|
||||
if(!LAZYACCESS(GLOB.all_robolimbs, key))
|
||||
pref.rlimb_data -= limb
|
||||
if(!pref.bgstate || !(pref.bgstate in pref.bgstate_options))
|
||||
pref.bgstate = "000"
|
||||
|
||||
@@ -198,7 +183,9 @@
|
||||
|
||||
character.set_gender(pref.read_preference(/datum/preference/choiced/gender/biological))
|
||||
|
||||
character.synthetic = pref.species == "Protean" ? GLOB.all_robolimbs["protean"] : null //Clear the existing var. (unless protean, then switch it to the normal protean limb)
|
||||
character.synthetic = pref.read_preference(/datum/preference/choiced/species) == "Protean" ? GLOB.all_robolimbs["protean"] : null //Clear the existing var. (unless protean, then switch it to the normal protean limb)
|
||||
var/list/pref_organ_data = pref.read_preference(/datum/preference/organ_data)
|
||||
var/list/pref_rlimb_data = pref.read_preference(/datum/preference/rlimb_data)
|
||||
var/list/organs_to_edit = list()
|
||||
for (var/name in list(BP_TORSO, BP_HEAD, BP_GROIN, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT))
|
||||
var/obj/item/organ/external/O = character.organs_by_name[name]
|
||||
@@ -209,19 +196,19 @@
|
||||
else
|
||||
organs_to_edit.Insert(x+(O.robotic == ORGAN_NANOFORM ? 1 : 0), name)
|
||||
for(var/name in organs_to_edit)
|
||||
var/status = pref.organ_data[name]
|
||||
var/status = pref_organ_data[name]
|
||||
var/obj/item/organ/external/O = character.organs_by_name[name]
|
||||
if(O)
|
||||
if(status == "amputated")
|
||||
O.remove_rejuv()
|
||||
else if(status == "cyborg")
|
||||
if(pref.rlimb_data[name])
|
||||
O.robotize(pref.rlimb_data[name])
|
||||
if(pref_rlimb_data[name])
|
||||
O.robotize(pref_rlimb_data[name])
|
||||
else
|
||||
O.robotize()
|
||||
|
||||
for(var/name in list(O_HEART,O_EYES,O_VOICE,O_LUNGS,O_LIVER,O_KIDNEYS,O_SPLEEN,O_STOMACH,O_INTESTINE,O_BRAIN))
|
||||
var/status = pref.organ_data[name]
|
||||
var/status = pref_organ_data[name]
|
||||
if(!status)
|
||||
continue
|
||||
var/obj/item/organ/I = character.internal_organs_by_name[name]
|
||||
@@ -256,31 +243,26 @@
|
||||
return mob_species && (mob_species.appearance_flags & flag)
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/proc/reset_limbs()
|
||||
for(var/organ in pref.organ_data)
|
||||
pref.organ_data[organ] = null
|
||||
while(null in pref.organ_data)
|
||||
pref.organ_data -= null
|
||||
|
||||
for(var/organ in pref.rlimb_data)
|
||||
pref.rlimb_data[organ] = null
|
||||
while(null in pref.rlimb_data)
|
||||
pref.rlimb_data -= null
|
||||
// Reset organ and robolimb data
|
||||
pref.write_preference(GLOB.preference_entries[/datum/preference/organ_data], list())
|
||||
pref.write_preference(GLOB.preference_entries[/datum/preference/rlimb_data], list())
|
||||
|
||||
// Sanitize the name so that there aren't any numbers sticking around.
|
||||
// Is this still necessary with TG conversation?
|
||||
var/pref_species = pref.read_preference(/datum/preference/choiced/species)
|
||||
var/current_name = pref.read_preference(/datum/preference/name/real_name)
|
||||
current_name = sanitize_name(current_name, pref.species)
|
||||
current_name = sanitize_name(current_name, pref_species)
|
||||
if(!current_name)
|
||||
current_name = random_name(pref.read_preference(/datum/preference/choiced/gender/identifying), pref.species)
|
||||
current_name = random_name(pref.read_preference(/datum/preference/choiced/gender/identifying), pref_species)
|
||||
pref.update_preference_by_type(/datum/preference/name/real_name, current_name)
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
|
||||
var/list/data = ..()
|
||||
|
||||
|
||||
data["species"] = pref.species
|
||||
data["organ_data"] = pref.organ_data
|
||||
data["rlimb_data"] = pref.rlimb_data
|
||||
data["species"] = pref.read_preference(/datum/preference/choiced/species)
|
||||
data["organ_data"] = pref.read_preference(/datum/preference/organ_data)
|
||||
data["rlimb_data"] = pref.read_preference(/datum/preference/rlimb_data)
|
||||
|
||||
data["s_tone"] = -pref.s_tone + 35
|
||||
data["eyes_color"] = pref.read_preference(/datum/preference/color/human/eyes_color)
|
||||
@@ -495,7 +477,7 @@
|
||||
if(.)
|
||||
return
|
||||
|
||||
var/datum/species/mob_species = GLOB.all_species[pref.species]
|
||||
var/datum/species/mob_species = GLOB.all_species[pref.read_preference(/datum/preference/choiced/species)]
|
||||
var/mob/user = ui.user
|
||||
|
||||
switch(action)
|
||||
@@ -753,9 +735,9 @@
|
||||
if(((!(setting_species.spawn_flags & SPECIES_CAN_JOIN)) || (!is_alien_whitelisted(user.client,setting_species))) && !check_rights(R_ADMIN|R_EVENT, 0) && !(setting_species.spawn_flags & SPECIES_WHITELIST_SELECTABLE))
|
||||
return TOPIC_NOACTION
|
||||
|
||||
var/prev_species = pref.species
|
||||
pref.species = params["species"]
|
||||
if(prev_species != pref.species)
|
||||
var/prev_species = pref.read_preference(/datum/preference/choiced/species)
|
||||
pref.update_preference_by_type(/datum/preference/choiced/species, params["species"])
|
||||
if(prev_species != pref.read_preference(/datum/preference/choiced/species))
|
||||
if(!(pref.read_preference(/datum/preference/choiced/gender/biological) in mob_species.genders))
|
||||
pref.set_biological_gender(mob_species.genders[1])
|
||||
pref.custom_species = null
|
||||
@@ -879,27 +861,35 @@
|
||||
|
||||
switch(new_state)
|
||||
if("Normal")
|
||||
pref.organ_data[limb] = null
|
||||
pref.rlimb_data[limb] = null
|
||||
var/list/organ_data = pref.read_preference(/datum/preference/organ_data)
|
||||
var/list/rlimb_data = pref.read_preference(/datum/preference/rlimb_data)
|
||||
organ_data[limb] = null
|
||||
rlimb_data[limb] = null
|
||||
if(limb == BP_TORSO) // depends on standardization
|
||||
for(var/other_limb in BP_ALL - BP_TORSO)
|
||||
pref.organ_data[other_limb] = null
|
||||
pref.rlimb_data[other_limb] = null
|
||||
organ_data[other_limb] = null
|
||||
rlimb_data[other_limb] = null
|
||||
for(var/internal in O_STANDARD)
|
||||
pref.organ_data[internal] = null
|
||||
pref.rlimb_data[internal] = null
|
||||
organ_data[internal] = null
|
||||
rlimb_data[internal] = null
|
||||
if(third_limb)
|
||||
pref.organ_data[third_limb] = null
|
||||
pref.rlimb_data[third_limb] = null
|
||||
organ_data[third_limb] = null
|
||||
rlimb_data[third_limb] = null
|
||||
pref.write_preference(GLOB.preference_entries[/datum/preference/organ_data], organ_data)
|
||||
pref.write_preference(GLOB.preference_entries[/datum/preference/rlimb_data], rlimb_data)
|
||||
|
||||
if("Amputated")
|
||||
if(limb == BP_TORSO) // depends on standardization
|
||||
return
|
||||
pref.organ_data[limb] = "amputated"
|
||||
pref.rlimb_data[limb] = null
|
||||
var/list/organ_data = pref.read_preference(/datum/preference/organ_data)
|
||||
var/list/rlimb_data = pref.read_preference(/datum/preference/rlimb_data)
|
||||
organ_data[limb] = "amputated"
|
||||
rlimb_data[limb] = null
|
||||
if(second_limb)
|
||||
pref.organ_data[second_limb] = "amputated"
|
||||
pref.rlimb_data[second_limb] = null
|
||||
organ_data[second_limb] = "amputated"
|
||||
rlimb_data[second_limb] = null
|
||||
pref.write_preference(GLOB.preference_entries[/datum/preference/organ_data], organ_data)
|
||||
pref.write_preference(GLOB.preference_entries[/datum/preference/rlimb_data], rlimb_data)
|
||||
|
||||
if("Prosthesis")
|
||||
var/list/usable_manufacturers = list()
|
||||
@@ -907,7 +897,7 @@
|
||||
var/datum/robolimb/M = GLOB.chargen_robolimbs[company]
|
||||
if(!(limb in M.parts))
|
||||
continue
|
||||
if(pref.species in M.species_cannot_use)
|
||||
if(pref.read_preference(/datum/preference/choiced/species) in M.species_cannot_use)
|
||||
continue
|
||||
if(M.whitelisted_to && !(user.ckey in M.whitelisted_to))
|
||||
continue
|
||||
@@ -918,25 +908,29 @@
|
||||
if(!choice)
|
||||
return
|
||||
|
||||
pref.rlimb_data[limb] = choice
|
||||
pref.organ_data[limb] = "cyborg"
|
||||
var/list/organ_data = pref.read_preference(/datum/preference/organ_data)
|
||||
var/list/rlimb_data = pref.read_preference(/datum/preference/rlimb_data)
|
||||
rlimb_data[limb] = choice
|
||||
organ_data[limb] = "cyborg"
|
||||
|
||||
if(second_limb)
|
||||
pref.rlimb_data[second_limb] = choice
|
||||
pref.organ_data[second_limb] = "cyborg"
|
||||
if(third_limb && pref.organ_data[third_limb] == "amputated")
|
||||
pref.organ_data[third_limb] = null
|
||||
rlimb_data[second_limb] = choice
|
||||
organ_data[second_limb] = "cyborg"
|
||||
if(third_limb && organ_data[third_limb] == "amputated")
|
||||
organ_data[third_limb] = null
|
||||
|
||||
if(limb == BP_TORSO)
|
||||
for(var/other_limb in BP_ALL - BP_TORSO)
|
||||
if(pref.organ_data[other_limb])
|
||||
if(organ_data[other_limb])
|
||||
continue
|
||||
pref.organ_data[other_limb] = "cyborg"
|
||||
pref.rlimb_data[other_limb] = choice
|
||||
if(!pref.organ_data[O_BRAIN])
|
||||
pref.organ_data[O_BRAIN] = FBP_ASSISTED
|
||||
organ_data[other_limb] = "cyborg"
|
||||
rlimb_data[other_limb] = choice
|
||||
if(!organ_data[O_BRAIN])
|
||||
organ_data[O_BRAIN] = FBP_ASSISTED
|
||||
for(var/internal_organ in list(O_HEART,O_EYES))
|
||||
pref.organ_data[internal_organ] = FBP_MECHANICAL
|
||||
organ_data[internal_organ] = FBP_MECHANICAL
|
||||
pref.write_preference(GLOB.preference_entries[/datum/preference/organ_data], organ_data)
|
||||
pref.write_preference(GLOB.preference_entries[/datum/preference/rlimb_data], rlimb_data)
|
||||
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
@@ -945,7 +939,8 @@
|
||||
if(!(zone in O_STANDARD))
|
||||
return
|
||||
|
||||
if(zone == O_BRAIN && pref.organ_data[BP_HEAD] != "cyborg")
|
||||
var/list/organ_data = pref.read_preference(/datum/preference/organ_data)
|
||||
if(zone == O_BRAIN && organ_data[BP_HEAD] != "cyborg")
|
||||
to_chat(user, span_warning("You may only select a cybernetic or synthetic brain if you have a full prosthetic body."))
|
||||
return
|
||||
|
||||
@@ -971,17 +966,18 @@
|
||||
|
||||
switch(new_state)
|
||||
if("Normal")
|
||||
pref.organ_data[zone] = null
|
||||
organ_data[zone] = null
|
||||
if("Assisted")
|
||||
pref.organ_data[zone] = FBP_ASSISTED
|
||||
organ_data[zone] = FBP_ASSISTED
|
||||
if("Cybernetic")
|
||||
pref.organ_data[zone] = FBP_ASSISTED
|
||||
organ_data[zone] = FBP_ASSISTED
|
||||
if("Mechanical")
|
||||
pref.organ_data[zone] = FBP_MECHANICAL
|
||||
organ_data[zone] = FBP_MECHANICAL
|
||||
if("Drone")
|
||||
pref.organ_data[zone] = FBP_DIGITAL
|
||||
organ_data[zone] = FBP_DIGITAL
|
||||
if("Positronic")
|
||||
pref.organ_data[zone] = FBP_MECHANICAL
|
||||
organ_data[zone] = FBP_MECHANICAL
|
||||
pref.write_preference(GLOB.preference_entries[/datum/preference/organ_data], organ_data)
|
||||
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
/datum/preferences/proc/get_custom_bases_for_species(var/new_species)
|
||||
if (!new_species)
|
||||
new_species = species
|
||||
new_species = read_preference(/datum/preference/choiced/species)
|
||||
var/list/choices
|
||||
var/datum/species/spec = GLOB.all_species[new_species]
|
||||
if (spec.selects_bodytype == SELECTS_BODYTYPE_SHAPESHIFTER)
|
||||
@@ -108,14 +108,15 @@
|
||||
pref.blood_reagents = sanitize_text(pref.blood_reagents, initial(pref.blood_reagents))
|
||||
|
||||
if(!pref.traits_cheating)
|
||||
var/datum/species/S = GLOB.all_species[pref.species]
|
||||
var/datum/species/S = GLOB.all_species[pref.read_preference(/datum/preference/choiced/species)]
|
||||
if(S)
|
||||
pref.starting_trait_points = S.trait_points
|
||||
else
|
||||
pref.starting_trait_points = 0
|
||||
pref.max_traits = MAX_SPECIES_TRAITS
|
||||
|
||||
if(pref.organ_data[O_BRAIN]) //Checking if we have a synth on our hands, boys.
|
||||
var/list/organ_data = pref.read_preference(/datum/preference/organ_data)
|
||||
if(organ_data && organ_data[O_BRAIN]) //Checking if we have a synth on our hands, boys.
|
||||
pref.dirty_synth = 1
|
||||
pref.gross_meatbag = 0
|
||||
else
|
||||
@@ -123,11 +124,12 @@
|
||||
pref.dirty_synth = 0
|
||||
|
||||
// Clean up positive traits
|
||||
var/pref_species = pref.read_preference(/datum/preference/choiced/species)
|
||||
for(var/datum/trait/path as anything in pref.pos_traits)
|
||||
if(!(path in GLOB.positive_traits))
|
||||
pref.pos_traits -= path
|
||||
continue
|
||||
if(!(pref.species == SPECIES_CUSTOM) && !(path in GLOB.everyone_traits_positive))
|
||||
if(!(pref_species == SPECIES_CUSTOM) && !(path in GLOB.everyone_traits_positive))
|
||||
pref.pos_traits -= path
|
||||
continue
|
||||
var/take_flags = initial(path.can_take)
|
||||
@@ -139,7 +141,7 @@
|
||||
log_world("removing [path] for not being in neutral_traits")
|
||||
pref.neu_traits -= path
|
||||
continue
|
||||
if(!(pref.species == SPECIES_CUSTOM) && !(path in GLOB.everyone_traits_neutral))
|
||||
if(!(pref_species == SPECIES_CUSTOM) && !(path in GLOB.everyone_traits_neutral))
|
||||
log_world("removing [path] for not being a custom species")
|
||||
pref.neu_traits -= path
|
||||
continue
|
||||
@@ -152,14 +154,14 @@
|
||||
if(!(path in GLOB.negative_traits))
|
||||
pref.neg_traits -= path
|
||||
continue
|
||||
if(!(pref.species == SPECIES_CUSTOM) && !(path in GLOB.everyone_traits_negative))
|
||||
if(!(pref_species == SPECIES_CUSTOM) && !(path in GLOB.everyone_traits_negative))
|
||||
pref.neg_traits -= path
|
||||
continue
|
||||
var/take_flags = initial(path.can_take)
|
||||
if((pref.dirty_synth && !(take_flags & SYNTHETICS)) || (pref.gross_meatbag && !(take_flags & ORGANICS)))
|
||||
pref.neg_traits -= path
|
||||
|
||||
var/datum/species/selected_species = GLOB.all_species[pref.species]
|
||||
var/datum/species/selected_species = GLOB.all_species[pref_species]
|
||||
if(selected_species.selects_bodytype)
|
||||
if (!(pref.custom_base in pref.get_custom_bases_for_species()))
|
||||
pref.custom_base = selected_species.default_custom_base
|
||||
@@ -193,7 +195,7 @@
|
||||
|
||||
new_S.species_sounds = species_sounds_to_copy // Now we send our sounds over to the mob
|
||||
|
||||
if(pref.species == SPECIES_CUSTOM)
|
||||
if(pref.read_preference(/datum/preference/choiced/species) == SPECIES_CUSTOM)
|
||||
//Statistics for this would be nice
|
||||
var/english_traits = english_list(new_S.traits, and_text = ";", comma_text = ";")
|
||||
log_game("TRAITS [pref.client_ckey]/([character]) with: [english_traits]") //Terrible 'fake' key_name()... but they aren't in the same entity yet
|
||||
@@ -201,7 +203,7 @@
|
||||
/datum/category_item/player_setup_item/general/traits/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
|
||||
var/list/data = ..()
|
||||
|
||||
var/datum/species/selected_species = GLOB.all_species[pref.species]
|
||||
var/datum/species/selected_species = GLOB.all_species[pref.read_preference(/datum/preference/choiced/species)]
|
||||
data["selects_bodytype"] = selected_species.selects_bodytype
|
||||
data["custom_base"] = pref.custom_base
|
||||
data["blood_color"] = pref.blood_color
|
||||
@@ -252,7 +254,7 @@
|
||||
pref.blood_color = sanitize_hexcolor(color_choice, default="#A10808")
|
||||
return TOPIC_REFRESH
|
||||
if("blood_reset")
|
||||
var/datum/species/spec = GLOB.all_species[pref.species]
|
||||
var/datum/species/spec = GLOB.all_species[pref.read_preference(/datum/preference/choiced/species)]
|
||||
var/new_blood = spec.blood_color ? spec.blood_color : "#A10808"
|
||||
var/choice = tgui_alert(user, "Reset blood color to species default ([new_blood])?","Reset Blood Color",list("Reset","Cancel"))
|
||||
if(choice == "Reset")
|
||||
@@ -295,23 +297,24 @@
|
||||
var/mode = text2num(params["add_trait"])
|
||||
var/list/picklist
|
||||
var/list/mylist
|
||||
var/pref_species_for_traits = pref.read_preference(/datum/preference/choiced/species)
|
||||
switch(mode)
|
||||
if(POSITIVE_MODE)
|
||||
if(pref.species == SPECIES_CUSTOM)
|
||||
if(pref_species_for_traits == SPECIES_CUSTOM)
|
||||
picklist = GLOB.positive_traits.Copy() - pref.pos_traits
|
||||
mylist = pref.pos_traits
|
||||
else
|
||||
picklist = GLOB.everyone_traits_positive.Copy() - pref.pos_traits
|
||||
mylist = pref.pos_traits
|
||||
if(NEUTRAL_MODE)
|
||||
if(pref.species == SPECIES_CUSTOM)
|
||||
if(pref_species_for_traits == SPECIES_CUSTOM)
|
||||
picklist = GLOB.neutral_traits.Copy() - pref.neu_traits
|
||||
mylist = pref.neu_traits
|
||||
else
|
||||
picklist = GLOB.everyone_traits_neutral.Copy() - pref.neu_traits
|
||||
mylist = pref.neu_traits
|
||||
if(NEGATIVE_MODE)
|
||||
if(pref.species == SPECIES_CUSTOM)
|
||||
if(pref_species_for_traits == SPECIES_CUSTOM)
|
||||
picklist = GLOB.negative_traits.Copy() - pref.neg_traits
|
||||
mylist = pref.neg_traits
|
||||
else
|
||||
@@ -375,11 +378,11 @@
|
||||
tgui_alert_async(user, "The trait you've selected can only be taken by synthetic characters!", "Error")
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if(pref.species in instance.banned_species)
|
||||
if(pref_species_for_traits in instance.banned_species)
|
||||
tgui_alert_async(user, "The trait you've selected cannot be taken by the species you've chosen!", "Error")
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if( LAZYLEN(instance.allowed_species) && !(pref.species in instance.allowed_species))
|
||||
if( LAZYLEN(instance.allowed_species) && !(pref_species_for_traits in instance.allowed_species))
|
||||
tgui_alert_async(user, "The trait you've selected cannot be taken by the species you've chosen!", "Error")
|
||||
return TOPIC_REFRESH
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
pref.nif_path = null //Kill!
|
||||
WARNING("Loaded a NIF but it was an invalid path, [char_name]")
|
||||
|
||||
if (ispath(pref.nif_path, /obj/item/nif/protean) && pref.species != SPECIES_PROTEAN) //no free nifs
|
||||
if (ispath(pref.nif_path, /obj/item/nif/protean) && pref.read_preference(/datum/preference/choiced/species) != SPECIES_PROTEAN) //no free nifs
|
||||
pref.nif_path = null
|
||||
|
||||
if(ispath(pref.nif_path) && isnull(pref.nif_durability)) //How'd you lose this?
|
||||
|
||||
Reference in New Issue
Block a user