diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm
index ad2ca8a30e7..00eb5725f7b 100644
--- a/code/game/gamemodes/changeling/changeling_powers.dm
+++ b/code/game/gamemodes/changeling/changeling_powers.dm
@@ -384,172 +384,202 @@
return
-/client/proc/changeling_silence_sting(mob/T as mob in oview(usr.sting_range))
+/client/proc/changeling_silence_sting()
set category = "Changeling"
set name = "Silence sting (10)"
set desc="Sting target"
- if(usr.stat)
- usr << "\red Not when we are incapacitated."
+ var/list/victims = list()
+ for(var/mob/living/carbon/C in oview(usr:sting_range))
+ victims += C
+ var/mob/T = input(usr, "Who do you wish to sting?") as null | anything in victims
+ if(T)
+
+ if(usr.stat)
+ usr << "\red Not when we are incapacitated."
+ return
+
+ if(usr.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 << "\blue We stealthily sting [T]."
+ T << "You feel a small prick and a burning sensation in your throat."
+
+ T.silent += 30
+
+ usr.verbs -= /client/proc/changeling_silence_sting
+
+ spawn(5)
+ usr.verbs += /client/proc/changeling_silence_sting
+
return
- if(usr.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 << "\blue We stealthily sting [T]."
- T << "You feel a small prick and a burning sensation in your throat."
-
- T.silent += 30
-
- usr.verbs -= /client/proc/changeling_silence_sting
-
- spawn(5)
- usr.verbs += /client/proc/changeling_silence_sting
-
- return
-
-/client/proc/changeling_blind_sting(mob/T as mob in oview(usr.sting_range))
+/client/proc/changeling_blind_sting()
set category = "Changeling"
set name = "Blind sting (20)"
set desc="Sting target"
- if(usr.stat)
- usr << "\red Not when we are incapacitated."
+ var/list/victims = list()
+ for(var/mob/living/carbon/C in oview(usr.sting_range))
+ victims += C
+ var/mob/T = input(usr, "Who do you wish to sting?") as null | anything in victims
+ if(T)
+ if(usr.stat)
+ usr << "\red Not when we are incapacitated."
+ return
+
+ if(usr.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 << "\blue We stealthily sting [T]."
+
+ var/obj/overlay/B = new /obj/overlay( T.loc )
+ B.icon_state = "blspell"
+ B.icon = 'wizard.dmi'
+ B.name = "spell"
+ B.anchored = 1
+ B.density = 0
+ B.layer = 4
+ T.canmove = 0
+ spawn(5)
+ del(B)
+ T.canmove = 1
+ T << text("\blue Your eyes cry out in pain!")
+ T.disabilities |= 1
+ spawn(300)
+ T.disabilities &= ~1
+ T.eye_blind = 10
+ T.eye_blurry = 20
+
+ usr.verbs -= /client/proc/changeling_blind_sting
+
+ spawn(5)
+ usr.verbs += /client/proc/changeling_blind_sting
+
return
- if(usr.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 << "\blue We stealthily sting [T]."
-
- var/obj/overlay/B = new /obj/overlay( T.loc )
- B.icon_state = "blspell"
- B.icon = 'wizard.dmi'
- B.name = "spell"
- B.anchored = 1
- B.density = 0
- B.layer = 4
- T.canmove = 0
- spawn(5)
- del(B)
- T.canmove = 1
- T << text("\blue Your eyes cry out in pain!")
- T.disabilities |= 1
- spawn(300)
- T.disabilities &= ~1
- T.eye_blind = 10
- T.eye_blurry = 20
-
- usr.verbs -= /client/proc/changeling_blind_sting
-
- spawn(5)
- usr.verbs += /client/proc/changeling_blind_sting
-
- return
-
-/client/proc/changeling_deaf_sting(mob/T as mob in oview(usr.sting_range))
+/client/proc/changeling_deaf_sting()
set category = "Changeling"
set name = "Deaf sting (5)"
set desc="Sting target:"
- if(usr.stat)
- usr << "\red Not when we are incapacitated."
+ var/list/victims = list()
+ for(var/mob/living/carbon/C in oview(usr.sting_range))
+ victims += C
+ var/mob/T = input(usr, "Who do you wish to sting?") as null | anything in victims
+
+ if(T)
+ if(usr.stat)
+ usr << "\red Not when we are incapacitated."
+ return
+
+ if(usr.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 << "\blue We stealthily sting [T]."
+
+ T.sdisabilities |= 4
+ spawn(300)
+ T.sdisabilities &= ~4
+
+ usr.verbs -= /client/proc/changeling_deaf_sting
+
+ spawn(5)
+ usr.verbs += /client/proc/changeling_deaf_sting
+
return
- if(usr.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 << "\blue We stealthily sting [T]."
-
- T.sdisabilities |= 4
- spawn(300)
- T.sdisabilities &= ~4
-
- usr.verbs -= /client/proc/changeling_deaf_sting
-
- spawn(5)
- usr.verbs += /client/proc/changeling_deaf_sting
-
- return
-
-/client/proc/changeling_paralysis_sting(mob/T as mob in oview(usr.sting_range))
+/client/proc/changeling_paralysis_sting()
set category = "Changeling"
set name = "Paralysis sting (30)"
set desc="Sting target"
- if(usr.stat)
- usr << "\red Not when we are incapacitated."
+ var/list/victims = list()
+ for(var/mob/living/carbon/C in oview(usr.sting_range))
+ victims += C
+ var/mob/T = input(usr, "Who do you wish to sting?") as null | anything in victims
+
+ if(T)
+
+ if(usr.stat)
+ usr << "\red Not when we are incapacitated."
+ return
+
+ if(usr.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 << "\blue We stealthily sting [T]."
+ T << "You feel a small prick and a burning sensation."
+
+ if (T.reagents)
+ T.reagents.add_reagent("zombiepowder", 20)
+
+ usr.verbs -= /client/proc/changeling_paralysis_sting
+
+ spawn(5)
+ usr.verbs += /client/proc/changeling_paralysis_sting
+
return
- if(usr.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 << "\blue We stealthily sting [T]."
- T << "You feel a small prick and a burning sensation."
-
- if (T.reagents)
- T.reagents.add_reagent("zombiepowder", 20)
-
- usr.verbs -= /client/proc/changeling_paralysis_sting
-
- spawn(5)
- usr.verbs += /client/proc/changeling_paralysis_sting
-
- return
-
-/client/proc/changeling_transformation_sting(mob/T as mob in oview(usr.sting_range))
+/client/proc/changeling_transformation_sting()
set category = "Changeling"
set name = "Transformation sting (30)"
set desc="Sting target"
- if(usr.stat)
- usr << "\red Not when we are incapacitated."
- return
+ var/list/victims = list()
+ for(var/mob/living/carbon/C in oview(usr.sting_range))
+ victims += C
+ var/mob/T = input(usr, "Who do you wish to sting?") as null | anything in victims
- if(usr.chem_charges < 30)
- usr << "\red We don't have enough stored chemicals to do that!"
- return
+ if(T)
+ if(usr.stat)
+ usr << "\red Not when we are incapacitated."
+ return
- if(T.stat != 2 || (T.mutations & HUSK) || (!ishuman(T) && !ismonkey(T)))
- usr << "\red We can't transform that target!"
- return
+ if(usr.chem_charges < 30)
+ 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
+ if(T.stat != 2 || (T.mutations & HUSK) || (!ishuman(T) && !ismonkey(T)))
+ usr << "\red We can't transform that target!"
+ return
- if (S == null)
- return
+ var/S = input("Select the target DNA: ", "Target DNA", null) in usr.absorbed_dna
- usr.chem_charges -= 30
- usr.sting_range = 1
+ if (S == null)
+ return
- usr << "\blue We stealthily sting [T]."
+ usr.chem_charges -= 30
+ usr.sting_range = 1
- T.visible_message(text("\red [T] transforms!"))
+ usr << "\blue We stealthily sting [T]."
- T.dna = usr.absorbed_dna[S]
- T.real_name = S
- updateappearance(T, T.dna.uni_identity)
- domutcheck(T, null)
+ T.visible_message(text("\red [T] transforms!"))
- usr.verbs -= /client/proc/changeling_transformation_sting
+ T.dna = usr.absorbed_dna[S]
+ T.real_name = S
+ updateappearance(T, T.dna.uni_identity)
+ domutcheck(T, null)
- spawn(5)
- usr.verbs += /client/proc/changeling_transformation_sting
+ usr.verbs -= /client/proc/changeling_transformation_sting
- return
\ No newline at end of file
+ spawn(5)
+ usr.verbs += /client/proc/changeling_transformation_sting
+
+ return
\ No newline at end of file
diff --git a/code/game/gamemodes/wizard/spells.dm b/code/game/gamemodes/wizard/spells.dm
index c3b16b19cba..e83c54857e6 100644
--- a/code/game/gamemodes/wizard/spells.dm
+++ b/code/game/gamemodes/wizard/spells.dm
@@ -1,38 +1,45 @@
//BLIND
-/client/proc/blind(mob/M as mob in oview())
+/client/proc/blind()
set category = "Spells"
set name = "Blind"
set desc = "This spell temporarly blinds a single person and does not require wizard garb."
- if(usr.stat)
- src << "Not when you are incapacitated."
+
+ 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
+
+ if(M)
+ if(usr.stat)
+ src << "Not when you are incapacitated."
+ return
+ // if(!usr.casting()) return
+ usr.verbs -= /client/proc/blind
+ spawn(300)
+ usr.verbs += /client/proc/blind
+
+ usr.whisper("STI KALY")
+ // usr.spellvoice()
+
+ var/obj/overlay/B = new /obj/overlay( M.loc )
+ B.icon_state = "blspell"
+ B.icon = 'wizard.dmi'
+ B.name = "spell"
+ B.anchored = 1
+ B.density = 0
+ B.layer = 4
+ M.canmove = 0
+ spawn(5)
+ del(B)
+ M.canmove = 1
+ M << text("\blue Your eyes cry out in pain!")
+ M.disabilities |= 1
+ spawn(300)
+ M.disabilities &= ~1
+ M.eye_blind = 10
+ M.eye_blurry = 20
return
-// if(!usr.casting()) return
- usr.verbs -= /client/proc/blind
- spawn(300)
- usr.verbs += /client/proc/blind
-
- usr.whisper("STI KALY")
-// usr.spellvoice()
-
- var/obj/overlay/B = new /obj/overlay( M.loc )
- B.icon_state = "blspell"
- B.icon = 'wizard.dmi'
- B.name = "spell"
- B.anchored = 1
- B.density = 0
- B.layer = 4
- M.canmove = 0
- spawn(5)
- del(B)
- M.canmove = 1
- M << text("\blue Your eyes cry out in pain!")
- M.disabilities |= 1
- spawn(300)
- M.disabilities &= ~1
- M.eye_blind = 10
- M.eye_blurry = 20
- return
//MAGIC MISSILE
@@ -215,7 +222,7 @@
//KILL
-/mob/proc/kill(mob/M as mob in oview(1))
+/mob/proc/kill(mob/living/M as mob in oview(1))
set category = "Spells"
set name = "Disintegrate"
set desc = "This spell instantly kills somebody adjacent to you with the vilest of magick."
@@ -482,7 +489,7 @@
//BODY SWAP /N
-/mob/proc/swap(mob/M as mob in oview())
+/mob/proc/swap(mob/living/M as mob in oview())
set category = "Spells"
set name = "Mind Transfer"
set desc = "This spell allows the user to switch bodies with a target."
diff --git a/code/modules/mob/living/carbon/metroid/life.dm b/code/modules/mob/living/carbon/metroid/life.dm
index d29d6a3cb09..9d873c29886 100644
--- a/code/modules/mob/living/carbon/metroid/life.dm
+++ b/code/modules/mob/living/carbon/metroid/life.dm
@@ -259,13 +259,23 @@
if(Target in view(1,src))
+ if(istype(Target, /mob/living/silicon))
+ if(!Atkcool)
+ spawn()
+ Atkcool = 1
+ sleep(15)
+ Atkcool = 0
+
+ if(get_obstacle_ok(Target))
+ Target.attack_metroid(src)
+ return
if(prob(80) && !Target.lying)
if(Target.client && Target.health >= rand(10,30))
if(!Atkcool)
spawn()
Atkcool = 1
- sleep(10)
+ sleep(25)
Atkcool = 0
if(get_obstacle_ok(Target))
@@ -276,11 +286,12 @@
step_to(src, Target)
else
-
- Feedon(Target)
+ if(!Atkcool)
+ Feedon(Target)
else
- Feedon(Target)
+ if(!Atkcool)
+ Feedon(Target)
else
if(Target in view(30, src))
diff --git a/code/modules/mob/living/carbon/metroid/powers.dm b/code/modules/mob/living/carbon/metroid/powers.dm
index 8b5feedc27c..1712cd1e3b8 100644
--- a/code/modules/mob/living/carbon/metroid/powers.dm
+++ b/code/modules/mob/living/carbon/metroid/powers.dm
@@ -10,7 +10,7 @@
return
var/list/choices = list()
- for(var/mob/living/carbon/C in view(1,src))
+ for(var/mob/living/C in view(1,src))
if(C!=src && !istype(C,/mob/living/carbon/metroid))
choices += C
@@ -18,7 +18,7 @@
if(!M) return
if(M in view(1, src))
- if(istype(M, /mob/living/carbon) && !istype(src, /mob/living/carbon/brain))
+ if(!istype(src, /mob/living/carbon/brain))
if(!istype(M, /mob/living/carbon/metroid))
if(stat != 2)
if(health > -70)
@@ -57,7 +57,7 @@
while(Victim && M.health > -70 && stat != 2)
// M.canmove = 0
canmove = 0
- if(prob(15) && M.client)
+ if(prob(15) && M.client && istype(M, /mob/living/carbon))
M << "\red [pick("You can feel your body becoming weak!", \
"You feel like you're about to die!", \
"You feel every part of your body screaming in agony!", \
@@ -66,54 +66,62 @@
"You feel extremely weak!", \
"A sharp, deep pain bathes every inch of your body!")]"
- Victim.cloneloss += rand(1,10)
- Victim.toxloss += rand(1,2)
- if(Victim.health <= 0)
- Victim.toxloss += rand(2,4)
+ if(istype(M, /mob/living/carbon))
+ Victim.cloneloss += rand(1,10)
+ Victim.toxloss += rand(1,2)
+ if(Victim.health <= 0)
+ Victim.toxloss += rand(2,4)
- if(toxloss > 0)
- toxloss = max(0, toxloss-10)
+ if(toxloss > 0)
+ toxloss = max(0, toxloss-10)
- if(oxyloss > 0)
- oxyloss = max(0, oxyloss-10)
+ if(oxyloss > 0)
+ oxyloss = max(0, oxyloss-10)
- if(bruteloss > 0)
- bruteloss = max(0, bruteloss-10)
+ if(bruteloss > 0)
+ bruteloss = max(0, bruteloss-10)
- if(fireloss > 0)
- fireloss = max(0, fireloss-10)
+ if(fireloss > 0)
+ fireloss = max(0, fireloss-10)
- if(cloneloss > 0)
- cloneloss = max(0, cloneloss-10)
+ if(cloneloss > 0)
+ cloneloss = max(0, cloneloss-10)
- if(Victim)
- for(var/mob/living/carbon/metroid/Metroid in view(1,M))
- if(Metroid.Victim == M && Metroid != src)
- Metroid.Feedstop()
+ if(Victim)
+ for(var/mob/living/carbon/metroid/Metroid in view(1,M))
+ if(Metroid.Victim == M && Metroid != src)
+ Metroid.Feedstop()
- if(toxloss<0) toxloss = 0
- if(oxyloss<0) oxyloss = 0
- if(bruteloss<0) bruteloss = 0
- if(fireloss<0) fireloss = 0
- if(cloneloss<0) cloneloss = 0
+ if(toxloss<0) toxloss = 0
+ if(oxyloss<0) oxyloss = 0
+ if(bruteloss<0) bruteloss = 0
+ if(fireloss<0) fireloss = 0
+ if(cloneloss<0) cloneloss = 0
- nutrition += rand(5,20)
- if(nutrition >= lastnut + 100)
- if(prob(20))
- lastnut = nutrition
- powerlevel++
- if(powerlevel > 10)
- powerlevel = 10
+ nutrition += rand(5,20)
+ if(nutrition >= lastnut + 100)
+ if(prob(20))
+ lastnut = nutrition
+ powerlevel++
+ if(powerlevel > 10)
+ powerlevel = 10
+
+ if(istype(src, /mob/living/carbon/metroid/adult))
+ if(nutrition > 1200)
+ nutrition = 1200
+ else
+ if(nutrition > 1000)
+ nutrition = 1000
+
+ Victim.updatehealth()
+ updatehealth()
- if(istype(src, /mob/living/carbon/metroid/adult))
- if(nutrition > 1200)
- nutrition = 1200
else
- if(nutrition > 1000)
- nutrition = 1000
-
- Victim.updatehealth()
- updatehealth()
+ if(prob(25))
+ src << "\red [pick("This subject is incompatable", \
+ "This subject does not have a life energy", "This subject is empty", \
+ "I am not satisified", "I can not feed from this subject", \
+ "I do not feel nurished", "This subject is not food")]..."
sleep(rand(15,45))
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index a4a8a25a79f..c599632ca30 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -63,6 +63,9 @@
/mob/living/silicon/ai/verb/pick_icon()
set category = "AI Commands"
set name = "Change AI Core Display"
+ if(stat || aiRestorePowerRoutine)
+ return
+
//if(icon_state == initial(icon_state))
var/icontype = input("Please, select a display!", "AI", null/*, null*/) in list("Clown", "HAL9000", "Monochrome", "Blue", "HAL9000 Mark2", "Inverted", "Firewall", "Green")