diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index 8c4a2685e04..5cfe1324849 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -68,6 +68,7 @@ projectilesound = 'sound/weapons/taser2.ogg' AIStatus = AI_OFF var/resources = 0 //Resource points, generated by consuming metal/glass + loot = list(/obj/effect/decal/cleanable/blood/gibs/robot, /obj/item/weapon/ore/bluespace_crystal/artificial) /mob/living/simple_animal/hostile/swarmer/Login() ..() @@ -91,7 +92,6 @@ /mob/living/simple_animal/hostile/swarmer/death() ..() - new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc) ghostize() qdel(src) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 6f97740f8d5..e255394e7af 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -42,6 +42,7 @@ var/cooldown = 0 var/gorecooldown = 0 var/vialspawned = FALSE + loot = list(/obj/effect/decal/cleanable/blood/innards, /obj/effect/decal/cleanable/blood, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/generic, /obj/item/organ/internal/heart/demon) var/playstyle_string = "You are the Slaughter Demon, a terrible creature from another existence. You have a single desire: To kill. \ You may Ctrl+Click on blood pools to travel through them, appearing and dissaapearing from the station at will. \ Pulling a dead or critical mob while you enter a pool will pull them in with you, allowing you to feast. \ @@ -79,17 +80,14 @@ else speed = 0 +/obj/effect/decal/cleanable/blood/innards + icon = 'icons/obj/surgery.dmi' + icon_state = "innards" + name = "pile of viscera" + desc = "A repulsive pile of guts and gore." + /mob/living/simple_animal/slaughter/death() ..() - var/obj/effect/decal/cleanable/blood/innards = new (get_turf(src)) - innards.icon = 'icons/obj/surgery.dmi' - innards.icon_state = "innards" - innards.name = "pile of viscera" - innards.desc = "A repulsive pile of guts and gore." - new /obj/effect/decal/cleanable/blood(loc) - new /obj/effect/gibspawner/generic(get_turf(src)) - new /obj/effect/gibspawner/generic(get_turf(src)) - new /obj/item/organ/internal/heart/demon(loc) playsound(get_turf(src),'sound/misc/demon_dies.ogg', 200, 1) visible_message("[src] screams in anger as it collapses into a puddle of viscera, its most recent meals spilling out of it.") for(var/mob/living/M in consumed_mobs) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 0948c8ae3a1..d3cc5f089a0 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -967,7 +967,9 @@ name = "Spaceport Security" desc = "The Premier security forces for all spaceports found along the Orion Trail." faction = list("orion") - corpse = /obj/effect/landmark/mobcorpse/orionsecurity + loot = list(/obj/effect/landmark/mobcorpse/orionsecurity, + /obj/item/weapon/gun/projectile/automatic/c20r, + /obj/item/weapon/shield/energy) /obj/effect/landmark/mobcorpse/orionsecurity name = "Spaceport Security" diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 6c630ec0117..c894b014a87 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -20,6 +20,7 @@ flying = 1 universal_speak = 1 var/list/construct_spells = list() + loot = list(/obj/item/weapon/reagent_containers/food/snacks/ectoplasm) /mob/living/simple_animal/construct/New() ..() @@ -31,7 +32,6 @@ /mob/living/simple_animal/construct/death() ..() - new /obj/item/weapon/reagent_containers/food/snacks/ectoplasm (src.loc) for(var/mob/M in viewers(src, null)) if((M.client && !( M.blinded ))) M.show_message("\red [src] collapses in a shattered heap. ") diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index c824351a7c8..4f8b7753caf 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -603,6 +603,7 @@ var/emagged = 0 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 + loot = list(/obj/effect/decal/cleanable/blood/gibs/robot) /mob/living/simple_animal/pet/corgi/Ian/borgi/emag_act(user as mob) if(!emagged) @@ -651,7 +652,6 @@ /mob/living/simple_animal/pet/corgi/Ian/borgi/death() ..() visible_message("[src] blows apart!") - new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc) var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 4412dc77829..94cf8dae65c 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -23,6 +23,7 @@ minbodytemp = 0 speak_emote = list("states") gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE + loot = list(/obj/effect/decal/cleanable/blood/gibs/robot) /mob/living/simple_animal/hostile/hivebot/range name = "Hivebot" @@ -47,7 +48,6 @@ /mob/living/simple_animal/hostile/hivebot/death() ..() visible_message("[src] blows apart!") - new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc) var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() 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 5a9f4a433af..6d2efd88010 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -73,6 +73,8 @@ aggro_vision_range = 9 idle_vision_range = 2 turns_per_move = 5 + loot = list(/obj/item/weapon/ore/diamond{layer = 4.1}, + /obj/item/weapon/ore/diamond{layer = 4.1}) /obj/item/projectile/temp/basilisk name = "freezing blast" @@ -100,14 +102,6 @@ if(3.0) adjustBruteLoss(110) -/mob/living/simple_animal/hostile/asteroid/basilisk/death() - if(stat != DEAD) - var/counter - for(counter=0, counter<2, counter++) - var/obj/item/weapon/ore/diamond/D = new /obj/item/weapon/ore/diamond(src.loc) - D.layer = 4.1 - ..() - /mob/living/simple_animal/hostile/asteroid/goldgrub name = "goldgrub" desc = "A worm that grows fat from eating everything in its sight. Seems to enjoy precious metals and other shiny things, hence the name." @@ -239,6 +233,7 @@ retreat_distance = 3 minimum_distance = 3 pass_flags = PASSTABLE + loot = list(/obj/item/organ/internal/hivelord_core) /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) @@ -250,11 +245,6 @@ /mob/living/simple_animal/hostile/asteroid/hivelord/AttackingTarget() OpenFire() -/mob/living/simple_animal/hostile/asteroid/hivelord/death() - if(stat != DEAD) - new /obj/item/organ/internal/hivelord_core(src.loc) - ..() - /obj/item/organ/internal/hivelord_core name = "hivelord remains" desc = "All that remains of a hivelord, it seems to be what allows it to break pieces of itself off without being hurt... its healing properties will soon become inert if not used quickly. Try not to think about what you're eating." @@ -370,6 +360,7 @@ idle_vision_range = 5 anchored = 1 //Stays anchored until death as to be unpullable var/pre_attack = 0 + loot = list(/obj/item/asteroid/goliath_hide{layer = 4.1}) /mob/living/simple_animal/hostile/asteroid/goliath/process_ai() ..() @@ -386,13 +377,6 @@ anchored = 1 ..() -/mob/living/simple_animal/hostile/asteroid/goliath/death() - anchored = 0 - if(stat != DEAD) - var/obj/item/asteroid/goliath_hide/G = new /obj/item/asteroid/goliath_hide(src.loc) - G.layer = 4.1 - ..() - /mob/living/simple_animal/hostile/asteroid/goliath/OpenFire() var/tturf = get_turf(target) if(get_dist(src, target) <= 7)//Screen range check, so you can't get tentacle'd offscreen diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index fbbc0d0a5e3..89835092ffd 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -22,9 +22,8 @@ atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) unsuitable_atmos_damage = 15 speak_emote = list("yarrs") - var/corpse = /obj/effect/landmark/mobcorpse/pirate - var/weapon1 = /obj/item/weapon/melee/energy/sword/pirate - + loot = list(/obj/effect/landmark/mobcorpse/pirate, + /obj/item/weapon/melee/energy/sword/pirate) faction = list("pirate") /mob/living/simple_animal/hostile/pirate/ranged @@ -38,16 +37,12 @@ retreat_distance = 5 minimum_distance = 5 projectiletype = /obj/item/projectile/beam - corpse = /obj/effect/landmark/mobcorpse/pirate/ranged - weapon1 = /obj/item/weapon/gun/energy/laser + loot = list(/obj/effect/landmark/mobcorpse/pirate/ranged, + /obj/item/weapon/gun/energy/laser) /mob/living/simple_animal/hostile/pirate/death() ..() - if(corpse) - new corpse (src.loc) - if(weapon1) - new weapon1 (src.loc) ghostize() qdel(src) return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm index 5ee52bec825..71d088a425c 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -150,8 +150,8 @@ walk(src,0) /mob/living/simple_animal/hostile/retaliate/malf_drone/death() - src.visible_message("\blue \icon[src] [src] suddenly breaks apart.") ..() + visible_message("\blue \icon[src] [src] suddenly breaks apart.") qdel(src) /mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() //Seriously, what the actual hell. diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm index 44de372550f..210ff43ebda 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm @@ -45,6 +45,7 @@ minbodytemp = 0 faction = list("undead") // did I mention ghost + loot = list(/obj/item/weapon/reagent_containers/food/snacks/ectoplasm) /mob/living/simple_animal/hostile/retaliate/ghost/Process_Spacemove(var/check_drift = 0) return 1 @@ -61,7 +62,7 @@ invisibility = pick(0,60,60,invisibility) ..() /mob/living/simple_animal/hostile/retaliate/ghost/death() - new /obj/item/weapon/reagent_containers/food/snacks/ectoplasm(loc) + ..() qdel(src) return @@ -90,9 +91,10 @@ minbodytemp = 0 faction = list("undead") + loot = list(/obj/effect/decal/remains/human) /mob/living/simple_animal/hostile/retaliate/skeleton/death() - new /obj/effect/decal/remains/human(loc) + ..() qdel(src) return @@ -121,8 +123,9 @@ minbodytemp = 0 faction = list("undead") + loot = list(/obj/effect/decal/cleanable/blood/gibs) /mob/living/simple_animal/hostile/retaliate/zombie/death() - new /obj/effect/decal/cleanable/blood/gibs(loc) + ..() qdel(src) return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm index 35cdbb14dfb..148eeeef9a7 100644 --- a/code/modules/mob/living/simple_animal/hostile/russian.dm +++ b/code/modules/mob/living/simple_animal/hostile/russian.dm @@ -19,35 +19,30 @@ attacktext = "punches" attack_sound = 'sound/weapons/punch1.ogg' a_intent = I_HARM - var/corpse = /obj/effect/landmark/mobcorpse/russian - var/weapon1 = /obj/item/weapon/kitchen/knife unsuitable_atmos_damage = 15 faction = list("russian") status_flags = CANPUSH + loot = list(/obj/effect/landmark/mobcorpse/russian, + /obj/item/weapon/kitchen/knife) /mob/living/simple_animal/hostile/russian/ranged icon_state = "russianranged" icon_living = "russianranged" - corpse = /obj/effect/landmark/mobcorpse/russian/ranged - weapon1 = /obj/item/weapon/gun/projectile/revolver/mateba ranged = 1 retreat_distance = 5 minimum_distance = 5 projectiletype = /obj/item/projectile/bullet projectilesound = 'sound/weapons/Gunshot.ogg' casingtype = /obj/item/ammo_casing/a357 + loot = list(/obj/effect/landmark/mobcorpse/russian/ranged, /obj/item/weapon/gun/projectile/revolver/mateba) -/mob/living/simple_animal/hostile/russian/ranged/New() - if(prob(50) && ispath(weapon1,/obj/item/weapon/gun/projectile/revolver/mateba)) //to preserve varedits - weapon1 = /obj/item/weapon/gun/projectile/shotgun/boltaction - casingtype = /obj/item/ammo_casing/a762 +/mob/living/simple_animal/hostile/russian/ranged/mosin + loot = list(/obj/effect/landmark/mobcorpse/russian/ranged, + /obj/item/weapon/gun/projectile/shotgun/boltaction) + casingtype = /obj/item/ammo_casing/a762 /mob/living/simple_animal/hostile/russian/death() ..() - if(corpse) - new corpse (src.loc) - if(weapon1) - new weapon1 (src.loc) qdel(src) return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 0ce0cc71a86..5546547046d 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -19,22 +19,14 @@ attacktext = "punches" attack_sound = 'sound/weapons/punch1.ogg' a_intent = I_HARM - var/corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier - var/weapon1 - var/weapon2 unsuitable_atmos_damage = 15 faction = list("syndicate") check_friendly_fire = 1 status_flags = CANPUSH + loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier) /mob/living/simple_animal/hostile/syndicate/death() ..() - if(corpse) - new corpse (src.loc) - if(weapon1) - new weapon1 (src.loc) - if(weapon2) - new weapon2 (src.loc) qdel(src) return @@ -45,11 +37,10 @@ melee_damage_upper = 25 icon_state = "syndicatemelee" icon_living = "syndicatemelee" - weapon1 = /obj/item/weapon/melee/energy/sword/saber/red - weapon2 = /obj/item/weapon/shield/energy attacktext = "slashes" attack_sound = 'sound/weapons/bladeslice.ogg' status_flags = 0 + loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier, /obj/item/weapon/melee/energy/sword/saber/red, /obj/item/weapon/shield/energy) /mob/living/simple_animal/hostile/syndicate/melee/attackby(var/obj/item/O as obj, var/mob/user as mob, params) if(O.force) @@ -83,8 +74,8 @@ icon_state = "syndicatemeleespace" icon_living = "syndicatemeleespace" name = "Syndicate Commando" - corpse = /obj/effect/landmark/mobcorpse/syndicatecommando speed = 1 + loot = list(/obj/effect/landmark/mobcorpse/syndicatecommando, /obj/item/weapon/melee/energy/sword/saber/red, /obj/item/weapon/shield/energy) /mob/living/simple_animal/hostile/syndicate/melee/space/Process_Spacemove(var/movement_dir = 0) return @@ -99,8 +90,7 @@ casingtype = /obj/item/ammo_casing/c45 projectilesound = 'sound/weapons/Gunshot_smg.ogg' projectiletype = /obj/item/projectile/bullet/midbullet2 - - weapon1 = /obj/item/weapon/gun/projectile/automatic/c20r + loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier, /obj/item/weapon/gun/projectile/automatic/c20r) /mob/living/simple_animal/hostile/syndicate/ranged/space icon_state = "syndicaterangedpsace" @@ -108,8 +98,9 @@ name = "Syndicate Commando" 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 - corpse = /obj/effect/landmark/mobcorpse/syndicatecommando speed = 1 + loot = list(/obj/effect/landmark/mobcorpse/syndicatecommando, /obj/item/weapon/gun/projectile/automatic/c20r) + /mob/living/simple_animal/hostile/syndicate/ranged/space/Process_Spacemove(var/movement_dir = 0) return diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index bd39b681978..b47312b15df 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -28,6 +28,7 @@ minbodytemp = 0 faction = list("hostile", "winter") + loot = list(/obj/item/stack/sheet/wood) gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE /mob/living/simple_animal/hostile/tree/FindTarget() @@ -46,5 +47,4 @@ /mob/living/simple_animal/hostile/tree/death() ..() visible_message("\red [src] is hacked into pieces!") - new /obj/item/stack/sheet/wood(loc) qdel(src) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm index 5710005846c..12ede5955ea 100644 --- a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm @@ -20,15 +20,12 @@ melee_damage_lower = 3 melee_damage_upper = 7 - var/weapon1 - /mob/living/simple_animal/hostile/winter/snowman name = "snowman" desc = "A very angry snowman. Doesn't look like it wants to play around..." icon_state = "snowman" icon_living = "snowman" icon_dead = "snowman-dead" - weapon1 = /obj/item/weapon/melee/candy_sword bodytemperature = 73.0 //it's made of snow and hatred, so it's pretty cold. maxbodytemp = 280.15 //at roughly 7 C, these will start melting (dying) from the warmth. Mind over matter or something. @@ -37,10 +34,10 @@ /mob/living/simple_animal/hostile/winter/snowman/death() - if(weapon1 && prob(50)) //50% chance to drop weapon on death, if it has one to drop - new weapon1(get_turf(src)) + if(prob(50)) //50% chance to drop weapon on death, if it has one to drop + loot = list(/obj/item/weapon/melee/candy_sword) if(prob(20)) //chance to become a stationary snowman structure instead of a corpse - new /obj/structure/snowman(get_turf(src)) + loot.Add(/obj/structure/snowman) visible_message("The [src.name] shimmers as its animating magic fades away!") ..() //this is just to make sure it gets properly killed before we qdel it qdel(src) @@ -52,7 +49,6 @@ retreat_distance = 5 minimum_distance = 5 projectiletype = /obj/item/projectile/snowball - weapon1 = null /mob/living/simple_animal/hostile/winter/reindeer name = "reindeer" diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index 0e01aa51894..9aff96b1fcf 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -24,11 +24,11 @@ status_flags = 0 faction = list("cult") status_flags = CANPUSH + loot = list(/obj/item/weapon/reagent_containers/food/snacks/ectoplasm) death() ..() - new /obj/item/weapon/reagent_containers/food/snacks/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. ") diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 9a638ce3a80..c71f205e7bf 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -71,6 +71,7 @@ var/master_commander = null //holding var for determining who own/controls a sentient simple animal (for sentience potions). var/sentience_type = SENTIENCE_ORGANIC // Sentience type, for slime potions + var/list/loot = list() //list of things spawned at mob's loc when it dies /mob/living/simple_animal/New() @@ -467,6 +468,9 @@ stat(null, "Health: [round((health / maxHealth) * 100)]%") /mob/living/simple_animal/death(gibbed) + if(loot.len) + for(var/i in loot) + new i(loc) health = 0 icon_state = icon_dead stat = DEAD diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm index aca5897735c..33f04d5e6a8 100644 --- a/code/modules/reagents/newchem/medicine.dm +++ b/code/modules/reagents/newchem/medicine.dm @@ -646,11 +646,14 @@ datum/reagent/strange_reagent metabolization_rate = 0.2 datum/reagent/strange_reagent/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume) - if(istype(M, /mob/living/simple_animal)) + if(isanimal(M)) if(method == TOUCH) - if(M.stat == DEAD) - M.revive() - M.visible_message("[M] seems to rise from the dead!") + var/mob/living/simple_animal/SM = M + if(SM.stat == DEAD) + SM.revive() + SM.loot.Cut() //no abusing strange reagent for unlimited farming of resources + SM.visible_message("[M] seems to rise from the dead!") + if(istype(M, /mob/living/carbon)) if(method == INGEST) if(M.stat == DEAD)