mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-21 12:04:48 +01:00
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:
@@ -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)
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user