Moves mob/var/datum/changeling/changeling to datum/mind/var/datum/changeling (changeling datums are now held by minds rather than mobs)

As such, changelings can now be reported at round-end, even after gibbing. Resolves Issue 251

Changeling power proc_holders are now datums rather than objects.
Condensed all those changeling stings down a bit. This will make fixing issue 351 easier to fix

Replaced changeling fakedeath and a number of checks for the zombiepowder reagent with a bitflag: mob/var/status_flags & FAKEDEATH
setting the FAKEDEATH flag will make the mob appear dead in exactly the same way changeling parasting and parapens worked. I've updated changelings and zombiepowder to work with this flag.

Bug fixes for the staff of change. There was a type mismatch and I typo'd "alien" as "xeno" so xenos were not being randomly picked.

TODO:
changeling purchased verbs could probably be moved to mind/special_verbs. Likewise, other modular antag proc-holders can be merged with the changeling system using the same type of datum. (namely wizards)

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4377 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
elly1989@rocketmail.com
2012-08-12 05:43:39 +00:00
parent 79666c2a08
commit a79f049ebd
27 changed files with 524 additions and 1109 deletions

View File

@@ -49,6 +49,7 @@ datum/mind
var/has_been_rev = 0//Tracks if this mind has been a rev or not var/has_been_rev = 0//Tracks if this mind has been a rev or not
var/datum/faction/faction //associated faction var/datum/faction/faction //associated faction
var/datum/changeling/changeling //changeling holder
New(var/key) New(var/key)
src.key = key src.key = key
@@ -58,6 +59,8 @@ datum/mind
if(!istype(new_character)) if(!istype(new_character))
world.log << "## DEBUG: transfer_to(): Some idiot has tried to transfer_to() a non mob/living mob. Please inform Carn" world.log << "## DEBUG: transfer_to(): Some idiot has tried to transfer_to() a non mob/living mob. Please inform Carn"
if(current) //remove ourself from our old body's mind variable if(current) //remove ourself from our old body's mind variable
if(changeling)
current.remove_changeling_powers()
current.mind = null current.mind = null
if(new_character.mind) //remove any mind currently in our new body's mind variable if(new_character.mind) //remove any mind currently in our new body's mind variable
new_character.mind.current = null new_character.mind.current = null
@@ -65,6 +68,9 @@ datum/mind
current = new_character //link ourself to our new body current = new_character //link ourself to our new body
new_character.mind = src //and link our new body to ourself new_character.mind = src //and link our new body to ourself
if(changeling)
new_character.make_changeling()
if(active) if(active)
new_character.key = key //now transfer the key to link the client to our new body new_character.key = key //now transfer the key to link the client to our new body
@@ -183,7 +189,7 @@ datum/mind
text += "<b>YES</b>|<a href='?src=\ref[src];changeling=clear'>no</a>" text += "<b>YES</b>|<a href='?src=\ref[src];changeling=clear'>no</a>"
if (objectives.len==0) if (objectives.len==0)
text += "<br>Objectives are empty! <a href='?src=\ref[src];changeling=autoobjectives'>Randomize!</a>" text += "<br>Objectives are empty! <a href='?src=\ref[src];changeling=autoobjectives'>Randomize!</a>"
if (current.changeling && (current.changeling.absorbed_dna.len>0 && current.real_name != current.changeling.absorbed_dna[1])) if( changeling && changeling.absorbed_dna.len && (current.real_name != changeling.absorbed_dna[1]) )
text += "<br><a href='?src=\ref[src];changeling=initialdna'>Transform to initial appearance.</a>" text += "<br><a href='?src=\ref[src];changeling=initialdna'>Transform to initial appearance.</a>"
else else
text += "<a href='?src=\ref[src];changeling=changeling'>yes</a>|<b>NO</b>" text += "<a href='?src=\ref[src];changeling=changeling'>yes</a>|<b>NO</b>"
@@ -630,25 +636,24 @@ datum/mind
ticker.mode.changelings -= src ticker.mode.changelings -= src
special_role = null special_role = null
current.remove_changeling_powers() current.remove_changeling_powers()
if(current.changeling) if(changeling) del(changeling)
del(current.changeling) current << "<FONT color='red' size = 3><B>You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!</B></FONT>"
current << "\red <FONT size = 3><B>You have been brainwashed! You are no longer a changeling!</B></FONT>"
if("changeling") if("changeling")
if(!(src in ticker.mode.changelings)) if(!(src in ticker.mode.changelings))
ticker.mode.changelings += src ticker.mode.changelings += src
ticker.mode.grant_changeling_powers(current) ticker.mode.grant_changeling_powers(current)
special_role = "Changeling" special_role = "Changeling"
current << "<B>\red You are a changeling!</B>" current << "<B><font color='red'>Your powers are awoken. A flash of memory returns to us...we are a changeling!</font></B>"
if("autoobjectives") if("autoobjectives")
ticker.mode.forge_changeling_objectives(src) ticker.mode.forge_changeling_objectives(src)
usr << "\blue The objectives for changeling [key] have been generated. You can edit them and anounce manually." usr << "\blue The objectives for changeling [key] have been generated. You can edit them and anounce manually."
if("initialdna") if("initialdna")
if (!usr.changeling || !usr.changeling.absorbed_dna[1]) if( !changeling || !changeling.absorbed_dna.len )
usr << "\red Resetting DNA failed!" usr << "\red Resetting DNA failed!"
else else
usr.dna = usr.changeling.absorbed_dna[usr.changeling.absorbed_dna[1]] usr.dna = changeling.absorbed_dna[changeling.absorbed_dna[1]]
usr.real_name = usr.changeling.absorbed_dna[1] usr.real_name = changeling.absorbed_dna[1]
updateappearance(usr, usr.dna.uni_identity) updateappearance(usr, usr.dna.uni_identity)
domutcheck(usr, null) domutcheck(usr, null)

