diff --git a/code/defines/mob/simple_animal/crab.dm b/code/defines/mob/simple_animal/crab.dm index c75e7831566..3fec1a9e5cd 100644 --- a/code/defines/mob/simple_animal/crab.dm +++ b/code/defines/mob/simple_animal/crab.dm @@ -15,6 +15,7 @@ response_disarm = "gently pushes aside the" response_harm = "stomps the" stop_automated_movement = 1 + friendly = "pinches" /mob/living/simple_animal/crab/Life() ..() diff --git a/code/defines/mob/simple_animal/life.dm b/code/defines/mob/simple_animal/life.dm index be9a3b2c888..28479e790a6 100644 --- a/code/defines/mob/simple_animal/life.dm +++ b/code/defines/mob/simple_animal/life.dm @@ -38,7 +38,8 @@ var/max_co2 = 5 var/min_n2 = 0 var/max_n2 = 0 - var/unsuitable_atoms_damage = 2 //This damage is taken when atmos doesn't fit all the requirements above. + var/unsuitable_atoms_damage = 2 //This damage is taken when atmos doesn't fit all the requirements above + //LETTING SIMPLE ANIMALS ATTACK? WHAT COULD GO WRONG. Defaults to zero so Ian can still be cuddly var/melee_damage_lower = 0 @@ -46,7 +47,6 @@ var/attacktext = "attacks" var/attack_sound = null var/friendly = "nuzzles" //If the mob does no damage with it's attack - var/wall_smash = 0 //if they can smash walls /mob/living/simple_animal/New() ..() @@ -197,14 +197,26 @@ return "[emote], \"[text]\"" return "says, \"[text]\""; -/mob/living/simple_animal/emote(var/act,var/m_type=1,var/message = null) - if(act == "me") - for (var/mob/O in viewers(src, null)) - O.show_message("[src] [message]") - else if(act) +/mob/living/simple_animal/emote(var/act) + if(act) for (var/mob/O in viewers(src, null)) O.show_message("[src] [act].") + +/mob/living/simple_animal/attack_animal(mob/living/simple_animal/M as mob) + if(M.melee_damage_upper == 0) + M.emote("[M.friendly] [src]") + else + for(var/mob/O in viewers(src, null)) + O.show_message("\red [M] [M.attacktext] [src]!", 1) + var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) + health -= damage + +/mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj) + if(!Proj) return + src.health -= Proj.damage + return 0 + /mob/living/simple_animal/attack_hand(mob/living/carbon/human/M as mob) ..() diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm index 244ff000d6f..c1f08944ae9 100644 --- a/code/game/atom_procs.dm +++ b/code/game/atom_procs.dm @@ -39,8 +39,6 @@ /atom/proc/attack_metroid(mob/user as mob) return - - /atom/proc/hand_h(mob/user as mob) //human (hand) - restrained return diff --git a/code/modules/mob/simple_animal/shade.dm b/code/modules/mob/simple_animal/shade.dm new file mode 100644 index 00000000000..8854227fb0e --- /dev/null +++ b/code/modules/mob/simple_animal/shade.dm @@ -0,0 +1,46 @@ +/mob/living/simple_animal/shade + name = "Shade" + desc = "A bound spirit" + icon = 'mob.dmi' + icon_state = "shade" + icon_living = "shade" + icon_dead = "shade_dead" + max_health = 50 + health = 50 + speak_emote = list("hisses") + emote_hear = list("wails","screeches") + response_help = "puts their hand through" + response_disarm = "flails at" + response_harm = "punches the" + melee_damage_lower = 5 + melee_damage_upper = 15 + attacktext = "drains the life from" + minbodytemp = 0 + maxbodytemp = 4000 + min_oxy = 0 + max_co2 = 0 + max_tox = 0 + +/mob/living/simple_animal/shade/Life() + ..() + if (stat == 2) + new /obj/item/weapon/ectoplasm (src.loc) + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message("\red [src] lets out a contented sigh as their form unwinds. ") + del src + +/mob/living/simple_animal/shade/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri + if(istype(O, /obj/item/device/soulstone)) + O.transfer_soul("SHADE", src, user) + else + if(O.force) + health -= O.force + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") + else + usr << "\red This weapon is ineffective, it does no damage." + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message("\red [user] gently taps [src] with the [O]. ") \ No newline at end of file