mirror of
https://github.com/Citadel-Station-13/Citadel-Station-13-RP.git
synced 2026-08-21 00:26:37 +01:00
140 lines
5.1 KiB
Plaintext
140 lines
5.1 KiB
Plaintext
/datum/controller/subsystem/characters
|
|
//! Backgrounds - to be shoved into some lore system later (maybe)
|
|
var/list/character_origins
|
|
var/list/character_citizenships
|
|
var/list/character_religions
|
|
var/list/character_factions
|
|
var/list/character_cultures
|
|
|
|
/datum/controller/subsystem/characters/proc/rebuild_backgrounds()
|
|
character_origins = list()
|
|
character_citizenships = list()
|
|
character_religions = list()
|
|
character_factions = list()
|
|
character_cultures = list()
|
|
|
|
for(var/path in subtypesof(/datum/lore/character_background))
|
|
var/datum/lore/character_background/L = path
|
|
if(initial(L.abstract_type) == path)
|
|
continue
|
|
L = new path
|
|
if(!L.id)
|
|
stack_trace("no ID on [L.type]")
|
|
continue
|
|
if(istype(L, /datum/lore/character_background/citizenship))
|
|
if(character_citizenships[L.id])
|
|
stack_trace("dupe [L.id] on [L.type]")
|
|
continue
|
|
character_citizenships[L.id] = L
|
|
if(istype(L, /datum/lore/character_background/origin))
|
|
if(character_origins[L.id])
|
|
stack_trace("dupe [L.id] on [L.type]")
|
|
continue
|
|
character_origins[L.id] = L
|
|
if(istype(L, /datum/lore/character_background/religion))
|
|
if(character_religions[L.id])
|
|
stack_trace("dupe [L.id] on [L.type]")
|
|
continue
|
|
character_religions[L.id] = L
|
|
if(istype(L, /datum/lore/character_background/faction))
|
|
if(character_factions[L.id])
|
|
stack_trace("dupe [L.id] on [L.type]")
|
|
continue
|
|
character_factions[L.id] = L
|
|
if(istype(L, /datum/lore/character_background/culture))
|
|
if(character_cultures[L.id])
|
|
stack_trace("dupe [L.id] on [L.type]")
|
|
continue
|
|
character_cultures[L.id] = L
|
|
|
|
|
|
tim_sort(character_origins, GLOBAL_PROC_REF(cmp_auto_compare), TRUE)
|
|
tim_sort(character_citizenships, GLOBAL_PROC_REF(cmp_auto_compare), TRUE)
|
|
tim_sort(character_religions, GLOBAL_PROC_REF(cmp_auto_compare), TRUE)
|
|
tim_sort(character_factions, GLOBAL_PROC_REF(cmp_auto_compare), TRUE)
|
|
tim_sort(character_cultures, GLOBAL_PROC_REF(cmp_auto_compare), TRUE)
|
|
|
|
/datum/controller/subsystem/characters/proc/available_citizenships(species_id, category)
|
|
. = list()
|
|
for(var/id in character_citizenships)
|
|
var/datum/lore/character_background/citizenship/L = character_citizenships[id]
|
|
if(category && (L.category != category))
|
|
continue
|
|
if(L.check_species_id(species_id))
|
|
. += L
|
|
|
|
/datum/controller/subsystem/characters/proc/available_religions(species_id, category)
|
|
. = list()
|
|
for(var/id in character_religions)
|
|
var/datum/lore/character_background/religion/L = character_religions[id]
|
|
if(category && (L.category != category))
|
|
continue
|
|
if(L.check_species_id(species_id))
|
|
. += L
|
|
|
|
/datum/controller/subsystem/characters/proc/available_factions(species_id, origin_id, citizenship_id, category)
|
|
. = list()
|
|
for(var/id in character_factions)
|
|
var/datum/lore/character_background/faction/L = character_factions[id]
|
|
if(L.origin_whitelist && !(origin_id in L.origin_whitelist))
|
|
continue
|
|
if(L.citizenship_whitelist && !(citizenship_id in L.citizenship_whitelist))
|
|
continue
|
|
if(category && (L.category != category))
|
|
continue
|
|
if(L.check_species_id(species_id))
|
|
. += L
|
|
|
|
/datum/controller/subsystem/characters/proc/available_origins(species_id, category)
|
|
. = list()
|
|
for(var/id in character_origins)
|
|
var/datum/lore/character_background/origin/L = character_origins[id]
|
|
if(category && (L.category != category))
|
|
continue
|
|
if(L.check_species_id(species_id))
|
|
. += L
|
|
|
|
/datum/controller/subsystem/characters/proc/available_cultures(species_id, category)
|
|
. = list()
|
|
for(var/id in character_cultures)
|
|
var/datum/lore/character_background/culture/L = character_cultures[id]
|
|
if(category && (L.category != category))
|
|
continue
|
|
if(L.check_species_id(species_id))
|
|
. += L
|
|
|
|
/datum/controller/subsystem/characters/proc/resolve_citizenship(id_or_typepath)
|
|
RETURN_TYPE(/datum/lore/character_background/citizenship)
|
|
if(ispath(id_or_typepath))
|
|
var/datum/lore/character_background/bg = id_or_typepath
|
|
id_or_typepath = initial(bg.id)
|
|
return character_citizenships[id_or_typepath]
|
|
|
|
/datum/controller/subsystem/characters/proc/resolve_faction(id_or_typepath)
|
|
RETURN_TYPE(/datum/lore/character_background/faction)
|
|
if(ispath(id_or_typepath))
|
|
var/datum/lore/character_background/bg = id_or_typepath
|
|
id_or_typepath = initial(bg.id)
|
|
return character_factions[id_or_typepath]
|
|
|
|
/datum/controller/subsystem/characters/proc/resolve_religion(id_or_typepath)
|
|
RETURN_TYPE(/datum/lore/character_background/religion)
|
|
if(ispath(id_or_typepath))
|
|
var/datum/lore/character_background/bg = id_or_typepath
|
|
id_or_typepath = initial(bg.id)
|
|
return character_religions[id_or_typepath]
|
|
|
|
/datum/controller/subsystem/characters/proc/resolve_origin(id_or_typepath)
|
|
RETURN_TYPE(/datum/lore/character_background/origin)
|
|
if(ispath(id_or_typepath))
|
|
var/datum/lore/character_background/bg = id_or_typepath
|
|
id_or_typepath = initial(bg.id)
|
|
return character_origins[id_or_typepath]
|
|
|
|
/datum/controller/subsystem/characters/proc/resolve_culture(id_or_typepath)
|
|
RETURN_TYPE(/datum/lore/character_background/culture)
|
|
if(ispath(id_or_typepath))
|
|
var/datum/lore/character_background/bg = id_or_typepath
|
|
id_or_typepath = initial(bg.id)
|
|
return character_cultures[id_or_typepath]
|