From 8f9757e0a33088096152d862f84430a1581fd8e4 Mon Sep 17 00:00:00 2001 From: Sypsoti Date: Fri, 4 Mar 2022 18:56:14 -0600 Subject: [PATCH 1/3] begins to add evolution tree window --- code/__defines/gamemode.dm | 13 +- .../managed_browsers/changelingevolution.dm | 63 ++++++++++ .../changeling/changeling_evolutiontree.dm | 113 ++++++++++++++++++ .../gamemodes/changeling/changeling_powers.dm | 1 + .../gamemodes/changeling/modularchangling.dm | 18 --- .../gamemodes/changeling/powers/absorb.dm | 1 + .../gamemodes/changeling/powers/armblade.dm | 2 + .../game/gamemodes/changeling/powers/armor.dm | 2 + .../changeling/powers/augmented_eyesight.dm | 1 + .../changeling/powers/bioelectrogenesis.dm | 1 + .../changeling/powers/blind_sting.dm | 1 + .../changeling/powers/boost_range.dm | 1 + .../gamemodes/changeling/powers/cryo_sting.dm | 1 + .../gamemodes/changeling/powers/darkvision.dm | 1 + .../gamemodes/changeling/powers/deaf_sting.dm | 1 + .../changeling/powers/death_sting.dm | 1 + .../changeling/powers/delayed_toxin_sting.dm | 1 + .../changeling/powers/digital_camo.dm | 1 + .../changeling/powers/electric_lockpick.dm | 1 + .../gamemodes/changeling/powers/endoarmor.dm | 1 + .../changeling/powers/enfeebling_string.dm | 3 +- .../changeling/powers/engorged_glands.dm | 1 + .../gamemodes/changeling/powers/enrage.dm | 1 + .../changeling/powers/epinephrine_overdose.dm | 1 + .../changeling/powers/escape_restraints.dm | 1 + .../changeling/powers/extract_dna_sting.dm | 1 + .../changeling/powers/fabricate_clothing.dm | 1 + .../gamemodes/changeling/powers/fake_death.dm | 1 + .../gamemodes/changeling/powers/fleshmend.dm | 1 + .../gamemodes/changeling/powers/hivemind.dm | 2 + .../changeling/powers/lesser_form.dm | 2 + .../gamemodes/changeling/powers/lsd_sting.dm | 2 + .../changeling/powers/mimic_voice.dm | 1 + .../gamemodes/changeling/powers/panacea.dm | 1 + .../gamemodes/changeling/powers/para_sting.dm | 2 + .../changeling/powers/rapid_regen.dm | 1 + .../powers/recursive_enhancement.dm | 3 + .../changeling/powers/self_respiration.dm | 1 + .../gamemodes/changeling/powers/shriek.dm | 2 + .../changeling/powers/silence_sting.dm | 1 + .../gamemodes/changeling/powers/transform.dm | 1 + .../changeling/powers/transform_sting.dm | 2 + .../changeling/powers/unfat_sting.dm | 2 + .../changeling/powers/visible_camouflage.dm | 1 + polaris.dme | 4 +- 45 files changed, 243 insertions(+), 21 deletions(-) create mode 100644 code/datums/managed_browsers/changelingevolution.dm create mode 100644 code/game/gamemodes/changeling/changeling_evolutiontree.dm diff --git a/code/__defines/gamemode.dm b/code/__defines/gamemode.dm index 5c4020cca9..d8f2d26263 100644 --- a/code/__defines/gamemode.dm +++ b/code/__defines/gamemode.dm @@ -162,4 +162,15 @@ var/list/be_special_flags = list( #define ASPECT_EMP "emp" //Unused now. #define ASPECT_UNSTABLE "unstable" //Heavily RNG-based, causes instability to the victim. #define ASPECT_CHROMATIC "chromatic" //Used to combine with other spells. -#define ASPECT_UNHOLY "unholy" //Involves the dead, blood, and most things against divine beings. \ No newline at end of file +#define ASPECT_UNHOLY "unholy" //Involves the dead, blood, and most things against divine beings. + +/* +Changeling Defines +*/ +#define CHANGELING_POWER_INHERENT "Inherent" +#define CHANGELING_POWER_ARMOR "Armor" +#define CHANGELING_POWER_STINGS "Stings" +#define CHANGELING_POWER_SHRIEKS "Shrieks" +#define CHANGELING_POWER_HEALTH "Health" +#define CHANGELING_POWER_ENHANCEMENTS "Enhancements" +#define CHANGELING_POWER_WEAPONS "Weapons" \ No newline at end of file diff --git a/code/datums/managed_browsers/changelingevolution.dm b/code/datums/managed_browsers/changelingevolution.dm new file mode 100644 index 0000000000..e480c0ba08 --- /dev/null +++ b/code/datums/managed_browsers/changelingevolution.dm @@ -0,0 +1,63 @@ +/client + var/datum/managed_browser/changelingevolution/changelingevolution = null + +/datum/managed_browser/changelingevolution + base_browser_id = "evolution_tree" + title = "Evolution Tree" + size_x = 440 + size_y = 600 + var/textbody = null + +/datum/managed_browser/changelingevolution/New(client/new_client) + if(!new_client.mob || !new_client.mob.mind || !new_client.mob.mind.changeling) + message_admins("[new_client] tried to access changeling evolutions while not changeling.") + qdel(src) + + ..() + +/datum/managed_browser/changelingevolution/Destroy() + if(my_client) + my_client.changelingevolution = null + return ..() + +/datum/managed_browser/changelingevolution/get_html() + var/list/dat = list("") + var/geneticpoints_current = my_client.mob.mind.changeling.geneticpoints + var/geneticpoints_max = my_client.mob.mind.changeling.max_geneticpoints + + dat += "
Genetic Points Available: [geneticpoints_current] / [geneticpoints_max]
" + dat += "Obtain more by feeding on your own kind.

" + dat += "Inherent
" + if(textbody) + dat += "" + dat += "[textbody]" + dat += "
" + dat += "" + + return dat.Join() + +/datum/managed_browser/changelingevolution/Topic(href, href_list[]) + if(!my_client) + return FALSE + + if(href_list["close"]) + return + + if(href_list["inherent"]) + var/list/ability_list = list() + var/info = "These powers are inherent to your kind and will always be accessible, provided you have the chemicals to use them." + for(var/datum/power/changeling/P in powerinstances) + if(P.power_category == CHANGELING_POWER_INHERENT) + ability_list[++ability_list.len] = P + create_textbody(ability_list, "Inherent", info) + + +/datum/managed_browser/changelingevolution/proc/create_textbody(ability_list, cat, catinfo) + textbody = "
[cat] Skills
" + textbody += "[catinfo]


" + for(var/A in ability_list) + var/datum/power/changeling/powerdata = A + textbody += "[initial(powerdata.name)]
" + textbody += "[initial(powerdata.desc)]

" + textbody += "[powerdata.helptext]" + display() diff --git a/code/game/gamemodes/changeling/changeling_evolutiontree.dm b/code/game/gamemodes/changeling/changeling_evolutiontree.dm new file mode 100644 index 0000000000..a867f4905d --- /dev/null +++ b/code/game/gamemodes/changeling/changeling_evolutiontree.dm @@ -0,0 +1,113 @@ +var/list/powers = typesof(/datum/power/changeling) - /datum/power/changeling //needed for the badmin verb for now +var/list/datum/power/changeling/powerinstances = list() + +/datum/power //Could be used by other antags too + var/name = "Power" + var/desc = "Placeholder" + var/helptext = "" + var/enhancedtext = "" + var/isVerb = 1 // Is it an active power, or passive? + var/verbpath // Path to a verb that contains the effects. + var/make_hud_button = 1 // Is this ability significant enough to dedicate screen space for a HUD button? + var/ability_icon_state = null // icon_state for icons for the ability HUD. Must be in screen_spells.dmi. + +/datum/power/changeling + var/allowduringlesserform = 0 + var/genomecost = 500000 // Cost for the changling to evolve this power. + var/power_category = null // _defines/gamemode.dm + +/datum/changeling/proc/EvolutionTree() /// Data is in changelingevolution.dm under managed_browsers + set name = "-Evolution Tree-" + set category = "Changeling" + set desc = "Adapt yourself carefully." + + if(!usr || !usr.mind || !usr.mind.changeling) return + + if(usr.client.changelingevolution) + usr.client.changelingevolution.display() + else + usr.client.changelingevolution = new(usr.client) + + +/* +/datum/changeling/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) + var/data[0] + data["geneticpoints"] = list("current" = user.mind.changeling.geneticpoints, "max" = user.mind.changeling.max_geneticpoints) + data["categories"] = available_categories + var/powerselect[0] + var/abilities[0] + var/purchased[0] + + for(var/P in subtypesof(/datum/power/changeling)) + var/datum/power/changeling/powerdata = P + abilities[++abilities.len] = list("name" = initial(powerdata.name), "description" = initial(powerdata.desc), \ + "helptext" = initial(powerdata.helptext), "cost" = initial(powerdata.genomecost), "category" = initial(powerdata.power_category), \ + "path" = "[powerdata]") + + for(var/B in purchased_powers) + var/datum/power/changeling/powerbought = B + purchased[++purchased.len] = list("name" = initial(powerbought.name)) + + if(user.mind.changeling.power_select) /// For currently viewed power. + var/datum/power/changeling/S = user.mind.changeling.power_select + powerselect[++powerselect.len] = list("name" = initial(S.name), "description" = initial(S.desc), "helptext" = initial(S.helptext), "cost" = initial(S.genomecost)) + if(powerselect["name"] in purchased) + powerselect += list("purchased" = 1) + + /* + var/i = 1 + for(var/C in available_categories) + categories[++categories.len] = list("name" = C, "page" = i) + i++ + */ + data["abilities"] = abilities + data["menu"] = menu_select + data["powerselect"] = powerselect + + ui = SSnanoui.try_update_ui(user, user, ui_key, ui, data, force_open) + + if(!ui) + ui = new(user, user, ui_key, "changeling.tmpl", "Evolution Tree", 475, 700, state) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + + +/* +/datum/changeling/Topic(href, href_list) + ..() + if(!ismob(usr)) + return +///OUTDATED, DELETE LATER + if(href_list["P"]) + var/datum/mind/M = usr.mind + if(!istype(M)) + return + purchasePower(M, href_list["P"]) + call(/datum/changeling/proc/EvolutionMenu)() +/// END OUTDATED + if(href_list["setcategory"]) + usr.mind.changeling.menu_select = href_list["setcategory"] + + if(href_list["currentselection"]) + var/nowviewing = href_list["currentselection"] + + if(nowviewing != 0) + usr.mind.changeling.power_select = text2path(nowviewing) + else + usr.mind.changeling.power_select = null + + if(href_list["purchasePower"]) + var/datum/power/changeling/boughtPower = href_list["purchasePower"] + log_debug("Power purchased: [href_list["purchasePower"]]!") + for (var/datum/power/changeling/P in powerinstances) + if(P.name == boughtPower) + boughtPower = P + break + else + log_debug("Error, purchase power = [boughtPower]") + usr.mind.changeling.purchased_powers += boughtPower + + usr.mind.changeling.ui_interact(usr) /// update_uis just would not work under any circumstance. +*/ +*/ \ No newline at end of file diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 64b469706f..47d5ab7af9 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -65,6 +65,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E if(!mind) return if(!mind.changeling) mind.changeling = new /datum/changeling(gender) + verbs.Add(/datum/changeling/proc/EvolutionTree) verbs.Add(/datum/changeling/proc/EvolutionMenu) verbs.Add(/mob/proc/changeling_respec) add_language("Changeling") diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm index a010028270..1200460116 100644 --- a/code/game/gamemodes/changeling/modularchangling.dm +++ b/code/game/gamemodes/changeling/modularchangling.dm @@ -2,24 +2,6 @@ //Ling power's evolution menu entry datum should be contained alongside the mob proc for the actual power, in their own file. -var/list/powers = typesof(/datum/power/changeling) - /datum/power/changeling //needed for the badmin verb for now -var/list/datum/power/changeling/powerinstances = list() - -/datum/power //Could be used by other antags too - var/name = "Power" - var/desc = "Placeholder" - var/helptext = "" - var/enhancedtext = "" - var/isVerb = 1 // Is it an active power, or passive? - var/verbpath // Path to a verb that contains the effects. - var/make_hud_button = 1 // Is this ability significant enough to dedicate screen space for a HUD button? - var/ability_icon_state = null // icon_state for icons for the ability HUD. Must be in screen_spells.dmi. - -/datum/power/changeling - var/allowduringlesserform = 0 - var/genomecost = 500000 // Cost for the changling to evolve this power. - - // Modularchangling, totally stolen from the new player panel. YAYY /datum/changeling/proc/EvolutionMenu()//The new one set name = "-Evolution Menu-" diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm index e532396176..ce1cf816af 100644 --- a/code/game/gamemodes/changeling/powers/absorb.dm +++ b/code/game/gamemodes/changeling/powers/absorb.dm @@ -3,6 +3,7 @@ desc = "Permits us to syphon the DNA from a human. They become one with us, and we become stronger if they were of our kind." ability_icon_state = "ling_absorb_dna" genomecost = 0 + power_category = CHANGELING_POWER_INHERENT verbpath = /mob/living/proc/changeling_absorb_dna //Absorbs the victim's DNA. Requires a strong grip on the victim. diff --git a/code/game/gamemodes/changeling/powers/armblade.dm b/code/game/gamemodes/changeling/powers/armblade.dm index 98460d3c9e..ab13ace1d3 100644 --- a/code/game/gamemodes/changeling/powers/armblade.dm +++ b/code/game/gamemodes/changeling/powers/armblade.dm @@ -5,6 +5,7 @@ enhancedtext = "The blade will have armor peneratration." ability_icon_state = "ling_armblade" genomecost = 2 + power_category = CHANGELING_POWER_WEAPONS verbpath = /mob/proc/changeling_arm_blade //Grows a scary, and powerful arm blade. @@ -30,6 +31,7 @@ enhancedtext = "The claw will have armor peneratration." ability_icon_state = "ling_claw" genomecost = 1 + power_category = CHANGELING_POWER_WEAPONS verbpath = /mob/proc/changeling_claw //Grows a scary, and powerful claw. diff --git a/code/game/gamemodes/changeling/powers/armor.dm b/code/game/gamemodes/changeling/powers/armor.dm index a6928dff2a..fdd60414d7 100644 --- a/code/game/gamemodes/changeling/powers/armor.dm +++ b/code/game/gamemodes/changeling/powers/armor.dm @@ -4,6 +4,7 @@ helptext = "To remove the suit, use the ability again." ability_icon_state = "ling_space_suit" genomecost = 1 + power_category = CHANGELING_POWER_ARMOR verbpath = /mob/proc/changeling_spacesuit /mob/proc/changeling_spacesuit() @@ -19,6 +20,7 @@ helptext = "To remove the armor, use the ability again." ability_icon_state = "ling_armor" genomecost = 3 + power_category = CHANGELING_POWER_ARMOR verbpath = /mob/proc/changeling_spacearmor /mob/proc/changeling_spacearmor() diff --git a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm index 6e29bf939c..5a0c8a00e8 100644 --- a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm +++ b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm @@ -6,6 +6,7 @@ helptext = "Grants us thermal vision. It may be toggled on or off. We will become more vulnerable to flash-based devices while active." ability_icon_state = "ling_augmented_eyesight" genomecost = 2 + power_category = CHANGELING_POWER_ENHANCEMENTS verbpath = /mob/proc/changeling_augmented_eyesight /mob/proc/changeling_augmented_eyesight() diff --git a/code/game/gamemodes/changeling/powers/bioelectrogenesis.dm b/code/game/gamemodes/changeling/powers/bioelectrogenesis.dm index 67e05ffcc6..f04465e4bc 100644 --- a/code/game/gamemodes/changeling/powers/bioelectrogenesis.dm +++ b/code/game/gamemodes/changeling/powers/bioelectrogenesis.dm @@ -7,6 +7,7 @@ enhancedtext = "Shocking biologicals without grabbing only requires five chemicals, and has more disabling power." ability_icon_state = "ling_bioelectrogenesis" genomecost = 2 + power_category = CHANGELING_POWER_ENHANCEMENTS verbpath = /mob/living/carbon/human/proc/changeling_bioelectrogenesis //Recharge whatever's in our hand, or shock people. diff --git a/code/game/gamemodes/changeling/powers/blind_sting.dm b/code/game/gamemodes/changeling/powers/blind_sting.dm index f4721db660..a3132cd703 100644 --- a/code/game/gamemodes/changeling/powers/blind_sting.dm +++ b/code/game/gamemodes/changeling/powers/blind_sting.dm @@ -4,6 +4,7 @@ enhancedtext = "Duration is extended." ability_icon_state = "ling_sting_blind" genomecost = 2 + power_category = CHANGELING_POWER_STINGS allowduringlesserform = 1 verbpath = /mob/proc/changeling_blind_sting diff --git a/code/game/gamemodes/changeling/powers/boost_range.dm b/code/game/gamemodes/changeling/powers/boost_range.dm index a22130484c..17efedcf72 100644 --- a/code/game/gamemodes/changeling/powers/boost_range.dm +++ b/code/game/gamemodes/changeling/powers/boost_range.dm @@ -5,6 +5,7 @@ enhancedtext = "The range is extended to five tiles." ability_icon_state = "ling_sting_boost_range" genomecost = 1 + power_category = CHANGELING_POWER_STINGS allowduringlesserform = 1 verbpath = /mob/proc/changeling_boost_range diff --git a/code/game/gamemodes/changeling/powers/cryo_sting.dm b/code/game/gamemodes/changeling/powers/cryo_sting.dm index e1a2b10cff..d80d1734c1 100644 --- a/code/game/gamemodes/changeling/powers/cryo_sting.dm +++ b/code/game/gamemodes/changeling/powers/cryo_sting.dm @@ -6,6 +6,7 @@ enhancedtext = "Increases the amount of chemicals injected." ability_icon_state = "ling_sting_cryo" genomecost = 1 + power_category = CHANGELING_POWER_STINGS verbpath = /mob/proc/changeling_cryo_sting /mob/proc/changeling_cryo_sting() diff --git a/code/game/gamemodes/changeling/powers/darkvision.dm b/code/game/gamemodes/changeling/powers/darkvision.dm index 6fbb2954ba..d5de9741fc 100644 --- a/code/game/gamemodes/changeling/powers/darkvision.dm +++ b/code/game/gamemodes/changeling/powers/darkvision.dm @@ -4,6 +4,7 @@ helptext = "We will be able to see in the dark." ability_icon_state = "ling_augmented_eyesight" genomecost = 0 + power_category = CHANGELING_POWER_INHERENT verbpath = /mob/proc/changeling_darksight /mob/proc/changeling_darksight() diff --git a/code/game/gamemodes/changeling/powers/deaf_sting.dm b/code/game/gamemodes/changeling/powers/deaf_sting.dm index 7b39e90720..fce6cbfe38 100644 --- a/code/game/gamemodes/changeling/powers/deaf_sting.dm +++ b/code/game/gamemodes/changeling/powers/deaf_sting.dm @@ -4,6 +4,7 @@ enhancedtext = "Deafness duration is extended." ability_icon_state = "ling_sting_deafen" genomecost = 1 + power_category = CHANGELING_POWER_STINGS allowduringlesserform = 1 verbpath = /mob/proc/changeling_deaf_sting diff --git a/code/game/gamemodes/changeling/powers/death_sting.dm b/code/game/gamemodes/changeling/powers/death_sting.dm index 2eb1e476bd..b50e038174 100644 --- a/code/game/gamemodes/changeling/powers/death_sting.dm +++ b/code/game/gamemodes/changeling/powers/death_sting.dm @@ -1,3 +1,4 @@ +/// Not in use. /datum/power/changeling/DeathSting name = "Death Sting" desc = "We silently sting a human, filling him with potent chemicals. His rapid death is all but assured." diff --git a/code/game/gamemodes/changeling/powers/delayed_toxin_sting.dm b/code/game/gamemodes/changeling/powers/delayed_toxin_sting.dm index f50460a826..bea75a868f 100644 --- a/code/game/gamemodes/changeling/powers/delayed_toxin_sting.dm +++ b/code/game/gamemodes/changeling/powers/delayed_toxin_sting.dm @@ -6,6 +6,7 @@ enhancedtext = "The toxic damage is doubled." ability_icon_state = "ling_sting_del_toxin" genomecost = 1 + power_category = CHANGELING_POWER_STINGS verbpath = /mob/proc/changeling_delayed_toxic_sting /datum/modifier/delayed_toxin_sting diff --git a/code/game/gamemodes/changeling/powers/digital_camo.dm b/code/game/gamemodes/changeling/powers/digital_camo.dm index 9574b465da..2c9dc95b8a 100644 --- a/code/game/gamemodes/changeling/powers/digital_camo.dm +++ b/code/game/gamemodes/changeling/powers/digital_camo.dm @@ -4,6 +4,7 @@ helptext = "We cannot be tracked by camera while using this skill. However, humans looking at us will find us.. uncanny. We must constantly expend chemicals to maintain our form like this." ability_icon_state = "ling_digital_camo" genomecost = 1 + power_category = CHANGELING_POWER_ENHANCEMENTS allowduringlesserform = 1 verbpath = /mob/proc/changeling_digitalcamo diff --git a/code/game/gamemodes/changeling/powers/electric_lockpick.dm b/code/game/gamemodes/changeling/powers/electric_lockpick.dm index 40ba101f4e..b887b9e714 100644 --- a/code/game/gamemodes/changeling/powers/electric_lockpick.dm +++ b/code/game/gamemodes/changeling/powers/electric_lockpick.dm @@ -5,6 +5,7 @@ helptext = "Use the ability, then touch something that utilizes an electrical locking system, to open it. Each use costs 10 chemicals." ability_icon_state = "ling_electric_lockpick" genomecost = 3 + power_category = CHANGELING_POWER_ENHANCEMENTS verbpath = /mob/proc/changeling_electric_lockpick //Emag-lite diff --git a/code/game/gamemodes/changeling/powers/endoarmor.dm b/code/game/gamemodes/changeling/powers/endoarmor.dm index d62c52141a..74e3a0f256 100644 --- a/code/game/gamemodes/changeling/powers/endoarmor.dm +++ b/code/game/gamemodes/changeling/powers/endoarmor.dm @@ -3,6 +3,7 @@ desc = "We grow hard plating underneath our skin, making us more resilient to harm by increasing our maximum health potential by 50 points." helptext = "Our maximum health is increased by 50 points." genomecost = 1 + power_category = CHANGELING_POWER_HEALTH isVerb = 0 verbpath = /mob/proc/changeling_endoarmor diff --git a/code/game/gamemodes/changeling/powers/enfeebling_string.dm b/code/game/gamemodes/changeling/powers/enfeebling_string.dm index 81930a7ebc..c2118847d9 100644 --- a/code/game/gamemodes/changeling/powers/enfeebling_string.dm +++ b/code/game/gamemodes/changeling/powers/enfeebling_string.dm @@ -1,10 +1,11 @@ /datum/power/changeling/enfeebling_string - name = "Enfeebling String" + name = "Enfeebling String" /// String???? desc = "We sting a biological with a potent toxin that will greatly weaken them for a short period of time." helptext = "Lowers the maximum health of the victim for a few minutes, as well as making them more frail and weak. This sting will also warn them of this." enhancedtext = "Maximum health and outgoing melee damage is lowered further. Incoming damage is increased." ability_icon_state = "ling_sting_enfeeble" genomecost = 1 + power_category = CHANGELING_POWER_STINGS verbpath = /mob/proc/changeling_enfeebling_string /datum/modifier/enfeeble diff --git a/code/game/gamemodes/changeling/powers/engorged_glands.dm b/code/game/gamemodes/changeling/powers/engorged_glands.dm index b5d96064d6..d0a39259ad 100644 --- a/code/game/gamemodes/changeling/powers/engorged_glands.dm +++ b/code/game/gamemodes/changeling/powers/engorged_glands.dm @@ -3,6 +3,7 @@ desc = "Our chemical glands swell, permitting us to store more chemicals inside of them." helptext = "Allows us to store an extra 30 units of chemicals, and doubles production rate." genomecost = 1 + power_category = CHANGELING_POWER_ENHANCEMENTS isVerb = 0 verbpath = /mob/proc/changeling_engorgedglands diff --git a/code/game/gamemodes/changeling/powers/enrage.dm b/code/game/gamemodes/changeling/powers/enrage.dm index 00b2193c86..516eedc523 100644 --- a/code/game/gamemodes/changeling/powers/enrage.dm +++ b/code/game/gamemodes/changeling/powers/enrage.dm @@ -8,6 +8,7 @@ enhancedtext = "The length of exhaustion after berserking is reduced to one minute, from two, and requires half as much nutrition." ability_icon_state = "ling_berserk" genomecost = 2 + power_category = CHANGELING_POWER_ENHANCEMENTS allowduringlesserform = 1 verbpath = /mob/living/proc/changeling_berserk diff --git a/code/game/gamemodes/changeling/powers/epinephrine_overdose.dm b/code/game/gamemodes/changeling/powers/epinephrine_overdose.dm index 5d3c1a3be9..d288b45874 100644 --- a/code/game/gamemodes/changeling/powers/epinephrine_overdose.dm +++ b/code/game/gamemodes/changeling/powers/epinephrine_overdose.dm @@ -5,6 +5,7 @@ enhancedtext = "Immunity from most disabling effects for 30 seconds." ability_icon_state = "ling_epinepherine_overdose" genomecost = 2 + power_category = CHANGELING_POWER_ENHANCEMENTS verbpath = /mob/proc/changeling_epinephrine_overdose /datum/modifier/unstoppable diff --git a/code/game/gamemodes/changeling/powers/escape_restraints.dm b/code/game/gamemodes/changeling/powers/escape_restraints.dm index ced80d35bf..b6747d87e1 100644 --- a/code/game/gamemodes/changeling/powers/escape_restraints.dm +++ b/code/game/gamemodes/changeling/powers/escape_restraints.dm @@ -5,6 +5,7 @@ enhancedtext = "More frequent escapes." ability_icon_state = "ling_escape_restraints" genomecost = 2 + power_category = CHANGELING_POWER_ENHANCEMENTS verbpath = /mob/proc/changeling_escape_restraints //Escape Cuffs. By design this does not escape from straight jackets diff --git a/code/game/gamemodes/changeling/powers/extract_dna_sting.dm b/code/game/gamemodes/changeling/powers/extract_dna_sting.dm index baf80140f1..ef97dfc984 100644 --- a/code/game/gamemodes/changeling/powers/extract_dna_sting.dm +++ b/code/game/gamemodes/changeling/powers/extract_dna_sting.dm @@ -4,6 +4,7 @@ helptext = "Will give you the DNA of your target, allowing you to transform into them. Does not count towards absorb objectives." ability_icon_state = "ling_sting_extract" genomecost = 0 + power_category = CHANGELING_POWER_INHERENT allowduringlesserform = 1 verbpath = /mob/proc/changeling_extract_dna_sting diff --git a/code/game/gamemodes/changeling/powers/fabricate_clothing.dm b/code/game/gamemodes/changeling/powers/fabricate_clothing.dm index 04a09d65d1..1799279e2a 100644 --- a/code/game/gamemodes/changeling/powers/fabricate_clothing.dm +++ b/code/game/gamemodes/changeling/powers/fabricate_clothing.dm @@ -19,6 +19,7 @@ var/global/list/changeling_fabricated_clothing = list( To remove our new fabricated clothing, use this ability again." ability_icon_state = "ling_fabricate_clothing" genomecost = 1 + power_category = CHANGELING_POWER_ENHANCEMENTS verbpath = /mob/proc/changeling_fabricate_clothing //Grows biological versions of chameleon clothes. diff --git a/code/game/gamemodes/changeling/powers/fake_death.dm b/code/game/gamemodes/changeling/powers/fake_death.dm index 65fce3cecf..158454c1c4 100644 --- a/code/game/gamemodes/changeling/powers/fake_death.dm +++ b/code/game/gamemodes/changeling/powers/fake_death.dm @@ -4,6 +4,7 @@ helptext = "Can be used before or after death. Duration varies greatly." ability_icon_state = "ling_regenerative_stasis" genomecost = 0 + power_category = CHANGELING_POWER_INHERENT allowduringlesserform = 1 verbpath = /mob/proc/changeling_fakedeath diff --git a/code/game/gamemodes/changeling/powers/fleshmend.dm b/code/game/gamemodes/changeling/powers/fleshmend.dm index 05eea72d95..c53d336a79 100644 --- a/code/game/gamemodes/changeling/powers/fleshmend.dm +++ b/code/game/gamemodes/changeling/powers/fleshmend.dm @@ -5,6 +5,7 @@ enhancedtext = "Healing is twice as effective." ability_icon_state = "ling_fleshmend" genomecost = 1 + power_category = CHANGELING_POWER_HEALTH verbpath = /mob/proc/changeling_fleshmend //Starts healing you every second for 50 seconds. Can be used whilst unconscious. diff --git a/code/game/gamemodes/changeling/powers/hivemind.dm b/code/game/gamemodes/changeling/powers/hivemind.dm index 105de8f4f5..a184f5c210 100644 --- a/code/game/gamemodes/changeling/powers/hivemind.dm +++ b/code/game/gamemodes/changeling/powers/hivemind.dm @@ -5,6 +5,7 @@ desc = "We can channel a DNA into the airwaves, allowing our fellow changelings to absorb it and transform into it as if they acquired the DNA themselves." helptext = "Allows other changelings to absorb the DNA you channel from the airwaves. Will not help them towards their absorb objectives." genomecost = 0 + power_category = CHANGELING_POWER_INHERENT make_hud_button = 0 verbpath = /mob/proc/changeling_hiveupload @@ -13,6 +14,7 @@ desc = "We can absorb a single DNA from the airwaves, allowing us to use more disguises with help from our fellow changelings." helptext = "Allows you to absorb a single DNA and use it. Does not count towards your absorb objective." genomecost = 0 + power_category = CHANGELING_POWER_INHERENT make_hud_button = 0 verbpath = /mob/proc/changeling_hivedownload diff --git a/code/game/gamemodes/changeling/powers/lesser_form.dm b/code/game/gamemodes/changeling/powers/lesser_form.dm index d7b9cb0489..3fd3b6a9e8 100644 --- a/code/game/gamemodes/changeling/powers/lesser_form.dm +++ b/code/game/gamemodes/changeling/powers/lesser_form.dm @@ -1,3 +1,5 @@ +/// Not in use. + /datum/power/changeling/lesser_form name = "Lesser Form" desc = "We debase ourselves and become lesser. We become a monkey." diff --git a/code/game/gamemodes/changeling/powers/lsd_sting.dm b/code/game/gamemodes/changeling/powers/lsd_sting.dm index fabb81327e..963bf32e18 100644 --- a/code/game/gamemodes/changeling/powers/lsd_sting.dm +++ b/code/game/gamemodes/changeling/powers/lsd_sting.dm @@ -1,3 +1,5 @@ +/// Not in use. + //This only exists to be abused, so it's highly recommended to ensure this file is unchecked. /datum/power/changeling/LSDSting name = "Hallucination Sting" diff --git a/code/game/gamemodes/changeling/powers/mimic_voice.dm b/code/game/gamemodes/changeling/powers/mimic_voice.dm index 6b84c577ff..5bb4a184f4 100644 --- a/code/game/gamemodes/changeling/powers/mimic_voice.dm +++ b/code/game/gamemodes/changeling/powers/mimic_voice.dm @@ -4,6 +4,7 @@ helptext = "Will turn your voice into the name that you enter. We must constantly expend chemicals to maintain our form like this" ability_icon_state = "ling_mimic_voice" genomecost = 1 + power_category = CHANGELING_POWER_ENHANCEMENTS verbpath = /mob/proc/changeling_mimicvoice // Fake Voice diff --git a/code/game/gamemodes/changeling/powers/panacea.dm b/code/game/gamemodes/changeling/powers/panacea.dm index 30679b6ef5..26ab0471f9 100644 --- a/code/game/gamemodes/changeling/powers/panacea.dm +++ b/code/game/gamemodes/changeling/powers/panacea.dm @@ -5,6 +5,7 @@ enhancedtext = "We heal more toxins." ability_icon_state = "ling_anatomic_panacea" genomecost = 1 + power_category = CHANGELING_POWER_HEALTH verbpath = /mob/proc/changeling_panacea //Heals the things that the other regenerative abilities don't. diff --git a/code/game/gamemodes/changeling/powers/para_sting.dm b/code/game/gamemodes/changeling/powers/para_sting.dm index c4d04dd7de..9793ba05f0 100644 --- a/code/game/gamemodes/changeling/powers/para_sting.dm +++ b/code/game/gamemodes/changeling/powers/para_sting.dm @@ -1,3 +1,5 @@ +/// Not in use. + /datum/power/changeling/paralysis_sting name = "Paralysis Sting" desc = "We silently sting a human, paralyzing them for a short time." diff --git a/code/game/gamemodes/changeling/powers/rapid_regen.dm b/code/game/gamemodes/changeling/powers/rapid_regen.dm index 298ee8769b..7449de3e1f 100644 --- a/code/game/gamemodes/changeling/powers/rapid_regen.dm +++ b/code/game/gamemodes/changeling/powers/rapid_regen.dm @@ -6,6 +6,7 @@ enhancedtext = "Healing increased to heal up to maximum health." ability_icon_state = "ling_rapid_regeneration" genomecost = 2 + power_category = CHANGELING_POWER_HEALTH verbpath = /mob/proc/changeling_rapid_regen //Gives a big heal, removing various injuries that might shut down normal people, like IB or fractures. diff --git a/code/game/gamemodes/changeling/powers/recursive_enhancement.dm b/code/game/gamemodes/changeling/powers/recursive_enhancement.dm index 77bab9bd99..f933334c0d 100644 --- a/code/game/gamemodes/changeling/powers/recursive_enhancement.dm +++ b/code/game/gamemodes/changeling/powers/recursive_enhancement.dm @@ -1,9 +1,12 @@ + +/// Intending to replace. /datum/power/changeling/recursive_enhancement name = "Recursive Enhancement" desc = "We cause our abilities to have increased or additional effects." helptext = "To check the effects for each ability, check the blue text underneath the ability in the evolution menu." ability_icon_state = "ling_recursive_enhancement" genomecost = 3 + power_category = CHANGELING_POWER_ENHANCEMENTS verbpath = /mob/proc/changeling_recursive_enhancement //Increases macimum chemical storage diff --git a/code/game/gamemodes/changeling/powers/self_respiration.dm b/code/game/gamemodes/changeling/powers/self_respiration.dm index 5108361669..41280a6610 100644 --- a/code/game/gamemodes/changeling/powers/self_respiration.dm +++ b/code/game/gamemodes/changeling/powers/self_respiration.dm @@ -4,6 +4,7 @@ helptext = "We will no longer require internals, and we cannot inhale any gas, including harmful ones." ability_icon_state = "ling_toggle_breath" genomecost = 0 + power_category = CHANGELING_POWER_INHERENT verbpath = /mob/proc/changeling_self_respiration //No breathing required diff --git a/code/game/gamemodes/changeling/powers/shriek.dm b/code/game/gamemodes/changeling/powers/shriek.dm index 9fe5fa708e..19a0af9d07 100644 --- a/code/game/gamemodes/changeling/powers/shriek.dm +++ b/code/game/gamemodes/changeling/powers/shriek.dm @@ -5,6 +5,7 @@ enhancedtext = "Range is doubled." ability_icon_state = "ling_resonant_shriek" genomecost = 2 + power_category = CHANGELING_POWER_SHRIEKS verbpath = /mob/proc/changeling_resonant_shriek /datum/power/changeling/dissonant_shriek @@ -14,6 +15,7 @@ enhancedtext = "Range is doubled." ability_icon_state = "ling_dissonant_shriek" genomecost = 2 + power_category = CHANGELING_POWER_SHRIEKS verbpath = /mob/proc/changeling_dissonant_shriek //A flashy ability, good for crowd control and sewing chaos. diff --git a/code/game/gamemodes/changeling/powers/silence_sting.dm b/code/game/gamemodes/changeling/powers/silence_sting.dm index 16d24c878f..606a75d2d5 100644 --- a/code/game/gamemodes/changeling/powers/silence_sting.dm +++ b/code/game/gamemodes/changeling/powers/silence_sting.dm @@ -5,6 +5,7 @@ enhancedtext = "Silence duration is extended." ability_icon_state = "ling_sting_mute" genomecost = 2 + power_category = CHANGELING_POWER_STINGS allowduringlesserform = 1 verbpath = /mob/proc/changeling_silence_sting diff --git a/code/game/gamemodes/changeling/powers/transform.dm b/code/game/gamemodes/changeling/powers/transform.dm index 6dd16061a1..16691331c4 100644 --- a/code/game/gamemodes/changeling/powers/transform.dm +++ b/code/game/gamemodes/changeling/powers/transform.dm @@ -3,6 +3,7 @@ desc = "We take on the appearance and voice of one we have absorbed." ability_icon_state = "ling_transform" genomecost = 0 + power_category = CHANGELING_POWER_INHERENT verbpath = /mob/proc/changeling_transform //Change our DNA to that of somebody we've absorbed. diff --git a/code/game/gamemodes/changeling/powers/transform_sting.dm b/code/game/gamemodes/changeling/powers/transform_sting.dm index 1f6bc7b93d..e96398b0a1 100644 --- a/code/game/gamemodes/changeling/powers/transform_sting.dm +++ b/code/game/gamemodes/changeling/powers/transform_sting.dm @@ -1,3 +1,5 @@ +/// Not in use. + //Suggested to leave unchecked because this is why we can't have nice things. /datum/power/changeling/transformation_sting name = "Transformation Sting" diff --git a/code/game/gamemodes/changeling/powers/unfat_sting.dm b/code/game/gamemodes/changeling/powers/unfat_sting.dm index ece0d50f46..1b3c099a56 100644 --- a/code/game/gamemodes/changeling/powers/unfat_sting.dm +++ b/code/game/gamemodes/changeling/powers/unfat_sting.dm @@ -1,3 +1,5 @@ +/// Not in use. + /datum/power/changeling/unfat_sting name = "Unfat Sting" desc = "We silently sting a human, forcing them to rapidly metabolize their fat." diff --git a/code/game/gamemodes/changeling/powers/visible_camouflage.dm b/code/game/gamemodes/changeling/powers/visible_camouflage.dm index 747deb9f99..ea968e2f50 100644 --- a/code/game/gamemodes/changeling/powers/visible_camouflage.dm +++ b/code/game/gamemodes/changeling/powers/visible_camouflage.dm @@ -6,6 +6,7 @@ enhancedtext = "Can run while hidden." ability_icon_state = "ling_camoflage" genomecost = 3 + power_category = CHANGELING_POWER_ENHANCEMENTS verbpath = /mob/proc/changeling_visible_camouflage //Hide us from anyone who would do us harm. diff --git a/polaris.dme b/polaris.dme index 15507b4249..3336841eef 100644 --- a/polaris.dme +++ b/polaris.dme @@ -319,6 +319,7 @@ #include "code\datums\looping_sounds\sequence.dm" #include "code\datums\looping_sounds\weather_sounds.dm" #include "code\datums\managed_browsers\_managed_browser.dm" +#include "code\datums\managed_browsers\changelingevolution.dm" #include "code\datums\managed_browsers\feedback_form.dm" #include "code\datums\managed_browsers\feedback_viewer.dm" #include "code\datums\observation\_debug.dm" @@ -470,6 +471,7 @@ #include "code\game\gamemodes\calamity\calamity.dm" #include "code\game\gamemodes\changeling\absorbed_dna.dm" #include "code\game\gamemodes\changeling\changeling.dm" +#include "code\game\gamemodes\changeling\changeling_evolutiontree.dm" #include "code\game\gamemodes\changeling\changeling_powers.dm" #include "code\game\gamemodes\changeling\generic_equip_procs.dm" #include "code\game\gamemodes\changeling\modularchangling.dm" @@ -3272,7 +3274,7 @@ #include "code\ZAS\Zone.dm" #include "interface\interface.dm" #include "interface\skin.dmf" -#include "maps\cynosure\cynosure.dm" +#include "maps\example\example.dm" #include "maps\submaps\_helpers.dm" #include "maps\submaps\poi_landmark.dm" #include "maps\submaps\engine_submaps\engine_areas.dm" From d7d4a4b3edc8814e4d0603ef53c3492648bb2453 Mon Sep 17 00:00:00 2001 From: Sypsoti Date: Sat, 5 Mar 2022 13:58:53 -0600 Subject: [PATCH 2/3] menu refreshes each time it's reopened and removing changeling status now actually removes it. --- .../managed_browsers/changelingevolution.dm | 127 ++++++++++++++++-- code/datums/mind.dm | 2 +- .../changeling/changeling_evolutiontree.dm | 103 ++++---------- .../gamemodes/changeling/changeling_powers.dm | 4 +- .../gamemodes/changeling/modularchangling.dm | 4 +- code/modules/antagonist/antagonist_add.dm | 4 + polaris.dme | 2 +- 7 files changed, 148 insertions(+), 98 deletions(-) diff --git a/code/datums/managed_browsers/changelingevolution.dm b/code/datums/managed_browsers/changelingevolution.dm index e480c0ba08..b520c554ce 100644 --- a/code/datums/managed_browsers/changelingevolution.dm +++ b/code/datums/managed_browsers/changelingevolution.dm @@ -4,7 +4,7 @@ /datum/managed_browser/changelingevolution base_browser_id = "evolution_tree" title = "Evolution Tree" - size_x = 440 + size_x = 480 size_y = 600 var/textbody = null @@ -24,10 +24,17 @@ var/list/dat = list("") var/geneticpoints_current = my_client.mob.mind.changeling.geneticpoints var/geneticpoints_max = my_client.mob.mind.changeling.max_geneticpoints - + dat += "
Genetic Points Available: [geneticpoints_current] / [geneticpoints_max]
" dat += "Obtain more by feeding on your own kind.

" - dat += "Inherent
" + dat += "What am I?

" + dat += "Inherent" + dat += "Armor" + dat += "Weapons" + dat += "Stings" + dat += "Shrieks" + dat += "Health" + dat += "Enhancements" if(textbody) dat += "" dat += "[textbody]" @@ -39,25 +46,121 @@ /datum/managed_browser/changelingevolution/Topic(href, href_list[]) if(!my_client) return FALSE - + if(href_list["close"]) return if(href_list["inherent"]) - var/list/ability_list = list() - var/info = "These powers are inherent to your kind and will always be accessible, provided you have the chemicals to use them." - for(var/datum/power/changeling/P in powerinstances) - if(P.power_category == CHANGELING_POWER_INHERENT) - ability_list[++ability_list.len] = P - create_textbody(ability_list, "Inherent", info) + generate_abilitylist(CHANGELING_POWER_INHERENT) + + if(href_list["armor"]) + generate_abilitylist(CHANGELING_POWER_ARMOR) + + if(href_list["weapons"]) + generate_abilitylist(CHANGELING_POWER_WEAPONS) + + if(href_list["stings"]) + generate_abilitylist(CHANGELING_POWER_STINGS) + + if(href_list["shrieks"]) + generate_abilitylist(CHANGELING_POWER_SHRIEKS) + if(href_list["health"]) + generate_abilitylist(CHANGELING_POWER_HEALTH) + + if(href_list["enhancements"]) + generate_abilitylist(CHANGELING_POWER_ENHANCEMENTS) + + if(href_list["evolve"]) + var/datum/mind/M = my_client.mob.mind + var/datum/changeling/C = my_client.mob.mind.changeling + var/datum/power/changeling/Thepower = href_list["evolve"] + + for (var/datum/power/changeling/P in powerinstances) + if(P.name == Thepower) + Thepower = P + break + + if(!istype(M)) + return + + if(Thepower == null) + to_chat(M.current, "Purchase failed. Inform a dev of this error.") + return + + if(Thepower in C.purchased_powers) + to_chat(M.current, "You already have this ability! Inform a dev of this error.") /// Should not be possible + return + + if(C.geneticpoints < Thepower.genomecost) + to_chat(M.current, "We cannot evolve this... yet. We must acquire more DNA.") + return + + C.purchased_powers += Thepower /// Set it to purchased + C.geneticpoints -= Thepower.genomecost + generate_abilitylist(Thepower.power_category) /// Refresh the UI + + my_client.mob.mind.changeling.purchasePower(M, Thepower) + + if(href_list["tutorial"]) + textbody = "" + textbody += "" textbody += "" for(var/A in ability_list) var/datum/power/changeling/powerdata = A - textbody += "" + textbody += "[powerdata.helptext]
" + if(powerdata.enhancedtext != "") + textbody += "WHEN EHANCED: [powerdata.enhancedtext]
" + if(powerdata in my_client.mob.mind.changeling.purchased_powers) + textbody += "
This ability is already evolved!
" + else if(cat != "Inherent") + textbody += "
Evolve
" + textbody += "" display() diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 2166a7f4ac..604909b9dc 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -86,7 +86,7 @@ if(current) //remove ourself from our old body's mind variable if(changeling) current.remove_changeling_powers() - current.verbs -= /datum/changeling/proc/EvolutionMenu + current.verbs -= /datum/changeling/proc/EvolutionTree current.mind = null SSnanoui.user_transferred(current, new_character) // transfer active NanoUI instances to new user diff --git a/code/game/gamemodes/changeling/changeling_evolutiontree.dm b/code/game/gamemodes/changeling/changeling_evolutiontree.dm index a867f4905d..afd2da9d7e 100644 --- a/code/game/gamemodes/changeling/changeling_evolutiontree.dm +++ b/code/game/gamemodes/changeling/changeling_evolutiontree.dm @@ -24,90 +24,33 @@ var/list/datum/power/changeling/powerinstances = list() if(!usr || !usr.mind || !usr.mind.changeling) return if(usr.client.changelingevolution) + usr.client.changelingevolution.textbody = null usr.client.changelingevolution.display() else usr.client.changelingevolution = new(usr.client) +/// Handles adding ability function. Adding to purchased abilities list & genome cost +/// must be done BEFORE this call. +/datum/changeling/proc/purchasePower(var/datum/mind/M, var/datum/power/changeling/Pname, var/remake_verbs = 1) -/* -/datum/changeling/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) - var/data[0] - data["geneticpoints"] = list("current" = user.mind.changeling.geneticpoints, "max" = user.mind.changeling.max_geneticpoints) - data["categories"] = available_categories - var/powerselect[0] - var/abilities[0] - var/purchased[0] - - for(var/P in subtypesof(/datum/power/changeling)) - var/datum/power/changeling/powerdata = P - abilities[++abilities.len] = list("name" = initial(powerdata.name), "description" = initial(powerdata.desc), \ - "helptext" = initial(powerdata.helptext), "cost" = initial(powerdata.genomecost), "category" = initial(powerdata.power_category), \ - "path" = "[powerdata]") - - for(var/B in purchased_powers) - var/datum/power/changeling/powerbought = B - purchased[++purchased.len] = list("name" = initial(powerbought.name)) - - if(user.mind.changeling.power_select) /// For currently viewed power. - var/datum/power/changeling/S = user.mind.changeling.power_select - powerselect[++powerselect.len] = list("name" = initial(S.name), "description" = initial(S.desc), "helptext" = initial(S.helptext), "cost" = initial(S.genomecost)) - if(powerselect["name"] in purchased) - powerselect += list("purchased" = 1) - - /* - var/i = 1 - for(var/C in available_categories) - categories[++categories.len] = list("name" = C, "page" = i) - i++ - */ - data["abilities"] = abilities - data["menu"] = menu_select - data["powerselect"] = powerselect - - ui = SSnanoui.try_update_ui(user, user, ui_key, ui, data, force_open) - - if(!ui) - ui = new(user, user, ui_key, "changeling.tmpl", "Evolution Tree", 475, 700, state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - - -/* -/datum/changeling/Topic(href, href_list) - ..() - if(!ismob(usr)) + if(!M || !M.changeling) return -///OUTDATED, DELETE LATER - if(href_list["P"]) - var/datum/mind/M = usr.mind - if(!istype(M)) - return - purchasePower(M, href_list["P"]) - call(/datum/changeling/proc/EvolutionMenu)() -/// END OUTDATED - if(href_list["setcategory"]) - usr.mind.changeling.menu_select = href_list["setcategory"] - - if(href_list["currentselection"]) - var/nowviewing = href_list["currentselection"] - - if(nowviewing != 0) - usr.mind.changeling.power_select = text2path(nowviewing) - else - usr.mind.changeling.power_select = null - if(href_list["purchasePower"]) - var/datum/power/changeling/boughtPower = href_list["purchasePower"] - log_debug("Power purchased: [href_list["purchasePower"]]!") - for (var/datum/power/changeling/P in powerinstances) - if(P.name == boughtPower) - boughtPower = P - break - else - log_debug("Error, purchase power = [boughtPower]") - usr.mind.changeling.purchased_powers += boughtPower - - usr.mind.changeling.ui_interact(usr) /// update_uis just would not work under any circumstance. -*/ -*/ \ No newline at end of file + if(Pname.genomecost > 0) + purchased_powers_history.Add("[Pname.name] ([Pname.genomecost] points)") + + if(Pname.make_hud_button && Pname.isVerb) + if(!M.current.ability_master) + M.current.ability_master = new /obj/screen/movable/ability_master(null, M.current) + M.current.ability_master.add_ling_ability( + object_given = M.current, + verb_given = Pname.verbpath, + name_given = Pname.name, + ability_icon_given = Pname.ability_icon_state, + arguments = list() + ) + + if(!Pname.isVerb && Pname.verbpath) + call(M.current, Pname.verbpath)() + else if(remake_verbs) + M.current.make_changeling() diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 47d5ab7af9..df0c0a26d7 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -66,7 +66,6 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E if(!mind.changeling) mind.changeling = new /datum/changeling(gender) verbs.Add(/datum/changeling/proc/EvolutionTree) - verbs.Add(/datum/changeling/proc/EvolutionMenu) verbs.Add(/mob/proc/changeling_respec) add_language("Changeling") @@ -80,7 +79,8 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E for(var/datum/power/changeling/P in powerinstances) if(!P.genomecost) // Is it free? if(!(P in mind.changeling.purchased_powers)) // Do we not have it already? - mind.changeling.purchasePower(mind, P.name, 0)// Purchase it. Don't remake our verbs, we're doing it after this. + mind.changeling.purchased_powers += P /// Add it. + mind.changeling.purchasePower(mind, P, 0)// Purchase it. Don't remake our verbs, we're doing it after this. for(var/datum/power/changeling/P in mind.changeling.purchased_powers) if(P.isVerb) diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm index 1200460116..42e95531f8 100644 --- a/code/game/gamemodes/changeling/modularchangling.dm +++ b/code/game/gamemodes/changeling/modularchangling.dm @@ -1,3 +1,4 @@ +/* New menu found in changeling_evolutiontree.dm // READ: Don't use the apostrophe in name or desc. Causes script errors. //Ling power's evolution menu entry datum should be contained alongside the mob proc for the actual power, in their own file. @@ -289,7 +290,6 @@ call(/datum/changeling/proc/EvolutionMenu)() - /datum/changeling/proc/purchasePower(var/datum/mind/M, var/Pname, var/remake_verbs = 1) if(!M || !M.changeling) return @@ -339,4 +339,4 @@ call(M.current, Thepower.verbpath)() else if(remake_verbs) M.current.make_changeling() - +*/ \ No newline at end of file diff --git a/code/modules/antagonist/antagonist_add.dm b/code/modules/antagonist/antagonist_add.dm index 56a716f24b..d6087c655a 100644 --- a/code/modules/antagonist/antagonist_add.dm +++ b/code/modules/antagonist/antagonist_add.dm @@ -63,5 +63,9 @@ player.current.verbs -= /mob/living/proc/write_ambition player.current.client.verbs -= /client/proc/aooc player.ambitions = "" + if(id == MODE_CHANGELING) + player.current.remove_changeling_powers() + player.current.verbs -= /datum/changeling/proc/EvolutionTree + player.current.verbs -= /mob/proc/changeling_respec return 1 return 0 \ No newline at end of file diff --git a/polaris.dme b/polaris.dme index 3336841eef..2e159dbda9 100644 --- a/polaris.dme +++ b/polaris.dme @@ -3274,7 +3274,7 @@ #include "code\ZAS\Zone.dm" #include "interface\interface.dm" #include "interface\skin.dmf" -#include "maps\example\example.dm" +#include "maps\cynosure\cynosure.dm" #include "maps\submaps\_helpers.dm" #include "maps\submaps\poi_landmark.dm" #include "maps\submaps\engine_submaps\engine_areas.dm" From 658d6dbc0f67ed1cbe73c0522ba5cfe69aa1966a Mon Sep 17 00:00:00 2001 From: Sypsoti Date: Sat, 5 Mar 2022 19:22:45 -0600 Subject: [PATCH 3/3] fixes missing html tag --- code/datums/managed_browsers/changelingevolution.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/managed_browsers/changelingevolution.dm b/code/datums/managed_browsers/changelingevolution.dm index b520c554ce..d7dd020767 100644 --- a/code/datums/managed_browsers/changelingevolution.dm +++ b/code/datums/managed_browsers/changelingevolution.dm @@ -103,7 +103,7 @@ my_client.mob.mind.changeling.purchasePower(M, Thepower) if(href_list["tutorial"]) - textbody = "" + textbody = "" textbody += "
What am I?
" + textbody += "You are a changeling, a creature empowered with genetic-based abilities that change your body in bizarre ways." + textbody += " It's probably best the crew doesn't know about your power -- at least not right away.

" + textbody += "What a changeling is, however, is up to you. Are you a strange alien impersonating crew? Are you a" + textbody += " normal crewmember infected with a parasite? An experiment gone wrong? It's up to you to make the story.

" + textbody += "Of course, you need to know how it works to begin with.

" + textbody += "Your abilities cost chemicals that your body will slowly regenerate with varying speeds based on enhancements obtained." + textbody += " There are a set of inherent abilities you will always have while the rest may be purchased through genomes.

" + textbody += "You may obtain more genomes if you find another changeling and absorb them, but this is not required. If you've found " + textbody += "your abilities aren't to your liking, you have up to two re-adapts available, and these may be refilled by absorbing anyone -- including monkeys.

" + textbody += "Good luck and remember, killing isn't always the end goal." + display() + +/datum/managed_browser/changelingevolution/proc/generate_abilitylist(cat) + var/list/ability_list = list() + var/info = "" + var/catname = "" + for(var/datum/power/changeling/P in powerinstances) + if(P.power_category == cat) + ability_list[++ability_list.len] = P + switch(cat) + if(CHANGELING_POWER_INHERENT) + catname = "Inherent" + info = "These powers are inherent to your kind and will always be accessible, provided you have the chemicals to use them." + if(CHANGELING_POWER_ARMOR) + catname = "Armor" + info = "These abilities will provide you with space protection -- and potentially armor." + if(CHANGELING_POWER_WEAPONS) + catname = "Weapons" + info = "These abilities will provide you the means to fight back." + if(CHANGELING_POWER_STINGS) + catname = "Stings" + info = "These abilities provide the means to sting organic beings for various effects -- though you must be close enough, and they must have exposed flesh." + if(CHANGELING_POWER_SHRIEKS) + catname = "Shrieks" + info = "These abilities enhance your vocal chords, empowering your screams." + if(CHANGELING_POWER_HEALTH) + catname = "Health" + info = "These abilities will enhance your health or aid you in mending your wounds." + if(CHANGELING_POWER_ENHANCEMENTS) + catname = "Enhancements" + info = "These abilities enhance you in various ways." + create_textbody(ability_list, catname, info) /datum/managed_browser/changelingevolution/proc/create_textbody(ability_list, cat, catinfo) textbody = "
[cat] Skills
[catinfo]

[initial(powerdata.name)]
" + textbody += "
[initial(powerdata.name)]
" textbody += "[initial(powerdata.desc)]

" - textbody += "[powerdata.helptext]
What am I?
What am I?

" textbody += "You are a changeling, a creature empowered with genetic-based abilities that change your body in bizarre ways." textbody += " It's probably best the crew doesn't know about your power -- at least not right away.

"