Changeling mode now has 4 changelings, each working on its own objectives, but possessing the ability to hivemind with the others.

It'll be fun, I promise.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2068 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
uporotiy
2011-08-29 21:36:26 +00:00
parent 71d90fea60
commit fdb4934f54
15 changed files with 218 additions and 120 deletions

View File

@@ -136,13 +136,13 @@ datum/mind
text += "<b>YES</b>|<a href='?src=\ref[src];changeling=clear'>no</a>"
if (objectives.len==0)
text += "<br>Objectives are empty! <a href='?src=\ref[src];changeling=autoobjectives'>Randomize!</a>"
if (current.absorbed_dna.len>0 && current.real_name != current.absorbed_dna[1])
if (current.changeling && (current.changeling.absorbed_dna.len>0 && current.real_name != current.changeling.absorbed_dna[1]))
text += "<br><a href='?src=\ref[src];changeling=initialdna'>Transform to initial appearance.</a>"
else
text += "<a href='?src=\ref[src];changeling=changeling'>yes</a>|<b>NO</b>"
var/datum/game_mode/changeling/changeling = ticker.mode
if (istype(changeling) && changeling.changelingdeath)
text += "<br>All the changelings are dead! Restart in [round((changeling.TIME_TO_GET_REVIVED-(world.time-changeling.changelingdeathtime))/10)] seconds."
// var/datum/game_mode/changeling/changeling = ticker.mode
// if (istype(changeling) && changeling.changelingdeath)
// text += "<br>All the changelings are dead! Restart in [round((changeling.TIME_TO_GET_REVIVED-(world.time-changeling.changelingdeathtime))/10)] seconds."
sections["changeling"] = text
/** NUCLEAR ***/
@@ -576,11 +576,8 @@ datum/mind
ticker.mode.changelings -= src
special_role = null
current.remove_changeling_powers()
current.absorbed_dna = null
current.chem_charges = 0
current.changeling_fakedeath = 0
current.sting_range = 1
current.changeling_level = 0
if(current.changeling)
del(current.changeling)
current << "\red <FONT size = 3><B>You have been brainwashed! You are no longer a changeling!</B></FONT>"
if("changeling")
if(!(src in ticker.mode.changelings))
@@ -593,11 +590,11 @@ datum/mind
usr << "\blue The objectives for changeling [key] have been generated. You can edit them and anounce manually."
if("initialdna")
if (!usr.absorbed_dna[1])
if (!usr.changeling || !usr.changeling.absorbed_dna[1])
usr << "\red Resetting DNA failed!"
else
usr.dna = usr.absorbed_dna[usr.absorbed_dna[1]]
usr.real_name = usr.absorbed_dna[1]
usr.dna = usr.changeling.absorbed_dna[usr.changeling.absorbed_dna[1]]
usr.real_name = usr.changeling.absorbed_dna[1]
updateappearance(usr, usr.dna.uni_identity)
domutcheck(usr, null)

View File

@@ -197,13 +197,15 @@
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
/*
//Changeling mode stuff//Carbon
var/changeling_level = 0
var/list/absorbed_dna = list()
var/changeling_fakedeath = 0
var/chem_charges = 20.00
var/sting_range = 1
*/
var/datum/changeling/changeling = null
var/universal_speak = 0 // Set to 1 to enable the mob to speak to everyone -- TLE
var/obj/control_object // Hacking in to control objects -- TLE

View File

