diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 2356abe6ceb..e4bc5d4f647 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -219,7 +219,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" /datum/changeling //stores changeling powers, changeling recharge thingie, changeling absorbed DNA and changeling ID (for changeling hivemind) var/list/absorbed_dna = list() var/dna_max = 4 //How many extra DNA strands the changeling can store for transformation. - var/absorbedcount = 0 // + var/absorbedcount = 0 var/chem_charges = 20 var/chem_storage = 50 var/chem_recharge_rate = 0.5 @@ -270,14 +270,14 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" U << "DNA of [T] is ruined beyond usability!" return 0 - if(T.dna in absorbed_dna) - U << "We already have that DNA in storage." - return 0 - if(!ishuman(T))//Absorbing monkeys is entirely possible, but it can cause issues with transforming. That's what lesser form is for anyway! U << "We could gain no benefit from absorbing a lesser creature." return 0 + if(T.dna in absorbed_dna) + U << "We already have that DNA in storage." + return 0 + if(!check_dna_integrity(T)) U << "[T] is not compatible with our biology." return 0 diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 333703986b1..1648cf58e5f 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -45,7 +45,7 @@ src << "We are incapacitated." return - if(changeling.absorbed_dna.len < required_dna) + if(changeling.absorbedcount < required_dna) src << "We require at least [required_dna] samples of compatible DNA." return @@ -133,7 +133,7 @@ set category = "Changeling" set name = "Transform (5)" - var/datum/changeling/changeling = changeling_power(5,1,0) + var/datum/changeling/changeling = changeling_power(5, 0, 3) if(!changeling) return var/list/names = list() @@ -154,9 +154,6 @@ updateappearance(src) domutcheck(src, null) - src.verbs -= /mob/living/carbon/proc/changeling_transform - spawn(10) src.verbs += /mob/living/carbon/proc/changeling_transform - feedback_add_details("changeling_powers","TR") return 1 @@ -164,12 +161,12 @@ //Transform into a monkey. /mob/living/carbon/proc/changeling_lesser_form() set category = "Changeling" - set name = "Lesser Form (1)" + set name = "Lesser Form (5)" - var/datum/changeling/changeling = changeling_power(1,0,0) + var/datum/changeling/changeling = changeling_power(5,0,3) if(!changeling) return - changeling.chem_charges-- + changeling.chem_charges -= 5 remove_changeling_powers() changeling.geneticdamage = 3 src << "Our genes cry out!" @@ -188,9 +185,9 @@ /mob/living/carbon/proc/changeling_human_form() set category = "Changeling" - set name = "Human Form (1)" + set name = "Human Form (5)" - var/datum/changeling/changeling = changeling_power(1,1,0) + var/datum/changeling/changeling = changeling_power(5,0,3) if(!changeling) return @@ -205,7 +202,7 @@ if(!chosen_dna) return - changeling.chem_charges-- + changeling.chem_charges -= 5 remove_changeling_powers() src << "We transform our appearance." dna = chosen_dna @@ -222,47 +219,67 @@ //Fake our own death and fully heal. You will appear to be dead but regenerate fully after a short delay. /mob/living/carbon/proc/changeling_fakedeath() set category = "Changeling" - set name = "Regenerative Stasis (20)" + set name = "Regenerative Stasis (10)" - var/datum/changeling/changeling = changeling_power(20,1,100,DEAD) + var/datum/changeling/changeling = changeling_power(10,0,100,DEAD) if(!changeling) return + if(status_flags & FAKEDEATH) return //Make sure we can't stack regenerations and such. + changeling.chem_charges -= 10 if(!stat && alert("Are we sure we wish to fake our death?",,"Yes","No") == "No")//Confirmation for living changelings if they want to fake their death return - src << "We will attempt to regenerate our form." + src << "We begin our stasis, preparing energy to arise once more." status_flags |= FAKEDEATH //play dead update_canmove() remove_changeling_powers() - emote("gasp") + emote("deathgasp") tod = worldtime2text() - spawn(rand(800,2000)) - if(changeling_power(20,1,100,DEAD)) - changeling.chem_charges -= 20 - if(stat == DEAD) - dead_mob_list -= src - living_mob_list += src - stat = CONSCIOUS - tod = null - setToxLoss(0) - setOxyLoss(0) - setCloneLoss(0) - SetParalysis(0) - SetStunned(0) - SetWeakened(0) - radiation = 0 - heal_overall_damage(getBruteLoss(), getFireLoss()) - reagents.clear_reagents() - src << "We have regenerated." + spawn(800) + src << "We have now stored enough power to regenerate." + verbs -= /mob/living/carbon/proc/changeling_fakedeath + verbs += /mob/living/carbon/proc/changeling_revive - status_flags &= ~(FAKEDEATH) - update_canmove() - make_changeling() feedback_add_details("changeling_powers","FD") return 1 +//Separated from regenerative stasis, so that they can choose when to pop up rather than having no control over it. +/mob/living/carbon/proc/changeling_revive() + set category = "Changeling" + set name = "Regenerate! (10)" + + var/datum/changeling/changeling = changeling_power(10,0,100,DEAD) + if(!changeling) return + changeling.chem_charges -= 10 + + if(stat == DEAD) + dead_mob_list -= src + living_mob_list += src + stat = CONSCIOUS + tod = null + setToxLoss(0) + setOxyLoss(0) + setCloneLoss(0) + SetParalysis(0) + SetStunned(0) + SetWeakened(0) + radiation = 0 + heal_overall_damage(getBruteLoss(), getFireLoss()) + reagents.clear_reagents() + src << "We have regenerated." + + status_flags &= ~(FAKEDEATH) + update_canmove() + make_changeling() + + verbs -= /mob/living/carbon/proc/changeling_revive + verbs += /mob/living/carbon/proc/changeling_fakedeath + + feedback_add_details("changeling_powers","CR") + return 1 + //Recover from stuns. /mob/living/carbon/proc/changeling_unstun() set category = "Changeling" @@ -283,8 +300,6 @@ reagents.add_reagent("synaptizine", 20) - src.verbs -= /mob/living/carbon/proc/changeling_unstun - spawn(5) src.verbs += /mob/living/carbon/proc/changeling_unstun feedback_add_details("changeling_powers","UNS") return 1 @@ -309,7 +324,7 @@ for(var/mob/living/carbon/M in ohearers(4, usr)) if(!M.mind || !M.mind.changeling) M.ear_deaf += 30 - M.confused += 15 + M.confused += 20 M.make_jittery(50) for(var/obj/machinery/light/L in range(4, usr)) @@ -319,8 +334,6 @@ //for(var/obj/structure/window/W in range(2, usr)) //I like the window-breaking, but it makes the ability too 'loud' to fit changelings. // W.hit(rand(40,100)) - src.verbs -= /mob/living/carbon/proc/changeling_shriek - spawn(5) src.verbs += /mob/living/carbon/proc/changeling_shriek feedback_add_details("changeling_powers","RS") return 1 @@ -331,7 +344,7 @@ set name = "Spread Infestation (40)" set desc = "Our form divides, creating arachnids which will grow into deadly beasts." - var/datum/changeling/changeling = changeling_power(40) + var/datum/changeling/changeling = changeling_power(40, 10) if(!changeling) return 0 src.mind.changeling.chem_charges -= 40 @@ -342,9 +355,7 @@ else S.grow_as = /mob/living/simple_animal/hostile/giant_spider - src.verbs -= /mob/living/carbon/proc/changeling_spiders - spawn(5) src.verbs += /mob/living/carbon/proc/changeling_spiders - feedback_add_details("changeling_powers","CS") + feedback_add_details("changeling_powers","SI") return 1 @@ -366,11 +377,10 @@ for(var/datum/disease/D in src.viruses) D.cure() - src.verbs -= /mob/living/carbon/proc/changeling_panacea - spawn(5) src.verbs += /mob/living/carbon/proc/changeling_panacea feedback_add_details("changeling_powers","AP") return 1 + //Prevents AIs tracking you but makes you easily detectable to the human-eye. /mob/living/carbon/proc/changeling_digitalcamo() set category = "Changeling" @@ -384,16 +394,14 @@ else src << "We distort our form to prevent AI-tracking." digitalcamo = !digitalcamo - src.verbs -= /mob/living/carbon/proc/changeling_digitalcamo - spawn(5) src.verbs += /mob/living/carbon/proc/changeling_digitalcamo feedback_add_details("changeling_powers","CAM") return 1 //Starts healing you every second for 10 seconds. Can be used whilst unconscious. -/mob/living/carbon/proc/changeling_lizardflesh() +/mob/living/carbon/proc/changeling_fleshmend() set category = "Changeling" - set name = "Lizardflesh (30)" + set name = "Fleshmend (30)" set desc = "Begins rapidly regenerating. Does not effect stuns or chemicals." var/datum/changeling/changeling = changeling_power(30,0,100,UNCONSCIOUS) @@ -409,8 +417,6 @@ adjustFireLoss(-10) sleep(10) - src.verbs -= /mob/living/carbon/proc/changeling_lizardflesh - spawn(5) src.verbs += /mob/living/carbon/proc/changeling_lizardflesh feedback_add_details("changeling_powers","RR") return 1 @@ -422,7 +428,7 @@ var/list/datum/dna/hivemind_bank = list() set name = "Hive Channel (10)" set desc = "Allows you to channel DNA in the airwaves to allow other changelings to absorb it." - var/datum/changeling/changeling = changeling_power(10,1) + var/datum/changeling/changeling = changeling_power(10) if(!changeling) return var/list/names = list() @@ -452,7 +458,7 @@ var/list/datum/dna/hivemind_bank = list() set name = "Hive Absorb (20)" set desc = "Allows you to absorb DNA that is being channeled in the airwaves." - var/datum/changeling/changeling = changeling_power(20,1) + var/datum/changeling/changeling = changeling_power(20) if(!changeling) return var/list/names = list() @@ -539,7 +545,7 @@ var/list/datum/dna/hivemind_bank = list() changeling.chem_charges -= required_chems verbs -= verb_path - spawn(10) verbs += verb_path + spawn(5) verbs += verb_path src << "We stealthily sting [T]." if(!T.mind || !T.mind.changeling) return T //T will be affected by the sting @@ -550,7 +556,7 @@ var/list/datum/dna/hivemind_bank = list() /mob/living/carbon/proc/changeling_transformation_sting() set category = "Changeling" set name = "Transformation Sting (40)" - set desc= "Sting target" + set desc= "Transform the target to one of our stored DNAs" var/datum/changeling/changeling = changeling_power(40) if(!changeling) return 0 diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm index 618a627c5f5..d9f24b8168e 100644 --- a/code/game/gamemodes/changeling/modularchangling.dm +++ b/code/game/gamemodes/changeling/modularchangling.dm @@ -101,12 +101,12 @@ var/list/powerinstances allowduringlesserform = 1 verbpath = /mob/living/carbon/proc/changeling_digitalcamo -/datum/power/changeling/lizardflesh - name = "Lizardflesh" +/datum/power/changeling/fleshmend + name = "Fleshmend" desc = "We evolve the ability to rapidly regenerate, restoring the health of the body we use." helptext = "Heals a moderate amount of damage every tick. Can be used while unconscious." genomecost = 1 - verbpath = /mob/living/carbon/proc/changeling_lizardflesh + verbpath = /mob/living/carbon/proc/changeling_fleshmend /datum/power/changeling/panacea name = "Anatomic Panacea" @@ -118,14 +118,14 @@ var/list/powerinstances /datum/power/changeling/shriek name = "Resonant Shriek" desc = "Our lungs and vocal chords shift, allowing us to briefly emit a noise that deafens and confuses humans." - helptext = "The high-frequency sounds cannot be heard by humans, but will shatter glass nearby." + helptext = "The high-frequency sounds cannot be heard by humans, but will blow out lights nearby." genomecost = 1 verbpath = /mob/living/carbon/proc/changeling_shriek /datum/power/changeling/spiders name = "Spread Infestation" desc = "Our form divides, creating arachnids which will grow into deadly beasts." - helptext = "Can be used while in lesser form. The spiders are thoughtless creatures, and may attack their creators when fully grown." + helptext = "The spiders are thoughtless creatures, and may attack their creators when fully grown. Requires 10 DNA absorptions." genomecost = 1 allowduringlesserform = 1 verbpath = /mob/living/carbon/proc/changeling_spiders @@ -480,18 +480,21 @@ var/list/powerinstances if(Thepower == null) - C << "This is awkward. Changeling power purchase failed, please report this bug to a coder!" + C << "This is awkward. Changeling power purchase failed, please report this bug to a coder!" return if(Thepower in purchasedpowers) C << "We have already evolved this ability!" return - if(geneticpoints < Thepower.genomecost) C << "We have reached our capacity for abilities." return + if(C.status_flags & FAKEDEATH)//To avoid potential exploits by buying new powers while in stasis, which clears your verblist. + C << "We lack the energy to evolve new abilities right now." + return + geneticpoints -= Thepower.genomecost purchasedpowers += Thepower @@ -521,6 +524,7 @@ var/list/powerinstances geneticpoints = initial(geneticpoints) sting_range = initial(sting_range) chem_storage = initial(chem_storage) + chem_recharge_rate = initial(chem_recharge_rate) chem_charges = min(chem_charges, chem_storage) mimicing = "" diff --git a/code/modules/mob/living/carbon/human/hud.dm b/code/modules/mob/living/carbon/human/hud.dm index d24bb1c0445..a845edd93b7 100644 --- a/code/modules/mob/living/carbon/human/hud.dm +++ b/code/modules/mob/living/carbon/human/hud.dm @@ -280,6 +280,7 @@ lingchemdisplay.icon_state = "power_display" lingchemdisplay.screen_loc = ui_lingchemdisplay lingchemdisplay.layer = 20 + lingchemdisplay.invisibility = 101 mymob.blind = new /obj/screen() mymob.blind.icon = 'icons/mob/screen_full.dmi' diff --git a/code/modules/mob/living/carbon/monkey/hud.dm b/code/modules/mob/living/carbon/monkey/hud.dm index 4e4c76b9669..5bb39214c60 100644 --- a/code/modules/mob/living/carbon/monkey/hud.dm +++ b/code/modules/mob/living/carbon/monkey/hud.dm @@ -142,6 +142,13 @@ mymob.pullin.name = "pull" mymob.pullin.screen_loc = ui_pull_resist + lingchemdisplay = new /obj/screen() + lingchemdisplay.name = "chemical storage" + lingchemdisplay.icon_state = "power_display" + lingchemdisplay.screen_loc = ui_lingchemdisplay + lingchemdisplay.layer = 20 + lingchemdisplay.invisibility = 101 + mymob.blind = new /obj/screen() mymob.blind.icon = 'icons/mob/screen_full.dmi' mymob.blind.icon_state = "blackimageoverlay" diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 05742c0bb82..7a09b240171 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -350,7 +350,7 @@ if (client.statpanel == "Status") if(mind.changeling) stat("Chemical Storage", "[mind.changeling.chem_charges]/[mind.changeling.chem_storage]") - stat("Genetic Damage Time", mind.changeling.geneticdamage) + stat("Absorbed DNA", mind.changeling.absorbedcount) return