Skip to content

Commit

Permalink
review - 7 9 24
Browse files Browse the repository at this point in the history
  • Loading branch information
DrDuckedGoose committed Sep 7, 2024
1 parent adf83aa commit 28a598c
Show file tree
Hide file tree
Showing 11 changed files with 139 additions and 128 deletions.
6 changes: 3 additions & 3 deletions code/__DEFINES/xenoarchaeology.dm
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@
#define TRAIT_INCOMPATIBLE_STRUCTURE (1<<2)

///Signal for artifact trigger
#define XENOA_TRIGGER "XENOA_TRIGGER"
#define COMSIG_XENOA_TRIGGER "COMSIG_XENOA_TRIGGER"
///Signal for artifact calcified
#define XENOA_CALCIFIED "XENOA_CALCIFIED"
#define COMSIG_XENOA_CALCIFIED "COMSIG_XENOA_CALCIFIED"

///Signal for SS needing new mainc onsole
#define XENOA_NEW_CONSOLE "XENOA_NEW_CONSOLE"
#define COMSIG_XENOA_NEW_CONSOLE "COMSIG_XENOA_NEW_CONSOLE"

///generic starting cooldown timer for triggers
#define XENOA_GENERIC_COOLDOWN 5 SECONDS
Expand Down
13 changes: 7 additions & 6 deletions code/_globalvars/sticker.dm
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,12 @@ GLOBAL_LIST(stickers_by_series)
*/
var/list/temp = list()
var/series = STICKER_SERIES_1 //Make sure you update this if you add more series
for(var/obj/item/sticker/S as() in subtypesof(/obj/item/sticker))
var/index = (series & initial(S.sticker_flags))
if(!index || (ABSTRACT & initial(S.item_flags)))
for(var/obj/item/sticker/sticker as anything in subtypesof(/obj/item/sticker))
var/index = (series & initial(sticker.sticker_flags))
if(!index || (ABSTRACT & initial(sticker.item_flags)))
continue
if(!temp["[index]"])
temp["[index]"] = list()
temp["[index]"] += S
var/string_index = "[index]"
if(!temp[string_index])
temp[string_index] = list()
temp[string_index] += sticker
GLOB.stickers_by_series = temp
123 changes: 66 additions & 57 deletions code/controllers/subsystem/xenoarchaeology.dm
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,13 @@ SUBSYSTEM_DEF(xenoarchaeology)
xenoa_seller_names = world.file2list("strings/names/science_seller.txt")
xenoa_seller_dialogue = world.file2list("strings/science_dialogue.txt")
xenoa_artifact_names = world.file2list("strings/names/artifact_sentience.txt")
//in a rare case where that the game failed to get these texts
if(!length(xenoa_seller_names))
xenoa_seller_names = list("Brock Enn")
if(!length(xenoa_seller_dialogue))
xenoa_seller_dialogue = list("Something isn't right!")
if(!length(xenoa_artifact_names))
xenoa_artifact_names = list("Brock Enn")

//Dirty unwashed masses
xenoa_all_traits = compile_artifact_weights(/datum/xenoartifact_trait)
Expand All @@ -59,18 +66,18 @@ SUBSYSTEM_DEF(xenoarchaeology)
labeler_traits = new()
labeler_traits.compile_artifact_whitelist(/datum/xenoartifact_material)
labeler_traits_filter = list()
for(var/datum/xenoartifact_trait/T as() in xenoa_all_traits)
T = new T() //Instantiate so we can access a PROC
var/list/hints = T.get_dictionary_hint()
for(var/i in hints)
if(!labeler_traits_filter[i["icon"]])
labeler_traits_filter[i["icon"]] = list()
labeler_traits_filter[i["icon"]] += list("[initial(T.label_name)]")
QDEL_NULL(T)
for(var/datum/xenoartifact_trait/trait as anything in xenoa_all_traits)
trait = new trait() //Instantiate so we can access a PROC
var/list/hints = trait.get_dictionary_hint()
for(var/each_hint in hints)
if(!labeler_traits_filter[each_hint["icon"]])
labeler_traits_filter[each_hint["icon"]] = list()
labeler_traits_filter[each_hint["icon"]] += list("[initial(trait.label_name)]")
QDEL_NULL(trait)