@@ -47,13 +47,11 @@
waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds)
waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
changelingdeathtime //timestamp when last changeling was killed
const/TIME_TO_GET_REVIVED = 3000
changelingdeath = 0
const/changeling_amount = 4
/datum/game_mode/changeling/announce()
world << "<B>The current game mode is - Changeling!</B>"
world << "<B>There is an alien changeling on the station. Do not let the changeling succeed!</B>"
world << "<B>There are alien changelings on the station. Do not let the changelings succeed!</B>"
/*/datum/game_mode/changeling/can_start()
for(var/mob/new_player/P in world)
@@ -70,8 +68,10 @@
possible_changelings -= player
if(possible_changelings.len>0)
for(var/i = 0, i < changeling_amount, i++)
if(!possible_changelings.len) break
var/datum/mind/changeling = pick(possible_changelings)
//possible_changelings-=changeling
possible_changelings -= changeling
changelings += changeling
modePlayer += changelings
return 1
@@ -148,6 +148,7 @@
/datum/game_mode/proc/greet_changeling(var/datum/mind/changeling, var/you_are=1)
if (you_are)
changeling.current << "<B>\red You are a changeling!</B>"
changeling.current << "<b>\red Use say \":g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them.</b>"
changeling.current << "<B>You must complete the following tasks:</B>"
var/obj_count = 1
@@ -157,7 +158,7 @@
return
/datum/game_mode/changeling/check_finished()
var/changelings_alive = 0
/* var/changelings_alive = 0
for(var/datum/mind/changeling in changelings)
if(!istype(changeling.current,/mob/living/carbon))
continue
@@ -175,7 +176,8 @@
if(world.time-changelingdeathtime > TIME_TO_GET_REVIVED)
return 1
else
return ..()
return ..()*/
return 0
/datum/game_mode/proc/grant_changeling_powers(mob/living/carbon/human/changeling_mob)
if (!istype(changeling_mob))
@@ -188,7 +190,7 @@
var/changeling_name
var/totalabsorbed = 0
if (changeling.current)
totalabsorbed = changeling.current.absorbed_dna.len - 1
totalabsorbed = changeling.current.changeling.absorbed_dna.len - 1
if(changeling.current)
changeling_name = "[changeling.current.real_name] (played by [changeling.key])"
@@ -212,3 +214,25 @@
else
world << "<B>The changeling has failed!<B>"
return 1
/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/changeling_fakedeath = 0
var/chem_charges = 20.00
var/sting_range = 1
var/changelingID = null
var/mob/living/host = null
/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")
for(var/mob/living/carbon/aChangeling in world)
if(aChangeling.changeling)
possibleIDs -= aChangeling.changeling.changelingID
if(possibleIDs.len)
changelingID = pick(possibleIDs)
else
changelingID = "[rand(1,1000)]"

View File

