diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index b711837232..73c5841ab9 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -91,6 +91,7 @@ //ambition end #define MAX_MESSAGE_LEN 4096 //Citadel edit: What's the WORST that could happen? #define MAX_FLAVOR_LEN 4096 +#define MAX_FLAVOR_PREVIEW_LEN 40 #define MAX_TASTE_LEN 40 //lick... vore... ew... #define MAX_NAME_LEN 42 #define MAX_BROADCAST_LEN 512 diff --git a/code/datums/elements/flavor_text.dm b/code/datums/elements/flavor_text.dm index 6217665157..02636997f8 100644 --- a/code/datums/elements/flavor_text.dm +++ b/code/datums/elements/flavor_text.dm @@ -76,10 +76,10 @@ GLOBAL_LIST_EMPTY(mobs_with_editable_flavor_text) //et tu, hacky code if(examine_full_view) examine_list += "[msg]" return - if(length_char(msg) <= 40) + if(length_char(msg) <= MAX_FLAVOR_PREVIEW_LEN) examine_list += "[msg]" else - examine_list += "[copytext_char(msg, 1, 37)]... More..." + examine_list += "[copytext_char(msg, 1, (MAX_FLAVOR_PREVIEW_LEN - 3))]... More..." /datum/element/flavor_text/Topic(href, href_list) . = ..() diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index c4733bcff9..707449e8c0 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -404,7 +404,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
" dat += "

Flavor Text

" dat += "Set Examine Text
" - if(length(features["flavor_text"]) <= 40) + if(length(features["flavor_text"]) <= MAX_FLAVOR_PREVIEW_LEN) if(!length(features["flavor_text"])) dat += "\[...\]" else @@ -413,7 +413,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "[TextPreview(features["flavor_text"])]...
" dat += "

Silicon Flavor Text

" dat += "Set Silicon Examine Text
" - if(length(features["silicon_flavor_text"]) <= 40) + if(length(features["silicon_flavor_text"]) <= MAX_FLAVOR_PREVIEW_LEN) if(!length(features["silicon_flavor_text"])) dat += "\[...\]" else @@ -423,7 +423,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

OOC notes