View File

@@ -170,12 +170,9 @@
if(!usr || !isturf(usr.loc)) if(!usr || !isturf(usr.loc))
return return
else if (usr.stat != 0 || usr.restrained()) if(usr.stat || usr.restrained())
return return
else if(usr.status_flags & FAKEDEATH)
if(usr.reagents)
for(var/datum/reagent/R in usr.reagents.reagent_list) //I'm trying to avoid using canmove() because there are times where it would return 0 when you should still be able to point
if(R.id == "zombiepowder") //This is to counter people spamming point-to when hit by a para-pen or changling's parasting. -Nodrak..
return return
var/tile = get_turf(this) var/tile = get_turf(this)

View File

@@ -1,3 +1,5 @@
var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega")
/datum/game_mode /datum/game_mode
var/list/datum/mind/changelings = list() var/list/datum/mind/changelings = list()
@@ -150,9 +152,8 @@
return ..() return ..()
return 0*/ return 0*/
/datum/game_mode/proc/grant_changeling_powers(mob/living/carbon/human/changeling_mob) /datum/game_mode/proc/grant_changeling_powers(mob/living/carbon/changeling_mob)
if (!istype(changeling_mob)) if(!istype(changeling_mob)) return
return
changeling_mob.make_changeling() changeling_mob.make_changeling()
/datum/game_mode/proc/auto_declare_completion_changeling() /datum/game_mode/proc/auto_declare_completion_changeling()
@@ -162,7 +163,7 @@
var/changelingwin = 1 var/changelingwin = 1
text += "<br>[changeling.key] was [changeling.name] (" text += "<br>[changeling.key] was [changeling.name] ("
if(changeling.current && changeling.current.changeling) if(changeling.current)
if(changeling.current.stat == DEAD) if(changeling.current.stat == DEAD)
text += "died" text += "died"
else else
@@ -174,9 +175,9 @@
changelingwin = 0 changelingwin = 0
text += ")" text += ")"
if(changeling.current && changeling.current.changeling) //Removed sanity if(changeling) because we -want- a runtime to inform us that the changelings list is incorrect and needs to be fixed.
text += "<br><b>changeling ID:</b> [changeling.current.gender==MALE?"Mr.":"Ms."] [changeling.current.changeling.changelingID]." text += "<br><b>Changeling ID:</b> [changeling.changeling.changelingID]."
text += "<br><b>Genomes absorbed:</b> [changeling.current.changeling.absorbedcount]" text += "<br><b>Genomes Absorbed:</b> [changeling.changeling.absorbedcount]"
if(changeling.objectives.len) if(changeling.objectives.len)
var/count = 1 var/count = 1
@@ -203,32 +204,30 @@
return 1 return 1
/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/changeling_level = 0
var/list/absorbed_dna = list() var/list/absorbed_dna = list()
var/changeling_fakedeath = 0 var/absorbedcount = 0
var/chem_charges = 20.00 var/chem_charges = 20
var/chem_recharge_multiplier = 1 var/chem_recharge_rate = 0.5
var/chem_storage = 50 var/chem_storage = 50
var/sting_range = 1 var/sting_range = 1
var/changelingID = "none" var/changelingID = "Changeling"
var/mob/living/host = null var/geneticdamage = 0
var/geneticdamage = 0.0
var/isabsorbing = 0 var/isabsorbing = 0
var/geneticpoints = 5 var/geneticpoints = 5
var/purchasedpowers = list() var/purchasedpowers = list()
var/absorbedcount = 0
/datum/changeling/New(var/gender=FEMALE)
/datum/changeling/New()
..() ..()
var/list/possibleIDs = list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega") var/honorific
if(gender == FEMALE) honorific = "Ms."
for(var/mob/living/carbon/aChangeling in player_list) else honorific = "Mr."
if(aChangeling.changeling) if(possible_changeling_IDs.len)
possibleIDs -= aChangeling.changeling.changelingID changelingID = pick(possible_changeling_IDs)
possible_changeling_IDs -= changelingID
if(possibleIDs.len) changelingID = "[honorific] [changelingID]"
changelingID = pick(possibleIDs)
else else
changelingID = "[rand(1,1000)]" changelingID = "[honorific] [rand(1,999)]"
/datum/changeling/proc/regenerate()
chem_charges = min(max(0, chem_charges+chem_recharge_rate), chem_storage)
geneticdamage = max(0, geneticdamage-1)

File diff suppressed because it is too large Load Diff

View File

