diff --git a/code/modules/antagonists/heretic/heretic_antag.dm b/code/modules/antagonists/heretic/heretic_antag.dm index 01d7c33f718..74dc3ce2183 100644 --- a/code/modules/antagonists/heretic/heretic_antag.dm +++ b/code/modules/antagonists/heretic/heretic_antag.dm @@ -57,17 +57,17 @@ /// Controls what types of turf we can spread rust to, increases as we unlock more powerful rust abilites var/rust_strength = 0 /// Static list of what each path converts to in the UI (colors are TGUI colors) - var/static/list/path_to_ui_color = list( - PATH_START = "grey", - PATH_SIDE = "green", - PATH_RUST = "brown", - PATH_FLESH = "red", - PATH_ASH = "white", - PATH_VOID = "blue", - PATH_BLADE = "label", // my favorite color is label - PATH_COSMIC = "purple", - PATH_LOCK = "yellow", - PATH_MOON = "blue", + var/static/list/path_to_ui_bgr = list( + PATH_START = "node_side", + PATH_SIDE = "node_side", + PATH_RUST = "node_rust", + PATH_FLESH = "node_flesh", + PATH_ASH = "node_ash", + PATH_VOID = "node_void", + PATH_BLADE = "node_blade", + PATH_COSMIC = "node_cosmos", + PATH_LOCK = "node_lock", + PATH_MOON = "node_moon", ) var/static/list/path_to_rune_color = list( @@ -86,6 +86,82 @@ LAZYNULL(sac_targets) return ..() +/datum/antagonist/heretic/proc/get_icon_of_knowledge(datum/heretic_knowledge/knowledge) + //basic icon parameters + var/icon_path = 'icons/mob/actions/actions_ecult.dmi' + var/icon_state = "eye" + var/icon_frame = knowledge.research_tree_icon_frame + var/icon_dir = knowledge.research_tree_icon_dir + //can't imagine why you would want this one, so it can't be overridden by the knowledge + var/icon_moving = 0 + + //item transmutation knowledge does not generate its own icon due to implementation difficulties, the icons have to be specified in the override vars + + //if the knowledge has a special icon, use that + if(!isnull(knowledge.research_tree_icon_path)) + icon_path = knowledge.research_tree_icon_path + icon_state = knowledge.research_tree_icon_state + + //if the knowledge is a spell, use the spell's button + else if(ispath(knowledge,/datum/heretic_knowledge/spell)) + var/datum/heretic_knowledge/spell/spell_knowledge = knowledge + var/datum/action/cooldown/spell/result_spell = spell_knowledge.spell_to_add + icon_path = result_spell.button_icon + icon_state = result_spell.button_icon_state + + //if the knowledge is a summon, use the mob sprite + else if(ispath(knowledge,/datum/heretic_knowledge/summon)) + var/datum/heretic_knowledge/summon/summon_knowledge = knowledge + var/mob/living/result_mob = summon_knowledge.mob_to_summon + icon_path = result_mob.icon + icon_state = result_mob.icon_state + + //if the knowledge is an eldritch mark, use the mark sprite + else if(ispath(knowledge,/datum/heretic_knowledge/mark)) + var/datum/heretic_knowledge/mark/mark_knowledge = knowledge + var/datum/status_effect/eldritch/mark_effect = mark_knowledge.mark_type + icon_path = mark_effect.effect_icon + icon_state = mark_effect.effect_icon_state + + //if the knowledge is an ascension, use the achievement sprite + else if(ispath(knowledge,/datum/heretic_knowledge/ultimate)) + var/datum/heretic_knowledge/ultimate/ascension_knowledge = knowledge + var/datum/award/achievement/misc/achievement = ascension_knowledge.ascension_achievement + if(!isnull(achievement)) + icon_path = achievement.icon + icon_state = achievement.icon_state + + var/list/result_parameters = list() + result_parameters["icon"] = icon_path + result_parameters["state"] = icon_state + result_parameters["frame"] = icon_frame + result_parameters["dir"] = icon_dir + result_parameters["moving"] = icon_moving + return result_parameters + +/datum/antagonist/heretic/proc/get_knowledge_data(datum/heretic_knowledge/knowledge, done) + + var/list/knowledge_data = list() + + knowledge_data["path"] = knowledge + knowledge_data["icon_params"] = get_icon_of_knowledge(knowledge) + knowledge_data["name"] = initial(knowledge.name) + knowledge_data["gainFlavor"] = initial(knowledge.gain_text) + knowledge_data["cost"] = initial(knowledge.cost) + knowledge_data["disabled"] = (!done) && (initial(knowledge.cost) > knowledge_points) + knowledge_data["bgr"] = (path_to_ui_bgr[initial(knowledge.route)] || "side") + knowledge_data["finished"] = done + knowledge_data["ascension"] = ispath(knowledge,/datum/heretic_knowledge/ultimate) + + //description of a knowledge might change, make sure we are not shown the initial() value in that case + if(done) + var/datum/heretic_knowledge/knowledge_instance = researched_knowledge[knowledge] + knowledge_data["desc"] = knowledge_instance.desc + else + knowledge_data["desc"] = initial(knowledge.desc) + + return knowledge_data + /datum/antagonist/heretic/ui_data(mob/user) var/list/data = list() @@ -93,26 +169,32 @@ data["total_sacrifices"] = total_sacrifices data["ascended"] = ascended + var/list/tiers = list() + // This should be cached in some way, but the fact that final knowledge // has to update its disabled state based on whether all objectives are complete, // makes this very difficult. I'll figure it out one day maybe + for(var/datum/heretic_knowledge/knowledge as anything in researched_knowledge) + var/list/knowledge_data = get_knowledge_data(knowledge,TRUE) + + while(initial(knowledge.depth) > tiers.len) + tiers += list(list("nodes"=list())) + + tiers[initial(knowledge.depth)]["nodes"] += list(knowledge_data) + for(var/datum/heretic_knowledge/knowledge as anything in get_researchable_knowledge()) - var/list/knowledge_data = list() - knowledge_data["path"] = knowledge - knowledge_data["name"] = initial(knowledge.name) - knowledge_data["desc"] = initial(knowledge.desc) - knowledge_data["gainFlavor"] = initial(knowledge.gain_text) - knowledge_data["cost"] = initial(knowledge.cost) - knowledge_data["disabled"] = initial(knowledge.cost) > knowledge_points + var/list/knowledge_data = get_knowledge_data(knowledge,FALSE) // Final knowledge can't be learned until all objectives are complete. if(ispath(knowledge, /datum/heretic_knowledge/ultimate)) - knowledge_data["disabled"] = !can_ascend() + knowledge_data["disabled"] ||= !can_ascend() - knowledge_data["hereticPath"] = initial(knowledge.route) - knowledge_data["color"] = path_to_ui_color[initial(knowledge.route)] || "grey" + while(initial(knowledge.depth) > tiers.len) + tiers += list(list("nodes"=list())) - data["learnableKnowledge"] += list(knowledge_data) + tiers[initial(knowledge.depth)]["nodes"] += list(knowledge_data) + + data["knowledge_tiers"] = tiers return data @@ -122,18 +204,6 @@ data["objectives"] = get_objectives() data["can_change_objective"] = can_assign_self_objectives - for(var/path in researched_knowledge) - var/list/knowledge_data = list() - var/datum/heretic_knowledge/found_knowledge = researched_knowledge[path] - knowledge_data["name"] = found_knowledge.name - knowledge_data["desc"] = found_knowledge.desc - knowledge_data["gainFlavor"] = found_knowledge.gain_text - knowledge_data["cost"] = found_knowledge.cost - knowledge_data["hereticPath"] = found_knowledge.route - knowledge_data["color"] = path_to_ui_color[found_knowledge.route] || "grey" - - data["learnedKnowledge"] += list(knowledge_data) - return data /datum/antagonist/heretic/ui_act(action, params) diff --git a/code/modules/antagonists/heretic/heretic_knowledge.dm b/code/modules/antagonists/heretic/heretic_knowledge.dm index 5369e5fee8d..ec7fa4629ad 100644 --- a/code/modules/antagonists/heretic/heretic_knowledge.dm +++ b/code/modules/antagonists/heretic/heretic_knowledge.dm @@ -38,6 +38,19 @@ var/priority = 0 /// What path is this on. If set to "null", assumed to be unreachable (or abstract). var/route +<<<<<<< HEAD +======= + /// In case we want to override the default UI icon getter and plug in our own icon instead. + /// if research_tree_icon_path is not null, research_tree_icon_state must also be specified or things may break + var/research_tree_icon_path + var/research_tree_icon_state + var/research_tree_icon_frame = 1 + var/research_tree_icon_dir = SOUTH + /// Level of knowledge tree where this knowledge should be in the UI + var/depth = 1 + ///Determines what kind of monster ghosts will ignore from here on out. Defaults to POLL_IGNORE_HERETIC_MONSTER, but we define other types of monsters for more granularity. + var/poll_ignore_define = POLL_IGNORE_HERETIC_MONSTER +>>>>>>> cb28aef24a5... [MIRROR] Better UI for heretic research [MDB IGNORE] (#3413) /datum/heretic_knowledge/New() if(!mutually_exclusive) @@ -261,6 +274,7 @@ limit = 2 cost = 1 priority = MAX_KNOWLEDGE_PRIORITY - 5 + depth = 2 /datum/heretic_knowledge/limited_amount/starting/New() . = ..() @@ -285,6 +299,7 @@ abstract_parent_type = /datum/heretic_knowledge/mark mutually_exclusive = TRUE cost = 2 + depth = 5 /// The status effect typepath we apply on people on mansus grasp. var/datum/status_effect/eldritch/mark_type @@ -350,6 +365,7 @@ abstract_parent_type = /datum/heretic_knowledge/blade_upgrade mutually_exclusive = TRUE cost = 2 + depth = 9 /datum/heretic_knowledge/blade_upgrade/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_BLADE_ATTACK, PROC_REF(on_eldritch_blade)) @@ -577,6 +593,9 @@ mutually_exclusive = TRUE cost = 1 priority = MAX_KNOWLEDGE_PRIORITY - 10 // A pretty important midgame ritual. + depth = 6 + research_tree_icon_path = 'icons/obj/antags/eldritch.dmi' + research_tree_icon_state = "book_open" /// Whether we've done the ritual. Only doable once. var/was_completed = FALSE @@ -670,6 +689,9 @@ cost = 2 priority = MAX_KNOWLEDGE_PRIORITY + 1 // Yes, the final ritual should be ABOVE the max priority. required_atoms = list(/mob/living/carbon/human = 3) + depth = 11 + //use this to store the achievement typepath + var/datum/award/achievement/misc/ascension_achievement /datum/heretic_knowledge/ultimate/on_research(mob/user, datum/antagonist/heretic/our_heretic) . = ..() @@ -730,6 +752,8 @@ source = user, header = "A Heretic is Ascending!", ) + if(!isnull(ascension_achievement)) + user.client?.give_award(ascension_achievement, user) heretic_datum.increase_rust_strength() return TRUE diff --git a/code/modules/antagonists/heretic/items/eldritch_flask.dm b/code/modules/antagonists/heretic/items/eldritch_flask.dm index 95b77f95618..409bcd473ed 100644 --- a/code/modules/antagonists/heretic/items/eldritch_flask.dm +++ b/code/modules/antagonists/heretic/items/eldritch_flask.dm @@ -4,5 +4,5 @@ name = "flask of eldritch essence" desc = "Toxic to the closed minded, yet refreshing to those with knowledge of the beyond." icon = 'icons/obj/antags/eldritch.dmi' - icon_state = "eldrich_flask" + icon_state = "eldritch_flask" list_reagents = list(/datum/reagent/eldritch = 50) diff --git a/code/modules/antagonists/heretic/knowledge/ash_lore.dm b/code/modules/antagonists/heretic/knowledge/ash_lore.dm index dc768968e0b..ad56eebe622 100644 --- a/code/modules/antagonists/heretic/knowledge/ash_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/ash_lore.dm @@ -39,6 +39,8 @@ ) result_atoms = list(/obj/item/melee/sickly_blade/ash) route = PATH_ASH + research_tree_icon_path = 'icons/obj/weapons/khopesh.dmi' + research_tree_icon_state = "ash_blade" /datum/heretic_knowledge/ashen_grasp name = "Grasp of Ash" @@ -48,6 +50,9 @@ next_knowledge = list(/datum/heretic_knowledge/spell/ash_passage) cost = 1 route = PATH_ASH + depth = 3 + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "grasp_ash" /datum/heretic_knowledge/ashen_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) @@ -80,6 +85,7 @@ spell_to_add = /datum/action/cooldown/spell/jaunt/ethereal_jaunt/ash cost = 1 route = PATH_ASH + depth = 4 /datum/heretic_knowledge/mark/ash_mark name = "Mark of Ash" @@ -119,6 +125,8 @@ spell_to_add = /datum/action/cooldown/spell/charged/beam/fire_blast cost = 1 route = PATH_ASH + depth = 7 + research_tree_icon_frame = 7 /datum/heretic_knowledge/mad_mask @@ -142,6 +150,9 @@ result_atoms = list(/obj/item/clothing/mask/madness_mask) cost = 1 route = PATH_ASH + research_tree_icon_path = 'icons/obj/clothing/masks.dmi' + research_tree_icon_state = "mad_mask" + depth = 8 /datum/heretic_knowledge/blade_upgrade/ash name = "Fiery Blade" @@ -150,6 +161,8 @@ His city, the people he swore to watch... and watch he did, as they all burnt to cinders." next_knowledge = list(/datum/heretic_knowledge/spell/flame_birth) route = PATH_ASH + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "blade_upgrade_ash" /datum/heretic_knowledge/blade_upgrade/ash/do_melee_effects(mob/living/source, mob/living/target, obj/item/melee/sickly_blade/blade) if(source == target) @@ -173,6 +186,8 @@ spell_to_add = /datum/action/cooldown/spell/aoe/fiery_rebirth cost = 1 route = PATH_ASH + depth = 10 + research_tree_icon_frame = 5 /datum/heretic_knowledge/ultimate/ash_final name = "Ashlord's Rite" @@ -187,6 +202,7 @@ for the Nightwatcher brought forth the rite to mankind! His gaze continues, as now I am one with the flames, \ WITNESS MY ASCENSION, THE ASHY LANTERN BLAZES ONCE MORE!" route = PATH_ASH + ascension_achievement = /datum/award/achievement/misc/ash_ascension /// A static list of all traits we apply on ascension. var/static/list/traits_to_apply = list( TRAIT_BOMBIMMUNE, @@ -233,6 +249,5 @@ var/datum/action/cooldown/spell/aoe/fiery_rebirth/fiery_rebirth = locate() in user.actions fiery_rebirth?.cooldown_time *= 0.16 - user.client?.give_award(/datum/award/achievement/misc/ash_ascension, user) if(length(traits_to_apply)) user.add_traits(traits_to_apply, MAGIC_TRAIT) diff --git a/code/modules/antagonists/heretic/knowledge/blade_lore.dm b/code/modules/antagonists/heretic/knowledge/blade_lore.dm index 12e683d0edc..64d55e0491e 100644 --- a/code/modules/antagonists/heretic/knowledge/blade_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/blade_lore.dm @@ -43,6 +43,8 @@ result_atoms = list(/obj/item/melee/sickly_blade/dark) limit = 5 // It's the blade path, it's a given route = PATH_BLADE + research_tree_icon_path = 'icons/obj/weapons/khopesh.dmi' + research_tree_icon_state = "dark_blade" /datum/heretic_knowledge/blade_grasp name = "Grasp of the Blade" @@ -52,6 +54,9 @@ next_knowledge = list(/datum/heretic_knowledge/blade_dance) cost = 1 route = PATH_BLADE + depth = 3 + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "grasp_blade" /datum/heretic_knowledge/blade_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) @@ -111,6 +116,9 @@ ) cost = 1 route = PATH_BLADE + depth = 4 + research_tree_icon_path = 'icons/mob/actions/actions_ecult.dmi' + research_tree_icon_state = "shatter" /// Whether the counter-attack is ready or not. /// Used instead of cooldowns, so we can give feedback when it's ready again var/riposte_ready = TRUE @@ -231,6 +239,7 @@ spell_to_add = /datum/action/cooldown/spell/realignment cost = 1 route = PATH_BLADE + depth = 7 /// The amount of blood flow reduced per level of severity of gained bleeding wounds for Stance of the Torn Champion. #define BLOOD_FLOW_PER_SEVEIRTY -1 @@ -251,6 +260,10 @@ ) cost = 1 route = PATH_BLADE + depth = 8 + research_tree_icon_path = 'icons/effects/blood.dmi' + research_tree_icon_state = "suitblood" + research_tree_icon_dir = SOUTH /// Whether we're currently in duelist stance, gaining certain buffs (low health) var/in_duelist_stance = FALSE @@ -310,6 +323,8 @@ a flurry of blades, neither hitting their mark, for the Champion was indomitable." next_knowledge = list(/datum/heretic_knowledge/spell/furious_steel) route = PATH_BLADE + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "blade_upgrade_blade" /// How much force do we apply to the offhand? var/offand_force_decrement = 0 /// How much force was the last weapon we offhanded with? If it's different, we need to re-calculate the decrement @@ -380,6 +395,7 @@ spell_to_add = /datum/action/cooldown/spell/pointed/projectile/furious_steel cost = 1 route = PATH_BLADE + depth = 10 /datum/heretic_knowledge/ultimate/blade_final name = "Maelstrom of Silver" @@ -393,6 +409,7 @@ gain_text = "The Torn Champion is freed! I will become the blade reunited, and with my greater ambition, \ I AM UNMATCHED! A STORM OF STEEL AND SILVER IS UPON US! WITNESS MY ASCENSION!" route = PATH_BLADE + ascension_achievement = /datum/award/achievement/misc/blade_ascension /datum/heretic_knowledge/ultimate/blade_final/is_valid_sacrifice(mob/living/carbon/human/sacrifice) . = ..() @@ -409,7 +426,6 @@ sound = 'sound/ambience/antag/heretic/ascend_blade.ogg', color_override = "pink", ) - user.client?.give_award(/datum/award/achievement/misc/blade_ascension, user) ADD_TRAIT(user, TRAIT_NEVER_WOUNDED, name) RegisterSignal(user, COMSIG_HERETIC_BLADE_ATTACK, PROC_REF(on_eldritch_blade)) user.apply_status_effect(/datum/status_effect/protective_blades/recharging, null, 8, 30, 0.25 SECONDS, 1 MINUTES) diff --git a/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm b/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm index 6e22ebc3790..a3e75761320 100644 --- a/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm @@ -38,6 +38,8 @@ ) result_atoms = list(/obj/item/melee/sickly_blade/cosmic) route = PATH_COSMIC + research_tree_icon_path = 'icons/obj/weapons/khopesh.dmi' + research_tree_icon_state = "cosmic_blade" /datum/heretic_knowledge/cosmic_grasp name = "Grasp of Cosmos" @@ -48,6 +50,9 @@ next_knowledge = list(/datum/heretic_knowledge/spell/cosmic_runes) cost = 1 route = PATH_COSMIC + depth = 3 + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "grasp_cosmos" /datum/heretic_knowledge/cosmic_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) @@ -78,6 +83,7 @@ spell_to_add = /datum/action/cooldown/spell/cosmic_rune cost = 1 route = PATH_COSMIC + depth = 4 /datum/heretic_knowledge/mark/cosmic_mark name = "Mark of Cosmos" @@ -107,6 +113,7 @@ spell_to_add = /datum/action/cooldown/spell/touch/star_touch cost = 1 route = PATH_COSMIC + depth = 7 /datum/heretic_knowledge/spell/star_blast name = "Star Blast" @@ -123,6 +130,7 @@ spell_to_add = /datum/action/cooldown/spell/pointed/projectile/star_blast cost = 1 route = PATH_COSMIC + depth = 8 /datum/heretic_knowledge/blade_upgrade/cosmic name = "Cosmic Blade" @@ -135,6 +143,8 @@ The blades now glistened with fragmented power. I fell to the ground and wept at the beast's feet." next_knowledge = list(/datum/heretic_knowledge/spell/cosmic_expansion) route = PATH_COSMIC + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "blade_upgrade_cosmos" /// Storage for the second target. var/datum/weakref/second_target /// Storage for the third target. @@ -233,6 +243,7 @@ spell_to_add = /datum/action/cooldown/spell/conjure/cosmic_expansion cost = 1 route = PATH_COSMIC + depth = 10 /datum/heretic_knowledge/ultimate/cosmic_final name = "Creators's Gift" @@ -250,6 +261,7 @@ I closed my eyes with my head laid against their form. I was safe. \ WITNESS MY ASCENSION!" route = PATH_COSMIC + ascension_achievement = /datum/award/achievement/misc/cosmic_ascension /// A static list of command we can use with our mob. var/static/list/star_gazer_commands = list( /datum/pet_command/idle, @@ -296,5 +308,3 @@ var/datum/action/cooldown/spell/conjure/cosmic_expansion/cosmic_expansion_spell = locate() in user.actions cosmic_expansion_spell?.ascended = TRUE - - user.client?.give_award(/datum/award/achievement/misc/cosmic_ascension, user) diff --git a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm index 1d42cacee19..5635d6c38a1 100644 --- a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm @@ -44,6 +44,8 @@ result_atoms = list(/obj/item/melee/sickly_blade/flesh) limit = 3 // Bumped up so they can arm up their ghouls too. route = PATH_FLESH + research_tree_icon_path = 'icons/obj/weapons/khopesh.dmi' + research_tree_icon_state = "flesh_blade" /datum/heretic_knowledge/limited_amount/starting/base_flesh/on_research(mob/user, datum/antagonist/heretic/our_heretic) . = ..() @@ -64,6 +66,9 @@ limit = 1 cost = 1 route = PATH_FLESH + depth = 3 + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "grasp_flesh" /datum/heretic_knowledge/limited_amount/flesh_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) @@ -137,6 +142,10 @@ limit = 2 cost = 1 route = PATH_FLESH + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "ghoul_voiceless" + + depth = 4 /datum/heretic_knowledge/limited_amount/flesh_ghoul/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) . = ..() @@ -227,6 +236,7 @@ spell_to_add = /datum/action/cooldown/spell/touch/flesh_surgery cost = 1 route = PATH_FLESH + depth = 7 /datum/heretic_knowledge/summon/raw_prophet name = "Raw Ritual" @@ -250,6 +260,7 @@ cost = 1 route = PATH_FLESH poll_ignore_define = POLL_IGNORE_RAW_PROPHET + depth = 8 /datum/heretic_knowledge/blade_upgrade/flesh name = "Bleeding Steel" @@ -258,6 +269,8 @@ I finally began to understand. And then, blood rained from the heavens." next_knowledge = list(/datum/heretic_knowledge/summon/stalker) route = PATH_FLESH + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "blade_upgrade_flesh" ///What type of wound do we apply on hit var/wound_type = /datum/wound/slash/flesh/severe @@ -292,6 +305,7 @@ cost = 1 route = PATH_FLESH poll_ignore_define = POLL_IGNORE_STALKER + depth = 10 /datum/heretic_knowledge/ultimate/flesh_final name = "Priest's Final Hymn" @@ -308,6 +322,7 @@ Reality will bend to THE LORD OF THE NIGHT or be unraveled! WITNESS MY ASCENSION!" required_atoms = list(/mob/living/carbon/human = 4) route = PATH_FLESH + ascension_achievement = /datum/award/achievement/misc/flesh_ascension /datum/heretic_knowledge/ultimate/flesh_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() @@ -321,7 +336,6 @@ var/datum/action/cooldown/spell/shapeshift/shed_human_form/worm_spell = new(user.mind) worm_spell.Grant(user) - user.client?.give_award(/datum/award/achievement/misc/flesh_ascension, user) var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) var/datum/heretic_knowledge/limited_amount/flesh_grasp/grasp_ghoul = heretic_datum.get_knowledge(/datum/heretic_knowledge/limited_amount/flesh_grasp) diff --git a/code/modules/antagonists/heretic/knowledge/general_side.dm b/code/modules/antagonists/heretic/knowledge/general_side.dm index 2dc2719227b..27f0e11b446 100644 --- a/code/modules/antagonists/heretic/knowledge/general_side.dm +++ b/code/modules/antagonists/heretic/knowledge/general_side.dm @@ -12,6 +12,9 @@ ) cost = 1 route = PATH_SIDE + depth = 8 + research_tree_icon_path = 'icons/mob/actions/actions_animal.dmi' + research_tree_icon_state = "gaze" /datum/heretic_knowledge/reroll_targets/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) diff --git a/code/modules/antagonists/heretic/knowledge/lock_lore.dm b/code/modules/antagonists/heretic/knowledge/lock_lore.dm index 2807167d819..17e73cb162c 100644 --- a/code/modules/antagonists/heretic/knowledge/lock_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/lock_lore.dm @@ -39,6 +39,8 @@ result_atoms = list(/obj/item/melee/sickly_blade/lock) limit = 2 route = PATH_LOCK + research_tree_icon_path = 'icons/obj/weapons/khopesh.dmi' + research_tree_icon_state = "key_blade" /datum/heretic_knowledge/lock_grasp name = "Grasp of Lock" @@ -49,6 +51,9 @@ next_knowledge = list(/datum/heretic_knowledge/key_ring) cost = 1 route = PATH_LOCK + depth = 3 + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "grasp_lock" /datum/heretic_knowledge/lock_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK_SECONDARY, PROC_REF(on_secondary_mansus_grasp)) @@ -111,6 +116,9 @@ ) cost = 1 route = PATH_LOCK + research_tree_icon_path = 'icons/obj/card.dmi' + research_tree_icon_state = "card_gold" + depth = 4 /datum/heretic_knowledge/mark/lock_mark name = "Mark of Lock" @@ -140,6 +148,9 @@ next_knowledge = list(/datum/heretic_knowledge/spell/burglar_finesse) cost = 1 route = PATH_LOCK + research_tree_icon_path = 'icons/obj/service/library.dmi' + research_tree_icon_state = "heretichandbook" + depth = 7 /datum/heretic_knowledge/spell/burglar_finesse name = "Burglar's Finesse" @@ -156,6 +167,7 @@ spell_to_add = /datum/action/cooldown/spell/pointed/burglar_finesse cost = 1 route = PATH_LOCK + depth = 8 /datum/heretic_knowledge/blade_upgrade/flesh/lock //basically a chance-based weeping avulsion version of the former name = "Opening Blade" @@ -164,6 +176,8 @@ next_knowledge = list(/datum/heretic_knowledge/spell/caretaker_refuge) route = PATH_LOCK wound_type = /datum/wound/slash/flesh/critical + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "blade_upgrade_lock" var/chance = 35 /datum/heretic_knowledge/blade_upgrade/flesh/lock/do_melee_effects(mob/living/source, mob/living/target, obj/item/melee/sickly_blade/blade) @@ -183,6 +197,7 @@ route = PATH_LOCK spell_to_add = /datum/action/cooldown/spell/caretaker cost = 1 + depth = 10 /datum/heretic_knowledge/ultimate/lock_final name = "Unlock the Labyrinth" @@ -199,6 +214,7 @@ The Labyrinth will be Locked no more, and freedom will be ours! WITNESS US!" required_atoms = list(/mob/living/carbon/human = 3) route = PATH_LOCK + ascension_achievement = /datum/award/achievement/misc/lock_ascension /datum/heretic_knowledge/ultimate/lock_final/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) . = ..() @@ -227,13 +243,11 @@ sound = 'sound/ambience/antag/heretic/ascend_knock.ogg', color_override = "pink", ) - user.client?.give_award(/datum/award/achievement/misc/lock_ascension, user) // buffs var/datum/action/cooldown/spell/shapeshift/eldritch/ascension/transform_spell = new(user.mind) transform_spell.Grant(user) - user.client?.give_award(/datum/award/achievement/misc/lock_ascension, user) var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) var/datum/heretic_knowledge/blade_upgrade/flesh/lock/blade_upgrade = heretic_datum.get_knowledge(/datum/heretic_knowledge/blade_upgrade/flesh/lock) blade_upgrade.chance += 30 diff --git a/code/modules/antagonists/heretic/knowledge/moon_lore.dm b/code/modules/antagonists/heretic/knowledge/moon_lore.dm index e2af5390ba8..ab814425d34 100644 --- a/code/modules/antagonists/heretic/knowledge/moon_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/moon_lore.dm @@ -39,6 +39,8 @@ ) result_atoms = list(/obj/item/melee/sickly_blade/moon) route = PATH_MOON + research_tree_icon_path = 'icons/obj/weapons/khopesh.dmi' + research_tree_icon_state = "moon_blade" /datum/heretic_knowledge/base_moon/on_gain(mob/user, datum/antagonist/heretic/our_heretic) add_traits(user ,TRAIT_EMPATH, REF(src)) @@ -51,6 +53,9 @@ next_knowledge = list(/datum/heretic_knowledge/spell/moon_smile) cost = 1 route = PATH_MOON + depth = 3 + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "grasp_moon" /datum/heretic_knowledge/moon_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) @@ -82,6 +87,7 @@ spell_to_add = /datum/action/cooldown/spell/pointed/moon_smile cost = 1 route = PATH_MOON + depth = 4 /datum/heretic_knowledge/mark/moon_mark name = "Mark of Moon" @@ -107,6 +113,7 @@ spell_to_add = /datum/action/cooldown/spell/pointed/projectile/moon_parade cost = 1 route = PATH_MOON + depth = 7 /datum/heretic_knowledge/moon_amulet @@ -130,6 +137,10 @@ result_atoms = list(/obj/item/clothing/neck/heretic_focus/moon_amulet) cost = 1 route = PATH_MOON + depth = 8 + research_tree_icon_path = 'icons/obj/antags/eldritch.dmi' + research_tree_icon_state = "moon_amulette" + research_tree_icon_frame = 9 /datum/heretic_knowledge/blade_upgrade/moon name = "Moonlight Blade" @@ -137,6 +148,8 @@ gain_text = "His wit was sharp as a blade, cutting through the lie to bring us joy." next_knowledge = list(/datum/heretic_knowledge/spell/moon_ringleader) route = PATH_MOON + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "blade_upgrade_moon" /datum/heretic_knowledge/blade_upgrade/moon/do_melee_effects(mob/living/source, mob/living/target, obj/item/melee/sickly_blade/blade) if(source == target) @@ -164,6 +177,8 @@ spell_to_add = /datum/action/cooldown/spell/aoe/moon_ringleader cost = 1 route = PATH_MOON + depth = 10 + research_tree_icon_frame = 5 /datum/heretic_knowledge/ultimate/moon_final name = "The Last Act" @@ -176,6 +191,7 @@ for where the Ringleader had started the parade, I shall continue it unto the suns demise \ WITNESS MY ASCENSION, THE MOON SMILES ONCE MORE AND FOREVER MORE IT SHALL!" route = PATH_MOON + ascension_achievement = /datum/award/achievement/misc/moon_ascension /datum/heretic_knowledge/ultimate/moon_final/is_valid_sacrifice(mob/living/sacrifice) @@ -197,7 +213,6 @@ color_override = "pink", ) - user.client?.give_award(/datum/award/achievement/misc/moon_ascension, user) ADD_TRAIT(user, TRAIT_MADNESS_IMMUNE, REF(src)) heretic_datum.add_team_hud(user, /datum/antagonist/lunatic) diff --git a/code/modules/antagonists/heretic/knowledge/rust_lore.dm b/code/modules/antagonists/heretic/knowledge/rust_lore.dm index fe553c8b8c7..edb64799b5c 100644 --- a/code/modules/antagonists/heretic/knowledge/rust_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/rust_lore.dm @@ -42,6 +42,8 @@ ) result_atoms = list(/obj/item/melee/sickly_blade/rust) route = PATH_RUST + research_tree_icon_path = 'icons/obj/weapons/khopesh.dmi' + research_tree_icon_state = "rust_blade" /datum/heretic_knowledge/rust_fist name = "Grasp of Rust" @@ -52,6 +54,9 @@ next_knowledge = list(/datum/heretic_knowledge/rust_regen) cost = 1 route = PATH_RUST + depth = 3 + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "grasp_rust" /datum/heretic_knowledge/rust_fist/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) @@ -93,6 +98,9 @@ ) cost = 1 route = PATH_RUST + research_tree_icon_path = 'icons/effects/eldritch.dmi' + research_tree_icon_state = "cloud_swirl" + depth = 4 /datum/heretic_knowledge/rust_regen/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) @@ -174,6 +182,7 @@ spell_to_add = /datum/action/cooldown/spell/pointed/rust_construction cost = 1 route = PATH_RUST + depth = 7 /datum/heretic_knowledge/spell/area_conversion name = "Aggressive Spread" @@ -191,6 +200,8 @@ spell_to_add = /datum/action/cooldown/spell/aoe/rust_conversion cost = 1 route = PATH_RUST + depth = 8 + research_tree_icon_frame = 5 /datum/heretic_knowledge/spell/area_conversion/on_gain(mob/user, datum/antagonist/heretic/our_heretic) . = ..() @@ -203,6 +214,8 @@ The heavy rust weights it down. You stare deeply into it. The Rusted Hills call for you, now." next_knowledge = list(/datum/heretic_knowledge/spell/entropic_plume) route = PATH_RUST + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "blade_upgrade_rust" /datum/heretic_knowledge/blade_upgrade/rust/on_gain(mob/user, datum/antagonist/heretic/our_heretic) . = ..() @@ -227,6 +240,7 @@ spell_to_add = /datum/action/cooldown/spell/cone/staggered/entropic_plume cost = 1 route = PATH_RUST + depth = 10 /datum/heretic_knowledge/spell/entropic_plume/on_gain(mob/user) . = ..() @@ -243,6 +257,7 @@ gain_text = "Champion of rust. Corruptor of steel. Fear the dark, for the RUSTBRINGER has come! \ The Blacksmith forges ahead! Rusted Hills, CALL MY NAME! WITNESS MY ASCENSION!" route = PATH_RUST + ascension_achievement = /datum/award/achievement/misc/rust_ascension /// If TRUE, then immunities are currently active. var/immunities_active = FALSE /// A typepath to an area that we must finish the ritual in. diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm index d45b1039b26..c12e1fb4356 100644 --- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm +++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm @@ -16,6 +16,9 @@ cost = 0 priority = MAX_KNOWLEDGE_PRIORITY // Should be at the top route = PATH_START + research_tree_icon_path = 'icons/effects/eldritch.dmi' + research_tree_icon_state = "eye_close" + research_tree_icon_frame = 1 /// How many targets do we generate? var/num_targets_to_generate = 5 /// Whether we've generated a heretic sacrifice z-level yet, from any heretic. diff --git a/code/modules/antagonists/heretic/knowledge/side_ash_moon.dm b/code/modules/antagonists/heretic/knowledge/side_ash_moon.dm index f933bbfda1d..758ee0548d5 100644 --- a/code/modules/antagonists/heretic/knowledge/side_ash_moon.dm +++ b/code/modules/antagonists/heretic/knowledge/side_ash_moon.dm @@ -16,6 +16,9 @@ result_atoms = list(/obj/item/clothing/neck/eldritch_amulet) cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/obj/antags/eldritch.dmi' + research_tree_icon_state = "eye_medalion" + depth = 4 /datum/heretic_knowledge/curse/paralysis name = "Curse of Paralysis" @@ -37,6 +40,9 @@ curse_color = "#f19a9a" cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "curse_paralysis" + depth = 8 /datum/heretic_knowledge/curse/paralysis/curse(mob/living/carbon/human/chosen_mob, boosted = FALSE) if(chosen_mob.usable_legs <= 0) // What're you gonna do, curse someone who already can't walk? @@ -75,6 +81,7 @@ cost = 1 route = PATH_SIDE poll_ignore_define = POLL_IGNORE_ASH_SPIRIT + depth = 10 /datum/heretic_knowledge/summon/ashy/cleanup_atoms(list/selected_atoms) var/obj/item/bodypart/head/ritual_head = locate() in selected_atoms diff --git a/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm b/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm index e8c14d16abe..386f58833fe 100644 --- a/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm +++ b/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm @@ -16,6 +16,10 @@ result_atoms = list(/obj/item/clothing/suit/hooded/cultrobes/eldritch) cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/obj/clothing/suits/armor.dmi' + research_tree_icon_state = "eldritch_armor" + research_tree_icon_frame = 12 + depth = 4 /datum/heretic_knowledge/crucible name = "Mawed Crucible" @@ -34,6 +38,9 @@ result_atoms = list(/obj/structure/destructible/eldritch_crucible) cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/obj/antags/eldritch.dmi' + research_tree_icon_state = "crucible" + depth = 8 /datum/heretic_knowledge/rifle name = "Lionhunter's Rifle" @@ -59,9 +66,12 @@ result_atoms = list(/obj/item/gun/ballistic/rifle/lionhunter) cost = 1 route = PATH_SIDE + depth = 8 + research_tree_icon_path = 'icons/obj/weapons/guns/ballistic.dmi' + research_tree_icon_state = "goldrevolver" /datum/heretic_knowledge/rifle_ammo - name = "Lionhunter Rifle Ammunition (free)" + name = "Lionhunter Rifle Ammunition" desc = "Allows you to transmute 3 ballistic ammo casings (used or unused) of any caliber, \ including shotgun shot, with any animal hide to create an extra clip of ammunition for the Lionhunter Rifle." gain_text = "The weapon came with three rough iron balls, intended to be used as ammunition. \ @@ -74,6 +84,9 @@ result_atoms = list(/obj/item/ammo_box/strilka310/lionhunter) cost = 0 route = PATH_SIDE + research_tree_icon_path = 'icons/obj/weapons/guns/ammo.dmi' + research_tree_icon_state = "310_strip" + depth = 8 /// A list of calibers that the ritual will deny. Only ballistic calibers are allowed. var/static/list/caliber_blacklist = list( CALIBER_LASER, @@ -107,3 +120,4 @@ spell_to_add = /datum/action/cooldown/mob_cooldown/charge/rust cost = 1 route = PATH_SIDE + depth = 10 diff --git a/code/modules/antagonists/heretic/knowledge/side_cosmos_ash.dm b/code/modules/antagonists/heretic/knowledge/side_cosmos_ash.dm index 14a003ce11c..1a08236aee6 100644 --- a/code/modules/antagonists/heretic/knowledge/side_cosmos_ash.dm +++ b/code/modules/antagonists/heretic/knowledge/side_cosmos_ash.dm @@ -19,6 +19,8 @@ cost = 1 route = PATH_SIDE poll_ignore_define = POLL_IGNORE_FIRE_SHARK + depth = 4 + research_tree_icon_dir = EAST /datum/heretic_knowledge/spell/space_phase name = "Space Phase" @@ -32,6 +34,8 @@ spell_to_add = /datum/action/cooldown/spell/jaunt/space_crawl cost = 1 route = PATH_SIDE + depth = 8 + research_tree_icon_frame = 6 /datum/heretic_knowledge/eldritch_coin name = "Eldritch Coin" @@ -51,3 +55,6 @@ result_atoms = list(/obj/item/coin/eldritch) cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/obj/economy.dmi' + research_tree_icon_state = "coin_heretic" + depth = 10 diff --git a/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm b/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm index 4a315575d61..a958ab3f272 100644 --- a/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm +++ b/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm @@ -19,6 +19,9 @@ result_atoms = list(/obj/item/clothing/suit/hooded/cultrobes/void) cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/obj/clothing/suits/armor.dmi' + research_tree_icon_state = "void_cloak" + depth = 4 /datum/heretic_knowledge/spell/blood_siphon name = "Blood Siphon" @@ -32,6 +35,7 @@ spell_to_add = /datum/action/cooldown/spell/pointed/blood_siphon cost = 1 route = PATH_SIDE + depth = 8 /datum/heretic_knowledge/spell/cleave name = "Blood Cleave" @@ -46,3 +50,4 @@ spell_to_add = /datum/action/cooldown/spell/pointed/cleave cost = 1 route = PATH_SIDE + depth = 10 diff --git a/code/modules/antagonists/heretic/knowledge/side_lock_flesh.dm b/code/modules/antagonists/heretic/knowledge/side_lock_flesh.dm index 74013f2b0bd..706b83abac7 100644 --- a/code/modules/antagonists/heretic/knowledge/side_lock_flesh.dm +++ b/code/modules/antagonists/heretic/knowledge/side_lock_flesh.dm @@ -12,6 +12,7 @@ spell_to_add = /datum/action/cooldown/spell/aoe/wave_of_desperation cost = 1 route = PATH_SIDE + depth = 8 /datum/heretic_knowledge/spell/apetra_vulnera name = "Apetra Vulnera" @@ -26,3 +27,4 @@ spell_to_add = /datum/action/cooldown/spell/pointed/apetra_vulnera cost = 1 route = PATH_SIDE + depth = 10 diff --git a/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm b/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm index 5ab50a8b84f..3d3d0b11686 100644 --- a/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm +++ b/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm @@ -13,6 +13,7 @@ spell_to_add = /datum/action/cooldown/spell/pointed/mind_gate cost = 1 route = PATH_SIDE + depth = 4 /datum/heretic_knowledge/unfathomable_curio name = "Unfathomable Curio" @@ -33,6 +34,9 @@ result_atoms = list(/obj/item/storage/belt/unfathomable_curio) cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/obj/clothing/belts.dmi' + research_tree_icon_state = "unfathomable_curio" + depth = 8 /datum/heretic_knowledge/painting name = "Unsealed Arts" @@ -54,6 +58,9 @@ result_atoms = list(/obj/item/canvas) cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/obj/signs.dmi' + research_tree_icon_state = "eldritch_painting_weeping" + depth = 8 /datum/heretic_knowledge/painting/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) if(locate(/obj/item/organ/internal/eyes) in atoms) diff --git a/code/modules/antagonists/heretic/knowledge/side_rust_cosmos.dm b/code/modules/antagonists/heretic/knowledge/side_rust_cosmos.dm index 56999243b5d..11918c66a29 100644 --- a/code/modules/antagonists/heretic/knowledge/side_rust_cosmos.dm +++ b/code/modules/antagonists/heretic/knowledge/side_rust_cosmos.dm @@ -17,6 +17,9 @@ result_atoms = list(/obj/item/reagent_containers/cup/beaker/eldritch) cost = 1 route = PATH_SIDE + depth = 4 + research_tree_icon_path = 'icons/obj/antags/eldritch.dmi' + research_tree_icon_state = "eldritch_flask" /datum/heretic_knowledge/entropy_pulse name = "Pulse of Entropy" @@ -28,6 +31,10 @@ ) cost = 0 route = PATH_SIDE + research_tree_icon_path = 'icons/mob/actions/actions_ecult.dmi' + research_tree_icon_state = "corrode" + research_tree_icon_frame = 10 + depth = 4 var/rusting_range = 8 /datum/heretic_knowledge/entropy_pulse/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) @@ -60,6 +67,9 @@ curse_color = "#c1ffc9" cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "curse_corrosion" + depth = 8 /datum/heretic_knowledge/curse/corrosion/curse(mob/living/carbon/human/chosen_mob, boosted = FALSE) to_chat(chosen_mob, span_danger("You feel very ill...")) @@ -92,6 +102,7 @@ cost = 1 route = PATH_SIDE poll_ignore_define = POLL_IGNORE_RUST_SPIRIT + depth = 8 /datum/heretic_knowledge/summon/rusty/cleanup_atoms(list/selected_atoms) var/obj/item/bodypart/head/ritual_head = locate() in selected_atoms diff --git a/code/modules/antagonists/heretic/knowledge/side_void_blade.dm b/code/modules/antagonists/heretic/knowledge/side_void_blade.dm index e044eee8619..56945262e3c 100644 --- a/code/modules/antagonists/heretic/knowledge/side_void_blade.dm +++ b/code/modules/antagonists/heretic/knowledge/side_void_blade.dm @@ -23,6 +23,9 @@ limit = 1 cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "ghoul_shattered" + depth = 4 /datum/heretic_knowledge/limited_amount/risen_corpse/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) . = ..() @@ -139,6 +142,9 @@ result_atoms = list(/obj/item/melee/rune_carver) cost = 1 route = PATH_SIDE + depth = 8 + research_tree_icon_path = 'icons/obj/antags/eldritch.dmi' + research_tree_icon_state = "rune_carver" /datum/heretic_knowledge/summon/maid_in_mirror name = "Maid in the Mirror" @@ -162,3 +168,4 @@ route = PATH_SIDE mob_to_summon = /mob/living/basic/heretic_summon/maid_in_the_mirror poll_ignore_define = POLL_IGNORE_MAID_IN_MIRROR + depth = 10 diff --git a/code/modules/antagonists/heretic/knowledge/starting_lore.dm b/code/modules/antagonists/heretic/knowledge/starting_lore.dm index f1b5f7f55ea..799027a4c4e 100644 --- a/code/modules/antagonists/heretic/knowledge/starting_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/starting_lore.dm @@ -48,6 +48,9 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) cost = 0 priority = MAX_KNOWLEDGE_PRIORITY - 1 // Knowing how to remake your heart is important route = PATH_START + research_tree_icon_path = 'icons/obj/antags/eldritch.dmi' + research_tree_icon_state = "living_heart" + research_tree_icon_frame = 1 /// The typepath of the organ type required for our heart. var/required_organ_type = /obj/item/organ/internal/heart @@ -204,6 +207,8 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) cost = 0 priority = MAX_KNOWLEDGE_PRIORITY - 2 // Not as important as making a heart or sacrificing, but important enough. route = PATH_START + research_tree_icon_path = 'icons/obj/clothing/neck.dmi' + research_tree_icon_state = "eldritch_necklace" /datum/heretic_knowledge/spell/cloak_of_shadows name = "Cloak of Shadow" @@ -238,6 +243,8 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) route = PATH_START priority = MAX_KNOWLEDGE_PRIORITY - 3 // Least priority out of the starting knowledges, as it's an optional boon. var/static/list/non_mob_bindings = typecacheof(list(/obj/item/stack/sheet/leather, /obj/item/stack/sheet/animalhide)) + research_tree_icon_path = 'icons/obj/antags/eldritch.dmi' + research_tree_icon_state = "book" /datum/heretic_knowledge/codex_cicatrix/parse_required_item(atom/item_path, number_of_things) if(item_path == /obj/item/pen) @@ -293,3 +300,40 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) body.do_jitter_animation() body.visible_message(span_danger("An awful ripping sound is heard as [ripped_thing]'s [exterior_text] is ripped straight out, wrapping around [le_book || "the book"], turning into an eldritch shade of blue!")) return ..() +<<<<<<< HEAD +======= + +/datum/heretic_knowledge/feast_of_owls + name = "Feast of Owls" + desc = "Allows you to undergo a ritual that gives you 5 knowledge points but locks you out of ascension. This can only be done once and cannot be reverted." + gain_text = "Under the soft glow of unreason there is a beast that stalks the night. I shall bring it forth and let it enter my presence. It will feast upon my amibitions and leave knowledge in its wake." + route = PATH_START + required_atoms = list() + research_tree_icon_path = 'icons/mob/actions/actions_animal.dmi' + research_tree_icon_state = "god_transmit" + +/datum/heretic_knowledge/feast_of_owls/can_be_invoked(datum/antagonist/heretic/invoker) + return !invoker.feast_of_owls + +/datum/heretic_knowledge/feast_of_owls/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) + //amount of research points granted + var/reward = 5 + var/alert = tgui_alert(user,"Do you really want to forsake your ascension? This action cannot be reverted.", "Feast of Owls", list("Yes I'm sure", "No"), 30 SECONDS) + if( alert != "Yes I'm sure") + return FALSE + user.set_temp_blindness(reward SECONDS) + user.AdjustParalyzed(reward SECONDS) + user.playsound_local(get_turf(user), 'sound/ambience/antag/heretic/heretic_gain_intense.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) + var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + for(var/i in 1 to reward) + user.emote("scream") + playsound(loc, 'sound/items/eatfood.ogg', 100, TRUE) + heretic_datum.knowledge_points++ + to_chat(user, span_danger("You feel something invisible tearing away at your very essence!")) + user.do_jitter_animation() + sleep(1 SECONDS) + heretic_datum.feast_of_owls = TRUE + to_chat(user, span_danger(span_big("Your ambition is ravaged, but something powerful remains in its wake..."))) + var/drain_message = pick(strings(HERETIC_INFLUENCE_FILE, "drain_message")) + to_chat(user, span_hypnophrase(span_big("[drain_message]"))) +>>>>>>> cb28aef24a5... [MIRROR] Better UI for heretic research [MDB IGNORE] (#3413) diff --git a/code/modules/antagonists/heretic/knowledge/void_lore.dm b/code/modules/antagonists/heretic/knowledge/void_lore.dm index ec7c9d6942a..0f8a641884b 100644 --- a/code/modules/antagonists/heretic/knowledge/void_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/void_lore.dm @@ -37,6 +37,8 @@ required_atoms = list(/obj/item/knife = 1) result_atoms = list(/obj/item/melee/sickly_blade/void) route = PATH_VOID + research_tree_icon_path = 'icons/obj/weapons/khopesh.dmi' + research_tree_icon_state = "void_blade" /datum/heretic_knowledge/limited_amount/starting/base_void/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) if(!isopenturf(loc)) @@ -58,6 +60,9 @@ next_knowledge = list(/datum/heretic_knowledge/cold_snap) cost = 1 route = PATH_VOID + depth = 3 + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "grasp_void" /datum/heretic_knowledge/void_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) @@ -88,6 +93,9 @@ ) cost = 1 route = PATH_VOID + research_tree_icon_path = 'icons/effects/effects.dmi' + research_tree_icon_state = "the_freezer" + depth = 4 /datum/heretic_knowledge/cold_snap/on_gain(mob/user, datum/antagonist/heretic/our_heretic) user.add_traits(list(TRAIT_NOBREATH, TRAIT_RESISTCOLD), type) @@ -119,6 +127,7 @@ spell_to_add = /datum/action/cooldown/spell/cone/staggered/cone_of_cold/void cost = 1 route = PATH_VOID + depth = 7 /datum/heretic_knowledge/spell/void_phase name = "Void Phase" @@ -135,6 +144,8 @@ spell_to_add = /datum/action/cooldown/spell/pointed/void_phase cost = 1 route = PATH_VOID + depth = 8 + research_tree_icon_frame = 7 /datum/heretic_knowledge/blade_upgrade/void name = "Seeking Blade" @@ -142,6 +153,8 @@ gain_text = "Fleeting memories, fleeting feet. I mark my way with frozen blood upon the snow. Covered and forgotten." next_knowledge = list(/datum/heretic_knowledge/spell/void_pull) route = PATH_VOID + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "blade_upgrade_void" /datum/heretic_knowledge/blade_upgrade/void/do_ranged_effects(mob/living/user, mob/living/target, obj/item/melee/sickly_blade/blade) if(!target.has_status_effect(/datum/status_effect/eldritch)) @@ -168,6 +181,8 @@ spell_to_add = /datum/action/cooldown/spell/aoe/void_pull cost = 1 route = PATH_VOID + depth = 10 + research_tree_icon_frame = 6 /datum/heretic_knowledge/ultimate/void_final name = "Waltz at the End of Time" @@ -180,6 +195,7 @@ The Aristocrat stands before me, beckoning. We will play a waltz to the whispers of dying reality, \ as the world is destroyed before our eyes. The void will return all to nothing, WITNESS MY ASCENSION!" route = PATH_VOID + ascension_achievement = /datum/award/achievement/misc/void_ascension ///soundloop for the void theme var/datum/looping_sound/void_loop/sound_loop ///Reference to the ongoing voidstrom that surrounds the heretic @@ -205,7 +221,6 @@ sound = 'sound/ambience/antag/heretic/ascend_void.ogg', color_override = "pink", ) - user.client?.give_award(/datum/award/achievement/misc/void_ascension, user) ADD_TRAIT(user, TRAIT_RESISTLOWPRESSURE, MAGIC_TRAIT) // Let's get this show on the road! diff --git a/icons/obj/antags/eldritch.dmi b/icons/obj/antags/eldritch.dmi index 7f6af6bfe2e..664311e5c7c 100644 Binary files a/icons/obj/antags/eldritch.dmi and b/icons/obj/antags/eldritch.dmi differ diff --git a/icons/ui_icons/antags/heretic/knowledge.dmi b/icons/ui_icons/antags/heretic/knowledge.dmi new file mode 100644 index 00000000000..d24de1a5f0e Binary files /dev/null and b/icons/ui_icons/antags/heretic/knowledge.dmi differ diff --git a/tgui/packages/tgui/components/DmIcon.tsx b/tgui/packages/tgui/components/DmIcon.tsx index fb6816576ac..bb785fc6e39 100644 --- a/tgui/packages/tgui/components/DmIcon.tsx +++ b/tgui/packages/tgui/components/DmIcon.tsx @@ -29,7 +29,7 @@ type Props = { /** Frame number. Default is 1 */ frame: number; /** Movement state. Default is false */ - movement: boolean; + movement: any; }> & BoxProps; @@ -49,7 +49,7 @@ export function DmIcon(props: Props) { const [iconRef, setIconRef] = useState(''); - const query = `${iconRef}?state=${icon_state}&dir=${direction}&movement=${movement}&frame=${frame}`; + const query = `${iconRef}?state=${icon_state}&dir=${direction}&movement=${!!movement}&frame=${frame}`; useEffect(() => { async function fetchRefMap() { diff --git a/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx b/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx index 4992b57a658..cc315183000 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx @@ -2,8 +2,7 @@ import { BooleanLike } from 'common/react'; import { useState } from 'react'; import { useBackend } from '../backend'; -import { BlockQuote, Box, Button, Section, Stack, Tabs } from '../components'; -import { CssColor } from '../constants'; +import { Box, Button, DmIcon, Flex, Section, Stack, Tabs } from '../components'; import { Window } from '../layouts'; import { Rules } from './AntagInfoRules'; // NOVA EDIT ADDITION import { @@ -36,20 +35,33 @@ const hereticYellow = { color: 'yellow', }; +type IconParams = { + icon: string; + state: string; + frame: number; + dir: number; + moving: BooleanLike; +}; + type Knowledge = { path: string; + icon_params: IconParams; name: string; desc: string; gainFlavor: string; cost: number; - disabled: boolean; - hereticPath: string; - color: CssColor; + bgr: string; + disabled: BooleanLike; + finished: BooleanLike; + ascension: BooleanLike; }; type KnowledgeInfo = { - learnableKnowledge: Knowledge[]; - learnedKnowledge: Knowledge[]; + knowledge_tiers: KnowledgeTier[]; +}; + +type KnowledgeTier = { + nodes: Knowledge[]; }; type Info = { @@ -227,63 +239,96 @@ const InformationSection = (props) => { ); }; -const ResearchedKnowledge = (props) => { - const { data } = useBackend(); - const { learnedKnowledge } = data; +const KnowledgeTree = (props) => { + const { data, act } = useBackend(); + const { knowledge_tiers } = data; return ( - -
- - {(!learnedKnowledge.length && 'None!') || - learnedKnowledge.map((learned) => ( - - + {!!node.ascension && ( + + DUSK + + )} + + ))} + +
))} -
-
-
- ); -}; - -const KnowledgeShop = (props) => { - const { data, act } = useBackend(); - const { learnableKnowledge } = data; - - return ( - -
- {(!learnableKnowledge.length && 'None!') || - learnableKnowledge.map((toLearn) => ( - -
-
+ + ); }; @@ -292,23 +337,16 @@ const ResearchInfo = (props) => { const { charges } = data; return ( - + + + You have {charges || 0}  + + knowledge point{charges !== 1 ? 's' : ''} + {' '} + to spend. + - - - You have {charges || 0}  - - knowledge point{charges !== 1 ? 's' : ''} - {' '} - to spend. - - - - - - - - + );