Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion code/modules/client/preference_setup/general/02_body.dm
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O

mob_species = GLOB.all_species[pref.species]
if(new_s_tone && CanUseTopic(user))
pref.s_tone = 35 - max(min(round(new_s_tone), 220), 1)
pref.s_tone = 35 - max(min(round(new_s_tone), 225), 1)
pref.preview_should_rebuild_organs = TRUE
return TOPIC_REFRESH_UPDATE_PREVIEW

else if(href_list["skin_color"])
Expand Down
4 changes: 2 additions & 2 deletions code/modules/client/preference_setup/general/04_equipment.dm
Original file line number Diff line number Diff line change
Expand Up @@ -175,8 +175,8 @@

return ..()

/datum/category_item/player_setup_item/physical/equipment/update_setup(savefile/preferences, savefile/character)
if(preferences["version"] <= 16)
/datum/category_item/player_setup_item/physical/equipment/update_setup(pref_version, savefile/character)
if(pref_version <= 16)
var/list/old_index_to_backpack_type = list(
/decl/backpack_outfit/nothing,
/decl/backpack_outfit/backsport,
Expand Down
14 changes: 10 additions & 4 deletions code/modules/client/preference_setup/global/05_settings.dm
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,17 @@
to_file(S["default_slot"], pref.default_slot)
to_file(S["preference_values"], pref.preference_values)

/datum/category_item/player_setup_item/player_global/settings/update_setup(savefile/preferences, savefile/character)
if(preferences["version"] < 16)
/datum/category_item/player_setup_item/player_global/settings/update_setup(pref_version, savefile/character)
if(pref_version < 16)
var/list/preferences_enabled
var/list/preferences_disabled
from_file(preferences["preferences"], preferences_enabled)
from_file(preferences["preferences_disabled"], preferences_disabled)
// The old preferences/preferences_disabled keys live at cd="/" of the
// same file. Temporarily navigate there, read, then restore cd.
var/old_cd = character.cd
character.cd = "/"
from_file(character["preferences"], preferences_enabled)
from_file(character["preferences_disabled"], preferences_disabled)
character.cd = old_cd

if(!istype(preferences_enabled))
preferences_enabled = list()
Expand All @@ -36,6 +41,7 @@
else
pref.preference_values[cp.key] = cp.default_value
return 1
return 0

/datum/category_item/player_setup_item/player_global/settings/sanitize_preferences()
// Ensure our preferences are lists.
Expand Down
6 changes: 3 additions & 3 deletions code/modules/client/preference_setup/loadout/loadout.dm
Original file line number Diff line number Diff line change
Expand Up @@ -287,16 +287,16 @@ GLOBAL_LIST_EMPTY(gear_datums)
return TOPIC_REFRESH
return ..()

/datum/category_item/player_setup_item/loadout/update_setup(savefile/preferences, savefile/character)
if(preferences["version"] < 14)
/datum/category_item/player_setup_item/loadout/update_setup(pref_version, savefile/character)
if(pref_version < 14)
var/list/old_gear = character["gear"]
if(istype(old_gear)) // During updates data isn't sanitized yet, we have to do manual checks
if(!istype(pref.gear_list)) pref.gear_list = list()
if(!pref.gear_list.len) pref.gear_list.len++
pref.gear_list[1] = old_gear
return 1

if(preferences["version"] < 15)
if(pref_version < 15)
if(istype(pref.gear_list))
// Checks if the key of the pref.gear_list is a list.
// If not the key is replaced with the corresponding value.
Expand Down
4 changes: 2 additions & 2 deletions code/modules/client/preference_setup/matchmaking/relations.dm
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@
return TOPIC_REFRESH
return ..()

/datum/category_item/player_setup_item/relations/update_setup(savefile/preferences, savefile/character)
if(preferences["version"] < 18)
/datum/category_item/player_setup_item/relations/update_setup(pref_version, savefile/character)
if(pref_version < 18)
// Remove old relation types
for(var/i in pref.relations)
var/f = FALSE
Expand Down
10 changes: 5 additions & 5 deletions code/modules/client/preference_setup/preference_setup.dm
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,9 @@ var/const/CHARACTER_PREFERENCE_INPUT_TITLE = "Character Preference"
for(var/datum/category_group/player_setup_category/PS in categories)
PS.save_preferences(S)

/datum/category_collection/player_setup_collection/proc/update_setup(savefile/preferences, savefile/character)
/datum/category_collection/player_setup_collection/proc/update_setup(pref_version, savefile/character)
for(var/datum/category_group/player_setup_category/PS in categories)
. = PS.update_setup(preferences, character) || .
. = PS.update_setup(pref_version, character) || .

/datum/category_collection/player_setup_collection/proc/header()
var/dat = ""
Expand Down Expand Up @@ -164,9 +164,9 @@ var/const/CHARACTER_PREFERENCE_INPUT_TITLE = "Character Preference"
for(var/datum/category_item/player_setup_item/PI in items)
PI.save_preferences(S)

/datum/category_group/player_setup_category/proc/update_setup(savefile/preferences, savefile/character)
/datum/category_group/player_setup_category/proc/update_setup(pref_version, savefile/character)
for(var/datum/category_item/player_setup_item/PI in items)
. = PI.update_setup(preferences, character) || .
. = PI.update_setup(pref_version, character) || .

/datum/category_group/player_setup_category/proc/content(mob/user)
. = "<table style='width:100%'><tr style='vertical-align:top'><td style='width:50%'>"
Expand Down Expand Up @@ -238,7 +238,7 @@ var/const/CHARACTER_PREFERENCE_INPUT_TITLE = "Character Preference"
/*
* Called when the item is asked to update user/global settings
*/
/datum/category_item/player_setup_item/proc/update_setup(savefile/preferences, savefile/character)
/datum/category_item/player_setup_item/proc/update_setup(pref_version, savefile/character)
return 0

/datum/category_item/player_setup_item/proc/content()
Expand Down
7 changes: 5 additions & 2 deletions code/modules/client/preferences.dm
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,9 @@

/datum/preferences/proc/load_and_update_character(slot)
load_character(slot)
if(update_setup(loaded_preferences, loaded_character))
var/migrated = update_setup(savefile_version, loaded_character)
if(loaded_character) del(loaded_character)
if(migrated)
save_preferences()
save_character()

Expand Down Expand Up @@ -235,7 +237,6 @@
character.update_implants(0)
preview_should_rebuild_organs = FALSE


character.update_body(0)
character.update_underwear(0)

Expand Down Expand Up @@ -269,6 +270,8 @@
dat += "<body>"
dat += "<tt><center>"

if(loaded_preferences) del(loaded_preferences)
if(loaded_character) del(loaded_character)
var/savefile/S = new /savefile(path)
if(S)
dat += "<b>Select a character slot to load</b><hr>"
Expand Down
20 changes: 14 additions & 6 deletions code/modules/client/preferences_savefile.dm
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
return 0
if(!fexists(path)) return 0
debug_world_log("LOADING PREFS FOR [usr]/[usr?.ckey] - PATH: [path]")
if(loaded_preferences) del(loaded_preferences)
if(loaded_character) del(loaded_character)
var/savefile/S = new /savefile(path)
if(!S) return 0
S.cd = "/"
Expand All @@ -30,13 +32,15 @@
to_chat(client, span_warning("You're attempting to save your preferences a little too fast. Wait half a second, then try again."))
return 0
debug_world_log("SAVING PREFS FOR [usr]/[usr?.ckey] - PATH: [path]")
if(loaded_preferences) del(loaded_preferences)
if(loaded_character) del(loaded_character)
var/savefile/S = new /savefile(path)
if(!S) return 0
S.cd = "/"

WRITE_FILE(S["version"], SAVEFILE_VERSION_MAX)
player_setup.save_preferences(S)
loaded_preferences = S
del(S)
return 1

/datum/preferences/proc/load_character(slot)
Expand All @@ -49,6 +53,8 @@
if(!fexists(path)) return 0

debug_world_log("LOADING CHARACTER FOR [usr]/[usr?.ckey] - PATH: [path]")
if(loaded_preferences) del(loaded_preferences)
if(loaded_character) del(loaded_character)
var/savefile/S = new /savefile(path)
if(!S) return 0
S.cd = "/"
Expand Down Expand Up @@ -80,23 +86,25 @@
to_chat(client, span_warning("You're attempting to save your character a little too fast. Wait half a second, then try again."))
return 0
debug_world_log("SAVING CHARACTER FOR [usr]/[usr?.ckey] - PATH: [path]")
if(loaded_preferences) del(loaded_preferences)
if(loaded_character) del(loaded_character)
var/savefile/S = new /savefile(path)
if(!S) return 0
S.cd = GLOB.maps_data.character_save_path(default_slot)

S["version"] << SAVEFILE_VERSION_MAX
player_setup.save_character(S)
loaded_character = S
return S
del(S)
return 1

/datum/preferences/proc/sanitize_preferences()
player_setup.sanitize_setup()
return 1

/datum/preferences/proc/update_setup(savefile/preferences, savefile/character)
if(!preferences || !character)
/datum/preferences/proc/update_setup(pref_version, savefile/character)
if(!character)
return 0
return player_setup.update_setup(preferences, character)
return player_setup.update_setup(pref_version, character)

#undef SAVEFILE_VERSION_MAX
#undef SAVEFILE_VERSION_MIN
10 changes: 6 additions & 4 deletions code/modules/multiz/map_data.dm
Original file line number Diff line number Diff line change
Expand Up @@ -162,10 +162,12 @@ GLOBAL_DATUM_INIT(maps_data, /datum/maps_data, new)
S.cd = original_cd // Attempting to make this call as side-effect free as possible

/datum/maps_data/proc/private_use_legacy_saves(savefile/S, slot)
if(!S.dir.Find(path)) // If we cannot find the map path folder, load the legacy save
return TRUE
S.cd = "/[path]" // Finally, if we cannot find the character slot in the map path folder, load the legacy save
return !S.dir.Find("character[slot]")
// Directly read the version key at the path
// If no version is found, the slot has no version data, fall back to legacy
S.cd = "/[path]/character[slot]"
var/new_version
S["version"] >> new_version
return !new_version


/datum/maps_data/proc/registrate(obj/map_data/MD)
Expand Down
Loading