mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-11 10:22:13 +00:00
Sprite size preferences?! Oh no!
This commit is contained in:
@@ -59,6 +59,7 @@
|
|||||||
|
|
||||||
#define MOVESPEED_ID_SPECIES "SPECIES_SPEED_MOD"
|
#define MOVESPEED_ID_SPECIES "SPECIES_SPEED_MOD"
|
||||||
|
|
||||||
|
#define MOVESPEED_ID_SMALL_STRIDE "SMALL_STRIDE"
|
||||||
#define MOVESPEED_ID_PRONE_DRAGGING "PRONE_DRAG"
|
#define MOVESPEED_ID_PRONE_DRAGGING "PRONE_DRAG"
|
||||||
#define MOVESPEED_ID_HUMAN_CARRYING "HUMAN_CARRY"
|
#define MOVESPEED_ID_HUMAN_CARRYING "HUMAN_CARRY"
|
||||||
#define MOVESPEED_ID_SHRINK_RAY "SHRUNKEN_SPEED_MODIFIER"
|
#define MOVESPEED_ID_SHRINK_RAY "SHRUNKEN_SPEED_MODIFIER"
|
||||||
|
|||||||
@@ -209,7 +209,8 @@
|
|||||||
"ipc_antenna" = "None",
|
"ipc_antenna" = "None",
|
||||||
"flavor_text" = "",
|
"flavor_text" = "",
|
||||||
"meat_type" = "Mammalian",
|
"meat_type" = "Mammalian",
|
||||||
"body_model" = MALE
|
"body_model" = MALE,
|
||||||
|
"body_size" = RESIZE_DEFAULT_SIZE
|
||||||
))
|
))
|
||||||
|
|
||||||
/proc/random_hair_style(gender)
|
/proc/random_hair_style(gender)
|
||||||
|
|||||||
@@ -449,3 +449,26 @@
|
|||||||
key_mode = KEY_MODE_TEXT
|
key_mode = KEY_MODE_TEXT
|
||||||
value_mode = VALUE_MODE_FLAG
|
value_mode = VALUE_MODE_FLAG
|
||||||
config_entry_value = list(GEN_VISIBLE_NO_CLOTHES, GEN_VISIBLE_NO_UNDIES, GEN_VISIBLE_NEVER) //refer to cit_helpers for all toggles.
|
config_entry_value = list(GEN_VISIBLE_NO_CLOTHES, GEN_VISIBLE_NO_UNDIES, GEN_VISIBLE_NEVER) //refer to cit_helpers for all toggles.
|
||||||
|
|
||||||
|
//Body size configs, the feature will be disabled if both min and max have the same value.
|
||||||
|
/datum/config_entry/number/body_size_min
|
||||||
|
config_entry_value = RESIZE_DEFAULT_SIZE
|
||||||
|
min_val = 0.1 //to avoid issues with zeros and negative values.
|
||||||
|
max_val = RESIZE_DEFAULT_SIZE
|
||||||
|
|
||||||
|
/datum/config_entry/number/body_size_max
|
||||||
|
config_entry_value = RESIZE_DEFAULT_SIZE
|
||||||
|
min_val = RESIZE_DEFAULT_SIZE
|
||||||
|
|
||||||
|
//pun pun slowdown for characters smaller than this thanks shorter strides.
|
||||||
|
//Set to a value below 'body_size_min' to disable it.
|
||||||
|
/datum/config_entry/number/threshold_body_size_slowdown
|
||||||
|
config_entry_value = RESIZE_DEFAULT_SIZE * 0.85
|
||||||
|
min_val = 0
|
||||||
|
max_val = RESIZE_DEFAULT_SIZE
|
||||||
|
|
||||||
|
//multiplicative slowdown multiplier. See 'dna.update_body_size' for the operation.
|
||||||
|
//doesn't apply to floating or crawling mobs
|
||||||
|
/datum/config_entry/number/body_size_slowdown_multiplier
|
||||||
|
config_entry_value = 0.25
|
||||||
|
min_val = 1.1 //otherwise it'd be a waste of time.
|
||||||
|
|||||||
@@ -41,6 +41,7 @@
|
|||||||
/datum/dna/proc/transfer_identity(mob/living/carbon/destination, transfer_SE = 0)
|
/datum/dna/proc/transfer_identity(mob/living/carbon/destination, transfer_SE = 0)
|
||||||
if(!istype(destination))
|
if(!istype(destination))
|
||||||
return
|
return
|
||||||
|
var/old_size = destination.dna.features["body_size"]
|
||||||
destination.dna.unique_enzymes = unique_enzymes
|
destination.dna.unique_enzymes = unique_enzymes
|
||||||
destination.dna.uni_identity = uni_identity
|
destination.dna.uni_identity = uni_identity
|
||||||
destination.dna.blood_type = blood_type
|
destination.dna.blood_type = blood_type
|
||||||
@@ -56,6 +57,8 @@
|
|||||||
if(transfer_SE)
|
if(transfer_SE)
|
||||||
destination.dna.mutation_index = mutation_index
|
destination.dna.mutation_index = mutation_index
|
||||||
|
|
||||||
|
destination.dna.update_body_size(old_size)
|
||||||
|
|
||||||
SEND_SIGNAL(destination, COMSIG_CARBON_IDENTITY_TRANSFERRED_TO, src, transfer_SE)
|
SEND_SIGNAL(destination, COMSIG_CARBON_IDENTITY_TRANSFERRED_TO, src, transfer_SE)
|
||||||
|
|
||||||
/datum/dna/proc/copy_dna(datum/dna/new_dna)
|
/datum/dna/proc/copy_dna(datum/dna/new_dna)
|
||||||
@@ -368,7 +371,9 @@
|
|||||||
/mob/living/carbon/human/proc/hardset_dna(ui, list/mutation_index, newreal_name, newblood_type, datum/species/mrace, newfeatures)
|
/mob/living/carbon/human/proc/hardset_dna(ui, list/mutation_index, newreal_name, newblood_type, datum/species/mrace, newfeatures)
|
||||||
|
|
||||||
if(newfeatures)
|
if(newfeatures)
|
||||||
|
var/old_size = dna.features["body_size"]
|
||||||
dna.features = newfeatures
|
dna.features = newfeatures
|
||||||
|
dna.update_body_size(old_size)
|
||||||
|
|
||||||
if(mrace)
|
if(mrace)
|
||||||
var/datum/species/newrace = new mrace.type
|
var/datum/species/newrace = new mrace.type
|
||||||
@@ -644,3 +649,15 @@
|
|||||||
gib()
|
gib()
|
||||||
else
|
else
|
||||||
set_species(/datum/species/dullahan)
|
set_species(/datum/species/dullahan)
|
||||||
|
|
||||||
|
/datum/dna/proc/update_body_size(old_size)
|
||||||
|
if(!holder || features["body_size"] == old_size)
|
||||||
|
return
|
||||||
|
holder.resize = features["body_size"] / old_size
|
||||||
|
holder.update_transform()
|
||||||
|
var/danger = CONFIG_GET(number/threshold_body_size_slowdown)
|
||||||
|
if(features["body_size"] < danger)
|
||||||
|
var/slowdown = 1 + round(danger/features["body_size"], 0.1) * CONFIG_GET(number/body_size_slowdown_multiplier)
|
||||||
|
holder.add_movespeed_modifier(MOVESPEED_ID_SMALL_STRIDE, TRUE, 100, NONE, TRUE, slowdown, ALL, FLOATING|CRAWLING)
|
||||||
|
else if(old_size < danger)
|
||||||
|
holder.remove_movespeed_modifier(MOVESPEED_ID_SMALL_STRIDE)
|
||||||
|
|||||||
@@ -150,7 +150,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
|||||||
"ipc_antenna" = "None",
|
"ipc_antenna" = "None",
|
||||||
"flavor_text" = "",
|
"flavor_text" = "",
|
||||||
"meat_type" = "Mammalian",
|
"meat_type" = "Mammalian",
|
||||||
"body_model" = MALE
|
"body_model" = MALE,
|
||||||
|
"body_size" = RESIZE_DEFAULT_SIZE
|
||||||
)
|
)
|
||||||
|
|
||||||
var/list/custom_names = list()
|
var/list/custom_names = list()
|
||||||
@@ -379,6 +380,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
|||||||
dat += "<span style='border: 1px solid #161616; background-color: #[features["mcolor3"]];'> </span> <a href='?_src_=prefs;preference=mutant_color3;task=input'>Change</a><BR>"
|
dat += "<span style='border: 1px solid #161616; background-color: #[features["mcolor3"]];'> </span> <a href='?_src_=prefs;preference=mutant_color3;task=input'>Change</a><BR>"
|
||||||
mutant_colors = TRUE
|
mutant_colors = TRUE
|
||||||
|
|
||||||
|
if (CONFIG_GET(number/body_size_min) != CONFIG_GET(number/body_size_max))
|
||||||
|
dat += "<b>Sprite Size:</b> <a href='?_src_=prefs;preference=bodysize;task=input'>[features["body_size"]]%</a><br>"
|
||||||
|
|
||||||
if((EYECOLOR in pref_species.species_traits) && !(NOEYES in pref_species.species_traits))
|
if((EYECOLOR in pref_species.species_traits) && !(NOEYES in pref_species.species_traits))
|
||||||
|
|
||||||
if(!use_skintones && !mutant_colors)
|
if(!use_skintones && !mutant_colors)
|
||||||
@@ -2191,6 +2195,21 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
|||||||
if("body_model")
|
if("body_model")
|
||||||
features["body_model"] = features["body_model"] == MALE ? FEMALE : MALE
|
features["body_model"] = features["body_model"] == MALE ? FEMALE : MALE
|
||||||
|
|
||||||
|
if("bodysize")
|
||||||
|
var/min = CONFIG_GET(number/body_size_min)
|
||||||
|
var/max = CONFIG_GET(number/body_size_max)
|
||||||
|
var/danger = CONFIG_GET(number/threshold_body_size_slowdown)
|
||||||
|
var/new_bodysize = input(user, "Choose your desired sprite size:\n([min*100]%-[max*100]%), Warning: May make your character look distorted[danger > min ? ", and an exponential slowdown will occur for those smaller than [danger*100]%!" : "!"]", "Character Preference", features["body_size"]*100) as num|null
|
||||||
|
if (new_bodysize)
|
||||||
|
new_bodysize = CLAMP(new_bodysize * 0.01, min, max)
|
||||||
|
var/dorfy
|
||||||
|
if(danger > new_bodysize)
|
||||||
|
dorfy = alert(user, "The chosen size appears to be smaller than the threshold of [danger*100]%, which will lead to an added exponential slowdown. Are you sure about that?", "Dwarfism Alert", "Yes", "Move it to the threshold", "No")
|
||||||
|
if(!dorfy || dorfy == "Move it above the threshold")
|
||||||
|
new_bodysize = danger
|
||||||
|
if(dorfy != "No")
|
||||||
|
features["body_size"] = new_bodysize
|
||||||
|
|
||||||
if("hotkeys")
|
if("hotkeys")
|
||||||
hotkeys = !hotkeys
|
hotkeys = !hotkeys
|
||||||
if(hotkeys)
|
if(hotkeys)
|
||||||
@@ -2431,6 +2450,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
|||||||
pref_species = new /datum/species/human
|
pref_species = new /datum/species/human
|
||||||
save_character()
|
save_character()
|
||||||
|
|
||||||
|
var/old_size = character.dna.features["body_size"]
|
||||||
|
|
||||||
character.dna.features = features.Copy()
|
character.dna.features = features.Copy()
|
||||||
character.set_species(chosen_species, icon_update = FALSE, pref_load = TRUE)
|
character.set_species(chosen_species, icon_update = FALSE, pref_load = TRUE)
|
||||||
character.dna.real_name = character.real_name
|
character.dna.real_name = character.real_name
|
||||||
@@ -2452,6 +2473,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
|||||||
|
|
||||||
character.give_genitals(TRUE) //character.update_genitals() is already called on genital.update_appearance()
|
character.give_genitals(TRUE) //character.update_genitals() is already called on genital.update_appearance()
|
||||||
|
|
||||||
|
character.dna.update_body_size(old_size)
|
||||||
|
|
||||||
SEND_SIGNAL(character, COMSIG_HUMAN_PREFS_COPIED_TO, src, icon_updates, roundstart_checks)
|
SEND_SIGNAL(character, COMSIG_HUMAN_PREFS_COPIED_TO, src, icon_updates, roundstart_checks)
|
||||||
|
|
||||||
//let's be sure the character updates
|
//let's be sure the character updates
|
||||||
|
|||||||
@@ -395,6 +395,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
|||||||
S["body_is_always_random"] >> be_random_body
|
S["body_is_always_random"] >> be_random_body
|
||||||
S["gender"] >> gender
|
S["gender"] >> gender
|
||||||
S["body_model"] >> features["body_model"]
|
S["body_model"] >> features["body_model"]
|
||||||
|
S["body_size"] >> features["body_size"]
|
||||||
S["age"] >> age
|
S["age"] >> age
|
||||||
S["hair_color"] >> hair_color
|
S["hair_color"] >> hair_color
|
||||||
S["facial_hair_color"] >> facial_hair_color
|
S["facial_hair_color"] >> facial_hair_color
|
||||||
@@ -568,6 +569,14 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
|||||||
features["insect_markings"] = sanitize_inlist(features["insect_markings"], GLOB.insect_markings_list, "None")
|
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["insect_wings"] = sanitize_inlist(features["insect_wings"], GLOB.insect_wings_list)
|
||||||
|
|
||||||
|
var/static/size_min
|
||||||
|
if(!size_min)
|
||||||
|
size_min = CONFIG_GET(number/body_size_min)
|
||||||
|
var/static/size_max
|
||||||
|
if(!size_max)
|
||||||
|
size_max = CONFIG_GET(number/body_size_max)
|
||||||
|
features["body_size"] = sanitize_integer(features["body_size"], size_min, size_max, RESIZE_DEFAULT_SIZE)
|
||||||
|
|
||||||
var/static/list/B_sizes
|
var/static/list/B_sizes
|
||||||
if(!B_sizes)
|
if(!B_sizes)
|
||||||
var/list/L = CONFIG_GET(keyed_list/breasts_cups_prefs)
|
var/list/L = CONFIG_GET(keyed_list/breasts_cups_prefs)
|
||||||
@@ -643,6 +652,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
|||||||
WRITE_FILE(S["body_is_always_random"] , be_random_body)
|
WRITE_FILE(S["body_is_always_random"] , be_random_body)
|
||||||
WRITE_FILE(S["gender"] , gender)
|
WRITE_FILE(S["gender"] , gender)
|
||||||
WRITE_FILE(S["body_model"] , features["body_model"])
|
WRITE_FILE(S["body_model"] , features["body_model"])
|
||||||
|
WRITE_FILE(S["body_size"] , features["body_size"])
|
||||||
WRITE_FILE(S["age"] , age)
|
WRITE_FILE(S["age"] , age)
|
||||||
WRITE_FILE(S["hair_color"] , hair_color)
|
WRITE_FILE(S["hair_color"] , hair_color)
|
||||||
WRITE_FILE(S["facial_hair_color"] , facial_hair_color)
|
WRITE_FILE(S["facial_hair_color"] , facial_hair_color)
|
||||||
|
|||||||
@@ -620,3 +620,15 @@ BREASTS_CUPS_PREFS e
|
|||||||
## Minimum and maximum limits for penis length from the character creation menu.
|
## Minimum and maximum limits for penis length from the character creation menu.
|
||||||
PENIS_MIN_INCHES_PREFS 1
|
PENIS_MIN_INCHES_PREFS 1
|
||||||
PENIS_MAX_INCHES_PREFS 20
|
PENIS_MAX_INCHES_PREFS 20
|
||||||
|
|
||||||
|
## Body size configs, the feature will be disabled if both min and max have the same value.
|
||||||
|
BODY_SIZE_MIN 1
|
||||||
|
BODY_SIZE_MAX 1
|
||||||
|
|
||||||
|
## Pun-Pun slowdown for characters smaller than this thanks shorter strides.
|
||||||
|
## Set to a value below BODY_SIZE_MIN to disable it.
|
||||||
|
THRESHOLD_BODY_SIZE_SLOWDOWN 0.85
|
||||||
|
|
||||||
|
## Multiplier used in the smaller strides slowdown calculation.
|
||||||
|
## Doesn't apply to floating or crawling mobs.
|
||||||
|
BODY_SIZE_SLOWDOWN_MULTIPLIER 0.25
|
||||||
Reference in New Issue
Block a user