" dat += "Set OOC notes
" var/ooc_notes_len = length(features["ooc_notes"]) - if(ooc_notes_len <= 40) + if(ooc_notes_len <= MAX_FLAVOR_PREVIEW_LEN) if(!ooc_notes_len) dat += "\[...\]" else diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index a4fadb9b41..a60e1dc63c 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -5,7 +5,7 @@ // You do not need to raise this if you are adding new values that have sane defaults. // Only raise this value when changing the meaning/format/name/layout of an existing value // where you would want the updater procs below to run -#define SAVEFILE_VERSION_MAX 53 +#define SAVEFILE_VERSION_MAX 54 /* SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn @@ -72,15 +72,15 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/job_engsec_med = 0 var/job_engsec_low = 0 - S["job_civilian_high"] >> job_civilian_high - S["job_civilian_med"] >> job_civilian_med - S["job_civilian_low"] >> job_civilian_low - S["job_medsci_high"] >> job_medsci_high - S["job_medsci_med"] >> job_medsci_med - S["job_medsci_low"] >> job_medsci_low - S["job_engsec_high"] >> job_engsec_high - S["job_engsec_med"] >> job_engsec_med - S["job_engsec_low"] >> job_engsec_low + S["job_civilian_high"] >> job_civilian_high + S["job_civilian_med"] >> job_civilian_med + S["job_civilian_low"] >> job_civilian_low + S["job_medsci_high"] >> job_medsci_high + S["job_medsci_med"] >> job_medsci_med + S["job_medsci_low"] >> job_medsci_low + S["job_engsec_high"] >> job_engsec_high + S["job_engsec_med"] >> job_engsec_med + S["job_engsec_low"] >> job_engsec_low //Can't use SSjob here since this happens right away on login for(var/job in subtypesof(/datum/job)) @@ -173,10 +173,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/devourable var/feeding var/lickable - S["digestable"] >> digestable - S["devourable"] >> devourable - S["feeding"] >> feeding - S["lickable"] >> lickable + S["digestable"] >> digestable + S["devourable"] >> devourable + S["feeding"] >> feeding + S["lickable"] >> lickable if(digestable) vore_flags |= DIGESTABLE if(devourable) @@ -196,8 +196,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car features["taur"] = "Cow (Spotted)" if(current_version < 31) - S["wing_color"] >> features["wings_color"] - S["horn_color"] >> features["horns_color"] + S["wing_color"] >> features["wings_color"] + S["horn_color"] >> features["horns_color"] if(current_version < 33) features["flavor_text"] = html_encode(features["flavor_text"]) @@ -346,6 +346,16 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(current_version < 53) parallax = PARALLAX_INSANE + // Some genius decided to make features update on the loading part, go figure. + if(current_version < 54) + var/old_silicon_flavor = S["silicon_feature_flavor_text"] + if(length(old_silicon_flavor)) + features["feature_silicon_flavor_text"] = old_silicon_flavor + var/old_flavor_text = S["flavor_text"] + // If they have the old flavor text but also have the new one, i suppose the new one is more important. + if(length(old_flavor_text) && !length(features["feature_flavor_text"])) + features["feature_flavor_text"] = old_flavor_text + /datum/preferences/proc/load_path(ckey,filename="preferences.sav") if(!ckey) return @@ -380,70 +390,70 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car . = TRUE //general preferences - S["ooccolor"] >> ooccolor - S["lastchangelog"] >> lastchangelog - S["UI_style"] >> UI_style - S["outline_color"] >> outline_color - S["outline_enabled"] >> outline_enabled - S["screentip_pref"] >> screentip_pref - S["screentip_color"] >> screentip_color - S["hotkeys"] >> hotkeys - S["chat_on_map"] >> chat_on_map - S["max_chat_length"] >> max_chat_length + S["ooccolor"] >> ooccolor + S["lastchangelog"] >> lastchangelog + S["UI_style"] >> UI_style + S["outline_color"] >> outline_color + S["outline_enabled"] >> outline_enabled + S["screentip_pref"] >> screentip_pref + S["screentip_color"] >> screentip_color + S["hotkeys"] >> hotkeys + S["chat_on_map"] >> chat_on_map + S["max_chat_length"] >> max_chat_length S["see_chat_non_mob"] >> see_chat_non_mob - S["tgui_fancy"] >> tgui_fancy - S["tgui_lock"] >> tgui_lock - S["buttons_locked"] >> buttons_locked - S["windowflash"] >> windowflashing + S["tgui_fancy"] >> tgui_fancy + S["tgui_lock"] >> tgui_lock + S["buttons_locked"] >> buttons_locked + S["windowflash"] >> windowflashing S["be_special"] >> be_special - S["default_slot"] >> default_slot - S["chat_toggles"] >> chat_toggles - S["toggles"] >> toggles - S["deadmin"] >> deadmin - S["ghost_form"] >> ghost_form - S["ghost_orbit"] >> ghost_orbit - S["ghost_accs"] >> ghost_accs - S["ghost_others"] >> ghost_others - S["preferred_map"] >> preferred_map - S["ignoring"] >> ignoring - S["ghost_hud"] >> ghost_hud - S["inquisitive_ghost"] >> inquisitive_ghost + S["default_slot"] >> default_slot + S["chat_toggles"] >> chat_toggles + S["toggles"] >> toggles + S["deadmin"] >> deadmin + S["ghost_form"] >> ghost_form + S["ghost_orbit"] >> ghost_orbit + S["ghost_accs"] >> ghost_accs + S["ghost_others"] >> ghost_others + S["preferred_map"] >> preferred_map + S["ignoring"] >> ignoring + S["ghost_hud"] >> ghost_hud + S["inquisitive_ghost"] >> inquisitive_ghost S["uses_glasses_colour"]>> uses_glasses_colour - S["clientfps"] >> clientfps - S["parallax"] >> parallax - S["ambientocclusion"] >> ambientocclusion - S["auto_fit_viewport"] >> auto_fit_viewport - S["widescreenpref"] >> widescreenpref - S["long_strip_menu"] >> long_strip_menu + S["clientfps"] >> clientfps + S["parallax"] >> parallax + S["ambientocclusion"] >> ambientocclusion + S["auto_fit_viewport"] >> auto_fit_viewport + S["widescreenpref"] >> widescreenpref + S["long_strip_menu"] >> long_strip_menu S["pixel_size"] >> pixel_size S["scaling_method"] >> scaling_method - S["hud_toggle_flash"] >> hud_toggle_flash - S["hud_toggle_color"] >> hud_toggle_color - S["menuoptions"] >> menuoptions - S["enable_tips"] >> enable_tips - S["tip_delay"] >> tip_delay - S["pda_style"] >> pda_style - S["pda_color"] >> pda_color - S["pda_skin"] >> pda_skin + S["hud_toggle_flash"] >> hud_toggle_flash + S["hud_toggle_color"] >> hud_toggle_color + S["menuoptions"] >> menuoptions + S["enable_tips"] >> enable_tips + S["tip_delay"] >> tip_delay + S["pda_style"] >> pda_style + S["pda_color"] >> pda_color + S["pda_skin"] >> pda_skin // Custom hotkeys - S["key_bindings"] >> key_bindings - S["modless_key_bindings"] >> modless_key_bindings + S["key_bindings"] >> key_bindings + S["modless_key_bindings"] >> modless_key_bindings //citadel code - S["arousable"] >> arousable - S["screenshake"] >> screenshake - S["damagescreenshake"] >> damagescreenshake - S["autostand"] >> autostand - S["cit_toggles"] >> cit_toggles - S["preferred_chaos"] >> preferred_chaos - S["auto_ooc"] >> auto_ooc - S["no_tetris_storage"] >> no_tetris_storage + S["arousable"] >> arousable + S["screenshake"] >> screenshake + S["damagescreenshake"] >> damagescreenshake + S["autostand"] >> autostand + S["cit_toggles"] >> cit_toggles + S["preferred_chaos"] >> preferred_chaos + S["auto_ooc"] >> auto_ooc + S["no_tetris_storage"] >> no_tetris_storage //favorite outfits - S["favorite_outfits"] >> favorite_outfits + S["favorite_outfits"] >> favorite_outfits var/list/parsed_favs = list() for(var/typetext in favorite_outfits) @@ -461,47 +471,47 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car update_preferences(needs_update, S) //needs_update = savefile_version if we need an update (positive integer) //Sanitize - ooccolor = sanitize_ooccolor(sanitize_hexcolor(ooccolor, 6, 1, initial(ooccolor))) - lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog)) - UI_style = sanitize_inlist(UI_style, GLOB.available_ui_styles, GLOB.available_ui_styles[1]) - hotkeys = sanitize_integer(hotkeys, 0, 1, initial(hotkeys)) - chat_on_map = sanitize_integer(chat_on_map, 0, 1, initial(chat_on_map)) + ooccolor = sanitize_ooccolor(sanitize_hexcolor(ooccolor, 6, 1, initial(ooccolor))) + lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog)) + UI_style = sanitize_inlist(UI_style, GLOB.available_ui_styles, GLOB.available_ui_styles[1]) + hotkeys = sanitize_integer(hotkeys, 0, 1, initial(hotkeys)) + chat_on_map = sanitize_integer(chat_on_map, 0, 1, initial(chat_on_map)) max_chat_length = sanitize_integer(max_chat_length, 1, CHAT_MESSAGE_MAX_LENGTH, initial(max_chat_length)) - see_chat_non_mob = sanitize_integer(see_chat_non_mob, 0, 1, initial(see_chat_non_mob)) - tgui_fancy = sanitize_integer(tgui_fancy, 0, 1, initial(tgui_fancy)) - tgui_lock = sanitize_integer(tgui_lock, 0, 1, initial(tgui_lock)) - buttons_locked = sanitize_integer(buttons_locked, 0, 1, initial(buttons_locked)) - windowflashing = sanitize_integer(windowflashing, 0, 1, initial(windowflashing)) - default_slot = sanitize_integer(default_slot, 1, max_save_slots, initial(default_slot)) - toggles = sanitize_integer(toggles, 0, 16777215, initial(toggles)) - deadmin = sanitize_integer(deadmin, 0, 16777215, initial(deadmin)) - clientfps = sanitize_integer(clientfps, 0, 1000, 0) - parallax = sanitize_integer(parallax, PARALLAX_DISABLE, PARALLAX_INSANE, null) - ambientocclusion = sanitize_integer(ambientocclusion, 0, 1, initial(ambientocclusion)) - auto_fit_viewport = sanitize_integer(auto_fit_viewport, 0, 1, initial(auto_fit_viewport)) - widescreenpref = sanitize_integer(widescreenpref, 0, 1, initial(widescreenpref)) - long_strip_menu = sanitize_integer(long_strip_menu, 0, 1, initial(long_strip_menu)) - pixel_size = sanitize_integer(pixel_size, PIXEL_SCALING_AUTO, PIXEL_SCALING_3X, initial(pixel_size)) - scaling_method = sanitize_text(scaling_method, initial(scaling_method)) + see_chat_non_mob = sanitize_integer(see_chat_non_mob, 0, 1, initial(see_chat_non_mob)) + tgui_fancy = sanitize_integer(tgui_fancy, 0, 1, initial(tgui_fancy)) + tgui_lock = sanitize_integer(tgui_lock, 0, 1, initial(tgui_lock)) + buttons_locked = sanitize_integer(buttons_locked, 0, 1, initial(buttons_locked)) + windowflashing = sanitize_integer(windowflashing, 0, 1, initial(windowflashing)) + default_slot = sanitize_integer(default_slot, 1, max_save_slots, initial(default_slot)) + toggles = sanitize_integer(toggles, 0, 16777215, initial(toggles)) + deadmin = sanitize_integer(deadmin, 0, 16777215, initial(deadmin)) + clientfps = sanitize_integer(clientfps, 0, 1000, 0) + parallax = sanitize_integer(parallax, PARALLAX_DISABLE, PARALLAX_INSANE, null) + ambientocclusion = sanitize_integer(ambientocclusion, 0, 1, initial(ambientocclusion)) + auto_fit_viewport = sanitize_integer(auto_fit_viewport, 0, 1, initial(auto_fit_viewport)) + widescreenpref = sanitize_integer(widescreenpref, 0, 1, initial(widescreenpref)) + long_strip_menu = sanitize_integer(long_strip_menu, 0, 1, initial(long_strip_menu)) + pixel_size = sanitize_integer(pixel_size, PIXEL_SCALING_AUTO, PIXEL_SCALING_3X, initial(pixel_size)) + scaling_method = sanitize_text(scaling_method, initial(scaling_method)) hud_toggle_flash = sanitize_integer(hud_toggle_flash, 0, 1, initial(hud_toggle_flash)) hud_toggle_color = sanitize_hexcolor(hud_toggle_color, 6, 1, initial(hud_toggle_color)) - ghost_form = sanitize_inlist(ghost_form, GLOB.ghost_forms, initial(ghost_form)) - ghost_orbit = sanitize_inlist(ghost_orbit, GLOB.ghost_orbits, initial(ghost_orbit)) - ghost_accs = sanitize_inlist(ghost_accs, GLOB.ghost_accs_options, GHOST_ACCS_DEFAULT_OPTION) - ghost_others = sanitize_inlist(ghost_others, GLOB.ghost_others_options, GHOST_OTHERS_DEFAULT_OPTION) - menuoptions = SANITIZE_LIST(menuoptions) - be_special = SANITIZE_LIST(be_special) - pda_style = sanitize_inlist(pda_style, GLOB.pda_styles, initial(pda_style)) - pda_color = sanitize_hexcolor(pda_color, 6, 1, initial(pda_color)) - pda_skin = sanitize_inlist(pda_skin, GLOB.pda_reskins, PDA_SKIN_ALT) - screenshake = sanitize_integer(screenshake, 0, 800, initial(screenshake)) - damagescreenshake = sanitize_integer(damagescreenshake, 0, 2, initial(damagescreenshake)) - autostand = sanitize_integer(autostand, 0, 1, initial(autostand)) - cit_toggles = sanitize_integer(cit_toggles, 0, 16777215, initial(cit_toggles)) - auto_ooc = sanitize_integer(auto_ooc, 0, 1, initial(auto_ooc)) - no_tetris_storage = sanitize_integer(no_tetris_storage, 0, 1, initial(no_tetris_storage)) - key_bindings = sanitize_islist(key_bindings, list()) - modless_key_bindings = sanitize_islist(modless_key_bindings, list()) + ghost_form = sanitize_inlist(ghost_form, GLOB.ghost_forms, initial(ghost_form)) + ghost_orbit = sanitize_inlist(ghost_orbit, GLOB.ghost_orbits, initial(ghost_orbit)) + ghost_accs = sanitize_inlist(ghost_accs, GLOB.ghost_accs_options, GHOST_ACCS_DEFAULT_OPTION) + ghost_others = sanitize_inlist(ghost_others, GLOB.ghost_others_options, GHOST_OTHERS_DEFAULT_OPTION) + menuoptions = SANITIZE_LIST(menuoptions) + be_special = SANITIZE_LIST(be_special) + pda_style = sanitize_inlist(pda_style, GLOB.pda_styles, initial(pda_style)) + pda_color = sanitize_hexcolor(pda_color, 6, 1, initial(pda_color)) + pda_skin = sanitize_inlist(pda_skin, GLOB.pda_reskins, PDA_SKIN_ALT) + screenshake = sanitize_integer(screenshake, 0, 800, initial(screenshake)) + damagescreenshake = sanitize_integer(damagescreenshake, 0, 2, initial(damagescreenshake)) + autostand = sanitize_integer(autostand, 0, 1, initial(autostand)) + cit_toggles = sanitize_integer(cit_toggles, 0, 16777215, initial(cit_toggles)) + auto_ooc = sanitize_integer(auto_ooc, 0, 1, initial(auto_ooc)) + no_tetris_storage = sanitize_integer(no_tetris_storage, 0, 1, initial(no_tetris_storage)) + key_bindings = sanitize_islist(key_bindings, list()) + modless_key_bindings = sanitize_islist(modless_key_bindings, list()) favorite_outfits = SANITIZE_LIST(favorite_outfits) verify_keybindings_valid() // one of these days this will runtime and you'll be glad that i put it in a different proc so no one gets their saves wiped @@ -663,7 +673,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //Species var/species_id - S["species"] >> species_id + S["species"] >> species_id if(species_id) if(species_id == "avian" || species_id == "aquatic") species_id = "mammal" @@ -678,63 +688,63 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car scars_index = rand(1,5) // WHY //Character - S["real_name"] >> real_name - S["nameless"] >> nameless - S["custom_species"] >> custom_species - S["name_is_always_random"] >> be_random_name - S["body_is_always_random"] >> be_random_body - S["gender"] >> gender - S["body_model"] >> features["body_model"] - S["body_size"] >> features["body_size"] - S["age"] >> age - S["hair_color"] >> hair_color - S["facial_hair_color"] >> facial_hair_color - S["eye_type"] >> eye_type - S["left_eye_color"] >> left_eye_color - S["right_eye_color"] >> right_eye_color - S["use_custom_skin_tone"] >> use_custom_skin_tone - S["skin_tone"] >> skin_tone - S["hair_style_name"] >> hair_style - S["facial_style_name"] >> facial_hair_style - S["grad_style"] >> grad_style - S["grad_color"] >> grad_color - S["underwear"] >> underwear - S["undie_color"] >> undie_color - S["undershirt"] >> undershirt - S["shirt_color"] >> shirt_color - S["socks"] >> socks - S["socks_color"] >> socks_color - S["backbag"] >> backbag - S["jumpsuit_style"] >> jumpsuit_style - S["uplink_loc"] >> uplink_spawn_loc - S["custom_speech_verb"] >> custom_speech_verb - S["custom_tongue"] >> custom_tongue - S["additional_language"] >> additional_language - S["feature_mcolor"] >> features["mcolor"] - S["feature_lizard_tail"] >> features["tail_lizard"] - S["feature_lizard_snout"] >> features["snout"] - S["feature_lizard_horns"] >> features["horns"] - S["feature_lizard_frills"] >> features["frills"] - S["feature_lizard_spines"] >> features["spines"] - S["feature_lizard_legs"] >> features["legs"] - S["feature_human_tail"] >> features["tail_human"] - S["feature_human_ears"] >> features["ears"] - S["feature_deco_wings"] >> features["deco_wings"] - S["feature_insect_wings"] >> features["insect_wings"] - S["feature_insect_fluff"] >> features["insect_fluff"] - S["feature_insect_markings"] >> features["insect_markings"] - S["feature_arachnid_legs"] >> features["arachnid_legs"] - S["feature_arachnid_spinneret"] >> features["arachnid_spinneret"] - S["feature_arachnid_mandibles"] >> features["arachnid_mandibles"] - S["feature_horns_color"] >> features["horns_color"] - S["feature_wings_color"] >> features["wings_color"] - S["feature_color_scheme"] >> features["color_scheme"] + S["real_name"] >> real_name + S["nameless"] >> nameless + S["custom_species"] >> custom_species + S["name_is_always_random"] >> be_random_name + S["body_is_always_random"] >> be_random_body + S["gender"] >> gender + S["body_model"] >> features["body_model"] + S["body_size"] >> features["body_size"] + S["age"] >> age + S["hair_color"] >> hair_color + S["facial_hair_color"] >> facial_hair_color + S["eye_type"] >> eye_type + S["left_eye_color"] >> left_eye_color + S["right_eye_color"] >> right_eye_color + S["use_custom_skin_tone"] >> use_custom_skin_tone + S["skin_tone"] >> skin_tone + S["hair_style_name"] >> hair_style + S["facial_style_name"] >> facial_hair_style + S["grad_style"] >> grad_style + S["grad_color"] >> grad_color + S["underwear"] >> underwear + S["undie_color"] >> undie_color + S["undershirt"] >> undershirt + S["shirt_color"] >> shirt_color + S["socks"] >> socks + S["socks_color"] >> socks_color + S["backbag"] >> backbag + S["jumpsuit_style"] >> jumpsuit_style + S["uplink_loc"] >> uplink_spawn_loc + S["custom_speech_verb"] >> custom_speech_verb + S["custom_tongue"] >> custom_tongue + S["additional_language"] >> additional_language + S["feature_mcolor"] >> features["mcolor"] + S["feature_lizard_tail"] >> features["tail_lizard"] + S["feature_lizard_snout"] >> features["snout"] + S["feature_lizard_horns"] >> features["horns"] + S["feature_lizard_frills"] >> features["frills"] + S["feature_lizard_spines"] >> features["spines"] + S["feature_lizard_legs"] >> features["legs"] + S["feature_human_tail"] >> features["tail_human"] + S["feature_human_ears"] >> features["ears"] + S["feature_deco_wings"] >> features["deco_wings"] + S["feature_insect_wings"] >> features["insect_wings"] + S["feature_insect_fluff"] >> features["insect_fluff"] + S["feature_insect_markings"] >> features["insect_markings"] + S["feature_arachnid_legs"] >> features["arachnid_legs"] + S["feature_arachnid_spinneret"] >> features["arachnid_spinneret"] + S["feature_arachnid_mandibles"] >> features["arachnid_mandibles"] + S["feature_horns_color"] >> features["horns_color"] + S["feature_wings_color"] >> features["wings_color"] + S["feature_color_scheme"] >> features["color_scheme"] S["persistent_scars"] >> persistent_scars - S["scars1"] >> scars_list["1"] - S["scars2"] >> scars_list["2"] - S["scars3"] >> scars_list["3"] - S["scars4"] >> scars_list["4"] - S["scars5"] >> scars_list["5"] + S["scars1"] >> scars_list["1"] + S["scars2"] >> scars_list["2"] + S["scars3"] >> scars_list["3"] + S["scars4"] >> scars_list["4"] + S["scars5"] >> scars_list["5"] var/limbmodstr S["modified_limbs"] >> limbmodstr if(length(limbmodstr)) @@ -756,100 +766,88 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car else tcg_decks = list() - S["chosen_limb_id"] >> chosen_limb_id - S["hide_ckey"] >> hide_ckey //saved per-character + S["chosen_limb_id"] >> chosen_limb_id + S["hide_ckey"] >> hide_ckey //saved per-character //Custom names for(var/custom_name_id in GLOB.preferences_custom_names) var/savefile_slot_name = custom_name_id + "_name" //TODO remove this S[savefile_slot_name] >> custom_names[custom_name_id] - S["preferred_ai_core_display"] >> preferred_ai_core_display - S["prefered_security_department"] >> prefered_security_department + S["preferred_ai_core_display"] >> preferred_ai_core_display + S["prefered_security_department"] >> prefered_security_department //Jobs - S["joblessrole"] >> joblessrole + S["joblessrole"] >> joblessrole //Load prefs - S["job_preferences"] >> job_preferences + S["job_preferences"] >> job_preferences //Quirks - S["all_quirks"] >> all_quirks + S["all_quirks"] >> all_quirks //Records - S["security_records"] >> security_records - S["medical_records"] >> medical_records + S["security_records"] >> security_records + S["medical_records"] >> medical_records //Citadel code - S["feature_genitals_use_skintone"] >> features["genitals_use_skintone"] - S["feature_mcolor2"] >> features["mcolor2"] - S["feature_mcolor3"] >> features["mcolor3"] + S["feature_genitals_use_skintone"] >> features["genitals_use_skintone"] + S["feature_mcolor2"] >> features["mcolor2"] + S["feature_mcolor3"] >> features["mcolor3"] // note safe json decode will runtime the first time it migrates but this is fine and it solves itself don't worry about it if you see it error features["mam_body_markings"] = safe_json_decode(S["feature_mam_body_markings"]) - S["feature_mam_tail"] >> features["mam_tail"] - S["feature_mam_ears"] >> features["mam_ears"] - S["feature_mam_tail_animated"] >> features["mam_tail_animated"] - S["feature_taur"] >> features["taur"] - S["feature_mam_snouts"] >> features["mam_snouts"] - S["feature_meat"] >> features["meat_type"] + S["feature_mam_tail"] >> features["mam_tail"] + S["feature_mam_ears"] >> features["mam_ears"] + S["feature_mam_tail_animated"] >> features["mam_tail_animated"] + S["feature_taur"] >> features["taur"] + S["feature_mam_snouts"] >> features["mam_snouts"] + S["feature_meat"] >> features["meat_type"] //Xeno features - S["feature_xeno_tail"] >> features["xenotail"] - S["feature_xeno_dors"] >> features["xenodorsal"] - S["feature_xeno_head"] >> features["xenohead"] + S["feature_xeno_tail"] >> features["xenotail"] + S["feature_xeno_dors"] >> features["xenodorsal"] + S["feature_xeno_head"] >> features["xenohead"] //cock features - S["feature_has_cock"] >> features["has_cock"] - S["feature_cock_shape"] >> features["cock_shape"] - S["feature_cock_color"] >> features["cock_color"] - S["feature_cock_length"] >> features["cock_length"] - S["feature_cock_diameter"] >> features["cock_diameter"] - S["feature_cock_taur"] >> features["cock_taur"] - S["feature_cock_visibility"] >> features["cock_visibility"] + S["feature_has_cock"] >> features["has_cock"] + S["feature_cock_shape"] >> features["cock_shape"] + S["feature_cock_color"] >> features["cock_color"] + S["feature_cock_length"] >> features["cock_length"] + S["feature_cock_diameter"] >> features["cock_diameter"] + S["feature_cock_taur"] >> features["cock_taur"] + S["feature_cock_visibility"] >> features["cock_visibility"] //balls features - S["feature_has_balls"] >> features["has_balls"] - S["feature_balls_color"] >> features["balls_color"] - S["feature_balls_shape"] >> features["balls_shape"] - S["feature_balls_size"] >> features["balls_size"] - S["feature_balls_visibility"] >> features["balls_visibility"] + S["feature_has_balls"] >> features["has_balls"] + S["feature_balls_color"] >> features["balls_color"] + S["feature_balls_shape"] >> features["balls_shape"] + S["feature_balls_size"] >> features["balls_size"] + S["feature_balls_visibility"] >> features["balls_visibility"] //breasts features - S["feature_has_breasts"] >> features["has_breasts"] - S["feature_breasts_size"] >> features["breasts_size"] - S["feature_breasts_shape"] >> features["breasts_shape"] - S["feature_breasts_color"] >> features["breasts_color"] - S["feature_breasts_producing"] >> features["breasts_producing"] - S["feature_breasts_visibility"] >> features["breasts_visibility"] + S["feature_has_breasts"] >> features["has_breasts"] + S["feature_breasts_size"] >> features["breasts_size"] + S["feature_breasts_shape"] >> features["breasts_shape"] + S["feature_breasts_color"] >> features["breasts_color"] + S["feature_breasts_producing"] >> features["breasts_producing"] + S["feature_breasts_visibility"] >> features["breasts_visibility"] //vagina features - S["feature_has_vag"] >> features["has_vag"] - S["feature_vag_shape"] >> features["vag_shape"] - S["feature_vag_color"] >> features["vag_color"] - S["feature_vag_visibility"] >> features["vag_visibility"] + S["feature_has_vag"] >> features["has_vag"] + S["feature_vag_shape"] >> features["vag_shape"] + S["feature_vag_color"] >> features["vag_color"] + S["feature_vag_visibility"] >> features["vag_visibility"] //womb features - S["feature_has_womb"] >> features["has_womb"] + S["feature_has_womb"] >> features["has_womb"] //butt features - S["feature_has_butt"] >> features["has_butt"] - S["feature_butt_color"] >> features["butt_color"] - S["feature_butt_size"] >> features["butt_size"] - S["feature_butt_visibility"] >> features["butt_visibility"] + S["feature_has_butt"] >> features["has_butt"] + S["feature_butt_color"] >> features["butt_color"] + S["feature_butt_size"] >> features["butt_size"] + S["feature_butt_visibility"] >> features["butt_visibility"] - //flavor text - //Let's make our players NOT cry desperately as we wipe their savefiles of their special snowflake texts: - if((S["flavor_text"] != "") && (S["flavor_text"] != null) && S["flavor_text"]) //If old text isn't null and isn't "" but still exists. - S["flavor_text"] >> features["flavor_text"] //Load old flavortext as current dna-based flavortext + // Flavor texts, Made into a standard. + S["feature_flavor_text"] >> features["flavor_text"] + S["feature_silicon_flavor_text"] >> features["silicon_flavor_text"] + S["feature_ooc_notes"] >> features["ooc_notes"] - WRITE_FILE(S["feature_flavor_text"], features["flavor_text"]) //Save it in our new type of flavor-text - WRITE_FILE(S["flavor_text"] , "") //Remove old flavortext, completing the cut-and-paste into the new format. - - else //We have no old flavortext, default to new - S["feature_flavor_text"] >> features["flavor_text"] - - - S["silicon_feature_flavor_text"] >> features["silicon_flavor_text"] - - S["feature_ooc_notes"] >> features["ooc_notes"] - S["silicon_flavor_text"] >> features["silicon_flavor_text"] - - S["vore_flags"] >> vore_flags - S["vore_taste"] >> vore_taste - S["vore_smell"] >> vore_smell + S["vore_flags"] >> vore_flags + S["vore_taste"] >> vore_taste + S["vore_smell"] >> vore_smell var/char_vr_path = "[vr_path]/character_[default_slot]_v2.json" if(fexists(char_vr_path)) var/list/json_from_file = json_decode(file2text(char_vr_path)) @@ -869,69 +867,69 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //Sanitize - real_name = reject_bad_name(real_name) - gender = sanitize_gender(gender, TRUE, TRUE) + real_name = reject_bad_name(real_name) + gender = sanitize_gender(gender, TRUE, TRUE) features["body_model"] = sanitize_gender(features["body_model"], FALSE, FALSE, gender == FEMALE ? FEMALE : MALE) if(!real_name) - real_name = random_unique_name(gender) - custom_species = reject_bad_name(custom_species) + real_name = random_unique_name(gender) + custom_species = reject_bad_name(custom_species) for(var/custom_name_id in GLOB.preferences_custom_names) var/namedata = GLOB.preferences_custom_names[custom_name_id] custom_names[custom_name_id] = reject_bad_name(custom_names[custom_name_id],namedata["allow_numbers"]) if(!custom_names[custom_name_id]) custom_names[custom_name_id] = get_default_name(custom_name_id) - nameless = sanitize_integer(nameless, 0, 1, initial(nameless)) - be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name)) - be_random_body = sanitize_integer(be_random_body, 0, 1, initial(be_random_body)) + nameless = sanitize_integer(nameless, 0, 1, initial(nameless)) + be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name)) + be_random_body = sanitize_integer(be_random_body, 0, 1, initial(be_random_body)) - hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_list) - facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_list) - underwear = sanitize_inlist(underwear, GLOB.underwear_list) - undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list) - undie_color = sanitize_hexcolor(undie_color, 6, FALSE, initial(undie_color)) - shirt_color = sanitize_hexcolor(shirt_color, 6, FALSE, initial(shirt_color)) - socks = sanitize_inlist(socks, GLOB.socks_list) - socks_color = sanitize_hexcolor(socks_color, 6, FALSE, initial(socks_color)) - age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age)) - hair_color = sanitize_hexcolor(hair_color, 6, FALSE) - facial_hair_color = sanitize_hexcolor(facial_hair_color, 6, FALSE) - grad_style = sanitize_inlist(grad_style, GLOB.hair_gradients_list, "None") - grad_color = sanitize_hexcolor(grad_color, 6, FALSE) - eye_type = sanitize_inlist(eye_type, GLOB.eye_types, DEFAULT_EYES_TYPE) - left_eye_color = sanitize_hexcolor(left_eye_color, 6, FALSE) - right_eye_color = sanitize_hexcolor(right_eye_color, 6, FALSE) + hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_list) + facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_list) + underwear = sanitize_inlist(underwear, GLOB.underwear_list) + undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list) + undie_color = sanitize_hexcolor(undie_color, 6, FALSE, initial(undie_color)) + shirt_color = sanitize_hexcolor(shirt_color, 6, FALSE, initial(shirt_color)) + socks = sanitize_inlist(socks, GLOB.socks_list) + socks_color = sanitize_hexcolor(socks_color, 6, FALSE, initial(socks_color)) + age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age)) + hair_color = sanitize_hexcolor(hair_color, 6, FALSE) + facial_hair_color = sanitize_hexcolor(facial_hair_color, 6, FALSE) + grad_style = sanitize_inlist(grad_style, GLOB.hair_gradients_list, "None") + grad_color = sanitize_hexcolor(grad_color, 6, FALSE) + eye_type = sanitize_inlist(eye_type, GLOB.eye_types, DEFAULT_EYES_TYPE) + left_eye_color = sanitize_hexcolor(left_eye_color, 6, FALSE) + right_eye_color = sanitize_hexcolor(right_eye_color, 6, FALSE) var/static/allow_custom_skintones if(isnull(allow_custom_skintones)) allow_custom_skintones = CONFIG_GET(flag/allow_custom_skintones) - use_custom_skin_tone = allow_custom_skintones ? sanitize_integer(use_custom_skin_tone, FALSE, TRUE, initial(use_custom_skin_tone)) : FALSE + use_custom_skin_tone = allow_custom_skintones ? sanitize_integer(use_custom_skin_tone, FALSE, TRUE, initial(use_custom_skin_tone)) : FALSE if(use_custom_skin_tone) - skin_tone = sanitize_hexcolor(skin_tone, 6, TRUE, "#FFFFFF") + skin_tone = sanitize_hexcolor(skin_tone, 6, TRUE, "#FFFFFF") else - skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones - GLOB.nonstandard_skin_tones, initial(skin_tone)) + skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones - GLOB.nonstandard_skin_tones, initial(skin_tone)) - features["horns_color"] = sanitize_hexcolor(features["horns_color"], 6, FALSE, "85615a") - features["wings_color"] = sanitize_hexcolor(features["wings_color"], 6, FALSE, "FFFFFF") - backbag = sanitize_inlist(backbag, GLOB.backbaglist, initial(backbag)) - jumpsuit_style = sanitize_inlist(jumpsuit_style, GLOB.jumpsuitlist, initial(jumpsuit_style)) - uplink_spawn_loc = sanitize_inlist(uplink_spawn_loc, GLOB.uplink_spawn_loc_list, initial(uplink_spawn_loc)) - features["mcolor"] = sanitize_hexcolor(features["mcolor"], 6, FALSE) - features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], GLOB.tails_list_lizard) - features["tail_human"] = sanitize_inlist(features["tail_human"], GLOB.tails_list_human) - features["snout"] = sanitize_inlist(features["snout"], GLOB.snouts_list) - features["horns"] = sanitize_inlist(features["horns"], GLOB.horns_list) - features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list) - features["frills"] = sanitize_inlist(features["frills"], GLOB.frills_list) - features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list) - features["legs"] = sanitize_inlist(features["legs"], GLOB.legs_list, "Plantigrade") - features["deco_wings"] = sanitize_inlist(features["deco_wings"], GLOB.deco_wings_list, "None") - features["insect_fluff"] = sanitize_inlist(features["insect_fluff"], GLOB.insect_fluffs_list) - features["insect_markings"] = sanitize_inlist(features["insect_markings"], GLOB.insect_markings_list, "None") - features["insect_wings"] = sanitize_inlist(features["insect_wings"], GLOB.insect_wings_list) - features["arachnid_legs"] = sanitize_inlist(features["arachnid_legs"], GLOB.arachnid_legs_list, "Plain") - features["arachnid_spinneret"] = sanitize_inlist(features["arachnid_spinneret"], GLOB.arachnid_spinneret_list, "Plain") - features["arachnid_mandibles"] = sanitize_inlist(features["arachnid_mandibles"], GLOB.arachnid_mandibles_list, "Plain") + features["horns_color"] = sanitize_hexcolor(features["horns_color"], 6, FALSE, "85615a") + features["wings_color"] = sanitize_hexcolor(features["wings_color"], 6, FALSE, "FFFFFF") + backbag = sanitize_inlist(backbag, GLOB.backbaglist, initial(backbag)) + jumpsuit_style = sanitize_inlist(jumpsuit_style, GLOB.jumpsuitlist, initial(jumpsuit_style)) + uplink_spawn_loc = sanitize_inlist(uplink_spawn_loc, GLOB.uplink_spawn_loc_list, initial(uplink_spawn_loc)) + features["mcolor"] = sanitize_hexcolor(features["mcolor"], 6, FALSE) + features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], GLOB.tails_list_lizard) + features["tail_human"] = sanitize_inlist(features["tail_human"], GLOB.tails_list_human) + features["snout"] = sanitize_inlist(features["snout"], GLOB.snouts_list) + features["horns"] = sanitize_inlist(features["horns"], GLOB.horns_list) + features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list) + features["frills"] = sanitize_inlist(features["frills"], GLOB.frills_list) + features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list) + features["legs"] = sanitize_inlist(features["legs"], GLOB.legs_list, "Plantigrade") + features["deco_wings"] = sanitize_inlist(features["deco_wings"], GLOB.deco_wings_list, "None") + features["insect_fluff"] = sanitize_inlist(features["insect_fluff"], GLOB.insect_fluffs_list) + features["insect_markings"] = sanitize_inlist(features["insect_markings"], GLOB.insect_markings_list, "None") + features["insect_wings"] = sanitize_inlist(features["insect_wings"], GLOB.insect_wings_list) + features["arachnid_legs"] = sanitize_inlist(features["arachnid_legs"], GLOB.arachnid_legs_list, "Plain") + features["arachnid_spinneret"] = sanitize_inlist(features["arachnid_spinneret"], GLOB.arachnid_spinneret_list, "Plain") + features["arachnid_mandibles"] = sanitize_inlist(features["arachnid_mandibles"], GLOB.arachnid_mandibles_list, "Plain") var/static/size_min if(!size_min) @@ -939,7 +937,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/static/size_max if(!size_max) size_max = CONFIG_GET(number/body_size_max) - features["body_size"] = sanitize_num_clamp(features["body_size"], size_min, size_max, RESIZE_DEFAULT_SIZE, 0.01) + features["body_size"] = sanitize_num_clamp(features["body_size"], size_min, size_max, RESIZE_DEFAULT_SIZE, 0.01) var/static/list/B_sizes if(!B_sizes) @@ -963,33 +961,33 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/list/L = CONFIG_GET(keyed_list/safe_visibility_toggles) safe_visibilities = L.Copy() - features["breasts_size"] = sanitize_inlist(features["breasts_size"], B_sizes, BREASTS_SIZE_DEF) - features["cock_length"] = sanitize_integer(features["cock_length"], min_D, max_D, COCK_SIZE_DEF) - features["butt_size"] = sanitize_integer(features["butt_size"], min_B, max_B, BUTT_SIZE_DEF) - features["breasts_shape"] = sanitize_inlist(features["breasts_shape"], GLOB.breasts_shapes_list, DEF_BREASTS_SHAPE) - features["cock_shape"] = sanitize_inlist(features["cock_shape"], GLOB.cock_shapes_list, DEF_COCK_SHAPE) - features["balls_shape"] = sanitize_inlist(features["balls_shape"], GLOB.balls_shapes_list, DEF_BALLS_SHAPE) - features["vag_shape"] = sanitize_inlist(features["vag_shape"], GLOB.vagina_shapes_list, DEF_VAGINA_SHAPE) - features["breasts_color"] = sanitize_hexcolor(features["breasts_color"], 6, FALSE, "FFFFFF") - features["cock_color"] = sanitize_hexcolor(features["cock_color"], 6, FALSE, "FFFFFF") - features["balls_color"] = sanitize_hexcolor(features["balls_color"], 6, FALSE, "FFFFFF") - features["vag_color"] = sanitize_hexcolor(features["vag_color"], 6, FALSE, "FFFFFF") - features["breasts_visibility"] = sanitize_inlist(features["breasts_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES) - features["cock_visibility"] = sanitize_inlist(features["cock_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES) - features["balls_visibility"] = sanitize_inlist(features["balls_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES) - features["vag_visibility"] = sanitize_inlist(features["vag_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES) - features["butt_visibility"] = sanitize_inlist(features["butt_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES) + features["breasts_size"] = sanitize_inlist(features["breasts_size"], B_sizes, BREASTS_SIZE_DEF) + features["cock_length"] = sanitize_integer(features["cock_length"], min_D, max_D, COCK_SIZE_DEF) + features["butt_size"] = sanitize_integer(features["butt_size"], min_B, max_B, BUTT_SIZE_DEF) + features["breasts_shape"] = sanitize_inlist(features["breasts_shape"], GLOB.breasts_shapes_list, DEF_BREASTS_SHAPE) + features["cock_shape"] = sanitize_inlist(features["cock_shape"], GLOB.cock_shapes_list, DEF_COCK_SHAPE) + features["balls_shape"] = sanitize_inlist(features["balls_shape"], GLOB.balls_shapes_list, DEF_BALLS_SHAPE) + features["vag_shape"] = sanitize_inlist(features["vag_shape"], GLOB.vagina_shapes_list, DEF_VAGINA_SHAPE) + features["breasts_color"] = sanitize_hexcolor(features["breasts_color"], 6, FALSE, "FFFFFF") + features["cock_color"] = sanitize_hexcolor(features["cock_color"], 6, FALSE, "FFFFFF") + features["balls_color"] = sanitize_hexcolor(features["balls_color"], 6, FALSE, "FFFFFF") + features["vag_color"] = sanitize_hexcolor(features["vag_color"], 6, FALSE, "FFFFFF") + features["breasts_visibility"] = sanitize_inlist(features["breasts_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES) + features["cock_visibility"] = sanitize_inlist(features["cock_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES) + features["balls_visibility"] = sanitize_inlist(features["balls_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES) + features["vag_visibility"] = sanitize_inlist(features["vag_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES) + features["butt_visibility"] = sanitize_inlist(features["butt_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES) - custom_speech_verb = sanitize_inlist(custom_speech_verb, GLOB.speech_verbs, "default") - custom_tongue = sanitize_inlist(custom_tongue, GLOB.roundstart_tongues, "default") - additional_language = sanitize_inlist(additional_language, GLOB.roundstart_languages, "None") + custom_speech_verb = sanitize_inlist(custom_speech_verb, GLOB.speech_verbs, "default") + custom_tongue = sanitize_inlist(custom_tongue, GLOB.roundstart_tongues, "default") + additional_language = sanitize_inlist(additional_language, GLOB.roundstart_languages, "None") - security_records = copytext(security_records, 1, MAX_FLAVOR_LEN) - medical_records = copytext(medical_records, 1, MAX_FLAVOR_LEN) + security_records = copytext(security_records, 1, MAX_FLAVOR_LEN) + medical_records = copytext(medical_records, 1, MAX_FLAVOR_LEN) - features["flavor_text"] = copytext(features["flavor_text"], 1, MAX_FLAVOR_LEN) - features["silicon_flavor_text"] = copytext(features["silicon_flavor_text"], 1, MAX_FLAVOR_LEN) - features["ooc_notes"] = copytext(features["ooc_notes"], 1, MAX_FLAVOR_LEN) + features["flavor_text"] = copytext(features["flavor_text"], 1, MAX_FLAVOR_LEN) + features["silicon_flavor_text"] = copytext(features["silicon_flavor_text"], 1, MAX_FLAVOR_LEN) + features["ooc_notes"] = copytext(features["ooc_notes"], 1, MAX_FLAVOR_LEN) //load every advanced coloring mode thing in one go //THIS MUST BE DONE AFTER ALL FEATURE SAVES OR IT WILL NOT WORK @@ -1011,11 +1009,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car message_admins("Sprite Accessory Failure (loading data): Accessory [accessory.type] is a matrixed item without any matrixed sections set!") continue if(S["feature_[primary_string]"]) - S["feature_[primary_string]"] >> features[primary_string] + S["feature_[primary_string]"] >> features[primary_string] if(S["feature_[secondary_string]"]) - S["feature_[secondary_string]"] >> features[secondary_string] + S["feature_[secondary_string]"] >> features[secondary_string] if(S["feature_[tertiary_string]"]) - S["feature_[tertiary_string]"] >> features[tertiary_string] + S["feature_[tertiary_string]"] >> features[tertiary_string] persistent_scars = sanitize_integer(persistent_scars) scars_list["1"] = sanitize_text(scars_list["1"]) @@ -1024,7 +1022,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car scars_list["4"] = sanitize_text(scars_list["4"]) scars_list["5"] = sanitize_text(scars_list["5"]) - joblessrole = sanitize_integer(joblessrole, 1, 3, initial(joblessrole)) + joblessrole = sanitize_integer(joblessrole, 1, 3, initial(joblessrole)) //Validate job prefs for(var/j in job_preferences) if(job_preferences["[j]"] != JP_LOW && job_preferences["[j]"] != JP_MEDIUM && job_preferences["[j]"] != JP_HIGH) @@ -1032,10 +1030,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car all_quirks = SANITIZE_LIST(all_quirks) - vore_flags = sanitize_integer(vore_flags, 0, MAX_VORE_FLAG, 0) - vore_taste = copytext(vore_taste, 1, MAX_TASTE_LEN) - vore_smell = copytext(vore_smell, 1, MAX_TASTE_LEN) - belly_prefs = SANITIZE_LIST(belly_prefs) + vore_flags = sanitize_integer(vore_flags, 0, MAX_VORE_FLAG, 0) + vore_taste = copytext(vore_taste, 1, MAX_TASTE_LEN) + vore_smell = copytext(vore_smell, 1, MAX_TASTE_LEN) + belly_prefs = SANITIZE_LIST(belly_prefs) cit_character_pref_load(S) diff --git a/code/modules/unit_tests/character_saving.dm b/code/modules/unit_tests/character_saving.dm index 8d978a630d..cca17b81e4 100644 --- a/code/modules/unit_tests/character_saving.dm +++ b/code/modules/unit_tests/character_saving.dm @@ -1,18 +1,29 @@ +#define UNIT_TEST_SAVING_FLAVOR_TEXT "Space" +#define UNIT_TEST_SAVING_SILICON_FLAVOR_TEXT "Station" +#define UNIT_TEST_SAVING_OOC_NOTES "Thirteen" + /datum/unit_test/character_saving/Run() try var/datum/preferences/P = new P.load_path("test") - P.features["flavor_text"] = "Foo" - P.features["ooc_notes"] = "Bar" + P.features["flavor_text"] = UNIT_TEST_SAVING_FLAVOR_TEXT + P.features["silicon_flavor_text"] = UNIT_TEST_SAVING_SILICON_FLAVOR_TEXT + P.features["ooc_notes"] = UNIT_TEST_SAVING_OOC_NOTES P.save_character() P.load_character() - if(P.features["flavor_text"] != "Foo") + if(P.features["flavor_text"] != UNIT_TEST_SAVING_FLAVOR_TEXT) Fail("Flavor text is failing to save.") - if(P.features["ooc_notes"] != "Bar") + if(P.features["silicon_flavor_text"] != UNIT_TEST_SAVING_SILICON_FLAVOR_TEXT) + Fail("Silicon flavor text is failing to save.") + if(P.features["ooc_notes"] != UNIT_TEST_SAVING_OOC_NOTES) Fail("OOC text is failing to save.") P.save_character() P.load_character() - if(P.features["flavor_text"] != "Foo") + if((P.features["flavor_text"] != UNIT_TEST_SAVING_FLAVOR_TEXT) || (P.features["silicon_flavor_text"] != UNIT_TEST_SAVING_SILICON_FLAVOR_TEXT) || (P.features["ooc_notes"] != UNIT_TEST_SAVING_OOC_NOTES)) Fail("Repeated saving and loading possibly causing save deletion.") catch(var/exception/e) Fail("Failed to save and load character due to exception [e.file]:[e.line], [e.name]") + +#undef UNIT_TEST_SAVING_FLAVOR_TEXT +#undef UNIT_TEST_SAVING_SILICON_FLAVOR_TEXT +#undef UNIT_TEST_SAVING_OOC_NOTES diff --git a/modular_citadel/code/modules/client/preferences_savefile.dm b/modular_citadel/code/modules/client/preferences_savefile.dm index 102ae41921..4942a1041f 100644 --- a/modular_citadel/code/modules/client/preferences_savefile.dm +++ b/modular_citadel/code/modules/client/preferences_savefile.dm @@ -35,5 +35,4 @@ WRITE_FILE(S["feature_xeno_head"], features["xenohead"]) //flavor text WRITE_FILE(S["feature_flavor_text"], features["flavor_text"]) - WRITE_FILE(S["silicon_feature_flavor_text"], features["silicon_flavor_text"]) - + WRITE_FILE(S["feature_silicon_flavor_text"], features["silicon_flavor_text"])