mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-01-05 15:03:48 +00:00
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:
@@ -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
|
||||
@@ -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."
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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))
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user