@@ -1,226 +1,161 @@
var/list/powers = typesof(/obj/effect/proc_holder/power) //needed for the badmin verb for now var/list/powers = typesof(/datum/power/changeling) - /datum/power/changeling //needed for the badmin verb for now
var/list/obj/effect/proc_holder/power/powerinstances = list() var/list/datum/power/changeling/powerinstances = list()
/obj/effect/proc_holder/power
name = "Power"
desc = "Placeholder"
density = 0
opacity = 0
/datum/power //Could be used by other antags too
var/name = "Power"
var/desc = "Placeholder"
var/helptext = "" var/helptext = ""
var/allowduringlesserform = 0
var/isVerb = 1 // Is it an active power, or passive? var/isVerb = 1 // Is it an active power, or passive?
var/verbpath = null // Path to a verb that contains the effects. var/verbpath // Path to a verb that contains the effects.
/datum/power/changeling
var/allowduringlesserform = 0
var/genomecost = 500000 // Cost for the changling to evolve this power. var/genomecost = 500000 // Cost for the changling to evolve this power.
/obj/effect/proc_holder/power/absorb_dna /datum/power/changeling/absorb_dna
name = "Absorb DNA" name = "Absorb DNA"
desc = "Permits us to syphon the DNA from a human. They become one with us, and we become stronger." desc = "Permits us to syphon the DNA from a human. They become one with us, and we become stronger."
genomecost = 0 genomecost = 0
verbpath = /mob/proc/changeling_absorb_dna
verbpath = /client/proc/changeling_absorb_dna /datum/power/changeling/transform
/obj/effect/proc_holder/power/transform
name = "Transform" name = "Transform"
desc = "We take on the apperance and voice of one we have absorbed." desc = "We take on the apperance and voice of one we have absorbed."
genomecost = 0 genomecost = 0
verbpath = /mob/proc/changeling_transform
verbpath = /client/proc/changeling_transform /datum/power/changeling/fakedeath
/obj/effect/proc_holder/power/fakedeath
name = "Regenerative Stasis" name = "Regenerative Stasis"
desc = "We fake our death while we regenerate our form, even through death." desc = "We fake our death while we regenerate our form, even through death."
genomecost = 0 genomecost = 0
allowduringlesserform = 1 allowduringlesserform = 1
verbpath = /mob/proc/changeling_fakedeath
verbpath = /client/proc/changeling_fakedeath /datum/power/changeling/lesser_form
/obj/effect/proc_holder/power/lesser_form
name = "Lesser Form" name = "Lesser Form"
desc = "We debase ourselves and become lesser. We become a monkey." desc = "We debase ourselves and become lesser. We become a monkey."
genomecost = 1 genomecost = 1
verbpath = /mob/proc/changeling_lesser_form
verbpath = /client/proc/changeling_lesser_form /datum/power/changeling/deaf_sting
/*
/obj/effect/proc_holder/power/changeling_greater_form
name = "Greater Form"
desc = "We become the pinnicle of evolution. We will show the humans what happens when they leave their isle of ignorance."
genomecost = 250
verbpath = /client/proc/changeling_greater_form
*/
/obj/effect/proc_holder/power/deaf_sting
name = "Deaf Sting" name = "Deaf Sting"
desc = "We silently sting a human, completely deafening them for a short time." desc = "We silently sting a human, completely deafening them for a short time."
genomecost = 1 genomecost = 1
allowduringlesserform = 1 allowduringlesserform = 1
verbpath = /mob/proc/changeling_deaf_sting
verbpath = /client/proc/changeling_deaf_sting /datum/power/changeling/blind_sting
/obj/effect/proc_holder/power/blind_sting
name = "Blind Sting" name = "Blind Sting"
desc = "We silently sting a human, completely blinding them for a short time." desc = "We silently sting a human, completely blinding them for a short time."
genomecost = 2 genomecost = 2
allowduringlesserform = 1 allowduringlesserform = 1
verbpath = /mob/proc/changeling_blind_sting
verbpath = /client/proc/changeling_blind_sting /datum/power/changeling/silence_sting
/obj/effect/proc_holder/power/silence_sting
name = "Silence Sting" name = "Silence Sting"
desc = "We silently sting a human, completely silencing them for a short time." desc = "We silently sting a human, completely silencing them for a short time."
helptext = "Does not provide a warning to a victim that they have been stung, until they try to speak and can not." helptext = "Does not provide a warning to a victim that they have been stung, until they try to speak and can not."
genomecost = 2 genomecost = 2
allowduringlesserform = 1 allowduringlesserform = 1
verbpath = /mob/proc/changeling_silence_sting
verbpath = /client/proc/changeling_silence_sting /datum/power/changeling/transformation_sting
/obj/effect/proc_holder/power/transformation_sting
name = "Transformation Sting" name = "Transformation Sting"
desc = "We silently sting a human, injecting a retrovirus that forces them to transform into another." desc = "We silently sting a human, injecting a retrovirus that forces them to transform into another."
genomecost = 3 genomecost = 3
verbpath = /mob/proc/changeling_transformation_sting
verbpath = /client/proc/changeling_transformation_sting /datum/power/changeling/paralysis_sting
/obj/effect/proc_holder/power/paralysis_sting
name = "Paralysis Sting" name = "Paralysis Sting"
desc = "We silently sting a human, paralyzing them for a short time." desc = "We silently sting a human, paralyzing them for a short time."
genomecost = 3 genomecost = 3
verbpath = /mob/proc/changeling_paralysis_sting
/datum/power/changeling/LSDSting
verbpath = /client/proc/changeling_paralysis_sting
/obj/effect/proc_holder/power/LSDSting
name = "Hallucination Sting" name = "Hallucination Sting"
desc = "We evolve the ability to sting a target with a powerful hallunicationary chemical." desc = "We evolve the ability to sting a target with a powerful hallunicationary chemical."
helptext = "The target does not notice they have been stung. The effect occurs after 30 to 60 seconds." helptext = "The target does not notice they have been stung. The effect occurs after 30 to 60 seconds."
genomecost = 3 genomecost = 3
verbpath = /mob/proc/changeling_lsdsting
verbpath = /client/proc/changeling_lsdsting /datum/power/changeling/DeathSting
/obj/effect/proc_holder/power/DeathSting
name = "Death Sting" name = "Death Sting"
desc = "We silently sting a human, filling him with potent chemicals. His rapid death is all but assured." desc = "We silently sting a human, filling him with potent chemicals. His rapid death is all but assured."
genomecost = 10 genomecost = 10
verbpath = /mob/proc/changeling_DEATHsting
verbpath = /client/proc/changeling_DEATHsting /datum/power/changeling/unfat_sting
/obj/effect/proc_holder/power/unfat_sting
name = "Unfat Sting" name = "Unfat Sting"
desc = "We silently sting a human, forcing them to rapidly metobolize their fat." desc = "We silently sting a human, forcing them to rapidly metobolize their fat."
genomecost = 1 genomecost = 1
verbpath = /mob/proc/changeling_unfat_sting
/datum/power/changeling/boost_range
verbpath = /client/proc/changeling_unfat_sting
/obj/effect/proc_holder/power/boost_range
name = "Boost Range" name = "Boost Range"
desc = "We evolve the ability to shoot our stingers at humans, with some preperation." desc = "We evolve the ability to shoot our stingers at humans, with some preperation."
genomecost = 2 genomecost = 2
allowduringlesserform = 1 allowduringlesserform = 1
verbpath = /mob/proc/changeling_boost_range
verbpath = /client/proc/changeling_boost_range /datum/power/changeling/Epinephrine
/obj/effect/proc_holder/power/Epinephrine
name = "Epinephrine sacs" name = "Epinephrine sacs"
desc = "We evolve additional sacs of adrenaline throughout our body." desc = "We evolve additional sacs of adrenaline throughout our body."
helptext = "Gives the ability to instantly recover from stuns. High chemical cost." helptext = "Gives the ability to instantly recover from stuns. High chemical cost."
genomecost = 4 genomecost = 4
verbpath = /mob/proc/changeling_unstun
verbpath = /client/proc/changeling_unstun /datum/power/changeling/ChemicalSynth
name = "Rapid Chemical-Synthesis"
/obj/effect/proc_holder/power/ChemicalSynth
name = "Rapid Chemical Synthesis"
desc = "We evolve new pathways for producing our necessary chemicals, permitting us to naturally create them faster." desc = "We evolve new pathways for producing our necessary chemicals, permitting us to naturally create them faster."
helptext = "Doubles the rate at which we naturally recharge chemicals." helptext = "Doubles the rate at which we naturally recharge chemicals."
genomecost = 4 genomecost = 4
isVerb = 0 isVerb = 0
verbpath = /mob/proc/changeling_fastchemical
verbpath = /client/proc/changeling_fastchemical /*
/datum/power/changeling/AdvChemicalSynth
name = "Advanced Chemical-Synthesis"
desc = "We evolve new pathways for producing our necessary chemicals, permitting us to naturally create them faster."
/obj/effect/proc_holder/power/EngorgedGlands helptext = "Doubles the rate at which we naturally recharge chemicals."
genomecost = 8
isVerb = 0
verbpath = /mob/proc/changeling_fastchemical
*/
/datum/power/changeling/EngorgedGlands
name = "Engorged Chemical Glands" name = "Engorged Chemical Glands"
desc = "Our chemical glands swell, permitting us to store more chemicals inside of them." desc = "Our chemical glands swell, permitting us to store more chemicals inside of them."
helptext = "Allows us to store an extra 25 units of chemicals." helptext = "Allows us to store an extra 25 units of chemicals."
genomecost = 4 genomecost = 4
isVerb = 0 isVerb = 0
verbpath = /mob/proc/changeling_engorgedglands
/datum/power/changeling/DigitalCamoflague
verbpath = /client/proc/changeling_engorgedglands
/obj/effect/proc_holder/power/DigitalCamoflague
name = "Digital Camoflauge" name = "Digital Camoflauge"
desc = "We evolve the ability to distort our form and proprtions, defeating common altgorthms used to detect lifeforms on cameras." desc = "We evolve the ability to distort our form and proprtions, defeating common altgorthms used to detect lifeforms on cameras."
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." 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."
genomecost = 4 genomecost = 4
allowduringlesserform = 1 allowduringlesserform = 1
verbpath = /mob/proc/changeling_digitalcamo
verbpath = /client/proc/changeling_digitalcamo /datum/power/changeling/rapidregeneration
/obj/effect/proc_holder/power/rapidregeneration
name = "Rapid Regeneration" name = "Rapid Regeneration"
desc = "We evolve the ability to rapidly regenerate, negating the need for stasis." desc = "We evolve the ability to rapidly regenerate, negating the need for stasis."
helptext = "Heals a moderate amount of damage every tick." helptext = "Heals a moderate amount of damage every tick."
genomecost = 8 genomecost = 8
verbpath = /mob/proc/changeling_rapidregen
verbpath = /client/proc/changeling_rapidregen
// Modularchangling, totally stolen from the new player panel. YAYY // Modularchangling, totally stolen from the new player panel. YAYY
/datum/changeling/proc/EvolutionMenu()//The new one /datum/changeling/proc/EvolutionMenu()//The new one
set category = "Changeling" set category = "Changeling"
set desc = "Level up!" set desc = "Level up!"
if (!usr.changeling)
return
src = usr.changeling if(!usr || !usr.mind || !usr.mind.changeling) return
src = usr.mind.changeling
if(!powerinstances.len) if(!powerinstances.len)
for(var/P in powers) for(var/P in powers)
var/obj/effect/proc_holder/power/nP = new P powerinstances += new P()
if (nP.desc == "Placeholder")
del(nP)
continue
powerinstances += nP
var/dat = "<html><head><title>Changling Evolution Menu</title></head>" var/dat = "<html><head><title>Changling Evolution Menu</title></head>"
@@ -412,7 +347,7 @@ var/list/obj/effect/proc_holder/power/powerinstances = list()
<td align='center'> <td align='center'>
<font size='5'><b>Changling Evolution Menu</b></font><br> <font size='5'><b>Changling Evolution Menu</b></font><br>
Hover over a power to see more information<br> Hover over a power to see more information<br>
Current evolution points left to evolve with: [usr.changeling.geneticpoints]<br> Current evolution points left to evolve with: [geneticpoints]<br>
Absorb genomes to acquire more evolution points Absorb genomes to acquire more evolution points
<p> <p>
</td> </td>
@@ -432,10 +367,10 @@ var/list/obj/effect/proc_holder/power/powerinstances = list()
<table width='560' align='center' cellspacing='0' cellpadding='5' id='maintable_data'>"} <table width='560' align='center' cellspacing='0' cellpadding='5' id='maintable_data'>"}
var/i = 1 var/i = 1
for(var/obj/effect/proc_holder/power/P in powerinstances) for(var/datum/power/changeling/P in powerinstances)
var/ownsthis = 0 var/ownsthis = 0
if(P in usr.changeling.purchasedpowers) if(P in purchasedpowers)
ownsthis = 1 ownsthis = 1
@@ -482,18 +417,19 @@ var/list/obj/effect/proc_holder/power/powerinstances = list()
..() ..()
if(href_list["P"]) if(href_list["P"])
usr.changeling.purchasePower(href_list["P"]) purchasePower(href_list["P"])
call(/datum/changeling/proc/EvolutionMenu)() call(/datum/changeling/proc/EvolutionMenu)()
/datum/changeling/proc/purchasePower(var/obj/effect/proc_holder/power/Pname) /datum/changeling/proc/purchasePower(var/datum/power/changeling/Pname)
if (!usr.changeling) if(!usr.mind || !usr.mind.changeling)
return return
// src = usr.mind.changeling
var/obj/effect/proc_holder/power/Thepower = null var/datum/power/changeling/Thepower = null
for (var/obj/effect/proc_holder/power/P in powerinstances) for (var/datum/power/changeling/P in powerinstances)
if(P.name == Pname) if(P.name == Pname)
Thepower = P Thepower = P
break break
@@ -502,25 +438,21 @@ var/list/obj/effect/proc_holder/power/powerinstances = list()
usr << "This is awkward. Changeling power purchase failed, please report this bug to a coder!" usr << "This is awkward. Changeling power purchase failed, please report this bug to a coder!"
return return
if(Thepower in usr.changeling.purchasedpowers) if(Thepower in purchasedpowers)
usr << "We have already evolved this ability!" usr << "We have already evolved this ability!"
return return
if(usr.changeling.geneticpoints < Thepower.genomecost) if(geneticpoints < Thepower.genomecost)
usr << "We cannot evolve this... yet. We must acquire more DNA." usr << "We cannot evolve this... yet. We must acquire more DNA."
return return
usr.changeling.geneticpoints -= Thepower.genomecost geneticpoints -= Thepower.genomecost
usr.changeling.purchasedpowers += Thepower purchasedpowers += Thepower
if(!Thepower.isVerb) if(!Thepower.isVerb && Thepower.verbpath)
call(Thepower.verbpath)() call(Thepower.verbpath)()
else
if(usr.changeling.changeling_level == 1)
usr.make_lesser_changeling()
else else
usr.make_changeling() usr.make_changeling()

