Bugfixes:

- Wizards and Changeling stings can no longer select ghosts.
     - AIs can no longer change their icon if they're out of power or dead.
     - PC Metroids can latch onto cyborgs, but they won't actually do anything. NPC Metroids simply won't ever latch onto cyborgs (but they will attack them if provoked!)

Changes:
     - Gave Metroids a slightly longer attack delay.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1988 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
vageyenaman@gmail.com
2011-08-07 02:00:48 +00:00
parent d6c1fc48cb
commit ba4a214191
5 changed files with 265 additions and 206 deletions

View File

@@ -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 <B>[T] transforms!</B>"))
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 <B>[T] transforms!</B>"))
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
spawn(5)
usr.verbs += /client/proc/changeling_transformation_sting
return

View File

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

View File

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

View File

@@ -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 <i>[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")]...</i>"
sleep(rand(15,45))

View File

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