diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql
index c6045cd835e..22369d5470d 100644
--- a/SQL/paradise_schema.sql
+++ b/SQL/paradise_schema.sql
@@ -78,6 +78,7 @@ CREATE TABLE `characters` (
`rlimb_data` mediumtext NOT NULL,
`nanotrasen_relation` varchar(45) NOT NULL,
`speciesprefs` int(1) NOT NULL,
+ `socks` mediumtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18747 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm
index c69742b94c8..a81a99c540b 100644
--- a/code/__HELPERS/global_lists.dm
+++ b/code/__HELPERS/global_lists.dm
@@ -12,6 +12,10 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear, underwear_list, underwear_m, underwear_f)
//undershirt
init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, undershirt_list, undershirt_m, undershirt_f)
+ //socks
+ init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, socks_list, socks_m, socks_f)
+
+
var/list/paths
//Surgery Steps - Initialize all /datum/surgery_step into a list
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 619716363f9..fe27e399c84 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -10,6 +10,12 @@
if(FEMALE) return pick(undershirt_f)
else return pick(undershirt_list)
+/proc/random_socks(gender)
+ switch(gender)
+ if(MALE) return pick(socks_m)
+ if(FEMALE) return pick(socks_f)
+ else return pick(socks_list)
+
proc/random_hair_style(var/gender, species = "Human")
var/h_style = "Bald"
diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm
index 882331d21de..516ae5630f9 100644
--- a/code/_globalvars/lists/flavor_misc.dm
+++ b/code/_globalvars/lists/flavor_misc.dm
@@ -15,6 +15,10 @@ var/global/list/underwear_f = list() //stores only underwear name
var/global/list/undershirt_list = list() //stores /datum/sprite_accessory/undershirt indexed by name
var/global/list/undershirt_m = list() //stores only undershirt name
var/global/list/undershirt_f = list() //stores only undershirt name
+ //Socks
+var/global/list/socks_list = list() //stores /datum/sprite_accessory/socks indexed by name
+var/global/list/socks_m = list() //stores only socks name
+var/global/list/socks_f = list() //stores only socks name
//Backpacks
var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt")
diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm
index 10898e80a47..f1eca747755 100644
--- a/code/game/objects/structures/dresser.dm
+++ b/code/game/objects/structures/dresser.dm
@@ -12,7 +12,7 @@
if(ishuman(user))
var/mob/living/carbon/human/H = user
- var/choice = input(user, "Underwear or Undershirt?", "Changing") as null|anything in list("Underwear","Undershirt")
+ var/choice = input(user, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in list("Underwear","Undershirt","Socks")
if(!Adjacent(user))
return
@@ -27,5 +27,11 @@
if(new_undershirt)
H.undershirt = new_undershirt
+ if("Socks")
+ var/new_socks = input(user, "Select your socks", "Changing") as null|anything in socks_list
+ if(new_socks)
+ H.socks= new_socks
+
+
add_fingerprint(H)
H.update_body()
\ No newline at end of file
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 338d57dd616..f49dd1d1bb4 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -108,6 +108,7 @@ datum/preferences
var/b_type = "A+" //blood type (not-chooseable)
var/underwear = "Nude" //underwear type
var/undershirt = "Nude" //undershirt type
+ var/socks = "Nude" //socks type
var/backbag = 2 //backpack type
var/h_style = "Bald" //Hair type
var/r_hair = 0 //Hair color
@@ -331,6 +332,7 @@ datum/preferences
dat += "
"
dat += "Underwear:
[underwear]
"
dat += "Undershirt:
[undershirt]
"
+ dat += "Socks:
[socks]
"
dat += "Backpack Type:
[backbaglist[backbag]]
"
dat += "Nanotrasen Relation:
[nanotrasen_relation]
"
dat += "
Preview
  | "
@@ -1010,6 +1012,9 @@ datum/preferences
if("undershirt")
undershirt = random_undershirt(gender)
ShowChoices(user)
+ if("socks")
+ socks = random_socks(gender)
+ ShowChoices(user)
if("eyes")
r_eyes = rand(0,255)
g_eyes = rand(0,255)
@@ -1210,6 +1215,22 @@ datum/preferences
undershirt = new_undershirt
ShowChoices(user)
+ if("socks")
+ var/list/valid_sockstyles = list()
+ for(var/sockstyle in socks_list)
+ var/datum/sprite_accessory/S = socks_list[sockstyle]
+ if(gender == MALE && S.gender == FEMALE)
+ continue
+ if(gender == FEMALE && S.gender == MALE)
+ continue
+ if( !(species in S.species_allowed))
+ continue
+ valid_sockstyles[sockstyle] = socks_list[sockstyle]
+ var/new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in valid_sockstyles
+ ShowChoices(user)
+ if(new_socks)
+ socks = new_socks
+
if("eyes")
var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference") as color|null
if(new_eyes)
@@ -1548,6 +1569,7 @@ datum/preferences
character.underwear = underwear
character.undershirt = undershirt
+ character.socks = socks
if(backbag > 4 || backbag < 1)
backbag = 1 //Same as above
diff --git a/code/modules/client/preferences_mysql.dm b/code/modules/client/preferences_mysql.dm
index 96e51448c6d..df57e988e1b 100644
--- a/code/modules/client/preferences_mysql.dm
+++ b/code/modules/client/preferences_mysql.dm
@@ -149,6 +149,9 @@
nanotrasen_relation = query.item[52]
speciesprefs = text2num(query.item[53])
+ //socks
+ socks = query.item[54]
+
//Sanitize
metadata = sanitize_text(metadata, initial(metadata))
real_name = reject_bad_name(real_name)
@@ -196,6 +199,9 @@
disabilities = sanitize_integer(disabilities, 0, 65535, initial(disabilities))
be_special = sanitize_integer(be_special, 0, 65535, initial(be_special))
+ socks = sanitize_text(socks, initial(socks))
+
+
// if(isnull(disabilities)) disabilities = 0
if(!player_alt_titles) player_alt_titles = new()
if(!organ_data) src.organ_data = list()
@@ -268,6 +274,7 @@
rlimb_data='[rlimblist]',
nanotrasen_relation='[nanotrasen_relation]',
speciesprefs='[speciesprefs]'
+ socks='[socks]',
WHERE ckey='[C.ckey]'
AND slot='[default_slot]'"}
)
@@ -295,7 +302,7 @@
job_karma_high, job_karma_med, job_karma_low,
flavor_text, med_record, sec_record, gen_record,
player_alt_titles, be_special,
- disabilities, organ_data, rlimb_data, nanotrasen_relation, speciesprefs)
+ disabilities, organ_data, rlimb_data, nanotrasen_relation, speciesprefs, socks)
VALUES
('[C.ckey]', '[default_slot]', '[sql_sanitize_text(metadata)]', '[sql_sanitize_text(real_name)]', '[be_random_name]','[gender]',
'[age]', '[sql_sanitize_text(species)]', '[sql_sanitize_text(language)]',
@@ -312,7 +319,7 @@
'[job_karma_high]', '[job_karma_med]', '[job_karma_low]',
'[sql_sanitize_text(flavor_text)]', '[sql_sanitize_text(med_record)]', '[sql_sanitize_text(sec_record)]', '[sql_sanitize_text(gen_record)]',
'[playertitlelist]', '[be_special]',
- '[disabilities]', '[organlist]', '[rlimblist]', '[nanotrasen_relation]', '[speciesprefs]')
+ '[disabilities]', '[organlist]', '[rlimblist]', '[nanotrasen_relation]', '[speciesprefs]','[socks]')
"}
)
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 8e1c0e12964..f1dd7b307f3 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -141,6 +141,7 @@
S["eyes_blue"] >> b_eyes
S["underwear"] >> underwear
S["undershirt"] >> undershirt
+ S["socks"] >> socks
S["backbag"] >> backbag
S["b_type"] >> b_type
S["accent"] >> accent
@@ -203,6 +204,7 @@
b_eyes = sanitize_integer(b_eyes, 0, 255, initial(b_eyes))
underwear = sanitize_integer(underwear, 1, underwear_m.len, initial(underwear))
undershirt = sanitize_integer(undershirt, 1, undershirt_t.len, initial(undershirt))
+ socks = sanitize_integer(socks,1 socks_t.len, initial(socks))
backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag))
b_type = sanitize_text(b_type, initial(b_type))
accent = sanitize_text(accent, initial(accent))
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index bc10d54b1c8..7d7d400c9c3 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -30,7 +30,8 @@
var/b_type = "A+" //Player's bloodtype
var/underwear = "Nude" //Which underwear the player wants
- var/undershirt = "Nude" //Which undershirt the player wants.
+ var/undershirt = "Nude" //Which undershirt the player wants
+ var/socks = "Nude" //Which socks the player wants
var/backbag = 2 //Which backpack type the player has chosen. Nothing, Satchel or Backpack.
//Equipment slots
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 2e7a5e2be23..f7493c272d8 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -327,6 +327,13 @@ var/global/list/damage_icon_parts = list()
if(U2)
stand_icon.Blend(new /icon(U2.icon, "us_[U2.icon_state]_s"), ICON_OVERLAY)
+
+ if(socks)
+ var/datum/sprite_accessory/socks/U3 = socks_list[socks]
+ if(U3)
+ stand_icon.Blend(new /icon(U3.icon, "sk_[U3.icon_state]_s"), ICON_OVERLAY)
+
+
if(update_icons)
update_icons()
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm
index b60ebe12c5d..77f48b976d5 100644
--- a/code/modules/mob/new_player/preferences_setup.dm
+++ b/code/modules/mob/new_player/preferences_setup.dm
@@ -7,6 +7,7 @@ datum/preferences
gender = pick(MALE, FEMALE)
underwear = random_underwear(gender)
undershirt = random_undershirt(gender)
+ socks = random_socks(gender)
if(species == "Human")
s_tone = random_skin_tone()
h_style = random_hair_style(gender, species)
@@ -264,6 +265,12 @@ datum/preferences
if(U2)
undershirt_s = new/icon(U2.icon, "[U2.icon_state]_s", ICON_OVERLAY)
+ var/icon/socks_s = null
+ if(socks)
+ var/datum/sprite_accessory/socks/U3 = socks_list[socks]
+ if(U3)
+ socks_s = new/icon(U3.icon, "[U3.icon_state]_s", ICON_OVERLAY)
+
var/icon/clothes_s = null
var/uniform_dmi='icons/mob/uniform.dmi'
if(disabilities&DISABILITY_FLAG_FAT)
@@ -792,6 +799,8 @@ datum/preferences
preview_icon.Blend(underwear_s, ICON_OVERLAY)
if(undershirt_s)
preview_icon.Blend(undershirt_s, ICON_OVERLAY)
+ if(socks_s)
+ preview_icon.Blend(socks_s, ICON_OVERLAY)
if(clothes_s)
preview_icon.Blend(clothes_s, ICON_OVERLAY)
preview_icon_front = new(preview_icon, dir = SOUTH)
@@ -800,4 +809,5 @@ datum/preferences
del(eyes_s)
del(underwear_s)
del(undershirt_s)
+ del(socks_s)
del(clothes_s)
diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm
index 45fe53c3d82..5cc722bb7fd 100644
--- a/code/modules/mob/new_player/sprite_accessories.dm
+++ b/code/modules/mob/new_player/sprite_accessories.dm
@@ -1260,4 +1260,193 @@
name = "Fire Tank-Top"
icon_state = "tank_fire"
gender = NEUTER
-//end tanktops
\ No newline at end of file
+//end tanktops
+
+///////////////////////
+// Socks Definitions //
+///////////////////////
+/datum/sprite_accessory/socks
+ icon = 'icons/mob/underwear.dmi'
+
+/datum/sprite_accessory/socks/nude
+ name = "Nude"
+ icon_state = null
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/white_norm
+ name = "Normal White"
+ icon_state = "white_norm"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/black_norm
+ name = "Normal Black"
+ icon_state = "black_norm"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/white_short
+ name = "Short White"
+ icon_state = "white_short"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/black_short
+ name = "Short Black"
+ icon_state = "black_short"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/white_knee
+ name = "Knee-high White"
+ icon_state = "white_knee"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/black_knee
+ name = "Knee-high Black"
+ icon_state = "black_knee"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/thin_knee
+ name = "Knee-high Thin"
+ icon_state = "thin_knee"
+ gender = FEMALE
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/striped_knee
+ name = "Knee-high Striped"
+ icon_state = "striped_knee"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/rainbow_knee
+ name = "Knee-high Rainbow"
+ icon_state = "rainbow_knee"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/white_thigh
+ name = "Thigh-high White"
+ icon_state = "white_thigh"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+/datum/sprite_accessory/socks/black_thigh
+ name = "Thigh-high Black"
+ icon_state = "black_thigh"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/thin_thigh
+ name = "Thigh-high Thin"
+ icon_state = "thin_thigh"
+ gender = FEMALE
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/striped_thigh
+ name = "Thigh-high Striped"
+ icon_state = "striped_thigh"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/rainbow_thigh
+ name = "Thigh-high Rainbow"
+ icon_state = "rainbow_thigh"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/pantyhose
+ name = "Pantyhose"
+ icon_state = "pantyhose"
+ gender = FEMALE
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/black_fishnet
+ name = "Black Fishnet"
+ icon_state = "black_fishnet"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+/datum/sprite_accessory/socks/vox_white
+ name = "Vox White"
+ icon_state = "vox_white"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_black
+ name = "Vox Black"
+ icon_state = "vox_black"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_thin
+ name = "Vox Black Thin"
+ icon_state = "vox_blackthin"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_rainbow
+ name = "Vox Rainbow"
+ icon_state = "vox_rainbow"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_stripped
+ name = "Vox Stripped"
+ icon_state = "vox_white"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_white_thigh
+ name = "Vox Thigh-high White"
+ icon_state = "vox_whiteTH"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_black_thigh
+ name = "Vox Thigh-high Black"
+ icon_state = "vox_blackTH"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_thin_thigh
+ name = "Vox Thigh-high Thin"
+ icon_state = "vox_blackthinTH"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_rainbow_thigh
+ name = "Vox Thigh-high Rainbow"
+ icon_state = "vox_rainbowTH"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_stripped_thigh
+ name = "Vox Thigh-high Stripped"
+ icon_state = "vox_strippedTH"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_fishnet
+ name = "Vox Fishnets"
+ icon_state = "vox_fishnet"
+ gender = NEUTER
+ species_allowed = list("Vox")
\ No newline at end of file
diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi
index 5c303cbf642..6c36fd0651b 100644
Binary files a/icons/mob/underwear.dmi and b/icons/mob/underwear.dmi differ