View File

@@ -445,7 +445,7 @@ datum/objective/absorb
return target_amount return target_amount
check_completion() check_completion()
if(owner && owner.current && owner.current.changeling && owner.current.changeling.absorbed_dna && ((owner.current.changeling.absorbedcount) >= target_amount)) if(owner && owner.changeling && owner.changeling.absorbed_dna && (owner.changeling.absorbedcount >= target_amount))
return 1 return 1
else else
return 0 return 0

View File

@@ -113,7 +113,7 @@
//Clonepod //Clonepod
//Start growing a human clone in the pod! //Start growing a human clone in the pod!
/obj/machinery/clonepod/proc/growclone(var/ckey, var/clonename, var/ui, var/se, var/mindref, var/mrace, var/UI, var/datum/changeling/changelingClone) /obj/machinery/clonepod/proc/growclone(var/ckey, var/clonename, var/ui, var/se, var/mindref, var/mrace, var/UI)
if(mess || attempting) if(mess || attempting)
return 0 return 0
var/datum/mind/clonemind = locate(mindref) var/datum/mind/clonemind = locate(mindref)
@@ -177,10 +177,6 @@
ticker.mode.add_cultist(src.occupant.mind) ticker.mode.add_cultist(src.occupant.mind)
ticker.mode.update_all_cult_icons() //So the icon actually appears ticker.mode.update_all_cult_icons() //So the icon actually appears
if (changelingClone && H.mind in ticker.mode.changelings)
H.changeling = changelingClone
H.make_changeling()
// -- End mode specific stuff // -- End mode specific stuff
if(!H.dna) if(!H.dna)

