diff --git a/code/game/dna/dna2_ch.dm b/code/game/dna/dna2_ch.dm
new file mode 100644
index 0000000000..2c68b7a68a
--- /dev/null
+++ b/code/game/dna/dna2_ch.dm
@@ -0,0 +1,14 @@
+/datum/dna
+ var/digitigrade = 0
+
+/datum/dna/Clone()
+ . = ..()
+ //Data for inclusion of digitigrade leg settings in DNA
+ var/datum/dna/new_dna = .
+ new_dna.digitigrade = digitigrade
+ return new_dna
+
+/datum/dna/ResetUIFrom(var/mob/living/carbon/human/character)
+ //inclusion of digitigrade
+ src.digitigrade = character.digitigrade
+ . = ..()
\ No newline at end of file
diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm
index 24cce787f6..a127575fe9 100644
--- a/code/modules/client/preference_setup/general/03_body.dm
+++ b/code/modules/client/preference_setup/general/03_body.dm
@@ -150,7 +150,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
S["r_wing3"] >> pref.r_wing3
S["g_wing3"] >> pref.g_wing3
S["b_wing3"] >> pref.b_wing3
- S["digitigrade"] >> pref.digitigrade //CHOMPEdit
/datum/category_item/player_setup_item/general/body/save_character(var/savefile/S)
S["species"] << pref.species
@@ -221,7 +220,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
S["r_wing3"] << pref.r_wing3
S["g_wing3"] << pref.g_wing3
S["b_wing3"] << pref.b_wing3
- S["digitigrade"] << pref.digitigrade //CHOMPEdit
/datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S)
if(!pref.species || !(pref.species in GLOB.playable_species))
@@ -581,14 +579,14 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
if(has_flag(mob_species, HAS_SKIN_COLOR))
. += "
Body Color
"
. += "Change Color [color_square(pref.r_skin, pref.g_skin, pref.b_skin)]
"
+
+ . += "
Genetics Settings
"
//CHOMPEdit START
if(mob_species.digi_allowed)
. += "
Digitigrade?: [pref.digitigrade ? "Yes" : "No"]
"
//CHOMPEdit END
- . += "Genetics Settings
"
-
var/list/ear_styles = pref.get_available_styles(global.ear_styles_list)
var/datum/sprite_accessory/ears/ear = ear_styles[pref.ear_style]
. += "Ears
"
@@ -1297,12 +1295,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.g_wing3 = hex2num(copytext(new_wingc3, 4, 6))
pref.b_wing3 = hex2num(copytext(new_wingc3, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
-
- //CHOMPEdit START
- else if(href_list["digitigrade"])
- pref.digitigrade = !pref.digitigrade
- return TOPIC_REFRESH_UPDATE_PREVIEW
- //CHOMPEdit END
return ..()
/datum/category_item/player_setup_item/general/body/proc/reset_limbs()
diff --git a/code/modules/client/preference_setup/general/03_body_ch.dm b/code/modules/client/preference_setup/general/03_body_ch.dm
index 809a621836..3e2441bc6a 100644
--- a/code/modules/client/preference_setup/general/03_body_ch.dm
+++ b/code/modules/client/preference_setup/general/03_body_ch.dm
@@ -1,6 +1,27 @@
+// Chomp additions to character load/save logic
+// /datum/category_item/player_setup_item/general/body/content cannot be overridden here due to requiring being a cleaned list
+
+
/datum/category_item/player_setup_item/general/body/copy_to_mob(var/mob/living/carbon/human/character)
. = ..()
if(character.species.digi_allowed)
character.digitigrade = pref.digitigrade
else
- character.digitigrade = FALSE
\ No newline at end of file
+ character.digitigrade = FALSE
+
+/datum/category_item/player_setup_item/general/body/OnTopic(var/href,var/list/href_list, var/mob/user)
+ if(href_list["digitigrade"])
+ pref.digitigrade = !pref.digitigrade
+
+ return TOPIC_REFRESH_UPDATE_PREVIEW
+ . = ..()
+
+// Savefile additions
+// Be careful here
+/datum/category_item/player_setup_item/general/body/load_character(var/savefile/S)
+ . = ..()
+ S["digitigrade"] >> pref.digitigrade //CHOMPEdit
+
+/datum/category_item/player_setup_item/general/body/save_character(var/savefile/S)
+ . = ..()
+ S["digitigrade"] << pref.digitigrade //CHOMPEdit
\ No newline at end of file
diff --git a/code/modules/organs/organ_icon_ch.dm b/code/modules/organs/organ_icon_ch.dm
index 9bdc1a1f50..ed176936e8 100644
--- a/code/modules/organs/organ_icon_ch.dm
+++ b/code/modules/organs/organ_icon_ch.dm
@@ -7,7 +7,15 @@
// - once done, reset icobase & markings to default values from temp storage vars
/obj/item/organ/external/get_icon(var/skeletal)
- if( owner.digitigrade && ( istype(src,/obj/item/organ/external/leg) || istype(src,/obj/item/organ/external/foot) ) )
+ var/digitigrade = 0
+
+ // preferentially take digitigrade value from owner if available, THEN DNA.
+ if(owner)
+ digitigrade = owner.digitigrade
+ else
+ digitigrade = dna.digitigrade
+
+ if( digitigrade && ( istype(src,/obj/item/organ/external/leg) || istype(src,/obj/item/organ/external/foot) ) )
var/IB = species.icobase
var/list/markingsTmp = markings
diff --git a/code/modules/resleeving/machines_ch.dm b/code/modules/resleeving/machines_ch.dm
new file mode 100644
index 0000000000..1db956739a
--- /dev/null
+++ b/code/modules/resleeving/machines_ch.dm
@@ -0,0 +1,8 @@
+/obj/machinery/clonepod/transhuman/growclone(var/datum/transhuman/body_record/current_project)
+ . = ..()
+ //Extra clonepod behavior
+ var/mob/living/carbon/human/H = occupant
+ var/datum/dna2/record/R = current_project.mydna
+
+ H.digitigrade = R.dna.digitigrade
+ H.update_icons_body()
\ No newline at end of file
diff --git a/vorestation.dme b/vorestation.dme
index 85225bf3c6..a80070c80e 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -605,6 +605,7 @@
#include "code\game\area\Space Station 13 areas_vr.dm"
#include "code\game\area\ss13_deprecated_areas.dm"
#include "code\game\dna\dna2.dm"
+#include "code\game\dna\dna2_ch.dm"
#include "code\game\dna\dna2_domutcheck.dm"
#include "code\game\dna\dna2_helpers.dm"
#include "code\game\dna\dna_modifier.dm"
@@ -3968,6 +3969,7 @@
#include "code\modules\resleeving\infomorph.dm"
#include "code\modules\resleeving\infomorph_software.dm"
#include "code\modules\resleeving\machines.dm"
+#include "code\modules\resleeving\machines_ch.dm"
#include "code\modules\resleeving\machines_vr.dm"
#include "code\modules\resleeving\sleevecard.dm"
#include "code\modules\rogueminer_vr\asteroid.dm"