From b9489589b488a6f82d50e9b91f063c516673976b Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 18 Jul 2016 04:13:56 -0400 Subject: [PATCH 1/2] Refactors Simple Animal Death and Implements Spawners --- code/__DEFINES/bots.dm | 3 +- code/game/gamemodes/blob/blobs/blob_mobs.dm | 10 +- .../gamemodes/miniantags/bot_swarm/swarmer.dm | 6 +- .../gamemodes/miniantags/guardian/guardian.dm | 2 +- .../miniantags/slaughter/slaughter.dm | 16 +- .../mob/living/simple_animal/constructs.dm | 11 +- .../living/simple_animal/friendly/corgi.dm | 12 +- .../simple_animal/friendly/farm_animals.dm | 2 +- .../living/simple_animal/friendly/mouse.dm | 2 +- .../mob/living/simple_animal/friendly/pet.dm | 2 +- .../living/simple_animal/friendly/slime.dm | 21 +-- .../simple_animal/friendly/spiderbot.dm | 12 +- .../mob/living/simple_animal/hostile/alien.dm | 14 +- .../mob/living/simple_animal/hostile/bees.dm | 3 +- .../mob/living/simple_animal/hostile/carp.dm | 6 +- .../living/simple_animal/hostile/hivebot.dm | 10 +- .../living/simple_animal/hostile/hostile.dm | 2 +- .../living/simple_animal/hostile/illusion.dm | 8 +- .../mob/living/simple_animal/hostile/mimic.dm | 11 +- .../simple_animal/hostile/mining_mobs.dm | 8 +- .../living/simple_animal/hostile/mushroom.dm | 4 +- .../living/simple_animal/hostile/pirate.dm | 10 +- .../simple_animal/hostile/retaliate/drone.dm | 7 +- .../simple_animal/hostile/retaliate/undead.dm | 17 +- .../living/simple_animal/hostile/russian.dm | 6 +- .../simple_animal/hostile/spaceworms.dm | 4 +- .../living/simple_animal/hostile/syndicate.dm | 14 +- .../mob/living/simple_animal/hostile/tree.dm | 9 +- .../simple_animal/hostile/winter_mobs.dm | 10 +- .../mob/living/simple_animal/parrot.dm | 2 +- .../modules/mob/living/simple_animal/shade.dm | 10 +- .../mob/living/simple_animal/simple_animal.dm | 29 ++- .../mob/living/simple_animal/spawner.dm | 82 +++++++++ .../mob/living/simple_animal/tribbles.dm | 2 +- code/modules/mob/living/simple_animal/vox.dm | 169 ------------------ icons/mob/nest.dmi | Bin 0 -> 13209 bytes paradise.dme | 2 +- 37 files changed, 189 insertions(+), 349 deletions(-) create mode 100644 code/modules/mob/living/simple_animal/spawner.dm delete mode 100644 code/modules/mob/living/simple_animal/vox.dm create mode 100644 icons/mob/nest.dmi diff --git a/code/__DEFINES/bots.dm b/code/__DEFINES/bots.dm index 339d272b57e..1fad6d6cd4b 100644 --- a/code/__DEFINES/bots.dm +++ b/code/__DEFINES/bots.dm @@ -36,4 +36,5 @@ #define SENTIENCE_ORGANIC 1 #define SENTIENCE_ARTIFICIAL 2 #define SENTIENCE_OTHER 3 -#define SENTIENCE_MINEBOT 4 \ No newline at end of file +#define SENTIENCE_MINEBOT 4 +#define SENTIENCE_BOSS 5 \ No newline at end of file diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index d60748f8dae..76cdf0f4546 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -36,6 +36,7 @@ melee_damage_upper = 4 attacktext = "hits" attack_sound = 'sound/weapons/genhit1.ogg' + del_on_death = 1 speak_emote = list("pulses") var/obj/effect/blob/factory/factory = null var/list/human_overlays = list() @@ -90,9 +91,7 @@ H.loc = src loc.visible_message("The corpse of [H.name] suddenly rises!") -/mob/living/simple_animal/hostile/blob/blobspore/death() - ..() - +/mob/living/simple_animal/hostile/blob/blobspore/death(gibbed) // On death, create a small smoke of harmful gas (s-Acid) var/datum/effect/system/chem_smoke_spread/S = new var/turf/location = get_turf(src) @@ -109,8 +108,7 @@ S.attach(location) S.set_up(reagents, 1, 1, location, 15, 1) // only 1-2 smoke cloud S.start() - - qdel(src) + ..() /mob/living/simple_animal/hostile/blob/blobspore/Destroy() if(factory) @@ -169,6 +167,6 @@ /mob/living/simple_animal/hostile/blob/blobbernaut/blob_act() return -/mob/living/simple_animal/hostile/blob/blobbernaut/death() +/mob/living/simple_animal/hostile/blob/blobbernaut/death(gibbed) ..() flick("blobbernaut_death", src) diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index 5cfe1324849..d5541f70e0d 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -69,6 +69,7 @@ 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) + del_on_death = 1 /mob/living/simple_animal/hostile/swarmer/Login() ..() @@ -90,11 +91,6 @@ if(statpanel("Status")) stat("Resources:",resources) -/mob/living/simple_animal/hostile/swarmer/death() - ..() - ghostize() - qdel(src) - /mob/living/simple_animal/hostile/swarmer/emp_act() if(health > 1) adjustHealth(health-1) diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm index 0db9c5309ad..6de3308f75e 100644 --- a/code/game/gamemodes/miniantags/guardian/guardian.dm +++ b/code/game/gamemodes/miniantags/guardian/guardian.dm @@ -70,7 +70,7 @@ visible_message("The [src] jumps back to its user.") Recall() -/mob/living/simple_animal/hostile/guardian/death() +/mob/living/simple_animal/hostile/guardian/death(gibbed) ..() to_chat(summoner, "Your [name] died somehow!") summoner.death() diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index ac32105229a..3896a84a43b 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -19,7 +19,7 @@ status_flags = CANPUSH attack_sound = 'sound/misc/demon_attack1.ogg' var/feast_sound = 'sound/misc/Demon_consume.ogg' - var/death_sound = 'sound/misc/demon_dies.ogg' + death_sound = 'sound/misc/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 @@ -49,7 +49,8 @@ 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. \ You move quickly upon leaving a pool of blood, but the material world will soon sap your strength and leave you sluggish. " - var/deathmessage = "screams in anger as it collapses into a puddle of viscera!" + del_on_death = 1 + deathmessage = "screams in anger as it collapses into a puddle of viscera!" /mob/living/simple_animal/slaughter/New() @@ -89,15 +90,10 @@ name = "pile of viscera" desc = "A repulsive pile of guts and gore." -/mob/living/simple_animal/slaughter/death() - ..() - playsound(get_turf(src), death_sound, 200, 1) - visible_message("[src] [deathmessage].") +/mob/living/simple_animal/slaughter/death(gibbed) for(var/mob/living/M in consumed_mobs) M.forceMove(get_turf(src)) - ghostize() - qdel(src) - + ..() /mob/living/simple_animal/slaughter/phasein() @@ -205,7 +201,7 @@ deathmessage = "fades out, as all of its friends are released from its prison of hugs." loot = list(/mob/living/simple_animal/pet/cat/kitten{name = "Laughter"}) -/mob/living/simple_animal/slaughter/laughter/death() +/mob/living/simple_animal/slaughter/laughter/death(gibbed) for(var/mob/living/M in consumed_mobs) if(M.revive()) M.grab_ghost(force = TRUE) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 4cbf3dd91ce..5306d6e3005 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -21,6 +21,8 @@ universal_speak = 1 var/list/construct_spells = list() loot = list(/obj/item/weapon/reagent_containers/food/snacks/ectoplasm) + del_on_death = 1 + deathmessage = "collapses in a shattered heap." /mob/living/simple_animal/construct/New() ..() @@ -30,15 +32,6 @@ AddSpell(new spell(src)) updateglow() -/mob/living/simple_animal/construct/death() - ..() - for(var/mob/M in viewers(src, null)) - if((M.client && !( M.blinded ))) - M.show_message("\red [src] collapses in a shattered heap. ") - ghostize() - qdel(src) - return - /mob/living/simple_animal/construct/examine(mob/user) to_chat(user, "*---------*") ..(user) diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index e0196fbcec2..5f078682947 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -38,7 +38,7 @@ . = ..() regenerate_icons() -/mob/living/simple_animal/pet/corgi/death() +/mob/living/simple_animal/pet/corgi/death(gibbed) ..() regenerate_icons() @@ -612,6 +612,8 @@ 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) + del_on_death = 1 + deathmessage = "blows apart!" /mob/living/simple_animal/pet/corgi/Ian/borgi/emag_act(user as mob) if(!emagged) @@ -656,12 +658,8 @@ s.set_up(3, 1, src) s.start() -/mob/living/simple_animal/pet/corgi/Ian/borgi/death() - ..() - visible_message("[src] blows apart!") +/mob/living/simple_animal/pet/corgi/Ian/borgi/death(gibbed) var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() - respawnable_list += src - qdel(src) - return + ..() diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 06fb36b5787..7dd9a50c828 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -241,7 +241,7 @@ var/global/chicken_count = 0 pixel_y = rand(0, 10) chicken_count += 1 -/mob/living/simple_animal/chicken/death() +/mob/living/simple_animal/chicken/death(gibbed) ..() chicken_count -= 1 diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index dee6489b9cb..4d499e9f54f 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -116,7 +116,7 @@ M << 'sound/effects/mousesqueek.ogg' ..() -/mob/living/simple_animal/mouse/death() +/mob/living/simple_animal/mouse/death(gibbed) layer = MOB_LAYER if(client) client.time_died_as_mouse = world.time diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm index eba412580db..30f55a2220f 100644 --- a/code/modules/mob/living/simple_animal/friendly/pet.dm +++ b/code/modules/mob/living/simple_animal/friendly/pet.dm @@ -17,7 +17,7 @@ ..() regenerate_icons() -/mob/living/simple_animal/pet/death() +/mob/living/simple_animal/pet/death(gibbed) ..() regenerate_icons() diff --git a/code/modules/mob/living/simple_animal/friendly/slime.dm b/code/modules/mob/living/simple_animal/friendly/slime.dm index 6bbadd7e8d5..a76fe47cdba 100644 --- a/code/modules/mob/living/simple_animal/friendly/slime.dm +++ b/code/modules/mob/living/simple_animal/friendly/slime.dm @@ -64,21 +64,18 @@ response_harm = "stomps on" emote_see = list("jiggles", "bounces in place") var/colour = "grey" + del_on_death = 1 /mob/living/simple_animal/adultslime/New() ..() overlays += "aslime-:33" -/mob/living/simple_animal/slime/adult/death() - var/mob/living/simple_animal/slime/S1 = new /mob/living/simple_animal/slime (src.loc) - S1.icon_state = "[src.colour] baby slime" - S1.icon_living = "[src.colour] baby slime" - S1.icon_dead = "[src.colour] baby slime dead" - S1.colour = "[src.colour]" - var/mob/living/simple_animal/slime/S2 = new /mob/living/simple_animal/slime (src.loc) - S2.icon_state = "[src.colour] baby slime" - S2.icon_living = "[src.colour] baby slime" - S2.icon_dead = "[src.colour] baby slime dead" - S2.colour = "[src.colour]" - qdel(src) \ No newline at end of file +/mob/living/simple_animal/slime/adult/death(gibbed) + for(var/i in 1 to 2) + var/mob/living/simple_animal/slime/S = new /mob/living/simple_animal/slime (src.loc) + S.icon_state = "[colour] baby slime" + S.icon_living = "[colour] baby slime" + S.icon_dead = "[colour] baby slime dead" + S.colour = "[colour]" + ..() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index 4ddfa827dc3..b453cfa5ea2 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -40,6 +40,8 @@ speak_emote = list("beeps","clicks","chirps") can_hide = 1 ventcrawler = 2 + loot = list(/obj/effect/decal/cleanable/blood/gibs/robot) + del_on_death = 1 /mob/living/simple_animal/spiderbot/attackby(var/obj/item/O as obj, var/mob/user as mob, params) @@ -205,20 +207,14 @@ ..() -/mob/living/simple_animal/spiderbot/death() - - living_mob_list -= src - dead_mob_list += src - +/mob/living/simple_animal/spiderbot/death(gibbed) if(camera) camera.status = 0 if(held_item) held_item.forceMove(src.loc) held_item = null - - robogibs(src.loc, viruses) - qdel(src) + ..() //Cannibalized from the parrot mob. ~Zuhayr diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 56f63ee99be..6cd1d147211 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -21,15 +21,16 @@ a_intent = I_HARM attack_sound = 'sound/weapons/bladeslice.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) - var/dead = 0 unsuitable_atmos_damage = 15 + heat_damage_per_tick = 20 faction = list("alien") status_flags = CANPUSH minbodytemp = 0 see_in_dark = 8 see_invisible = SEE_INVISIBLE_MINIMUM - heat_damage_per_tick = 20 gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE + 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 @@ -47,7 +48,6 @@ /mob/living/simple_animal/hostile/alien/drone/handle_automated_action() if(!..()) //AIStatus is off return - plant_cooldown-- if(AIStatus == AI_IDLE) if(!plants_off && prob(10) && plant_cooldown<=0) @@ -136,14 +136,6 @@ damage = 30 icon_state = "toxin" -/mob/living/simple_animal/hostile/alien/death() - ..() - if(dead == 0) - dead = 1 - 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/maid name = "lusty xenomorph maid" melee_damage_lower = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index c24b0b6a844..4899eef3aaf 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -39,6 +39,7 @@ //Spaceborn beings don't get hurt by space 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 + del_on_death = 1 var/datum/reagent/beegent = null //hehe, beegent var/obj/structure/beebox/beehome = null @@ -61,8 +62,6 @@ /mob/living/simple_animal/hostile/poison/bees/death(gibbed) beegent = null ..() - ghostize() - qdel(src) /mob/living/simple_animal/hostile/poison/bees/examine(mob/user) ..() diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index ddd302c3e8c..b7fbbec41fb 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -55,12 +55,8 @@ icon_living = "holocarp" maxbodytemp = INFINITY gold_core_spawnable = CHEM_MOB_SPAWN_INVALID + del_on_death = 1 -/mob/living/simple_animal/hostile/carp/holocarp/death() - ..() - ghostize() - qdel(src) - return /mob/living/simple_animal/hostile/carp/megacarp icon = 'icons/mob/alienqueen.dmi' diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 94cf8dae65c..b3ea7f442fa 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -24,6 +24,8 @@ speak_emote = list("states") gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE loot = list(/obj/effect/decal/cleanable/blood/gibs/robot) + deathmessage = "blows apart!" + del_on_death = 1 /mob/living/simple_animal/hostile/hivebot/range name = "Hivebot" @@ -45,15 +47,11 @@ maxHealth = 80 ranged = 1 -/mob/living/simple_animal/hostile/hivebot/death() - ..() - visible_message("[src] blows apart!") +/mob/living/simple_animal/hostile/hivebot/death(gibbed) var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() - ghostize() - qdel(src) - return + ..() /mob/living/simple_animal/hostile/hivebot/tele//this still needs work name = "Beacon" diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index faf0cc0f9a3..a3739dfe088 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -219,7 +219,7 @@ //////////////END HOSTILE MOB TARGETTING AND AGGRESSION//////////// -/mob/living/simple_animal/hostile/death() +/mob/living/simple_animal/hostile/death(gibbed) LoseAggro() mouse_opacity = 1 ..() diff --git a/code/modules/mob/living/simple_animal/hostile/illusion.dm b/code/modules/mob/living/simple_animal/hostile/illusion.dm index c4a71cca618..a770f6b1c32 100644 --- a/code/modules/mob/living/simple_animal/hostile/illusion.dm +++ b/code/modules/mob/living/simple_animal/hostile/illusion.dm @@ -16,6 +16,8 @@ var/life_span = INFINITY //how long until they despawn var/mob/living/parent_mob var/multiply_chance = 0 //if we multiply on hit + deathmessage = "vanishes into thin air! It was a fake!" + del_on_death = 1 /mob/living/simple_animal/hostile/illusion/Life() @@ -23,12 +25,6 @@ if(world.time > life_span) death() -/mob/living/simple_animal/hostile/illusion/death(gibbed) - ..() - visible_message("\The [src] vanishes into thin air! It was a fake!") - ghostize() - qdel(src) - /mob/living/simple_animal/hostile/illusion/proc/Copy_Parent(mob/living/original, life = 50, health = 100, damage = 0, replicate = 0 ) appearance = original.appearance parent_mob = original diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index f14d1bf649a..c0616bc5eea 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -27,18 +27,13 @@ var/is_electronic = 0 gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE + del_on_death = 1 /mob/living/simple_animal/hostile/mimic/FindTarget() . = ..() if(.) custom_emote(1, "growls at [.]") -/mob/living/simple_animal/hostile/mimic/death() - ..() - visible_message("[src] stops moving!") - ghostize() - qdel(src) - /mob/living/simple_animal/hostile/mimic/emp_act(severity) if(is_electronic) switch(severity) @@ -100,7 +95,7 @@ ..() icon_state = initial(icon_state) -/mob/living/simple_animal/hostile/mimic/crate/death() +/mob/living/simple_animal/hostile/mimic/crate/death(gibbed) var/obj/structure/closet/crate/C = new(get_turf(src)) // Put loot in crate for(var/obj/O in src) @@ -135,7 +130,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca for(var/mob/living/M in contents) //a fix for animated statues from the flesh to stone spell death() -/mob/living/simple_animal/hostile/mimic/copy/death() +/mob/living/simple_animal/hostile/mimic/copy/death(gibbed) for(var/atom/movable/M in src) M.loc = get_turf(src) 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 83e8b78164f..9433f4923af 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -194,7 +194,7 @@ visible_message("The [P.name] was repelled by [src.name]'s girth!") return -/mob/living/simple_animal/hostile/asteroid/goldgrub/death() +/mob/living/simple_animal/hostile/asteroid/goldgrub/death(gibbed) alerted = 0 Reward() ..() @@ -321,14 +321,12 @@ throw_message = "falls right through the strange body of the" environment_smash = 0 pass_flags = PASSTABLE + del_on_death = 1 /mob/living/simple_animal/hostile/asteroid/hivelordbrood/New() ..() spawn(100) - qdel(src) - -/mob/living/simple_animal/hostile/asteroid/hivelordbrood/death() - qdel(src) + death() /mob/living/simple_animal/hostile/asteroid/goliath name = "goliath" diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index e6dda5e301c..99e6f61431c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -26,6 +26,7 @@ ventcrawler = 2 robust_searching = 1 speak_emote = list("squeaks") + deathmessage = "fainted" var/powerlevel = 0 //Tracks our general strength level gained from eating other shrooms var/bruised = 0 //If someone tries to cheat the system by attacking a shroom to lower its health, punish them so that it wont award levels to shrooms that eat it var/recovery_cooldown = 0 //So you can't repeatedly revive it during a fight @@ -88,8 +89,7 @@ icon_state = "mushroom_color" UpdateMushroomCap() -/mob/living/simple_animal/hostile/mushroom/death() - visible_message("[src] fainted.") +/mob/living/simple_animal/hostile/mushroom/death(gibbed) ..() UpdateMushroomCap() diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index 89835092ffd..d3fec4bf8d8 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -24,6 +24,7 @@ speak_emote = list("yarrs") loot = list(/obj/effect/landmark/mobcorpse/pirate, /obj/item/weapon/melee/energy/sword/pirate) + del_on_death = 1 faction = list("pirate") /mob/living/simple_animal/hostile/pirate/ranged @@ -38,11 +39,4 @@ minimum_distance = 5 projectiletype = /obj/item/projectile/beam loot = list(/obj/effect/landmark/mobcorpse/pirate/ranged, - /obj/item/weapon/gun/energy/laser) - - -/mob/living/simple_animal/hostile/pirate/death() - ..() - ghostize() - qdel(src) - return \ No newline at end of file + /obj/item/weapon/gun/energy/laser) \ 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 9a64b5c4d3e..9f98b205fc9 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -40,6 +40,8 @@ var/has_loot = 1 faction = list("malf_drone") + deathmessage = "suddenly breaks apart." + del_on_death = 1 /mob/living/simple_animal/hostile/retaliate/malf_drone/New() ..() @@ -149,11 +151,6 @@ hostile_drone = 0 walk(src,0) -/mob/living/simple_animal/hostile/retaliate/malf_drone/death() - ..() - visible_message("\blue [bicon(src)] [src] suddenly breaks apart.") - qdel(src) - /mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() //Seriously, what the actual hell. //some random debris left behind if(has_loot) 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 210ff43ebda..66972b06d2e 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm @@ -46,6 +46,7 @@ faction = list("undead") // did I mention ghost loot = list(/obj/item/weapon/reagent_containers/food/snacks/ectoplasm) + del_on_death = 1 /mob/living/simple_animal/hostile/retaliate/ghost/Process_Spacemove(var/check_drift = 0) return 1 @@ -61,10 +62,6 @@ else invisibility = pick(0,60,60,invisibility) ..() -/mob/living/simple_animal/hostile/retaliate/ghost/death() - ..() - qdel(src) - return /mob/living/simple_animal/hostile/retaliate/skeleton name = "skeleton" @@ -92,11 +89,7 @@ faction = list("undead") loot = list(/obj/effect/decal/remains/human) - -/mob/living/simple_animal/hostile/retaliate/skeleton/death() - ..() - qdel(src) - return + del_on_death = 1 /mob/living/simple_animal/hostile/retaliate/zombie name = "zombie" @@ -124,8 +117,4 @@ faction = list("undead") loot = list(/obj/effect/decal/cleanable/blood/gibs) - -/mob/living/simple_animal/hostile/retaliate/zombie/death() - ..() - qdel(src) - return \ No newline at end of file + del_on_death = 1 \ 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 0126dd5c704..30bdb8c95e2 100644 --- a/code/modules/mob/living/simple_animal/hostile/russian.dm +++ b/code/modules/mob/living/simple_animal/hostile/russian.dm @@ -24,6 +24,7 @@ status_flags = CANPUSH loot = list(/obj/effect/landmark/mobcorpse/russian, /obj/item/weapon/kitchen/knife) + del_on_death = 1 /mob/living/simple_animal/hostile/russian/ranged @@ -39,8 +40,3 @@ 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() - ..() - qdel(src) - return diff --git a/code/modules/mob/living/simple_animal/hostile/spaceworms.dm b/code/modules/mob/living/simple_animal/hostile/spaceworms.dm index a186bbe3d09..c59cdf0570a 100644 --- a/code/modules/mob/living/simple_animal/hostile/spaceworms.dm +++ b/code/modules/mob/living/simple_animal/hostile/spaceworms.dm @@ -184,7 +184,7 @@ //Harder to kill the head, but it can kill off the whole worm -/mob/living/simple_animal/hostile/spaceWorm/wormHead/death() +/mob/living/simple_animal/hostile/spaceWorm/wormHead/death(gibbed) ..() if(prob(catastrophicDeathProb)) for(var/mob/living/simple_animal/hostile/spaceWorm/SW in totalWormSegments) @@ -294,7 +294,7 @@ qdel(src) -/mob/living/simple_animal/hostile/spaceWorm/death() +/mob/living/simple_animal/hostile/spaceWorm/death(gibbed) ..() if(myHead) myHead.totalWormSegments -= src diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 72388af0037..d3f63450fe6 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -24,11 +24,7 @@ check_friendly_fire = 1 status_flags = CANPUSH loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier) - -/mob/living/simple_animal/hostile/syndicate/death() - ..() - qdel(src) - return + del_on_death = 1 ///////////////Sword and shield//////////// @@ -124,9 +120,5 @@ minbodytemp = 0 flying = 1 gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE - -/mob/living/simple_animal/hostile/viscerator/death() - ..() - visible_message("\red [src] is smashed into pieces!") - qdel(src) - return + del_on_death = 1 + deathmessage = "is smashed into pieces!" \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index b47312b15df..9d22827a292 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -30,6 +30,8 @@ faction = list("hostile", "winter") loot = list(/obj/item/stack/sheet/wood) gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE + deathmessage = "is hacked into pieces!" + del_on_death = 1 /mob/living/simple_animal/hostile/tree/FindTarget() . = ..() @@ -42,9 +44,4 @@ if(istype(L)) if(prob(15)) L.Weaken(3) - L.visible_message("\the [src] knocks down \the [L]!") - -/mob/living/simple_animal/hostile/tree/death() - ..() - visible_message("\red [src] is hacked into pieces!") - qdel(src) \ No newline at end of file + L.visible_message("\the [src] knocks down \the [L]!") \ 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 12ede5955ea..6552999aef8 100644 --- a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm @@ -33,14 +33,14 @@ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE -/mob/living/simple_animal/hostile/winter/snowman/death() +/mob/living/simple_animal/hostile/winter/snowman/death(gibbed) 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 loot.Add(/obj/structure/snowman) - visible_message("The [src.name] shimmers as its animating magic fades away!") + deathmessage = "shimmers as its animating magic fades away!" + del_on_death = 1 ..() //this is just to make sure it gets properly killed before we qdel it - qdel(src) else ..() @@ -73,7 +73,7 @@ icon_living = "santa" icon_dead = "santa-dead" -/mob/living/simple_animal/hostile/winter/santa/death() +/mob/living/simple_animal/hostile/winter/santa/death(gibbed) ..() if(death_message) visible_message(death_message) @@ -121,7 +121,7 @@ melee_damage_lower = 15 melee_damage_upper = 25 //that's gonna leave a mark, for sure -/mob/living/simple_animal/hostile/winter/santa/stage_4/death() +/mob/living/simple_animal/hostile/winter/santa/stage_4/death(gibbed) to_chat(world, "
") to_chat(world, "THE FAT MAN HAS FALLEN!") to_chat(world, "SANTA CLAUS HAS BEEN DEFEATED!") diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 983faec63d6..1266b31f746 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -112,7 +112,7 @@ hear_radio_list -= src return ..() -/mob/living/simple_animal/parrot/death() +/mob/living/simple_animal/parrot/death(gibbed) if(held_item) held_item.loc = src.loc held_item = null diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index 736b6c9b599..99a65c0052d 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -25,16 +25,10 @@ faction = list("cult") status_flags = CANPUSH loot = list(/obj/item/weapon/reagent_containers/food/snacks/ectoplasm) + del_on_death = 1 + deathmessage = "lets out a contented sigh as their form unwinds." - death() - ..() - 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. ") - ghostize() - qdel(src) - attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri if(istype(O, /obj/item/device/soulstone)) O.transfer_soul("SHADE", src, user) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 362846dfd4a..0f47044aef3 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -71,8 +71,14 @@ var/gold_core_spawnable = CHEM_MOB_SPAWN_INVALID //if CHEM_MOB_SPAWN_HOSTILE can be spawned by plasma with gold core, CHEM_MOB_SPAWN_FRIENDLY are 'friendlies' spawned with blood var/master_commander = null //holding var for determining who own/controls a sentient simple animal (for sentience potions). + + var/mob/living/simple_animal/hostile/spawner/nest + 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 + 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 /mob/living/simple_animal/New() @@ -468,15 +474,28 @@ stat(null, "Health: [round((health / maxHealth) * 100)]%") /mob/living/simple_animal/death(gibbed) + if(nest) + nest.spawned_mobs -= src + nest = null if(loot.len) for(var/i in loot) new i(loc) - health = 0 - icon_state = icon_dead - stat = DEAD - density = 0 if(!gibbed) - visible_message("\The [src] stops moving...") + if(death_sound) + playsound(get_turf(src),death_sound, 200, 1) + if(deathmessage) + visible_message("\The [src] [deathmessage]") + else if(!del_on_death) + visible_message("\The [src] stops moving...") + if(del_on_death) + ghostize() + qdel(src) + else + health = 0 + icon_state = icon_dead + stat = DEAD + density = 0 + lying = 1 ..() /mob/living/simple_animal/ex_act(severity) diff --git a/code/modules/mob/living/simple_animal/spawner.dm b/code/modules/mob/living/simple_animal/spawner.dm new file mode 100644 index 00000000000..7c59ab4ab35 --- /dev/null +++ b/code/modules/mob/living/simple_animal/spawner.dm @@ -0,0 +1,82 @@ +/mob/living/simple_animal/hostile/spawner + name = "monster nest" + icon = 'icons/mob/animal.dmi' + health = 100 + maxHealth = 100 + var/list/spawned_mobs = list() + var/max_mobs = 5 + var/spawn_delay = 0 + var/spawn_time = 300 //30 seconds default + var/mob_type = /mob/living/simple_animal/hostile/carp + var/spawn_text = "emerges from" + status_flags = 0 + anchored = 1 + AIStatus = AI_OFF + a_intent = "harm" + stop_automated_movement = 1 + wander = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) + minbodytemp = 0 + maxbodytemp = 350 + sentience_type = SENTIENCE_BOSS + + +/mob/living/simple_animal/hostile/spawner/Destroy() + for(var/mob/living/simple_animal/L in spawned_mobs) + if(L.nest == src) + L.nest = null + spawned_mobs = null + return ..() + +/mob/living/simple_animal/hostile/spawner/process_ai() + ..() + spawn_mob() + +/mob/living/simple_animal/hostile/spawner/proc/spawn_mob() + if(spawned_mobs.len >= max_mobs) + return 0 + if(spawn_delay > world.time) + return 0 + spawn_delay = world.time + spawn_time + var/mob/living/simple_animal/L = new mob_type(src.loc) + spawned_mobs += L + L.nest = src + L.faction = src.faction + visible_message("[L] [spawn_text] [src].") + +/mob/living/simple_animal/hostile/spawner/syndicate + name = "warp beacon" + icon = 'icons/obj/device.dmi' + icon_state = "syndbeacon" + spawn_text = "warps in from" + mob_type = /mob/living/simple_animal/hostile/syndicate/ranged + faction = list("syndicate") + +/mob/living/simple_animal/hostile/spawner/mining + name = "monster den" + desc = "A hole dug into the ground, harboring all kinds of monsters found within most caves or mining asteroids." + icon_state = "hole" + icon_living = "hole" + health = 200 + maxHealth = 200 + max_mobs = 3 + icon = 'icons/mob/nest.dmi' + spawn_text = "crawls out of" + mob_type = /mob/living/simple_animal/hostile/asteroid/goldgrub + 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) + faction = list("mining") + +/mob/living/simple_animal/hostile/spawner/mining/goliath + name = "goliath den" + desc = "A den housing a nest of goliaths, oh god why?" + mob_type = /mob/living/simple_animal/hostile/asteroid/goliath + +/mob/living/simple_animal/hostile/spawner/mining/hivelord + name = "hivelord den" + desc = "A den housing a nest of hivelords." + mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord + +/mob/living/simple_animal/hostile/spawner/mining/basilisk + name = "basilisk den" + desc = "A den housing a nest of basilisks, bring a coat." + mob_type = /mob/living/simple_animal/hostile/asteroid/basilisk \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/tribbles.dm b/code/modules/mob/living/simple_animal/tribbles.dm index a6eb14fb25d..b21c3110b1d 100644 --- a/code/modules/mob/living/simple_animal/tribbles.dm +++ b/code/modules/mob/living/simple_animal/tribbles.dm @@ -79,7 +79,7 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles, src.procreate() -/mob/living/simple_animal/tribble/death() // Gotta make sure to remove tribbles from the list on death +/mob/living/simple_animal/tribble/death(gibbed) // Gotta make sure to remove tribbles from the list on death ..() totaltribbles -= 1 diff --git a/code/modules/mob/living/simple_animal/vox.dm b/code/modules/mob/living/simple_animal/vox.dm deleted file mode 100644 index ba68a18a12b..00000000000 --- a/code/modules/mob/living/simple_animal/vox.dm +++ /dev/null @@ -1,169 +0,0 @@ -/mob/living/simple_animal/vox/armalis/ - - name = "serpentine alien" - real_name = "serpentine alien" - desc = "A one-eyed, serpentine creature, half-machine, easily nine feet from tail to beak!" - icon = 'icons/mob/vox.dmi' - icon_state = "armalis" - icon_living = "armalis" - maxHealth = 500 - health = 500 - response_harm = "slashes at the" - harm_intent_damage = 0 - melee_damage_lower = 30 - melee_damage_upper = 40 - attacktext = "slammed its enormous claws into" - speed = -1 - attack_sound = 'sound/weapons/bladeslice.ogg' - status_flags = 0 - universal_speak = 1 - - var/armour = null - var/amp = null - var/quills = 3 - -/mob/living/simple_animal/vox/armalis/death(gibbed) - if(!gibbed) - stat = DEAD - visible_message("[src] shudders violently and explodes!","\red You feel your body rupture!") - explosion(get_turf(loc), -1, -1, 3, 5) - gib() - return - return ..() - -/mob/living/simple_animal/vox/armalis/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if(O.force) - if(O.force >= 25) - var/damage = O.force - if(O.damtype == STAMINA) - damage = 0 - health -= damage - for(var/mob/M in viewers(src, null)) - if((M.client && !( M.blinded ))) - M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") - else - for(var/mob/M in viewers(src, null)) - if((M.client && !( M.blinded ))) - M.show_message("\red \b The [O] bounces harmlessly off of [src]. ") - else - to_chat(usr, "\red This weapon is ineffective, it does no damage.") - for(var/mob/M in viewers(src, null)) - if((M.client && !( M.blinded ))) - M.show_message("\red [user] gently taps [src] with the [O]. ") - -/mob/living/simple_animal/vox/armalis/verb/fire_quill(mob/target as mob in oview()) - - set name = "Fire quill" - set desc = "Fires a viciously pointed quill at a high speed." - set category = "Alien" - - if(quills<=0) - return - - to_chat(src, "\red You launch a razor-sharp quill at [target]!") - for(var/mob/O in oviewers()) - if((O.client && !( O.blinded ))) - to_chat(O, "\red [src] launches a razor-sharp quill at [target]!") - - var/obj/item/weapon/quill/Q = new(loc) - Q.fingerprintslast = src.ckey - Q.throw_at(target,10,30) - - quills-- - - spawn(100) - to_chat(src, "\red You feel a fresh quill slide into place.") - quills++ - -/obj/item/weapon/quill - name = "vox quill" - desc = "A wickedly barbed quill from some bizarre animal." - icon_state = "quill" - item_state = "quill" - throwforce = 5 - w_class = 3 - sharp = 1 - edge = 0 - -/mob/living/simple_animal/vox/armalis/verb/message_mob() - set category = "Alien" - set name = "Commune with creature" - set desc = "Send a telepathic message to an unlucky recipient." - - var/list/targets = list() - var/target = null - var/text = null - - targets += getmobs() //Fill list, prompt user with list - target = input("Select a creature!", "Speak to creature", null, null) as null|anything in targets - text = input("What would you like to say?", "Speak to creature", null, null) - - if(!target || !text) - return - - var/mob/M = targets[target] - - if(istype(M, /mob/dead/observer) || M.stat == DEAD) - to_chat(src, "Not even the armalis can speak to the dead.") - return - - to_chat(M, "\blue Like lead slabs crashing into the ocean, alien thoughts drop into your mind: [text]") - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(H.species.name == "Vox") - return - to_chat(H, "\red Your nose begins to bleed...") - H.drip(1) - -/mob/living/simple_animal/vox/armalis/verb/shriek() - set category = "Alien" - set name = "Shriek" - set desc = "Give voice to a psychic shriek." - -/mob/living/simple_animal/vox/armalis/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if(istype(O,/obj/item/vox/armalis_armour)) - user.drop_item() - armour = O - speed = 1 - maxHealth += 200 - health += 200 - O.loc = src - visible_message("\blue [src] is quickly outfitted in [O] by [user].","\blue You quickly outfit [src] in [O].") - regenerate_icons() - return - if(istype(O,/obj/item/vox/armalis_amp)) - user.drop_item() - amp = O - O.loc = src - visible_message("\blue [src] is quickly outfitted in [O] by [user].","\blue You quickly outfit [src] in [O].") - regenerate_icons() - return - return ..() - -/mob/living/simple_animal/vox/armalis/regenerate_icons() - - overlays = list() - if(armour) - var/icon/armour = image('icons/mob/vox.dmi',"armour") - speed = 1 - overlays += armour - if(amp) - var/icon/amp = image('icons/mob/vox.dmi',"amplifier") - overlays += amp - return - -/obj/item/vox/armalis_armour - - name = "strange armour" - desc = "Hulking reinforced armour for something huge." - icon = 'icons/obj/clothing/suits.dmi' - icon_state = "armour-armalis" - item_state = "armour-armalis" - -/obj/item/vox/armalis_amp - - name = "strange lenses" - desc = "A series of metallic lenses and chains." - icon = 'icons/obj/clothing/hats.dmi' - icon_state = "amp" - item_state = "amp" diff --git a/icons/mob/nest.dmi b/icons/mob/nest.dmi new file mode 100644 index 0000000000000000000000000000000000000000..7dab335929e22d3807b6672be735634210e4db91 GIT binary patch literal 13209 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 U+#JX2zcv5`nUB)7QYNAQ3FXmCZ2$lO literal 0 HcmV?d00001 diff --git a/paradise.dme b/paradise.dme index e2eb20894e0..3d1a43064e2 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1598,8 +1598,8 @@ #include "code\modules\mob\living\simple_animal\powers.dm" #include "code\modules\mob\living\simple_animal\shade.dm" #include "code\modules\mob\living\simple_animal\simple_animal.dm" +#include "code\modules\mob\living\simple_animal\spawner.dm" #include "code\modules\mob\living\simple_animal\tribbles.dm" -#include "code\modules\mob\living\simple_animal\vox.dm" #include "code\modules\mob\living\simple_animal\bot\bot.dm" #include "code\modules\mob\living\simple_animal\bot\cleanbot.dm" #include "code\modules\mob\living\simple_animal\bot\construction.dm" From bb927bb8821164fcc107238ad9ca1fb24319ceaf Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 18 Jul 2016 04:16:34 -0400 Subject: [PATCH 2/2] fixup --- code/modules/mob/living/simple_animal/spawner.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mob/living/simple_animal/spawner.dm b/code/modules/mob/living/simple_animal/spawner.dm index 7c59ab4ab35..0cbf24cf6e2 100644 --- a/code/modules/mob/living/simple_animal/spawner.dm +++ b/code/modules/mob/living/simple_animal/spawner.dm @@ -18,6 +18,7 @@ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 maxbodytemp = 350 + layer = MOB_LAYER-0.1 sentience_type = SENTIENCE_BOSS