View File

@@ -378,7 +378,7 @@
temp = "Error: Clonepod malfunction." temp = "Error: Clonepod malfunction."
else if(!config.revival_cloning) else if(!config.revival_cloning)
temp = "Error: Unable to initiate cloning cycle." temp = "Error: Unable to initiate cloning cycle."
else if(pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["interface"],C.fields["changeling"])) else if(pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["interface"]))
temp = "Initiating cloning cycle..." temp = "Initiating cloning cycle..."
records.Remove(C) records.Remove(C)
del(C) del(C)
@@ -425,7 +425,6 @@
R.fields["id"] = copytext(md5(subject.real_name), 2, 6) R.fields["id"] = copytext(md5(subject.real_name), 2, 6)
R.fields["UI"] = subject.dna.uni_identity R.fields["UI"] = subject.dna.uni_identity
R.fields["SE"] = subject.dna.struc_enzymes R.fields["SE"] = subject.dna.struc_enzymes
R.fields["changeling"] = subject.changeling
// Preferences stuff // Preferences stuff
R.fields["interface"] = subject.UI R.fields["interface"] = subject.UI

View File

@@ -906,13 +906,9 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
if (podman.mind in ticker.mode:cult) if (podman.mind in ticker.mode:cult)
ticker.mode:add_cultist(podman.mind) ticker.mode:add_cultist(podman.mind)
ticker.mode:update_all_cult_icons() //So the icon actually appears ticker.mode:update_all_cult_icons() //So the icon actually appears
if ("changeling")
if (podman.mind in ticker.mode:changelings)
podman.make_changeling()
// -- End mode specific stuff // -- End mode specific stuff
podman.gender = gender podman.gender = gender
if(!podman.dna) if(!podman.dna)

