diff --git a/code/defines/mob/living/carbon/alien.dm b/code/defines/mob/living/carbon/alien.dm
index a70c5a1b83..9f2f3f4069 100644
--- a/code/defines/mob/living/carbon/alien.dm
+++ b/code/defines/mob/living/carbon/alien.dm
@@ -5,7 +5,6 @@
say_message = "hisses"
icon = 'alien.dmi'
gender = NEUTER
- flags = 258.0
toxloss = 250
var/alien_invis = 0.0
diff --git a/code/defines/mob/living/carbon/alien_larva.dm b/code/defines/mob/living/carbon/alien_larva.dm
index c871807e63..21b810fa98 100644
--- a/code/defines/mob/living/carbon/alien_larva.dm
+++ b/code/defines/mob/living/carbon/alien_larva.dm
@@ -1,6 +1,7 @@
/mob/living/carbon/alien/larva
name = "alien larva"
icon_state = "larva"
+ flags = 258.0
health = 25
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index 1225b41b8e..e8d096cd39 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -15,7 +15,7 @@
attack_hand(mob/user)
if(!(istype(usr, /mob/living/silicon) || istype(usr, /mob/living/carbon/human)))
- user << "\red You don't have the dexterity to do this"
+ user << "\red You don't have the dexterity to do this."
return
if(stat & (NOPOWER|BROKEN))
return
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index 47f6936754..fc20e18a10 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -70,6 +70,8 @@
continue
if ((istype(O, /mob/living/carbon/human) && (istype(O:glasses, /obj/item/clothing/glasses/sunglasses))))
continue
+ if (istype(O, /mob/living/carbon/alien))//So aliens don't get flashed (they have no external eyes)/N
+ continue
O.weakened = src.strength
if ((O.eye_stat > 15 && prob(O.eye_stat + 50)))
diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm
index c4a3815684..22e0048157 100644
--- a/code/game/machinery/turrets.dm
+++ b/code/game/machinery/turrets.dm
@@ -359,6 +359,20 @@
user << browse(t, "window=turretid")
onclose(user, "turretid")
+
+/obj/machinery/turret/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
+ if(!(stat & BROKEN))
+ playsound(src.loc, 'slash.ogg', 25, 1, -1)
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has slashed at []!", M, src), 1)
+ src.health -= 4
+ if (src.health <= 0)
+ src.die()
+ else
+ M << "\green That object is useless to you."
+ return
+
/obj/machinery/turretid/Topic(href, href_list)
..()
if (src.locked)
diff --git a/code/game/objects/alien/defines.dm b/code/game/objects/alien/defines.dm
index 694e591dc6..9fd61a3161 100644
--- a/code/game/objects/alien/defines.dm
+++ b/code/game/objects/alien/defines.dm
@@ -39,9 +39,8 @@
density = 1
opacity = 1
anchored = 1
- unacidable = 0 //So aliens can destroy their own walls if they need to.
-
- var/health = 20
+//Alien can now normally destroy resin walls so they are no longer targetable with acid.
+ var/health = 50
/obj/alien/weeds
name = "weeds"
diff --git a/code/game/objects/alien/resin.dm b/code/game/objects/alien/resin.dm
index 01e1fa90ca..3de3778c5f 100644
--- a/code/game/objects/alien/resin.dm
+++ b/code/game/objects/alien/resin.dm
@@ -1,4 +1,4 @@
-// Alien Resin Walls are dense and block line of sight. They should probably be much stronger than they are now. -- TLE
+// Resin walls improved. /N
/*/obj/alien/resin/ex_act(severity)
world << "[severity] - [health]"
@@ -12,10 +12,116 @@
if(src.health < 1)
del(src)
return*/
-
+/*
/obj/alien/resin/attackby(obj/item/weapon/W as obj, mob/user as mob)
for(var/mob/M in viewers(src, null))
M.show_message(text("\red [src] is struck with [src]!"), 1)
src.health -= 2
if(src.health <= 0)
- del(src)
\ No newline at end of file
+ del(src)
+*/
+
+/obj/alien/resin/bullet_act(flag)
+ if (flag == PROJECTILE_BULLET)
+ health -= 35
+ if(health <=0)
+ src.density = 0
+ del(src)
+ return
+
+/obj/alien/resin/ex_act(severity)
+ switch(severity)
+ if(1.0)
+ del(src)
+ return
+ if(2.0)
+ del(src)
+ return
+ if(3.0)
+ if (prob(50))
+ del(src)
+ return
+ return
+
+/obj/alien/resin/blob_act()
+ density = 0
+ del(src)
+
+/obj/alien/resin/meteorhit()
+ //*****RM
+ //world << "glass at [x],[y],[z] Mhit"
+ src.health = 0
+ src.density = 0
+ del(src)
+ return
+
+/obj/alien/resin/hitby(AM as mob|obj)
+ ..()
+ for(var/mob/O in viewers(src, null))
+ O.show_message(text("\red [src] was hit by [AM]."), 1)
+ var/tforce = 0
+ if(ismob(AM))
+ tforce = 10
+ else
+ tforce = AM:throwforce
+ playsound(src.loc, 'attackblob.ogg', 100, 1)
+ src.health = max(0, src.health - tforce)
+ if (src.health <= 0)
+ src.density = 0
+ del(src)
+ return
+ ..()
+ return
+
+/obj/alien/resin/attack_hand()
+ if ((usr.mutations & 8))
+ usr << text("\blue You easily destroy the resin wall.")
+ for(var/mob/O in oviewers())
+ if ((O.client && !( O.blinded )))
+ O << text("\red [] destroys the resin wall!", usr)
+ src.health = 0
+ src.density = 0
+ del(src)
+ return
+
+/obj/alien/resin/attack_paw()
+ if ((usr.mutations & 8))
+ usr << text("\blue You easily destroy the resin wall.")
+ for(var/mob/O in oviewers())
+ if ((O.client && !( O.blinded )))
+ O << text("\red [] destroys the resin wall!", usr)
+ src.health = 0
+ src.density = 0
+ del(src)
+ return
+
+/obj/alien/resin/attack_alien()
+ if (istype(usr, /mob/living/carbon/alien/larva))//Safety check for larva. /N
+ return
+ usr << text("\green You claw at the resin wall.")
+ for(var/mob/O in oviewers())
+ if ((O.client && !( O.blinded )))
+ O << text("\red [] claws at the resin wall!", usr)
+ playsound(src.loc, 'attackblob.ogg', 100, 1)
+ src.health -= rand(10, 20)
+ if(src.health <= 0)
+ usr << text("\green You slice the resin wall to pieces.")
+ for(var/mob/O in oviewers())
+ if ((O.client && !( O.blinded )))
+ O << text("\red [] slices the resin wall apart!", usr)
+ src.health = 0
+ src.density = 0
+ del(src)
+ return
+ return
+
+/obj/alien/resin/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ var/aforce = W.force
+ src.health = max(0, src.health - aforce)
+ playsound(src.loc, 'attackblob.ogg', 100, 1)
+ if (src.health <= 0)
+ src.density = 0
+ del(src)
+ return
+ ..()
+ return
\ No newline at end of file
diff --git a/code/game/objects/devices/flash.dm b/code/game/objects/devices/flash.dm
index 53cd71f2ad..2001b3bbff 100644
--- a/code/game/objects/devices/flash.dm
+++ b/code/game/objects/devices/flash.dm
@@ -10,6 +10,8 @@
var/mob/living/carbon/human/H = M
if (istype(H.glasses, /obj/item/clothing/glasses/sunglasses) || istype(H.head, /obj/item/clothing/head/helmet/welding))
safety = 1
+ if (istype(M, /mob/living/carbon/alien))//So aliens don't get flashed (they have no external eyes)/N
+ safety = 1
if(isrobot(user))
spawn(0)
var/atom/movable/overlay/animation = new(user.loc)
@@ -21,7 +23,7 @@
sleep(5)
del(animation)
if (!( safety ))
- if (M.client)
+ if (M.client)//Probably here to prevent forced conversion of dced players. /N
if (status == 0)
user << "\red The bulb has been burnt out!"
return
@@ -48,12 +50,13 @@
if(user.mind in ticker.mode:head_revolutionaries)
ticker.mode:add_revolutionary(M.mind)
- for(var/mob/O in viewers(user, null))
- if(status == 1)
- if(!istype(M, /mob/living/carbon/alien)) //So aliens don't show up as being blinded when it has no effect on them./N
- O.show_message(text("\red [] blinds [] with the flash!", user, M))
- else
- O.show_message(text("\red [] fails to blind [] with the flash!", user, M))
+ for(var/mob/O in viewers(user, null))
+ if(status == 1)
+ O.show_message(text("\red [] blinds [] with the flash!", user, M))
+ else
+ for(var/mob/O in viewers(user, null))
+ if(status == 1)
+ O.show_message(text("\blue [] fails to blind [] with the flash!", user, M))
src.attack_self(user, 1)
return
@@ -98,5 +101,7 @@
var/mob/living/carbon/human/H = M
if (istype(H.glasses, /obj/item/clothing/glasses/sunglasses) || istype(H.head, /obj/item/clothing/head/helmet/welding))
safety = 1
+ if (istype(M, /mob/living/carbon/alien))//So aliens don't see those annoying flash screens.
+ safety = 1
if (!( safety ))
flick("flash", M.flash)
diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm
index ab40ae4896..25e15da1ce 100644
--- a/code/game/objects/items/weapons/kitchen.dm
+++ b/code/game/objects/items/weapons/kitchen.dm
@@ -32,10 +32,15 @@ KNIFE
if(!(user.zone_sel.selecting == ("eyes" || "head")))
return ..()
var/mob/living/carbon/human/H = M
+
if(istype(M, /mob/living/carbon/human) && ((H.head && H.head.flags & HEADCOVERSEYES) || (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || (H.glasses && H.glasses.flags & GLASSESCOVERSEYES)))
// you can't stab someone in the eyes wearing a mask!
user << "\blue You're going to need to remove that mask/helmet/glasses first."
return
+ if(istype(M, /mob/living/carbon/alien))//Aliens don't have eyes./N
+ user << "\blue You cannot locate any eyes on this creature!"
+ return
+
for(var/mob/O in viewers(M, null))
if(O == (user || M)) continue
if(M == user) O.show_message(text("\red [] has stabbed themself with []!", user, src), 1)
diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm
index 79b6a9b150..b1b82f175f 100644
--- a/code/game/objects/items/weapons/swords_axes_etc.dm
+++ b/code/game/objects/items/weapons/swords_axes_etc.dm
@@ -127,7 +127,7 @@ STUN BATON
if(status == 1 && charges == 0)
user << "\red Not enough charge"
return
- if((charges > 0 && status == 1) && (istype(H, /mob/living/carbon/human)))
+ if((charges > 0 && status == 1) && (istype(H, /mob/living/carbon)))
flick("baton_active", src)
if (user.a_intent == "hurt")
/* if (!istype(H:r_hand, /obj/item/weapon/shield/riot) && prob(40))
@@ -176,39 +176,6 @@ STUN BATON
M.lastattacker = user
for(var/mob/O in viewers(M))
if (O.client) O.show_message("\red [M] has been stunned with the stun baton by [user]!", 1, "\red You hear someone fall", 2)
- else if((charges > 0 && status == 1) && (istype(M, /mob/living/carbon/monkey)))
- flick("baton_active", src)
- if (user.a_intent == "hurt")
- playsound(src.loc, 'Genhit.ogg', 50, 1, -1)
- if(isrobot(user))
- var/mob/living/silicon/robot/R = user
- R.cell.charge -= 20
- else
- charges--
- if (M.weakened < 1 && (!(M.mutations & 8)) )
- M.weakened = 1
- if (M.stuttering < 1 && (!(M.mutations & 8)) )
- M.stuttering = 1
- ..()
- if (M.stunned < 1 && (!(M.mutations & 8)) )
- M.stunned = 1
- else
- playsound(src.loc, 'Egloves.ogg', 50, 1, -1)
- if(isrobot(user))
- var/mob/living/silicon/robot/R = user
- R.cell.charge -= 20
- else
- charges--
- if (M.weakened < 10 && (!(M.mutations & 8)) )
- M.weakened = 10
- if (M.stuttering < 10 && (!(M.mutations & 8)) )
- M.stuttering = 10
- if (M.stunned < 10 && (!(M.mutations & 8)) )
- M.stunned = 10
- user.lastattacked = M
- M.lastattacker = user
- for(var/mob/O in viewers(M))
- if (O.client) O.show_message("\red [M] has been stunned with the stun baton by [user]!", 1, "\red You hear someone fall", 2)
/obj/item/weapon/classic_baton/attack(mob/M as mob, mob/user as mob)
if ((usr.mutations & 16) && prob(50))
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 8cacdf6d98..e1cbe22c5e 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -36,10 +36,15 @@ WELDINGTOOOL
if(!(user.zone_sel.selecting == ("eyes" || "head")))
return ..()
var/mob/living/carbon/human/H = M
+
if(istype(M, /mob/living/carbon/human) && ((H.head && H.head.flags & HEADCOVERSEYES) || (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || (H.glasses && H.glasses.flags & GLASSESCOVERSEYES)))
// you can't stab someone in the eyes wearing a mask!
user << "\blue You're going to need to remove that mask/helmet/glasses first."
return
+ if(istype(M, /mob/living/carbon/alien))//Aliens don't have eyes./N
+ user << "\blue You cannot locate any eyes on this creature!"
+ return
+
for(var/mob/O in viewers(M, null))
if(O == (user || M)) continue
if(M == user) O.show_message(text("\red [] has stabbed themself with []!", user, src), 1)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
index be70d500bd..4936c73b5c 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
@@ -24,7 +24,7 @@ These are being worked on.
return
/*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.*/
+Doesn't work on other aliens/AI.*/
/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."
@@ -37,6 +37,10 @@ Doesn't work on silicon mobs or other aliens.*/
src << "\green Your allies are not a valid target."
return
if(src.toxloss >= 50)
+ src << "\green You spit neurotoxin at [target]."
+ for(var/mob/O in oviewers())
+ if ((O.client && !( O.blinded )))
+ O << "\red [src] spits neurotoxin at [target]!"
src.toxloss -= 50
var/turf/T = usr.loc
var/turf/U = (istype(target, /atom/movable) ? target.loc : target)
@@ -199,7 +203,7 @@ Doesn't work on silicon mobs or other aliens.*/
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 [src] vomits up a thick purple substance and begins to shape it!"), 1)
+ O.show_message(text("\red [src] vomits up a thick purple substance and begins to shape it!"), 1)
//var/obj/alien/resin/R = new(src.loc)
new /obj/alien/resin(src.loc)
else
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index 5b74e4ea5e..35a35659c5 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -189,10 +189,8 @@ This is all very silly and I will probably remove it in the future. /N
return
else if(flag == PROJECTILE_LASER)
var/d = 20
-
- if (!src.eye_blurry) src.eye_blurry = 4 //This stuff makes no sense but lasers need a buff.
+// if (!src.eye_blurry) src.eye_blurry = 4 //This stuff makes no sense but lasers need a buff./ It really doesn't make any sense. /N
if (prob(25)) src.stunned++
-
if (src.stat != 2)
src.bruteloss += d
src.updatehealth()
@@ -615,25 +613,38 @@ This is all very silly and I will probably remove it in the future. /N
return
/mob/living/carbon/alien/humanoid/attack_paw(mob/living/carbon/monkey/M as mob)
- if(istype(M, /mob/living/carbon/alien)) return//Quick fix since these display double for aliens when they interact with aliens.
- 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] shakes [src] trying to wake it up!", ), 1)
- else
- if (istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
- return
- if (src.health > 0)
- playsound(src.loc, 'bite.ogg', 50, 1, -1)
- for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [M.name] has bit [src]!"), 1)
- src.bruteloss += rand(1, 3)
+ if(!(istype(M, /mob/living/carbon/monkey))) return//Fix for aliens receiving double messages when attacking other aliens.
- src.updatehealth()
+ 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
+ ..()
+
+ switch(M.a_intent)
+
+ if ("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))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\blue [M.name] shakes [src] trying to wake it up!", ), 1)
+ else
+ if (istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
+ return
+ if (src.health > 0)
+ playsound(src.loc, 'bite.ogg', 50, 1, -1)
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [M.name] has bit [src]!"), 1)
+ src.bruteloss += rand(1, 3)
+ src.updatehealth()
return
/mob/living/carbon/alien/humanoid/attack_hand(mob/living/carbon/human/M as mob)
@@ -647,7 +658,7 @@ This is all very silly and I will probably remove it in the future. /N
..()
- if ((M.gloves && M.gloves.elecgen == 1 && M.a_intent == "hurt") /*&& (!istype(src:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
+ if(M.gloves && M.gloves.elecgen == 1)//Stungloves. Any contact will stun the alien.
if(M.gloves.uses > 0)
M.gloves.uses--
if (src.weakened < 5)
@@ -657,40 +668,39 @@ This is all very silly and I will probably remove it in the future. /N
if (src.stunned < 5)
src.stunned = 5
for(var/mob/O in viewers(src, null))
- if (O.client)
- O.show_message("\red [src] has been touched with the stun gloves by [M]!", 1, "\red You hear someone fall", 2)
- else
- M.gloves.elecgen = 0
- M << "\red Not enough charge! "
- return
+ if ((O.client && !( O.blinded )))
+ O.show_message("\red [src] has been touched with the stun gloves by [M]!", 1, "\red You hear someone fall.", 2)
- if (M.a_intent == "help")
- if (src.health > 0)
- 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
- playsound(src.loc, 'thudswoosh.ogg', 50, 1, -1)
- for(var/mob/O in viewers(src, null))
- O.show_message(text("\blue [] shakes [] trying to wake [] up!", M, src, src), 1)
- else
- if (M.health >= -75.0)
- if (((M.head && M.head.flags & 4) || ((M.wear_mask && !( M.wear_mask.flags & 32 )) || ((src.head && src.head.flags & 4) || (src.wear_mask && !( src.wear_mask.flags & 32 ))))))
- M << "\blue Remove that mask!"
- return
- var/obj/equip_e/human/O = new /obj/equip_e/human( )
- O.source = M
- O.target = src
- O.s_loc = M.loc
- O.t_loc = src.loc
- O.place = "CPR"
- src.requests += O
- spawn( 0 )
- O.process()
- return
- else
- if (M.a_intent == "grab")
+ switch(M.a_intent)
+
+ if ("help")
+ if (src.health > 0)
+ 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
+ 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("\blue [] shakes [] trying to wake [] up!", M, src, src), 1)
+ else
+ if (M.health >= -75.0)
+ if (((M.head && M.head.flags & 4) || ((M.wear_mask && !( M.wear_mask.flags & 32 )) || ((src.head && src.head.flags & 4) || (src.wear_mask && !( src.wear_mask.flags & 32 ))))))
+ M << "\blue Remove that mask!"
+ return
+ var/obj/equip_e/human/O = new /obj/equip_e/human( )
+ O.source = M
+ O.target = src
+ O.s_loc = M.loc
+ O.t_loc = src.loc
+ O.place = "CPR"
+ src.requests += O
+ spawn( 0 )
+ O.process()
+ return
+
+ if ("grab")
if (M == src)
return
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab( M )
@@ -705,50 +715,57 @@ This is all very silly and I will probably remove it in the future. /N
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 [] passively!", M, src), 1)
- else
- if (M.a_intent == "hurt" && !(M.gloves && M.gloves.elecgen == 1))
- var/damage = rand(1, 9)
- if (prob(90))
- if (M.mutations & 8)
- damage += 5
- spawn(0)
- src.paralysis += 1
- step_away(src,M,15)
- sleep(3)
- step_away(src,M,15)
- playsound(src.loc, "punch", 25, 1, -1)
- for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has grabbed [] passively!", M, src), 1)
+
+ if ("hurt")
+ var/damage = rand(1, 9)
+ if (prob(90))
+ if (M.mutations & 8)
+ damage += 5
+ spawn(0)
+ src.paralysis += 1
+ step_away(src,M,15)
+ sleep(3)
+ step_away(src,M,15)
+ playsound(src.loc, "punch", 25, 1, -1)
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
O.show_message(text("\red [] has punched []!", M, src), 1)
- if (damage > 4.9)
- if (src.weakened < 10)
- src.weakened = rand(10, 15)
- for(var/mob/O in viewers(M, null))
+ if (damage > 4.9)
+ if (src.weakened < 10)
+ src.weakened = rand(10, 15)
+ for(var/mob/O in viewers(M, null))
+ if ((O.client && !( O.blinded )))
O.show_message(text("\red [] has weakened []!", M, src), 1, "\red You hear someone fall.", 2)
- src.bruteloss += damage
- src.updatehealth()
- else
- playsound(src.loc, 'punchmiss.ogg', 25, 1, -1)
- for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [] has attempted to punch []!", M, src), 1)
- return
+ src.bruteloss += damage
+ src.updatehealth()
else
- if (!( src.lying ) && !(M.gloves && M.gloves.elecgen == 1))
- var/randn = rand(1, 100)
- if (randn <= 25)
- src.weakened = 2
+ 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 [] has attempted to punch []!", M, src), 1)
+
+ if ("disarm")
+ if (!src.lying)
+ var/randn = rand(1, 100)
+ if (randn <= 25)
+ src.weakened = 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 [] has pushed down []!", M, src), 1)
+ else
+ if (randn <= 60)
+ src.drop_item()
playsound(src.loc, 'thudswoosh.ogg', 50, 1, -1)
for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [] has pushed down []!", M, src), 1)
- else
- if (randn <= 60)
- src.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 [] has disarmed []!", M, src), 1)
- else
- playsound(src.loc, 'punchmiss.ogg', 25, 1, -1)
- for(var/mob/O in viewers(src, null))
+ 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 [] has attempted to disarm []!", M, src), 1)
return
@@ -768,25 +785,29 @@ In all, this is a lot like the monkey code. /N
..()
- 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)
+ switch(M.a_intent)
- else
- if (src.health > 0)
- playsound(src.loc, 'bite.ogg', 50, 1, -1)
- var/damage = rand(1, 3)
+ if ("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("\red [M.name] has bit []!", src), 1)
- src.bruteloss += damage
- src.updatehealth()
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\blue [M.name] nuzzles [] trying to wake it up!", src), 1)
+
else
- M << "\green [src.name] is too injured for that."
+ if (src.health > 0)
+ playsound(src.loc, 'bite.ogg', 50, 1, -1)
+ var/damage = rand(1, 3)
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [M.name] has bit []!", src), 1)
+ src.bruteloss += damage
+ src.updatehealth()
+ else
+ M << "\green [src.name] is too injured for that."
return
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index 4098d9eb52..84e7a5796d 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -96,7 +96,7 @@
else if(flag == PROJECTILE_LASER)
var/d = 20
- if (!src.eye_blurry) src.eye_blurry = 4 //This stuff makes no sense but lasers need a buff.
+// if (!src.eye_blurry) src.eye_blurry = 4 //This stuff makes no sense but lasers need a buff./ It really doesn't make any sense. /N
if (prob(25)) src.stunned++
if (src.stat != 2)
@@ -331,27 +331,38 @@
return
/mob/living/carbon/alien/larva/attack_paw(mob/living/carbon/monkey/M as mob)
- if(istype(M, /mob/living/carbon/alien)) return//Quick fix since these display double for aliens when they interact with aliens.
- 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] shakes [src] trying to wake it up!", ), 1)
- else
- if (istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
- return
- if (src.health > 0)
- playsound(src.loc, 'bite.ogg', 50, 1, -1)
+ if(!(istype(M, /mob/living/carbon/monkey))) return//Fix for aliens receiving double messages when attacking other aliens.
+
+ 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
+ ..()
+
+ switch(M.a_intent)
+
+ if ("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("\red [M.name] has bit [src]!"), 1)
- var/damage = rand(1, 3)
-
- src.bruteloss += damage
-
- src.updatehealth()
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\blue [M.name] shakes [src] trying to wake it up!", ), 1)
+ else
+ if (istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
+ return
+ if (src.health > 0)
+ playsound(src.loc, 'bite.ogg', 50, 1, -1)
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [M.name] has bit [src]!"), 1)
+ src.bruteloss += rand(1, 3)
+ src.updatehealth()
return
/mob/living/carbon/alien/larva/attack_hand(mob/living/carbon/human/M as mob)
@@ -363,7 +374,9 @@
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 && M.gloves.elecgen == 1)//Stungloves. Any contact will stun the alien.
if(M.gloves.uses > 0)
M.gloves.uses--
if (src.weakened < 5)
@@ -373,40 +386,39 @@
if (src.stunned < 5)
src.stunned = 5
for(var/mob/O in viewers(src, null))
- if (O.client)
- O.show_message("\red [src] has been touched with the stun gloves by [M]!", 1, "\red You hear someone fall", 2)
- else
- M.gloves.elecgen = 0
- M << "\red Not enough charge! "
- return
+ if ((O.client && !( O.blinded )))
+ O.show_message("\red [src] has been touched with the stun gloves by [M]!", 1, "\red You hear someone fall.", 2)
- if (M.a_intent == "help")
- if (src.health > 0)
- 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
- playsound(src.loc, 'thudswoosh.ogg', 50, 1, -1)
- for(var/mob/O in viewers(src, null))
- O.show_message(text("\blue [] shakes [] trying to wake [] up!", M, src, src), 1)
- else
- if (M.health >= -75.0)
- if ((M.head && M.head.flags & 4) || (M.wear_mask && !( M.wear_mask.flags & 32 )) )
- M << "\blue Remove that mask!"
- return
- var/obj/equip_e/human/O = new /obj/equip_e/human( )
- O.source = M
- O.target = src
- O.s_loc = M.loc
- O.t_loc = src.loc
- O.place = "CPR"
- src.requests += O
- spawn( 0 )
- O.process()
- return
- else
- if (M.a_intent == "grab")
+ switch(M.a_intent)
+
+ if ("help")
+ if (src.health > 0)
+ 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
+ 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("\blue [] shakes [] trying to wake [] up!", M, src, src), 1)
+ else
+ if (M.health >= -75.0)
+ if ((M.head && M.head.flags & 4) || (M.wear_mask && !( M.wear_mask.flags & 32 )) )
+ M << "\blue Remove that mask!"
+ return
+ var/obj/equip_e/human/O = new /obj/equip_e/human( )
+ O.source = M
+ O.target = src
+ O.s_loc = M.loc
+ O.t_loc = src.loc
+ O.place = "CPR"
+ src.requests += O
+ spawn( 0 )
+ O.process()
+ return
+
+ if ("grab")
if (M == src)
return
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab( M )
@@ -421,33 +433,36 @@
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 [] passively!", M, src), 1)
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has grabbed [] passively!", M, src), 1)
+
else
- if (M.a_intent == "hurt" && !(M.gloves && M.gloves.elecgen == 1))
- var/damage = rand(1, 9)
-
- if (prob(90))
- if (M.mutations & 8 && prob(90))
- damage += 5
- spawn(0)
- src.paralysis += 1
- step_away(src,M,15)
- sleep(3)
- step_away(src,M,15)
- playsound(src.loc, "punch", 25, 1, -1)
- for(var/mob/O in viewers(src, null))
+ var/damage = rand(1, 9)
+ if (prob(90))
+ if (M.mutations & 8)
+ damage += 5
+ spawn(0)
+ src.paralysis += 1
+ step_away(src,M,15)
+ sleep(3)
+ step_away(src,M,15)
+ playsound(src.loc, "punch", 25, 1, -1)
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
O.show_message(text("\red [] has punched []!", M, src), 1)
-
- src.bruteloss += damage
-
- src.updatehealth()
- else
- playsound(src.loc, 'punchmiss.ogg', 25, 1, -1)
- for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [] has attempted to punch []!", M, src), 1)
- return
+ if (damage > 4.9)
+ if (src.weakened < 10)
+ src.weakened = rand(10, 15)
+ for(var/mob/O in viewers(M, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has weakened []!", M, src), 1, "\red You hear someone fall.", 2)
+ src.bruteloss += damage
+ src.updatehealth()
else
- return
+ 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 [] has attempted to punch []!", M, src), 1)
return
/mob/living/carbon/alien/larva/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
@@ -461,25 +476,29 @@
..()
- 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)
+ switch(M.a_intent)
- else
- if (src.health > 0)
- playsound(src.loc, 'bite.ogg', 50, 1, -1)
- var/damage = rand(1, 3)
+ if ("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("\red [M.name] has bit []!", src), 1)
- src.bruteloss += damage
- src.updatehealth()
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\blue [M.name] nuzzles [] trying to wake it up!", src), 1)
+
else
- M << "\green [src.name] is too injured for that."
+ if (src.health > 0)
+ playsound(src.loc, 'bite.ogg', 50, 1, -1)
+ var/damage = rand(1, 3)
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [M.name] has bit []!", src), 1)
+ src.bruteloss += damage
+ src.updatehealth()
+ else
+ M << "\green [src.name] is too injured for that."
return
/mob/living/carbon/alien/larva/restrained()
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 6778e6cd03..1846744a5d 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -5,6 +5,18 @@
if (!dna)
dna = new /datum/dna( null )
+/*
+ if(istype(src, /mob/living/carbon/human/vampire))
+ spawn (1)
+ src.verbs += /mob/proc/mist
+ src.verbs += /mob/proc/port
+ src.verbs += /mob/proc/hellfire
+ src.verbs += /mob/proc/veil
+ src.verbs += /mob/proc/charm
+ src.verbs += /mob/proc/lights
+ src.verbs += /mob/proc/blood
+ src.mutantrace = "vampire"
+*/
spawn (1)
var/datum/organ/external/chest/chest = new /datum/organ/external/chest( src )
chest.owner = src
@@ -1407,12 +1419,14 @@
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
- //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")
+ switch(M.a_intent)
+
+ if ("help")
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\blue [M] caresses [src] with its scythe like arm."), 1)
+ if ("grab")
+ //This will be changed to skin, where we can skin a dead human corpse//Actually, that sounds kind of impractical./N
if (M == src)
return
if (src.w_uniform)
@@ -1429,106 +1443,123 @@
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 [] passively!", M, src), 1)
- else
- if (M.a_intent == "hurt")
- 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" )))
- t = "head"
- var/def_zone = ran_zone(t)
- if (src.organs[def_zone])
- affecting = src.organs[def_zone]
- if ((istype(affecting, /datum/organ/external) && prob(95)))
- playsound(src.loc, 'slice.ogg', 25, 1, -1)
- for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has grabbed [] passively!", M, src), 1)
+
+ if ("hurt")
+ 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" )))
+ t = "head"
+ var/def_zone = ran_zone(t)
+ if (src.organs[def_zone])
+ affecting = src.organs[def_zone]
+ if ((istype(affecting, /datum/organ/external) && prob(95)))
+ playsound(src.loc, 'slice.ogg', 25, 1, -1)
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
O.show_message(text("\red [] has slashed at []!", 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(5)))
- if (prob(20))
- affecting.take_damage(damage, 0)
- else
- src.show_message("\red You have been protected from a hit to the head.")
- return
- if (damage > 4.9)
- if (src.weakened < 10)
- src.weakened = rand(10, 15)
- for(var/mob/O in viewers(M, null))
+ if (def_zone == "head")
+ 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
+ src.show_message("\red You have been protected from a hit to the head.")
+ return
+ if (damage >= 25)
+ if (src.weakened < 10)
+ src.weakened = rand(10, 15)
+ for(var/mob/O in viewers(M, null))
+ if ((O.client && !( O.blinded )))
O.show_message(text("\red [] has wounded []!", 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(10)))
+ src.show_message("\blue You have been protected from a hit to the chest.")
+ return
+ if (damage >= 25)
+ if (prob(50))
+ if (src.weakened < 5)
+ src.weakened = 5
+ playsound(src.loc, 'slashmiss.ogg', 50, 1, -1)
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has tackled down []!", M, src), 1, "\red You hear someone fall.", 2)
+ else
+ if (src.stunned < 5)
+ src.stunned = 5
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has stunned []!", M, src), 1)
+ if(src.stat != 2) src.stat = 1
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(10)))
- src.show_message("\blue You have been protected from a hit to the chest.")
+ 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(1)))
+ src.show_message("\blue You have been protected from a hit to the lower chest.")
return
- if (damage > 4.9)
+ if (damage >= 25)
if (prob(50))
- if (src.weakened < 5)
- src.weakened = 5
- playsound(src.loc, 'slashmiss.ogg', 50, 1, -1)
+ if (src.weakened < 3)
+ src.weakened = 3
for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [] has tackled down []!", M, src), 1, "\red You hear someone fall.", 2)
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has tackled down []!", M, src), 1, "\red You hear someone fall.", 2)
else
- if (src.stunned < 5)
- src.stunned = 5
+ if (src.stunned < 3)
+ src.stunned = 3
for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [] has stunned []!", M, src), 1)
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has stunned []!", M, src), 1)
if(src.stat != 2) src.stat = 1
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(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 [] has tackled down []!", M, src), 1, "\red You hear someone fall.", 2)
- else
- if (src.stunned < 3)
- src.stunned = 3
- for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [] has stunned []!", M, src), 1)
- if(src.stat != 2) src.stat = 1
- affecting.take_damage(damage)
- else
- affecting.take_damage(damage)
-
- src.UpdateDamageIcon()
-
- src.updatehealth()
+ affecting.take_damage(damage)
+ src.UpdateDamageIcon()
+ src.updatehealth()
+ else
+ playsound(src.loc, 'slashmiss.ogg', 50, 1, -1)
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [M] has lunged at [src] but missed!"), 1)
+ if ("disarm")
+ var/damage = 5
+ var/datum/organ/external/affecting = src.organs["chest"]
+ var/t = M.zone_sel.selecting
+ if ((t in list( "eyes", "mouth" )))
+ t = "head"
+ var/def_zone = ran_zone(t)
+ if (src.organs[def_zone])
+ affecting = src.organs[def_zone]
+ if (src.w_uniform)
+ src.w_uniform.add_fingerprint(M)
+ var/randn = rand(1, 100)
+ if (randn <= 90)
+ playsound(src.loc, 'pierce.ogg', 25, 1, -1)
+ if (src.weakened < 15)
+ src.weakened = rand(10, 15)
+ affecting.take_damage(damage)
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has tackled down []!", M, src), 1)
+ else
+ if (randn <= 99)
+ playsound(src.loc, 'slash.ogg', 25, 1, -1)
+ src.drop_item()
+ affecting.take_damage(damage)
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] disarmed []!", M, src), 1)
else
playsound(src.loc, 'slashmiss.ogg', 50, 1, -1)
for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [M] has lunged at [src] but missed!"), 1)
- return
- else
- //disarm
- if (!( src.lying ))
- if (src.w_uniform)
- src.w_uniform.add_fingerprint(M)
- var/randn = rand(1, 100)
- if (randn <= 25)
- playsound(src.loc, 'pierce.ogg', 25, 1, -1)
- src.weakened = 2
- for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [] has tackled over []!", M, src), 1)
- else
- if (randn <= 60)
- playsound(src.loc, 'slash.ogg', 25, 1, -1)
- src.drop_item()
- for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [] has knocked the item out of []'s hand!", M, src), 1)
- else
- playsound(src.loc, 'slashmiss.ogg', 50, 1, -1)
- for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [] has tried to knock the item out of []'s hand!", M, src), 1)
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has tried to disarm []!", M, src), 1)
return
/mob/living/carbon/human/attack_hand(mob/living/carbon/human/M as mob)
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index 2c2e8578b9..60e38830f8 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -283,28 +283,27 @@
M << "No attacking people at spawn, you jackass."
return
- if (M.a_intent == "help")
- for(var/mob/O in viewers(src, null))
- if ((O.client && !( O.blinded )))
- 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 [] has slashed [src.name]!", M), 1)
+ switch(M.a_intent)
+ if ("help")
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\blue [M] caresses [src] with its scythe like arm."), 1)
+ if ("hurt")
+ if ((prob(95) && src.health > 0))
playsound(src.loc, 'slice.ogg', 25, 1, -1)
var/damage = rand(15, 30)
- if (prob(40))
+ if (damage >= 25)
damage = rand(20, 40)
- if (src.paralysis < 5)
+ if (src.paralysis < 15)
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 [] has wounded [src.name]!", M), 1)
- return
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has wounded [src.name]!", M), 1)
+ else
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has slashed [src.name]!", M), 1)
src.bruteloss += damage
src.updatehealth()
else
@@ -312,36 +311,39 @@
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red [] has attempted to lunge at [src.name]!", 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)
+
+ if ("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
- if (!( src.paralysis ))
- playsound(src.loc, 'pierce.ogg', 25, 1, -1)
- if(prob(25))
- src.paralysis = 2
- for(var/mob/O in viewers(src, null))
- if ((O.client && !( O.blinded )))
- O.show_message(text("\red [] has tackled down [src.name]!", M), 1)
- else
- drop_item()
- for(var/mob/O in viewers(src, null))
- if ((O.client && !( O.blinded )))
- O.show_message(text("\red [] has disarmed [src.name]!", M), 1)
+ 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)
+
+ if ("disarm")
+ playsound(src.loc, 'pierce.ogg', 25, 1, -1)
+ var/damage = 5
+ if(prob(95))
+ src.weakened = rand(10, 15)
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has tackled down [src.name]!", M), 1)
+ else
+ drop_item()
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has disarmed [src.name]!", M), 1)
+ src.bruteloss += damage
+ src.updatehealth()
return
/mob/living/carbon/monkey/Stat()
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 9bfc65560c..20f7cf9b13 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -231,6 +231,40 @@
src.stunned = min(5, src.stunned)
return
+/mob/living/silicon/ai/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
+
+ switch(M.a_intent)
+
+ if ("help")
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\blue [M] caresses [src]'s plating with its scythe like arm."), 1)
+
+ else //harm
+ var/damage = rand(10, 20)
+ if (prob(90))
+ playsound(src.loc, 'slash.ogg', 25, 1, -1)
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has slashed at []!", M, src), 1)
+ if(prob(8))
+ flick("noise", src.flash)
+ src.bruteloss += damage
+ src.updatehealth()
+ else
+ playsound(src.loc, 'slashmiss.ogg', 25, 1, -1)
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] took a swipe at []!", M, src), 1)
+ return
+
/mob/living/silicon/ai/proc/switchCamera(var/obj/machinery/camera/C)
usr:cameraFollow = null
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index eedce5abea..e62079cb56 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -460,66 +460,79 @@
return ..()
/mob/living/silicon/robot/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
+ if (!ticker)
+ M << "You cannot attack people before the game has started."
+ return
- 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)
+ if (istype(src.loc, /turf) && istype(src.loc.loc, /area/start))
+ M << "No attacking people at spawn, you jackass."
+ return
- 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 [] passively!", M, src), 1)
+ switch(M.a_intent)
- else if (M.a_intent == "hurt")
- var/damage = rand(10, 20)
- if (prob(90))
- /*
- if (M.class == "combat")
- damage += 15
- if(prob(20))
- src.weakened = max(src.weakened,4)
- src.stunned = max(src.stunned,4)
- */
-
- playsound(src.loc, 'slash.ogg', 25, 1, -1)
+ if ("help")
for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [] has slashed at []!", M, src), 1)
- if(prob(8))
- flick("noise", src.flash)
- src.bruteloss += damage
- src.updatehealth()
- else
- playsound(src.loc, 'slashmiss.ogg', 25, 1, -1)
- for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [] took a swipe at []!", M, src), 1)
- return
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\blue [M] caresses [src]'s plating with its scythe like arm."), 1)
- else if (M.a_intent == "disarm")
- if(!(src.lying))
- var/randn = rand(1, 100)
- if (randn <= 40)
- src.stunned = 5
- step(src,get_dir(M,src))
- spawn(5) step(src,get_dir(M,src))
- playsound(src.loc, 'slash.ogg', 50, 1, -1)
+ if ("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))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has grabbed [] passively!", M, src), 1)
+
+ if ("hurt")
+ var/damage = rand(10, 20)
+ if (prob(90))
+ /*
+ if (M.class == "combat")
+ damage += 15
+ if(prob(20))
+ src.weakened = max(src.weakened,4)
+ src.stunned = max(src.stunned,4)
+ What is this?*/
+
+ playsound(src.loc, 'slash.ogg', 25, 1, -1)
for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [] has pushed back []!", M, src), 1)
+ O.show_message(text("\red [] has slashed at []!", M, src), 1)
+ if(prob(8))
+ flick("noise", src.flash)
+ src.bruteloss += damage
+ src.updatehealth()
else
playsound(src.loc, 'slashmiss.ogg', 25, 1, -1)
for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [] attempted to push back []!", M, src), 1)
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] took a swipe at []!", M, src), 1)
+
+ if ("disarm")
+ if(!(src.lying))
+ var/randn = rand(1, 100)
+ if (randn <= 85)
+ src.stunned = 5
+ step(src,get_dir(M,src))
+ spawn(5) step(src,get_dir(M,src))
+ playsound(src.loc, 'pierce.ogg', 50, 1, -1)
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] has forced back []!", M, src), 1)
+ else
+ playsound(src.loc, 'slashmiss.ogg', 25, 1, -1)
+ for(var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message(text("\red [] attempted to force back []!", M, src), 1)
return
/mob/living/silicon/robot/attack_hand(mob/user)
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index bfcabc7ba8..60ce77b5e9 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -240,7 +240,6 @@
if (src.client)
src.client.mob = O
O.loc = src.loc
- O.a_intent = "hurt"
O << "You are now an alien."
del(src)
return
\ No newline at end of file
diff --git a/icons/mob/screen1_alien.dmi b/icons/mob/screen1_alien.dmi
index 3cb3a996a8..eddafbc303 100644
Binary files a/icons/mob/screen1_alien.dmi and b/icons/mob/screen1_alien.dmi differ