Borer and meme fixes and changes (#3420)

-cleans up meme code by removing relative pathing and \red's
-makes synths immune to borer invasion and buffs them a bit
This commit is contained in:
Alberyk
2017-09-13 19:33:36 -03:00
committed by Lohikar
parent e28c29a551
commit e2a2c56f47
4 changed files with 107 additions and 73 deletions

View File

@@ -21,16 +21,13 @@ var/controlling
/mob/living/carbon/var/list/parasites = list()
/mob/living/parasite
var
mob/living/carbon/host // the host that this parasite occupies
Login()
..()
// make the client see through the host instead
client.eye = host
client.perspective = EYE_PERSPECTIVE
var/mob/living/carbon/host // the host that this parasite occupies
/mob/living/parasite/Login()
..()
// make the client see through the host instead
client.eye = host
client.perspective = EYE_PERSPECTIVE
/mob/living/parasite/proc/enter_host(mob/living/carbon/host)
// by default, parasites can't share a body with other life forms
@@ -57,7 +54,6 @@ var/controlling
// ============
// Memes use points for many actions
/mob/living/parasite/meme/var/meme_points = 100
/mob/living/parasite/meme/var/dormant = 0
@@ -82,16 +78,16 @@ var/controlling
// if there are sleep toxins in the host's body, that's bad
if(host.reagents.has_reagent("stoxin"))
src << "\red <b>Something in your host's blood makes you lose consciousness.. you fade away..</b>"
src << "<span class='danger'>Something in your host's blood makes you lose consciousness, you fade away...</span>"
src.death()
return
// a host without brain is no good
if(!host.mind)
src << "\red <b>Your host has no mind.. you fade away..</b>"
src << "<span class='danger'>Your host has no mind, you fade away...</span>"
src.death()
return
if(host.stat == 2)
src << "\red <b>Your host has died.. you fade away..</b>"
src << "<span class='danger'>Your host has died, you fade away...</span>"
src.death()
return
@@ -108,10 +104,10 @@ var/controlling
// When a meme speaks, it speaks through its host
/mob/living/parasite/meme/say(message as text)
if(dormant)
usr << "\red You're dormant!"
src << "<span class='notice'>You are dormant! </span>"
return
if(!host)
usr << "\red You can't speak without host!"
usr << "<span class='notice'>You can't speak without a host! </span>"
return
return host.say(message)
@@ -119,10 +115,10 @@ var/controlling
// Same as speak, just with whisper
/mob/living/parasite/meme/whisper(message as text)
if(dormant)
usr << "\red You're dormant!"
src << "<span class='notice'>You are dormant! </span>"
return
if(!host)
usr << "\red You can't speak without host!"
usr << "<span class='notice'>You can't speak without a host! </span>"
return
return host.whisper(message)
@@ -131,13 +127,12 @@ var/controlling
/mob/living/parasite/meme/me_verb(message as text)
set name = "Me"
if(dormant)
usr << "\red You're dormant!"
src << "<span class='notice'>You are dormant! </span>"
return
if(!host)
usr << "\red You can't emote without host!"
usr << "<span class='notice'>You can't speak without a host! </span>"
return
return host.me_verb(message)
@@ -151,10 +146,10 @@ var/controlling
// Try to use amount points, return 1 if successful
/mob/living/parasite/meme/proc/use_points(amount)
if(dormant)
usr << "\red You're dormant!"
src << "<span class='notice'>You are dormant! </span>"
return
if(src.meme_points < amount)
src << "<b>* You don't have enough meme points(need [amount]).</b>"
src << "<span class='notice'>You don't have enough meme points(need [amount]).</span>"
return 0
src.meme_points -= round(amount)
@@ -167,7 +162,7 @@ var/controlling
// Can only affect other mobs thant he host if not blinded
if(blinded)
candidates = list()
src << "\red You are blinded, so you can not affect mobs other than your host."
src << "<span class='notice'>You are blinded, so you can not affect mobs other than your host.</span>"
else
candidates = indoctrinated.Copy()
@@ -198,7 +193,7 @@ var/controlling
/mob/living/parasite/meme/verb/Thought(mob/M as mob in oview())
set category = "Meme"
set name = "Thought(150)"
set desc = "Implants a thought into the target, making them think they heard someone talk."
set desc = "Implants a thought into the target."
if(!use_points(150)) return
@@ -247,14 +242,14 @@ var/controlling
spawn
// backup the host incase we switch hosts after using the verb
//var/mob/host = src.host
host << "\red Your tongue feels numb.. You lose your ability to speak."
usr << "\red Your host can't speak anymore."
host << "<span class='danger'>Your tongue feels numb.. You lose your ability to speak.</span>"
usr << "<span class='notice'>Your host can't speak anymore.</span>"
host.silent += 60
sleep(1200)
host << "\red Your tongue has feeling again.."
usr << "\red [host] can speak again."
host << "<span class='danger'>Your tongue has feeling again.</span>"
usr << "<span class='notice'>[host] can speak again.</span>"
// Makes the host unable to emote
/mob/living/parasite/meme/verb/Paralyze()
@@ -272,14 +267,14 @@ var/controlling
// backup the host incase we switch hosts after using the verb
var/mob/host = src.host
host << "\red Your body feels numb.. You lose your ability to use body language."
usr << "\red Your host can't use body language anymore."
host << "<span class='danger'>Your body feels numb. You lose your ability to use body language.</span>"
usr << "<span class='notice'>Your host can't use body language anymore.</span>"
host.Weaken(60)
sleep(1200)
host << "\red Your body has feeling again.."
usr << "\red [host] can use body language again."
host << "<span class='warning'>Your body has feeling again.</span>"
usr << "<span class='notice'>[host] can use body language again.</span>"
@@ -299,9 +294,9 @@ var/controlling
host.paralysis = max(host.paralysis, 2)
host.flash_weak_pain()
host << "\red <font size=5>You feel excrutiating pain all over your body! It is so bad you can't think or articulate yourself properly..</font>"
host << "<span class='danger'><font size=5>You feel excrutiating pain all over your body! It is so bad you can't think or articulate yourself properly.</font></span>"
usr << "<b>You send a jolt of agonizing pain through [host], they should be unable to concentrate on anything else for half a minute.</b>"
usr << "<span class='notice'>You send a jolt of agonizing pain through [host], they should be unable to concentrate on anything else for half a minute.</span>"
host.emote("scream")
@@ -315,9 +310,9 @@ var/controlling
else if(prob(10)) host.emote("collapse")
if(i == 10)
host << "\red THE PAIN! AGHH, THE PAIN! MAKE IT STOP! ANYTHING TO MAKE IT STOP!"
host << "<span class='danger'>THE PAIN! AGHH, THE PAIN! MAKE IT STOP! ANYTHING TO MAKE IT STOP!</span>"
host << "\red The pain subsides.."
host << "<span class='warning'>The pain subsides.</span>"
// Cause great joy with the host, used for conditioning the host
/mob/living/parasite/meme/verb/Joy()
@@ -333,14 +328,14 @@ var/controlling
host.druggy = max(host.druggy, 50)
host.slurring = max(host.slurring, 10)
usr << "<b>You stimulate [host.name]'s brain, injecting waves of endorphines and dopamine into the tissue. They should now forget all their worries, particularly relating to you, for around a minute.</b>"
usr << "<span class='notice'>You stimulate [host.name]'s brain, injecting waves of endorphines and dopamine into the tissue. They should now forget all their worries, particularly relating to you, for around a minute.</span>"
host << "\red You are feeling wonderful! Your head is numb and drowsy, and you can't help forgetting all the worries in the world."
host << "<span class='notice'><font size=5>You are feeling wonderful! Your head is numb and drowsy, and you can't help forgetting all the worries in the world.</font></span>"
while(host.druggy > 0)
sleep(10)
host << "\red You are feeling clear-headed again.."
host << "<span class='warning'>You are feeling clear-headed again.</span>"
// Cause the target to hallucinate.
/mob/living/parasite/meme/verb/Hallucinate(mob/living/carbon/human/target as mob in oview())
@@ -349,13 +344,13 @@ var/controlling
set desc = "Makes your host hallucinate, has a short delay."
if(!istype(target, /mob/living/carbon/human) || !target.mind)
src << "<b>You can't remotely ruin this ones mind.</b>"
src << "<span class='warning'>You can't remotely ruin this ones mind.</span>"
return
if(!(target in view(host)))
src << "<b>You need to make eye-contact with the target.</b>"
src << "<span class='warning'>You need to make eye-contact with the target.</span>"
return
if(!(target in indoctrinated))
src << "<b>You need to attune the target first.</b>"
src << "<span class='warning'>You need to attune the target first.</span>"
return
if(!target) return
if(!use_points(300)) return
@@ -363,7 +358,7 @@ var/controlling
spawn(rand(300,600))
if(target) target.hallucination += 400
usr << "<b>You make [target] hallucinate.</b>"
usr << "<span class='notice'>You make [target] hallucinate.</span>"
// Jump to a closeby target through a whisper
/mob/living/parasite/meme/verb/SubtleJump(mob/living/carbon/human/target as mob in oview())
@@ -372,15 +367,20 @@ var/controlling
set desc = "Move to a closeby human through a whisper."
if(!istype(target, /mob/living/carbon/human) || !target.mind)
src << "<b>You can't jump to this creature..</b>"
src << "<span class='warning'>You can't jump to this creature.</span>"
return
if(target.isSynthetic())
src << "<span class='warning'>You can't affect synthetics.</span>"
return
if(!(target in view(1, host)+src))
src << "<b>The target is not close enough.</b>"
src << "<span class='warning'>The target is not close enough.</span>"
return
// Find out whether we can speak
if (host.silent || (host.disabilities & 64))
src << "<b>Your host can't speak..</b>"
src << "<span class='warning'>Your host can't speak.</span>"
return
if(!use_points(350)) return
@@ -390,17 +390,17 @@ var/controlling
// Find out whether the target can hear
if(target.disabilities & 32 || target.ear_deaf)
src << "<b>Your target doesn't seem to hear you..</b>"
src << "<span class='warning'>Your target doesn't seem to hear you.</span>"
return
if(target.parasites.len > 0)
src << "<b>Your target already is possessed by something..</b>"
src << "<span class='warning'>Your target already is possessed by something.</span>"
return
src.exit_host()
src.enter_host(target)
usr << "<b>You successfully jumped to [target].</b>"
usr << "<span class='notice'>You successfully jumped to [target].</span>"
log_admin("[src.key] has jumped to [target]",ckey=key_name(src))
message_admins("[src.key] has jumped to [target]")
@@ -411,15 +411,20 @@ var/controlling
set desc = "Move to any mob in view through a shout."
if(!istype(target, /mob/living/carbon/human) || !target.mind)
src << "<b>You can't jump to this creature..</b>"
src << "<span class='warning'>You can't jump to this creature.</span>"
return
if(target.isSynthetic())
src << "<span class='warning'>You can't affect synthetics.</span>"
return
if(!(target in view(host)))
src << "<b>The target is not close enough.</b>"
src << "<span class='warning'>The target is not close enough.</span>"
return
// Find out whether we can speak
if (host.silent || (host.disabilities & 64))
src << "<b>Your host can't speak..</b>"
src << "<span class='warning'>Your host can't speak.</span>"
return
if(!use_points(750)) return
@@ -429,17 +434,17 @@ var/controlling
// Find out whether the target can hear
if(target.disabilities & 32 || target.ear_deaf)
src << "<b>Your target doesn't seem to hear you..</b>"
src << "<span class='warning'>Your target doesn't seem to hear you.</span>"
return
if(target.parasites.len > 0)
src << "<b>Your target already is possessed by something..</b>"
src << "<span class='warning'>Your target already is possessed by something.</span>"
return
src.exit_host()
src.enter_host(target)
usr << "<b>You successfully jumped to [target].</b>"
usr << "<span class='notice'>You successfully jumped to [target].</span>"
log_admin("[src.key] has jumped to [target]",ckey=key_name(src))
message_admins("[src.key] has jumped to [target]")
@@ -450,19 +455,24 @@ var/controlling
set desc = "Move to a mob in sight that you have already attuned."
if(!istype(target, /mob/living/carbon/human) || !target.mind)
src << "<b>You can't jump to this creature..</b>"
src << "<span class='warning'>You can't jump to this creature.</span>"
return
if(target.isSynthetic())
src << "<span class='warning'>You can't affect synthetics.</span>"
return
if(!(target in view(host)))
src << "<b>You need to make eye-contact with the target.</b>"
src << "<span class='warning'>You need to make eye-contact with the target.</span>"
return
if(!(target in indoctrinated))
src << "<b>You need to attune the target first.</b>"
src << "<span class='warning'>You need to attune the target first.</span>"
return
src.exit_host()
src.enter_host(target)
usr << "<b>You successfully jumped to [target].</b>"
usr << "<span class='notice'>You successfully jumped to [target].</span>"
log_admin("[src.key] has jumped to [target]",ckey=key_name(src))
message_admins("[src.key] has jumped to [target]")
@@ -474,16 +484,22 @@ var/controlling
set desc = "Change the host's brain structure, making it easier for you to manipulate him."
if(host in src.indoctrinated)
usr << "<b>You have already attuned this host.</b>"
usr << "<span class='notice'>You have already attuned this host.</span>"
return
if(!host) return
for (var/obj/item/weapon/implant/loyalty/I in host)
if (I.implanted)
src << "<span class='warning'>Your host's mind is shielded!</span>"
return
if(!use_points(400)) return
src.indoctrinated.Add(host)
usr << "<b>You successfully indoctrinated [host].</b>"
host << "\red Your head feels a bit roomier.."
usr << "<span class='notice'>You successfully indoctrinated [host].</span>"
host << "<span class='danger'>Your head feels a bit roomier...</span>"
log_admin("[src.key] has attuned [host]",ckey=key_name(src))
message_admins("[src.key] has attuned [host]")
@@ -496,16 +512,16 @@ var/controlling
if(!host) return
if(!(host in indoctrinated))
usr << "\red You need to attune the host first."
usr << "<span class='warning'>You need to attune the host first.</span>"
return
if(!use_points(500)) return
usr << "<b>You inject drugs into [host].</b>"
host << "\red You feel your body strengthen and your pain subside.."
usr << "<span class='notice'>You inject drugs into [host].</span>"
host << "<span class='danger'>You feel your body strengthen and your pain subside.</span>"
host.analgesic = 60
while(host.analgesic > 0)
sleep(60)
host << "\red The dizziness wears off, and you can feel pain again.."
host << "<span class='notice'>The dizziness wears off, and you can feel pain again.</span>"
/mob/proc/clearHUD()
@@ -518,17 +534,22 @@ var/controlling
set name = "Possession(500)"
set desc = "Take direct control of the host for a while."
if(!use_points(500)) return
if(!host)
src << "You have discovered a severe bug - NO HOST. CONTACT DEVELOPER."
return
if(src.stat)
src << "You cannot do that in your current state."
src << "<span class='warning'>You cannot do that in your current state.</span>"
return
for (var/obj/item/weapon/implant/loyalty/I in host)
if (I.implanted)
src << "<span class='warning'>Your host's mind is shielded!</span>"
return
src << "You assume direct control..."
if(!use_points(500)) return
src << "<span class='danger'>You assume direct control!</span>"
spawn()
@@ -536,8 +557,8 @@ var/controlling
return
else
src << "\red <B>You shroud your hosts brain, assuming control</B>"
host << "\red <B>You can feel thoughts that arent your own begin to dictate your body's actions.</B>"
src << "<span class='warning'>You shroud your hosts brain, assuming control!</span>"
host << "<span class='danger'>You can feel thoughts that arent your own begin to dictate your body's actions.</span>"
// host -> brain
var/h2b_id = host.computer_id
@@ -635,7 +656,7 @@ var/controlling
if(!host) return
if(!use_points(100)) return
usr << "<b>You enter dormant mode.. You won't be able to take action until all your points have recharged.</b>"
usr << "<span class='warning'>You enter dormant mode.You won't be able to take action until all your points have recharged.</span>"
dormant = 1
@@ -644,7 +665,7 @@ var/controlling
dormant = 0
usr << "\red You have regained all points and exited dormant mode!"
usr << "<span class='danger'>You have regained all points and exited dormant mode!</span>"
/mob/living/parasite/meme/verb/Show_Points()
set category = "Meme"

View File

@@ -31,3 +31,6 @@
/mob/living/parasite/captive_brain/emote(var/message)
return
/mob/living/parasite/captive_brain/send_emote()
return

View File

@@ -18,6 +18,8 @@
attacktext = "nipped"
friendly = "prods"
wander = 0
maxHealth = 40
health = 40
pass_flags = PASSTABLE
universal_understand = 1
holder_type = /obj/item/weapon/holder/borer

View File

@@ -81,6 +81,10 @@
src << "\The [H] does not seem to have an ear canal to breach."
return
if(H.isSynthetic())
src << "<span class='warning'>You can't affect synthetics.</span>"
return
if(H.check_head_coverage())
src << "You cannot get through that host's protective gear."
return
@@ -257,6 +261,10 @@
if(!M || !src) return
if(M.isSynthetic())
src << "<span class='warning'>You can't affect synthetics.</span>"
return
if(M.has_brain_worms())
src << "You cannot infest someone who is already infested!"
return