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