//Populate traits by material
material_traits = list()
for(var/datum/xenoartifact_material/material_index as() in typesof(/datum/xenoartifact_material))
for(var/datum/xenoartifact_material/material_index as anything in typesof(/datum/xenoartifact_material))
if(SSxenoarchaeology.material_traits[initial(material_index.material_parent)])
continue
var/datum/xenoa_material_traits/material = new()
Expand Down Expand Up @@ -99,44 +106,44 @@ SUBSYSTEM_DEF(xenoarchaeology)
labeler_tooltip_stats = SSxenoarchaeology.labeler_tooltip_stats
labeler_traits_filter = SSxenoarchaeology.labeler_traits_filter

/datum/controller/subsystem/xenoarchaeology/proc/register_console(var/obj/machinery/computer/xenoarchaeology_console/new_console)
/datum/controller/subsystem/xenoarchaeology/proc/register_console(obj/machinery/computer/xenoarchaeology_console/new_console)
if(main_console)
main_console.main_console = FALSE
main_console.is_main_console = FALSE
UnregisterSignal(main_console, COMSIG_PARENT_QDELETING)
main_console = new_console
main_console.main_console = TRUE
main_console.is_main_console = TRUE
RegisterSignal(main_console, COMSIG_PARENT_QDELETING, PROC_REF(catch_console))

/datum/controller/subsystem/xenoarchaeology/proc/catch_console(datum/source)
SIGNAL_HANDLER

main_console = null
SEND_SIGNAL(src, XENOA_NEW_CONSOLE)
SEND_SIGNAL(src, COMSIG_XENOA_NEW_CONSOLE)

///Proc used to compile trait weights into a list
/datum/controller/subsystem/xenoarchaeology/proc/compile_artifact_weights(path, keyed = FALSE)
if(!ispath(path))
return
var/list/temp = subtypesof(path)
var/list/weighted = list()
for(var/datum/xenoartifact_trait/T as() in temp)
if(initial(T.flags) & XENOA_HIDE_TRAIT)
for(var/datum/xenoartifact_trait/trait as anything in temp)
if(initial(trait.flags) & XENOA_HIDE_TRAIT)
continue
//Filter out abstract types
if(T == /datum/xenoartifact_trait/activator || T == /datum/xenoartifact_trait/minor || T == /datum/xenoartifact_trait/major || T == /datum/xenoartifact_trait/malfunction)
if(trait == /datum/xenoartifact_trait/activator || trait == /datum/xenoartifact_trait/minor || trait == /datum/xenoartifact_trait/major || trait == /datum/xenoartifact_trait/malfunction)
continue
if(keyed)
weighted += list(initial(T.label_name) = (T))
weighted[initial(trait.label_name)] = (trait)
else
weighted += list((T) = initial(T.rarity)) //The (T) will not work if it is T
weighted[(trait)] = initial(trait.rarity) //The (trait) will not work if it is trait
return weighted

///Compile a list of traits from a given compatability flag/s
/datum/controller/subsystem/xenoarchaeology/proc/compile_artifact_compatibilties(flags)
var/list/output = list()
for(var/datum/xenoartifact_trait/T as() in xenoa_all_traits)
if(initial(T.incompatabilities) & flags)
output += T
for(var/datum/xenoartifact_trait/trait as anything in xenoa_all_traits)
if(initial(trait.incompatabilities) & flags)
output += trait
return output

