diff --git a/code/modules/mob/living/simple_mob/subtypes/glamour/homunculus.dm b/code/modules/mob/living/simple_mob/subtypes/glamour/homunculus.dm index 3a65edf7b6f..3c31f57eca1 100644 --- a/code/modules/mob/living/simple_mob/subtypes/glamour/homunculus.dm +++ b/code/modules/mob/living/simple_mob/subtypes/glamour/homunculus.dm @@ -33,3 +33,92 @@ /mob/living/simple_mob/homunculus/update_icons() return +/mob/living/simple_mob/homunculus/evil + var/seen_melee + var/seen_gun + var/transformed + var/seen_armour + maxHealth = 100 + health = 100 + + faction = "glamour" + + melee_damage_lower = 5 + melee_damage_upper = 7 + + ai_holder_type = /datum/ai_holder/simple_mob/hostile + +/mob/living/simple_mob/homunculus/evil/Life() + handle_homunculus() + return ..() + +/mob/living/simple_mob/homunculus/evil/proc/handle_homunculus() + if(!transformed) + for(var/mob/living/carbon/human/H in range(8, src)) + if(H.stat == DEAD) + continue + name = H.name + desc = H.desc + icon = H.icon + icon_state = H.icon_state + copy_overlays(H, TRUE) + resize(H.size_multiplier, ignore_prefs = TRUE) + var/obj/item/A = H.get_active_hand() + var/obj/item/I = H.get_inactive_hand() + if(istype(A,/obj/item/weapon/material) || istype(A,/obj/item/weapon/melee) || istype(I,/obj/item/weapon/material) || istype(I,/obj/item/weapon/melee)) + seen_melee = 1 + melee_damage_lower = 20 + melee_damage_upper = 30 + if(istype(A,/obj/item/weapon/gun/projectile) || istype(I,/obj/item/weapon/gun/projectile)) + seen_gun = 1 + projectiletype = /obj/item/projectile/bullet/pistol/medium + projectilesound = 'sound/weapons/Gunshot_light.ogg' + if(istype(A,/obj/item/weapon/gun/projectile/shotgun) || istype(I,/obj/item/weapon/gun/projectile/shotgun)) + projectiletype = /obj/item/projectile/bullet/pellet/shotgun + projectilesound = 'sound/weapons/Gunshot_shotgun.ogg' + reload_time = 1.5 SECONDS + ranged_attack_delay = 1.5 SECONDS + projectile_dispersion = 8 + projectile_accuracy = -40 + if(istype(A,/obj/item/weapon/gun/projectile/automatic) || istype(I,/obj/item/weapon/gun/projectile/automatic)) + base_attack_cooldown = 5 + projectile_dispersion = 7 + projectile_accuracy = -20 + if(istype(A,/obj/item/weapon/gun/projectile/heavysniper) || istype(I,/obj/item/weapon/gun/projectile/heavysniper)) + projectiletype = /obj/item/projectile/bullet/rifle/a145/highvel // Do not get seen with a big ass sniper! + projectilesound = 'sound/weapons/Gunshot_cannon.ogg' + ranged_attack_delay = 2.5 SECONDS + reload_time = 5 SECONDS + projectile_accuracy = 75 + if(istype(A,/obj/item/weapon/gun/energy) || istype(I,/obj/item/weapon/gun/energy)) + seen_gun = 1 + projectiletype = /obj/item/projectile/beam/midlaser + projectilesound = 'sound/weapons/Laser.ogg' + projectile_dispersion = 5 + projectile_accuracy = -20 + if(istype(A,/obj/item/weapon/gun/energy/ionrifle) || istype(I,/obj/item/weapon/gun/energy/ionrifle)) + projectiletype = /obj/item/projectile/ion + if(istype(A,/obj/item/weapon/gun/energy/lasercannon) || istype(I,/obj/item/weapon/gun/energy/lasercannon)) + projectiletype = /obj/item/projectile/beam/heavylaser + ranged_attack_delay = 2.5 SECONDS + reload_time = 5 SECONDS + projectilesound = 'sound/weapons/lasercannonfire.ogg' + if(istype(A,/obj/item/weapon/gun/energy/sniperrifle) || istype(I,/obj/item/weapon/gun/energy/sniperrifle)) + projectiletype = /obj/item/projectile/beam/sniper // Do not get seen with a big ass sniper! + projectilesound = 'sound/weapons/gauss_shoot.ogg' + ranged_attack_delay = 2.5 SECONDS + reload_time = 5 SECONDS + projectile_accuracy = 75 + if(istype(A,/obj/item/weapon/gun/magnetic) || istype(I,/obj/item/weapon/gun/magnetic)) + seen_gun = 1 + projectiletype = /obj/item/projectile/bullet/magnetic/bore + projectilesound = 'sound/weapons/railgun.ogg' + ranged_attack_delay = 1.5 SECONDS + projectile_dispersion = 5 + projectile_accuracy = 20 + var/obj/item/clothing/suit/S = H.get_equipped_item(slot_wear_suit) + if(istype(S,/obj/item/clothing/suit/armor) || istype(S,/obj/item/clothing/suit/space/rig/)) + armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 100) + transformed = 1 + return TRUE + diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm b/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm index b9f58b315be..cd01e044cf6 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm @@ -184,3 +184,48 @@ /datum/ai_holder/simple_mob/melee/evasive/corrupthound violent_breakthrough = TRUE can_breakthrough = TRUE + +/mob/living/simple_mob/vore/aggressive/corrupthound/fire + icon_state = "badboi_fire" + icon_living = "badboi_fire" + icon_dead = "badboi_fire-dead" + icon_rest = "badboi_fire_rest" + + maxHealth = 150 + health = 150 + + ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive + + projectiletype = /obj/item/projectile/scatter/flamethrower + ranged_attack_delay = 2 SECONDS + +/mob/living/simple_mob/vore/aggressive/corrupthound/laser + icon_state = "badboi_laser" + icon_living = "badboi_laser" + icon_dead = "badboi_laser-dead" + icon_rest = "badboi_laser_rest" + + maxHealth = 150 + health = 150 + + ai_holder_type = /datum/ai_holder/simple_mob/ranged + + ranged_attack_delay = 2 SECONDS + projectiletype = /obj/item/projectile/beam/midlaser + projectilesound = 'sound/weapons/Laser.ogg' + projectile_dispersion = 5 + projectile_accuracy = -20 + +/mob/living/simple_mob/vore/aggressive/corrupthound/fast + icon_state = "badboi_fast" + icon_living = "badboi_fast" + icon_dead = "badboi_fast-dead" + icon_rest = "badboi_fast_rest" + + maxHealth = 100 + health = 100 + + movement_cooldown = -1 + + melee_damage_lower = 7 + melee_damage_upper = 15 diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/meowl.dm b/code/modules/mob/living/simple_mob/subtypes/vore/meowl.dm index 62ab96e07ce..f7ec3a56686 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/meowl.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/meowl.dm @@ -137,6 +137,8 @@ /datum/ai_holder/simple_mob/vore/meowl var/last_friend_time = 0 + violent_breakthrough = FALSE + destructive = FALSE /datum/ai_holder/simple_mob/vore/meowl/engage_target() ai_log("engage_target() : Entering.", AI_LOG_DEBUG) diff --git a/icons/mob/vore64x32.dmi b/icons/mob/vore64x32.dmi index a530a26d00f..072c39795ab 100644 Binary files a/icons/mob/vore64x32.dmi and b/icons/mob/vore64x32.dmi differ