@@ -1,4 +1,7 @@
/mob/proc/make_lesser_changeling()
if(!changeling) changeling = new
changeling.host = src
src.verbs += /client/proc/changeling_lesser_transform
src.verbs += /client/proc/changeling_fakedeath
@@ -6,10 +9,13 @@
src.verbs += /client/proc/changeling_deaf_sting
src.verbs += /client/proc/changeling_silence_sting
src.changeling_level = 1
changeling.changeling_level = 1
return
/mob/proc/make_changeling()
if(!changeling) changeling = new
changeling.host = src
src.verbs += /client/proc/changeling_absorb_dna
src.verbs += /client/proc/changeling_transform
src.verbs += /client/proc/changeling_lesser_form
@@ -22,11 +28,11 @@
src.verbs += /client/proc/changeling_transformation_sting
src.verbs += /client/proc/changeling_boost_range
src.changeling_level = 2
if (!src.absorbed_dna)
src.absorbed_dna = list()
if (src.absorbed_dna.len == 0)
src.absorbed_dna[src.real_name] = src.dna
changeling.changeling_level = 2
if (!changeling.absorbed_dna)
changeling.absorbed_dna = list()
if (changeling.absorbed_dna.len == 0)
changeling.absorbed_dna[src.real_name] = src.dna
return
/mob/proc/make_greater_changeling()
@@ -51,6 +57,10 @@
set category = "Changeling"
set name = "Absorb DNA"
if(!usr.changeling)
usr << "\red You're not a changeling, something's wrong!"
return
if(usr.stat)
usr << "\red Not when we are incapacitated."
return
@@ -70,7 +80,7 @@
usr << "\red We must have a tighter grip to absorb this creature."
return
usr.chem_charges += 5
usr.changeling.chem_charges += 5
var/mob/living/carbon/human/T = M
@@ -100,9 +110,16 @@
usr.visible_message(text("\red <B>[usr] sucks the fluids from [T]!</B>"))
T << "\red <B>You have been absorbed by the changeling!</B>"
usr.absorbed_dna[T.real_name] = T.dna
usr.changeling.absorbed_dna[T.real_name] = T.dna
if(usr.nutrition < 400) usr.nutrition = min((usr.nutrition + T.nutrition), 400)
usr.chem_charges += 5
usr.changeling.chem_charges += 5
if(T.changeling)
if(T.changeling.absorbed_dna)
usr.changeling.absorbed_dna |= T.changeling.absorbed_dna //steal all their loot
T.changeling.absorbed_dna = list()
T.changeling.absorbed_dna[T.real_name] = T.dna
usr.changeling.chem_charges += T.changeling.chem_charges
T.changeling.chem_charges = 0
T.death(0)
T.real_name = "Unknown"
@@ -114,28 +131,33 @@
/client/proc/changeling_transform()
set category = "Changeling"
set name = "Transform (5)"
if(!usr.changeling)
usr << "\red You're not a changeling, something's wrong!"
return
if(usr.stat)
usr << "\red Not when we are incapacitated."
return
if (usr.absorbed_dna.len <= 0)
if (usr.changeling.absorbed_dna.len <= 0)
usr << "\red We have not yet absorbed any compatible DNA."
return
if(usr.chem_charges < 5)
if(usr.changeling.chem_charges < 5)
usr << "\red We don't have enough stored chemicals to do that!"
return
var/S = input("Select the target DNA: ", "Target DNA", null) in usr.absorbed_dna
var/S = input("Select the target DNA: ", "Target DNA", null) in usr.changeling.absorbed_dna
if (S == null)
return
usr.chem_charges -= 5
usr.changeling.chem_charges -= 5
usr.visible_message(text("\red <B>[usr] transforms!</B>"))
usr.dna = usr.absorbed_dna[S]
usr.dna = usr.changeling.absorbed_dna[S]
usr.real_name = S
updateappearance(usr, usr.dna.uni_identity)
domutcheck(usr, null)
@@ -151,15 +173,19 @@
set category = "Changeling"
set name = "Lesser Form (1)"
if(!usr.changeling)
usr << "\red You're not a changeling, something's wrong!"
return
if(usr.stat)
usr << "\red Not when we are incapacitated."
return
if(usr.chem_charges < 1)
if(usr.changeling.chem_charges < 1)
usr << "\red We don't have enough stored chemicals to do that!"
return
usr.chem_charges--
usr.changeling.chem_charges--
usr.remove_changeling_powers()
@@ -189,7 +215,7 @@
var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey(src)
O.dna = usr.dna
usr.dna = null
O.absorbed_dna = usr.absorbed_dna
O.changeling = usr.changeling
for(var/obj/T in usr)
del(T)
@@ -222,30 +248,34 @@
set category = "Changeling"
set name = "Transform (1)"
if(!usr.changeling)
usr << "\red You're not a changeling, something's wrong!"
return
if(usr.stat)
usr << "\red Not when we are incapacitated."
return
if (usr.absorbed_dna.len <= 0)
if (usr.changeling.absorbed_dna.len <= 0)
usr << "\red We have not yet absorbed any compatible DNA."
return
if(usr.chem_charges < 1)
if(usr.changeling.chem_charges < 1)
usr << "\red We don't have enough stored chemicals to do that!"
return
var/S = input("Select the target DNA: ", "Target DNA", null) in usr.absorbed_dna
var/S = input("Select the target DNA: ", "Target DNA", null) in usr.changeling.absorbed_dna
if (S == null)
return
usr.chem_charges -= 1
usr.changeling.chem_charges -= 1
usr.remove_changeling_powers()
usr.visible_message(text("\red <B>[usr] transforms!</B>"))
usr.dna = usr.absorbed_dna[S]
usr.dna = usr.changeling.absorbed_dna[S]
var/list/implants = list()
for (var/obj/item/weapon/implant/I in usr) //Still preserving implants
@@ -280,7 +310,7 @@
O.gender = MALE
O.dna = usr.dna
usr.dna = null
O.absorbed_dna = usr.absorbed_dna
O.changeling = usr.changeling
O.real_name = S
for(var/obj/T in usr)
@@ -312,21 +342,25 @@
set category = "Changeling"
set name = "Regenerative Stasis (20)"
if(!usr.changeling)
usr << "\red You're not a changeling, something's wrong!"
return
if(usr.stat == 2)
usr << "\red We are dead."
return
if(usr.chem_charges < 20)
if(usr.changeling.chem_charges < 20)
usr << "\red We don't have enough stored chemicals to do that!"
return
usr.chem_charges -= 20
usr.changeling.chem_charges -= 20
usr << "\blue We will regenerate our form."
usr.lying = 1
usr.canmove = 0
usr.changeling_fakedeath = 1
usr.changeling.changeling_fakedeath = 1
usr.remove_changeling_powers()
usr.emote("gasp")
@@ -351,10 +385,10 @@
usr << "\blue We have regenerated."
usr.visible_message(text("\red <B>[usr] appears to wake from the dead, having healed all wounds.</B>"))
usr.changeling_fakedeath = 0
if (usr.changeling_level == 1)
usr.changeling.changeling_fakedeath = 0
if (usr.changeling.changeling_level == 1)
usr.make_lesser_changeling()
else if (usr.changeling_level == 2)
else if (usr.changeling.changeling_level == 2)
usr.make_changeling()
return
@@ -364,18 +398,22 @@
set name = "Ranged Sting (10)"
set desc="Your next sting ability can be used against targets 3 squares away."
if(!usr.changeling)
usr << "\red You're not a changeling, something's wrong!"
return
if(usr.stat)
usr << "\red Not when we are incapacitated."
return
if(usr.chem_charges < 10)
if(usr.changeling.chem_charges < 10)
usr << "\red We don't have enough stored chemicals to do that!"
return
usr.chem_charges -= 10
usr.changeling.chem_charges -= 10
usr << "\blue Your throat adjusts to launch the sting."
usr.sting_range = 3
usr.changeling.sting_range = 3
usr.verbs -= /client/proc/changeling_boost_range
@@ -389,8 +427,12 @@
set name = "Silence sting (10)"
set desc="Sting target"
if(!usr.changeling)
usr << "\red You're not a changeling, something's wrong!"
return
var/list/victims = list()
for(var/mob/living/carbon/C in oview(usr:sting_range))
for(var/mob/living/carbon/C in oview(usr.changeling.sting_range))
victims += C
var/mob/T = input(usr, "Who do you wish to sting?") as null | anything in victims
if(T)
@@ -399,17 +441,20 @@
usr << "\red Not when we are incapacitated."
return
if(usr.chem_charges < 10)
if(usr.changeling.chem_charges < 10)
usr << "\red We don't have enough stored chemicals to do that!"
return
usr.chem_charges -= 10
usr.sting_range = 1
usr.changeling.chem_charges -= 10
usr.changeling.sting_range = 1
usr << "\blue We stealthily sting [T]."
T << "You feel a small prick and a burning sensation in your throat."
if(!T.changeling)
T << "You feel a small prick and a burning sensation in your throat."
T.silent += 30
else
T << "You feel a small prick."
usr.verbs -= /client/proc/changeling_silence_sting
@@ -423,8 +468,12 @@
set name = "Blind sting (20)"
set desc="Sting target"
if(!usr.changeling)
usr << "\red You're not a changeling, something's wrong!"
return
var/list/victims = list()
for(var/mob/living/carbon/C in oview(usr.sting_range))
for(var/mob/living/carbon/C in oview(usr.changeling.sting_range))
victims += C
var/mob/T = input(usr, "Who do you wish to sting?") as null | anything in victims
if(T)
@@ -432,12 +481,12 @@
usr << "\red Not when we are incapacitated."
return
if(usr.chem_charges < 20)
if(usr.changeling.chem_charges < 20)
usr << "\red We don't have enough stored chemicals to do that!"
return
usr.chem_charges -= 20
usr.sting_range = 1
usr.changeling.chem_charges -= 20
usr.changeling.sting_range = 1
usr << "\blue We stealthily sting [T]."
@@ -452,6 +501,8 @@
spawn(5)
del(B)
T.canmove = 1
if(!T.changeling)
T << text("\blue Your eyes cry out in pain!")
T.disabilities |= 1
spawn(300)
@@ -471,8 +522,12 @@
set name = "Deaf sting (5)"
set desc="Sting target:"
if(!usr.changeling)
usr << "\red You're not a changeling, something's wrong!"
return
var/list/victims = list()
for(var/mob/living/carbon/C in oview(usr.sting_range))
for(var/mob/living/carbon/C in oview(usr.changeling.sting_range))
victims += C
var/mob/T = input(usr, "Who do you wish to sting?") as null | anything in victims
@@ -481,15 +536,16 @@
usr << "\red Not when we are incapacitated."
return
if(usr.chem_charges < 5)
if(usr.changeling.chem_charges < 5)
usr << "\red We don't have enough stored chemicals to do that!"
return
usr.chem_charges -= 5
usr.sting_range = 1
usr.changeling.chem_charges -= 5
usr.changeling.sting_range = 1
usr << "\blue We stealthily sting [T]."
if(!T.changeling)
T.sdisabilities |= 4
spawn(300)
T.sdisabilities &= ~4
@@ -506,8 +562,12 @@
set name = "Paralysis sting (30)"
set desc="Sting target"
if(!usr.changeling)
usr << "\red You're not a changeling, something's wrong!"
return
var/list/victims = list()
for(var/mob/living/carbon/C in oview(usr.sting_range))
for(var/mob/living/carbon/C in oview(usr.changeling.sting_range))
victims += C
var/mob/T = input(usr, "Who do you wish to sting?") as null | anything in victims
@@ -517,18 +577,22 @@
usr << "\red Not when we are incapacitated."
return
if(usr.chem_charges < 30)
if(usr.changeling.chem_charges < 30)
usr << "\red We don't have enough stored chemicals to do that!"
return
usr.chem_charges -= 30
usr.sting_range = 1
usr.changeling.chem_charges -= 30
usr.changeling.sting_range = 1
usr << "\blue We stealthily sting [T]."
if(!T.changeling)
T << "You feel a small prick and a burning sensation."
if (T.reagents)
T.reagents.add_reagent("zombiepowder", 20)
else
T << "You feel a small prick."
usr.verbs -= /client/proc/changeling_paralysis_sting
@@ -542,8 +606,12 @@
set name = "Transformation sting (30)"
set desc="Sting target"
if(!usr.changeling)
usr << "\red You're not a changeling, something's wrong!"
return
var/list/victims = list()
for(var/mob/living/carbon/C in oview(usr.sting_range))
for(var/mob/living/carbon/C in oview(usr.changeling.sting_range))
victims += C
var/mob/T = input(usr, "Who do you wish to sting?") as null | anything in victims
@@ -552,7 +620,7 @@
usr << "\red Not when we are incapacitated."
return
if(usr.chem_charges < 30)
if(usr.changeling.chem_charges < 30)
usr << "\red We don't have enough stored chemicals to do that!"
return
@@ -560,19 +628,20 @@
usr << "\red We can't transform that target!"
return
var/S = input("Select the target DNA: ", "Target DNA", null) in usr.absorbed_dna
var/S = input("Select the target DNA: ", "Target DNA", null) in usr.changeling.absorbed_dna
if (S == null)
return
usr.chem_charges -= 30
usr.sting_range = 1
usr.changeling.chem_charges -= 30
usr.changeling.sting_range = 1
usr << "\blue We stealthily sting [T]."
if(!T.changeling)
T.visible_message(text("\red <B>[T] transforms!</B>"))
T.dna = usr.absorbed_dna[S]
T.dna = usr.changeling.absorbed_dna[S]
T.real_name = S
updateappearance(T, T.dna.uni_identity)
domutcheck(T, null)

