diff --git a/code/modules/mob/simple_animal/carp.dm b/code/modules/mob/simple_animal/carp.dm index ad167a954cc..049ad47bcec 100644 --- a/code/modules/mob/simple_animal/carp.dm +++ b/code/modules/mob/simple_animal/carp.dm @@ -41,6 +41,7 @@ var/stance = CARP_STANCE_IDLE //Used to determine behavior var/stance_step = 0 //Used to delay checks depending on what stance the bear is in var/mob/living/target_mob //Once the bear enters attack stance, it will try to chase this mob. This it to prevent it changing it's mind between multiple mobs. + heat_damage_per_tick = 1 /mob/living/simple_animal/carp/elite desc = "A ferocious, fang-bearing creature that resembles a fish. It has an evil gleam in its eye." @@ -65,7 +66,8 @@ for( var/mob/living/L in viewers(7,src) ) if(iscarp(L)) continue if(!L.stat) - emote("gnashes at [L]") + if(prob(50)) + src.visible_message("[src] gnashes at [L]!") stance = CARP_STANCE_ATTACK target_mob = L break @@ -85,7 +87,7 @@ stance_step++ if(!target_mob || target_mob.stat) stance = CARP_STANCE_IDLE - stance_step = 3 //Make it very alert, so it quickly attacks again if a mob returns + stance_step = 4 //Make it very alert, so it quickly attacks again if a mob returns target_mob = null walk(src,0) return @@ -103,7 +105,6 @@ L.Weaken(5) L.visible_message("\the [src] knocks down \the [L]!") - /mob/living/simple_animal/carp/Die() ..() target_mob = null @@ -111,4 +112,74 @@ walk(src,0) /mob/living/simple_animal/carp/Process_Spacemove(var/check_drift = 0) - return //No drifting in space for space carp! //original comments do not steal \ No newline at end of file + return 0 //No drifting in space for space carp! //original comments do not steal + +/mob/living/simple_animal/carp/Process_Spaceslipping(var/prob_slip = 5) + return 0 + +//---- + +/mob/living/simple_animal/carp/cyborg + name = "cyborg space carp" + desc = "A ferocious, fang-bearing cyborg that resembles a fish. It has glowing red eyes." + speak = list("Objective established.","Goal: Terminate.","Mission parameters defined.","All casualties are acceptable.") + speak_emote = list("beeps") + emote_hear = list("makes a sinister clanking noise.","hisses and steams.","makes a menacing beeping noise.") + emote_see = list("sparks slightly.","flashes a red light ominously.") + speak_chance = 10 + var/firing = 0 + +/mob/living/simple_animal/carp/cyborg/Life() + ..() + walk(src,0) + + if(!stat) + if(prob(5)) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + switch(stance) + if(CARP_STANCE_ATTACKING) + if(target_mob) + src.dir = get_dir(src, target_mob) + /*if(get_dist(src, target_mob) > 5) + step_towards(src,target_mob)*/ + if(get_dist(src, target_mob) > 1 && !firing) + //fire laser eyes + firing = 1 + if(prob(40)) + emote("auto",1,"[pick("makes an ominous whining noise!","makes a low humming noise!","begins charging up something!")]") + + spawn(40) + if(!target_mob) + return + firing = 0 + //load_into_chamber() + var/obj/item/projectile/beam/B = new(src) + + B.firer = src + //B.def_zone = targloc + //in_chamber.def_zone = user.zone_sel.selecting + + var/turf/targloc = get_turf(target_mob) + var/turf/myloc = get_turf(src) + + B.original = targloc + B.loc = myloc + B.starting = myloc + B.silenced = 0 + B.current = myloc + B.yo = targloc.y - myloc.y + B.xo = targloc.x - myloc.x + // + B.fired() + + //shake the camera? probably not, these lasers don't explode... yet + /*for(var/mob/M in view(src,7)) + shake_camera(user, recoil + 1, recoil)*/ + playsound(src, pick('pulse.ogg','pulse2.ogg','pulse3.ogg'), 50, 1) + +/mob/living/simple_animal/carp/cyborg/Die() + if(prob(15)) + src.say_auto("I'll be back!") + ..() diff --git a/code/modules/mob/simple_animal/simple_animal_life.dm b/code/modules/mob/simple_animal/simple_animal_life.dm index eb5e87b7482..8b480b9a611 100644 --- a/code/modules/mob/simple_animal/simple_animal_life.dm +++ b/code/modules/mob/simple_animal/simple_animal_life.dm @@ -25,7 +25,7 @@ if(!ckey && prob(speak_chance)) var/length = (speak ? speak.len : 0) + (emote_see ? emote_see.len : 0) + (emote_hear ? emote_hear.len : 0) if(speak && speak.len && prob((speak.len / length) * 100)) - say(pick(speak)) + src.say_auto(pick(speak)) else if(emote_see && emote_see.len && prob((emote_see.len / length) * 100)) emote("auto",1,pick(emote_see)) else if(emote_hear && emote_hear.len) diff --git a/code/modules/mob/simple_animal/simple_animal_misc.dm b/code/modules/mob/simple_animal/simple_animal_misc.dm index 5db3ebe690c..7f96519708b 100644 --- a/code/modules/mob/simple_animal/simple_animal_misc.dm +++ b/code/modules/mob/simple_animal/simple_animal_misc.dm @@ -32,12 +32,15 @@ for(var/mob/M in view(src,7)) if(istype(M, src.type) || M.universal_speak) M << say_quote(message) - else if(speak.len) - M << "[src] [pick(speak)]" else M << "[src] [pick("makes some strange noises.","makes some strange noises.","makes some strange noises.","makes a small commotion.","kicks up a fuss about something.")]" return +//when talking, simple_animals can only understand each other +/mob/living/simple_animal/proc/say_auto(var/message) + for(var/mob/M in view(src,7)) + M << "[src] [pick(speak_emote)], \"[message]\"" + /mob/living/simple_animal/emote(var/act,var/m_type=1,var/message = null) switch(act) if ("scream") diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index ce0ca3f229a..5836872048a 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