///Get a trait incompatability list based on the passed type
Expand All @@ -156,18 +163,19 @@ SUBSYSTEM_DEF(xenoarchaeology)
///Proc for labeler baking
/datum/controller/subsystem/xenoarchaeology/proc/get_trait_list_stats(list/trait_type)
var/list/temp = list()
for(var/datum/xenoartifact_trait/T as() in trait_type)
for(var/datum/xenoartifact_trait/trait as anything in trait_type)
var/name = initial(trait.label_name)
//generate tool tips
temp += list(initial(T.label_name))
var/datum/xenoartifact_trait/hint_holder = new T()
labeler_tooltip_stats["[initial(T.label_name)]"] = list("weight" = initial(T.weight), "conductivity" = initial(T.conductivity), "alt_name" = initial(T.alt_label_name), "desc" = initial(T.label_desc), "hints" = hint_holder.get_dictionary_hint())
temp += list(name)
var/datum/xenoartifact_trait/hint_holder = new trait()
labeler_tooltip_stats["[name]"] = list("weight" = initial(trait.weight), "conductivity" = initial(trait.conductivity), "alt_name" = initial(trait.alt_label_name), "desc" = initial(trait.label_desc), "hints" = hint_holder.get_dictionary_hint())
qdel(hint_holder)
//Generate material availability
var/list/materials = list(XENOA_BLUESPACE, XENOA_PLASMA, XENOA_URANIUM, XENOA_BANANIUM, XENOA_PEARL)
labeler_tooltip_stats["[initial(T.label_name)]"]["availability"] = list())
for(var/datum/xenoartifact_material/M as() in materials)
if(initial(M.trait_flags) & initial(T.flags))
labeler_tooltip_stats["[initial(T.label_name)]"]["availability"] += list(list("color" = initial(M.material_color), "icon" = initial(M.label_icon)))
labeler_tooltip_stats["[name]"]["availability"] = list()
for(var/datum/xenoartifact_material/M as anything in materials)
if(initial(M.trait_flags) & initial(trait.flags))
labeler_tooltip_stats["[name]"]["availability"] += list(list("color" = initial(M.material_color), "icon" = initial(M.label_icon)))
return temp

