mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-01-02 13:34:49 +00:00
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:
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)]"
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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]°C ([M.bodytemperature*1.8-459.67]°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)
|
||||
|
||||
@@ -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>
|
||||
"}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user