#define PREF_FBP_CYBORG "cyborg" #define PREF_FBP_POSI "posi" #define PREF_FBP_SOFTWARE "software" /datum/category_group/player_setup_category/general_preferences name = "General" sort_order = 1 category_item_type = /datum/category_item/player_setup_item/general /datum/category_group/player_setup_category/skill_preferences name = "Skills" sort_order = 2 category_item_type = /datum/category_item/player_setup_item/skills /datum/category_group/player_setup_category/occupation_preferences name = "Occupation" sort_order = 3 category_item_type = /datum/category_item/player_setup_item/occupation /datum/category_group/player_setup_category/appearance_preferences name = "Antagonism" sort_order = 4 category_item_type = /datum/category_item/player_setup_item/antagonism /datum/category_group/player_setup_category/loadout_preferences name = "Loadout" sort_order = 5 category_item_type = /datum/category_item/player_setup_item/loadout /* //VOREStation Removal /datum/category_group/player_setup_category/trait_preferences name = "Traits" sort_order = 6 category_item_type = /datum/category_item/player_setup_item/traits */ //VOREStation Removal End /datum/category_group/player_setup_category/global_preferences name = "Global" sort_order = 6 //VOREStation Edit due to above commented out category_item_type = /datum/category_item/player_setup_item/player_global /**************************** * Category Collection Setup * ****************************/ /datum/category_collection/player_setup_collection category_group_type = /datum/category_group/player_setup_category var/datum/preferences/preferences var/datum/category_group/player_setup_category/selected_category = null /datum/category_collection/player_setup_collection/New(var/datum/preferences/preferences) src.preferences = preferences ..() selected_category = categories[1] /datum/category_collection/player_setup_collection/Destroy() preferences = null selected_category = null return ..() /datum/category_collection/player_setup_collection/proc/sanitize_setup() for(var/datum/category_group/player_setup_category/PS in categories) PS.sanitize_setup() /datum/category_collection/player_setup_collection/proc/load_character(var/savefile/S) for(var/datum/category_group/player_setup_category/PS in categories) PS.load_character(S) /datum/category_collection/player_setup_collection/proc/save_character(var/savefile/S) for(var/datum/category_group/player_setup_category/PS in categories) PS.save_character(S) /datum/category_collection/player_setup_collection/proc/load_preferences(var/savefile/S) for(var/datum/category_group/player_setup_category/PS in categories) PS.load_preferences(S) /datum/category_collection/player_setup_collection/proc/save_preferences(var/savefile/S) for(var/datum/category_group/player_setup_category/PS in categories) PS.save_preferences(S) /datum/category_collection/player_setup_collection/proc/copy_to_mob(var/mob/living/carbon/human/C) for(var/datum/category_group/player_setup_category/PS in categories) PS.copy_to_mob(C) /datum/category_collection/player_setup_collection/proc/header() var/dat = "" for(var/datum/category_group/player_setup_category/PS in categories) if(PS == selected_category) dat += "[PS.name] " // TODO: Check how to properly mark a href/button selected in a classic browser window else dat += "[PS.name] " return dat /datum/category_collection/player_setup_collection/proc/content(var/mob/user) if(selected_category) return selected_category.content(user) /datum/category_collection/player_setup_collection/Topic(var/href,var/list/href_list) if(..()) return 1 var/mob/user = usr if(!user.client) return 1 if(href_list["category"]) var/category = locate(href_list["category"]) if(category && (category in categories)) selected_category = category . = 1 if(.) user.client.prefs.ShowChoices(user) /************************** * Category Category Setup * **************************/ /datum/category_group/player_setup_category var/sort_order = 0 /datum/category_group/player_setup_category/dd_SortValue() return sort_order /datum/category_group/player_setup_category/proc/sanitize_setup() for(var/datum/category_item/player_setup_item/PI in items) PI.sanitize_preferences() for(var/datum/category_item/player_setup_item/PI in items) PI.sanitize_character() /datum/category_group/player_setup_category/proc/load_character(var/savefile/S) // Load all data, then sanitize it. // Need due to, for example, the 01_basic module relying on species having been loaded to sanitize correctly but that isn't loaded until module 03_body. for(var/datum/category_item/player_setup_item/PI in items) PI.load_character(S) /datum/category_group/player_setup_category/proc/save_character(var/savefile/S) // Sanitize all data, then save it for(var/datum/category_item/player_setup_item/PI in items) PI.sanitize_character() for(var/datum/category_item/player_setup_item/PI in items) PI.save_character(S) /datum/category_group/player_setup_category/proc/load_preferences(var/savefile/S) for(var/datum/category_item/player_setup_item/PI in items) PI.load_preferences(S) /datum/category_group/player_setup_category/proc/save_preferences(var/savefile/S) for(var/datum/category_item/player_setup_item/PI in items) PI.sanitize_preferences() for(var/datum/category_item/player_setup_item/PI in items) PI.save_preferences(S) /datum/category_group/player_setup_category/proc/copy_to_mob(var/mob/living/carbon/human/C) for(var/datum/category_item/player_setup_item/PI in items) PI.copy_to_mob(C) /datum/category_group/player_setup_category/proc/content(var/mob/user) . = "
" var/current = 0 var/halfway = items.len / 2 for(var/datum/category_item/player_setup_item/PI in items) if(halfway && current++ >= halfway) halfway = 0 . += "" . += "[PI.content(user)]
" . += "
" /datum/category_group/player_setup_category/occupation_preferences/content(var/mob/user) for(var/datum/category_item/player_setup_item/PI in items) . += "[PI.content(user)]
" /********************** * Category Item Setup * **********************/ /datum/category_item/player_setup_item var/sort_order = 0 var/datum/preferences/pref /datum/category_item/player_setup_item/New() ..() var/datum/category_collection/player_setup_collection/psc = category.collection pref = psc.preferences /datum/category_item/player_setup_item/Destroy() pref = null return ..() /datum/category_item/player_setup_item/dd_SortValue() return sort_order /* * Called when the item is asked to load per character settings */ /datum/category_item/player_setup_item/proc/load_character(var/savefile/S) return /* * Called when the item is asked to save per character settings */ /datum/category_item/player_setup_item/proc/save_character(var/savefile/S) return /* * Called when the item is asked to load user/global settings */ /datum/category_item/player_setup_item/proc/load_preferences(var/savefile/S) return /* * Called when the item is asked to save user/global settings */ /datum/category_item/player_setup_item/proc/save_preferences(var/savefile/S) return /* * Called when the item is asked to apply its per character settings to a new mob. */ /datum/category_item/player_setup_item/proc/copy_to_mob(var/mob/living/carbon/human/C) return /datum/category_item/player_setup_item/proc/content() return /datum/category_item/player_setup_item/proc/sanitize_character() return /datum/category_item/player_setup_item/proc/sanitize_preferences() return /datum/category_item/player_setup_item/Topic(var/href,var/list/href_list) if(..()) return 1 var/mob/pref_mob = preference_mob() if(!pref_mob || !pref_mob.client) return 1 . = OnTopic(href, href_list, usr) if(. & TOPIC_UPDATE_PREVIEW) pref_mob.client.prefs.update_preview_icon() if(. & TOPIC_REFRESH) pref_mob.client.prefs.ShowChoices(usr) /datum/category_item/player_setup_item/CanUseTopic(var/mob/user) return 1 /datum/category_item/player_setup_item/proc/OnTopic(var/href,var/list/href_list, var/mob/user) return TOPIC_NOACTION /datum/category_item/player_setup_item/proc/preference_mob() if(!pref.client) for(var/client/C) if(C.ckey == pref.client_ckey) pref.client = C break if(pref.client) return pref.client.mob // Checks in a really hacky way if a character's preferences say they are an FBP or not. /datum/category_item/player_setup_item/proc/is_FBP() if(pref.organ_data && pref.organ_data[BP_TORSO] != "cyborg") return 0 return 1 // Returns what kind of FBP the player's prefs are. Returns 0 if they're not an FBP. /datum/category_item/player_setup_item/proc/get_FBP_type() if(!is_FBP()) return 0 // Not a robot. if(O_BRAIN in pref.organ_data) switch(pref.organ_data[O_BRAIN]) if("assisted") return PREF_FBP_CYBORG if("mechanical") return PREF_FBP_POSI if("digital") return PREF_FBP_SOFTWARE return 0 //Something went wrong! /datum/category_item/player_setup_item/proc/get_min_age() var/datum/species/S = GLOB.all_species[pref.species ? pref.species : "Human"] if(!is_FBP()) return S.min_age // If they're not a robot, we can just use the species var. var/FBP_type = get_FBP_type() switch(FBP_type) if(PREF_FBP_CYBORG) return S.min_age if(PREF_FBP_POSI) return 1 if(PREF_FBP_SOFTWARE) return 1 return S.min_age // welp /datum/category_item/player_setup_item/proc/get_max_age() var/datum/species/S = GLOB.all_species[pref.species ? pref.species : "Human"] if(!is_FBP()) return S.max_age // If they're not a robot, we can just use the species var. var/FBP_type = get_FBP_type() switch(FBP_type) if(PREF_FBP_CYBORG) return S.max_age + 20 if(PREF_FBP_POSI) return 220 if(PREF_FBP_SOFTWARE) return 150 return S.max_age // welp