diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index 048742fb672..786eb77ba4d 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -23,7 +23,10 @@
var/minimum_distance = 1 //Minimum approach distance, so ranged mobs chase targets down, but still keep their distance set in tiles to the target, set higher to make mobs keep distance
var/search_objects = 0 //If we want to consider objects when searching around, set this to 1. If you want to search for objects while also ignoring mobs until hurt, set it to 2. To completely ignore mobs, even when attacked, set it to 3
var/list/wanted_objects = list() //A list of objects that will be checked against to attack, should we have search_objects enabled
- var/execute = 0 //Mobs with execute set to 1 will attempt to attack things that are unconscious, Mobs with execute set to 2 will attempt to attack the dead.
+ var/stat_attack = 0 //Mobs with stat_attack to 1 will attempt to attack things that are unconscious, Mobs with stat_attack set to 2 will attempt to attack the dead.
+ var/stat_exclusive = 0 //Mobs with this set to 1 will exclusively attack things defined by stat_attack, stat_attack 2 means they will only attack corpses
+ var/environment_smash = 1 //Mobs with this set to 1 will attempt to break things in the environment to pursue targets, on by default for original simple mobs
+ var/attack_faction = null //Put a faction string here to have a mob only ever attack a specific faction
/mob/living/simple_animal/hostile/Life()
@@ -109,9 +112,9 @@
return 1
if(isliving(the_target) && search_objects < 2)
var/mob/living/L = the_target
- if(L.stat > execute)
+ if(L.stat > stat_attack || L.stat != stat_attack && stat_exclusive == 1)
return 0
- if(L.faction == src.faction && !attack_same || L.faction != src.faction && attack_same == 2)
+ if(L.faction == src.faction && !attack_same || L.faction != src.faction && attack_same == 2 || L.faction != attack_faction && attack_faction)
return 0
if(L in friends)
return 0
@@ -257,11 +260,13 @@
return
/mob/living/simple_animal/hostile/proc/DestroySurroundings()
- var/list/directions = cardinal.Copy()
- for(var/dir in directions)
- var/turf/T = get_step(src, dir)
- if(istype(T, /turf/simulated/wall) && wall_smash)
- T.attack_animal(src)
- for(var/atom/A in T)
- if(istype(A, /obj/structure/window) || istype(A, /obj/structure/closet) || istype(A, /obj/structure/table) || istype(A, /obj/structure/grille) || istype(A, /obj/structure/rack))
- A.attack_animal(src)
+ if(environment_smash)
+ var/list/directions = cardinal.Copy()
+ for(var/dir in directions)
+ var/turf/T = get_step(src, dir)
+ if(istype(T, /turf/simulated/wall) && wall_smash)
+ T.attack_animal(src)
+ for(var/atom/A in T)
+ if(istype(A, /obj/structure/window) || istype(A, /obj/structure/closet) || istype(A, /obj/structure/table) || istype(A, /obj/structure/grille) || istype(A, /obj/structure/rack))
+ A.attack_animal(src)
+ else return
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
index 9d17c740300..b9eb70f1d55 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
@@ -32,6 +32,7 @@
/mob/living/simple_animal/hostile/asteroid/bullet_act(var/obj/item/projectile/P)//Limits the weapons available to kill them at range
if(P.damage < 30)
visible_message("The [P.name] had no effect on [src.name]!")
+ Aggro()
return
..()
@@ -67,10 +68,9 @@
harm_intent_damage = 5
melee_damage_lower = 15
melee_damage_upper = 15
- attacktext = "bites into "
+ attacktext = "bites into"
a_intent = "harm"
attack_sound = 'sound/weapons/bladeslice.ogg'
-
ranged_cooldown_cap = 4
/obj/item/projectile/temp/basilisk
@@ -176,12 +176,13 @@
melee_damage_lower = 2
melee_damage_upper = 2
attacktext = "lashes out at"
- throw_message = "falls right through the strange body of the "
+ throw_message = "falls right through the strange body of the"
ranged_cooldown = 0
ranged_cooldown_cap = 0
-
+ environment_smash = 0
retreat_distance = 5
minimum_distance = 5
+ pass_flags = PASSTABLE
/mob/living/simple_animal/hostile/asteroid/Hivelord/OpenFire(var/the_target)
var/mob/living/simple_animal/hostile/asteroid/Hivelordbrood/A = new /mob/living/simple_animal/hostile/asteroid/Hivelordbrood(src.loc)
@@ -212,7 +213,9 @@
melee_damage_lower = 2
melee_damage_upper = 2
attacktext = "slashes"
- throw_message = "falls right through the strange body of the "
+ throw_message = "falls right through the strange body of the"
+ environment_smash = 0
+ pass_flags = PASSTABLE
/mob/living/simple_animal/hostile/asteroid/Hivelordbrood/New()
..()
@@ -244,7 +247,7 @@
melee_damage_lower = 25
melee_damage_upper = 25
attacktext = "pulverizes"
- throw_message = "does nothing to the rocky hide of the "
+ throw_message = "does nothing to the rocky hide of the"
/mob/living/simple_animal/hostile/asteroid/Goliath/OpenFire()
visible_message("The [src.name] digs its tentacles under [target.name]!")
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index cddedfe917f..44cccde0610 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -180,6 +180,9 @@ obj/item/projectile/kinetic/New()
/obj/item/projectile/kinetic/on_hit(var/atom/target)
var/turf/target_turf= get_turf(target)
+ if(istype(target_turf, /turf/simulated/mineral))
+ var/turf/simulated/mineral/M = target_turf
+ M.gets_drilled()
new /obj/item/effect/kinetic_blast(target_turf)
..()