This commit is contained in:
Zuhayr
2014-05-05 16:14:59 +09:30
parent ffdba855fa
commit c44e7b0e56
3 changed files with 84 additions and 0 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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."