View File

@@ -895,7 +895,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
user.show_message("\blue \t Damage Specifics: [C.getOxyLoss() > 50 ? "\red" : "\blue"][C.getOxyLoss()]-[C.getToxLoss() > 50 ? "\red" : "\blue"][C.getToxLoss()]-[C.getFireLoss() > 50 ? "\red" : "\blue"][C.getFireLoss()]-[C.getBruteLoss() > 50 ? "\red" : "\blue"][C.getBruteLoss()]", 1) user.show_message("\blue \t Damage Specifics: [C.getOxyLoss() > 50 ? "\red" : "\blue"][C.getOxyLoss()]-[C.getToxLoss() > 50 ? "\red" : "\blue"][C.getToxLoss()]-[C.getFireLoss() > 50 ? "\red" : "\blue"][C.getFireLoss()]-[C.getBruteLoss() > 50 ? "\red" : "\blue"][C.getBruteLoss()]", 1)
user.show_message("\blue \t Key: Suffocation/Toxin/Burns/Brute", 1) user.show_message("\blue \t Key: Suffocation/Toxin/Burns/Brute", 1)
user.show_message("\blue \t Body Temperature: [C.bodytemperature-T0C]&deg;C ([C.bodytemperature*1.8-459.67]&deg;F)", 1) user.show_message("\blue \t Body Temperature: [C.bodytemperature-T0C]&deg;C ([C.bodytemperature*1.8-459.67]&deg;F)", 1)
if(!isnull(C.tod) && (C.stat == 2 || (C.reagents && C.reagents.has_reagent("zombiepowder")) || (C.changeling && C.changeling.changeling_fakedeath))) if(C.tod && (C.stat == DEAD || (C.status_flags & FAKEDEATH)))
user.show_message("\blue \t Time of Death: [C.tod]") user.show_message("\blue \t Time of Death: [C.tod]")
if(istype(C, /mob/living/carbon/human)) if(istype(C, /mob/living/carbon/human))
var/mob/living/carbon/human/H = C var/mob/living/carbon/human/H = C

View File

