diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 928ce91fe3d..a83f410d5ff 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -316,6 +316,7 @@ var/list/bloody_footprints_cache = list() #define SENTIENCE_ARTIFICIAL 2 #define SENTIENCE_OTHER 3 #define SENTIENCE_MINEBOT 4 +#define SENTIENCE_BOSS 5 //Fire stuff, for burn_state #define LAVA_PROOF -2 diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 10d99b7dc57..8ed824052bd 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -18,7 +18,7 @@ status_flags = CANPUSH attack_sound = 'sound/magic/demon_attack1.ogg' var/feast_sound = 'sound/magic/Demon_consume.ogg' - var/death_sound = 'sound/magic/demon_dies.ogg' + death_sound = 'sound/magic/demon_dies.ogg' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 maxbodytemp = INFINITY @@ -60,10 +60,6 @@ else speed = 0 -/mob/living/simple_animal/slaughter/death() - playsound(get_turf(src),death_sound, 200, 1) - ..() - /obj/effect/decal/cleanable/blood/innards icon = 'icons/obj/surgery.dmi' name = "pile of viscera" diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 1e9afbc17ad..9b4005465e1 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -862,6 +862,7 @@ throw_range = 5 var/loaded = 1 var/malfunctioning = 0 + var/revive_type = SENTIENCE_ORGANIC //So you can't revive boss monsters or robots with it origin_tech = "biotech=4" /obj/item/weapon/lazarus_injector/afterattack(atom/target, mob/user, proximity_flag) @@ -870,6 +871,9 @@ if(istype(target, /mob/living) && proximity_flag) if(istype(target, /mob/living/simple_animal)) var/mob/living/simple_animal/M = target + if(M.sentience_type != revive_type) + user << "[src] does not work on this sort of creature." + return if(M.stat == DEAD) M.faction = list("neutral") M.revive(full_heal = 1, admin_revive = 1) diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index d8350a4bab9..e1b8695c437 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -31,6 +31,8 @@ see_invisible = SEE_INVISIBLE_MINIMUM unique_name = 1 gold_core_spawnable = 0 + death_sound = 'sound/voice/hiss6.ogg' + deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw..." /mob/living/simple_animal/hostile/alien/drone name = "alien drone" @@ -140,11 +142,6 @@ damage = 30 icon_state = "toxin" -/mob/living/simple_animal/hostile/alien/death(gibbed) - ..(gibbed) - visible_message("[src] lets out a waning guttural screech, green blood bubbling from its maw...") - playsound(src, 'sound/voice/hiss6.ogg', 100, 1) - /mob/living/simple_animal/hostile/alien/handle_temperature_damage() if(bodytemperature < minbodytemp) adjustBruteLoss(2) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm index 6eadccd0ab0..fb8f66416c9 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm @@ -7,6 +7,7 @@ attack_sound = 'sound/magic/demon_attack1.ogg' icon_state = "dragon" icon_living = "dragon" + icon_dead = "dragon_dead" friendly = "stares down" icon = 'icons/mob/lavaland/dragon.dmi' faction = list("mining") @@ -27,21 +28,14 @@ var/anger_modifier = 0 var/obj/item/device/gps/internal var/swooping = 0 + deathmessage = "collapes into a pile of bones, it's flesh sloughing away." + death_sound = 'sound/magic/demon_dies.ogg' damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) /mob/living/simple_animal/hostile/megafauna/dragon/New() ..() internal = new/obj/item/device/gps/internal/dragon(src) - -/mob/living/simple_animal/hostile/megafauna/dragon/death(gibbed) - if(can_die) - qdel(internal) - visible_message("[src] explodes in a shower of gore!") - playsound(get_turf(src),'sound/magic/demon_dies.ogg', 200, 1) - gib() - ..() - /mob/living/simple_animal/hostile/megafauna/dragon/AttackingTarget() if(swooping) return @@ -106,7 +100,7 @@ /mob/living/simple_animal/hostile/megafauna/dragon/proc/fire_rain() visible_message("Fire rains from the sky!") for(var/turf/turf in range(12,get_turf(src))) - if(prob(5)) + if(prob(10)) new /obj/effect/overlay/temp/target(turf) @@ -169,6 +163,7 @@ stop_automated_movement = FALSE swooping = 0 + density = 1 /obj/item/device/gps/internal/dragon icon_state = null @@ -229,6 +224,7 @@ health = 500 melee_damage_upper = 30 melee_damage_lower = 30 + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) loot = list() //Blood @@ -239,9 +235,11 @@ icon = 'icons/obj/wizard.dmi' icon_state = "vial" -/obj/item/weapon/antag_spawner/slaughter_demon/attack_self(mob/living/carbon/human/user) +/obj/item/weapon/dragons_blood/attack_self(mob/living/carbon/human/user) if(!istype(user)) return + + var/mob/living/carbon/human/H = user var/random = rand(1,5) @@ -310,7 +308,7 @@ /obj/structure/closet/crate/necropolis/dragon name = "dragon chest" -/obj/structure/closet/crate/dragon/New() +/obj/structure/closet/crate/necropolis/dragon/New() ..() var/loot = rand(1,4) switch(loot) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index 15229787604..8a6ac9c33ca 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -80,7 +80,7 @@ if(last_legion) src.loot = list(/obj/item/weapon/staff_of_storms) else if(prob(5)) - src.loot = list(/obj/structure/closet/crate/necropolis) + src.loot = list(/obj/structure/closet/crate/necropolis/tendril) ..() /mob/living/simple_animal/hostile/megafauna/legion/Process_Spacemove(movement_dir = 0) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index 53d07f0164f..6a273d83b3e 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -3,7 +3,7 @@ desc = "Attack the weak point for massive damage." health = 1000 maxHealth = 1000 - sentience_type = SENTIENCE_OTHER + sentience_type = SENTIENCE_BOSS environment_smash = 4 robust_searching = 1 stat_attack = 1 @@ -12,28 +12,21 @@ maxbodytemp = INFINITY layer = 6 //Looks weird with them slipping under mineral walls and cameras and shit otherwise - var/can_die = FALSE //Used to prevent instagib/instakill attacks like the wand of death - -/mob/living/simple_animal/hostile/megafauna/Life() - if(health <= 0) - can_die = TRUE - ..() - /mob/living/simple_animal/hostile/megafauna/death(gibbed) - if(!can_die) + if(health > 0) return else feedback_set_details("megafauna_kills","[initial(name)]") ..() /mob/living/simple_animal/hostile/megafauna/gib() - if(!can_die) + if(health > 0) return else ..() /mob/living/simple_animal/hostile/megafauna/dust() - if(!can_die) + if(health > 0) return else ..() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 02de34f15cd..ef31c960ee3 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -72,6 +72,7 @@ var/list/loot = list() //list of things spawned at mob's loc when it dies var/del_on_death = 0 //causes mob to be deleted on death, useful for mobs that spawn lootable corpses var/deathmessage = "" + var/death_sound = null //The sound played on death var/allow_movement_on_non_turfs = FALSE @@ -417,6 +418,8 @@ if(loot.len) for(var/i in loot) new i(loc) + if(death_sound) + playsound(get_turf(src),death_sound, 200, 1) if(deathmessage && !gibbed) visible_message("[deathmessage]") else if(!del_on_death) diff --git a/code/modules/ruins/lavaland_ruin_code.dm b/code/modules/ruins/lavaland_ruin_code.dm index e16a63d35c9..b50867d9437 100644 --- a/code/modules/ruins/lavaland_ruin_code.dm +++ b/code/modules/ruins/lavaland_ruin_code.dm @@ -189,7 +189,10 @@ if(H.stat) visible_message("Tendrils reach out from \the [src.name] pulling [H] in! Blood seeps over the eggs as [H] is devoured.") playsound(get_turf(src),'sound/magic/Demon_consume.ogg', 100, 1) - meat_counter ++ + if(istype(H,/mob/living/simple_animal/hostile/megafauna/dragon)) + meat_counter += 20 + else + meat_counter ++ H.gib() /mob/living/simple_animal/hostile/spawner/ash_walker/spawn_mob() diff --git a/icons/mob/lavaland/dragon.dmi b/icons/mob/lavaland/dragon.dmi index 051897c8350..7e44b775de8 100644 Binary files a/icons/mob/lavaland/dragon.dmi and b/icons/mob/lavaland/dragon.dmi differ