/*
Expand All @@ -186,56 +194,57 @@ SUBSYSTEM_DEF(xenoarchaeology)

///Populate our trait lists from a given material path
/datum/xenoa_material_traits/proc/compile_artifact_whitelist(datum/xenoartifact_material/material)
for(var/datum/xenoartifact_trait/T as() in SSxenoarchaeology.xenoa_all_traits)
if(initial(T.flags) & XENOA_HIDE_TRAIT)
for(var/datum/xenoartifact_trait/trait as anything in SSxenoarchaeology.xenoa_all_traits)
if(initial(trait.flags) & XENOA_HIDE_TRAIT)
continue
if(!(initial(T.flags) & initial(material.trait_flags)))
if(!(initial(trait.flags) & initial(material.trait_flags)))
continue
//Sort trait into list
if(ispath(T, /datum/xenoartifact_trait/activator))
activators[T] = initial(T.rarity)
if(ispath(trait, /datum/xenoartifact_trait/activator))
activators[trait] = initial(trait.rarity)
continue
if(ispath(T, /datum/xenoartifact_trait/minor))
minors[T] = initial(T.rarity)
if(ispath(trait, /datum/xenoartifact_trait/minor))
minors[trait] = initial(trait.rarity)
continue
if(ispath(T, /datum/xenoartifact_trait/major))
majors[T] = initial(T.rarity)
if(ispath(trait, /datum/xenoartifact_trait/major))
majors[trait] = initial(trait.rarity)
continue
if(ispath(T, /datum/xenoartifact_trait/malfunction))
malfunctions[T] = initial(T.rarity)
if(ispath(trait, /datum/xenoartifact_trait/malfunction))
malfunctions[trait] = initial(trait.rarity)
continue
compiled = TRUE

//Variant for stats, labeler baking
/datum/xenoa_material_traits/stats

/datum/xenoa_material_traits/stats/compile_artifact_whitelist(datum/xenoartifact_material/material)
for(var/datum/xenoartifact_trait/T as() in SSxenoarchaeology.xenoa_all_traits)
if(initial(T.flags) & XENOA_HIDE_TRAIT)
for(var/datum/xenoartifact_trait/trait as anything in SSxenoarchaeology.xenoa_all_traits)
if(initial(trait.flags) & XENOA_HIDE_TRAIT)
continue
if(!(initial(T.flags) & initial(material.trait_flags)))
if(!(initial(trait.flags) & initial(material.trait_flags)))
continue
//We're gonna be nice an populate labeler_tooltip_stats while we're at it, because we're nice
//generate tool tips
var/datum/xenoartifact_trait/hint_holder = new T() //Instantiate so we can access a PROC
SSxenoarchaeology.labeler_tooltip_stats["[initial(T.label_name)]"] = list("weight" = initial(T.weight), "conductivity" = initial(T.conductivity), "alt_name" = initial(T.alt_label_name), "desc" = initial(T.label_desc), "hints" = hint_holder.get_dictionary_hint())
var/datum/xenoartifact_trait/hint_holder = new trait() //Instantiate so we can access a PROC
var/name = initial(trait.label_name)
SSxenoarchaeology.labeler_tooltip_stats["[name]"] = list("weight" = initial(trait.weight), "conductivity" = initial(trait.conductivity), "alt_name" = initial(trait.alt_label_name), "desc" = initial(trait.label_desc), "hints" = hint_holder.get_dictionary_hint())
qdel(hint_holder)
//Generate material availability
var/list/materials = list(XENOA_BLUESPACE, XENOA_PLASMA, XENOA_URANIUM, XENOA_BANANIUM, XENOA_PEARL)
SSxenoarchaeology.labeler_tooltip_stats["[initial(T.label_name)]"]["availability"] = list()
for(var/datum/xenoartifact_material/M as() in materials)
if(initial(M.trait_flags) & initial(T.flags))
SSxenoarchaeology.labeler_tooltip_stats["[initial(T.label_name)]"]["availability"] += list(list("color" = initial(M.material_color), "icon" = initial(M.label_icon)))
SSxenoarchaeology.labeler_tooltip_stats["[name]"]["availability"] = list()
for(var/datum/xenoartifact_material/M as anything in materials)
if(initial(M.trait_flags) & initial(trait.flags))
SSxenoarchaeology.labeler_tooltip_stats["[name]"]["availability"] += list(list("color" = initial(M.material_color), "icon" = initial(M.label_icon)))
//Sort trait into list
if(ispath(T, /datum/xenoartifact_trait/activator) && (T != /datum/xenoartifact_trait/activator))
activators += initial(T.label_name)
if(ispath(trait, /datum/xenoartifact_trait/activator) && (trait != /datum/xenoartifact_trait/activator))
activators += name
continue
if(ispath(T, /datum/xenoartifact_trait/minor) && (T != /datum/xenoartifact_trait/minor))
minors += initial(T.label_name)
if(ispath(trait, /datum/xenoartifact_trait/minor) && (trait != /datum/xenoartifact_trait/minor))
minors += name
continue
if(ispath(T, /datum/xenoartifact_trait/major) && (T != /datum/xenoartifact_trait/major))
majors += initial(T.label_name)
if(ispath(trait, /datum/xenoartifact_trait/major) && (trait != /datum/xenoartifact_trait/major))
majors += name
continue
if(ispath(T, /datum/xenoartifact_trait/malfunction) && (T != /datum/xenoartifact_trait/malfunction))
malfunctions += initial(T.label_name)
if(ispath(trait, /datum/xenoartifact_trait/malfunction) && (trait != /datum/xenoartifact_trait/malfunction))
malfunctions += name
continue
4 changes: 2 additions & 2 deletions code/modules/xenoarchaeology/components/xenoartifact.dm
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@
playsound(get_turf(parent), 'sound/magic/blink.ogg', 50, TRUE)
//Trait triggers
for(var/i in SSxenoarchaeology.xenoartifact_trait_priorities)
SEND_SIGNAL(src, XENOA_TRIGGER, i)
SEND_SIGNAL(src, COMSIG_XENOA_TRIGGER, i)
//Malfunctions
if(!calibrated)
handle_malfunctions()
Expand Down Expand Up @@ -316,7 +316,7 @@
//Disable artifact
cooldown_override = TRUE

SEND_SIGNAL(src, XENOA_CALCIFIED)
SEND_SIGNAL(src, COMSIG_XENOA_CALCIFIED)

//Calibrates. Does the opposite of calcify
/datum/component/xenoartifact/proc/calibrate()
Expand Down
Loading

0 comments on commit 28a598c

Please sign in to comment.