@@ -93,7 +93,7 @@ MASS SPECTROMETER
O.show_message(text("\red [] has analyzed []'s vitals!", user, M), 1) O.show_message(text("\red [] has analyzed []'s vitals!", user, M), 1)
//Foreach goto(67) //Foreach goto(67)
var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.getFireLoss() + M.getBruteLoss()))) var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.getFireLoss() + M.getBruteLoss())))
if((M.reagents && M.reagents.has_reagent("zombiepowder")) || (M.changeling && M.changeling.changeling_fakedeath)) if(M.status_flags & FAKEDEATH)
user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, "dead"), 1) user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, "dead"), 1)
user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", fake_oxy < 50 ? "\red [fake_oxy]" : fake_oxy , M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1) user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", fake_oxy < 50 ? "\red [fake_oxy]" : fake_oxy , M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
else else
@@ -101,7 +101,7 @@ MASS SPECTROMETER
user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", M.getOxyLoss() > 50 ? "\red [M.getOxyLoss()]" : M.getOxyLoss(), M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1) user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", M.getOxyLoss() > 50 ? "\red [M.getOxyLoss()]" : M.getOxyLoss(), M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1) user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1)
user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]&deg;C ([M.bodytemperature*1.8-459.67]&deg;F)", 1) user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]&deg;C ([M.bodytemperature*1.8-459.67]&deg;F)", 1)
if(!isnull(M.tod) && (M.stat == 2 || (M.reagents && M.reagents.has_reagent("zombiepowder")) || (M.changeling && M.changeling.changeling_fakedeath))) if(M.tod && (M.stat == DEAD || (M.status_flags & FAKEDEATH)))
user.show_message("\blue Time of Death: [M.tod]") user.show_message("\blue Time of Death: [M.tod]")
if(istype(M, /mob/living/carbon/human) && mode == 1) if(istype(M, /mob/living/carbon/human) && mode == 1)
var/mob/living/carbon/human/H = M var/mob/living/carbon/human/H = M
@@ -113,7 +113,7 @@ MASS SPECTROMETER
else else
user.show_message("\blue \t Limbs are OK.",1) user.show_message("\blue \t Limbs are OK.",1)
if((M.changeling && M.changeling.changeling_fakedeath) || (M.reagents && M.reagents.has_reagent("zombiepowder"))) if(M.status_flags & FAKEDEATH)
user.show_message(text("\blue [] | [] | [] | []", fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1) user.show_message(text("\blue [] | [] | [] | []", fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
else else
user.show_message(text("\blue [] | [] | [] | []", M.getOxyLoss() > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1) user.show_message(text("\blue [] | [] | [] | []", M.getOxyLoss() > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)

View File

@@ -539,7 +539,7 @@ CIRCULAR SAW
return return
if(3.0) if(3.0)
if(M.changeling && M.changeling.changeling_fakedeath) if(M.mind && M.mind.changeling)
user << "\red The neural tissue regrows before your eyes as you cut it." user << "\red The neural tissue regrows before your eyes as you cut it."
return return

View File

@@ -393,9 +393,6 @@ Traitors and the like can also be revived with the previous role mostly intact.
//Now for special roles and equipment. //Now for special roles and equipment.
switch(new_character.mind.special_role) switch(new_character.mind.special_role)
if("Changeling")
job_master.EquipRank(new_character, new_character.mind.assigned_role, 1)
new_character.make_changeling()
if("traitor") if("traitor")
job_master.EquipRank(new_character, new_character.mind.assigned_role, 1) job_master.EquipRank(new_character, new_character.mind.assigned_role, 1)
ticker.mode.equip_traitor(new_character) ticker.mode.equip_traitor(new_character)

View File

@@ -1472,6 +1472,7 @@ datum
on_mob_life(var/mob/living/carbon/M as mob) on_mob_life(var/mob/living/carbon/M as mob)
if(!M) M = holder.my_atom if(!M) M = holder.my_atom
M.status_flags |= FAKEDEATH
M.adjustOxyLoss(0.5) M.adjustOxyLoss(0.5)
M.adjustToxLoss(0.5) M.adjustToxLoss(0.5)
M.Weaken(10) M.Weaken(10)
@@ -1480,6 +1481,11 @@ datum
..() ..()
return return
Del()
if(holder && ismob(holder.my_atom))
var/mob/M = holder.my_atom
M.status_flags &= ~FAKEDEATH
LSD LSD
name = "LSD" name = "LSD"
id = "LSD" id = "LSD"

View File

@@ -186,7 +186,7 @@
if(suiciding) if(suiciding)
msg += "<span class='warning'>[t_He] [t_has] bitten off [t_his] own tongue and [t_has] suffered major bloodloss!</span>\n" msg += "<span class='warning'>[t_He] [t_has] bitten off [t_his] own tongue and [t_has] suffered major bloodloss!</span>\n"
if(stat == DEAD || (changeling && (changeling.changeling_fakedeath == 1))) if(stat == DEAD || (status_flags & FAKEDEATH))
msg += "<span class='deadsay'>[t_He] [t_is] limp and unresponsive; there are no signs of life" msg += "<span class='deadsay'>[t_He] [t_is] limp and unresponsive; there are no signs of life"
if(!key) if(!key)

View File

@@ -154,9 +154,9 @@
stat("Tank Pressure", internal.air_contents.return_pressure()) stat("Tank Pressure", internal.air_contents.return_pressure())
stat("Distribution Pressure", internal.distribute_pressure) stat("Distribution Pressure", internal.distribute_pressure)
if(mind) if(mind)
if (mind.special_role == "Changeling" && changeling) if(mind.changeling)
stat("Chemical Storage", changeling.chem_charges) stat("Chemical Storage", mind.changeling.chem_charges)
stat("Genetic Damage Time", changeling.geneticdamage) stat("Genetic Damage Time", mind.changeling.geneticdamage)
if (istype(wear_suit, /obj/item/clothing/suit/space/space_ninja)&&wear_suit:s_initialized) if (istype(wear_suit, /obj/item/clothing/suit/space/space_ninja)&&wear_suit:s_initialized)
stat("Energy Charge", round(wear_suit:cell:charge/100)) stat("Energy Charge", round(wear_suit:cell:charge/100))

View File

@@ -1060,11 +1060,8 @@
nutrition += 10 nutrition += 10
proc/handle_changeling() proc/handle_changeling()
if (mind) if(mind && mind.changeling)
if (mind.special_role == "Changeling" && changeling) mind.changeling.regenerate()
changeling.chem_charges = between(0, ((max((0.9 - (changeling.chem_charges / 50)), 0.1)*changeling.chem_recharge_multiplier) + changeling.chem_charges), changeling.chem_storage)
if ((changeling.geneticdamage > 0))
changeling.geneticdamage = changeling.geneticdamage-1
#undef HUMAN_MAX_OXYLOSS #undef HUMAN_MAX_OXYLOSS
#undef HUMAN_CRIT_MAX_OXYLOSS #undef HUMAN_CRIT_MAX_OXYLOSS

View File

@@ -6,7 +6,7 @@
//Mimes dont speak! Changeling hivemind and emotes are allowed. //Mimes dont speak! Changeling hivemind and emotes are allowed.
if(miming) if(miming)
if(length(message) >= 2) if(length(message) >= 2)
if(src.changeling) if(mind && mind.changeling)
if(copytext(message, 1, 2) != "*" && copytext(message, 1, 3) != ":g" && copytext(message, 1, 3) != ":G" && copytext(message, 1, 3) != ":<3A>") if(copytext(message, 1, 2) != "*" && copytext(message, 1, 3) != ":g" && copytext(message, 1, 3) != ":G" && copytext(message, 1, 3) != ":<3A>")
return return
else else

View File

@@ -585,6 +585,7 @@ Please contact me on #coderbus IRC. ~Carn x
/mob/living/carbon/human/update_hud() //TODO: do away with this if possible /mob/living/carbon/human/update_hud() //TODO: do away with this if possible
if(client) if(client)
client.screen |= contents client.screen |= contents
if(hud_used)
hud_used.hidden_inventory_update() //Updates the screenloc of the items on the 'other' inventory bar hud_used.hidden_inventory_update() //Updates the screenloc of the items on the 'other' inventory bar

View File

@@ -264,7 +264,7 @@
src.blinded = 1 src.blinded = 1
else else
if (src.paralysis || src.stunned || src.weakened || (changeling && changeling.changeling_fakedeath)) //Stunned etc. if (src.paralysis || src.stunned || src.weakened || (status_flags && FAKEDEATH)) //Stunned etc.
if (src.stunned > 0) if (src.stunned > 0)
AdjustStunned(-1) AdjustStunned(-1)
src.stat = 0 src.stat = 0

View File

@@ -581,8 +581,5 @@
return return
proc/handle_changeling() proc/handle_changeling()
if (mind) if(mind && mind.changeling)
if (mind.special_role == "Changeling" && changeling) mind.changeling.regenerate()
changeling.chem_charges = between(0, ((max((0.9 - (changeling.chem_charges / 50)), 0.1)*changeling.chem_recharge_multiplier) + changeling.chem_charges), changeling.chem_storage)
if ((changeling.geneticdamage > 0))
changeling.geneticdamage = changeling.geneticdamage-1

View File

@@ -392,9 +392,9 @@
stat(null, text("Move Mode: []", m_intent)) stat(null, text("Move Mode: []", m_intent))
if(client && mind) if(client && mind)
if (client.statpanel == "Status") if (client.statpanel == "Status")
if (mind.special_role == "Changeling" && changeling) if(mind.changeling)
stat("Chemical Storage", changeling.chem_charges) stat("Chemical Storage", mind.changeling.chem_charges)
stat("Genetic Damage Time", changeling.geneticdamage) stat("Genetic Damage Time", mind.changeling.geneticdamage)
return return

View File

@@ -246,10 +246,10 @@ var/list/department_radio_keys = list(
italics = 1 italics = 1
if("changeling") if("changeling")
if(src.changeling) if(mind && mind.changeling)
for(var/mob/aChangeling in mob_list) for(var/mob/Changeling in mob_list)
if(aChangeling.changeling || istype(aChangeling, /mob/dead/observer)) if((Changeling.mind && Changeling.mind.changeling) || istype(Changeling, /mob/dead/observer))
aChangeling << "<i><font color=#800080><b>[gender=="male"?"Mr.":"Mrs."] [changeling.changelingID]:</b> [message]</font></i>" Changeling << "<i><font color=#800080><b>[mind.changeling.changelingID]:</b> [message]</font></i>"
return return
////SPECIAL HEADSETS START ////SPECIAL HEADSETS START
else else

View File

@@ -699,7 +699,7 @@ note dizziness decrements automatically in the mob's Life() proc.
lying = 0 lying = 0
else else
lying = 1 lying = 1
else if( stat || weakened || paralysis || resting || sleeping || (changeling && changeling.changeling_fakedeath) ) else if( stat || weakened || paralysis || resting || sleeping || (status_flags & FAKEDEATH) )
lying = 1 lying = 1
canmove = 0 canmove = 0
else if( stunned ) else if( stunned )

View File

@@ -214,9 +214,6 @@
var/radar_open = 0 // nonzero is radar is open var/radar_open = 0 // nonzero is radar is open
//Datum holding changeling stuff
var/datum/changeling/changeling = null //TODO: Move this to living or carbon -Nodrak
var/obj/control_object //Used by admins to possess objects. All mobs should have this var var/obj/control_object //Used by admins to possess objects. All mobs should have this var
//Whether or not mobs can understand other mobtypes. These stay in /mob so that ghosts can hear everything. //Whether or not mobs can understand other mobtypes. These stay in /mob so that ghosts can hear everything.

View File

@@ -36,7 +36,7 @@
del(W) del(W)
W.layer = initial(W.layer) W.layer = initial(W.layer)
W.loc = M.loc W.loc = M.loc
W.dropped(src) W.dropped(M)
var/mob/living/new_mob var/mob/living/new_mob
@@ -54,18 +54,16 @@
Robot.mmi = new /obj/item/device/mmi(new_mob) Robot.mmi = new /obj/item/device/mmi(new_mob)
Robot.mmi.transfer_identity(M) //Does not transfer key/client. Robot.mmi.transfer_identity(M) //Does not transfer key/client.
if("metroid") if("metroid")
if(prob(50)) if(prob(50)) new_mob = new /mob/living/carbon/metroid/adult(M.loc)
new_mob = new /mob/living/carbon/metroid/adult(M.loc) else new_mob = new /mob/living/carbon/metroid(M.loc)
else
new_mob = new /mob/living/carbon/metroid(M.loc)
new_mob.universal_speak = 1 new_mob.universal_speak = 1
if("alien") if("xeno")
var/alien_caste = pick("Hunter","Sentinel","Drone","Larva") var/alien_caste = pick("Hunter","Sentinel","Drone","Larva")
switch(alien_caste) switch(alien_caste)
if("Hunter") new_mob = new /mob/living/carbon/alien/humanoid/hunter(M.loc) if("Hunter") new_mob = new /mob/living/carbon/alien/humanoid/hunter(M.loc)
if("Sentinel") new_mob = new /mob/living/carbon/alien/humanoid/sentinel(M.loc) if("Sentinel") new_mob = new /mob/living/carbon/alien/humanoid/sentinel(M.loc)
if("Drone") new_mob = new /mob/living/carbon/alien/humanoid/drone(M.loc) if("Drone") new_mob = new /mob/living/carbon/alien/humanoid/drone(M.loc)
if("Larva") new_mob = new /mob/living/carbon/alien/larva(M.loc) else new_mob = new /mob/living/carbon/alien/larva(M.loc)
new_mob.universal_speak = 1 new_mob.universal_speak = 1
if("human") if("human")
new_mob = new /mob/living/carbon/human(M.loc) new_mob = new /mob/living/carbon/human(M.loc)
@@ -83,6 +81,8 @@
var/mob/living/carbon/human/Human = new_mob var/mob/living/carbon/human/Human = new_mob
Human.mutantrace = pick("lizard","golem","metroid","plant",4;"") Human.mutantrace = pick("lizard","golem","metroid","plant",4;"")
else
return
new_mob.a_intent = "hurt" new_mob.a_intent = "hurt"
if(M.mind) if(M.mind)

View File

@@ -348,6 +348,7 @@ var/list/global_mutations = list() // list of hidden mutation things
#define CANSTUN 1 #define CANSTUN 1
#define CANWEAKEN 2 #define CANWEAKEN 2
#define CANPARALYSE 4 #define CANPARALYSE 4
#define FAKEDEATH 8192 //Replaces stuff like changeling.changeling_fakedeath
#define DISFIGURED 16384 //I'll probably move this elsewhere if I ever get wround to writing a bitflag mob-damage system #define DISFIGURED 16384 //I'll probably move this elsewhere if I ever get wround to writing a bitflag mob-damage system
#define XENO_HOST 32768 //Tracks whether we're gonna be a baby alien's mummy. #define XENO_HOST 32768 //Tracks whether we're gonna be a baby alien's mummy.