View File

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

View File

@@ -5,10 +5,7 @@
set name = "Blind"
set desc = "This spell temporarly blinds a single person and does not require wizard garb."
var/list/victims = list()
for(var/mob/living/carbon/C in oview(usr.sting_range))
victims += C
var/mob/M = input(usr, "Who do you wish to sting?") as null | anything in victims
var/mob/M = input(usr, "Who do you wish to blind?") as mob in oview()
if(M)
if(usr.stat)

View File

@@ -194,7 +194,7 @@ MASS SPECTROMETER
O.show_message(text("\red [] has analyzed []'s vitals!", user, M), 1)
//Foreach goto(67)
var/fake_oxy = max(rand(1,40), M.oxyloss, (300 - (M.toxloss + M.fireloss + M.bruteloss)))
if(M.changeling_fakedeath || M.reagents && M.reagents.has_reagent("zombiepowder"))
if((M.reagents && M.reagents.has_reagent("zombiepowder")) || (M.changeling && M.changeling.changeling_fakedeath))
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.toxloss > 50 ? "\red [M.toxloss]" : M.toxloss, M.fireloss > 50 ? "\red[M.fireloss]" : M.fireloss, M.bruteloss > 50 ? "\red[M.bruteloss]" : M.bruteloss), 1)
else
@@ -202,7 +202,7 @@ MASS SPECTROMETER
user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", M.oxyloss > 50 ? "\red [M.oxyloss]" : M.oxyloss, M.toxloss > 50 ? "\red [M.toxloss]" : M.toxloss, M.fireloss > 50 ? "\red[M.fireloss]" : M.fireloss, M.bruteloss > 50 ? "\red[M.bruteloss]" : M.bruteloss), 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)
if(M.changeling_fakedeath || M.reagents && M.reagents.has_reagent("zombiepowder"))
if((M.changeling && M.changeling.changeling_fakedeath) || (M.reagents && M.reagents.has_reagent("zombiepowder")))
user.show_message(text("\blue [] | [] | [] | []", fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.toxloss > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.fireloss > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.bruteloss > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
else
user.show_message(text("\blue [] | [] | [] | []", M.oxyloss > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.toxloss > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.fireloss > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.bruteloss > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)

View File

@@ -1620,7 +1620,7 @@
dat += "<td>Monkey</td>"
if(istype(M, /mob/living/carbon/alien))
dat += "<td>Alien</td>"
dat += {"<td>[M.client]</font>" : "No client")]</td>
dat += {"<td>[M.client?"[M.client]":"No client"]</td>
<td align=center><A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>X</A></td>
<td align=center><A href='?src=\ref[usr];priv_msg=\ref[M]'>PM</A></td>
"}
@@ -1665,7 +1665,7 @@
dat += "<td>Monkey</td>"
if(isalien(M))
dat += "<td>Alien</td>"
dat += {"<td>[(M.client ? "[M.client]</font>" : "No client")]</td>
dat += {"<td>[(M.client ? "[M.client]" : "No client")]</td>
<td align=center><A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>X</A></td>
<td align=center><A href='?src=\ref[usr];priv_msg=\ref[M]'>PM</A></td>
"}

View File

@@ -106,7 +106,7 @@
if(100 to 200)
usr << "\red [src] is twitching ever so slightly."
if (src.stat == 2 || src.changeling_fakedeath == 1)
if (src.stat == 2 || (changeling && changeling.changeling_fakedeath == 1))
usr << "\red [src] is limp and unresponsive, a dull lifeless look in [t_his] eyes."
else
if (src.bruteloss)

View File

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

View File

@@ -290,7 +290,7 @@
return null
update_canmove()
if(paralysis || stunned || weakened || buckled || changeling_fakedeath) canmove = 0
if(paralysis || stunned || weakened || buckled || (changeling && changeling.changeling_fakedeath)) canmove = 0
else canmove = 1
handle_breath(datum/gas_mixture/breath)
@@ -685,7 +685,7 @@
if (silent)
silent--
if (paralysis || stunned || weakened || changeling_fakedeath) //Stunned etc.
if (paralysis || stunned || weakened || (changeling && changeling.changeling_fakedeath)) //Stunned etc.
if (stunned > 0)
stunned--
stat = 0
@@ -1021,8 +1021,8 @@
handle_changeling()
if (mind)
if (mind.special_role == "Changeling")
chem_charges = between(0, (max((0.9 - (chem_charges / 50)), 0.1) + chem_charges), 50)
if (mind.special_role == "Changeling" && changeling)
changeling.chem_charges = between(0, (max((0.9 - (changeling.chem_charges / 50)), 0.1) + changeling.chem_charges), 50)
/*

View File

@@ -432,7 +432,7 @@
src.stat = 2
else
if (src.paralysis || src.stunned || src.weakened || changeling_fakedeath) //Stunned etc.
if (src.paralysis || src.stunned || src.weakened || (changeling && changeling.changeling_fakedeath)) //Stunned etc.
if (src.stunned > 0)
src.stunned = 0
src.stat = 0

View File

@@ -246,7 +246,7 @@
return null
update_canmove()
if(paralysis || stunned || weakened || buckled || changeling_fakedeath) canmove = 0
if(paralysis || stunned || weakened || buckled || (changeling && changeling.changeling_fakedeath)) canmove = 0
else canmove = 1
handle_breath(datum/gas_mixture/breath)
@@ -420,7 +420,7 @@
if (src.stat != 2) //Alive.
if (src.paralysis || src.stunned || src.weakened || changeling_fakedeath) //Stunned etc.
if (src.paralysis || src.stunned || src.weakened || (changeling && changeling.changeling_fakedeath)) //Stunned etc.
if (src.stunned > 0)
src.stunned--
src.stat = 0
@@ -608,5 +608,5 @@
handle_changeling()
if (mind)
if (mind.special_role == "Changeling")
src.chem_charges = between(0, (max((0.9 - (chem_charges / 50)), 0.1) + chem_charges), 50)
if (mind.special_role == "Changeling" && changeling)
changeling.chem_charges = between(0, (max((0.9 - (changeling.chem_charges / 50)), 0.1) + changeling.chem_charges), 50)

View File

@@ -461,8 +461,8 @@
stat(null, text("Move Mode: []", m_intent))
if(client && mind)
if (client.statpanel == "Status")
if (mind.special_role == "Changeling")
stat("Chemical Storage", chem_charges)
if (mind.special_role == "Changeling" && changeling)
stat("Chemical Storage", changeling.chem_charges)
return
/mob/living/carbon/monkey/update_clothing()

View File

@@ -86,6 +86,7 @@
":t" = "Syndicate",
":d" = "Mining",
":q" = "Cargo",
":g" = "changeling",
//kinda localization -- rastaf0
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
@@ -104,6 +105,7 @@
":<3A>" = "Syndicate",
":<3A>" = "Mining",
":<3A>" = "Cargo",
":<3A>" = "changeling",
)
message_mode = keys[channel_prefix]
@@ -145,6 +147,7 @@
message += "Z"
*/
var/list/obj/item/used_radios = new
switch (message_mode)
if ("headset")
if (src:ears)
@@ -215,7 +218,13 @@
used_radios += src:radio
message_range = 1
italics = 1
/////SPECIAL HEADSETS START
if("changeling")
if(src.changeling)
for(var/mob/living/carbon/aChangeling in world)
if(aChangeling.changeling)
aChangeling << "<i><font color=#800080><b>[gender=="male"?"Mr.":"Mrs."] [changeling.changelingID]:</b> [message]</font></i>"
return
////SPECIAL HEADSETS START
else
//world << "SPECIAL HEADSETS"
if (message_mode in radiochannels)