Alium changes:

Aliens are now scary. Be careful of all those friendly xenos running about.
Scythe-like arms can now seriously injure you if they get an opportunity.
Spit now costs 50 plasma instead of 25. It works like a taser (no more homing spit). The effect is the same as the old spit but instead of fire loss, it deals toxin damage. Riot shields can still block spit 50% of the time. 
Spit overloads (stuns) a cyborg's receptor circuit for 5 seconds, dealing 10 fire damage.
Spit has a new projectile icon.
Aliens can now properly attack monkeys, dealing heavy damage.
Can now interact with other aliens via attack. Larva cannot interact as such. Currently bugged where two similar messages show up on interaction. Will be fixed asap.
Slightly higher damage to cyborgs. Aliens can now caress cyborgs with their scythe-like arms.
Slightly higher damage to exosuits.
Invisibility now works for 15 seconds instead of 30.
Resin wall now costs 100 plasma instead of 200.
Face huggers now have 10 health instead of 25. There is also a 30% chance of not being paralyzed after a facehugger leap. The paralysis itself lasts half as long.
Aliens can now break glass, grills, and tables, and light fixtures without using acid. 
Adult aliens can now also climb over tables/racks.
Fixed the acid verb not properly showing up.
Fixed stab/disarm never properly showing up.
Larva now get a verb to hide under tables as the old code didn't work.
More alien emote fixes. Larva should now properly be gender neutral.

General changes:
Devouring time has been extended so it takes 10 seconds for all mobs. You must remain still (and the target), to devour someone.
Hulks can break through grills a lot faster than before.
Added smoothwall shuttle code by Urist (and icons by Rolfero).
Added a new dmi for gimmick items. Moved a few gimmick items there.


