var/list/loadout_categories = list() var/list/gear_datums = list() /datum/loadout_category var/category = "" var/list/gear = list() /datum/loadout_category/New(var/cat) category = cat ..() /hook/startup/proc/populate_gear_list() //create a list of gear datums to sort for(var/geartype in typesof(/datum/gear)-/datum/gear) var/datum/gear/G = geartype var/use_name = initial(G.display_name) var/use_category = initial(G.sort_category) if(!use_name) error("Loadout - Missing display name: [G]") continue if(!initial(G.cost)) error("Loadout - Missing cost: [G]") continue if(!initial(G.path)) error("Loadout - Missing path definition: [G]") continue if(!loadout_categories[use_category]) loadout_categories[use_category] = new /datum/loadout_category(use_category) var/datum/loadout_category/LC = loadout_categories[use_category] gear_datums[use_name] = new geartype LC.gear[use_name] = gear_datums[use_name] loadout_categories = sortAssoc(loadout_categories) for(var/loadout_category in loadout_categories) var/datum/loadout_category/LC = loadout_categories[loadout_category] LC.gear = sortAssoc(LC.gear) return 1 /datum/category_item/player_setup_item/loadout name = "Loadout" sort_order = 1 var/current_tab = "General" /datum/category_item/player_setup_item/loadout/load_character(var/savefile/S) S["gear"] >> pref.gear /datum/category_item/player_setup_item/loadout/save_character(var/savefile/S) S["gear"] << pref.gear /datum/category_item/player_setup_item/loadout/proc/valid_gear_choices(var/max_cost) . = list() var/mob/preference_mob = preference_mob() for(var/gear_name in gear_datums) var/datum/gear/G = gear_datums[gear_name] //if(G.whitelisted && !is_alien_whitelisted(preference_mob(), all_species[G.whitelisted])) if(G.whitelisted && !is_alien_whitelisted(preference_mob, G.whitelisted)) continue if(max_cost && G.cost > max_cost) continue . += gear_name /datum/category_item/player_setup_item/loadout/sanitize_character() if(!islist(pref.gear)) pref.gear = list() for(var/gear_name in pref.gear) if(!(gear_name in gear_datums)) pref.gear -= gear_name var/total_cost = 0 for(var/gear_name in pref.gear) if(!gear_datums[gear_name]) pref.gear -= gear_name else if(!(gear_name in valid_gear_choices())) pref.gear -= gear_name else var/datum/gear/G = gear_datums[gear_name] if(total_cost + G.cost > MAX_GEAR_COST) pref.gear -= gear_name else total_cost += G.cost /datum/category_item/player_setup_item/loadout/content() . = list() var/total_cost = 0 if(pref.gear && pref.gear.len) for(var/i = 1; i <= pref.gear.len; i++) var/datum/gear/G = gear_datums[pref.gear[i]] if(G) total_cost += G.cost var/fcolor = "#3366CC" if(total_cost < MAX_GEAR_COST) fcolor = "#E67300" . += "" . += "" . += "" var/datum/loadout_category/LC = loadout_categories[current_tab] . += "" . += "" . += "" for(var/gear_name in LC.gear) var/datum/gear/G = LC.gear[gear_name] var/ticked = (G.display_name in pref.gear) . += "" . += "" . += "" if(ticked) . += "" . += "
[total_cost]/[MAX_GEAR_COST] loadout points spent. \[Clear Loadout\]
" var/firstcat = 1 for(var/category in loadout_categories) if(firstcat) firstcat = 0 else . += " |" var/datum/loadout_category/LC = loadout_categories[category] var/category_cost = 0 for(var/gear in LC.gear) if(gear in pref.gear) var/datum/gear/G = LC.gear[gear] category_cost += G.cost if(category == current_tab) . += " [category] - [category_cost] " else if(category_cost) . += " [category] - [category_cost] " else . += " [category] - 0 " . += "

[LC.category]

[G.display_name][G.cost][G.description]
" for(var/datum/gear_tweak/tweak in G.gear_tweaks) . += " [tweak.get_contents(get_tweak_metadata(G, tweak))]" . += "
" . = jointext(., null) /datum/category_item/player_setup_item/loadout/proc/get_gear_metadata(var/datum/gear/G) . = pref.gear[G.display_name] if(!.) . = list() pref.gear[G.display_name] = . /datum/category_item/player_setup_item/loadout/proc/get_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak) var/list/metadata = get_gear_metadata(G) . = metadata["[tweak]"] if(!.) . = tweak.get_default() metadata["[tweak]"] = . /datum/category_item/player_setup_item/loadout/proc/set_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak, var/new_metadata) var/list/metadata = get_gear_metadata(G) metadata["[tweak]"] = new_metadata /datum/category_item/player_setup_item/loadout/OnTopic(href, href_list, user) if(href_list["toggle_gear"]) var/datum/gear/TG = gear_datums[href_list["toggle_gear"]] if(TG.display_name in pref.gear) pref.gear -= TG.display_name else var/total_cost = 0 for(var/gear_name in pref.gear) var/datum/gear/G = gear_datums[gear_name] if(istype(G)) total_cost += G.cost if((total_cost+TG.cost) <= MAX_GEAR_COST) pref.gear += TG.display_name return TOPIC_REFRESH_UPDATE_PREVIEW if(href_list["gear"] && href_list["tweak"]) var/datum/gear/gear = gear_datums[href_list["gear"]] var/datum/gear_tweak/tweak = locate(href_list["tweak"]) if(!tweak || !istype(gear) || !(tweak in gear.gear_tweaks)) return TOPIC_NOACTION var/metadata = tweak.get_metadata(user, get_tweak_metadata(gear, tweak)) if(!metadata || !CanUseTopic(user)) return TOPIC_NOACTION set_tweak_metadata(gear, tweak, metadata) return TOPIC_REFRESH_UPDATE_PREVIEW else if(href_list["select_category"]) current_tab = href_list["select_category"] return TOPIC_REFRESH else if(href_list["clear_loadout"]) pref.gear.Cut() return TOPIC_REFRESH_UPDATE_PREVIEW return ..() /datum/gear var/display_name //Name/index. Must be unique. var/description //Description of this gear. If left blank will default to the description of the pathed item. var/path //Path to item. var/cost = 1 //Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points. var/slot //Slot to equip to. var/list/allowed_roles //Roles that can spawn with this item. var/whitelisted //Term to check the whitelist for.. var/sort_category = "General" var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned. /datum/gear/New() ..() if(!description) var/obj/O = path description = initial(O.desc) /datum/gear_data var/path var/location /datum/gear_data/New(var/path, var/location) src.path = path src.location = location /datum/gear/proc/spawn_item(var/location, var/metadata) var/datum/gear_data/gd = new(path, location) for(var/datum/gear_tweak/gt in gear_tweaks) gt.tweak_gear_data(metadata["[gt]"], gd) var/item = new gd.path(gd.location) for(var/datum/gear_tweak/gt in gear_tweaks) gt.tweak_item(item, metadata["[gt]"]) return item