mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 19:22:56 +00:00
Fixes #4495.
This commit is contained in:
@@ -215,6 +215,8 @@ 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)
|
/datum/changeling //stores changeling powers, changeling recharge thingie, changeling absorbed DNA and changeling ID (for changeling hivemind)
|
||||||
var/list/absorbed_dna = list()
|
var/list/absorbed_dna = list()
|
||||||
|
var/list/absorbed_species = list()
|
||||||
|
var/list/absorbed_languages = list()
|
||||||
var/absorbedcount = 0
|
var/absorbedcount = 0
|
||||||
var/chem_charges = 20
|
var/chem_charges = 20
|
||||||
var/chem_recharge_rate = 0.5
|
var/chem_recharge_rate = 0.5
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
//Restores our verbs. It will only restore verbs allowed during lesser (monkey) form if we are not human
|
//Restores our verbs. It will only restore verbs allowed during lesser (monkey) form if we are not human
|
||||||
/mob/proc/make_changeling()
|
/mob/proc/make_changeling()
|
||||||
|
|
||||||
if(!mind) return
|
if(!mind) return
|
||||||
if(!mind.changeling) mind.changeling = new /datum/changeling(gender)
|
if(!mind.changeling) mind.changeling = new /datum/changeling(gender)
|
||||||
verbs += /datum/changeling/proc/EvolutionMenu
|
verbs += /datum/changeling/proc/EvolutionMenu
|
||||||
@@ -23,6 +24,15 @@
|
|||||||
src.verbs += P.verbpath
|
src.verbs += P.verbpath
|
||||||
|
|
||||||
mind.changeling.absorbed_dna |= dna
|
mind.changeling.absorbed_dna |= dna
|
||||||
|
|
||||||
|
var/mob/living/carbon/human/H = src
|
||||||
|
if(istype(H))
|
||||||
|
mind.changeling.absorbed_species += H.species.name
|
||||||
|
|
||||||
|
for(var/language in languages)
|
||||||
|
if(!(language in mind.changeling.absorbed_languages))
|
||||||
|
mind.changeling.absorbed_languages += language
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
//removes our changeling verbs
|
//removes our changeling verbs
|
||||||
@@ -63,6 +73,54 @@
|
|||||||
return changeling
|
return changeling
|
||||||
|
|
||||||
|
|
||||||
|
//Used to dump the languages from the changeling datum into the actual mob.
|
||||||
|
/mob/proc/changeling_update_languages(var/updated_languages)
|
||||||
|
|
||||||
|
languages = list()
|
||||||
|
for(var/language in updated_languages)
|
||||||
|
languages += language
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
//Used to switch species based on the changeling datum.
|
||||||
|
/mob/proc/changeling_change_species()
|
||||||
|
|
||||||
|
set category = "Changeling"
|
||||||
|
set name = "Change Species (5)"
|
||||||
|
|
||||||
|
var/mob/living/carbon/human/H = src
|
||||||
|
if(!istype(H))
|
||||||
|
src << "<span class='warning'>We may only use this power while in humanoid form.</span>"
|
||||||
|
return
|
||||||
|
|
||||||
|
var/datum/changeling/changeling = changeling_power(5,1,0)
|
||||||
|
if(!changeling) return
|
||||||
|
|
||||||
|
if(changeling.absorbed_species.len < 2)
|
||||||
|
src << "<span class='warning'>We do not know of any other species genomes to use.</span>"
|
||||||
|
return
|
||||||
|
|
||||||
|
var/S = input("Select the target species: ", "Target Species", null) as null|anything in changeling.absorbed_species
|
||||||
|
if(!S) return
|
||||||
|
|
||||||
|
domutcheck(src, null)
|
||||||
|
|
||||||
|
changeling.chem_charges -= 5
|
||||||
|
changeling.geneticdamage = 30
|
||||||
|
|
||||||
|
src.visible_message("<span class='warning'>[src] transforms!</span>")
|
||||||
|
|
||||||
|
src.verbs -= /mob/proc/changeling_change_species
|
||||||
|
spawn(10) src.verbs += /mob/proc/changeling_change_species
|
||||||
|
|
||||||
|
H.set_species(S)
|
||||||
|
|
||||||
|
changeling_update_languages(changeling.absorbed_languages)
|
||||||
|
|
||||||
|
feedback_add_details("changeling_powers","TR")
|
||||||
|
|
||||||
|
return 1
|
||||||
|
|
||||||
//Absorbs the victim's DNA making them uncloneable. Requires a strong grip on the victim.
|
//Absorbs the victim's DNA making them uncloneable. Requires a strong grip on the victim.
|
||||||
//Doesn't cost anything as it's the most basic ability.
|
//Doesn't cost anything as it's the most basic ability.
|
||||||
/mob/proc/changeling_absorb_dna()
|
/mob/proc/changeling_absorb_dna()
|
||||||
@@ -82,6 +140,10 @@
|
|||||||
src << "<span class='warning'>[T] is not compatible with our biology.</span>"
|
src << "<span class='warning'>[T] is not compatible with our biology.</span>"
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if(T.species.flags & NO_SCAN)
|
||||||
|
src << "<span class='warning'>We do not know how to parse this creature's DNA!</span>"
|
||||||
|
return
|
||||||
|
|
||||||
if(NOCLONE in T.mutations)
|
if(NOCLONE in T.mutations)
|
||||||
src << "<span class='warning'>This creature's DNA is ruined beyond useability!</span>"
|
src << "<span class='warning'>This creature's DNA is ruined beyond useability!</span>"
|
||||||
return
|
return
|
||||||
@@ -127,6 +189,17 @@
|
|||||||
changeling.chem_charges += 10
|
changeling.chem_charges += 10
|
||||||
changeling.geneticpoints += 2
|
changeling.geneticpoints += 2
|
||||||
|
|
||||||
|
//Steal all of their languages!
|
||||||
|
for(var/language in T.languages)
|
||||||
|
if(!(language in changeling.absorbed_languages))
|
||||||
|
changeling.absorbed_languages += language
|
||||||
|
|
||||||
|
changeling_update_languages(changeling.absorbed_languages)
|
||||||
|
|
||||||
|
//Steal their species!
|
||||||
|
if(T.species && !(T.species.name in changeling.absorbed_species))
|
||||||
|
changeling.absorbed_species += T.species.name
|
||||||
|
|
||||||
if(T.mind && T.mind.changeling)
|
if(T.mind && T.mind.changeling)
|
||||||
if(T.mind.changeling.absorbed_dna)
|
if(T.mind.changeling.absorbed_dna)
|
||||||
for(var/dna_data in T.mind.changeling.absorbed_dna) //steal all their loot
|
for(var/dna_data in T.mind.changeling.absorbed_dna) //steal all their loot
|
||||||
@@ -260,6 +333,8 @@
|
|||||||
|
|
||||||
O.make_changeling(1)
|
O.make_changeling(1)
|
||||||
O.verbs += /mob/proc/changeling_lesser_transform
|
O.verbs += /mob/proc/changeling_lesser_transform
|
||||||
|
O.changeling_update_languages(changeling.absorbed_languages)
|
||||||
|
|
||||||
feedback_add_details("changeling_powers","LF")
|
feedback_add_details("changeling_powers","LF")
|
||||||
del(C)
|
del(C)
|
||||||
return 1
|
return 1
|
||||||
@@ -344,6 +419,7 @@
|
|||||||
|
|
||||||
C.mind.transfer_to(O)
|
C.mind.transfer_to(O)
|
||||||
O.make_changeling()
|
O.make_changeling()
|
||||||
|
O.changeling_update_languages(changeling.absorbed_languages)
|
||||||
|
|
||||||
feedback_add_details("changeling_powers","LFT")
|
feedback_add_details("changeling_powers","LFT")
|
||||||
del(C)
|
del(C)
|
||||||
|
|||||||
@@ -26,6 +26,12 @@ var/list/datum/power/changeling/powerinstances = list()
|
|||||||
genomecost = 0
|
genomecost = 0
|
||||||
verbpath = /mob/proc/changeling_transform
|
verbpath = /mob/proc/changeling_transform
|
||||||
|
|
||||||
|
/datum/power/changeling/change_species
|
||||||
|
name = "Change Species"
|
||||||
|
desc = "We take on the apperance of a species that we have absorbed."
|
||||||
|
genomecost = 0
|
||||||
|
verbpath = /mob/proc/changeling_change_species
|
||||||
|
|
||||||
/datum/power/changeling/fakedeath
|
/datum/power/changeling/fakedeath
|
||||||
name = "Regenerative Stasis"
|
name = "Regenerative Stasis"
|
||||||
desc = "We become weakened to a death-like state, where we will rise again from death."
|
desc = "We become weakened to a death-like state, where we will rise again from death."
|
||||||
|
|||||||
Reference in New Issue
Block a user