git-svn-id: http://tgstation13.googlecode.com/svn/trunk@694 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
noisomehollow@lycos.com
2010-12-24 03:13:33 +00:00
parent 82f9ce13cc
commit 41cd0a67b7
34 changed files with 2024 additions and 1744 deletions
-1
View File
@@ -287,7 +287,6 @@ They spawn as an assistant but there is no announcement. /N */
var/input = input(usr, "Please specify which key/client will be respawned. That person will not retain their traitor/other status when respawned.", "What?", "")
if(!input)
return
var/GKEY = input
var/GNAME = "none"
var/mob/dead/observer/GDEL //To properly delete the mob later on.
@@ -14,73 +14,65 @@ All I can think of right now./N
/mob/living/carbon/alien/humanoid/verb/invis()
set name = "Invisibility (50)"
set desc = "Makes you invisible for 30 seconds"
set desc = "Makes you invisible for 15 seconds"
set category = "Alien"
if(src.stat)
src << "You must be concious to do this"
src << "\green You must be conscious to do this"
return
if(src.toxloss >= 50)
src.toxloss -= 50
src.alien_invis = 1.0
src << "\green You are now invisible"
src << "\green You are now invisible."
for(var/mob/O in viewers(src, null))
O.show_message(text("\green <B>[src] fades into the surroundings!</B>"), 1)
spawn(300)
spawn(150)
src.alien_invis = 0.0
src << "\green You are no longer invisible"
src << "\green You are no longer invisible."
else
src << "\green Not enough plasma stored"
return
/mob/living/carbon/alien/humanoid/verb/spit(mob/M as mob in oview())
set name = "Spit (25)"
set desc = "Spits acid at someone"
/*Alien spit now works like a taser shot. It won't home in on the target but will act the same once it does hit.
Doesn't work on silicon mobs or other aliens.*/
/mob/living/carbon/alien/humanoid/verb/spit(mob/target as mob in oview())
set name = "Spit Neurotoxin (50)"
set desc = "Spits neurotoxin at someone, paralyzing them for a short time."
set category = "Alien"
if(src.stat)
src << "You must be concious to do this."
src << "\green You must be conscious to do this."
return
if(src.toxloss >= 25)
src.toxloss -= 25
if(istype(target, /mob/living/carbon/alien))
src << "\green Your allies are not a valid target."
return
if(src.toxloss >= 50)
src.toxloss -= 50
var/turf/T = usr.loc
var/turf/U = (istype(target, /atom/movable) ? target.loc : target)
if(!U || !T)
return
while(U && !istype(U,/turf))
U = U.loc
if(!istype(T, /turf))
return
if (U == T)
usr.bullet_act(PROJECTILE_DART)
return
if(!istype(U, /turf))
return
var/obj/bullet/neurodart/A = new /obj/bullet/neurodart(usr.loc)
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
A.process()
spawn(0)
var/obj/overlay/A = new /obj/overlay( usr.loc )
A.icon_state = "cbbolt"
A.icon = 'projectiles.dmi'
A.name = "acid"
A.anchored = 0
A.density = 0
A.layer = 4
var/i
for(i=0, i<20, i++)
var/obj/overlay/B = new /obj/overlay( A.loc )
B.icon_state = "cbbolt"
B.icon = 'projectiles.dmi'
B.name = "acid"
B.anchored = 1
B.density = 0
B.layer = 3
spawn(5)
del(B)
step_to(A,M,0)
if (get_dist(A,M) == 0)
for(var/mob/O in viewers(src, null))
O.show_message(text("\green <B>[src] has spat at [M.name]!</B>"), 1)
if (istype(M:l_hand, /obj/item/weapon/shield/riot) && prob(50))
del(A)
return
if (istype(M:r_hand, /obj/item/weapon/shield/riot) && prob(50))
del(A)
return
M.weakened += 5
M.fireloss += 10
del(A)
return
sleep(5)
del(A)
else
src << "\green Not enough plasma stored"
src << "\green Not enough plasma stored."
return
/mob/living/carbon/alien/humanoid/verb/plant()
@@ -89,7 +81,7 @@ All I can think of right now./N
set category = "Alien"
if(src.stat)
src << "You must be concious to do this."
src << "\green You must be conscious to do this."
return
if(src.toxloss >= 100)
src.toxloss -= 100
@@ -99,7 +91,7 @@ All I can think of right now./N
W.Life()
else
src << "\green Not enough plasma stored"
src << "\green Not enough plasma stored."
return
/mob/living/carbon/alien/humanoid/verb/call_to()
@@ -108,7 +100,7 @@ All I can think of right now./N
set category = "Alien"
if(src.stat)
src << "You must be concious to do this."
src << "\green You must be conscious to do this."
return
if(src.toxloss >= 5)
@@ -117,7 +109,7 @@ All I can think of right now./N
F.call_to(src)
emote("roar")
else
src << "\green Not enough plasma stored"
src << "\green Not enough plasma stored."
return
/mob/living/carbon/alien/humanoid/verb/whisp(mob/M as mob in oview())
@@ -126,7 +118,7 @@ All I can think of right now./N
set category = "Alien"
if(src.stat)
src << "You must be concious to do this"
src << "\green You must be conscious to do this."
return
var/msg = input("Message:", "Alien Whisper") as text
@@ -140,7 +132,7 @@ All I can think of right now./N
M << "\green You hear a strange alien voice in your head... \italic [msg]"
src << {"\green You said: "[msg]" to [M]"}
else
src << "\green Not enough plasma stored"
src << "\green Not enough plasma stored."
return
/mob/living/carbon/alien/humanoid/verb/transfer_plasma(mob/living/carbon/alien/M as mob in oview())
@@ -152,11 +144,11 @@ All I can think of right now./N
return
if(src.stat)
src << "You must be concious to do this."
src << "\green You must be conscious to do this."
return
if(!src.toxloss)
src << "You don't have any plasma."
src << "\green You don't have any plasma."
return
var/amount = input("Amount:", "Transfer Plasma to [M]") as num
@@ -169,7 +161,7 @@ All I can think of right now./N
M.toxloss += amount
src.toxloss -= amount
else
src << "You don't have enough plasma."
src << "\green Not enough plasma."
return
M << "\green [src] has transfered [amount] plasma to you."
@@ -185,43 +177,43 @@ All I can think of right now./N
set category = "Alien"
if(src.stat)
src << "You must be concious to do this."
src << "\green You must be conscious to do this."
return
if(!src.toxloss)
src << "You don't have any plasma."
src << "\green You don't have any plasma."
return
if(src.toxloss >= 500)
src.toxloss -= 500
src << "You begin to evolve."
src << "\green You begin to evolve."
for(var/mob/O in viewers(src, null))
O.show_message(text("\green <B>[src] begins to twist and contort!</B>"), 1)
var/mob/living/carbon/alien/humanoid/queen/Q = new (src.loc)
Q.key = src.key
del(src)
else
src << "You don't have enough plasma."
src << "\green Not enough plasma."
/mob/living/carbon/alien/humanoid/verb/resinwall() // -- TLE
set name = "Shape Resin Wall (200)"
set name = "Shape Resin Wall (100)"
set desc = "Produce a wall of resin that blocks entry and line of sight"
set category = "Alien"
if(src.stat)
src << "You must be concious to do this"
src << "\green You must be conscious to do this."
return
if(!src.toxloss)
src << "You don't have any plasma."
if(src.toxloss >= 200)
src.toxloss -= 200
src << "You begin to shape a wall of resin."
src << "\green You don't have any plasma."
if(src.toxloss >= 100)
src.toxloss -= 100
src << "\green You begin to shape a wall of resin."
for(var/mob/O in viewers(src, null))
O.show_message(text("\green <B>[src] vomits up a thick purple substance and begins to shape it!</B>"), 1)
//var/obj/alien/resin/R = new(src.loc)
new /obj/alien/resin(src.loc)
else
src << "You don't have enough plasma."
src << "\green Not enough plasma."
/mob/living/carbon/alien/humanoid/proc/ventcrawl() // -- TLE
set name = "Crawl through Vent"
@@ -231,7 +223,7 @@ All I can think of right now./N
// return
if(src.stat)
src << "You must be concious to do this."
src << "\green You must be conscious to do this."
return
var/vent_found = 0
for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src))
@@ -239,7 +231,7 @@ All I can think of right now./N
vent_found = v
if(!vent_found)
src << "You must be standing on or beside an open air vent to enter it."
src << "\green You must be standing on or beside an open air vent to enter it."
return
var/list/vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world)
@@ -260,12 +252,12 @@ All I can think of right now./N
var/obj/selection = input("Select a destination.", "Duct System") in choices
var/selection_position = choices.Find(selection)
if(src.loc != startloc)
src << "You need to remain still while entering a vent."
src << "\green You need to remain still while entering a vent."
return
var/obj/machinery/atmospherics/unary/vent_pump/target_vent = vents[selection_position]
if(target_vent)
for(var/mob/O in viewers(src, null))
O.show_message(text("\green <B>[src] scrambles into the ventillation ducts!</B>"), 1)
O.show_message(text("<B>[src] scrambles into the ventillation ducts!</B>"), 1)
var/list/huggers = list()
for(var/obj/alien/facehugger/F in view(3, src))
if(istype(F, /obj/alien/facehugger))
@@ -309,7 +301,7 @@ I kind of like the right click only--the window version can get a little confusi
var/obj/A
if(src.stat)
src << "You must be concious to do this."
src << "\green You must be conscious to do this."
return
var/list/xeno_target
xeno_target = list("ABORT COMMAND")
@@ -320,28 +312,28 @@ I kind of like the right click only--the window version can get a little confusi
if(A == "ABORT COMMAND")
return
if(src.toxloss < 200)
src << "Not enough plasma."
src << "\green Not enough plasma."
return
if(A in view(1))//Another check to see if the item is in range. So the alien does not run off with the window open.
A.acid()
else
src << "Target is too far away."
src << "\green Target is too far away."
return
/mob/living/carbon/alien/humanoid/verb/corrode(obj/O as anything in view(1)) //If they right click to corrode, an error will flash if its an invalid target./N
set name = "Spit Corrosive Acid (200)"
/mob/living/carbon/alien/humanoid/verb/corrode(obj/O as anything in oview(1)) //If they right click to corrode, an error will flash if its an invalid target./N
set name = "Corrose with Acid (200)"
set desc = "Drench an object in acid, destroying it over time."
if(!istype(O, /obj))
return
if(src.stat)
src << "You must be concious to do this."
src << "\green You must be conscious to do this."
return
if(src.toxloss < 200)
src << "Not enough plasma."
src << "\green Not enough plasma."
return
if(O.unacidable) //So the aliens don't destroy energy fields/singularies/other aliens/etc with their acid.
src << "Cannot destroy this object."
src << "\green Cannot destroy this object."
return
else
O.acid()
@@ -182,6 +182,8 @@ to clean it up, or just beat the shit out of it (which takes ages).
src.weakened = 10
if (src.stuttering < 10)
src.stuttering = 10
else if (flag == PROJECTILE_DART)
return
else if(flag == PROJECTILE_LASER)
var/d = 20
@@ -720,8 +722,6 @@ to clean it up, or just beat the shit out of it (which takes ages).
for(var/mob/O in viewers(M, null))
O.show_message(text("\red <B>[] has weakened []!</B>", M, src), 1, "\red You hear someone fall.", 2)
src.bruteloss += damage
src.updatehealth()
else
playsound(src.loc, 'punchmiss.ogg', 25, 1, -1)
@@ -748,14 +748,41 @@ to clean it up, or just beat the shit out of it (which takes ages).
O.show_message(text("\red <B>[] has attempted to disarm []!</B>", M, src), 1)
return
/* aliens attacking each other!!
/mob/living/carbon/alien/humanoid/attack_alien()
//todo, put code here
return
/*Code for aliens attacking aliens. Because aliens act on a hivemind, I don't see them as very aggressive with each other.
As such, they can either help or harm other aliens. Help works like the human help command while harm is a simple nibble.
In all, this is a lot like the monkey code. /N
*/
/mob/living/carbon/alien/attack_alien(mob/living/carbon/alien/M as mob)
if (!ticker)
M << "You cannot attack people before the game has started."
return
if (istype(src.loc, /turf) && istype(src.loc.loc, /area/start))
M << "No attacking people at spawn, you jackass."
return
..()
if (M.a_intent == "help")
src.sleeping = 0
src.resting = 0
if (src.paralysis >= 3) src.paralysis -= 3
if (src.stunned >= 3) src.stunned -= 3
if (src.weakened >= 3) src.weakened -= 3
for(var/mob/O in viewers(src, null))
O.show_message(text("\blue [M.name] nuzzles [] trying to wake it up!", src), 1)
else
if (src.health > 0)
var/damage = rand(1, 3)
for(var/mob/O in viewers(src, null))
O.show_message(text("\red <B>[M.name] has bit []!</B>", src), 1)
src.bruteloss += damage
src.updatehealth()
else
M << "\green <B>[src.name] is too injured for that.</B>"
return
/mob/living/carbon/alien/humanoid/restrained()
@@ -31,7 +31,7 @@
message = "<B>The [src.name]</B> roars."
m_type = 2
if("tail")
message = "<B>The [src.name]</B> waves his tail."
message = "<B>The [src.name]</B> waves its tail."
m_type = 1
if("gasp")
message = "<B>The [src.name]</B> gasps."
@@ -53,11 +53,11 @@
message = "<B>The [src.name]</B> moans!"
m_type = 2
if("nod")
message = "<B>The [src.name]</B> nods his head."
m_type = 1
if("sit")
message = "<B>The [src.name]</B> sits down."
message = "<B>The [src.name]</B> nods its head."
m_type = 1
// if("sit")
// message = "<B>The [src.name]</B> sits down." //Larvan can't sit down, /N
// m_type = 1
if("sway")
message = "<B>The [src.name]</B> sways around dizzily."
m_type = 1
@@ -76,11 +76,11 @@
message = "<B>The [src.name]</B> rolls."
m_type = 1
if("shake")
message = "<B>The [src.name]</B> shakes his head."
message = "<B>The [src.name]</B> shakes its head."
m_type = 1
if("gnarl")
if (!muzzled)
message = "<B>The [src.name]</B> gnarls and shows his teeth.."
message = "<B>The [src.name]</B> gnarls and shows its teeth.."
m_type = 2
if("jump")
message = "<B>The [src.name]</B> jumps!"
@@ -90,7 +90,7 @@
message = text("<B>[]</B> collapses!", src)
m_type = 2
if("help")
src << "choke, collapse, dance, drool, gasp, shiver, gnarl, jump, moan, nod, roar, roll, scratch,\nscretch, shake, sign-#, sit, sulk, sway, tail, twitch, whimper"
src << "choke, collapse, dance, drool, gasp, shiver, gnarl, jump, moan, nod, roar, roll, scratch,\nscretch, shake, sign-#, sulk, sway, tail, twitch, whimper"
else
src << text("Invalid Emote: []", act)
if ((message && src.stat == 0))
@@ -144,6 +144,8 @@ to clean it up, or just beat the shit out of it (which takes ages).
src.weakened = 10
if (src.stuttering < 10)
src.stuttering = 10
else if (flag == PROJECTILE_DART)
return
else if(flag == PROJECTILE_LASER)
var/d = 20
@@ -500,21 +502,11 @@ to clean it up, or just beat the shit out of it (which takes ages).
return
return
/*
/mob/living/carbon/alien/larva/attack_alien()
//todo, put code here
return
*/
//Aliens attacking each other is defined in the humanoid.dm file.
/mob/living/carbon/alien/larva/restrained()
return 0
/mob/living/carbon/alien/larva/var/co2overloadtime = null
/mob/living/carbon/alien/larva/var/temperature_resistance = T0C+75
@@ -25,6 +25,25 @@
var/selection_position = choices.Find(selection)
var/obj/target_vent = vents[selection_position]
if(target_vent)
for(var/mob/O in viewers(src, null))
O.show_message(text("\green <B>[src] scrambles into the ventillation ducts!</B>"), 1)
src.loc = target_vent.loc
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
O << text("<B>[] scrambles into the ventillation ducts!</B>", src)
src.loc = target_vent.loc
/mob/living/carbon/alien/larva/verb/hide()
set name = "Hide"
set desc = "Allows to hide beneath tables or certain items. Toggled on or off."
set category = "Alien"
if (src.layer != TURF_LAYER)
src.layer = TURF_LAYER
src << text("\green You are now hiding.")
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
O << text("<B>[] scurries to the ground!</B>", src)
else
src.layer = MOB_LAYER
src << text("\green You have stopped hiding.")
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
O << text("[] slowly peaks up from the ground...", src)
+19 -11
View File
@@ -268,6 +268,13 @@
src.weakened = 10
if (src.stuttering < 10)
src.stuttering = 10
else if (flag == PROJECTILE_DART)
if (istype(src.l_hand, /obj/item/weapon/shield/riot)||istype(src.r_hand, /obj/item/weapon/shield/riot))
if (prob(50))
show_message("\red Your shield absorbs the hit!", 4)
else
src.weakened += 5
src.toxloss += 10
else if(flag == PROJECTILE_LASER)
var/d = 20
if (istype(src.wear_suit, /obj/item/clothing/suit/armor))
@@ -1404,7 +1411,7 @@
for(var/mob/O in viewers(src, null))
O.show_message(text("\blue [M] caresses [src] with its scythe like arm."), 1)
else
//This will be changed to skin, where we can skin a dead human corpse
//This will be changed to skin, where we can skin a dead human corpse//Actually, that sounds kind of impractical./N
if (M.a_intent == "grab")
if (M == src)
return
@@ -1428,6 +1435,7 @@
if (src.w_uniform)
src.w_uniform.add_fingerprint(M)
var/damage = rand(15, 30) // How much damage aliens do to humans? Increasing -- TLE
// I've decreased the chance of humans being protected by uniforms. Now aliens can actually damage them.
var/datum/organ/external/affecting = src.organs["chest"]
var/t = M.zone_sel.selecting
if ((t in list( "eyes", "mouth" )))
@@ -1435,12 +1443,12 @@
var/def_zone = ran_zone(t)
if (src.organs[def_zone])
affecting = src.organs[def_zone]
if ((istype(affecting, /datum/organ/external) && prob(90)))
if ((istype(affecting, /datum/organ/external) && prob(95)))
playsound(src.loc, "punch", 25, 1, -1)
for(var/mob/O in viewers(src, null))
O.show_message(text("\red <B>[] has slashed at []!</B>", M, src), 1)
if (def_zone == "head")
if ((((src.head && src.head.body_parts_covered & HEAD) || (src.wear_mask && src.wear_mask.body_parts_covered & HEAD)) && prob(99)))
if ((((src.head && src.head.body_parts_covered & HEAD) || (src.wear_mask && src.wear_mask.body_parts_covered & HEAD)) && prob(5)))
if (prob(20))
affecting.take_damage(damage, 0)
else
@@ -1450,12 +1458,12 @@
if (src.weakened < 10)
src.weakened = rand(10, 15)
for(var/mob/O in viewers(M, null))
O.show_message(text("\red <B>[] has weakened []!</B>", M, src), 1, "\red You hear someone fall.", 2)
O.show_message(text("\red <B>[] has wounded []!</B>", M, src), 1, "\red You hear someone fall.", 2)
affecting.take_damage(damage)
else
if (def_zone == "chest")
if ((((src.wear_suit && src.wear_suit.body_parts_covered & UPPER_TORSO) || (src.w_uniform && src.w_uniform.body_parts_covered & LOWER_TORSO)) && prob(85)))
src.show_message("\red You have been protected from a hit to the chest.")
if ((((src.wear_suit && src.wear_suit.body_parts_covered & UPPER_TORSO) || (src.w_uniform && src.w_uniform.body_parts_covered & LOWER_TORSO)) && prob(10)))
src.show_message("\blue You have been protected from a hit to the chest.")
return
if (damage > 4.9)
if (prob(50))
@@ -1463,7 +1471,7 @@
src.weakened = 5
playsound(src.loc, 'thudswoosh.ogg', 50, 1, -1)
for(var/mob/O in viewers(src, null))
O.show_message(text("\red <B>[] has knocked down []!</B>", M, src), 1, "\red You hear someone fall.", 2)
O.show_message(text("\red <B>[] has tackled down []!</B>", M, src), 1, "\red You hear someone fall.", 2)
else
if (src.stunned < 5)
src.stunned = 5
@@ -1473,15 +1481,15 @@
affecting.take_damage(damage)
else
if (def_zone == "groin")
if ((((src.wear_suit && src.wear_suit.body_parts_covered & LOWER_TORSO) || (src.w_uniform && src.w_uniform.body_parts_covered & LOWER_TORSO)) && prob(75)))
src.show_message("\red You have been protected from a hit to the lower chest.")
if ((((src.wear_suit && src.wear_suit.body_parts_covered & LOWER_TORSO) || (src.w_uniform && src.w_uniform.body_parts_covered & LOWER_TORSO)) && prob(1)))
src.show_message("\blue You have been protected from a hit to the lower chest.")
return
if (damage > 4.9)
if (prob(50))
if (src.weakened < 3)
src.weakened = 3
for(var/mob/O in viewers(src, null))
O.show_message(text("\red <B>[] has knocked down []!</B>", M, src), 1, "\red You hear someone fall.", 2)
O.show_message(text("\red <B>[] has tackled down []!</B>", M, src), 1, "\red You hear someone fall.", 2)
else
if (src.stunned < 3)
src.stunned = 3
@@ -1508,7 +1516,7 @@
if (randn <= 25)
src.weakened = 2
for(var/mob/O in viewers(src, null))
O.show_message(text("\red <B>[] has knocked over []!</B>", M, src), 1)
O.show_message(text("\red <B>[] has tackled over []!</B>", M, src), 1)
else
if (randn <= 60)
src.drop_item()
+96 -19
View File
@@ -119,6 +119,9 @@
src.stunned = 15
else
src.weakened = 15
else if (flag == PROJECTILE_DART)
src.weakened += 5
src.toxloss += 10
else if(flag == PROJECTILE_LASER)
if (src.stat != 2)
src.bruteloss += 20
@@ -177,25 +180,30 @@
O.show_message("\red <B>[M.name] has attempted to bite [src.name]!</B>", 1)
return
/mob/living/carbon/monkey/attack_hand(mob/M as mob)
..()
if (istype(M, /mob/living/carbon/human))
if ((M:gloves && M:gloves.elecgen == 1 && M.a_intent == "hurt") /*&& (!istype(src:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
if(M:gloves.uses > 0)
M:gloves.uses--
if (src.weakened < 5)
src.weakened = 5
if (src.stuttering < 5)
src.stuttering = 5
if (src.stunned < 5)
src.stunned = 5
for(var/mob/O in viewers(src, null))
if (O.client)
O.show_message("\red <B>[src] has been touched with the stun gloves by [M]!</B>", 1, "\red You hear someone fall", 2)
else
M:gloves.elecgen = 0
M << "\red Not enough charge! "
return
/mob/living/carbon/monkey/attack_hand(mob/living/carbon/human/M as mob)
if (!ticker)
M << "You cannot attack people before the game has started."
return
if (istype(src.loc, /turf) && istype(src.loc.loc, /area/start))
M << "No attacking people at spawn, you jackass."
return
if ((M:gloves && M:gloves.elecgen == 1 && M.a_intent == "hurt") /*&& (!istype(src:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
if(M:gloves.uses > 0)
M:gloves.uses--
if (src.weakened < 5)
src.weakened = 5
if (src.stuttering < 5)
src.stuttering = 5
if (src.stunned < 5)
src.stunned = 5
for(var/mob/O in viewers(src, null))
if (O.client)
O.show_message("\red <B>[src] has been touched with the stun gloves by [M]!</B>", 1, "\red You hear someone fall", 2)
else
M:gloves.elecgen = 0
M << "\red Not enough charge! "
return
if (M.a_intent == "help")
src.sleeping = 0
@@ -265,6 +273,75 @@
O.show_message(text("\red <B>[] has disarmed [src.name]!</B>", M), 1)
return
/mob/living/carbon/monkey/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
if (!ticker)
M << "You cannot attack people before the game has started."
return
if (istype(src.loc, /turf) && istype(src.loc.loc, /area/start))
M << "No attacking people at spawn, you jackass."
return
if (M.a_intent == "help")
for(var/mob/O in viewers(src, null))
O.show_message(text("\blue [M] caresses [src] with its scythe like arm."), 1)
else
if (M.a_intent == "hurt")
if ((prob(95) && src.health > 0))
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has slashed [src.name]!</B>", M), 1)
playsound(src.loc, "punch", 25, 1, -1)
var/damage = rand(5, 10)
if (prob(40))
damage = rand(20, 40)
if (src.paralysis < 5)
src.paralysis = rand(10, 15)
spawn( 0 )
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has wounded [src.name]!</B>", M), 1)
return
src.bruteloss += damage
src.updatehealth()
else
playsound(src.loc, 'punchmiss.ogg', 25, 1, -1)
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has attempted to lunge at [src.name]!</B>", M), 1)
else
if (M.a_intent == "grab")
if (M == src)
return
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab( M )
G.assailant = M
if (M.hand)
M.l_hand = G
else
M.r_hand = G
G.layer = 20
G.affecting = src
src.grabbed_by += G
G.synch()
playsound(src.loc, 'thudswoosh.ogg', 50, 1, -1)
for(var/mob/O in viewers(src, null))
O.show_message(text("\red [] has grabbed [src.name] passively!", M), 1)
else
if (!( src.paralysis ))
if (prob(25))
src.paralysis = 2
playsound(src.loc, 'thudswoosh.ogg', 50, 1, -1)
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has tackled down [src.name]!</B>", M), 1)
else
drop_item()
playsound(src.loc, 'thudswoosh.ogg', 50, 1, -1)
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has disarmed [src.name]!</B>", M), 1)
return
/mob/living/carbon/monkey/Stat()
..()
+2
View File
@@ -201,6 +201,8 @@
src.stunned = 15
else
src.weakened = 15
else if (flag == PROJECTILE_DART)
return
else if(flag == PROJECTILE_LASER)
if (src.stat != 2)
src.bruteloss += 20
+12 -2
View File
@@ -240,6 +240,12 @@
else if (flag == PROJECTILE_TASER)
return
else if (flag == PROJECTILE_DART)
if (src.stat != 2)
src.stunned += 5
src.fireloss += 10
src.updatehealth()
return
/*
else if (flag == PROJECTILE_WAVE)
if (src.stat != 2)
@@ -454,7 +460,11 @@
/mob/living/silicon/robot/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
if (M.a_intent == "grab")
if (M.a_intent == "help")
for(var/mob/O in viewers(src, null))
O.show_message(text("\blue [M] caresses [src]'s plating with its scythe like arm."), 1)
else if (M.a_intent == "grab")
if (M == src)
return
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab( M )
@@ -472,7 +482,7 @@
O.show_message(text("\red [] has grabbed [] passively!", M, src), 1)
else if (M.a_intent == "hurt")
var/damage = rand(5, 10)
var/damage = rand(10, 20)
if (prob(90))
/*
if (M.class == "combat")
+4 -1
View File
@@ -451,7 +451,7 @@
for(var/mob/N in viewers(user, null))
if(N.client)
N.show_message(text("\red <B>[user] is attempting to devour [src.affecting]!</B>"), 1)
if(!do_mob(user, src.affecting)) return
if(!do_mob(user, src.affecting)||!do_after(user, 100)) return
for(var/mob/N in viewers(user, null))
if(N.client)
N.show_message(text("\red <B>[user] devours [src.affecting]!</B>"), 1)
@@ -1478,6 +1478,9 @@
src.stunned = 10
else
src.weakened = 10
else if (flag == PROJECTILE_DART)
src.weakened += 5
src.toxloss += 10
else if(flag == PROJECTILE_LASER)
if (istype(src, /mob/living/carbon/human))
var/mob/living/carbon/human/H = src
+11 -2
View File
@@ -157,6 +157,7 @@
return
// attempt to break the light
//If xenos decide they want to smash a light bulb with a toolbox, who am I to stop them? /N
else if(status != LIGHT_BROKEN && status != LIGHT_EMPTY)
@@ -173,7 +174,6 @@
src.electrocute(user, 50, null, 20000)
broken()
else
user << "You hit the light!"
@@ -200,7 +200,16 @@
/obj/machinery/light/attack_ai(mob/user)
return
// Aliens smash the bulb but do not get electrocuted./N
/obj/machinery/light/attack_alien(mob/living/carbon/alien/humanoid/user)//So larva don't go breaking light bulbs.
if(status == LIGHT_EMPTY||status == LIGHT_BROKEN)
user << "\green That object is useless to you."
return
else if (status == LIGHT_OK||status == LIGHT_BURNED)
for(var/mob/M in viewers(src))
M.show_message("\red [user.name] smashed the light!", 3, "You hear a tinkle of breaking glass", 2)
broken()
return
// attack with hand - remove tube/bulb
// if hands aren't protected and the light is on, burn the player