diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 3e42d8c6de7..08991f1edc7 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -217,7 +217,8 @@ datum/preferences
dat += "Load slot - "
dat += "Save slot - "
dat += "Reload slot - "
- dat += "Reset slot"
+ dat += "Reset slot - "
+ dat += "Copy slot"
else
dat += "Please create an account to save your preferences."
@@ -273,6 +274,14 @@ datum/preferences
return 0
load_character(SAVE_RESET)
sanitize_preferences()
+ else if(href_list["copy"])
+ if(!IsGuestKey(usr.key))
+ open_copy_dialog(usr)
+ return 1
+ else if(href_list["overwrite"])
+ overwrite_character(text2num(href_list["overwrite"]))
+ sanitize_preferences()
+ close_load_dialog(usr)
else
return 0
@@ -332,3 +341,29 @@ datum/preferences
/datum/preferences/proc/close_load_dialog(mob/user)
//user << browse(null, "window=saves")
panel.close()
+<<<<<<< HEAD
+=======
+
+/datum/preferences/proc/open_copy_dialog(mob/user)
+ var/dat = "
"
+ dat += ""
+
+ var/savefile/S = new /savefile(path)
+ if(S)
+ dat += "Select a character slot to overwrite
"
+ dat += "You will then need to save to confirm
"
+ var/name
+ for(var/i=1, i<= config.character_slots, i++)
+ S.cd = "/character[i]"
+ S["real_name"] >> name
+ if(!name) name = "Character[i]"
+ if(i==default_slot)
+ name = "[name]"
+ dat += "[name]
"
+
+ dat += "
"
+ dat += ""
+ panel = new(user, "Character Slots", "Character Slots", 300, 390, src)
+ panel.set_content(dat)
+ panel.open()
+>>>>>>> 6927ca1... Merge pull request #5988 from PrismaticGynoid/charactercopy
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 22eab43de58..652f2ac082f 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -94,6 +94,22 @@
player_setup.save_character(S)
return 1
+/datum/preferences/proc/overwrite_character(slot)
+ if(!path) return 0
+ if(!fexists(path)) return 0
+ var/savefile/S = new /savefile(path)
+ if(!S) return 0
+ if(!slot) slot = default_slot
+ if(slot != SAVE_RESET)
+ slot = sanitize_integer(slot, 1, config.character_slots, initial(default_slot))
+ if(slot != default_slot)
+ default_slot = slot
+ S["default_slot"] << slot
+ else
+ S["default_slot"] << default_slot
+
+ return 1
+
/datum/preferences/proc/sanitize_preferences()
player_setup.sanitize_setup()
return 1
diff --git a/html/changelogs/PrismaticGynoid - charactercopy.yml b/html/changelogs/PrismaticGynoid - charactercopy.yml
new file mode 100644
index 00000000000..2c732b2b93d
--- /dev/null
+++ b/html/changelogs/PrismaticGynoid - charactercopy.yml
@@ -0,0 +1,6 @@
+author: PrismaticGynoid
+
+delete-after: True
+
+changes:
+ - rscadd: "Adds the ability to copy a character slot onto another one, allowing for easier rearranging of characters, or wiping characters by copying empty slots."