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