mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-09 16:12:17 +00:00
[MIRROR] Convert preferences to /tg/ preferences (#9797)
Co-authored-by: ShadowLarkens <shadowlarkens@gmail.com> Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
689b354903
commit
039ee85382
@@ -29,6 +29,7 @@
|
||||
|
||||
// For the client FPS pref and anywhere else
|
||||
#define MAX_CLIENT_FPS 200
|
||||
#define RECOMMENDED_FPS 100
|
||||
|
||||
// Some arbitrary defines to be used by self-pruning global lists. (see master_controller)
|
||||
#define MAX_GEAR_COST 15 // Used in chargen for accessory loadout limit.
|
||||
|
||||
@@ -16,6 +16,15 @@
|
||||
|
||||
#define SAVE_RESET -1
|
||||
|
||||
//randomised elements
|
||||
#define RANDOM_ANTAG_ONLY 1
|
||||
#define RANDOM_DISABLED 2
|
||||
#define RANDOM_ENABLED 3
|
||||
|
||||
// randomise_appearance_prefs() and randomize_human_appearance() proc flags
|
||||
#define RANDOMIZE_SPECIES (1<<0)
|
||||
#define RANDOMIZE_NAME (1<<1)
|
||||
|
||||
// Values for /datum/preference/savefile_identifier
|
||||
/// This preference is character specific.
|
||||
#define PREFERENCE_CHARACTER "character"
|
||||
|
||||
@@ -15,3 +15,5 @@ GLOBAL_LIST_INIT(char_directory_sexualitytags, list("Straight", "Bisexual", "Pan
|
||||
GLOBAL_LIST_INIT(char_directory_gendertags, list("Male", "Female", "Nonbinary", "Trans Man", "Trans Woman", "Other", "Ungendered", "Unset"))
|
||||
// CHOMPStation Edit End: Directory Update
|
||||
GLOBAL_LIST_EMPTY(crafting_recipes) //list of all table craft recipes
|
||||
|
||||
GLOBAL_LIST_INIT(uplink_locations, list("PDA", "Headset", "None"))
|
||||
|
||||
@@ -974,6 +974,13 @@ var/global/list/json_cache = list()
|
||||
new_value = deep_copy_list_alt(value)
|
||||
copied_list[key_or_value] = new_value
|
||||
|
||||
/// Turns an associative list into a flat list of keys
|
||||
/proc/assoc_to_keys(list/input)
|
||||
var/list/keys = list()
|
||||
for(var/key in input)
|
||||
UNTYPED_LIST_ADD(keys, key)
|
||||
return keys
|
||||
|
||||
//CHOMPAdd start
|
||||
/proc/pick_weight(list/list_to_pick)
|
||||
var/total = 0
|
||||
|
||||
@@ -374,7 +374,7 @@ Proc for attack log creation, because really why not
|
||||
cached_character_icons[cachekey] = .
|
||||
|
||||
/proc/not_has_ooc_text(mob/user)
|
||||
if (CONFIG_GET(flag/allow_metadata) && (!user.client?.prefs?.metadata || length(user.client.prefs.metadata) < 15))
|
||||
if (CONFIG_GET(flag/allow_metadata) && (!user.client?.prefs?.read_preference(/datum/preference/text/living/ooc_notes) || length(user.client.prefs.read_preference(/datum/preference/text/living/ooc_notes)) < 15))
|
||||
to_chat(user, span_warning("Please set informative OOC notes related to RP/ERP preferences. Set them using the 'OOC Notes' button on the 'General' tab in character setup."))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
@@ -631,5 +631,5 @@ GLOBAL_LIST_EMPTY(text_tag_cache)
|
||||
|
||||
/// Removes all non-alphanumerics from the text, keep in mind this can lead to id conflicts
|
||||
/proc/sanitize_css_class_name(name)
|
||||
var/static/regex/regex = new(@"[^a-zA-Z0-9]","g")
|
||||
return replacetext(name, regex, "")
|
||||
var/static/regex/regex = new(@"[^a-zA-Z0-9]","g")
|
||||
return replacetext(name, regex, "")
|
||||
|
||||
@@ -361,15 +361,51 @@ var/list/global_huds = list(
|
||||
if(!client)
|
||||
return 0
|
||||
|
||||
HUD.ui_style = ui_style2icon(client?.prefs?.UI_style)
|
||||
HUD.ui_color = client?.prefs?.UI_style_color
|
||||
HUD.ui_alpha = client?.prefs?.UI_style_alpha
|
||||
HUD.ui_style = ui_style2icon(read_preference(/datum/preference/choiced/ui_style))
|
||||
HUD.ui_color = read_preference(/datum/preference/color/ui_style_color)
|
||||
HUD.ui_alpha = read_preference(/datum/preference/numeric/ui_style_alpha)
|
||||
set_hud_used(HUD)
|
||||
|
||||
/mob/proc/set_hud_used(datum/hud/new_hud)
|
||||
hud_used = new_hud
|
||||
new_hud.build_action_groups()
|
||||
|
||||
/mob/proc/update_ui_style(UI_style_new, UI_style_alpha_new, UI_style_color_new)
|
||||
if(!hud_used)
|
||||
return
|
||||
|
||||
if(!UI_style_alpha_new)
|
||||
UI_style_alpha_new = hud_used.ui_alpha
|
||||
hud_used.ui_alpha = UI_style_alpha_new
|
||||
if(!UI_style_color_new)
|
||||
UI_style_color_new = hud_used.ui_color
|
||||
hud_used.ui_color = UI_style_color_new
|
||||
|
||||
var/list/icons = hud_used.adding + hud_used.other + hud_used.hotkeybuttons
|
||||
icons.Add(zone_sel)
|
||||
icons.Add(gun_setting_icon)
|
||||
icons.Add(item_use_icon)
|
||||
icons.Add(gun_move_icon)
|
||||
icons.Add(radio_use_icon)
|
||||
|
||||
var/icon/ic
|
||||
|
||||
if(UI_style_new)
|
||||
if(isrobot(src))
|
||||
ic = all_ui_styles_robot[UI_style_new]
|
||||
else
|
||||
ic = all_ui_styles[UI_style_new]
|
||||
hud_used.ui_style = ic
|
||||
else
|
||||
ic = hud_used.ui_style
|
||||
|
||||
for(var/obj/screen/I in icons)
|
||||
if(I.name in list(I_HELP, I_HURT, I_DISARM, I_GRAB))
|
||||
continue
|
||||
I.icon = ic
|
||||
I.color = UI_style_color_new
|
||||
I.alpha = UI_style_alpha_new
|
||||
|
||||
/datum/hud/proc/apply_minihud(var/datum/mini_hud/MH)
|
||||
if(MH in minihuds)
|
||||
return
|
||||
|
||||
@@ -115,21 +115,23 @@ var/datum/antagonist/traitor/traitors
|
||||
var/loc = ""
|
||||
var/obj/item/R = locate() //Hide the uplink in a PDA if available, otherwise radio
|
||||
|
||||
if(traitor_mob.client.prefs.uplinklocation == "Headset")
|
||||
var/uplinklocation = traitor_mob.read_preference(/datum/preference/choiced/uplinklocation)
|
||||
|
||||
if(uplinklocation == "Headset")
|
||||
R = locate(/obj/item/radio) in traitor_mob.contents
|
||||
if(!R)
|
||||
R = locate(/obj/item/pda) in traitor_mob.contents
|
||||
to_chat(traitor_mob, "Could not locate a Radio, installing in PDA instead!")
|
||||
if (!R)
|
||||
to_chat(traitor_mob, "Unfortunately, neither a radio or a PDA relay could be installed.")
|
||||
else if(traitor_mob.client.prefs.uplinklocation == "PDA")
|
||||
else if(uplinklocation == "PDA")
|
||||
R = locate(/obj/item/pda) in traitor_mob.contents
|
||||
if(!R)
|
||||
R = locate(/obj/item/radio) in traitor_mob.contents
|
||||
to_chat(traitor_mob, "Could not locate a PDA, installing into a Radio instead!")
|
||||
if(!R)
|
||||
to_chat(traitor_mob, "Unfortunately, neither a radio or a PDA relay could be installed.")
|
||||
else if(traitor_mob.client.prefs.uplinklocation == "None")
|
||||
else if(uplinklocation == "None")
|
||||
to_chat(traitor_mob, "You have elected to not have an AntagCorp portable teleportation relay installed!")
|
||||
R = null
|
||||
else
|
||||
|
||||
@@ -420,7 +420,7 @@ var/list/mob/living/forced_ambiance_list = new
|
||||
else
|
||||
L << sound(null, channel = CHANNEL_AMBIENCE_FORCED)
|
||||
else if(src.ambience && src.ambience.len)
|
||||
var/ambience_odds = L?.client.prefs.ambience_chance
|
||||
var/ambience_odds = L.read_preference(/datum/preference/numeric/ambience_chance)
|
||||
if(prob(ambience_odds) && (world.time >= L.client.time_last_ambience_played + 1 MINUTE))
|
||||
var/sound = pick(ambience)
|
||||
L << sound(sound, repeat = 0, wait = 0, volume = 50 * volume_mod, channel = CHANNEL_AMBIENCE)
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
/mob/living/carbon/human/proc/consider_birthday()
|
||||
if(!bday_month || !bday_day) //If we don't have one of these set, don't worry about it
|
||||
var/bday_month = read_preference(/datum/preference/numeric/human/bday_month)
|
||||
var/bday_day = read_preference(/datum/preference/numeric/human/bday_day)
|
||||
if(!bday_month || !bday_day) //If we don't have one of these set, don't worry about it
|
||||
return
|
||||
if(real_name != client.prefs.real_name) //let's not celebrate the birthday of that weird mob we got dropped into
|
||||
return
|
||||
if(!(client.prefs.last_birthday_notification < GLOB.world_time_year)) //you only get notified once a year // CHOMPEdit - Managed Globals
|
||||
|
||||
if(!(read_preference(/datum/preference/numeric/human/last_bday_note) < GLOB.world_time_year)) //you only get notified once a year // CHOMPEdit - Managed Globals
|
||||
return
|
||||
if((GLOB.world_time_month == bday_month) && (GLOB.world_time_day == bday_day)) //it is your birthday // CHOMPEdit - Managed Globals
|
||||
birthday(1)
|
||||
@@ -14,25 +17,25 @@
|
||||
|
||||
/mob/living/carbon/human/proc/birthday(var/birthday = 0)
|
||||
var/msg
|
||||
var/lastyear = client.prefs.last_birthday_notification
|
||||
client.prefs.last_birthday_notification = GLOB.world_time_year //We only want to ask once a year per character, this persists, update early in case of shenanigans // CHOMPEdit - Managed Globals
|
||||
var/lastyear = read_preference(/datum/preference/numeric/human/last_bday_note)
|
||||
write_preference_directly(/datum/preference/numeric/human/last_bday_note, GLOB.world_time_year) //We only want to ask once a year per character, this persists, update early in case of shenanigans // CHOMPEdit - Managed Globals
|
||||
if(birthday) //woo
|
||||
msg = "Today is your birthday! Do you want to increase your character's listed age?"
|
||||
/* //Chomp DISABLE - Absolutely not.
|
||||
if(client.prefs.bday_announce)
|
||||
if(read_preference(/datum/preference/toggle/human/bday_announce))
|
||||
var/list/sounds = list('sound/voice/BIRTH.ogg')
|
||||
var/oursound = pickweight(sounds)
|
||||
command_announcement.Announce("Confirmed presence of BIRTHDAY aboard the station! It is [src.real_name]'s birthday or similar sort of celebration, name day, hatchday, WHATEVER! We encourage you to go find [src.real_name] and show them how we celebrate around here! Have a secure day!", "BIRTHDAY!", oursound)
|
||||
*/ //Chomp DISABLE END
|
||||
else
|
||||
msg = "Your birthday has passed! Do you want to increase your character's listed age?" //sad, but thus is the life of an adult
|
||||
if(tgui_alert(src, msg,"BIRTHDAY! ([bday_month]/[bday_day])",list("Level me up, baby","No way, I'mma stay young forever")) == "Level me up, baby")
|
||||
if(tgui_alert(src, msg,"BIRTHDAY! ([read_preference(/datum/preference/numeric/human/bday_month)]/[read_preference(/datum/preference/numeric/human/bday_day)])",list("Level me up, baby","No way, I'mma stay young forever")) == "Level me up, baby")
|
||||
if(lastyear == 0) //We've never been asked, so let's just assume you were keeping track before now and only add 1
|
||||
age += 1
|
||||
else
|
||||
var/howmuch = GLOB.world_time_year - lastyear // CHOMPEdit - Managed Globals
|
||||
age += howmuch
|
||||
to_chat(src, span_notice("You are now [age]! Happy birthday!"))
|
||||
client.prefs.age = age //Set the age on the character sheet
|
||||
write_preference_directly(/datum/preference/numeric/human/age, age) //Set the age on the character sheet
|
||||
|
||||
client.prefs.save_character() //Save the info
|
||||
|
||||
@@ -50,7 +50,7 @@ var/global/datum/controller/occupations/job_master
|
||||
var/datum/job/job = GetJob(rank)
|
||||
if(!job)
|
||||
return 0
|
||||
if((job.minimum_character_age || job.min_age_by_species) && (player.client.prefs.age < job.get_min_age(player.client.prefs.species, player.client.prefs.organ_data["brain"])))
|
||||
if((job.minimum_character_age || job.min_age_by_species) && (player.read_preference(/datum/preference/numeric/human/age) < job.get_min_age(player.client.prefs.species, player.client.prefs.organ_data["brain"])))
|
||||
return 0
|
||||
if(jobban_isbanned(player, rank))
|
||||
return 0
|
||||
@@ -106,7 +106,7 @@ var/global/datum/controller/occupations/job_master
|
||||
if(!job.player_old_enough(player.client))
|
||||
Debug("FOC player not old enough, Player: [player]")
|
||||
continue
|
||||
if(job.minimum_character_age && (player.client.prefs.age < job.get_min_age(player.client.prefs.species, player.client.prefs.organ_data["brain"])))
|
||||
if(job.minimum_character_age && (player.read_preference(/datum/preference/numeric/human/age) < job.get_min_age(player.client.prefs.species, player.client.prefs.organ_data["brain"])))
|
||||
Debug("FOC character not old enough, Player: [player]")
|
||||
continue
|
||||
//VOREStation Code Start
|
||||
@@ -134,7 +134,7 @@ var/global/datum/controller/occupations/job_master
|
||||
if(!job)
|
||||
continue
|
||||
|
||||
if((job.minimum_character_age || job.min_age_by_species) && (player.client.prefs.age < job.get_min_age(player.client.prefs.species, player.client.prefs.organ_data["brain"])))
|
||||
if((job.minimum_character_age || job.min_age_by_species) && (player.read_preference(/datum/preference/numeric/human/age) < job.get_min_age(player.client.prefs.species, player.client.prefs.organ_data["brain"])))
|
||||
continue
|
||||
|
||||
if(job.is_species_banned(player.client.prefs.species, player.client.prefs.organ_data["brain"]) == TRUE)
|
||||
@@ -193,7 +193,7 @@ var/global/datum/controller/occupations/job_master
|
||||
for(var/mob/V in candidates)
|
||||
// Log-out during round-start? What a bad boy, no head position for you!
|
||||
if(!V.client) continue
|
||||
var/age = V.client.prefs.age
|
||||
var/age = V.read_preference(/datum/preference/numeric/human/age)
|
||||
|
||||
if(age < job.get_min_age(V.client.prefs.species, V.client.prefs.organ_data["brain"])) // Nope.
|
||||
continue
|
||||
@@ -682,8 +682,8 @@ var/global/datum/controller/occupations/job_master
|
||||
//CHOMPEdit - Remove fail_deadly addition on offmap_spawn
|
||||
|
||||
//Spawn them at their preferred one
|
||||
if(C && C.prefs.spawnpoint)
|
||||
if(C.prefs.spawnpoint == "Vorespawn - Prey")
|
||||
if(C && C.prefs.read_preference(/datum/preference/choiced/living/spawnpoint))
|
||||
if(C.prefs.read_preference(/datum/preference/choiced/living/spawnpoint) == "Vorespawn - Prey")
|
||||
var/list/preds = list()
|
||||
var/list/pred_names = list() //This is cringe
|
||||
for(var/client/V in GLOB.clients)
|
||||
@@ -778,8 +778,8 @@ var/global/datum/controller/occupations/job_master
|
||||
else
|
||||
to_chat(C, span_warning("No predators were available to accept you."))
|
||||
return
|
||||
spawnpos = spawntypes[C.prefs.spawnpoint]
|
||||
if(C.prefs.spawnpoint == "Vorespawn - Pred") //Same as above, but in reverse!
|
||||
spawnpos = spawntypes[C.prefs.read_preference(/datum/preference/choiced/living/spawnpoint)]
|
||||
if(C.prefs.read_preference(/datum/preference/choiced/living/spawnpoint) == "Vorespawn - Pred") //Same as above, but in reverse!
|
||||
var/list/preys = list()
|
||||
var/list/prey_names = list() //This is still cringe
|
||||
for(var/client/V in GLOB.clients)
|
||||
@@ -855,7 +855,7 @@ var/global/datum/controller/occupations/job_master
|
||||
to_chat(C, span_warning("No prey were available to accept you."))
|
||||
return
|
||||
//CHOMPEdit - Item TF spawnpoints!
|
||||
else if(C.prefs.spawnpoint == "Item TF spawn")
|
||||
else if(C.prefs.read_preference(/datum/preference/choiced/living/spawnpoint) == "Item TF spawn")
|
||||
var/list/items = list()
|
||||
var/list/item_names = list()
|
||||
var/list/carriers = list()
|
||||
@@ -956,15 +956,15 @@ var/global/datum/controller/occupations/job_master
|
||||
return
|
||||
//CHOMPEdit End
|
||||
else
|
||||
if(!(C.prefs.spawnpoint in using_map.allowed_spawns))
|
||||
if(!(C.prefs.read_preference(/datum/preference/choiced/living/spawnpoint) in using_map.allowed_spawns))
|
||||
if(fail_deadly)
|
||||
to_chat(C, span_warning("Your chosen spawnpoint is unavailable for this map and your job requires a specific spawnpoint. Please correct your spawn point choice."))
|
||||
return
|
||||
else
|
||||
to_chat(C, span_warning("Your chosen spawnpoint ([C.prefs.spawnpoint]) is unavailable for the current map. Spawning you at one of the enabled spawn points instead."))
|
||||
to_chat(C, span_warning("Your chosen spawnpoint ([C.prefs.read_preference(/datum/preference/choiced/living/spawnpoint)]) is unavailable for the current map. Spawning you at one of the enabled spawn points instead."))
|
||||
spawnpos = null
|
||||
else
|
||||
spawnpos = spawntypes[C.prefs.spawnpoint]
|
||||
spawnpos = spawntypes[C.prefs.read_preference(/datum/preference/choiced/living/spawnpoint)]
|
||||
|
||||
//We will return a list key'd by "turf" and "msg"
|
||||
. = list("turf","msg", "voreny", "prey", "itemtf", "vorgans", "carrier") //CHOMPEdit - Item TF spawnpoints, spawn as mob
|
||||
|
||||
@@ -35,7 +35,6 @@ var/list/admin_verbs_admin = list(
|
||||
/datum/admins/proc/announce, //priority announce something to all clients.,
|
||||
/datum/admins/proc/intercom, //send a fake intercom message, like an arrivals announcement,
|
||||
/datum/admins/proc/intercom_convo, //send a fake intercom conversation, like an ATC exchange,
|
||||
/client/proc/colorooc, //allows us to set a custom colour for everythign we say in ooc,
|
||||
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
|
||||
/datum/admins/proc/show_player_panel, //shows an interface for individual players, with various links (links require additional flags, //VOREStation Add,
|
||||
/client/proc/player_panel_new, //shows an interface for all players, with links to various panels, //VOREStation Add,
|
||||
@@ -325,7 +324,6 @@ var/list/admin_verbs_hideable = list(
|
||||
/datum/admins/proc/toggleenter,
|
||||
/datum/admins/proc/toggleguests,
|
||||
/datum/admins/proc/announce,
|
||||
/client/proc/colorooc,
|
||||
/client/proc/admin_ghost,
|
||||
/client/proc/toggle_view_range,
|
||||
/datum/admins/proc/view_txt_log,
|
||||
@@ -415,7 +413,6 @@ var/list/admin_verbs_mod = list(
|
||||
/client/proc/cmd_event_say,
|
||||
/datum/admins/proc/show_player_info,
|
||||
/datum/admins/proc/show_traitor_panel,
|
||||
/client/proc/colorooc,
|
||||
/client/proc/player_panel_new,
|
||||
/client/proc/dsay,
|
||||
/datum/admins/proc/show_player_panel,
|
||||
@@ -512,7 +509,6 @@ var/list/admin_verbs_event_manager = list(
|
||||
/datum/admins/proc/announce, //priority announce something to all clients.,
|
||||
/datum/admins/proc/intercom, //send a fake intercom message, like an arrivals announcement,
|
||||
/datum/admins/proc/intercom_convo, //send a fake intercom conversation, like an ATC exchange,
|
||||
/client/proc/colorooc, //allows us to set a custom colour for everythign we say in ooc,
|
||||
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
|
||||
/client/proc/toggle_view_range, //changes how far we can see,
|
||||
/client/proc/cmd_admin_pm_context, //right-click adminPM interface,
|
||||
|
||||
@@ -159,20 +159,6 @@
|
||||
feedback_add_details("admin_verb","S") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
/client/proc/colorooc()
|
||||
set category = "Admin.Misc"
|
||||
set name = "OOC Text Color"
|
||||
if(!holder) return
|
||||
var/response = tgui_alert(src, "Please choose a distinct color that is easy to read and doesn't mix with all the other chat and radio frequency colors.", "Change own OOC color", list("Pick new color", "Reset to default", "Cancel"))
|
||||
if(response == "Pick new color")
|
||||
prefs.ooccolor = input(src, "Please select your OOC colour.", "OOC colour") as color
|
||||
else if(response == "Reset to default")
|
||||
prefs.ooccolor = initial(prefs.ooccolor)
|
||||
SScharacter_setup.queue_preferences_save(prefs)
|
||||
|
||||
feedback_add_details("admin_verb","OC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
/client/proc/findStealthKey(txt)
|
||||
if(txt)
|
||||
for(var/P in GLOB.stealthminID)
|
||||
|
||||
@@ -1,3 +1,44 @@
|
||||
/// Assets generated from `/datum/preference` icons
|
||||
/datum/asset/spritesheet/preferences
|
||||
name = "preferences"
|
||||
early = TRUE
|
||||
|
||||
/datum/asset/spritesheet/preferences/create_spritesheets()
|
||||
var/list/to_insert = list()
|
||||
|
||||
for(var/preference_key in GLOB.preference_entries_by_key)
|
||||
var/datum/preference/choiced/preference = GLOB.preference_entries_by_key[preference_key]
|
||||
if(!istype(preference))
|
||||
continue
|
||||
|
||||
if(!preference.should_generate_icons)
|
||||
continue
|
||||
|
||||
for(var/preference_value in preference.get_choices())
|
||||
var/create_icon_of = preference.icon_for(preference_value)
|
||||
|
||||
var/icon/icon
|
||||
var/icon_state
|
||||
|
||||
if(ispath(create_icon_of, /atom))
|
||||
var/atom/atom_icon_source = create_icon_of
|
||||
icon = initial(atom_icon_source.icon)
|
||||
icon_state = initial(atom_icon_source.icon_state)
|
||||
else if(isicon(create_icon_of))
|
||||
icon = create_icon_of
|
||||
else
|
||||
CRASH("[create_icon_of] is an invalid preference value (from [preference_key]:[preference_value]).")
|
||||
|
||||
to_insert[preference.get_spritesheet_key(preference.pref_serialize(preference_value))] = list(icon, icon_state)
|
||||
|
||||
for(var/spritesheet_key in to_insert)
|
||||
var/list/inserting = to_insert[spritesheet_key]
|
||||
Insert(spritesheet_key, inserting[1], inserting[2])
|
||||
|
||||
/// Returns the key that will be used in the spritesheet for a given value.
|
||||
/datum/preference/proc/get_spritesheet_key(value)
|
||||
return "[savefile_key]___[sanitize_css_class_name(value)]"
|
||||
|
||||
/// Sends information needed for shared details on individual preferences
|
||||
/datum/asset/json/preferences
|
||||
name = "preferences"
|
||||
|
||||
@@ -292,12 +292,13 @@
|
||||
void = new()
|
||||
screen += void
|
||||
|
||||
//disabled because we don't use the ingame changelog system any more // CHOMPEdit: Enabled because we do
|
||||
// CHOMPAdd Start
|
||||
if((prefs.lastchangelog != changelog_hash) && isnewplayer(src.mob)) //bolds the changelog button on the interface so we know there are updates.
|
||||
to_chat(src, span_info("You have unread updates in the changelog."))
|
||||
winset(src, "rpane.changelog", "background-color=#eaeaea;font-style=bold")
|
||||
if(CONFIG_GET(flag/aggressive_changelog)) // CHOMPEdit
|
||||
if(CONFIG_GET(flag/aggressive_changelog))
|
||||
src.changes()
|
||||
// CHOMPAdd End
|
||||
|
||||
if(CONFIG_GET(flag/paranoia_logging))
|
||||
var/alert = FALSE //VOREStation Edit start.
|
||||
|
||||
@@ -1,23 +1,18 @@
|
||||
var/global/list/uplink_locations = list("PDA", "Headset", "None")
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic
|
||||
name = "Basic"
|
||||
sort_order = 1
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic/load_character(list/save_data)
|
||||
pref.uplinklocation = save_data["uplinklocation"]
|
||||
pref.exploit_record = save_data["exploit_record"]
|
||||
pref.antag_faction = save_data["antag_faction"]
|
||||
pref.antag_vis = save_data["antag_vis"]
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic/save_character(list/save_data)
|
||||
save_data["uplinklocation"] = pref.uplinklocation
|
||||
save_data["exploit_record"] = pref.exploit_record
|
||||
save_data["antag_faction"] = pref.antag_faction
|
||||
save_data["antag_vis"] = pref.antag_vis
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic/sanitize_character()
|
||||
pref.uplinklocation = sanitize_inlist(pref.uplinklocation, uplink_locations, initial(pref.uplinklocation))
|
||||
if(!pref.antag_faction) pref.antag_faction = "None"
|
||||
if(!pref.antag_vis) pref.antag_vis = "Hidden"
|
||||
|
||||
@@ -30,7 +25,7 @@ var/global/list/uplink_locations = list("PDA", "Headset", "None")
|
||||
/datum/category_item/player_setup_item/antagonism/basic/content(var/mob/user)
|
||||
. += "Faction: <a href='byond://?src=\ref[src];antagfaction=1'>[pref.antag_faction]</a><br/>"
|
||||
. += "Visibility: <a href='byond://?src=\ref[src];antagvis=1'>[pref.antag_vis]</a><br/>"
|
||||
. +=span_bold("Uplink Type : <a href='byond://?src=\ref[src];antagtask=1'>[pref.uplinklocation]</a>")
|
||||
. += span_bold("Uplink Type:") + " <a href='byond://?src=\ref[src];antagtask=1'>[pref.read_preference(/datum/preference/choiced/uplinklocation)]</a>"
|
||||
. +="<br>"
|
||||
. +=span_bold("Exploitable information:") + "<br>"
|
||||
if(jobban_isbanned(user, "Records"))
|
||||
@@ -39,8 +34,10 @@ var/global/list/uplink_locations = list("PDA", "Headset", "None")
|
||||
. +="<a href='byond://?src=\ref[src];exploitable_record=1'>[TextPreview(pref.exploit_record,40)]</a><br>"
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
if (href_list["antagtask"])
|
||||
pref.uplinklocation = next_in_list(pref.uplinklocation, uplink_locations)
|
||||
if(href_list["uplinklocation"])
|
||||
var/new_uplinklocation = tgui_input_list(user, "Choose your uplink location:", "Character Preference", GLOB.uplink_locations, pref.read_preference(/datum/preference/choiced/uplinklocation))
|
||||
if(new_uplinklocation && CanUseTopic(user))
|
||||
pref.update_preference_by_type(/datum/preference/choiced/uplinklocation, new_uplinklocation)
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if(href_list["exploitable_record"])
|
||||
|
||||
@@ -13,58 +13,22 @@
|
||||
/datum/category_item/player_setup_item/general/basic/load_character(list/save_data)
|
||||
pref.real_name = save_data["real_name"]
|
||||
pref.nickname = save_data["nickname"]
|
||||
pref.be_random_name = save_data["name_is_always_random"]
|
||||
pref.biological_gender = save_data["gender"]
|
||||
pref.identifying_gender = save_data["id_gender"]
|
||||
pref.age = save_data["age"]
|
||||
pref.bday_month = save_data["bday_month"]
|
||||
pref.bday_day = save_data["bday_day"]
|
||||
pref.last_birthday_notification = save_data["last_bday_note"]
|
||||
pref.bday_announce = save_data["bday_announce"]
|
||||
pref.spawnpoint = save_data["spawnpoint"]
|
||||
pref.metadata = save_data["OOC_Notes"]
|
||||
pref.metadata_likes = save_data["OOC_Notes_Likes"]
|
||||
pref.metadata_dislikes = save_data["OOC_Notes_Disikes"]
|
||||
//CHOMPAdd Start
|
||||
pref.metadata_maybes = save_data["OOC_Notes_Maybes"]
|
||||
pref.metadata_favs = save_data["OOC_Notes_Favs"]
|
||||
pref.matadata_ooc_style = save_data["OOC_Notes_System"]
|
||||
//CHOMPAdd End
|
||||
|
||||
/datum/category_item/player_setup_item/general/basic/save_character(list/save_data)
|
||||
save_data["real_name"] = pref.real_name
|
||||
save_data["nickname"] = pref.nickname
|
||||
save_data["name_is_always_random"] = pref.be_random_name
|
||||
save_data["gender"] = pref.biological_gender
|
||||
save_data["id_gender"] = pref.identifying_gender
|
||||
save_data["age"] = pref.age
|
||||
save_data["bday_month"] = pref.bday_month
|
||||
save_data["bday_day"] = pref.bday_day
|
||||
save_data["last_bday_note"] = pref.last_birthday_notification
|
||||
save_data["bday_announce"] = pref.bday_announce
|
||||
save_data["spawnpoint"] = pref.spawnpoint
|
||||
save_data["OOC_Notes"] = pref.metadata
|
||||
save_data["OOC_Notes_Likes"] = pref.metadata_likes
|
||||
save_data["OOC_Notes_Disikes"] = pref.metadata_dislikes
|
||||
//CHOMPAdd Start
|
||||
save_data["OOC_Notes_Maybes"] = pref.metadata_maybes
|
||||
save_data["OOC_Notes_Favs"] = pref.metadata_favs
|
||||
save_data["OOC_Notes_System"] = pref.matadata_ooc_style
|
||||
//CHOMPAdd End
|
||||
|
||||
/datum/category_item/player_setup_item/general/basic/sanitize_character()
|
||||
pref.age = sanitize_integer(pref.age, get_min_age(), get_max_age(), initial(pref.age))
|
||||
pref.bday_month = sanitize_integer(pref.bday_month, 0, 12, initial(pref.bday_month))
|
||||
pref.bday_day = sanitize_integer(pref.bday_day, 0, 31, initial(pref.bday_day))
|
||||
pref.last_birthday_notification = sanitize_integer(pref.last_birthday_notification, 0, 9999, initial(pref.last_birthday_notification))
|
||||
pref.biological_gender = sanitize_inlist(pref.biological_gender, get_genders(), pick(get_genders()))
|
||||
pref.identifying_gender = (pref.identifying_gender in all_genders_define_list) ? pref.identifying_gender : pref.biological_gender
|
||||
pref.real_name = sanitize_name(pref.real_name, pref.species, is_FBP())
|
||||
if(!pref.real_name)
|
||||
pref.real_name = random_name(pref.identifying_gender, pref.species)
|
||||
pref.nickname = sanitize_name(pref.nickname)
|
||||
pref.spawnpoint = sanitize_inlist(pref.spawnpoint, spawntypes, initial(pref.spawnpoint))
|
||||
pref.be_random_name = sanitize_integer(pref.be_random_name, 0, 1, initial(pref.be_random_name))
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/basic/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
@@ -85,24 +49,21 @@
|
||||
|
||||
character.gender = pref.biological_gender
|
||||
character.identifying_gender = pref.identifying_gender
|
||||
character.age = pref.age
|
||||
character.bday_month = pref.bday_month
|
||||
character.bday_day = pref.bday_day
|
||||
|
||||
/datum/category_item/player_setup_item/general/basic/content()
|
||||
. = list()
|
||||
. += span_bold("Name:") + " "
|
||||
. += "<a href='byond://?src=\ref[src];rename=1'><b>[pref.real_name]</b></a><br>"
|
||||
. += "<a href='byond://?src=\ref[src];random_name=1'>Randomize Name</A><br>"
|
||||
. += "<a href='byond://?src=\ref[src];always_random_name=1'>Always Random Name: [pref.be_random_name ? "Yes" : "No"]</a><br>"
|
||||
. += "<a href='byond://?src=\ref[src];always_random_name=1'>Always Random Name: [pref.read_preference(/datum/preference/toggle/human/name_is_always_random) ? "Yes" : "No"]</a><br>"
|
||||
. += span_bold("Nickname:") + " "
|
||||
. += "<a href='byond://?src=\ref[src];nickname=1'><b>[pref.nickname]</b></a>"
|
||||
. += "(<a href='byond://?src=\ref[src];reset_nickname=1'>Clear</A>)"
|
||||
. += "<br>"
|
||||
. += span_bold("Biological Sex:") + " <a href='byond://?src=\ref[src];bio_gender=1'><b>[gender2text(pref.biological_gender)]</b></a><br>"
|
||||
. += span_bold("Pronouns:") + " <a href='byond://?src=\ref[src];id_gender=1'><b>[gender2text(pref.identifying_gender)]</b></a><br>"
|
||||
. += span_bold("Age:") + " <a href='byond://?src=\ref[src];age=1'>[pref.age]</a> <b>Birthday:</b> <a href='byond://?src=\ref[src];bday_month=1'>[pref.bday_month]</a><b>/</b><a href='byond://?src=\ref[src];bday_day=1'>[pref.bday_day]</a> - <b>Announce?:</b> <a href='byond://?src=\ref[src];bday_announce=1'>[pref.bday_announce ? "Yes" : "Disabled"]</a><br>" //ChompEDIT - DISABLE the announcement
|
||||
. += span_bold("Spawn Point") + ": <a href='byond://?src=\ref[src];spawnpoint=1'>[pref.spawnpoint]</a><br>"
|
||||
. += span_bold("Age:") + " <a href='byond://?src=\ref[src];age=1'>[pref.read_preference(/datum/preference/numeric/human/age)]</a> <b>Birthday:</b> <a href='byond://?src=\ref[src];bday_month=1'>[pref.read_preference(/datum/preference/numeric/human/bday_month)]</a><b>/</b><a href='byond://?src=\ref[src];bday_day=1'>[pref.read_preference(/datum/preference/numeric/human/bday_day)]</a> - <b>Announce?:</b> <a href='byond://?src=\ref[src];bday_announce=1'>[pref.read_preference(/datum/preference/toggle/human/bday_announce) ? "Yes" : "Disabled"]</a><br>" //ChompEDIT - DISABLE the announcement
|
||||
. += span_bold("Spawn Point:") + " <a href='byond://?src=\ref[src];spawnpoint=1'>[pref.read_preference(/datum/preference/choiced/living/spawnpoint)]</a><br>"
|
||||
if(CONFIG_GET(flag/allow_metadata))
|
||||
//CHOMPEdit Start
|
||||
. += span_bold("OOC Notes: <a href='byond://?src=\ref[src];edit_ooc_notes=1'>Edit</a><a href='byond://?src=\ref[src];edit_ooc_note_favs=1'>Favs</a><a href='byond://?src=\ref[src];edit_ooc_note_likes=1'>Likes</a><a href='byond://?src=\ref[src];edit_ooc_note_maybes=1'>Maybes</a><a href='byond://?src=\ref[src];edit_ooc_note_dislikes=1'>Dislikes</a>") + "<br>"
|
||||
@@ -127,7 +88,7 @@
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["always_random_name"])
|
||||
pref.be_random_name = !pref.be_random_name
|
||||
pref.update_preference_by_type(/datum/preference/toggle/human/name_is_always_random, !pref.read_preference(/datum/preference/toggle/human/name_is_always_random))
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["nickname"])
|
||||
@@ -162,26 +123,26 @@
|
||||
else if(href_list["age"])
|
||||
var/min_age = get_min_age()
|
||||
var/max_age = get_max_age()
|
||||
var/new_age = tgui_input_number(user, "Choose your character's age:\n([min_age]-[max_age])", "Character Preference", pref.age, max_age, min_age)
|
||||
var/new_age = tgui_input_number(user, "Choose your character's age:\n([min_age]-[max_age])", "Character Preference", pref.read_preference(/datum/preference/numeric/human/age), max_age, min_age)
|
||||
if(new_age && CanUseTopic(user))
|
||||
pref.age = max(min(round(text2num(new_age)), max_age), min_age)
|
||||
pref.update_preference_by_type(/datum/preference/numeric/human/age, max(min(round(text2num(new_age)), max_age), min_age))
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["bday_month"])
|
||||
var/new_month = tgui_input_number(user, "Choose your character's birth month (number)", "Birthday Month", pref.bday_month, 12, 0)
|
||||
var/new_month = tgui_input_number(user, "Choose your character's birth month (number)", "Birthday Month", pref.read_preference(/datum/preference/numeric/human/bday_month), 12, 0)
|
||||
if(new_month && CanUseTopic(user))
|
||||
pref.bday_month = new_month
|
||||
pref.update_preference_by_type(/datum/preference/numeric/human/bday_month, new_month)
|
||||
else if((tgui_alert(user, "Would you like to clear the birthday entry?","Clear?",list("No","Yes")) == "Yes") && CanUseTopic(user))
|
||||
pref.bday_month = 0
|
||||
pref.bday_day = 0
|
||||
pref.update_preference_by_type(/datum/preference/numeric/human/bday_month, 0)
|
||||
pref.update_preference_by_type(/datum/preference/numeric/human/bday_day, 0)
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["bday_day"])
|
||||
if(!pref.bday_month)
|
||||
if(!pref.read_preference(/datum/preference/numeric/human/bday_month))
|
||||
tgui_alert(user,"You must set a birth month before you can set a day.", "Error", list("Okay"))
|
||||
return
|
||||
var/max_days
|
||||
switch(pref.bday_month)
|
||||
switch(pref.read_preference(/datum/preference/numeric/human/bday_month))
|
||||
if(1)
|
||||
max_days = 31
|
||||
if(2)
|
||||
@@ -207,16 +168,16 @@
|
||||
if(12)
|
||||
max_days = 31
|
||||
|
||||
var/new_day = tgui_input_number(user, "Choose your character's birth day (number, 1-[max_days])", "Birthday Day", pref.bday_day, max_days, 0)
|
||||
var/new_day = tgui_input_number(user, "Choose your character's birth day (number, 1-[max_days])", "Birthday Day", pref.read_preference(/datum/preference/numeric/human/bday_day), max_days, 0)
|
||||
if(new_day && CanUseTopic(user))
|
||||
pref.bday_day = new_day
|
||||
pref.update_preference_by_type(/datum/preference/numeric/human/bday_day, new_day)
|
||||
else if((tgui_alert(user, "Would you like to clear the birthday entry?","Clear?",list("No","Yes")) == "Yes") && CanUseTopic(user))
|
||||
pref.bday_month = 0
|
||||
pref.bday_day = 0
|
||||
pref.update_preference_by_type(/datum/preference/numeric/human/bday_month, 0)
|
||||
pref.update_preference_by_type(/datum/preference/numeric/human/bday_day, 0)
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["bday_announce"])
|
||||
pref.bday_announce = 0 //ChompEDIT - Disable this
|
||||
pref.update_preference_by_type(/datum/preference/toggle/human/bday_announce, /*!pref.read_preference(/datum/preference/toggle/human/bday_announce)*/ FALSE) // CHOMPEdit
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["spawnpoint"])
|
||||
@@ -225,40 +186,40 @@
|
||||
spawnkeys += spawntype
|
||||
var/choice = tgui_input_list(user, "Where would you like to spawn when late-joining?", "Late-Join Choice", spawnkeys)
|
||||
if(!choice || !spawntypes[choice] || !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
pref.spawnpoint = choice
|
||||
pref.update_preference_by_type(/datum/preference/choiced/living/spawnpoint, choice)
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["edit_ooc_notes"])
|
||||
var/new_metadata = strip_html_simple(tgui_input_text(user, "Enter any information you'd like others to see, such as Roleplay-preferences. This will not be saved permanently unless you click save in the Character Setup panel!", "Game Preference" , html_decode(pref.metadata), multiline = TRUE, prevent_enter = TRUE)) //ChompEDIT - usr removal
|
||||
var/new_metadata = strip_html_simple(tgui_input_text(user, "Enter any information you'd like others to see, such as Roleplay-preferences. This will not be saved permanently unless you click save in the Character Setup panel!", "Game Preference" , html_decode(pref.read_preference(/datum/preference/text/living/ooc_notes)), multiline = TRUE, prevent_enter = TRUE)) //ChompEDIT - usr removal
|
||||
if(new_metadata && CanUseTopic(user))
|
||||
pref.metadata = new_metadata
|
||||
pref.update_preference_by_type(/datum/preference/text/living/ooc_notes, new_metadata)
|
||||
else if(href_list["edit_ooc_note_likes"])
|
||||
var/new_metadata = strip_html_simple(tgui_input_text(user, "Enter any information you'd like others to see relating to your LIKED roleplay preferences. This will not be saved permanently unless you click save in the Character Setup panel! Type \"!clear\" to empty.", "Game Preference" , html_decode(pref.metadata_likes), multiline = TRUE, prevent_enter = TRUE)) //ChompEDIT - usr removal
|
||||
var/new_metadata = strip_html_simple(tgui_input_text(user, "Enter any information you'd like others to see relating to your LIKED roleplay preferences. This will not be saved permanently unless you click save in the Character Setup panel! Type \"!clear\" to empty.", "Game Preference" , html_decode(pref.read_preference(/datum/preference/text/living/ooc_notes_likes)), multiline = TRUE, prevent_enter = TRUE)) //ChompEDIT - usr removal
|
||||
if(new_metadata && CanUseTopic(user))
|
||||
if(new_metadata == "!clear")
|
||||
new_metadata = ""
|
||||
pref.metadata_likes = new_metadata
|
||||
pref.update_preference_by_type(/datum/preference/text/living/ooc_notes_likes, new_metadata)
|
||||
else if(href_list["edit_ooc_note_dislikes"])
|
||||
var/new_metadata = strip_html_simple(tgui_input_text(user, "Enter any information you'd like others to see relating to your DISLIKED roleplay preferences. This will not be saved permanently unless you click save in the Character Setup panel! Type \"!clear\" to empty.", "Game Preference" , html_decode(pref.metadata_dislikes), multiline = TRUE, prevent_enter = TRUE)) //ChompEDIT - usr removal
|
||||
var/new_metadata = strip_html_simple(tgui_input_text(user, "Enter any information you'd like others to see relating to your DISLIKED roleplay preferences. This will not be saved permanently unless you click save in the Character Setup panel! Type \"!clear\" to empty.", "Game Preference" , html_decode(pref.read_preference(/datum/preference/text/living/ooc_notes_dislikes)), multiline = TRUE, prevent_enter = TRUE)) //ChompEDIT - usr removal
|
||||
if(new_metadata && CanUseTopic(user))
|
||||
if(new_metadata == "!clear")
|
||||
new_metadata = ""
|
||||
pref.metadata_dislikes = new_metadata
|
||||
pref.update_preference_by_type(/datum/preference/text/living/ooc_notes_dislikes, new_metadata)
|
||||
//CHOMPEdit Start
|
||||
else if(href_list["edit_ooc_note_favs"])
|
||||
var/new_metadata = strip_html_simple(tgui_input_text(user, "Enter any information you'd like others to see relating to your FAVOURITE roleplay preferences. This will not be saved permanently unless you click save in the Character Setup panel! Type \"!clear\" to empty.", "Game Preference" , html_decode(pref.metadata_favs), multiline = TRUE, prevent_enter = TRUE)) //ChompEDIT - usr removal
|
||||
var/new_metadata = strip_html_simple(tgui_input_text(user, "Enter any information you'd like others to see relating to your FAVOURITE roleplay preferences. This will not be saved permanently unless you click save in the Character Setup panel! Type \"!clear\" to empty.", "Game Preference" , html_decode(pref.read_preference(/datum/preference/text/living/ooc_notes_favs)), multiline = TRUE, prevent_enter = TRUE)) //ChompEDIT - usr removal
|
||||
if(new_metadata && CanUseTopic(user))
|
||||
if(new_metadata == "!clear")
|
||||
new_metadata = ""
|
||||
pref.metadata_favs = new_metadata
|
||||
pref.update_preference_by_type(/datum/preference/text/living/ooc_notes_favs, new_metadata)
|
||||
else if(href_list["edit_ooc_note_maybes"])
|
||||
var/new_metadata = strip_html_simple(tgui_input_text(user, "Enter any information you'd like others to see relating to your MAYBE roleplay preferences. This will not be saved permanently unless you click save in the Character Setup panel! Type \"!clear\" to empty.", "Game Preference" , html_decode(pref.metadata_maybes), multiline = TRUE, prevent_enter = TRUE)) //ChompEDIT - usr removal
|
||||
var/new_metadata = strip_html_simple(tgui_input_text(user, "Enter any information you'd like others to see relating to your MAYBE roleplay preferences. This will not be saved permanently unless you click save in the Character Setup panel! Type \"!clear\" to empty.", "Game Preference" , html_decode(pref.read_preference(/datum/preference/text/living/ooc_notes_maybes)), multiline = TRUE, prevent_enter = TRUE)) //ChompEDIT - usr removal
|
||||
if(new_metadata && CanUseTopic(user))
|
||||
if(new_metadata == "!clear")
|
||||
new_metadata = ""
|
||||
pref.metadata_maybes = new_metadata
|
||||
pref.update_preference_by_type(/datum/preference/text/living/ooc_notes_maybes, new_metadata)
|
||||
else if(href_list["edit_ooc_note_style"])
|
||||
pref.matadata_ooc_style = !pref.matadata_ooc_style
|
||||
pref.update_preference_by_type(/datum/preference/toggle/living/ooc_notes_style, !pref.read_preference(/datum/preference/toggle/living/ooc_notes_style))
|
||||
return TOPIC_REFRESH
|
||||
//CHOMPEdit End
|
||||
return ..()
|
||||
|
||||
@@ -8,15 +8,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/list/bgstate_options = list("steel", "000", "midgrey", "FFF", "white", "techmaint", "desert", "grass", "snow")
|
||||
|
||||
var/ear_style // Type of selected ear style
|
||||
var/r_ears = 30 // Ear color.
|
||||
var/g_ears = 30 // Ear color
|
||||
var/b_ears = 30 // Ear color
|
||||
var/r_ears2 = 30 // Ear extra color.
|
||||
var/g_ears2 = 30 // Ear extra color
|
||||
var/b_ears2 = 30 // Ear extra color
|
||||
var/r_ears3 = 30 // Ear tertiary color.
|
||||
var/g_ears3 = 30 // Ear tertiary color
|
||||
var/b_ears3 = 30 // Ear tertiary color
|
||||
|
||||
/// The typepath of the character's selected secondary ears.
|
||||
var/ear_secondary_style
|
||||
@@ -27,26 +18,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/list/ear_secondary_colors = list()
|
||||
|
||||
var/tail_style // Type of selected tail style
|
||||
var/r_tail = 30 // Tail/Taur color
|
||||
var/g_tail = 30 // Tail/Taur color
|
||||
var/b_tail = 30 // Tail/Taur color
|
||||
var/r_tail2 = 30 // For extra overlay.
|
||||
var/g_tail2 = 30 // For extra overlay.
|
||||
var/b_tail2 = 30 // For extra overlay.
|
||||
var/r_tail3 = 30 // For tertiary overlay.
|
||||
var/g_tail3 = 30 // For tertiary overlay.
|
||||
var/b_tail3 = 30 // For tertiary overlay.
|
||||
|
||||
var/wing_style // Type of selected wing style
|
||||
var/r_wing = 30 // Wing color
|
||||
var/g_wing = 30 // Wing color
|
||||
var/b_wing = 30 // Wing color
|
||||
var/r_wing2 = 30 // Wing extra color
|
||||
var/g_wing2 = 30 // Wing extra color
|
||||
var/b_wing2 = 30 // Wing extra color
|
||||
var/r_wing3 = 30 // Wing tertiary color
|
||||
var/g_wing3 = 30 // Wing tertiary color
|
||||
var/b_wing3 = 30 // Wing tertiary color
|
||||
|
||||
var/datum/browser/markings_subwindow = null
|
||||
|
||||
@@ -105,25 +78,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/load_character(list/save_data)
|
||||
pref.species = save_data["species"]
|
||||
pref.r_hair = save_data["hair_red"]
|
||||
pref.g_hair = save_data["hair_green"]
|
||||
pref.b_hair = save_data["hair_blue"]
|
||||
pref.r_facial = save_data["facial_red"]
|
||||
pref.r_grad = save_data["grad_red"]
|
||||
pref.g_grad = save_data["grad_green"]
|
||||
pref.b_grad = save_data["grad_blue"]
|
||||
pref.g_facial = save_data["facial_green"]
|
||||
pref.b_facial = save_data["facial_blue"]
|
||||
pref.s_tone = save_data["skin_tone"]
|
||||
pref.r_skin = save_data["skin_red"]
|
||||
pref.g_skin = save_data["skin_green"]
|
||||
pref.b_skin = save_data["skin_blue"]
|
||||
pref.h_style = save_data["hair_style_name"]
|
||||
pref.f_style = save_data["facial_style_name"]
|
||||
pref.grad_style = save_data["grad_style_name"]
|
||||
pref.r_eyes = save_data["eyes_red"]
|
||||
pref.g_eyes = save_data["eyes_green"]
|
||||
pref.b_eyes = save_data["eyes_blue"]
|
||||
pref.b_type = save_data["b_type"]
|
||||
pref.disabilities = save_data["disabilities"]
|
||||
pref.organ_data = check_list_copy(save_data["organ_data"])
|
||||
@@ -134,9 +92,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
for(var/j in pref.body_markings[i])
|
||||
pref.body_markings[i][j] = check_list_copy(pref.body_markings[i][j])
|
||||
pref.synth_color = save_data["synth_color"]
|
||||
pref.r_synth = save_data["synth_red"]
|
||||
pref.g_synth = save_data["synth_green"]
|
||||
pref.b_synth = save_data["synth_blue"]
|
||||
pref.synth_markings = save_data["synth_markings"]
|
||||
pref.bgstate = save_data["bgstate"]
|
||||
pref.body_descriptors = check_list_copy(save_data["body_descriptors"])
|
||||
@@ -148,60 +103,18 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
pref.haemophilia = save_data["haemophilia"]
|
||||
//YWadd end
|
||||
pref.ear_style = save_data["ear_style"]
|
||||
pref.r_ears = save_data["r_ears"]
|
||||
pref.g_ears = save_data["g_ears"]
|
||||
pref.b_ears = save_data["b_ears"]
|
||||
pref.r_ears2 = save_data["r_ears2"]
|
||||
pref.g_ears2 = save_data["g_ears2"]
|
||||
pref.b_ears2 = save_data["b_ears2"]
|
||||
pref.r_ears3 = save_data["r_ears3"]
|
||||
pref.g_ears3 = save_data["g_ears3"]
|
||||
pref.b_ears3 = save_data["b_ears3"]
|
||||
pref.ear_secondary_style = save_data["ear_secondary_style"]
|
||||
pref.ear_secondary_colors = save_data["ear_secondary_colors"]
|
||||
pref.tail_style = save_data["tail_style"]
|
||||
pref.r_tail = save_data["r_tail"]
|
||||
pref.g_tail = save_data["g_tail"]
|
||||
pref.b_tail = save_data["b_tail"]
|
||||
pref.r_tail2 = save_data["r_tail2"]
|
||||
pref.g_tail2 = save_data["g_tail2"]
|
||||
pref.b_tail2 = save_data["b_tail2"]
|
||||
pref.r_tail3 = save_data["r_tail3"]
|
||||
pref.g_tail3 = save_data["g_tail3"]
|
||||
pref.b_tail3 = save_data["b_tail3"]
|
||||
pref.wing_style = save_data["wing_style"]
|
||||
pref.r_wing = save_data["r_wing"]
|
||||
pref.g_wing = save_data["g_wing"]
|
||||
pref.b_wing = save_data["b_wing"]
|
||||
pref.r_wing2 = save_data["r_wing2"]
|
||||
pref.g_wing2 = save_data["g_wing2"]
|
||||
pref.b_wing2 = save_data["b_wing2"]
|
||||
pref.r_wing3 = save_data["r_wing3"]
|
||||
pref.g_wing3 = save_data["g_wing3"]
|
||||
pref.b_wing3 = save_data["b_wing3"]
|
||||
pref.digitigrade = save_data["digitigrade"]
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/save_character(list/save_data)
|
||||
save_data["species"] = pref.species
|
||||
save_data["hair_red"] = pref.r_hair
|
||||
save_data["hair_green"] = pref.g_hair
|
||||
save_data["hair_blue"] = pref.b_hair
|
||||
save_data["grad_red"] = pref.r_grad
|
||||
save_data["grad_green"] = pref.g_grad
|
||||
save_data["grad_blue"] = pref.b_grad
|
||||
save_data["facial_red"] = pref.r_facial
|
||||
save_data["facial_green"] = pref.g_facial
|
||||
save_data["facial_blue"] = pref.b_facial
|
||||
save_data["skin_tone"] = pref.s_tone
|
||||
save_data["skin_red"] = pref.r_skin
|
||||
save_data["skin_green"] = pref.g_skin
|
||||
save_data["skin_blue"] = pref.b_skin
|
||||
save_data["hair_style_name"] = pref.h_style
|
||||
save_data["facial_style_name"] = pref.f_style
|
||||
save_data["grad_style_name"] = pref.grad_style
|
||||
save_data["eyes_red"] = pref.r_eyes
|
||||
save_data["eyes_green"] = pref.g_eyes
|
||||
save_data["eyes_blue"] = pref.b_eyes
|
||||
save_data["b_type"] = pref.b_type
|
||||
save_data["disabilities"] = pref.disabilities
|
||||
save_data["organ_data"] = check_list_copy(pref.organ_data)
|
||||
@@ -213,9 +126,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
body_markings[i][j] = check_list_copy(body_markings[i][j])
|
||||
save_data["body_markings"] = body_markings
|
||||
save_data["synth_color"] = pref.synth_color
|
||||
save_data["synth_red"] = pref.r_synth
|
||||
save_data["synth_green"] = pref.g_synth
|
||||
save_data["synth_blue"] = pref.b_synth
|
||||
save_data["synth_markings"] = pref.synth_markings
|
||||
save_data["bgstate"] = pref.bgstate
|
||||
save_data["body_descriptors"] = check_list_copy(pref.body_descriptors)
|
||||
@@ -227,62 +137,20 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
save_data["haemophilia"] = pref.haemophilia
|
||||
//YWadd end
|
||||
save_data["ear_style"] = pref.ear_style
|
||||
save_data["r_ears"] = pref.r_ears
|
||||
save_data["g_ears"] = pref.g_ears
|
||||
save_data["b_ears"] = pref.b_ears
|
||||
save_data["r_ears2"] = pref.r_ears2
|
||||
save_data["g_ears2"] = pref.g_ears2
|
||||
save_data["b_ears2"] = pref.b_ears2
|
||||
save_data["r_ears3"] = pref.r_ears3
|
||||
save_data["g_ears3"] = pref.g_ears3
|
||||
save_data["b_ears3"] = pref.b_ears3
|
||||
save_data["ear_secondary_style"] = pref.ear_secondary_style
|
||||
save_data["ear_secondary_colors"] = pref.ear_secondary_colors
|
||||
save_data["tail_style"] = pref.tail_style
|
||||
save_data["r_tail"] = pref.r_tail
|
||||
save_data["g_tail"] = pref.g_tail
|
||||
save_data["b_tail"] = pref.b_tail
|
||||
save_data["r_tail2"] = pref.r_tail2
|
||||
save_data["g_tail2"] = pref.g_tail2
|
||||
save_data["b_tail2"] = pref.b_tail2
|
||||
save_data["r_tail3"] = pref.r_tail3
|
||||
save_data["g_tail3"] = pref.g_tail3
|
||||
save_data["b_tail3"] = pref.b_tail3
|
||||
save_data["wing_style"] = pref.wing_style
|
||||
save_data["r_wing"] = pref.r_wing
|
||||
save_data["g_wing"] = pref.g_wing
|
||||
save_data["b_wing"] = pref.b_wing
|
||||
save_data["r_wing2"] = pref.r_wing2
|
||||
save_data["g_wing2"] = pref.g_wing2
|
||||
save_data["b_wing2"] = pref.b_wing2
|
||||
save_data["r_wing3"] = pref.r_wing3
|
||||
save_data["g_wing3"] = pref.g_wing3
|
||||
save_data["b_wing3"] = pref.b_wing3
|
||||
save_data["digitigrade"] = pref.digitigrade
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/sanitize_character()
|
||||
if(!pref.species || !(pref.species in GLOB.playable_species))
|
||||
pref.species = SPECIES_HUMAN
|
||||
pref.r_hair = sanitize_integer(pref.r_hair, 0, 255, initial(pref.r_hair))
|
||||
pref.g_hair = sanitize_integer(pref.g_hair, 0, 255, initial(pref.g_hair))
|
||||
pref.b_hair = sanitize_integer(pref.b_hair, 0, 255, initial(pref.b_hair))
|
||||
pref.r_grad = sanitize_integer(pref.r_grad, 0, 255, initial(pref.r_grad))
|
||||
pref.g_grad = sanitize_integer(pref.g_grad, 0, 255, initial(pref.g_grad))
|
||||
pref.b_grad = sanitize_integer(pref.b_grad, 0, 255, initial(pref.b_grad))
|
||||
pref.r_facial = sanitize_integer(pref.r_facial, 0, 255, initial(pref.r_facial))
|
||||
pref.g_facial = sanitize_integer(pref.g_facial, 0, 255, initial(pref.g_facial))
|
||||
pref.b_facial = sanitize_integer(pref.b_facial, 0, 255, initial(pref.b_facial))
|
||||
pref.s_tone = sanitize_integer(pref.s_tone, -185, 34, initial(pref.s_tone))
|
||||
pref.r_skin = sanitize_integer(pref.r_skin, 0, 255, initial(pref.r_skin))
|
||||
pref.g_skin = sanitize_integer(pref.g_skin, 0, 255, initial(pref.g_skin))
|
||||
pref.b_skin = sanitize_integer(pref.b_skin, 0, 255, initial(pref.b_skin))
|
||||
pref.h_style = sanitize_inlist(pref.h_style, hair_styles_list, initial(pref.h_style))
|
||||
pref.grad_style = sanitize_inlist(pref.grad_style, GLOB.hair_gradients, initial(pref.grad_style))
|
||||
pref.f_style = sanitize_inlist(pref.f_style, facial_hair_styles_list, initial(pref.f_style))
|
||||
pref.grad_style = sanitize_inlist(pref.grad_style, GLOB.hair_gradients, initial(pref.grad_style))
|
||||
pref.r_eyes = sanitize_integer(pref.r_eyes, 0, 255, initial(pref.r_eyes))
|
||||
pref.g_eyes = sanitize_integer(pref.g_eyes, 0, 255, initial(pref.g_eyes))
|
||||
pref.b_eyes = sanitize_integer(pref.b_eyes, 0, 255, initial(pref.b_eyes))
|
||||
pref.b_type = sanitize_text(pref.b_type, initial(pref.b_type))
|
||||
|
||||
pref.disabilities = sanitize_integer(pref.disabilities, 0, 65535, initial(pref.disabilities))
|
||||
@@ -297,16 +165,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
if(!pref.bgstate || !(pref.bgstate in pref.bgstate_options))
|
||||
pref.bgstate = "000"
|
||||
|
||||
pref.r_ears = sanitize_integer(pref.r_ears, 0, 255, initial(pref.r_ears))
|
||||
pref.g_ears = sanitize_integer(pref.g_ears, 0, 255, initial(pref.g_ears))
|
||||
pref.b_ears = sanitize_integer(pref.b_ears, 0, 255, initial(pref.b_ears))
|
||||
pref.r_ears2 = sanitize_integer(pref.r_ears2, 0, 255, initial(pref.r_ears2))
|
||||
pref.g_ears2 = sanitize_integer(pref.g_ears2, 0, 255, initial(pref.g_ears2))
|
||||
pref.b_ears2 = sanitize_integer(pref.b_ears2, 0, 255, initial(pref.b_ears2))
|
||||
pref.r_ears3 = sanitize_integer(pref.r_ears3, 0, 255, initial(pref.r_ears3))
|
||||
pref.g_ears3 = sanitize_integer(pref.g_ears3, 0, 255, initial(pref.g_ears3))
|
||||
pref.b_ears3 = sanitize_integer(pref.b_ears3, 0, 255, initial(pref.b_ears3))
|
||||
|
||||
// sanitize secondary ears
|
||||
pref.ear_secondary_colors = SANITIZE_LIST(pref.ear_secondary_colors)
|
||||
if(length(pref.ear_secondary_colors) > length(GLOB.fancy_sprite_accessory_color_channel_names))
|
||||
@@ -314,24 +172,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
for(var/i in 1 to length(pref.ear_secondary_colors))
|
||||
pref.ear_secondary_colors[i] = sanitize_hexcolor(pref.ear_secondary_colors[i], "#ffffff")
|
||||
|
||||
pref.r_tail = sanitize_integer(pref.r_tail, 0, 255, initial(pref.r_tail))
|
||||
pref.g_tail = sanitize_integer(pref.g_tail, 0, 255, initial(pref.g_tail))
|
||||
pref.b_tail = sanitize_integer(pref.b_tail, 0, 255, initial(pref.b_tail))
|
||||
pref.r_tail2 = sanitize_integer(pref.r_tail2, 0, 255, initial(pref.r_tail2))
|
||||
pref.g_tail2 = sanitize_integer(pref.g_tail2, 0, 255, initial(pref.g_tail2))
|
||||
pref.b_tail2 = sanitize_integer(pref.b_tail2, 0, 255, initial(pref.b_tail2))
|
||||
pref.r_tail3 = sanitize_integer(pref.r_tail3, 0, 255, initial(pref.r_tail3))
|
||||
pref.g_tail3 = sanitize_integer(pref.g_tail3, 0, 255, initial(pref.g_tail3))
|
||||
pref.b_tail3 = sanitize_integer(pref.b_tail3, 0, 255, initial(pref.b_tail3))
|
||||
pref.r_wing = sanitize_integer(pref.r_wing, 0, 255, initial(pref.r_wing))
|
||||
pref.g_wing = sanitize_integer(pref.g_wing, 0, 255, initial(pref.g_wing))
|
||||
pref.b_wing = sanitize_integer(pref.b_wing, 0, 255, initial(pref.b_wing))
|
||||
pref.r_wing2 = sanitize_integer(pref.r_wing2, 0, 255, initial(pref.r_wing2))
|
||||
pref.g_wing2 = sanitize_integer(pref.g_wing2, 0, 255, initial(pref.g_wing2))
|
||||
pref.b_wing2 = sanitize_integer(pref.b_wing2, 0, 255, initial(pref.b_wing2))
|
||||
pref.r_wing3 = sanitize_integer(pref.r_wing3, 0, 255, initial(pref.r_wing3))
|
||||
pref.g_wing3 = sanitize_integer(pref.g_wing3, 0, 255, initial(pref.g_wing3))
|
||||
pref.b_wing3 = sanitize_integer(pref.b_wing3, 0, 255, initial(pref.b_wing3))
|
||||
pref.digitigrade = sanitize_integer(pref.digitigrade, 0, 1, initial(pref.digitigrade))
|
||||
|
||||
pref.sanitize_body_styles()
|
||||
@@ -339,23 +179,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/body/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
// Copy basic values
|
||||
character.r_eyes = pref.r_eyes
|
||||
character.g_eyes = pref.g_eyes
|
||||
character.b_eyes = pref.b_eyes
|
||||
character.h_style = pref.h_style
|
||||
character.r_hair = pref.r_hair
|
||||
character.g_hair = pref.g_hair
|
||||
character.b_hair = pref.b_hair
|
||||
character.r_grad = pref.r_grad
|
||||
character.g_grad = pref.g_grad
|
||||
character.b_grad = pref.b_grad
|
||||
character.f_style = pref.f_style
|
||||
character.r_facial = pref.r_facial
|
||||
character.g_facial = pref.g_facial
|
||||
character.b_facial = pref.b_facial
|
||||
character.r_skin = pref.r_skin
|
||||
character.g_skin = pref.g_skin
|
||||
character.b_skin = pref.b_skin
|
||||
character.s_tone = pref.s_tone
|
||||
character.h_style = pref.h_style
|
||||
character.grad_style= pref.grad_style
|
||||
@@ -363,9 +188,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
character.grad_style= pref.grad_style
|
||||
character.b_type = pref.b_type
|
||||
character.synth_color = pref.synth_color
|
||||
character.r_synth = pref.r_synth
|
||||
character.g_synth = pref.g_synth
|
||||
character.b_synth = pref.b_synth
|
||||
character.synth_markings = pref.synth_markings
|
||||
if(character.species.digi_allowed)
|
||||
character.digitigrade = pref.digitigrade
|
||||
@@ -379,15 +201,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
var/list/ear_styles = pref.get_available_styles(global.ear_styles_list)
|
||||
character.ear_style = ear_styles[pref.ear_style]
|
||||
character.r_ears = pref.r_ears
|
||||
character.b_ears = pref.b_ears
|
||||
character.g_ears = pref.g_ears
|
||||
character.r_ears2 = pref.r_ears2
|
||||
character.b_ears2 = pref.b_ears2
|
||||
character.g_ears2 = pref.g_ears2
|
||||
character.r_ears3 = pref.r_ears3
|
||||
character.b_ears3 = pref.b_ears3
|
||||
character.g_ears3 = pref.g_ears3
|
||||
|
||||
// apply secondary ears; sanitize again to prevent runtimes in rendering
|
||||
character.ear_secondary_style = ear_styles[pref.ear_secondary_style]
|
||||
@@ -395,27 +208,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
var/list/tail_styles = pref.get_available_styles(global.tail_styles_list)
|
||||
character.tail_style = tail_styles[pref.tail_style]
|
||||
character.r_tail = pref.r_tail
|
||||
character.b_tail = pref.b_tail
|
||||
character.g_tail = pref.g_tail
|
||||
character.r_tail2 = pref.r_tail2
|
||||
character.b_tail2 = pref.b_tail2
|
||||
character.g_tail2 = pref.g_tail2
|
||||
character.r_tail3 = pref.r_tail3
|
||||
character.b_tail3 = pref.b_tail3
|
||||
character.g_tail3 = pref.g_tail3
|
||||
|
||||
var/list/wing_styles = pref.get_available_styles(global.wing_styles_list)
|
||||
character.wing_style = wing_styles[pref.wing_style]
|
||||
character.r_wing = pref.r_wing
|
||||
character.b_wing = pref.b_wing
|
||||
character.g_wing = pref.g_wing
|
||||
character.r_wing2 = pref.r_wing2
|
||||
character.b_wing2 = pref.b_wing2
|
||||
character.g_wing2 = pref.g_wing2
|
||||
character.r_wing3 = pref.r_wing3
|
||||
character.b_wing3 = pref.b_wing3
|
||||
character.g_wing3 = pref.g_wing3
|
||||
|
||||
character.set_gender(pref.biological_gender)
|
||||
|
||||
@@ -645,25 +440,25 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
. += span_bold("Hair") + "<br>"
|
||||
if(has_flag(mob_species, HAS_HAIR_COLOR))
|
||||
. += "<a href='byond://?src=\ref[src];hair_color=1'>Change Color</a> [color_square(pref.r_hair, pref.g_hair, pref.b_hair)] "
|
||||
. += "<a href='byond://?src=\ref[src];hair_color=1'>Change Color</a> [color_square(hex = pref.read_preference(/datum/preference/color/human/hair_color))] "
|
||||
. += " Style: <a href='byond://?src=\ref[src];hair_style_left=[pref.h_style]'><</a> <a href='byond://?src=\ref[src];hair_style_right=[pref.h_style]''>></a> <a href='byond://?src=\ref[src];hair_style=1'>[pref.h_style]</a><br>" //The <</a> & ></a> in this line is correct-- those extra characters are the arrows you click to switch between styles.
|
||||
|
||||
. += span_bold("Gradient") + "<br>"
|
||||
. += "<a href='byond://?src=\ref[src];grad_color=1'>Change Color</a> [color_square(pref.r_grad, pref.g_grad, pref.b_grad)] "
|
||||
. += "<a href='byond://?src=\ref[src];grad_color=1'>Change Color</a> [color_square(hex = pref.read_preference(/datum/preference/color/human/grad_color))] "
|
||||
. += " Style: <a href='byond://?src=\ref[src];grad_style_left=[pref.grad_style]'><</a> <a href='byond://?src=\ref[src];grad_style_right=[pref.grad_style]''>></a> <a href='byond://?src=\ref[src];grad_style=1'>[pref.grad_style]</a><br>"
|
||||
|
||||
. += "<br><b>Facial</b><br>"
|
||||
if(has_flag(mob_species, HAS_HAIR_COLOR))
|
||||
. += "<a href='byond://?src=\ref[src];facial_color=1'>Change Color</a> [color_square(pref.r_facial, pref.g_facial, pref.b_facial)] "
|
||||
. += "<a href='byond://?src=\ref[src];facial_color=1'>Change Color</a> [color_square(hex = pref.read_preference(/datum/preference/color/human/facial_color))] "
|
||||
. += " Style: <a href='byond://?src=\ref[src];facial_style_left=[pref.f_style]'><</a> <a href='byond://?src=\ref[src];facial_style_right=[pref.f_style]''>></a> <a href='byond://?src=\ref[src];facial_style=1'>[pref.f_style]</a><br>" //Same as above with the extra > & < characters
|
||||
|
||||
if(has_flag(mob_species, HAS_EYE_COLOR))
|
||||
. += "<br><b>Eyes</b><br>"
|
||||
. += "<a href='byond://?src=\ref[src];eye_color=1'>Change Color</a> [color_square(pref.r_eyes, pref.g_eyes, pref.b_eyes)]<br>"
|
||||
. += "<a href='byond://?src=\ref[src];eye_color=1'>Change Color</a> [color_square(hex = pref.read_preference(/datum/preference/color/human/eyes_color))]<br>"
|
||||
|
||||
if(has_flag(mob_species, HAS_SKIN_COLOR))
|
||||
. += "<br><b>Body Color</b><br>"
|
||||
. += "<a href='byond://?src=\ref[src];skin_color=1'>Change Color</a> [color_square(pref.r_skin, pref.g_skin, pref.b_skin)]<br>"
|
||||
. += "<a href='byond://?src=\ref[src];skin_color=1'>Change Color</a> [color_square(hex = pref.read_preference(/datum/preference/color/human/skin_color))]<br>"
|
||||
|
||||
if(mob_species.digi_allowed)
|
||||
. += "<br><b>Digitigrade?:</b> <a href='byond://?src=\ref[src];digitigrade=1'><b>[pref.digitigrade ? "Yes" : "No"]</b></a><br>"
|
||||
@@ -676,11 +471,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
if(istype(ear))
|
||||
. += " Style: <a href='byond://?src=\ref[src];ear_style=1'>[ear.name]</a><br>"
|
||||
if(ear.do_colouration)
|
||||
. += "<a href='byond://?src=\ref[src];ear_color=1'>Change Color</a> [color_square(pref.r_ears, pref.g_ears, pref.b_ears)]<br>"
|
||||
. += "<a href='byond://?src=\ref[src];ear_color=1'>Change Color</a> [color_square(hex = pref.read_preference(/datum/preference/color/human/ears_color1))]<br>"
|
||||
if(ear.extra_overlay)
|
||||
. += "<a href='byond://?src=\ref[src];ear_color2=1'>Change Secondary Color</a> [color_square(pref.r_ears2, pref.g_ears2, pref.b_ears2)]<br>"
|
||||
. += "<a href='byond://?src=\ref[src];ear_color2=1'>Change Secondary Color</a> [color_square(hex = pref.read_preference(/datum/preference/color/human/ears_color2))]<br>"
|
||||
if(ear.extra_overlay2)
|
||||
. += "<a href='byond://?src=\ref[src];ear_color3=1'>Change Tertiary Color</a> [color_square(pref.r_ears3, pref.g_ears3, pref.b_ears3)]<br>"
|
||||
. += "<a href='byond://?src=\ref[src];ear_color3=1'>Change Tertiary Color</a> [color_square(hex = pref.read_preference(/datum/preference/color/human/ears_color3))]<br>"
|
||||
else
|
||||
. += " Style: <a href='byond://?src=\ref[src];ear_style=1'>Select</a><br>"
|
||||
|
||||
@@ -699,11 +494,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
if(istype(tail))
|
||||
. += " Style: <a href='byond://?src=\ref[src];tail_style=1'>[tail.name]</a><br>"
|
||||
if(tail.do_colouration)
|
||||
. += "<a href='byond://?src=\ref[src];tail_color=1'>Change Color</a> [color_square(pref.r_tail, pref.g_tail, pref.b_tail)]<br>"
|
||||
. += "<a href='byond://?src=\ref[src];tail_color=1'>Change Color</a> [color_square(hex = pref.read_preference(/datum/preference/color/human/tail_color1))]<br>"
|
||||
if(tail.extra_overlay)
|
||||
. += "<a href='byond://?src=\ref[src];tail_color2=1'>Change Secondary Color</a> [color_square(pref.r_tail2, pref.g_tail2, pref.b_tail2)]<br>"
|
||||
. += "<a href='byond://?src=\ref[src];tail_color2=1'>Change Secondary Color</a> [color_square(hex = pref.read_preference(/datum/preference/color/human/tail_color2))]<br>"
|
||||
if(tail.extra_overlay2)
|
||||
. += "<a href='byond://?src=\ref[src];tail_color3=1'>Change Tertiary Color</a> [color_square(pref.r_tail3, pref.g_tail3, pref.b_tail3)]<br>"
|
||||
. += "<a href='byond://?src=\ref[src];tail_color3=1'>Change Tertiary Color</a> [color_square(hex = pref.read_preference(/datum/preference/color/human/tail_color3))]<br>"
|
||||
else
|
||||
. += " Style: <a href='byond://?src=\ref[src];tail_style=1'>Select</a><br>"
|
||||
|
||||
@@ -713,11 +508,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
if(istype(wings))
|
||||
. += " Style: <a href='byond://?src=\ref[src];wing_style=1'>[wings.name]</a><br>"
|
||||
if(wings.do_colouration)
|
||||
. += "<a href='byond://?src=\ref[src];wing_color=1'>Change Color</a> [color_square(pref.r_wing, pref.g_wing, pref.b_wing)]<br>"
|
||||
. += "<a href='byond://?src=\ref[src];wing_color=1'>Change Color</a> [color_square(hex = pref.read_preference(/datum/preference/color/human/wing_color1))]<br>"
|
||||
if(wings.extra_overlay)
|
||||
. += "<a href='byond://?src=\ref[src];wing_color2=1'>Change Secondary Color</a> [color_square(pref.r_wing2, pref.g_wing2, pref.b_wing2)]<br>"
|
||||
. += "<a href='byond://?src=\ref[src];wing_color2=1'>Change Secondary Color</a> [color_square(hex = pref.read_preference(/datum/preference/color/human/wing_color2))]<br>"
|
||||
if(wings.extra_overlay2)
|
||||
. += "<a href='byond://?src=\ref[src];wing_color3=1'>Change Secondary Color</a> [color_square(pref.r_wing3, pref.g_wing3, pref.b_wing3)]<br>"
|
||||
. += "<a href='byond://?src=\ref[src];wing_color3=1'>Change Secondary Color</a> [color_square(hex = pref.read_preference(/datum/preference/color/human/wing_color3))]<br>"
|
||||
else
|
||||
. += " Style: <a href='byond://?src=\ref[src];wing_style=1'>Select</a><br>"
|
||||
|
||||
@@ -731,7 +526,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
. += span_bold("Allow Synth markings:") + " <a href='byond://?src=\ref[src];synth_markings=1'><b>[pref.synth_markings ? "Yes" : "No"]</b></a><br>"
|
||||
. += span_bold("Allow Synth color:") + " <a href='byond://?src=\ref[src];synth_color=1'><b>[pref.synth_color ? "Yes" : "No"]</b></a><br>"
|
||||
if(pref.synth_color)
|
||||
. += "<a href='byond://?src=\ref[src];synth2_color=1'>Change Color</a> [color_square(pref.r_synth, pref.g_synth, pref.b_synth)]"
|
||||
. += "<a href='byond://?src=\ref[src];synth2_color=1'>Change Color</a> [color_square(hex = pref.read_preference(/datum/preference/color/human/synth_color))]"
|
||||
|
||||
. = jointext(.,null)
|
||||
|
||||
@@ -815,9 +610,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
pref.f_style = facial_hair_styles_list["Shaved"]
|
||||
|
||||
//reset hair colour and skin colour
|
||||
pref.r_hair = 0//hex2num(copytext(new_hair, 2, 4))
|
||||
pref.g_hair = 0//hex2num(copytext(new_hair, 4, 6))
|
||||
pref.b_hair = 0//hex2num(copytext(new_hair, 6, 8))
|
||||
pref.update_preference_by_type(/datum/preference/color/human/hair_color, "#000000")
|
||||
pref.s_tone = -75
|
||||
|
||||
reset_limbs() // Safety for species with incompatible manufacturers; easier than trying to do it case by case.
|
||||
@@ -827,7 +620,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
var/min_age = get_min_age()
|
||||
var/max_age = get_max_age()
|
||||
pref.age = max(min(pref.age, max_age), min_age)
|
||||
pref.update_preference_by_type(/datum/preference/numeric/human/age, max(min(pref.read_preference(/datum/preference/numeric/human/age), max_age), min_age))
|
||||
pref.blood_color = setting_species.blood_color // VOREstation edit
|
||||
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
@@ -835,31 +628,17 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
else if(href_list["hair_color"])
|
||||
if(!has_flag(mob_species, HAS_HAIR_COLOR))
|
||||
return TOPIC_NOACTION
|
||||
var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference", rgb(pref.r_hair, pref.g_hair, pref.b_hair)) as color|null
|
||||
var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference", pref.read_preference(/datum/preference/color/human/hair_color)) as color|null
|
||||
if(new_hair && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user))
|
||||
pref.r_hair = hex2num(copytext(new_hair, 2, 4))
|
||||
pref.g_hair = hex2num(copytext(new_hair, 4, 6))
|
||||
pref.b_hair = hex2num(copytext(new_hair, 6, 8))
|
||||
pref.update_preference_by_type(/datum/preference/color/human/hair_color, new_hair)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["grad_color"])
|
||||
if(!has_flag(mob_species, HAS_HAIR_COLOR))
|
||||
return TOPIC_NOACTION
|
||||
var/new_grad = input(user, "Choose your character's secondary hair color:", "Character Preference", rgb(pref.r_grad, pref.g_grad, pref.b_grad)) as color|null
|
||||
var/new_grad = input(user, "Choose your character's secondary hair color:", "Character Preference", pref.read_preference(/datum/preference/color/human/grad_color)) as color|null
|
||||
if(new_grad && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user))
|
||||
pref.r_grad = hex2num(copytext(new_grad, 2, 4))
|
||||
pref.g_grad = hex2num(copytext(new_grad, 4, 6))
|
||||
pref.b_grad = hex2num(copytext(new_grad, 6, 8))
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["grad_color"])
|
||||
if(!has_flag(mob_species, HAS_HAIR_COLOR))
|
||||
return TOPIC_NOACTION
|
||||
var/new_grad = input(user, "Choose your character's secondary hair color:", "Character Preference", rgb(pref.r_grad, pref.g_grad, pref.b_grad)) as color|null
|
||||
if(new_grad && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user))
|
||||
pref.r_grad = hex2num(copytext(new_grad, 2, 4))
|
||||
pref.g_grad = hex2num(copytext(new_grad, 4, 6))
|
||||
pref.b_grad = hex2num(copytext(new_grad, 6, 8))
|
||||
pref.update_preference_by_type(/datum/preference/color/human/grad_color, new_grad)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["hair_style"])
|
||||
@@ -911,11 +690,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
else if(href_list["facial_color"])
|
||||
if(!has_flag(mob_species, HAS_HAIR_COLOR))
|
||||
return TOPIC_NOACTION
|
||||
var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference", rgb(pref.r_facial, pref.g_facial, pref.b_facial)) as color|null
|
||||
var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference", pref.read_preference(/datum/preference/color/human/facial_color)) as color|null
|
||||
if(new_facial && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user))
|
||||
pref.r_facial = hex2num(copytext(new_facial, 2, 4))
|
||||
pref.g_facial = hex2num(copytext(new_facial, 4, 6))
|
||||
pref.b_facial = hex2num(copytext(new_facial, 6, 8))
|
||||
pref.update_preference_by_type(/datum/preference/color/human/facial_color, new_facial)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
if(href_list["digitigrade"])
|
||||
@@ -926,11 +703,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
else if(href_list["eye_color"])
|
||||
if(!has_flag(mob_species, HAS_EYE_COLOR))
|
||||
return TOPIC_NOACTION
|
||||
var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference", rgb(pref.r_eyes, pref.g_eyes, pref.b_eyes)) as color|null
|
||||
var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference", pref.read_preference(/datum/preference/color/human/eyes_color)) as color|null
|
||||
if(new_eyes && has_flag(mob_species, HAS_EYE_COLOR) && CanUseTopic(user))
|
||||
pref.r_eyes = hex2num(copytext(new_eyes, 2, 4))
|
||||
pref.g_eyes = hex2num(copytext(new_eyes, 4, 6))
|
||||
pref.b_eyes = hex2num(copytext(new_eyes, 6, 8))
|
||||
pref.update_preference_by_type(/datum/preference/color/human/eyes_color, new_eyes)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["skin_tone"])
|
||||
@@ -944,11 +719,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
else if(href_list["skin_color"])
|
||||
if(!has_flag(mob_species, HAS_SKIN_COLOR))
|
||||
return TOPIC_NOACTION
|
||||
var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference", rgb(pref.r_skin, pref.g_skin, pref.b_skin)) as color|null
|
||||
var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference", pref.read_preference(/datum/preference/color/human/skin_color)) as color|null
|
||||
if(new_skin && has_flag(mob_species, HAS_SKIN_COLOR) && CanUseTopic(user))
|
||||
pref.r_skin = hex2num(copytext(new_skin, 2, 4))
|
||||
pref.g_skin = hex2num(copytext(new_skin, 4, 6))
|
||||
pref.b_skin = hex2num(copytext(new_skin, 6, 8))
|
||||
pref.update_preference_by_type(/datum/preference/color/human/skin_color, new_skin)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["facial_style"])
|
||||
@@ -1306,11 +1079,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["synth2_color"])
|
||||
var/new_color = input(user, "Choose your character's synth colour: ", "Character Preference", rgb(pref.r_synth, pref.g_synth, pref.b_synth)) as color|null
|
||||
var/new_color = input(user, "Choose your character's synth colour: ", "Character Preference", pref.read_preference(/datum/preference/color/human/synth_color)) as color|null
|
||||
if(new_color && CanUseTopic(user))
|
||||
pref.r_synth = hex2num(copytext(new_color, 2, 4))
|
||||
pref.g_synth = hex2num(copytext(new_color, 4, 6))
|
||||
pref.b_synth = hex2num(copytext(new_color, 6, 8))
|
||||
pref.update_preference_by_type(/datum/preference/color/human/synth_color, new_color)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["synth_markings"])
|
||||
@@ -1362,29 +1133,23 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
else if(href_list["ear_color"])
|
||||
var/new_earc = input(user, "Choose your character's ear colour:", "Character Preference",
|
||||
rgb(pref.r_ears, pref.g_ears, pref.b_ears)) as color|null
|
||||
pref.read_preference(/datum/preference/color/human/ears_color1)) as color|null
|
||||
if(new_earc)
|
||||
pref.r_ears = hex2num(copytext(new_earc, 2, 4))
|
||||
pref.g_ears = hex2num(copytext(new_earc, 4, 6))
|
||||
pref.b_ears = hex2num(copytext(new_earc, 6, 8))
|
||||
pref.update_preference_by_type(/datum/preference/color/human/ears_color1, new_earc)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["ear_color2"])
|
||||
var/new_earc2 = input(user, "Choose your character's ear colour:", "Character Preference",
|
||||
rgb(pref.r_ears2, pref.g_ears2, pref.b_ears2)) as color|null
|
||||
pref.read_preference(/datum/preference/color/human/ears_color2)) as color|null
|
||||
if(new_earc2)
|
||||
pref.r_ears2 = hex2num(copytext(new_earc2, 2, 4))
|
||||
pref.g_ears2 = hex2num(copytext(new_earc2, 4, 6))
|
||||
pref.b_ears2 = hex2num(copytext(new_earc2, 6, 8))
|
||||
pref.update_preference_by_type(/datum/preference/color/human/ears_color2, new_earc2)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["ear_color3"])
|
||||
var/new_earc3 = input(user, "Choose your character's tertiary ear colour:", "Character Preference",
|
||||
rgb(pref.r_ears3, pref.g_ears3, pref.b_ears3)) as color|null
|
||||
pref.read_preference(/datum/preference/color/human/ears_color3)) as color|null
|
||||
if(new_earc3)
|
||||
pref.r_ears3 = hex2num(copytext(new_earc3, 2, 4))
|
||||
pref.g_ears3 = hex2num(copytext(new_earc3, 4, 6))
|
||||
pref.b_ears3 = hex2num(copytext(new_earc3, 6, 8))
|
||||
pref.update_preference_by_type(/datum/preference/color/human/ears_color3, new_earc3)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["ear_secondary_style"])
|
||||
@@ -1421,29 +1186,23 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
else if(href_list["tail_color"])
|
||||
var/new_tailc = input(user, "Choose your character's tail/taur colour:", "Character Preference",
|
||||
rgb(pref.r_tail, pref.g_tail, pref.b_tail)) as color|null
|
||||
pref.read_preference(/datum/preference/color/human/tail_color1)) as color|null
|
||||
if(new_tailc)
|
||||
pref.r_tail = hex2num(copytext(new_tailc, 2, 4))
|
||||
pref.g_tail = hex2num(copytext(new_tailc, 4, 6))
|
||||
pref.b_tail = hex2num(copytext(new_tailc, 6, 8))
|
||||
pref.update_preference_by_type(/datum/preference/color/human/tail_color1, new_tailc)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["tail_color2"])
|
||||
var/new_tailc2 = input(user, "Choose your character's secondary tail/taur colour:", "Character Preference",
|
||||
rgb(pref.r_tail2, pref.g_tail2, pref.b_tail2)) as color|null
|
||||
pref.read_preference(/datum/preference/color/human/tail_color2)) as color|null
|
||||
if(new_tailc2)
|
||||
pref.r_tail2 = hex2num(copytext(new_tailc2, 2, 4))
|
||||
pref.g_tail2 = hex2num(copytext(new_tailc2, 4, 6))
|
||||
pref.b_tail2 = hex2num(copytext(new_tailc2, 6, 8))
|
||||
pref.update_preference_by_type(/datum/preference/color/human/tail_color2, new_tailc2)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["tail_color3"])
|
||||
var/new_tailc3 = input(user, "Choose your character's tertiary tail/taur colour:", "Character Preference",
|
||||
rgb(pref.r_tail3, pref.g_tail3, pref.b_tail3)) as color|null
|
||||
pref.read_preference(/datum/preference/color/human/tail_color3)) as color|null
|
||||
if(new_tailc3)
|
||||
pref.r_tail3 = hex2num(copytext(new_tailc3, 2, 4))
|
||||
pref.g_tail3 = hex2num(copytext(new_tailc3, 4, 6))
|
||||
pref.b_tail3 = hex2num(copytext(new_tailc3, 6, 8))
|
||||
pref.update_preference_by_type(/datum/preference/color/human/tail_color3, new_tailc3)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["wing_style"])
|
||||
@@ -1455,29 +1214,23 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
else if(href_list["wing_color"])
|
||||
var/new_wingc = input(user, "Choose your character's wing colour:", "Character Preference",
|
||||
rgb(pref.r_wing, pref.g_wing, pref.b_wing)) as color|null
|
||||
pref.read_preference(/datum/preference/color/human/wing_color1)) as color|null
|
||||
if(new_wingc)
|
||||
pref.r_wing = hex2num(copytext(new_wingc, 2, 4))
|
||||
pref.g_wing = hex2num(copytext(new_wingc, 4, 6))
|
||||
pref.b_wing = hex2num(copytext(new_wingc, 6, 8))
|
||||
pref.update_preference_by_type(/datum/preference/color/human/wing_color1, new_wingc)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["wing_color2"])
|
||||
var/new_wingc2 = input(user, "Choose your character's secondary wing colour:", "Character Preference",
|
||||
rgb(pref.r_wing2, pref.g_wing2, pref.b_wing2)) as color|null
|
||||
if(new_wingc2)
|
||||
pref.r_wing2 = hex2num(copytext(new_wingc2, 2, 4))
|
||||
pref.g_wing2 = hex2num(copytext(new_wingc2, 4, 6))
|
||||
pref.b_wing2 = hex2num(copytext(new_wingc2, 6, 8))
|
||||
var/new_wingc = input(user, "Choose your character's secondary wing colour:", "Character Preference",
|
||||
pref.read_preference(/datum/preference/color/human/wing_color2)) as color|null
|
||||
if(new_wingc)
|
||||
pref.update_preference_by_type(/datum/preference/color/human/wing_color2, new_wingc)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["wing_color3"])
|
||||
var/new_wingc3 = input(user, "Choose your character's tertiary wing colour:", "Character Preference",
|
||||
rgb(pref.r_wing3, pref.g_wing3, pref.b_wing3)) as color|null
|
||||
if(new_wingc3)
|
||||
pref.r_wing3 = hex2num(copytext(new_wingc3, 2, 4))
|
||||
pref.g_wing3 = hex2num(copytext(new_wingc3, 4, 6))
|
||||
pref.b_wing3 = hex2num(copytext(new_wingc3, 6, 8))
|
||||
var/new_wingc = input(user, "Choose your character's tertiary wing colour:", "Character Preference",
|
||||
pref.read_preference(/datum/preference/color/human/wing_color3)) as color|null
|
||||
if(new_wingc)
|
||||
pref.update_preference_by_type(/datum/preference/color/human/wing_color3, new_wingc)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -48,14 +48,6 @@
|
||||
character.flavor_texts["hands"] = pref.flavor_texts["hands"]
|
||||
character.flavor_texts["legs"] = pref.flavor_texts["legs"]
|
||||
character.flavor_texts["feet"] = pref.flavor_texts["feet"]
|
||||
character.ooc_notes = pref.metadata //VOREStation Add
|
||||
character.ooc_notes_likes = pref.metadata_likes
|
||||
character.ooc_notes_dislikes = pref.metadata_dislikes
|
||||
//CHOMPEdit Start
|
||||
character.ooc_notes_maybes = pref.metadata_maybes
|
||||
character.ooc_notes_favs = pref.metadata_favs
|
||||
character.ooc_notes_style = pref.matadata_ooc_style
|
||||
//CHOMPEdit End
|
||||
character.custom_link = pref.custom_link
|
||||
|
||||
/datum/category_item/player_setup_item/general/flavor/content(var/mob/user)
|
||||
|
||||
@@ -1,182 +0,0 @@
|
||||
/datum/category_item/player_setup_item/player_global/ui
|
||||
name = "UI"
|
||||
sort_order = 1
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ui/load_preferences(datum/json_savefile/savefile)
|
||||
pref.UI_style = savefile.get_entry("UI_style")
|
||||
pref.UI_style_color = savefile.get_entry("UI_style_color")
|
||||
pref.UI_style_alpha = savefile.get_entry("UI_style_alpha")
|
||||
pref.ooccolor = savefile.get_entry("ooccolor")
|
||||
pref.tooltipstyle = savefile.get_entry("tooltipstyle")
|
||||
pref.client_fps = savefile.get_entry("client_fps")
|
||||
pref.ambience_freq = savefile.get_entry("ambience_freq")
|
||||
pref.ambience_chance = savefile.get_entry("ambience_chance")
|
||||
pref.tgui_fancy = savefile.get_entry("tgui_fancy")
|
||||
pref.tgui_lock = savefile.get_entry("tgui_lock")
|
||||
pref.tgui_input_mode = savefile.get_entry("tgui_input_mode")
|
||||
pref.tgui_large_buttons = savefile.get_entry("tgui_large_buttons")
|
||||
pref.tgui_swapped_buttons = savefile.get_entry("tgui_swapped_buttons")
|
||||
pref.obfuscate_key = savefile.get_entry("obfuscate_key")
|
||||
pref.obfuscate_job = savefile.get_entry("obfuscate_job")
|
||||
pref.chat_timestamp = savefile.get_entry("chat_timestamp")
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ui/save_preferences(datum/json_savefile/savefile)
|
||||
savefile.set_entry("UI_style", pref.UI_style)
|
||||
savefile.set_entry("UI_style_color", pref.UI_style_color)
|
||||
savefile.set_entry("UI_style_alpha", pref.UI_style_alpha)
|
||||
savefile.set_entry("ooccolor", pref.ooccolor)
|
||||
savefile.set_entry("tooltipstyle", pref.tooltipstyle)
|
||||
savefile.set_entry("client_fps", pref.client_fps)
|
||||
savefile.set_entry("ambience_freq", pref.ambience_freq)
|
||||
savefile.set_entry("ambience_chance", pref.ambience_chance)
|
||||
savefile.set_entry("tgui_fancy", pref.tgui_fancy)
|
||||
savefile.set_entry("tgui_lock", pref.tgui_lock)
|
||||
savefile.set_entry("tgui_input_mode", pref.tgui_input_mode)
|
||||
savefile.set_entry("tgui_large_buttons", pref.tgui_large_buttons)
|
||||
savefile.set_entry("tgui_swapped_buttons", pref.tgui_swapped_buttons)
|
||||
savefile.set_entry("obfuscate_key", pref.obfuscate_key)
|
||||
savefile.set_entry("obfuscate_job", pref.obfuscate_job)
|
||||
savefile.set_entry("chat_timestamp", pref.chat_timestamp)
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ui/sanitize_preferences()
|
||||
pref.UI_style = sanitize_inlist(pref.UI_style, all_ui_styles, initial(pref.UI_style))
|
||||
pref.UI_style_color = sanitize_hexcolor(pref.UI_style_color, initial(pref.UI_style_color))
|
||||
pref.UI_style_alpha = sanitize_integer(pref.UI_style_alpha, 0, 255, initial(pref.UI_style_alpha))
|
||||
pref.ooccolor = sanitize_hexcolor(pref.ooccolor, initial(pref.ooccolor))
|
||||
pref.tooltipstyle = sanitize_inlist(pref.tooltipstyle, all_tooltip_styles, initial(pref.tooltipstyle))
|
||||
pref.client_fps = sanitize_integer(pref.client_fps, 0, MAX_CLIENT_FPS, initial(pref.client_fps))
|
||||
pref.ambience_freq = sanitize_integer(pref.ambience_freq, 0, 60, initial(pref.ambience_freq)) // No more than once per hour.
|
||||
pref.ambience_chance = sanitize_integer(pref.ambience_chance, 0, 100, initial(pref.ambience_chance)) // 0-100 range.
|
||||
pref.tgui_fancy = sanitize_integer(pref.tgui_fancy, 0, 1, initial(pref.tgui_fancy))
|
||||
pref.tgui_lock = sanitize_integer(pref.tgui_lock, 0, 1, initial(pref.tgui_lock))
|
||||
pref.tgui_input_mode = sanitize_integer(pref.tgui_input_mode, 0, 1, initial(pref.tgui_input_mode))
|
||||
pref.tgui_large_buttons = sanitize_integer(pref.tgui_large_buttons, 0, 1, initial(pref.tgui_large_buttons))
|
||||
pref.tgui_swapped_buttons = sanitize_integer(pref.tgui_swapped_buttons, 0, 1, initial(pref.tgui_swapped_buttons))
|
||||
pref.obfuscate_key = sanitize_integer(pref.obfuscate_key, 0, 1, initial(pref.obfuscate_key))
|
||||
pref.obfuscate_job = sanitize_integer(pref.obfuscate_job, 0, 1, initial(pref.obfuscate_job))
|
||||
pref.chat_timestamp = sanitize_integer(pref.chat_timestamp, 0, 1, initial(pref.chat_timestamp))
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ui/content(var/mob/user)
|
||||
. = span_bold("UI Style:") + " <a href='byond://?src=\ref[src];select_style=1'><b>[pref.UI_style]</b></a><br>"
|
||||
. += span_bold("Custom UI") + " (recommended for White UI):<br>"
|
||||
. += "-Color: <a href='byond://?src=\ref[src];select_color=1'><b>[pref.UI_style_color]</b></a> [color_square(hex = pref.UI_style_color)] <a href='byond://?src=\ref[src];reset=ui'>reset</a><br>"
|
||||
. += "-Alpha(transparency): <a href='byond://?src=\ref[src];select_alpha=1'><b>[pref.UI_style_alpha]</b></a> <a href='byond://?src=\ref[src];reset=alpha'>reset</a><br>"
|
||||
. += span_bold("Tooltip Style:") + " <a href='byond://?src=\ref[src];select_tooltip_style=1'><b>[pref.tooltipstyle]</b></a><br>"
|
||||
. += span_bold("Client FPS:") + " <a href='byond://?src=\ref[src];select_client_fps=1'><b>[pref.client_fps]</b></a><br>"
|
||||
. += span_bold("Random Ambience Frequency:") + " <a href='byond://?src=\ref[src];select_ambience_freq=1'><b>[pref.ambience_freq]</b></a><br>"
|
||||
. += span_bold("Ambience Chance:") + " <a href='byond://?src=\ref[src];select_ambience_chance=1'><b>[pref.ambience_chance]</b></a><br>"
|
||||
. += span_bold("TGUI Window Mode:") + " <a href='byond://?src=\ref[src];tgui_fancy=1'><b>[(pref.tgui_fancy) ? "Fancy (default)" : "Compatible (slower)"]</b></a><br>"
|
||||
. += span_bold("TGUI Window Placement:") + " <a href='byond://?src=\ref[src];tgui_lock=1'><b>[(pref.tgui_lock) ? "Primary Monitor" : "Free (default)"]</b></a><br>"
|
||||
. += span_bold("TGUI Input Framework:") + " <a href='byond://?src=\ref[src];tgui_input_mode=1'><b>[(pref.tgui_input_mode) ? "Enabled" : "Disabled (default)"]</b></a><br>"
|
||||
. += span_bold("TGUI Large Buttons:") + " <a href='byond://?src=\ref[src];tgui_large_buttons=1'><b>[(pref.tgui_large_buttons) ? "Enabled (default)" : "Disabled"]</b></a><br>"
|
||||
. += span_bold("TGUI Swapped Buttons:") + " <a href='byond://?src=\ref[src];tgui_swapped_buttons=1'><b>[(pref.tgui_swapped_buttons) ? "Enabled" : "Disabled (default)"]</b></a><br>"
|
||||
. += span_bold("Obfuscate Ckey:") + " <a href='byond://?src=\ref[src];obfuscate_key=1'><b>[(pref.obfuscate_key) ? "Enabled" : "Disabled (default)"]</b></a><br>"
|
||||
. += span_bold("Obfuscate Job:") + " <a href='byond://?src=\ref[src];obfuscate_job=1'><b>[(pref.obfuscate_job) ? "Enabled" : "Disabled (default)"]</b></a><br>"
|
||||
. += span_bold("Chat Timestamps:") + " <a href='byond://?src=\ref[src];chat_timestamps=1'><b>[(pref.chat_timestamp) ? "Enabled" : "Disabled (default)"]</b></a><br>"
|
||||
if(can_select_ooc_color(user))
|
||||
. += span_bold("OOC Color:")
|
||||
if(pref.ooccolor == initial(pref.ooccolor))
|
||||
. += "<a href='byond://?src=\ref[src];select_ooc_color=1'><b>Using Default</b></a><br>"
|
||||
else
|
||||
. += "<a href='byond://?src=\ref[src];select_ooc_color=1'><b>[pref.ooccolor]</b></a> [color_square(hex = pref.ooccolor)]<a href='byond://?src=\ref[src];reset=ooc'>reset</a><br>"
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ui/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
if(href_list["select_style"])
|
||||
var/UI_style_new = tgui_input_list(user, "Choose UI style.", "Character Preference", all_ui_styles, pref.UI_style)
|
||||
if(!UI_style_new || !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
pref.UI_style = UI_style_new
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["select_color"])
|
||||
var/UI_style_color_new = input(user, "Choose UI color, dark colors are not recommended!", "Global Preference", pref.UI_style_color) as color|null
|
||||
if(isnull(UI_style_color_new) || !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
pref.UI_style_color = UI_style_color_new
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["select_alpha"])
|
||||
var/UI_style_alpha_new = tgui_input_number(user, "Select UI alpha (transparency) level, between 50 and 255.", "Global Preference", pref.UI_style_alpha, 255, 50)
|
||||
if(isnull(UI_style_alpha_new) || (UI_style_alpha_new < 50 || UI_style_alpha_new > 255) || !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
pref.UI_style_alpha = UI_style_alpha_new
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["select_ooc_color"])
|
||||
var/new_ooccolor = input(user, "Choose OOC color:", "Global Preference") as color|null
|
||||
if(new_ooccolor && can_select_ooc_color(user) && CanUseTopic(user))
|
||||
pref.ooccolor = new_ooccolor
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["select_tooltip_style"])
|
||||
var/tooltip_style_new = tgui_input_list(user, "Choose tooltip style.", "Global Preference", all_tooltip_styles, pref.tooltipstyle)
|
||||
if(!tooltip_style_new || !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
pref.tooltipstyle = tooltip_style_new
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["select_client_fps"])
|
||||
var/fps_new = tgui_input_number(user, "Input Client FPS (1-200, 0 uses server FPS)", "Global Preference", pref.client_fps, 200, 0)
|
||||
if(isnull(fps_new) || !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
if(fps_new < 0 || fps_new > MAX_CLIENT_FPS) return TOPIC_NOACTION
|
||||
pref.client_fps = fps_new
|
||||
if(pref.client)
|
||||
pref.client.fps = fps_new
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["select_ambience_freq"])
|
||||
var/ambience_new = tgui_input_number(user, "Input how often you wish to hear ambience repeated! (1-60 MINUTES, 0 for disabled)", "Global Preference", pref.ambience_freq, 60, 0)
|
||||
if(isnull(ambience_new) || !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
if(ambience_new < 0 || ambience_new > 60) return TOPIC_NOACTION
|
||||
pref.ambience_freq = ambience_new
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["select_ambience_chance"])
|
||||
var/ambience_chance_new = tgui_input_number(user, "Input the chance you'd like to hear ambience played to you (On area change, or by random ambience). 35 means a 35% chance to play ambience. This is a range from 0-100. 0 disables ambience playing entirely. This is also affected by Ambience Frequency.", "Global Preference", pref.ambience_freq, 100, 0)
|
||||
if(isnull(ambience_chance_new) || !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
if(ambience_chance_new < 0 || ambience_chance_new > 100) return TOPIC_NOACTION
|
||||
pref.ambience_chance = ambience_chance_new
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["tgui_fancy"])
|
||||
pref.tgui_fancy = !pref.tgui_fancy
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["tgui_lock"])
|
||||
pref.tgui_lock = !pref.tgui_lock
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["tgui_input_mode"])
|
||||
pref.tgui_input_mode = !pref.tgui_input_mode
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["tgui_large_buttons"])
|
||||
pref.tgui_large_buttons = !pref.tgui_large_buttons
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["tgui_swapped_buttons"])
|
||||
pref.tgui_swapped_buttons = !pref.tgui_swapped_buttons
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["obfuscate_key"])
|
||||
pref.obfuscate_key = !pref.obfuscate_key
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["obfuscate_job"])
|
||||
pref.obfuscate_job = !pref.obfuscate_job
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["chat_timestamps"])
|
||||
pref.chat_timestamp = !pref.chat_timestamp
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["reset"])
|
||||
switch(href_list["reset"])
|
||||
if("ui")
|
||||
pref.UI_style_color = initial(pref.UI_style_color)
|
||||
if("alpha")
|
||||
pref.UI_style_alpha = initial(pref.UI_style_alpha)
|
||||
if("ooc")
|
||||
pref.ooccolor = initial(pref.ooccolor)
|
||||
return TOPIC_REFRESH
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ui/proc/can_select_ooc_color(var/mob/user)
|
||||
return CONFIG_GET(flag/allow_admin_ooccolor) && check_rights(R_ADMIN|R_EVENT|R_FUN, 0, user)
|
||||
@@ -1,20 +0,0 @@
|
||||
/datum/category_item/player_setup_item/player_global/settings
|
||||
name = "Settings"
|
||||
sort_order = 2
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/settings/load_preferences(datum/json_savefile/savefile)
|
||||
pref.lastchangelog = savefile.get_entry("lastchangelog")
|
||||
pref.lastnews = savefile.get_entry("lastnews")
|
||||
pref.lastlorenews = savefile.get_entry("lastlorenews")
|
||||
pref.default_slot = savefile.get_entry("default_slot")
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/settings/save_preferences(datum/json_savefile/savefile)
|
||||
savefile.set_entry("lastchangelog", pref.lastchangelog)
|
||||
savefile.set_entry("lastnews", pref.lastnews)
|
||||
savefile.set_entry("lastlorenews", pref.lastlorenews)
|
||||
savefile.set_entry("default_slot", pref.default_slot)
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/settings/sanitize_preferences()
|
||||
pref.lastchangelog = sanitize_text(pref.lastchangelog, initial(pref.lastchangelog))
|
||||
pref.lastnews = sanitize_text(pref.lastnews, initial(pref.lastnews))
|
||||
pref.default_slot = sanitize_integer(pref.default_slot, 1, CONFIG_GET(number/character_slots), initial(pref.default_slot))
|
||||
@@ -1,42 +0,0 @@
|
||||
/datum/category_item/player_setup_item/player_global/ooc
|
||||
name = "OOC"
|
||||
sort_order = 4
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ooc/load_preferences(datum/json_savefile/savefile)
|
||||
pref.ignored_players = savefile.get_entry("ignored_players")
|
||||
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ooc/save_preferences(datum/json_savefile/savefile)
|
||||
savefile.set_entry("ignored_players", pref.ignored_players)
|
||||
|
||||
/*
|
||||
/datum/category_item/player_setup_item/player_global/ooc/sanitize_preferences()
|
||||
if(isnull(pref.ignored_players))
|
||||
pref.ignored_players = list()
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ooc/content(var/mob/user)
|
||||
. += span_bold("OOC:") + "<br>"
|
||||
. += "Ignored Players<br>"
|
||||
for(var/ignored_player in pref.ignored_players)
|
||||
. += "[ignored_player] (<a href='byond://?src=\ref[src];unignore_player=[ignored_player]'>Unignore</a>)<br>"
|
||||
. += "(<a href='byond://?src=\ref[src];ignore_player=1'>Ignore Player</a>)"
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ooc/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
if(href_list["unignore_player"])
|
||||
if(CanUseTopic(user))
|
||||
pref.ignored_players -= href_list["unignore_player"]
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if(href_list["ignore_player"])
|
||||
if(CanUseTopic(user))
|
||||
var/player_to_ignore = input(user, "Who do you want to ignore?","Ignore") as null|text
|
||||
if(player_to_ignore)
|
||||
player_to_ignore = sanitize(ckey(player_to_ignore))
|
||||
if(player_to_ignore == user.ckey)
|
||||
to_chat(user, span_notice("You can't ignore yourself."))
|
||||
return TOPIC_REFRESH
|
||||
pref.ignored_players |= player_to_ignore
|
||||
return TOPIC_REFRESH
|
||||
|
||||
return ..()
|
||||
*/
|
||||
@@ -170,7 +170,7 @@
|
||||
if(job.is_species_banned(user.client.prefs.species, user.client.prefs.organ_data["brain"]) == TRUE)
|
||||
. += "<del>[rank]</del></td></a><td> \[THIS RACE/BRAIN TYPE CANNOT TAKE THIS ROLE.\]</td></tr>"
|
||||
continue
|
||||
if((job.minimum_character_age || job.min_age_by_species) && user.client && (user.client.prefs.age < job.get_min_age(user.client.prefs.species, user.client.prefs.organ_data["brain"])))
|
||||
if((job.minimum_character_age || job.min_age_by_species) && user.client && (user.read_preference(/datum/preference/numeric/human/age) < job.get_min_age(user.client.prefs.species, user.client.prefs.organ_data["brain"])))
|
||||
. += "<del>[rank]</del></td></a><td> \[MINIMUM CHARACTER AGE FOR SELECTED RACE/BRAIN TYPE: [job.get_min_age(user.client.prefs.species, user.client.prefs.organ_data["brain"])]\]</td></tr>"
|
||||
continue
|
||||
if((pref.job_civilian_low & ASSISTANT) && job.type != /datum/job/assistant)
|
||||
|
||||
@@ -15,36 +15,12 @@ var/list/preferences_datums = list()
|
||||
var/last_id
|
||||
|
||||
//game-preferences
|
||||
var/lastchangelog = "" //Saved changlog filesize to detect if there was a change
|
||||
var/ooccolor = "#010000" //Whatever this is set to acts as 'reset' color and is thus unusable as an actual custom color
|
||||
var/lastchangelog = "" //Saved changlog filesize to detect if there was a change // CHOMPAdd
|
||||
var/be_special = 0 //Special role selection
|
||||
var/UI_style = "Midnight"
|
||||
var/UI_style_color = "#ffffff"
|
||||
var/UI_style_alpha = 255
|
||||
var/tooltipstyle = "Midnight" //Style for popup tooltips
|
||||
var/client_fps = 40
|
||||
var/ambience_freq = 5 // How often we're playing repeating ambience to a client.
|
||||
var/ambience_chance = 35 // What's the % chance we'll play ambience (in conjunction with the above frequency)
|
||||
|
||||
var/tgui_fancy = TRUE
|
||||
var/tgui_lock = FALSE
|
||||
var/tgui_input_mode = FALSE // All the Input Boxes (Text,Number,List,Alert)
|
||||
var/tgui_large_buttons = TRUE
|
||||
var/tgui_swapped_buttons = FALSE
|
||||
var/obfuscate_key = FALSE
|
||||
var/obfuscate_job = FALSE
|
||||
var/chat_timestamp = FALSE
|
||||
|
||||
//character preferences
|
||||
var/real_name //our character's name
|
||||
var/be_random_name = 0 //whether we are a random name every round
|
||||
var/nickname //our character's nickname
|
||||
var/age = 30 //age of character
|
||||
var/bday_month = 0 //Birthday month
|
||||
var/bday_day = 0 //Birthday day
|
||||
var/last_birthday_notification = 0 //The last year we were notified about our birthday
|
||||
var/bday_announce = FALSE //Public announcement for birthdays
|
||||
var/spawnpoint = "Arrivals Shuttle" //where this character will spawn (0-2).
|
||||
var/b_type = "A+" //blood type (not-chooseable)
|
||||
var/blood_reagents = "default" //blood restoration reagents
|
||||
var/headset = 1 //headset type
|
||||
@@ -52,24 +28,9 @@ var/list/preferences_datums = list()
|
||||
var/pdachoice = 1 //PDA type
|
||||
//var/shoe_hater = FALSE //RS ADD - if true, will spawn with no shoes //CHOMPRemove, remove RS No shoes
|
||||
var/h_style = "Bald" //Hair type
|
||||
var/r_hair = 0 //Hair color
|
||||
var/g_hair = 0 //Hair color
|
||||
var/b_hair = 0 //Hair color
|
||||
var/grad_style = "none" //Gradient style
|
||||
var/r_grad = 0 //Gradient color
|
||||
var/g_grad = 0 //Gradient color
|
||||
var/b_grad = 0 //Gradient color
|
||||
var/f_style = "Shaved" //Face hair type
|
||||
var/r_facial = 0 //Face hair color
|
||||
var/g_facial = 0 //Face hair color
|
||||
var/b_facial = 0 //Face hair color
|
||||
var/s_tone = -75 //Skin tone
|
||||
var/r_skin = 238 //Skin color // Vorestation edit, so color multi sprites can aren't BLACK AS THE VOID by default.
|
||||
var/g_skin = 206 //Skin color // Vorestation edit, so color multi sprites can aren't BLACK AS THE VOID by default.
|
||||
var/b_skin = 179 //Skin color // Vorestation edit, so color multi sprites can aren't BLACK AS THE VOID by default.
|
||||
var/r_eyes = 0 //Eye color
|
||||
var/g_eyes = 0 //Eye color
|
||||
var/b_eyes = 0 //Eye color
|
||||
var/species = SPECIES_HUMAN //Species datum to use.
|
||||
var/species_preview //Used for the species selection window.
|
||||
var/list/alternate_languages = list() //Secondary language(s)
|
||||
@@ -80,9 +41,6 @@ var/list/preferences_datums = list()
|
||||
var/gear_slot = 1 //The current gear save slot
|
||||
var/list/traits //Traits which modifier characters for better or worse (mostly worse).
|
||||
var/synth_color = 0 //Lets normally uncolorable synth parts be colorable.
|
||||
var/r_synth //Used with synth_color to color synth parts that normaly can't be colored.
|
||||
var/g_synth //Same as above
|
||||
var/b_synth //Same as above
|
||||
var/synth_markings = 1 //Enable/disable markings on synth parts. //VOREStation Edit - 1 by default
|
||||
var/digitigrade = 0
|
||||
|
||||
@@ -122,6 +80,11 @@ var/list/preferences_datums = list()
|
||||
//Keeps track of preferrence for not getting any wanted jobs
|
||||
var/alternate_option = 1
|
||||
|
||||
//character preferences
|
||||
var/slot_randomized //keeps track of round-to-round randomization of the character slot, prevents overwriting
|
||||
|
||||
var/list/randomise = list()
|
||||
|
||||
// maps each organ to either null(intact), "cyborg" or "amputated"
|
||||
// will probably not be able to do this for head and torso ;)
|
||||
var/list/organ_data = list()
|
||||
@@ -144,14 +107,6 @@ var/list/preferences_datums = list()
|
||||
|
||||
var/economic_status = "Average"
|
||||
|
||||
var/uplinklocation = "PDA"
|
||||
|
||||
// OOC Metadata:
|
||||
var/metadata = ""
|
||||
var/metadata_likes = ""
|
||||
var/metadata_dislikes = ""
|
||||
var/list/ignored_players = list()
|
||||
|
||||
var/client/client = null
|
||||
var/client_ckey = null
|
||||
|
||||
@@ -373,7 +328,7 @@ var/list/preferences_datums = list()
|
||||
// This needs to happen before anything else becuase it sets some variables.
|
||||
character.set_species(species)
|
||||
// Special Case: This references variables owned by two different datums, so do it here.
|
||||
if(be_random_name)
|
||||
if(read_preference(/datum/preference/toggle/human/name_is_always_random))
|
||||
real_name = random_name(identifying_gender,species)
|
||||
|
||||
// Ask the preferences datums to apply their own settings to the new mob
|
||||
@@ -383,7 +338,7 @@ var/list/preferences_datums = list()
|
||||
if(preference.savefile_identifier != PREFERENCE_CHARACTER)
|
||||
continue
|
||||
|
||||
preference.apply_to_human(character, read_preference(preference.type))
|
||||
preference.apply_pref_to(character, read_preference(preference.type))
|
||||
|
||||
// VOREStation Edit - Sync up all their organs and species one final time
|
||||
character.force_update_organs()
|
||||
@@ -515,23 +470,15 @@ var/list/preferences_datums = list()
|
||||
character.gender = biological_gender
|
||||
character.identifying_gender = identifying_gender
|
||||
|
||||
character.r_eyes = r_eyes
|
||||
character.g_eyes = g_eyes
|
||||
character.b_eyes = b_eyes
|
||||
character.h_style = h_style
|
||||
character.r_hair = r_hair
|
||||
character.g_hair = g_hair
|
||||
character.b_hair = b_hair
|
||||
character.r_grad = r_grad
|
||||
character.g_grad = g_grad
|
||||
character.b_grad = b_grad
|
||||
|
||||
var/datum/preference/color/hair_color = GLOB.preference_entries[/datum/preference/color/human/hair_color]
|
||||
hair_color.apply_pref_to(character, read_preference(/datum/preference/color/human/hair_color))
|
||||
|
||||
var/datum/preference/color/grad_color = GLOB.preference_entries[/datum/preference/color/human/grad_color]
|
||||
grad_color.apply_pref_to(character, read_preference(/datum/preference/color/human/grad_color))
|
||||
|
||||
character.f_style = f_style
|
||||
character.r_facial = r_facial
|
||||
character.g_facial = g_facial
|
||||
character.b_facial = b_facial
|
||||
character.r_skin = r_skin
|
||||
character.g_skin = g_skin
|
||||
character.b_skin = b_skin
|
||||
character.s_tone = s_tone
|
||||
character.h_style = h_style
|
||||
character.grad_style= grad_style
|
||||
@@ -539,49 +486,50 @@ var/list/preferences_datums = list()
|
||||
character.grad_style= grad_style
|
||||
character.b_type = b_type
|
||||
character.synth_color = synth_color
|
||||
character.r_synth = r_synth
|
||||
character.g_synth = g_synth
|
||||
character.b_synth = b_synth
|
||||
|
||||
var/datum/preference/color/synth_color_color = GLOB.preference_entries[/datum/preference/color/human/synth_color]
|
||||
synth_color_color.apply_pref_to(character, read_preference(/datum/preference/color/human/synth_color))
|
||||
|
||||
character.synth_markings = synth_markings
|
||||
|
||||
var/list/ear_styles = get_available_styles(global.ear_styles_list)
|
||||
character.ear_style = ear_styles[ear_style]
|
||||
character.r_ears = r_ears
|
||||
character.b_ears = b_ears
|
||||
character.g_ears = g_ears
|
||||
character.r_ears2 = r_ears2
|
||||
character.b_ears2 = b_ears2
|
||||
character.g_ears2 = g_ears2
|
||||
character.r_ears3 = r_ears3
|
||||
character.b_ears3 = b_ears3
|
||||
character.g_ears3 = g_ears3
|
||||
|
||||
var/datum/preference/color/ears_color1 = GLOB.preference_entries[/datum/preference/color/human/ears_color1]
|
||||
ears_color1.apply_pref_to(character, read_preference(/datum/preference/color/human/ears_color1))
|
||||
|
||||
var/datum/preference/color/ears_color2 = GLOB.preference_entries[/datum/preference/color/human/ears_color2]
|
||||
ears_color2.apply_pref_to(character, read_preference(/datum/preference/color/human/ears_color2))
|
||||
|
||||
var/datum/preference/color/ears_color3 = GLOB.preference_entries[/datum/preference/color/human/ears_color3]
|
||||
ears_color3.apply_pref_to(character, read_preference(/datum/preference/color/human/ears_color3))
|
||||
|
||||
character.ear_secondary_style = ear_styles[ear_secondary_style]
|
||||
character.ear_secondary_colors = SANITIZE_LIST(ear_secondary_colors)
|
||||
|
||||
var/list/tail_styles = get_available_styles(global.tail_styles_list)
|
||||
character.tail_style = tail_styles[tail_style]
|
||||
character.r_tail = r_tail
|
||||
character.b_tail = b_tail
|
||||
character.g_tail = g_tail
|
||||
character.r_tail2 = r_tail2
|
||||
character.b_tail2 = b_tail2
|
||||
character.g_tail2 = g_tail2
|
||||
character.r_tail3 = r_tail3
|
||||
character.b_tail3 = b_tail3
|
||||
character.g_tail3 = g_tail3
|
||||
|
||||
var/datum/preference/color/tail_color1 = GLOB.preference_entries[/datum/preference/color/human/tail_color1]
|
||||
tail_color1.apply_pref_to(character, read_preference(/datum/preference/color/human/tail_color1))
|
||||
|
||||
var/datum/preference/color/tail_color2 = GLOB.preference_entries[/datum/preference/color/human/tail_color2]
|
||||
tail_color2.apply_pref_to(character, read_preference(/datum/preference/color/human/tail_color2))
|
||||
|
||||
var/datum/preference/color/tail_color3 = GLOB.preference_entries[/datum/preference/color/human/tail_color3]
|
||||
tail_color3.apply_pref_to(character, read_preference(/datum/preference/color/human/tail_color3))
|
||||
|
||||
var/list/wing_styles = get_available_styles(global.wing_styles_list)
|
||||
character.wing_style = wing_styles[wing_style]
|
||||
character.r_wing = r_wing
|
||||
character.b_wing = b_wing
|
||||
character.g_wing = g_wing
|
||||
character.r_wing2 = r_wing2
|
||||
character.b_wing2 = b_wing2
|
||||
character.g_wing2 = g_wing2
|
||||
character.r_wing3 = r_wing3
|
||||
character.b_wing3 = b_wing3
|
||||
character.g_wing3 = g_wing3
|
||||
|
||||
var/datum/preference/color/wing_color1 = GLOB.preference_entries[/datum/preference/color/human/wing_color1]
|
||||
wing_color1.apply_pref_to(character, read_preference(/datum/preference/color/human/wing_color1))
|
||||
|
||||
var/datum/preference/color/wing_color2 = GLOB.preference_entries[/datum/preference/color/human/wing_color2]
|
||||
wing_color2.apply_pref_to(character, read_preference(/datum/preference/color/human/wing_color2))
|
||||
|
||||
var/datum/preference/color/wing_color3 = GLOB.preference_entries[/datum/preference/color/human/wing_color3]
|
||||
wing_color3.apply_pref_to(character, read_preference(/datum/preference/color/human/wing_color3))
|
||||
|
||||
character.set_gender(biological_gender)
|
||||
|
||||
@@ -658,13 +606,13 @@ var/list/preferences_datums = list()
|
||||
character.flavor_texts["legs"] = flavor_texts["legs"]
|
||||
character.flavor_texts["feet"] = flavor_texts["feet"]
|
||||
if (copy_ooc_notes)
|
||||
character.ooc_notes = metadata
|
||||
character.ooc_notes_dislikes = metadata_dislikes
|
||||
character.ooc_notes_likes = metadata_likes
|
||||
character.ooc_notes = read_preference(/datum/preference/text/living/ooc_notes)
|
||||
character.ooc_notes_dislikes = read_preference(/datum/preference/text/living/ooc_notes_dislikes)
|
||||
character.ooc_notes_likes = read_preference(/datum/preference/text/living/ooc_notes_likes)
|
||||
// CHOMPAdd Start
|
||||
character.ooc_notes_favs = metadata_favs
|
||||
character.ooc_notes_maybes = metadata_maybes
|
||||
character.ooc_notes_style = matadata_ooc_style
|
||||
character.ooc_notes_favs = read_preference(/datum/preference/text/living/ooc_notes_favs)
|
||||
character.ooc_notes_maybes = read_preference(/datum/preference/text/living/ooc_notes_maybes)
|
||||
character.ooc_notes_style = read_preference(/datum/preference/toggle/living/ooc_notes_style)
|
||||
// CHOMPAdd End
|
||||
|
||||
character.weight = weight_vr
|
||||
|
||||
@@ -170,7 +170,7 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key())
|
||||
|
||||
/// Produce a random value for the purposes of character randomization.
|
||||
/// Will just create a default value by default.
|
||||
/datum/preference/proc/create_random_value(datum/preferences/preferences)
|
||||
/datum/preference/proc/create_random_value(datum/preferences/preferences, datum/species/current_species)
|
||||
return create_informed_default_value(preferences)
|
||||
|
||||
/// Returns whether or not a preference can be randomized.
|
||||
@@ -220,6 +220,17 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key())
|
||||
SHOULD_NOT_SLEEP(TRUE)
|
||||
apply_to_client(client, value)
|
||||
|
||||
/// Apply this preference onto the given liivng mob.
|
||||
/// Calls the according procs depending on type.
|
||||
/datum/preference/proc/apply_pref_to(mob/living, value)
|
||||
apply_to_living(living, value)
|
||||
if(isanimal(living))
|
||||
apply_to_animal(living, value)
|
||||
else if(ishuman(living))
|
||||
apply_to_human(living, value)
|
||||
else if(issilicon(living))
|
||||
apply_to_silicon(living, value)
|
||||
|
||||
/// Apply this preference onto the given human.
|
||||
/// Must be overriden by subtypes.
|
||||
/// Called when the savefile_identifier == PREFERENCE_CHARACTER.
|
||||
@@ -228,6 +239,30 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key())
|
||||
SHOULD_CALL_PARENT(FALSE)
|
||||
CRASH("`apply_to_human()` was not implemented for [type]!")
|
||||
|
||||
/// Apply this preference onto the given silicon.
|
||||
/// Must be overriden by subtypes.
|
||||
/// Called when the savefile_identifier == PREFERENCE_CHARACTER.
|
||||
/datum/preference/proc/apply_to_silicon(mob/living/silicon/target, value)
|
||||
SHOULD_NOT_SLEEP(TRUE)
|
||||
SHOULD_CALL_PARENT(FALSE)
|
||||
CRASH("`apply_to_human()` was not implemented for [type]!")
|
||||
|
||||
/// Apply this preference onto the given animal.
|
||||
/// Must be overriden by subtypes.
|
||||
/// Called when the savefile_identifier == PREFERENCE_CHARACTER.
|
||||
/datum/preference/proc/apply_to_animal(mob/living/simple_mob/target, value)
|
||||
SHOULD_NOT_SLEEP(TRUE)
|
||||
SHOULD_CALL_PARENT(FALSE)
|
||||
CRASH("`apply_to_human()` was not implemented for [type]!")
|
||||
|
||||
/// Apply this preference onto the given living.
|
||||
/// Must be overriden by subtypes.
|
||||
/// Called when the savefile_identifier == PREFERENCE_CHARACTER.
|
||||
/datum/preference/proc/apply_to_living(mob/living/target, value)
|
||||
SHOULD_NOT_SLEEP(TRUE)
|
||||
SHOULD_CALL_PARENT(FALSE)
|
||||
CRASH("`apply_to_human()` was not implemented for [type]!")
|
||||
|
||||
/// Returns which savefile to use for a given savefile identifier
|
||||
/datum/preferences/proc/get_save_data_for_savefile_identifier(savefile_identifier)
|
||||
RETURN_TYPE(/list)
|
||||
@@ -281,6 +316,10 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key())
|
||||
/mob/proc/read_preference(preference_type)
|
||||
return client?.prefs?.read_preference(preference_type)
|
||||
|
||||
/// Write a /datum/preference type and return its value directly to the json.
|
||||
/mob/proc/write_preference_directly(preference_type, preference_value)
|
||||
return client?.prefs?.write_preference_by_type(preference_type, preference_value)
|
||||
|
||||
/// Set a /datum/preference entry.
|
||||
/// Returns TRUE for a successful preference application.
|
||||
/// Returns FALSE if it is invalid.
|
||||
@@ -292,6 +331,23 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key())
|
||||
value_cache[preference.type] = new_value
|
||||
return success
|
||||
|
||||
/// Writes a value and saves to disk immediately
|
||||
/// Used by things that need to directly write to the player savefile things that aren't "really" prefs
|
||||
/datum/preferences/proc/write_preference_by_type(preference_type, preference_value)
|
||||
var/datum/preference/preference_entry = GLOB.preference_entries[preference_type]
|
||||
if(isnull(preference_entry))
|
||||
CRASH("Preference type `[preference_type]` is invalid!")
|
||||
|
||||
if(!write_preference(preference_entry, preference_entry.pref_serialize(preference_value)))
|
||||
return
|
||||
|
||||
if(preference_entry.savefile_identifier == PREFERENCE_CHARACTER)
|
||||
var/save_data = get_save_data_for_savefile_identifier(preference_entry.savefile_identifier)
|
||||
player_setup.save_character(save_data)
|
||||
else
|
||||
savefile.save()
|
||||
return TRUE
|
||||
|
||||
/// Will perform an update on the preference, but not write to the savefile.
|
||||
/// This will, for instance, update the character preference view.
|
||||
/// Performs sanity checks.
|
||||
@@ -315,6 +371,13 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key())
|
||||
|
||||
return TRUE
|
||||
|
||||
/datum/preferences/proc/update_preference_by_type(preference_type, preference_value)
|
||||
var/datum/preference/preference_entry = GLOB.preference_entries[preference_type]
|
||||
if(isnull(preference_entry))
|
||||
CRASH("Preference type `[preference_type]` is invalid!")
|
||||
|
||||
return update_preference(preference_entry, preference_value)
|
||||
|
||||
/// Checks that a given value is valid.
|
||||
/// Must be overriden by subtypes.
|
||||
/// Any type can be passed through.
|
||||
@@ -354,8 +417,9 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key())
|
||||
// if(!(savefile_key in species.get_features()))
|
||||
// return FALSE
|
||||
|
||||
if(!should_show_on_page(preferences.current_window))
|
||||
return FALSE
|
||||
// TODO: Restore when tgui
|
||||
// if(!should_show_on_page(preferences.current_window))
|
||||
// return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
@@ -444,8 +508,8 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key())
|
||||
if(should_generate_icons)
|
||||
var/list/icons = list()
|
||||
|
||||
// for(var/choice in choices) // TODO: Pref spritesheet asset
|
||||
// icons[choice] = get_spritesheet_key(choice)
|
||||
for(var/choice in choices)
|
||||
icons[choice] = get_spritesheet_key(choice)
|
||||
|
||||
data["icons"] = icons
|
||||
|
||||
@@ -454,6 +518,54 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key())
|
||||
|
||||
return data
|
||||
|
||||
/datum/preference/choiced/human
|
||||
abstract_type = /datum/preference/choiced/human
|
||||
|
||||
/datum/preference/choiced/human/apply_to_living(mob/living/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/choiced/human/apply_to_silicon(mob/living/silicon/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/choiced/human/apply_to_animal(mob/living/simple_mob, value)
|
||||
return
|
||||
|
||||
/datum/preference/choiced/living
|
||||
abstract_type = /datum/preference/choiced/living
|
||||
|
||||
/datum/preference/choiced/living/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/choiced/living/apply_to_silicon(mob/living/silicon/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/choiced/living/apply_to_animal(mob/living/simple_mob, value)
|
||||
return
|
||||
|
||||
/datum/preference/choiced/silicon
|
||||
abstract_type = /datum/preference/choiced/silicon
|
||||
|
||||
/datum/preference/choiced/silicon/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/choiced/silicon/apply_to_living(mob/living/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/choiced/silicon/apply_to_animal(mob/living/simple_mob, value)
|
||||
return
|
||||
|
||||
/datum/preference/choiced/animal
|
||||
abstract_type = /datum/preference/choiced/animal
|
||||
|
||||
/datum/preference/choiced/animal/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/choiced/animal/apply_to_living(mob/living/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/choiced/animal/apply_to_silicon(mob/living/silicon/target, value)
|
||||
return
|
||||
|
||||
/// A preference that represents an RGB color of something.
|
||||
/// Will give the value as 6 hex digits, without a hash.
|
||||
/datum/preference/color
|
||||
@@ -471,6 +583,54 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key())
|
||||
/datum/preference/color/is_valid(value)
|
||||
return findtext(value, GLOB.is_color)
|
||||
|
||||
/datum/preference/color/human
|
||||
abstract_type = /datum/preference/color/human
|
||||
|
||||
/datum/preference/color/human/apply_to_living(mob/living/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/color/human/apply_to_silicon(mob/living/silicon/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/color/human/apply_to_animal(mob/living/simple_mob, value)
|
||||
return
|
||||
|
||||
/datum/preference/color/living
|
||||
abstract_type = /datum/preference/color/living
|
||||
|
||||
/datum/preference/color/living/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/color/living/apply_to_silicon(mob/living/silicon/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/color/living/apply_to_animal(mob/living/simple_mob, value)
|
||||
return
|
||||
|
||||
/datum/preference/color/silicon
|
||||
abstract_type = /datum/preference/color/silicon
|
||||
|
||||
/datum/preference/color/silicon/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/color/silicon/apply_to_living(mob/living/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/color/silicon/apply_to_animal(mob/living/simple_mob, value)
|
||||
return
|
||||
|
||||
/datum/preference/color/animal
|
||||
abstract_type = /datum/preference/color/animal
|
||||
|
||||
/datum/preference/color/animal/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/color/animal/apply_to_living(mob/living/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/color/animal/apply_to_silicon(mob/living/silicon/target, value)
|
||||
return
|
||||
|
||||
/// A numeric preference with a minimum and maximum value
|
||||
/datum/preference/numeric
|
||||
/// The minimum value
|
||||
@@ -505,6 +665,54 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key())
|
||||
"step" = step,
|
||||
)
|
||||
|
||||
/datum/preference/numeric/human
|
||||
abstract_type = /datum/preference/numeric/human
|
||||
|
||||
/datum/preference/numeric/human/apply_to_living(mob/living/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/numeric/human/apply_to_silicon(mob/living/silicon/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/numeric/human/apply_to_animal(mob/living/simple_mob, value)
|
||||
return
|
||||
|
||||
/datum/preference/numeric/living
|
||||
abstract_type = /datum/preference/numeric/living
|
||||
|
||||
/datum/preference/numeric/living/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/numeric/living/apply_to_silicon(mob/living/silicon/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/numeric/living/apply_to_animal(mob/living/simple_mob, value)
|
||||
return
|
||||
|
||||
/datum/preference/numeric/silicon
|
||||
abstract_type = /datum/preference/numeric/silicon
|
||||
|
||||
/datum/preference/numeric/silicon/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/numeric/silicon/apply_to_living(mob/living/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/numeric/silicon/apply_to_animal(mob/living/simple_mob, value)
|
||||
return
|
||||
|
||||
/datum/preference/numeric/animal
|
||||
abstract_type = /datum/preference/numeric/animal
|
||||
|
||||
/datum/preference/numeric/animal/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/numeric/animal/apply_to_living(mob/living/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/numeric/animal/apply_to_silicon(mob/living/silicon/target, value)
|
||||
return
|
||||
|
||||
/// A preference whose value is always TRUE or FALSE
|
||||
/datum/preference/toggle
|
||||
abstract_type = /datum/preference/toggle
|
||||
@@ -521,6 +729,53 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key())
|
||||
/datum/preference/toggle/is_valid(value)
|
||||
return value == TRUE || value == FALSE
|
||||
|
||||
/datum/preference/toggle/human
|
||||
abstract_type = /datum/preference/toggle/human
|
||||
|
||||
/datum/preference/toggle/human/apply_to_living(mob/living/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/toggle/human/apply_to_silicon(mob/living/silicon/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/toggle/human/apply_to_animal(mob/living/simple_mob, value)
|
||||
return
|
||||
|
||||
/datum/preference/toggle/living
|
||||
abstract_type = /datum/preference/toggle/living
|
||||
|
||||
/datum/preference/toggle/living/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/toggle/living/apply_to_silicon(mob/living/silicon/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/toggle/living/apply_to_animal(mob/living/simple_mob, value)
|
||||
return
|
||||
|
||||
/datum/preference/toggle/silicon
|
||||
abstract_type = /datum/preference/toggle/silicon
|
||||
|
||||
/datum/preference/toggle/silicon/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/toggle/silicon/apply_to_living(mob/living/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/toggle/silicon/apply_to_animal(mob/living/simple_mob, value)
|
||||
return
|
||||
|
||||
/datum/preference/toggle/animal
|
||||
abstract_type = /datum/preference/toggle/animal
|
||||
|
||||
/datum/preference/toggle/animal/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/toggle/animal/apply_to_living(mob/living/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/toggle/animal/apply_to_silicon(mob/living/silicon/target, value)
|
||||
return
|
||||
|
||||
/// A string-based preference accepting arbitrary string values entered by the user, with a maximum length.
|
||||
/datum/preference/text
|
||||
@@ -544,3 +799,51 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key())
|
||||
|
||||
/datum/preference/text/compile_constant_data()
|
||||
return list("maximum_length" = maximum_value_length)
|
||||
|
||||
/datum/preference/text/human
|
||||
abstract_type = /datum/preference/text/human
|
||||
|
||||
/datum/preference/text/human/apply_to_living(mob/living/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/text/human/apply_to_silicon(mob/living/silicon/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/text/human/apply_to_animal(mob/living/simple_mob, value)
|
||||
return
|
||||
|
||||
/datum/preference/text/living
|
||||
abstract_type = /datum/preference/text/living
|
||||
|
||||
/datum/preference/text/living/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/text/living/apply_to_silicon(mob/living/silicon/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/text/living/apply_to_animal(mob/living/simple_mob, value)
|
||||
return
|
||||
|
||||
/datum/preference/text/silicon
|
||||
abstract_type = /datum/preference/text/silicon
|
||||
|
||||
/datum/preference/text/silicon/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/text/silicon/apply_to_living(mob/living/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/text/silicon/apply_to_animal(mob/living/simple_mob, value)
|
||||
return
|
||||
|
||||
/datum/preference/text/animal
|
||||
abstract_type = /datum/preference/text/animal
|
||||
|
||||
/datum/preference/text/animal/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/text/animal/apply_to_living(mob/living/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/text/animal/apply_to_silicon(mob/living/silicon/target, value)
|
||||
return
|
||||
|
||||
84
code/modules/client/preferences/middleware/random.dm
Normal file
84
code/modules/client/preferences/middleware/random.dm
Normal file
@@ -0,0 +1,84 @@
|
||||
/// Middleware for handling randomization preferences
|
||||
/datum/preference_middleware/random
|
||||
action_delegations = list(
|
||||
"randomize_character" = PROC_REF(randomize_character),
|
||||
"set_random_preference" = PROC_REF(set_random_preference),
|
||||
)
|
||||
|
||||
/datum/preference_middleware/random/get_character_preferences(mob/user)
|
||||
return list(
|
||||
"randomization" = preferences.randomise,
|
||||
)
|
||||
|
||||
/datum/preference_middleware/random/get_constant_data()
|
||||
var/list/randomizable = list()
|
||||
|
||||
for (var/preference_type in GLOB.preference_entries)
|
||||
var/datum/preference/preference = GLOB.preference_entries[preference_type]
|
||||
if (!preference.is_randomizable())
|
||||
continue
|
||||
|
||||
randomizable += preference.savefile_key
|
||||
|
||||
return list(
|
||||
"randomizable" = randomizable,
|
||||
)
|
||||
|
||||
/datum/preference_middleware/random/proc/randomize_character()
|
||||
for (var/datum/preference/preference as anything in get_preferences_in_priority_order())
|
||||
if (preferences.should_randomize(preference))
|
||||
preferences.write_preference(preference, preference.create_random_value(preferences))
|
||||
|
||||
// preferences.character_preview_view.update_body()
|
||||
|
||||
return TRUE
|
||||
|
||||
/datum/preference_middleware/random/proc/set_random_preference(list/params, mob/user)
|
||||
var/requested_preference_key = params["preference"]
|
||||
var/value = params["value"]
|
||||
|
||||
var/datum/preference/requested_preference = GLOB.preference_entries_by_key[requested_preference_key]
|
||||
if (isnull(requested_preference))
|
||||
return FALSE
|
||||
|
||||
if (!requested_preference.is_randomizable())
|
||||
return FALSE
|
||||
|
||||
if (value == RANDOM_ANTAG_ONLY)
|
||||
preferences.randomise[requested_preference_key] = RANDOM_ANTAG_ONLY
|
||||
else if (value == RANDOM_ENABLED)
|
||||
preferences.randomise[requested_preference_key] = RANDOM_ENABLED
|
||||
else if (value == RANDOM_DISABLED)
|
||||
preferences.randomise -= requested_preference_key
|
||||
else
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
/// Returns if a preference should be randomized.
|
||||
/datum/preferences/proc/should_randomize(datum/preference/preference, is_antag)
|
||||
if (!preference.is_randomizable())
|
||||
return FALSE
|
||||
|
||||
var/requested_randomization = randomise[preference.savefile_key]
|
||||
|
||||
//if (istype(preference, /datum/preference/name))
|
||||
// requested_randomization = read_preference(/datum/preference/choiced/random_name)
|
||||
|
||||
switch (requested_randomization)
|
||||
if (RANDOM_ENABLED)
|
||||
return TRUE
|
||||
if (RANDOM_ANTAG_ONLY)
|
||||
return is_antag
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/// Given randomization flags, will return whether or not this preference should be randomized.
|
||||
/datum/preference/proc/included_in_randomization_flags(randomize_flags)
|
||||
return TRUE
|
||||
|
||||
// /datum/preference/name/included_in_randomization_flags(randomize_flags)
|
||||
// return !!(randomize_flags & RANDOMIZE_NAME)
|
||||
|
||||
// /datum/preference/choiced/species/included_in_randomization_flags(randomize_flags)
|
||||
// return !!(randomize_flags & RANDOMIZE_SPECIES)
|
||||
25
code/modules/client/preferences/migrations/16_colors.dm
Normal file
25
code/modules/client/preferences/migrations/16_colors.dm
Normal file
@@ -0,0 +1,25 @@
|
||||
/// Moves r_g_b_ affixes to single hex colors
|
||||
/datum/preferences/proc/migration_16_colors(datum/json_savefile/S)
|
||||
for(var/slot in 1 to CONFIG_GET(number/character_slots))
|
||||
var/list/prefs = S.get_entry("character[slot]", null)
|
||||
if(!islist(prefs))
|
||||
continue
|
||||
|
||||
prefs["hair_color"] = rgb(prefs["hair_red"], prefs["hair_green"], prefs["hair_blue"])
|
||||
prefs["facial_color"] = rgb(prefs["facial_red"], prefs["facial_green"], prefs["facial_blue"])
|
||||
prefs["grad_color"] = rgb(prefs["grad_red"], prefs["grad_green"], prefs["grad_blue"])
|
||||
prefs["skin_color"] = rgb(prefs["skin_red"], prefs["skin_green"], prefs["skin_blue"])
|
||||
prefs["eyes_color"] = rgb(prefs["eyes_red"], prefs["eyes_green"], prefs["eyes_blue"])
|
||||
prefs["synth_color_rgb"] = rgb(prefs["synth_red"], prefs["synth_green"], prefs["synth_blue"])
|
||||
|
||||
prefs["ears_color1"] = rgb(prefs["r_ears"], prefs["g_ears"], prefs["b_ears"])
|
||||
prefs["ears_color2"] = rgb(prefs["r_ears2"], prefs["g_ears2"], prefs["b_ears2"])
|
||||
prefs["ears_color3"] = rgb(prefs["r_ears3"], prefs["g_ears3"], prefs["b_ears3"])
|
||||
|
||||
prefs["tail_color1"] = rgb(prefs["r_tail"], prefs["g_tail"], prefs["b_tail"])
|
||||
prefs["tail_color2"] = rgb(prefs["r_tail2"], prefs["g_tail2"], prefs["b_tail2"])
|
||||
prefs["tail_color3"] = rgb(prefs["r_tail3"], prefs["g_tail3"], prefs["b_tail3"])
|
||||
|
||||
prefs["wing_color1"] = rgb(prefs["r_wing"], prefs["g_wing"], prefs["b_wing"])
|
||||
prefs["wing_color2"] = rgb(prefs["r_wing2"], prefs["g_wing2"], prefs["b_wing2"])
|
||||
prefs["wing_color3"] = rgb(prefs["r_wing3"], prefs["g_wing3"], prefs["b_wing3"])
|
||||
@@ -0,0 +1,18 @@
|
||||
/datum/preference/choiced/uplinklocation
|
||||
category = PREFERENCE_CATEGORY_NON_CONTEXTUAL
|
||||
savefile_key = "uplinklocation"
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/choiced/uplinklocation/init_possible_values()
|
||||
return GLOB.uplink_locations
|
||||
|
||||
// No application
|
||||
/datum/preference/choiced/uplinklocation/apply_to_living(mob/living/target, value)
|
||||
return
|
||||
/datum/preference/choiced/uplinklocation/apply_to_animal(mob/living/simple_mob/target, value)
|
||||
return
|
||||
/datum/preference/choiced/uplinklocation/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
/datum/preference/choiced/uplinklocation/apply_to_silicon(mob/living/silicon/target, value)
|
||||
return
|
||||
@@ -0,0 +1,175 @@
|
||||
// Toggles
|
||||
/datum/preference/toggle/human/bday_announce
|
||||
category = PREFERENCE_CATEGORY_NON_CONTEXTUAL
|
||||
savefile_key = "bday_announce"
|
||||
default_value = FALSE
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/toggle/human/bday_announce/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
|
||||
// Numerics
|
||||
/datum/preference/numeric/human/age
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_key = "age"
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
|
||||
step = 1
|
||||
minimum = 18
|
||||
maximum = 250
|
||||
|
||||
/datum/preference/numeric/human/age/apply_to_human(mob/living/carbon/human/target, value)
|
||||
target.age = value
|
||||
return
|
||||
|
||||
/datum/preference/numeric/human/age/create_default_value()
|
||||
return 18
|
||||
|
||||
/datum/preference/numeric/human/age/create_random_value(datum/preferences/preferences, datum/species/current_species)
|
||||
return rand(current_species.min_age, current_species.max_age)
|
||||
|
||||
/datum/preference/numeric/human/bday_month
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_key = "bday_month"
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
can_randomize = FALSE
|
||||
|
||||
step = 1
|
||||
minimum = 0
|
||||
maximum = 12
|
||||
|
||||
/datum/preference/numeric/human/bday_month/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/numeric/human/bday_month/create_default_value()
|
||||
return 0
|
||||
|
||||
/datum/preference/numeric/human/bday_day
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_key = "bday_day"
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
can_randomize = FALSE
|
||||
|
||||
step = 1
|
||||
minimum = 0
|
||||
maximum = 31
|
||||
|
||||
/datum/preference/numeric/human/bday_day/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/numeric/human/bday_day/create_default_value()
|
||||
return 0
|
||||
|
||||
/datum/preference/numeric/human/last_bday_note
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_key = "last_bday_note"
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
can_randomize = FALSE
|
||||
|
||||
step = 1
|
||||
minimum = 0
|
||||
maximum = 9999
|
||||
|
||||
/datum/preference/numeric/human/last_bday_note/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return
|
||||
|
||||
/datum/preference/numeric/human/last_bday_note/create_default_value()
|
||||
return 0
|
||||
|
||||
/datum/preference/numeric/human/last_bday_note/is_accessible(datum/preferences/preferences)
|
||||
..()
|
||||
return FALSE
|
||||
|
||||
/datum/preference/text/living/ooc_notes
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "OOC_Notes"
|
||||
maximum_value_length = MAX_MESSAGE_LEN * 4
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/text/living/ooc_notes/apply_to_living(mob/living/target, value)
|
||||
target.ooc_notes = value
|
||||
return
|
||||
|
||||
/datum/preference/text/living/ooc_notes_likes
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "OOC_Notes_Likes"
|
||||
maximum_value_length = MAX_MESSAGE_LEN * 2
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/text/living/ooc_notes_likes/apply_to_living(mob/living/target, value)
|
||||
target.ooc_notes_likes = value
|
||||
return
|
||||
|
||||
/datum/preference/text/living/ooc_notes_dislikes
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "OOC_Notes_Disikes"
|
||||
maximum_value_length = MAX_MESSAGE_LEN * 2
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/text/living/ooc_notes_dislikes/apply_to_living(mob/living/target, value)
|
||||
target.ooc_notes_dislikes = value
|
||||
return
|
||||
|
||||
// CHOMP specific, but added here not to forget
|
||||
/datum/preference/toggle/living/ooc_notes_style
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_key = "OOC_Notes_System"
|
||||
default_value = FALSE
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/toggle/living/ooc_notes_style/apply_to_living(mob/living/target, value)
|
||||
target.ooc_notes_style = value // CHOMPEnable
|
||||
return
|
||||
|
||||
/datum/preference/text/living/ooc_notes_maybes
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "OOC_Notes_Maybes"
|
||||
maximum_value_length = MAX_MESSAGE_LEN * 2
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/text/living/ooc_notes_maybes/apply_to_living(mob/living/target, value)
|
||||
target.ooc_notes_maybes = value // CHOMPEnable
|
||||
return
|
||||
|
||||
/datum/preference/text/living/ooc_notes_favs
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "OOC_Notes_Favs"
|
||||
maximum_value_length = MAX_MESSAGE_LEN * 2
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/text/living/ooc_notes_favs/apply_to_living(mob/living/target, value)
|
||||
target.ooc_notes_favs = value // CHOMPEnable
|
||||
return
|
||||
|
||||
/datum/preference/toggle/human/name_is_always_random
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_key = "name_is_always_random"
|
||||
default_value = FALSE
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/toggle/human/name_is_always_random/apply_to_human(mob/living/carbon/human/target, value)
|
||||
return // handled in copy_to
|
||||
|
||||
/datum/preference/choiced/living/spawnpoint
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_key = "spawnpoint"
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/choiced/living/spawnpoint/init_possible_values()
|
||||
var/list/spawnkeys = list()
|
||||
for(var/spawntype in get_spawn_points())
|
||||
spawnkeys += spawntype
|
||||
return spawnkeys
|
||||
|
||||
/datum/preference/choiced/living/spawnpoint/apply_to_living(mob/living/target, value)
|
||||
return // handled in job_controller
|
||||
@@ -0,0 +1,166 @@
|
||||
/datum/preference/color/human/hair_color
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "hair_color"
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/color/human/hair_color/apply_to_human(mob/living/carbon/human/target, value)
|
||||
target.r_hair = hex2num(copytext(value, 2, 4))
|
||||
target.g_hair = hex2num(copytext(value, 4, 6))
|
||||
target.b_hair = hex2num(copytext(value, 6, 8))
|
||||
|
||||
/datum/preference/color/human/grad_color
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "grad_color"
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/color/human/grad_color/apply_to_human(mob/living/carbon/human/target, value)
|
||||
target.r_grad = hex2num(copytext(value, 2, 4))
|
||||
target.g_grad = hex2num(copytext(value, 4, 6))
|
||||
target.b_grad = hex2num(copytext(value, 6, 8))
|
||||
|
||||
/datum/preference/color/human/facial_color
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "facial_color"
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/color/human/facial_color/apply_to_human(mob/living/carbon/human/target, value)
|
||||
target.r_facial = hex2num(copytext(value, 2, 4))
|
||||
target.g_facial = hex2num(copytext(value, 4, 6))
|
||||
target.b_facial = hex2num(copytext(value, 6, 8))
|
||||
|
||||
/datum/preference/color/human/eyes_color
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "eyes_color"
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/color/human/eyes_color/apply_to_human(mob/living/carbon/human/target, value)
|
||||
target.r_eyes = hex2num(copytext(value, 2, 4))
|
||||
target.g_eyes = hex2num(copytext(value, 4, 6))
|
||||
target.b_eyes = hex2num(copytext(value, 6, 8))
|
||||
|
||||
/datum/preference/color/human/skin_color
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "skin_color"
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/color/human/skin_color/apply_to_human(mob/living/carbon/human/target, value)
|
||||
target.r_skin = hex2num(copytext(value, 2, 4))
|
||||
target.g_skin = hex2num(copytext(value, 4, 6))
|
||||
target.b_skin = hex2num(copytext(value, 6, 8))
|
||||
|
||||
/datum/preference/color/human/synth_color
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "synth_color_rgb"
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/color/human/synth_color/apply_to_human(mob/living/carbon/human/target, value)
|
||||
target.r_synth = hex2num(copytext(value, 2, 4))
|
||||
target.g_synth = hex2num(copytext(value, 4, 6))
|
||||
target.b_synth = hex2num(copytext(value, 6, 8))
|
||||
|
||||
/datum/preference/color/human/tail_color1
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "tail_color1"
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/color/human/tail_color1/apply_to_human(mob/living/carbon/human/target, value)
|
||||
target.r_tail = hex2num(copytext(value, 2, 4))
|
||||
target.g_tail = hex2num(copytext(value, 4, 6))
|
||||
target.b_tail = hex2num(copytext(value, 6, 8))
|
||||
|
||||
/datum/preference/color/human/tail_color2
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "tail_color2"
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/color/human/tail_color2/apply_to_human(mob/living/carbon/human/target, value)
|
||||
target.r_tail2 = hex2num(copytext(value, 2, 4))
|
||||
target.g_tail2 = hex2num(copytext(value, 4, 6))
|
||||
target.b_tail2 = hex2num(copytext(value, 6, 8))
|
||||
|
||||
/datum/preference/color/human/tail_color3
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "tail_color3"
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/color/human/tail_color3/apply_to_human(mob/living/carbon/human/target, value)
|
||||
target.r_tail3 = hex2num(copytext(value, 2, 4))
|
||||
target.g_tail3 = hex2num(copytext(value, 4, 6))
|
||||
target.b_tail3 = hex2num(copytext(value, 6, 8))
|
||||
|
||||
|
||||
/datum/preference/color/human/wing_color1
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "wing_color1"
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/color/human/wing_color1/apply_to_human(mob/living/carbon/human/target, value)
|
||||
target.r_wing = hex2num(copytext(value, 2, 4))
|
||||
target.g_wing = hex2num(copytext(value, 4, 6))
|
||||
target.b_wing = hex2num(copytext(value, 6, 8))
|
||||
|
||||
/datum/preference/color/human/wing_color2
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "wing_color2"
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/color/human/wing_color2/apply_to_human(mob/living/carbon/human/target, value)
|
||||
target.r_wing2 = hex2num(copytext(value, 2, 4))
|
||||
target.g_wing2 = hex2num(copytext(value, 4, 6))
|
||||
target.b_wing2 = hex2num(copytext(value, 6, 8))
|
||||
|
||||
/datum/preference/color/human/wing_color3
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "wing_color3"
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/color/human/wing_color3/apply_to_human(mob/living/carbon/human/target, value)
|
||||
target.r_wing3 = hex2num(copytext(value, 2, 4))
|
||||
target.g_wing3 = hex2num(copytext(value, 4, 6))
|
||||
target.b_wing3 = hex2num(copytext(value, 6, 8))
|
||||
|
||||
|
||||
/datum/preference/color/human/ears_color1
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "ears_color1"
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/color/human/ears_color1/apply_to_human(mob/living/carbon/human/target, value)
|
||||
target.r_ears = hex2num(copytext(value, 2, 4))
|
||||
target.g_ears = hex2num(copytext(value, 4, 6))
|
||||
target.b_ears = hex2num(copytext(value, 6, 8))
|
||||
|
||||
/datum/preference/color/human/ears_color2
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "ears_color2"
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/color/human/ears_color2/apply_to_human(mob/living/carbon/human/target, value)
|
||||
target.r_ears2 = hex2num(copytext(value, 2, 4))
|
||||
target.g_ears2 = hex2num(copytext(value, 4, 6))
|
||||
target.b_ears2 = hex2num(copytext(value, 6, 8))
|
||||
|
||||
/datum/preference/color/human/ears_color3
|
||||
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
|
||||
savefile_identifier = PREFERENCE_CHARACTER
|
||||
savefile_key = "ears_color3"
|
||||
can_randomize = FALSE
|
||||
|
||||
/datum/preference/color/human/ears_color3/apply_to_human(mob/living/carbon/human/target, value)
|
||||
target.r_ears3 = hex2num(copytext(value, 2, 4))
|
||||
target.g_ears3 = hex2num(copytext(value, 4, 6))
|
||||
target.b_ears3 = hex2num(copytext(value, 6, 8))
|
||||
@@ -71,3 +71,18 @@
|
||||
savefile_key = "CHAT_ADSAY"
|
||||
default_value = TRUE
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/// The color admins will speak in for OOC.
|
||||
/datum/preference/color/ooc_color
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "ooccolor"
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/color/ooc_color/create_default_value()
|
||||
return "#010000"
|
||||
|
||||
/datum/preference/color/ooc_color/is_accessible(datum/preferences/preferences)
|
||||
if(!..(preferences))
|
||||
return FALSE
|
||||
|
||||
return CONFIG_GET(flag/allow_admin_ooccolor) && check_rights(R_ADMIN|R_EVENT|R_FUN, 0, preferences.client)
|
||||
20
code/modules/client/preferences/types/game/fps.dm
Normal file
20
code/modules/client/preferences/types/game/fps.dm
Normal file
@@ -0,0 +1,20 @@
|
||||
/datum/preference/numeric/fps
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "client_fps"
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
minimum = -1
|
||||
maximum = MAX_CLIENT_FPS
|
||||
|
||||
/datum/preference/numeric/fps/create_default_value()
|
||||
return -1
|
||||
|
||||
/datum/preference/numeric/fps/apply_to_client(client/client, value)
|
||||
client.fps = (value < 0) ? RECOMMENDED_FPS : value
|
||||
|
||||
/datum/preference/numeric/fps/compile_constant_data()
|
||||
var/list/data = ..()
|
||||
|
||||
data["recommended_fps"] = RECOMMENDED_FPS
|
||||
|
||||
return data
|
||||
@@ -0,0 +1,17 @@
|
||||
/datum/preference/ignored_players
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "ignored_players"
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/ignored_players/is_valid(value)
|
||||
return TRUE
|
||||
|
||||
/datum/preference/ignored_players/pref_deserialize(input, datum/preferences/preferences)
|
||||
return SANITIZE_LIST(input)
|
||||
|
||||
/datum/preference/ignored_players/create_default_value()
|
||||
return list()
|
||||
|
||||
/datum/preference/ignored_players/is_accessible(datum/preferences/preferences)
|
||||
. = ..()
|
||||
return FALSE
|
||||
@@ -11,18 +11,6 @@
|
||||
PH.set_ao(VIS_OBJS, value)
|
||||
PH.set_ao(VIS_MOBS, value)
|
||||
|
||||
/datum/preference/toggle/mob_tooltips
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "MOB_TOOLTIPS"
|
||||
default_value = TRUE
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/toggle/inv_tooltips
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "INV_TOOLTIPS"
|
||||
default_value = TRUE
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/toggle/attack_icons
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "ATTACK_ICONS"
|
||||
@@ -93,3 +81,15 @@
|
||||
winset(client, null, "browser-options=[DEFAULT_CLIENT_BROWSER_OPTIONS],devtools")
|
||||
else
|
||||
winset(client, null, "browser-options=[DEFAULT_CLIENT_BROWSER_OPTIONS]")
|
||||
|
||||
/datum/preference/toggle/obfuscate_key
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "obfuscate_key"
|
||||
default_value = FALSE
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/toggle/obfuscate_job
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "obfuscate_job"
|
||||
default_value = FALSE
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
@@ -147,3 +147,23 @@
|
||||
savefile_key = "DIGEST_NOISES"
|
||||
default_value = TRUE
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/numeric/ambience_freq
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "ambience_freq"
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
minimum = 0
|
||||
maximum = 60
|
||||
|
||||
/datum/preference/numeric/ambience_freq/create_default_value()
|
||||
return 5
|
||||
|
||||
/datum/preference/numeric/ambience_chance
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "ambience_chance"
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
minimum = 0
|
||||
maximum = 100
|
||||
|
||||
/datum/preference/numeric/ambience_chance/create_default_value()
|
||||
return 35
|
||||
22
code/modules/client/preferences/types/game/tooltip.dm
Normal file
22
code/modules/client/preferences/types/game/tooltip.dm
Normal file
@@ -0,0 +1,22 @@
|
||||
/datum/preference/toggle/mob_tooltips
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "MOB_TOOLTIPS"
|
||||
default_value = TRUE
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/toggle/inv_tooltips
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "INV_TOOLTIPS"
|
||||
default_value = TRUE
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/choiced/tooltip_style
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "tooltipstyle"
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/choiced/tooltip_style/init_possible_values()
|
||||
return all_tooltip_styles
|
||||
|
||||
/datum/preference/choiced/tooltip_style/create_default_value()
|
||||
return all_tooltip_styles[1]
|
||||
@@ -21,6 +21,36 @@
|
||||
if(before != client.tgui_panel.oldchat)
|
||||
client.nuke_chat()
|
||||
|
||||
/datum/preference/toggle/tgui_fancy
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "tgui_fancy"
|
||||
default_value = TRUE
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/toggle/tgui_lock
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "tgui_lock"
|
||||
default_value = FALSE
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/toggle/tgui_input_mode
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "tgui_input_mode"
|
||||
default_value = FALSE
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/toggle/tgui_large_buttons
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "tgui_large_buttons"
|
||||
default_value = TRUE
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/toggle/tgui_swapped_buttons
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "tgui_swapped_buttons"
|
||||
default_value = FALSE
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/toggle/tgui_say
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "TGUI_SAY"
|
||||
49
code/modules/client/preferences/types/game/ui_style.dm
Normal file
49
code/modules/client/preferences/types/game/ui_style.dm
Normal file
@@ -0,0 +1,49 @@
|
||||
/datum/preference/choiced/ui_style
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "UI_style"
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
should_generate_icons = TRUE
|
||||
|
||||
/datum/preference/choiced/ui_style/init_possible_values()
|
||||
return assoc_to_keys(all_ui_styles)
|
||||
|
||||
/datum/preference/choiced/ui_style/icon_for(value)
|
||||
var/icon/icon_file = all_ui_styles[value]
|
||||
|
||||
var/icon/icon = icon(icon_file, "r_hand_inactive")
|
||||
icon.Crop(1, 1, ICON_SIZE_X * 2, ICON_SIZE_Y)
|
||||
icon.Blend(icon(icon_file, "l_hand_inactive"), ICON_OVERLAY, ICON_SIZE_X)
|
||||
|
||||
return icon
|
||||
|
||||
/datum/preference/choiced/ui_style/create_default_value()
|
||||
return all_ui_styles[1]
|
||||
|
||||
/datum/preference/choiced/ui_style/apply_to_client_updated(client/client, value)
|
||||
client.mob?.update_ui_style(UI_style_new = value)
|
||||
|
||||
/datum/preference/numeric/ui_style_alpha
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "UI_style_alpha"
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
minimum = 50
|
||||
maximum = 255
|
||||
step = 1
|
||||
|
||||
/datum/preference/numeric/ui_style_alpha/create_default_value()
|
||||
return 255
|
||||
|
||||
/datum/preference/numeric/ui_style_alpha/apply_to_client_updated(client/client, value)
|
||||
client.mob?.update_ui_style(UI_style_alpha_new = value)
|
||||
|
||||
/datum/preference/color/ui_style_color
|
||||
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
||||
savefile_key = "UI_style_color"
|
||||
savefile_identifier = PREFERENCE_PLAYER
|
||||
|
||||
/datum/preference/color/ui_style_color/create_default_value()
|
||||
return COLOR_WHITE
|
||||
|
||||
/datum/preference/color/ui_style_color/apply_to_client_updated(client/client, value)
|
||||
client.mob?.update_ui_style(UI_style_color_new = value)
|
||||
@@ -1,5 +1,5 @@
|
||||
#define SAVEFILE_VERSION_MIN 8
|
||||
#define SAVEFILE_VERSION_MAX 15
|
||||
#define SAVEFILE_VERSION_MAX 16
|
||||
|
||||
/*
|
||||
SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn
|
||||
@@ -69,6 +69,16 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
log_debug("[client_ckey] preferences successfully migrated from [current_version] to v15.")
|
||||
to_chat(client, span_danger("v15 savefile migration complete."))
|
||||
|
||||
// Migration for colors
|
||||
if(current_version < 16)
|
||||
log_debug("[client_ckey] preferences migrating from [current_version] to v16....")
|
||||
to_chat(client, span_danger("Migrating savefile from version [current_version] to v16..."))
|
||||
|
||||
migration_16_colors(S)
|
||||
|
||||
log_debug("[client_ckey] preferences successfully migrated from [current_version] to v16.")
|
||||
to_chat(client, span_danger("v16 savefile migration complete."))
|
||||
|
||||
|
||||
/datum/preferences/proc/update_character(current_version, list/save_data)
|
||||
// Migration from BYOND savefiles to JSON: Important milemark.
|
||||
@@ -105,6 +115,25 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
CRASH("Attempted to load savefile without first loading a path!")
|
||||
savefile = new /datum/json_savefile(load_and_save ? path : null)
|
||||
|
||||
// General preferences, have to be preloaded
|
||||
/datum/preferences/proc/load_early_prefs()
|
||||
lastchangelog = savefile.get_entry("lastchangelog", lastchangelog) // CHOMPAdd
|
||||
default_slot = savefile.get_entry("default_slot", default_slot)
|
||||
lastnews = savefile.get_entry("lastnews", lastnews)
|
||||
lastlorenews = savefile.get_entry("lastlorenews", lastlorenews)
|
||||
|
||||
/datum/preferences/proc/sanitize_early_prefs()
|
||||
lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog)) // CHOMPAdd
|
||||
default_slot = sanitize_integer(default_slot, 1, CONFIG_GET(number/character_slots), initial(default_slot))
|
||||
lastnews = sanitize_text(lastnews, initial(lastnews))
|
||||
lastlorenews = sanitize_text(lastlorenews, initial(lastlorenews))
|
||||
|
||||
/datum/preferences/proc/save_early_prefs()
|
||||
savefile.set_entry("lastchangelog", lastchangelog) // CHOMPAdd
|
||||
savefile.set_entry("default_slot", default_slot)
|
||||
savefile.set_entry("lastnews", lastnews)
|
||||
savefile.set_entry("lastlorenews", lastlorenews)
|
||||
|
||||
/datum/preferences/proc/load_preferences()
|
||||
if(!savefile)
|
||||
stack_trace("Attempted to load the preferences of [client] without a savefile; did you forget to call load_savefile?")
|
||||
@@ -123,6 +152,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
|
||||
apply_all_client_preferences()
|
||||
|
||||
load_early_prefs()
|
||||
sanitize_early_prefs()
|
||||
|
||||
//try to fix any outdated data if necessary
|
||||
if(needs_update >= 0)
|
||||
var/bacpath = "[path].updatebac" //todo: if the savefile version is higher then the server, check the backup, and give the player a prompt to load the backup
|
||||
@@ -177,6 +209,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
if(preference_type in value_cache)
|
||||
write_preference(preference, preference.pref_serialize(value_cache[preference_type]))
|
||||
|
||||
save_early_prefs()
|
||||
savefile.save()
|
||||
|
||||
return TRUE
|
||||
@@ -244,10 +277,24 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
return FALSE
|
||||
|
||||
var/tree_key = "character[default_slot]"
|
||||
var/first_save = FALSE
|
||||
if(!(tree_key in savefile.get_entry()))
|
||||
savefile.set_entry(tree_key, list())
|
||||
first_save = TRUE
|
||||
var/save_data = savefile.get_entry(tree_key)
|
||||
|
||||
for(var/datum/preference/preference as anything in get_preferences_in_priority_order())
|
||||
if(preference.savefile_identifier != PREFERENCE_CHARACTER && !first_save)
|
||||
continue
|
||||
|
||||
if(!(preference.type in recently_updated_keys) && !first_save)
|
||||
continue
|
||||
|
||||
recently_updated_keys -= preference.type
|
||||
|
||||
if(preference.type in value_cache)
|
||||
write_preference(preference, preference.pref_serialize(value_cache[preference.type]))
|
||||
|
||||
save_data["version"] = SAVEFILE_VERSION_MAX //load_character will sanitize any bad data, so assume up-to-date.
|
||||
player_setup.save_character(save_data)
|
||||
|
||||
|
||||
@@ -6,6 +6,11 @@ var/list/spawntypes = list()
|
||||
var/datum/spawnpoint/S = new type()
|
||||
spawntypes[S.display_name] = S
|
||||
|
||||
/proc/get_spawn_points()
|
||||
if(!LAZYLEN(spawntypes))
|
||||
populate_spawn_points()
|
||||
return spawntypes
|
||||
|
||||
/datum/spawnpoint
|
||||
var/msg //Message to display on the arrivals computer.
|
||||
var/list/turfs //List of turfs to spawn on.
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
/datum/preferences/ui_assets(mob/user)
|
||||
var/list/assets = list(
|
||||
// get_asset_datum(/datum/asset/spritesheet/preferences),
|
||||
get_asset_datum(/datum/asset/spritesheet/preferences),
|
||||
get_asset_datum(/datum/asset/json/preferences),
|
||||
)
|
||||
|
||||
@@ -79,6 +79,34 @@
|
||||
|
||||
return TRUE
|
||||
|
||||
if("set_color_preference")
|
||||
var/requested_preference_key = params["preference"]
|
||||
|
||||
var/datum/preference/requested_preference = GLOB.preference_entries_by_key[requested_preference_key]
|
||||
if(isnull(requested_preference))
|
||||
return FALSE
|
||||
|
||||
if(!istype(requested_preference, /datum/preference/color))
|
||||
return FALSE
|
||||
|
||||
var/default_value = read_preference(requested_preference.type)
|
||||
|
||||
// Yielding
|
||||
var/new_color = input(
|
||||
usr,
|
||||
"Select new color",
|
||||
null,
|
||||
default_value || COLOR_WHITE,
|
||||
) as color | null
|
||||
|
||||
if(!new_color)
|
||||
return FALSE
|
||||
|
||||
if(!update_preference(requested_preference, new_color))
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
for(var/datum/preference_middleware/preference_middleware as anything in middleware)
|
||||
var/delegation = preference_middleware.action_delegations[action]
|
||||
if(!isnull(delegation))
|
||||
|
||||
@@ -13,16 +13,6 @@
|
||||
|
||||
feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggle_chat_timestamps()
|
||||
set name = "Toggle Chat Timestamps"
|
||||
set category = "Preferences.Chat"
|
||||
set desc = "Toggles whether or not messages in chat will display timestamps. Enabling this will not add timestamps to messages that have already been sent."
|
||||
|
||||
prefs.chat_timestamp = !prefs.chat_timestamp //There is no preference datum for tgui input lock, nor for any TGUI prefs.
|
||||
SScharacter_setup.queue_preferences_save(prefs)
|
||||
|
||||
to_chat(src, span_notice("You have toggled chat timestamps: [prefs.chat_timestamp ? "ON" : "OFF"]."))
|
||||
|
||||
// Not attached to a pref datum because those are strict binary toggles
|
||||
/client/verb/toggle_examine_mode()
|
||||
set name = "Toggle Examine Mode"
|
||||
|
||||
@@ -55,27 +55,11 @@ var/global/list/all_tooltip_styles = list(
|
||||
if(!UI_style_color_new) return
|
||||
|
||||
//update UI
|
||||
var/list/icons = usr.hud_used.adding + usr.hud_used.other + usr.hud_used.hotkeybuttons
|
||||
icons.Add(usr.zone_sel)
|
||||
icons.Add(usr.gun_setting_icon)
|
||||
icons.Add(usr.item_use_icon)
|
||||
icons.Add(usr.gun_move_icon)
|
||||
icons.Add(usr.radio_use_icon)
|
||||
|
||||
var/icon/ic = all_ui_styles[UI_style_new]
|
||||
if(isrobot(usr))
|
||||
ic = all_ui_styles_robot[UI_style_new]
|
||||
|
||||
for(var/obj/screen/I in icons)
|
||||
if(I.name in list(I_HELP, I_HURT, I_DISARM, I_GRAB)) continue
|
||||
I.icon = ic
|
||||
I.color = UI_style_color_new
|
||||
I.alpha = UI_style_alpha_new
|
||||
|
||||
usr.update_ui_style(UI_style_new, UI_style_alpha_new, UI_style_color_new)
|
||||
|
||||
if(tgui_alert(usr, "Like it? Save changes?","Save?",list("Yes", "No")) == "Yes")
|
||||
prefs.UI_style = UI_style_new
|
||||
prefs.UI_style_alpha = UI_style_alpha_new
|
||||
prefs.UI_style_color = UI_style_color_new
|
||||
usr.write_preference_directly(/datum/preference/choiced/ui_style, UI_style_new)
|
||||
usr.write_preference_directly(/datum/preference/numeric/ui_style_alpha, UI_style_alpha_new)
|
||||
usr.write_preference_directly(/datum/preference/color/ui_style_color, UI_style_color_new)
|
||||
SScharacter_setup.queue_preferences_save(prefs)
|
||||
to_chat(usr, "UI was saved")
|
||||
|
||||
@@ -6,40 +6,40 @@
|
||||
if(!key_to_ignore)
|
||||
return
|
||||
key_to_ignore = ckey(sanitize(key_to_ignore))
|
||||
if(prefs && prefs.ignored_players)
|
||||
if(key_to_ignore in prefs.ignored_players)
|
||||
to_chat(usr, span_warning("[key_to_ignore] is already being ignored."))
|
||||
return
|
||||
if(key_to_ignore == usr.ckey)
|
||||
to_chat(usr, span_notice("You can't ignore yourself."))
|
||||
return
|
||||
|
||||
prefs.ignored_players |= key_to_ignore
|
||||
SScharacter_setup.queue_preferences_save(prefs)
|
||||
to_chat(usr, span_notice("Now ignoring <b>[key_to_ignore]</b>."))
|
||||
var/list/ignored_players = prefs?.read_preference(/datum/preference/ignored_players)
|
||||
if(!ignored_players)
|
||||
return
|
||||
if(key_to_ignore in ignored_players)
|
||||
to_chat(usr, span_warning("[key_to_ignore] is already being ignored."))
|
||||
return
|
||||
if(key_to_ignore == usr.ckey)
|
||||
to_chat(usr, span_notice("You can't ignore yourself."))
|
||||
return
|
||||
|
||||
ignored_players |= key_to_ignore
|
||||
prefs.write_preference_by_type(/datum/preference/ignored_players, ignored_players)
|
||||
to_chat(usr, span_notice("Now ignoring <b>[key_to_ignore]</b>."))
|
||||
|
||||
/client/verb/unignore()
|
||||
set name = "Unignore"
|
||||
set category = "OOC.Chat Settings"
|
||||
set desc = "Reverts your ignoring of a specific player."
|
||||
|
||||
if(!prefs)
|
||||
to_chat(usr, span_warning("Preferences not found."))
|
||||
return
|
||||
|
||||
if(!prefs.ignored_players?.len)
|
||||
var/list/ignored_players = prefs?.read_preference(/datum/preference/ignored_players)
|
||||
if(!LAZYLEN(ignored_players))
|
||||
to_chat(usr, span_warning("You aren't ignoring any players."))
|
||||
return
|
||||
|
||||
var/key_to_unignore = tgui_input_list(usr, "Ignored players", "Unignore", prefs.ignored_players)
|
||||
var/key_to_unignore = tgui_input_list(usr, "Ignored players", "Unignore", ignored_players)
|
||||
if(!key_to_unignore)
|
||||
return
|
||||
key_to_unignore = ckey(sanitize(key_to_unignore))
|
||||
if(!(key_to_unignore in prefs.ignored_players))
|
||||
if(!(key_to_unignore in ignored_players))
|
||||
to_chat(usr, span_warning("[key_to_unignore] isn't being ignored."))
|
||||
return
|
||||
prefs.ignored_players -= key_to_unignore
|
||||
SScharacter_setup.queue_preferences_save(prefs)
|
||||
ignored_players -= key_to_unignore
|
||||
prefs.write_preference_by_type(/datum/preference/ignored_players, ignored_players)
|
||||
to_chat(usr, span_notice("Reverted ignore on <b>[key_to_unignore]</b>."))
|
||||
|
||||
/mob/proc/is_key_ignored(var/key_to_check)
|
||||
@@ -49,7 +49,8 @@
|
||||
|
||||
/client/proc/is_key_ignored(var/key_to_check)
|
||||
key_to_check = ckey(key_to_check)
|
||||
if(key_to_check in prefs.ignored_players)
|
||||
var/list/ignored_players = prefs?.read_preference(/datum/preference/ignored_players)
|
||||
if(key_to_check in ignored_players)
|
||||
if(GLOB.directory[key_to_check] in GLOB.admins) // This is here so this is only evaluated if someone is actually being blocked.
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -73,8 +73,9 @@
|
||||
display_name = "[holder.fakekey]/([src.key])"
|
||||
else
|
||||
display_name = holder.fakekey
|
||||
if(holder && !holder.fakekey && (holder.rights & R_ADMIN|R_FUN|R_EVENT) && CONFIG_GET(flag/allow_admin_ooccolor) && (src.prefs.ooccolor != initial(src.prefs.ooccolor))) // keeping this for the badmins
|
||||
to_chat(target, span_ooc("<font color='[src.prefs.ooccolor]'>" + create_text_tag("ooc", "OOC:", target) + " <EM>[display_name]:</EM> [span_message(msg)]</font>"))
|
||||
var/pref_color = prefs.read_preference(/datum/preference/color/ooc_color)
|
||||
if(holder && !holder.fakekey && (holder.rights & R_ADMIN|R_FUN|R_EVENT) && CONFIG_GET(flag/allow_admin_ooccolor) && pref_color != "#010000") // keeping this for the badmins
|
||||
to_chat(target, span_ooc("<font color='[pref_color]'>" + create_text_tag("ooc", "OOC:", target) + " <EM>[display_name]:</EM> [span_message(msg)]</font>"))
|
||||
else
|
||||
to_chat(target, span_ooc("<span class='[ooc_style]'>" + create_text_tag("ooc", "OOC:", target) + " <EM>[display_name]:</EM> " + span_message(msg)) + "</span>")
|
||||
|
||||
|
||||
@@ -138,10 +138,7 @@
|
||||
ai_holder.on_hear_say(speaker, multilingual_to_message(message_pieces))
|
||||
|
||||
/mob/proc/on_hear_say(var/message, var/mob/speaker = null)
|
||||
var/time = say_timestamp()
|
||||
if(client)
|
||||
if(client.prefs.chat_timestamp)
|
||||
message = "[time] [message]"
|
||||
message = span_game(span_say(message))
|
||||
if(speaker && !speaker.client)
|
||||
message = span_npc_say(message)
|
||||
@@ -154,10 +151,7 @@
|
||||
to_chat(src, span_game(span_say(message)))
|
||||
|
||||
/mob/living/silicon/on_hear_say(var/message, var/mob/speaker = null)
|
||||
var/time = say_timestamp()
|
||||
if(client)
|
||||
if(client.prefs.chat_timestamp)
|
||||
message = "[time] [message]"
|
||||
message = span_game(span_say(message))
|
||||
if(speaker && !speaker.client)
|
||||
message = span_npc_say(message)
|
||||
@@ -219,13 +213,8 @@
|
||||
else
|
||||
on_hear_radio(part_a, part_b, speaker_name, track, part_c, message, part_d, part_e)
|
||||
|
||||
/proc/say_timestamp()
|
||||
return span_say_quote("\[[time2text(world.timeofday, "hh:mm")]\]")
|
||||
|
||||
/mob/proc/on_hear_radio(part_a, part_b, speaker_name, track, part_c, formatted, part_d, part_e)
|
||||
var/time = ""
|
||||
if(client.prefs.chat_timestamp)
|
||||
time = say_timestamp()
|
||||
var/final_message = "[part_b][speaker_name][part_c][formatted][part_d]"
|
||||
if(check_mentioned(formatted) && client?.prefs?.read_preference(/datum/preference/toggle/check_mention))
|
||||
final_message = "[time][part_a]" + span_large(span_bold("[final_message]")) + "[part_e]"
|
||||
@@ -235,8 +224,6 @@
|
||||
|
||||
/mob/observer/dead/on_hear_radio(part_a, part_b, speaker_name, track, part_c, formatted, part_d, part_e)
|
||||
var/time = ""
|
||||
if(client.prefs.chat_timestamp)
|
||||
time = say_timestamp()
|
||||
var/final_message = "[part_b][track][part_c][formatted][part_d]"
|
||||
if(check_mentioned(formatted) && client?.prefs?.read_preference(/datum/preference/toggle/check_mention))
|
||||
final_message = "[time][part_a]" + span_large(span_bold("[final_message]")) + "[part_e]"
|
||||
@@ -246,8 +233,6 @@
|
||||
|
||||
/mob/living/silicon/on_hear_radio(part_a, part_b, speaker_name, track, part_c, formatted, part_d, part_e)
|
||||
var/time = ""
|
||||
if(client.prefs.chat_timestamp)
|
||||
time = say_timestamp()
|
||||
var/final_message = "[part_b][speaker_name][part_c][formatted][part_d]"
|
||||
if(check_mentioned(formatted) && client?.prefs?.read_preference(/datum/preference/toggle/check_mention))
|
||||
final_message = "[time][part_a]" + span_large(span_bold("[final_message]")) + "[part_e]"
|
||||
@@ -257,8 +242,6 @@
|
||||
|
||||
/mob/living/silicon/ai/on_hear_radio(part_a, part_b, speaker_name, track, part_c, formatted, part_d, part_e)
|
||||
var/time = ""
|
||||
if(client.prefs.chat_timestamp)
|
||||
time = say_timestamp()
|
||||
var/final_message = "[part_b][track][part_c][formatted][part_d]"
|
||||
if(check_mentioned(formatted) && client?.prefs?.read_preference(/datum/preference/toggle/check_mention))
|
||||
final_message = "[time][part_a]" + span_large(span_bold("[final_message]")) + "[part_e]"
|
||||
|
||||
@@ -45,8 +45,6 @@
|
||||
var/lip_style = null //no lipstick by default- arguably misleading, as it could be used for general makeup
|
||||
|
||||
var/age = 30 //Player's age (pure fluff)
|
||||
var/bday_month = 0 //Character birth month
|
||||
var/bday_day = 0 //Character birthday day
|
||||
|
||||
var/b_type = "A+" //Player's bloodtype
|
||||
var/datum/robolimb/synthetic //If they are a synthetic (aka synthetic torso). Also holds the datum for the type of robolimb.
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
//Check if we're on fire
|
||||
handle_fire()
|
||||
|
||||
if(client && !(client.prefs.ambience_freq == 0)) // Handle re-running ambience to mobs if they've remained in an area, AND have an active client assigned to them, and do not have repeating ambience disabled.
|
||||
if(client) // Handle re-running ambience to mobs if they've remained in an area, AND have an active client assigned to them, and do not have repeating ambience disabled.
|
||||
handle_ambience()
|
||||
|
||||
//stuff in the stomach
|
||||
@@ -111,7 +111,11 @@
|
||||
return
|
||||
|
||||
/mob/living/proc/handle_ambience() // If you're in an ambient area and have not moved out of it for x time as configured per-client, and do not have it disabled, we're going to play ambience again to you, to help break up the silence.
|
||||
if(world.time >= (lastareachange + client.prefs.ambience_freq MINUTES)) // Every 5 minutes (by default, set per-client), we're going to run a 35% chance (by default, also set per-client) to play ambience.
|
||||
var/pref = read_preference(/datum/preference/numeric/ambience_freq)
|
||||
if(!pref)
|
||||
return
|
||||
|
||||
if(world.time >= (lastareachange + pref MINUTES)) // Every 5 minutes (by default, set per-client), we're going to run a 35% chance (by default, also set per-client) to play ambience.
|
||||
var/area/A = get_area(src)
|
||||
if(A)
|
||||
lastareachange = world.time // This will refresh the last area change to prevent this call happening LITERALLY every life tick.
|
||||
|
||||
@@ -754,7 +754,7 @@
|
||||
ooc_notes_window(usr)
|
||||
// to_chat(usr, span_filter_notice("[src]'s Metainfo:<br>[ooc_notes]"))
|
||||
else if(client)
|
||||
to_chat(usr, span_filter_notice("[src]'s Metainfo:<br>[client.prefs.metadata]"))
|
||||
to_chat(usr, span_filter_notice("[src]'s Metainfo:<br>[client.prefs.read_preference(/datum/preference/text/living/ooc_notes)]"))
|
||||
else
|
||||
to_chat(usr, span_filter_notice("[src] does not have any stored infomation!"))
|
||||
else
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
var/new_metadata = strip_html_simple(tgui_input_text(usr, "Enter any information you'd like others to see, such as Roleplay-preferences. This will not be saved permanently unless you click save in the OOC notes panel!", "Game Preference" , html_decode(ooc_notes), multiline = TRUE, prevent_enter = TRUE))
|
||||
if(new_metadata && CanUseTopic(usr))
|
||||
ooc_notes = new_metadata
|
||||
client.prefs.metadata = new_metadata
|
||||
client.prefs.update_preference_by_type(/datum/preference/text/living/ooc_notes, new_metadata)
|
||||
to_chat(usr, span_filter_notice("OOC notes updated. Don't forget to save!"))
|
||||
log_admin("[key_name(usr)] updated their OOC notes mid-round.")
|
||||
ooc_notes_window(usr)
|
||||
@@ -51,7 +51,7 @@
|
||||
var/new_metadata = strip_html_simple(tgui_input_text(user, "Enter any information you'd like others to see, such as Roleplay-preferences. This will not be saved permanently unless you click save in the OOC notes panel!", "Game Preference" , html_decode(ooc_notes), multiline = TRUE, prevent_enter = TRUE))
|
||||
if(new_metadata && CanUseTopic(user))
|
||||
ooc_notes = new_metadata
|
||||
client.prefs.metadata = new_metadata
|
||||
client.prefs.update_preference_by_type(/datum/preference/text/living/ooc_notes, new_metadata)
|
||||
to_chat(user, span_filter_notice("OOC notes updated. Don't forget to save!"))
|
||||
log_admin("[key_name(user)] updated their OOC notes mid-round.")
|
||||
ooc_notes_window(user)
|
||||
@@ -64,7 +64,7 @@
|
||||
if(new_metadata == "!clear")
|
||||
new_metadata = ""
|
||||
ooc_notes_likes = new_metadata
|
||||
client.prefs.metadata_likes = new_metadata
|
||||
client.prefs.update_preference_by_type(/datum/preference/text/living/ooc_notes_likes, new_metadata)
|
||||
to_chat(user, span_filter_notice("OOC note likes have been updated. Don't forget to save!"))
|
||||
log_admin("[key_name(user)] updated their OOC note likes mid-round.")
|
||||
if(reopen)
|
||||
@@ -78,7 +78,7 @@
|
||||
if(new_metadata == "!clear")
|
||||
new_metadata = ""
|
||||
ooc_notes_dislikes = new_metadata
|
||||
client.prefs.metadata_dislikes = new_metadata
|
||||
client.prefs.update_preference_by_type(/datum/preference/text/living/ooc_notes_dislikes, new_metadata)
|
||||
to_chat(user, span_filter_notice("OOC note dislikes have been updated. Don't forget to save!"))
|
||||
log_admin("[key_name(user)] updated their OOC note dislikes mid-round.")
|
||||
if(reopen)
|
||||
|
||||
@@ -210,16 +210,14 @@ var/list/ai_verbs_default = list(
|
||||
|
||||
// Vorestation Edit: Meta Info for AI's. Mostly used for Holograms
|
||||
if (client)
|
||||
var/meta_info = client.prefs.metadata
|
||||
if (meta_info)
|
||||
ooc_notes = meta_info
|
||||
ooc_notes_likes = client.prefs.metadata_likes
|
||||
ooc_notes_dislikes = client.prefs.metadata_dislikes
|
||||
//CHOMPEdit Start
|
||||
ooc_notes_favs = client.prefs.metadata_favs
|
||||
ooc_notes_maybes = client.prefs.metadata_maybes
|
||||
ooc_notes_style = client.prefs.matadata_ooc_style
|
||||
//CHOMPEdit End
|
||||
ooc_notes = client.prefs.read_preference(/datum/preference/text/living/ooc_notes)
|
||||
ooc_notes_likes = client.prefs.read_preference(/datum/preference/text/living/ooc_notes_likes)
|
||||
ooc_notes_dislikes = client.prefs.read_preference(/datum/preference/text/living/ooc_notes_dislikes)
|
||||
//CHOMPAdd Start
|
||||
ooc_notes_favs = read_preference(/datum/preference/text/living/ooc_notes_favs)
|
||||
ooc_notes_maybes = read_preference(/datum/preference/text/living/ooc_notes_maybes)
|
||||
ooc_notes_style = read_preference(/datum/preference/toggle/living/ooc_notes_style)
|
||||
//CHOMPAdd End
|
||||
|
||||
if (malf && !(mind in malf.current_antagonists))
|
||||
show_laws()
|
||||
|
||||
@@ -149,14 +149,14 @@
|
||||
..()
|
||||
// Vorestation Edit: Meta Info for pAI
|
||||
if (client.prefs)
|
||||
ooc_notes = client.prefs.metadata
|
||||
ooc_notes_likes = client.prefs.metadata_likes
|
||||
ooc_notes_dislikes = client.prefs.metadata_dislikes
|
||||
//CHOMPEdit Start
|
||||
ooc_notes_favs = client.prefs.metadata_favs
|
||||
ooc_notes_maybes = client.prefs.metadata_maybes
|
||||
ooc_notes_style = client.prefs.matadata_ooc_style
|
||||
//CHOMPEdit End
|
||||
ooc_notes = client.prefs.read_preference(/datum/preference/text/living/ooc_notes)
|
||||
ooc_notes_likes = client.prefs.read_preference(/datum/preference/text/living/ooc_notes_likes)
|
||||
ooc_notes_dislikes = client.prefs.read_preference(/datum/preference/text/living/ooc_notes_dislikes)
|
||||
//CHOMPAdd Start
|
||||
ooc_notes_favs = read_preference(/datum/preference/text/living/ooc_notes_favs)
|
||||
ooc_notes_maybes = read_preference(/datum/preference/text/living/ooc_notes_maybes)
|
||||
ooc_notes_style = read_preference(/datum/preference/toggle/living/ooc_notes_style)
|
||||
//CHOMPAdd End
|
||||
|
||||
src << sound('sound/effects/pai_login.ogg', volume = 75) //VOREStation Add
|
||||
|
||||
|
||||
@@ -407,16 +407,14 @@
|
||||
else
|
||||
flavor_text = client.prefs.flavour_texts_robot["Default"]
|
||||
// Vorestation Edit: and meta info
|
||||
var/meta_info = client.prefs.metadata
|
||||
if (meta_info)
|
||||
ooc_notes = meta_info
|
||||
ooc_notes_likes = client.prefs.metadata_likes
|
||||
ooc_notes_dislikes = client.prefs.metadata_dislikes
|
||||
//CHOMPEdit Start
|
||||
ooc_notes_favs = client.prefs.metadata_favs
|
||||
ooc_notes_maybes = client.prefs.metadata_maybes
|
||||
ooc_notes_style = client.prefs.matadata_ooc_style
|
||||
//CHOMPEdit End
|
||||
ooc_notes = client.prefs.read_preference(/datum/preference/text/living/ooc_notes)
|
||||
ooc_notes_likes = client.prefs.read_preference(/datum/preference/text/living/ooc_notes_likes)
|
||||
ooc_notes_dislikes = client.prefs.read_preference(/datum/preference/text/living/ooc_notes_dislikes)
|
||||
//CHOMPAdd Start
|
||||
ooc_notes_favs = read_preference(/datum/preference/text/living/ooc_notes_favs)
|
||||
ooc_notes_maybes = read_preference(/datum/preference/text/living/ooc_notes_maybes)
|
||||
ooc_notes_style = read_preference(/datum/preference/toggle/living/ooc_notes_style)
|
||||
//CHOMPAdd End
|
||||
custom_link = client.prefs.custom_link
|
||||
|
||||
/mob/living/silicon/robot/verb/namepick()
|
||||
|
||||
@@ -18,14 +18,14 @@
|
||||
|
||||
/mob/living/proc/login_prefs()
|
||||
|
||||
ooc_notes = client.prefs.metadata
|
||||
ooc_notes_likes = client.prefs.metadata_likes
|
||||
ooc_notes_dislikes = client.prefs.metadata_dislikes
|
||||
//CHOMPEdit Start
|
||||
ooc_notes_favs = client.prefs.metadata_favs
|
||||
ooc_notes_maybes = client.prefs.metadata_maybes
|
||||
ooc_notes_style = client.prefs.matadata_ooc_style
|
||||
//CHOMPEdit End
|
||||
ooc_notes = client.prefs.read_preference(/datum/preference/text/living/ooc_notes)
|
||||
ooc_notes_likes = client.prefs.read_preference(/datum/preference/text/living/ooc_notes_likes)
|
||||
ooc_notes_dislikes = client.prefs.read_preference(/datum/preference/text/living/ooc_notes_dislikes)
|
||||
//CHOMPAdd Start
|
||||
ooc_notes_favs = read_preference(/datum/preference/text/living/ooc_notes_favs)
|
||||
ooc_notes_maybes = read_preference(/datum/preference/text/living/ooc_notes_maybes)
|
||||
ooc_notes_style = read_preference(/datum/preference/toggle/living/ooc_notes_style)
|
||||
//CHOMPAdd End
|
||||
digestable = client.prefs_vr.digestable
|
||||
devourable = client.prefs_vr.devourable
|
||||
absorbable = client.prefs_vr.absorbable
|
||||
|
||||
@@ -42,11 +42,6 @@
|
||||
qdel(hud_used) //remove the hud objects
|
||||
new /datum/hud(src)
|
||||
|
||||
if(client.prefs && client.prefs.client_fps)
|
||||
client.fps = client.prefs.client_fps
|
||||
else
|
||||
client.fps = 0 // Results in using the server FPS
|
||||
|
||||
next_move = 1
|
||||
disconnect_time = null //VOREStation Addition: clear the disconnect time
|
||||
sight |= SEE_SELF
|
||||
|
||||
@@ -66,7 +66,6 @@
|
||||
//return QDEL_HINT_HARDDEL_NOW Just keep track of mob references. They delete SO much faster now.
|
||||
|
||||
/mob/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2) //CHOMPEdit show_message() moved to /atom/movable
|
||||
var/time = say_timestamp()
|
||||
|
||||
if(!client && !teleop) return
|
||||
|
||||
@@ -89,12 +88,7 @@
|
||||
if(stat == UNCONSCIOUS || sleeping > 0)
|
||||
to_chat(src, span_filter_notice(span_italics("... You can almost hear someone talking ...")))
|
||||
else
|
||||
if(client && client.prefs.chat_timestamp)
|
||||
// TG-Chat filters latch directly to the spans, we no longer need that
|
||||
//msg = replacetext(msg, new/regex("^(<span(?: \[^>]*)?>)((?:.|\\n)*</span>)", ""), "$1[time] $2") // Insteres timestamps after the first qualifying span
|
||||
//msg = replacetext(msg, new/regex("^\[^<]((?:.|\\n)*)", ""), "[time] $1") // Spanless messages also get timestamped
|
||||
to_chat(src,"[time] [msg]")
|
||||
else if(teleop)
|
||||
if(teleop)
|
||||
to_chat(teleop, create_text_tag("body", "BODY:", teleop.client) + "[msg]")
|
||||
else
|
||||
to_chat(src,msg)
|
||||
@@ -478,14 +472,15 @@
|
||||
//src << browse('html/changelog.html', "window=changes;size=675x650")
|
||||
//return
|
||||
|
||||
// CHOMPAdd Start
|
||||
if(!GLOB.changelog_tgui)
|
||||
GLOB.changelog_tgui = new /datum/changelog()
|
||||
GLOB.changelog_tgui.tgui_interact(usr)
|
||||
// CHOMPedit END
|
||||
|
||||
if(prefs.lastchangelog != changelog_hash)
|
||||
prefs.lastchangelog = changelog_hash
|
||||
SScharacter_setup.queue_preferences_save(prefs)
|
||||
// winset(src, "rpane.changelog", "background-color=none;font-style=;") //ChompREMOVE
|
||||
// CHOMPAdd End
|
||||
|
||||
/mob/verb/observe()
|
||||
set name = "Observe"
|
||||
|
||||
@@ -155,11 +155,13 @@
|
||||
var/datum/job/refJob = null
|
||||
for(var/mob/new_player/player in player_list)
|
||||
refJob = player.client.prefs.get_highest_job()
|
||||
if(player.client.prefs.obfuscate_key && player.client.prefs.obfuscate_job)
|
||||
var/obfuscate_key = player.client.prefs.read_preference(/datum/preference/toggle/obfuscate_key)
|
||||
var/obfuscate_job = player.client.prefs.read_preference(/datum/preference/toggle/obfuscate_job)
|
||||
if(obfuscate_key && obfuscate_job)
|
||||
. += "Anonymous User [player.ready ? "Ready!" : null]"
|
||||
else if(player.client.prefs.obfuscate_key)
|
||||
else if(obfuscate_key)
|
||||
. += "Anonymous User [player.ready ? "(Playing as: [refJob ? refJob.title : "Unknown"])" : null]"
|
||||
else if(player.client.prefs.obfuscate_job)
|
||||
else if(obfuscate_job)
|
||||
. += "[player.key] [player.ready ? "Ready!" : null]"
|
||||
else
|
||||
. += "[player.key] [player.ready ? "(Playing as: [refJob ? refJob.title : "Unknown"])" : null]"
|
||||
@@ -210,7 +212,7 @@
|
||||
|
||||
announce_ghost_joinleave(src)
|
||||
|
||||
if(client.prefs.be_random_name)
|
||||
if(client.prefs.read_preference(/datum/preference/toggle/human/name_is_always_random))
|
||||
client.prefs.real_name = random_name(client.prefs.identifying_gender)
|
||||
observer.real_name = client.prefs.real_name
|
||||
observer.name = observer.real_name
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
pass = FALSE
|
||||
|
||||
//No OOC notes
|
||||
if (CONFIG_GET(flag/allow_metadata) && (!client?.prefs?.metadata || length(client.prefs.metadata) < 15))
|
||||
if (CONFIG_GET(flag/allow_metadata) && (!client?.prefs?.read_preference(/datum/preference/text/living/ooc_notes) || length(client.prefs.read_preference(/datum/preference/text/living/ooc_notes)) < 15))
|
||||
to_chat(src,span_warning("Please set informative OOC notes related to RP/ERP preferences. Set them using the 'OOC Notes' button on the 'General' tab in character setup."))
|
||||
pass = FALSE
|
||||
|
||||
|
||||
@@ -1,4 +1,38 @@
|
||||
/datum/preferences
|
||||
|
||||
/datum/preferences/proc/randomise_appearance_prefs_update(randomize_flags = ALL, datum/species/current_species)
|
||||
randomise_appearance_prefs(randomize_flags, current_species)
|
||||
|
||||
/datum/preferences/proc/randomise_appearance_prefs_write(randomize_flags = ALL, datum/species/current_species)
|
||||
randomise_appearance_prefs(randomize_flags, current_species, TRUE)
|
||||
|
||||
/// Fully randomizes everything in the character.
|
||||
/datum/preferences/proc/randomise_appearance_prefs(randomize_flags = ALL, datum/species/current_species, write = FALSE)
|
||||
for (var/datum/preference/preference as anything in get_preferences_in_priority_order())
|
||||
if (!preference.included_in_randomization_flags(randomize_flags))
|
||||
continue
|
||||
if (preference.is_randomizable())
|
||||
if(write)
|
||||
write_preference(preference, preference.create_random_value(src, current_species))
|
||||
else
|
||||
update_preference(preference, preference.create_random_value(src, current_species))
|
||||
|
||||
/* Currently not used
|
||||
/// Randomizes the character according to preferences.
|
||||
/datum/preferences/proc/apply_character_randomization_prefs(antag_override = FALSE)
|
||||
switch (read_preference(/datum/preference/choiced/random_body))
|
||||
if (RANDOM_ANTAG_ONLY)
|
||||
if (!antag_override)
|
||||
return
|
||||
|
||||
if (RANDOM_DISABLED)
|
||||
return
|
||||
|
||||
for (var/datum/preference/preference as anything in get_preferences_in_priority_order())
|
||||
if (should_randomize(preference, antag_override))
|
||||
write_preference(preference, preference.create_random_value(src))
|
||||
*/
|
||||
|
||||
//The mob should have a gender you want before running this proc. Will run fine without H
|
||||
/datum/preferences/proc/randomize_appearance_and_body_for(var/mob/living/carbon/human/H)
|
||||
var/datum/species/current_species = GLOB.all_species[species ? species : "Human"]
|
||||
@@ -10,18 +44,12 @@
|
||||
if(current_species.appearance_flags & HAS_SKIN_TONE)
|
||||
s_tone = random_skin_tone()
|
||||
if(current_species.appearance_flags & HAS_SKIN_COLOR)
|
||||
r_skin = rand (0,255)
|
||||
g_skin = rand (0,255)
|
||||
b_skin = rand (0,255)
|
||||
update_preference_by_type(/datum/preference/color/human/skin_color, rgb(rand(0, 255), rand(0, 255), rand(0, 255)))
|
||||
if(current_species.appearance_flags & HAS_EYE_COLOR)
|
||||
randomize_eyes_color()
|
||||
if(current_species.appearance_flags & HAS_HAIR_COLOR)
|
||||
randomize_hair_color("hair")
|
||||
randomize_hair_color("facial")
|
||||
if(current_species.appearance_flags & HAS_SKIN_COLOR)
|
||||
r_skin = rand (0,255)
|
||||
g_skin = rand (0,255)
|
||||
b_skin = rand (0,255)
|
||||
if(current_species.appearance_flags & HAS_UNDERWEAR)
|
||||
all_underwear.Cut()
|
||||
for(var/datum/category_group/underwear/WRC in global_underwear.categories)
|
||||
@@ -32,7 +60,7 @@
|
||||
headset = rand(1,3)
|
||||
backbag = rand(1,6)
|
||||
pdachoice = rand(1,7)
|
||||
age = rand(current_species.min_age, current_species.max_age)
|
||||
randomise_appearance_prefs_update(current_species = current_species)
|
||||
b_type = RANDOM_BLOOD_TYPE
|
||||
if(H)
|
||||
copy_to(H,1)
|
||||
@@ -40,9 +68,7 @@
|
||||
|
||||
/datum/preferences/proc/randomize_hair_color(var/target = "hair")
|
||||
if(prob (75) && target == "facial") // Chance to inherit hair color
|
||||
r_facial = r_hair
|
||||
g_facial = g_hair
|
||||
b_facial = b_hair
|
||||
update_preference_by_type(/datum/preference/color/human/facial_color, read_preference(/datum/preference/color/human/hair_color))
|
||||
return
|
||||
|
||||
var/red
|
||||
@@ -90,13 +116,9 @@
|
||||
|
||||
switch(target)
|
||||
if("hair")
|
||||
r_hair = red
|
||||
g_hair = green
|
||||
b_hair = blue
|
||||
update_preference_by_type(/datum/preference/color/human/hair_color, rgb(red, green, blue))
|
||||
if("facial")
|
||||
r_facial = red
|
||||
g_facial = green
|
||||
b_facial = blue
|
||||
update_preference_by_type(/datum/preference/color/human/facial_color, rgb(red, green, blue))
|
||||
|
||||
/datum/preferences/proc/randomize_eyes_color()
|
||||
var/red
|
||||
@@ -142,9 +164,7 @@
|
||||
green = max(min(green + rand (-25, 25), 255), 0)
|
||||
blue = max(min(blue + rand (-25, 25), 255), 0)
|
||||
|
||||
r_eyes = red
|
||||
g_eyes = green
|
||||
b_eyes = blue
|
||||
update_preference_by_type(/datum/preference/color/human/eyes_color, rgb(red, green, blue))
|
||||
|
||||
/datum/preferences/proc/randomize_skin_color()
|
||||
var/red
|
||||
@@ -190,9 +210,7 @@
|
||||
green = max(min(green + rand (-25, 25), 255), 0)
|
||||
blue = max(min(blue + rand (-25, 25), 255), 0)
|
||||
|
||||
r_skin = red
|
||||
g_skin = green
|
||||
b_skin = blue
|
||||
update_preference_by_type(/datum/preference/color/human/skin_color, rgb(red, green, blue))
|
||||
|
||||
/datum/preferences/proc/dress_preview_mob(var/mob/living/carbon/human/mannequin)
|
||||
if(!mannequin.dna) // Special handling for preview icons before SSAtoms has initailized.
|
||||
|
||||
@@ -50,14 +50,14 @@
|
||||
return TRUE
|
||||
|
||||
var/min_age = job.get_min_age(prefs.species, prefs.organ_data["brain"])
|
||||
if(prefs.age >= min_age)
|
||||
if(prefs.read_preference(/datum/preference/numeric/human/age) >= min_age)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/tgui_module/late_choices/tgui_data(mob/new_player/user)
|
||||
var/list/data = ..()
|
||||
|
||||
var/name = user.client.prefs.be_random_name ? "friend" : user.client.prefs.real_name
|
||||
var/name = user.client.prefs.read_preference(/datum/preference/toggle/human/name_is_always_random) ? "friend" : user.client.prefs.real_name
|
||||
|
||||
data["name"] = name
|
||||
data["duration"] = roundduration2text()
|
||||
@@ -139,4 +139,4 @@
|
||||
tgui_alert_async(new_user,"Your current species, [new_user.client.prefs.species], is not available for play on the station.")
|
||||
return 0
|
||||
|
||||
new_user.AttemptLateSpawn(job, new_user.client.prefs.spawnpoint)
|
||||
new_user.AttemptLateSpawn(job, new_user.read_preference(/datum/preference/choiced/living/spawnpoint))
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
if(!window.is_ready())
|
||||
window.initialize(
|
||||
strict_mode = TRUE,
|
||||
fancy = user.client.prefs.tgui_fancy,
|
||||
fancy = user.read_preference(/datum/preference/toggle/tgui_fancy),
|
||||
assets = list(
|
||||
// FIXME: Delete this when 516 is required!
|
||||
user.client.byond_version >= 516 \
|
||||
@@ -269,8 +269,8 @@
|
||||
"window" = list(
|
||||
"key" = window_key,
|
||||
"size" = window_size,
|
||||
"fancy" = user.client.prefs.tgui_fancy,
|
||||
"locked" = user.client.prefs.tgui_lock,
|
||||
"fancy" = user.read_preference(/datum/preference/toggle/tgui_fancy),
|
||||
"locked" = user.read_preference(/datum/preference/toggle/tgui_lock),
|
||||
),
|
||||
"client" = list(
|
||||
"ckey" = user.client.ckey,
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
// return tgui_input_list(user, message, title, buttons, timeout, autofocus)
|
||||
|
||||
// Client does NOT have tgui_input on: Returns regular input
|
||||
if(!user.client.prefs.tgui_input_mode || strict_byond)
|
||||
if(!user.read_preference(/datum/preference/toggle/tgui_input_mode) || strict_byond)
|
||||
if(length(buttons) == 2)
|
||||
return alert(user, message, title, buttons[1], buttons[2])
|
||||
if(length(buttons) == 3)
|
||||
@@ -109,8 +109,8 @@
|
||||
data["autofocus"] = autofocus
|
||||
data["buttons"] = buttons
|
||||
data["message"] = message
|
||||
data["large_buttons"] = user.client.prefs.tgui_large_buttons
|
||||
data["swapped_buttons"] = !user.client.prefs.tgui_swapped_buttons
|
||||
data["large_buttons"] = user.read_preference(/datum/preference/toggle/tgui_large_buttons)
|
||||
data["swapped_buttons"] = !user.read_preference(/datum/preference/toggle/tgui_swapped_buttons)
|
||||
data["title"] = title
|
||||
return data
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
if(isnull(user.client))
|
||||
return null
|
||||
|
||||
if(!user.client.prefs.tgui_input_mode)
|
||||
if(!user.read_preference(/datum/preference/toggle/tgui_input_mode))
|
||||
return input(user, message, title) as null|anything in items
|
||||
var/datum/tgui_checkbox_input/input = new(user, message, title, items, min_checked, max_checked, timeout, ui_state)
|
||||
input.tgui_interact(user)
|
||||
@@ -108,9 +108,9 @@
|
||||
data["items"] = items
|
||||
data["min_checked"] = min_checked
|
||||
data["max_checked"] = max_checked
|
||||
data["large_buttons"] = user.client.prefs.tgui_large_buttons
|
||||
data["large_buttons"] = user.read_preference(/datum/preference/toggle/tgui_large_buttons)
|
||||
data["message"] = message
|
||||
data["swapped_buttons"] = !user.client.prefs.tgui_swapped_buttons
|
||||
data["swapped_buttons"] = !user.read_preference(/datum/preference/toggle/tgui_swapped_buttons)
|
||||
data["title"] = title
|
||||
|
||||
return data
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
return null
|
||||
|
||||
/// Client does NOT have tgui_input on: Returns regular input
|
||||
if(!user.client.prefs.tgui_input_mode && !strict_modern)
|
||||
if(!user.read_preference(/datum/preference/toggle/tgui_input_mode) && !strict_modern)
|
||||
return input(user, message, title, default) as null|anything in items
|
||||
var/datum/tgui_list_input/input = new(user, message, title, items, default, timeout, ui_state)
|
||||
if(input.invalid)
|
||||
@@ -125,9 +125,9 @@
|
||||
var/list/data = list()
|
||||
data["init_value"] = default || items[1]
|
||||
data["items"] = items
|
||||
data["large_buttons"] = user.client.prefs.tgui_large_buttons
|
||||
data["large_buttons"] = user.read_preference(/datum/preference/toggle/tgui_large_buttons)
|
||||
data["message"] = message
|
||||
data["swapped_buttons"] = !user.client.prefs.tgui_swapped_buttons
|
||||
data["swapped_buttons"] = !user.read_preference(/datum/preference/toggle/tgui_swapped_buttons)
|
||||
data["title"] = title
|
||||
return data
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
return null
|
||||
|
||||
// Client does NOT have tgui_input on: Returns regular input
|
||||
if(!user.client.prefs.tgui_input_mode)
|
||||
if(!user.read_preference(/datum/preference/toggle/tgui_input_mode))
|
||||
var/input_number = input(user, message, title, default) as null|num
|
||||
return clamp(round_value ? round(input_number) : input_number, min_value, max_value)
|
||||
var/datum/tgui_input_number/number_input = new(user, message, title, default, max_value, min_value, timeout, round_value, ui_state)
|
||||
@@ -121,11 +121,11 @@
|
||||
/datum/tgui_input_number/tgui_static_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["init_value"] = default // Default is a reserved keyword
|
||||
data["large_buttons"] = user.client.prefs.tgui_large_buttons
|
||||
data["large_buttons"] = user.read_preference(/datum/preference/toggle/tgui_large_buttons)
|
||||
data["max_value"] = max_value
|
||||
data["message"] = message
|
||||
data["min_value"] = min_value
|
||||
data["swapped_buttons"] = !user.client.prefs.tgui_swapped_buttons
|
||||
data["swapped_buttons"] = !user.read_preference(/datum/preference/toggle/tgui_swapped_buttons)
|
||||
data["title"] = title
|
||||
data["round_value"] = round_value
|
||||
return data
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
return null
|
||||
|
||||
// Client does NOT have tgui_input on: Returns regular input
|
||||
if(!user.client.prefs.tgui_input_mode)
|
||||
if(!user.read_preference(/datum/preference/toggle/tgui_input_mode))
|
||||
if(encode)
|
||||
if(multiline)
|
||||
return stripped_multiline_input(user, message, title, default, PREVENT_CHARACTER_TRIM_LOSS(max_length))
|
||||
@@ -115,12 +115,12 @@
|
||||
|
||||
/datum/tgui_input_text/tgui_static_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["large_buttons"] = user.client.prefs.tgui_large_buttons
|
||||
data["large_buttons"] = user.read_preference(/datum/preference/toggle/tgui_large_buttons)
|
||||
data["max_length"] = max_length
|
||||
data["message"] = message
|
||||
data["multiline"] = multiline
|
||||
data["placeholder"] = default // Default is a reserved keyword
|
||||
data["swapped_buttons"] = !user.client.prefs.tgui_swapped_buttons
|
||||
data["swapped_buttons"] = !user.read_preference(/datum/preference/toggle/tgui_swapped_buttons)
|
||||
data["title"] = title
|
||||
return data
|
||||
|
||||
|
||||
@@ -123,7 +123,7 @@ Notes:
|
||||
/proc/openToolTip(mob/user = null, atom/movable/tip_src = null, params = null, title = "", content = "", theme = "")
|
||||
if(!istype(user) || !user.client?.tooltips)
|
||||
return
|
||||
var/ui_style = user.client?.prefs?.tooltipstyle
|
||||
var/ui_style = user.read_preference(/datum/preference/choiced/tooltip_style)
|
||||
if(!theme && ui_style)
|
||||
theme = lowertext(ui_style)
|
||||
if(!theme)
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
|
||||
// Okay we can start saving the data
|
||||
if(new_spawn_point_type && prefs.persistence_settings & PERSIST_SPAWN)
|
||||
prefs.spawnpoint = initial(new_spawn_point_type.display_name)
|
||||
prefs.update_preference_by_type(/datum/preference/choiced/living/spawnpoint, initial(new_spawn_point_type.display_name))
|
||||
if(ishuman(occupant) && occupant.stat != DEAD)
|
||||
var/mob/living/carbon/human/H = occupant
|
||||
testing("Persist (PID): Saving stuff from [H] to [prefs] (\ref[prefs]).")
|
||||
@@ -115,20 +115,14 @@
|
||||
// This basically needs to be the reverse of /datum/category_item/player_setup_item/general/body/copy_to_mob() ~Leshana
|
||||
/proc/apply_coloration_to_prefs(var/mob/living/carbon/human/character, var/datum/preferences/prefs)
|
||||
if(!istype(character)) return
|
||||
prefs.r_eyes = character.r_eyes
|
||||
prefs.g_eyes = character.g_eyes
|
||||
prefs.b_eyes = character.b_eyes
|
||||
prefs.h_style = character.h_style
|
||||
prefs.r_hair = character.r_hair
|
||||
prefs.g_hair = character.g_hair
|
||||
prefs.b_hair = character.b_hair
|
||||
|
||||
prefs.update_preference_by_type(/datum/preference/color/human/eyes_color, rgb(character.r_eyes, character.g_eyes, character.b_eyes))
|
||||
prefs.update_preference_by_type(/datum/preference/color/human/hair_color, rgb(character.r_hair, character.g_hair, character.b_hair))
|
||||
prefs.update_preference_by_type(/datum/preference/color/human/facial_color, rgb(character.r_facial, character.g_facial, character.b_facial))
|
||||
prefs.update_preference_by_type(/datum/preference/color/human/skin_color, rgb(character.r_skin, character.g_skin, character.b_skin))
|
||||
|
||||
prefs.f_style = character.f_style
|
||||
prefs.r_facial = character.r_facial
|
||||
prefs.g_facial = character.g_facial
|
||||
prefs.b_facial = character.b_facial
|
||||
prefs.r_skin = character.r_skin
|
||||
prefs.g_skin = character.g_skin
|
||||
prefs.b_skin = character.b_skin
|
||||
prefs.s_tone = character.s_tone
|
||||
prefs.h_style = character.h_style
|
||||
prefs.f_style = character.f_style
|
||||
@@ -140,38 +134,24 @@
|
||||
if(character.ear_style) prefs.ear_style = character.ear_style.name
|
||||
if(character.tail_style) prefs.tail_style = character.tail_style.name
|
||||
if(character.wing_style) prefs.wing_style = character.wing_style.name
|
||||
prefs.r_ears = character.r_ears
|
||||
prefs.g_ears = character.g_ears
|
||||
prefs.b_ears = character.b_ears
|
||||
prefs.r_ears2 = character.r_ears2
|
||||
prefs.g_ears2 = character.g_ears2
|
||||
prefs.b_ears2 = character.b_ears2
|
||||
prefs.r_ears3 = character.r_ears3
|
||||
prefs.g_ears3 = character.g_ears3
|
||||
prefs.b_ears3 = character.b_ears3
|
||||
|
||||
prefs.update_preference_by_type(/datum/preference/color/human/ears_color1, rgb(character.r_ears, character.g_ears, character.b_ears))
|
||||
prefs.update_preference_by_type(/datum/preference/color/human/ears_color2, rgb(character.r_ears2, character.g_ears2, character.b_ears2))
|
||||
prefs.update_preference_by_type(/datum/preference/color/human/ears_color3, rgb(character.r_ears3, character.g_ears3, character.b_ears3))
|
||||
|
||||
// secondary ears
|
||||
prefs.ear_secondary_style = character.ear_secondary_style?.name
|
||||
prefs.ear_secondary_colors = character.ear_secondary_colors
|
||||
|
||||
prefs.r_tail = character.r_tail
|
||||
prefs.b_tail = character.b_tail
|
||||
prefs.g_tail = character.g_tail
|
||||
prefs.r_tail2 = character.r_tail2
|
||||
prefs.b_tail2 = character.b_tail2
|
||||
prefs.g_tail2 = character.g_tail2
|
||||
prefs.r_tail3 = character.r_tail3
|
||||
prefs.b_tail3 = character.b_tail3
|
||||
prefs.g_tail3 = character.g_tail3
|
||||
prefs.r_wing = character.r_wing
|
||||
prefs.b_wing = character.b_wing
|
||||
prefs.g_wing = character.g_wing
|
||||
prefs.r_wing2 = character.r_wing2
|
||||
prefs.b_wing2 = character.b_wing2
|
||||
prefs.g_wing2 = character.g_wing2
|
||||
prefs.r_wing3 = character.r_wing3
|
||||
prefs.b_wing3 = character.b_wing3
|
||||
prefs.g_wing3 = character.g_wing3
|
||||
prefs.update_preference_by_type(/datum/preference/color/human/tail_color1, rgb(character.r_tail, character.g_tail, character.b_tail))
|
||||
prefs.update_preference_by_type(/datum/preference/color/human/tail_color2, rgb(character.r_tail2, character.g_tail2, character.b_tail2))
|
||||
prefs.update_preference_by_type(/datum/preference/color/human/tail_color3, rgb(character.r_tail3, character.g_tail3, character.b_tail3))
|
||||
|
||||
// TODO: This will break if update_preference_by_type starts to respect is_accessible
|
||||
prefs.update_preference_by_type(/datum/preference/color/human/wing_color1, rgb(character.r_wing, character.g_wing, character.b_wing))
|
||||
prefs.update_preference_by_type(/datum/preference/color/human/wing_color2, rgb(character.r_wing2, character.g_wing2, character.b_wing2))
|
||||
prefs.update_preference_by_type(/datum/preference/color/human/wing_color3, rgb(character.r_wing3, character.g_wing3, character.b_wing3))
|
||||
|
||||
prefs.custom_species = character.custom_species
|
||||
prefs.digitigrade = character.digitigrade
|
||||
|
||||
|
||||
@@ -58,7 +58,12 @@
|
||||
if(flavourtext)
|
||||
flavor_texts = client.prefs.flavor_texts.Copy()
|
||||
if(oocnotes)
|
||||
ooc_notes = client.prefs.metadata
|
||||
ooc_notes = client.prefs.read_preference(/datum/preference/text/living/ooc_notes)
|
||||
ooc_notes_likes = client.prefs.read_preference(/datum/preference/text/living/ooc_notes_likes)
|
||||
ooc_notes_dislikes = client.prefs.read_preference(/datum/preference/text/living/ooc_notes_dislikes)
|
||||
ooc_notes_favs = read_preference(/datum/preference/text/living/ooc_notes_favs)
|
||||
ooc_notes_maybes = read_preference(/datum/preference/text/living/ooc_notes_maybes)
|
||||
ooc_notes_style = read_preference(/datum/preference/toggle/living/ooc_notes_style)
|
||||
|
||||
/* Alternative version of the above proc, incase it turns out cloning our dummy mob's DNA is an awful, terrible bad idea.
|
||||
Would need to fix this proc up to work as smoothly as the above proc, though.
|
||||
|
||||
@@ -200,7 +200,7 @@ Maybe later, gotta figure out a way to click yourself when in a locker etc.
|
||||
if(new_metadata == "!clear")
|
||||
new_metadata = ""
|
||||
ooc_notes_favs = new_metadata
|
||||
client.prefs.metadata_favs = new_metadata
|
||||
client.prefs.update_preference_by_type(/datum/preference/text/living/ooc_notes_favs, new_metadata)
|
||||
to_chat(user, span_filter_notice("OOC note favs have been updated. Don't forget to save!"))
|
||||
log_admin("[key_name(user)] updated their OOC note favs mid-round.")
|
||||
if(reopen)
|
||||
@@ -214,7 +214,7 @@ Maybe later, gotta figure out a way to click yourself when in a locker etc.
|
||||
if(new_metadata == "!clear")
|
||||
new_metadata = ""
|
||||
ooc_notes_maybes = new_metadata
|
||||
client.prefs.metadata_maybes = new_metadata
|
||||
client.prefs.update_preference_by_type(/datum/preference/text/living/ooc_notes_maybes, new_metadata)
|
||||
to_chat(user, span_filter_notice("OOC note maybes have been updated. Don't forget to save!"))
|
||||
log_admin("[key_name(user)] updated their OOC note maybes mid-round.")
|
||||
if(reopen)
|
||||
@@ -224,7 +224,7 @@ Maybe later, gotta figure out a way to click yourself when in a locker etc.
|
||||
if(user != src)
|
||||
return
|
||||
ooc_notes_style = !ooc_notes_style
|
||||
client.prefs.matadata_ooc_style = !client.prefs.matadata_ooc_style
|
||||
client.prefs.update_preference_by_type(/datum/preference/toggle/living/ooc_notes_style, ooc_notes_style)
|
||||
if(reopen)
|
||||
ooc_notes_window(user)
|
||||
//ChompEDIT END - Removal of usr
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
import { CheckboxInput, FeatureToggle } from '../base';
|
||||
import {
|
||||
CheckboxInput,
|
||||
Feature,
|
||||
FeatureColorInput,
|
||||
FeatureToggle,
|
||||
} from '../base';
|
||||
|
||||
export const CHAT_ATTACKLOGS: FeatureToggle = {
|
||||
name: 'Attack Log Messages',
|
||||
@@ -48,3 +53,11 @@ export const CHAT_ADSAY: FeatureToggle = {
|
||||
description: 'Enables seeing deadchat when not observing.',
|
||||
component: CheckboxInput,
|
||||
};
|
||||
|
||||
export const ooccolor: Feature<string> = {
|
||||
name: 'OOC Color',
|
||||
category: 'ADMIN',
|
||||
description:
|
||||
'The color your OOC messages will be. Set to #010000 to use default',
|
||||
component: FeatureColorInput,
|
||||
};
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
import { Dropdown, Stack } from 'tgui-core/components';
|
||||
|
||||
import { NumberInput } from '../../../../../components';
|
||||
import { Feature, FeatureNumericData, FeatureValueProps } from '../base';
|
||||
|
||||
type FpsServerData = FeatureNumericData & {
|
||||
recommended_fps: number;
|
||||
};
|
||||
|
||||
const FpsInput = (props: FeatureValueProps<number, number, FpsServerData>) => {
|
||||
const { handleSetValue, serverData } = props;
|
||||
|
||||
let recommened = `Recommended`;
|
||||
if (serverData) {
|
||||
recommened += ` (${serverData.recommended_fps})`;
|
||||
}
|
||||
|
||||
return (
|
||||
<Stack fill>
|
||||
<Stack.Item basis="70%">
|
||||
<Dropdown
|
||||
selected={props.value === -1 ? recommened : 'Custom'}
|
||||
onSelected={(value) => {
|
||||
if (value === recommened) {
|
||||
handleSetValue(-1);
|
||||
} else {
|
||||
handleSetValue(serverData?.recommended_fps || 60);
|
||||
}
|
||||
}}
|
||||
width="100%"
|
||||
options={[recommened, 'Custom']}
|
||||
/>
|
||||
</Stack.Item>
|
||||
|
||||
<Stack.Item>
|
||||
{serverData && props.value !== -1 && (
|
||||
<NumberInput
|
||||
onChange={(value) => {
|
||||
props.handleSetValue(value);
|
||||
}}
|
||||
minValue={1}
|
||||
maxValue={serverData.maximum}
|
||||
value={props.value}
|
||||
step={1}
|
||||
/>
|
||||
)}
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
|
||||
export const client_fps: Feature<number, number, FpsServerData> = {
|
||||
name: 'FPS',
|
||||
category: 'GAMEPLAY',
|
||||
component: FpsInput,
|
||||
};
|
||||
@@ -7,20 +7,6 @@ export const AMBIENT_OCCLUSION_PREF: FeatureToggle = {
|
||||
component: CheckboxInput,
|
||||
};
|
||||
|
||||
export const MOB_TOOLTIPS: FeatureToggle = {
|
||||
name: 'Enable mob tooltips',
|
||||
category: 'GAMEPLAY',
|
||||
description: 'Enable tooltips when hovering over mobs.',
|
||||
component: CheckboxInput,
|
||||
};
|
||||
|
||||
export const INV_TOOLTIPS: FeatureToggle = {
|
||||
name: 'Enable inventory tooltips',
|
||||
category: 'GAMEPLAY',
|
||||
description: 'Enable tooltips when hovering over inventory items.',
|
||||
component: CheckboxInput,
|
||||
};
|
||||
|
||||
export const ATTACK_ICONS: FeatureToggle = {
|
||||
name: 'Attack Icons',
|
||||
category: 'GAMEPLAY',
|
||||
@@ -96,3 +82,17 @@ export const BrowserDevTools: FeatureToggle = {
|
||||
'When enabled, you can right click -> inspect to open Microsoft Edge dev tools. BYOND 516+ Only.',
|
||||
component: CheckboxInput,
|
||||
};
|
||||
|
||||
export const obfuscate_key: FeatureToggle = {
|
||||
name: 'Obfuscate Key',
|
||||
category: 'UI',
|
||||
description: 'Hide your byond ckey from other players in the lobby',
|
||||
component: CheckboxInput,
|
||||
};
|
||||
|
||||
export const obfuscate_job: FeatureToggle = {
|
||||
name: 'Obfuscate Job',
|
||||
category: 'UI',
|
||||
description: 'Hide your job from other players in the lobby',
|
||||
component: CheckboxInput,
|
||||
};
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
import { CheckboxInput, FeatureToggle } from '../base';
|
||||
import {
|
||||
CheckboxInput,
|
||||
FeatureNumberInput,
|
||||
FeatureNumeric,
|
||||
FeatureToggle,
|
||||
} from '../base';
|
||||
|
||||
export const SOUND_MIDI: FeatureToggle = {
|
||||
name: 'Play Admin MIDIs',
|
||||
@@ -154,3 +159,19 @@ export const DIGEST_NOISES: FeatureToggle = {
|
||||
description: 'Enable hearing vore digestion noises.',
|
||||
component: CheckboxInput,
|
||||
};
|
||||
|
||||
export const ambience_freq: FeatureNumeric = {
|
||||
name: 'Ambience Frequency',
|
||||
category: 'SOUNDS',
|
||||
description:
|
||||
'How often you wish to hear ambience repeated! (1-60 MINUTES, 0 for disabled)',
|
||||
component: FeatureNumberInput,
|
||||
};
|
||||
|
||||
export const ambience_chance: FeatureNumeric = {
|
||||
name: 'Ambience Chance',
|
||||
category: 'SOUNDS',
|
||||
description:
|
||||
"The chance you'd like to hear ambience played to you (On area change, or by random ambience). 35 means a 35% chance to play ambience. This is a range from 0-100. 0 disables ambience playing entirely. This is also affected by Ambience Frequency.",
|
||||
component: FeatureNumberInput,
|
||||
};
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
import { CheckboxInput, FeatureChoiced, FeatureToggle } from '../base';
|
||||
import { FeatureDropdownInput } from '../dropdowns';
|
||||
|
||||
export const MOB_TOOLTIPS: FeatureToggle = {
|
||||
name: 'Enable mob tooltips',
|
||||
category: 'TOOLTIPS',
|
||||
description: 'Enable tooltips when hovering over mobs.',
|
||||
component: CheckboxInput,
|
||||
};
|
||||
|
||||
export const INV_TOOLTIPS: FeatureToggle = {
|
||||
name: 'Enable inventory tooltips',
|
||||
category: 'TOOLTIPS',
|
||||
description: 'Enable tooltips when hovering over inventory items.',
|
||||
component: CheckboxInput,
|
||||
};
|
||||
|
||||
export const tooltipstyle: FeatureChoiced = {
|
||||
name: 'Tooltip Style',
|
||||
category: 'TOOLTIPS',
|
||||
component: FeatureDropdownInput,
|
||||
};
|
||||
@@ -19,6 +19,42 @@ export const VCHAT_ENABLE: FeatureToggle = {
|
||||
component: CheckboxInput,
|
||||
};
|
||||
|
||||
export const tgui_fancy: FeatureToggle = {
|
||||
name: 'TGUI: Fancy Mode',
|
||||
category: 'UI',
|
||||
description: 'When enabled, hide the title bar and fully style tgui windows.',
|
||||
component: CheckboxInput,
|
||||
};
|
||||
|
||||
export const tgui_lock: FeatureToggle = {
|
||||
name: 'TGUI: Window Lock',
|
||||
category: 'UI',
|
||||
description:
|
||||
'When enabled, forces windows to spawn on the primary monitor - otherwise, any monitor.',
|
||||
component: CheckboxInput,
|
||||
};
|
||||
|
||||
export const tgui_input_mode: FeatureToggle = {
|
||||
name: 'TGUI: Input Framework',
|
||||
category: 'UI',
|
||||
description: 'Enable TGUI based input for most input dialogs.',
|
||||
component: CheckboxInput,
|
||||
};
|
||||
|
||||
export const tgui_large_buttons: FeatureToggle = {
|
||||
name: 'TGUI: Large Buttons',
|
||||
category: 'UI',
|
||||
description: 'Use large buttons in TGUI Input windows.',
|
||||
component: CheckboxInput,
|
||||
};
|
||||
|
||||
export const tgui_swapped_buttons: FeatureToggle = {
|
||||
name: 'TGUI: Swapped Buttons',
|
||||
category: 'UI',
|
||||
description: 'Swap the position of OK and Cancel buttons.',
|
||||
component: CheckboxInput,
|
||||
};
|
||||
|
||||
export const TGUI_SAY: FeatureToggle = {
|
||||
name: 'Say: Use TGUI',
|
||||
category: 'UI',
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
import { classes } from 'common/react';
|
||||
import { Box, Dropdown, Stack } from 'tgui-core/components';
|
||||
|
||||
import {
|
||||
Feature,
|
||||
FeatureChoiced,
|
||||
FeatureChoicedServerData,
|
||||
FeatureColorInput,
|
||||
FeatureNumberInput,
|
||||
FeatureNumeric,
|
||||
FeatureValueProps,
|
||||
sortChoices,
|
||||
} from '../base';
|
||||
|
||||
const UIStyleInput = (
|
||||
props: FeatureValueProps<string, string, FeatureChoicedServerData>,
|
||||
) => {
|
||||
const { serverData, value } = props;
|
||||
if (!serverData) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const { icons } = serverData;
|
||||
|
||||
if (!icons) {
|
||||
return <Box color="red">ui_style had no icons!</Box>;
|
||||
}
|
||||
|
||||
const choices = Object.fromEntries(
|
||||
Object.entries(icons).map(([name, icon]) => {
|
||||
return [
|
||||
name,
|
||||
<Stack key={name}>
|
||||
<Stack.Item>
|
||||
<Box
|
||||
className={classes(['preferences64x32', icon])}
|
||||
style={{
|
||||
transform: 'scale(0.8)',
|
||||
}}
|
||||
/>
|
||||
</Stack.Item>
|
||||
|
||||
<Stack.Item grow>{name}</Stack.Item>
|
||||
</Stack>,
|
||||
];
|
||||
}),
|
||||
);
|
||||
|
||||
return (
|
||||
<Dropdown
|
||||
selected={value}
|
||||
clipSelectedText={false}
|
||||
onSelected={props.handleSetValue}
|
||||
width="100%"
|
||||
menuWidth="20rem"
|
||||
options={sortChoices(Object.entries(choices)).map(
|
||||
([dataValue, label]) => {
|
||||
return {
|
||||
displayText: label,
|
||||
value: dataValue,
|
||||
};
|
||||
},
|
||||
)}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
export const UI_style: FeatureChoiced = {
|
||||
name: 'UI Style',
|
||||
category: 'UI',
|
||||
component: UIStyleInput,
|
||||
};
|
||||
|
||||
export const UI_style_alpha: FeatureNumeric = {
|
||||
name: 'UI Alpha',
|
||||
category: 'UI',
|
||||
component: FeatureNumberInput,
|
||||
};
|
||||
|
||||
export const UI_style_color: Feature<string> = {
|
||||
name: 'UI Color',
|
||||
category: 'UI',
|
||||
component: FeatureColorInput,
|
||||
};
|
||||
@@ -2220,10 +2220,7 @@
|
||||
#include "code\modules\client\preference_setup\general\04_equipment.dm"
|
||||
#include "code\modules\client\preference_setup\general\05_background.dm"
|
||||
#include "code\modules\client\preference_setup\general\06_flavor.dm"
|
||||
#include "code\modules\client\preference_setup\global\01_ui.dm"
|
||||
#include "code\modules\client\preference_setup\global\02_settings.dm"
|
||||
#include "code\modules\client\preference_setup\global\03_pai.dm"
|
||||
#include "code\modules\client\preference_setup\global\04_ooc.dm"
|
||||
#include "code\modules\client\preference_setup\loadout\gear_tweaks.dm"
|
||||
#include "code\modules\client\preference_setup\loadout\gear_tweaks_vr.dm"
|
||||
#include "code\modules\client\preference_setup\loadout\loadout.dm"
|
||||
@@ -2281,17 +2278,26 @@
|
||||
#include "code\modules\client\preferences\_preference.dm"
|
||||
#include "code\modules\client\preferences\preferences_tg.dm"
|
||||
#include "code\modules\client\preferences\middleware\_middleware.dm"
|
||||
#include "code\modules\client\preferences\middleware\random.dm"
|
||||
#include "code\modules\client\preferences\migrations\13_preferences.dm"
|
||||
#include "code\modules\client\preferences\migrations\14_nifs.dm"
|
||||
#include "code\modules\client\preferences\migrations\15_nif_path.dm"
|
||||
#include "code\modules\client\preferences\types\admin.dm"
|
||||
#include "code\modules\client\preferences\types\auto_fit_viewport.dm"
|
||||
#include "code\modules\client\preferences\types\chat.dm"
|
||||
#include "code\modules\client\preferences\types\ghost.dm"
|
||||
#include "code\modules\client\preferences\types\misc.dm"
|
||||
#include "code\modules\client\preferences\types\runechat.dm"
|
||||
#include "code\modules\client\preferences\types\sound.dm"
|
||||
#include "code\modules\client\preferences\types\ui.dm"
|
||||
#include "code\modules\client\preferences\migrations\16_colors.dm"
|
||||
#include "code\modules\client\preferences\types\character\antagonism\01_basic.dm"
|
||||
#include "code\modules\client\preferences\types\character\general\01_basic.dm"
|
||||
#include "code\modules\client\preferences\types\character\general\03_body.dm"
|
||||
#include "code\modules\client\preferences\types\game\admin.dm"
|
||||
#include "code\modules\client\preferences\types\game\auto_fit_viewport.dm"
|
||||
#include "code\modules\client\preferences\types\game\chat.dm"
|
||||
#include "code\modules\client\preferences\types\game\fps.dm"
|
||||
#include "code\modules\client\preferences\types\game\ghost.dm"
|
||||
#include "code\modules\client\preferences\types\game\ignored_players.dm"
|
||||
#include "code\modules\client\preferences\types\game\misc.dm"
|
||||
#include "code\modules\client\preferences\types\game\runechat.dm"
|
||||
#include "code\modules\client\preferences\types\game\sound.dm"
|
||||
#include "code\modules\client\preferences\types\game\tooltip.dm"
|
||||
#include "code\modules\client\preferences\types\game\ui.dm"
|
||||
#include "code\modules\client\preferences\types\game\ui_style.dm"
|
||||
#include "code\modules\client\verbs\advanced_who.dm"
|
||||
#include "code\modules\client\verbs\character_directory.dm"
|
||||
#include "code\modules\client\verbs\ignore.dm"
|
||||
|
||||
Reference in New Issue
Block a user