diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_bughabitat.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_bughabitat.dmm index 5b3efc37d68..79c97570802 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_bughabitat.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_bughabitat.dmm @@ -24,7 +24,7 @@ /area/ruin/bughabitat) "bu" = ( /obj/effect/spawner/random/food_or_drink/snack, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/fakebasalt, /area/ruin/bughabitat) "bQ" = ( @@ -140,7 +140,7 @@ /turf/open/floor/plastic, /area/ruin/bughabitat) "ot" = ( -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /obj/item/seeds/soya, /turf/open/floor/fakebasalt, /area/ruin/bughabitat) @@ -363,7 +363,7 @@ /area/ruin/bughabitat) "RJ" = ( /obj/structure/window/reinforced/spawner/directional/east, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/fakebasalt, /area/ruin/bughabitat) "RR" = ( diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_comms_agent/commsoffice_cheap.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_comms_agent/commsoffice_cheap.dmm index c43f60ec550..462f5b486aa 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_comms_agent/commsoffice_cheap.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_comms_agent/commsoffice_cheap.dmm @@ -112,7 +112,7 @@ /area/ruin/comms_agent) "U" = ( /obj/structure/closet/crate, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /obj/effect/spawner/random/engineering/tool, /obj/effect/spawner/random/engineering/tool, /obj/effect/spawner/random/engineering/tool, diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm index 4f36c39e6ad..09fcc995760 100644 --- a/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm @@ -11,7 +11,7 @@ pixel_y = -12 }, /obj/effect/decal/cleanable/insectguts, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/plating/dumpsterair, /area/ruin/space/has_grav/garbagetruck/foodwaste) "aP" = ( @@ -143,7 +143,7 @@ name = "antique cleaver"; desc = "A huge knife for chopping up and slicing meat. Years of service has scarred its metal and worn grooves into the handle, but its blade is well-maintained and very sharp." }, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/plating/dumpsterair, /area/ruin/space/has_grav/garbagetruck/foodwaste) "gI" = ( @@ -559,7 +559,7 @@ /obj/item/trash/popcorn/caramel{ pixel_y = -6 }, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/plating/dumpsterair, /area/ruin/space/has_grav/garbagetruck/foodwaste) "zK" = ( @@ -890,8 +890,8 @@ /obj/item/dog_bone{ pixel_y = -6 }, -/mob/living/basic/cockroach, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/plating/dumpsterair, /area/ruin/space/has_grav/garbagetruck/foodwaste) "KT" = ( diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm index fc94b80d68b..568f2e9194f 100644 --- a/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm @@ -314,7 +314,7 @@ /obj/item/restraints/handcuffs/cable/zipties/used, /obj/item/toy/brokenradio, /obj/effect/spawner/random/engineering/tool, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/plating/dumpsterair, /area/ruin/space/has_grav/garbagetruck/squat) "rq" = ( diff --git a/_maps/RandomRuins/SpaceRuins/hauntedtradingpost.dmm b/_maps/RandomRuins/SpaceRuins/hauntedtradingpost.dmm index b7c9cf52c7b..38c3d2cf070 100644 --- a/_maps/RandomRuins/SpaceRuins/hauntedtradingpost.dmm +++ b/_maps/RandomRuins/SpaceRuins/hauntedtradingpost.dmm @@ -3217,7 +3217,7 @@ /turf/open/floor/wood, /area/ruin/space/has_grav/hauntedtradingpost/public) "BS" = ( -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /obj/effect/turf_decal/stripes/red/line{ dir = 8 }, diff --git a/_maps/RandomZLevels/museum.dmm b/_maps/RandomZLevels/museum.dmm index 482652c6734..29db691e5af 100644 --- a/_maps/RandomZLevels/museum.dmm +++ b/_maps/RandomZLevels/museum.dmm @@ -6011,7 +6011,7 @@ /turf/closed/indestructible/reinforced/titanium/nodiagonal, /area/awaymission/museum) "Yg" = ( -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /obj/effect/decal/cleanable/dirt/dust, /turf/open/indestructible/plating, /area/awaymission/museum) diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 4d727cbc1c0..55872dd5507 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -72,7 +72,7 @@ "aaX" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) "aaY" = ( @@ -6053,7 +6053,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/shard, /obj/effect/decal/cleanable/glass, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/plating, /area/station/maintenance/port/fore) "byn" = ( @@ -6359,7 +6359,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/plating, /area/station/maintenance/fore) "bBz" = ( @@ -8248,7 +8248,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/wood, /area/station/service/library/abandoned) "bWH" = ( @@ -8480,7 +8480,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/iron, /area/station/medical/abandoned) "bZz" = ( @@ -17030,7 +17030,7 @@ /area/station/service/bar) "eit" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/iron/dark, /area/station/service/abandoned_gambling_den) "eiw" = ( @@ -30204,7 +30204,7 @@ /turf/open/floor/iron, /area/station/security/execution/transfer) "hww" = ( -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/wood, /area/station/service/library/abandoned) "hwB" = ( @@ -41417,7 +41417,7 @@ /obj/effect/landmark/generic_maintenance_landmark, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/plating, /area/station/service/theater/abandoned) "kjG" = ( @@ -58648,7 +58648,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/iron/dark, /area/station/service/abandoned_gambling_den) "oKr" = ( @@ -81140,7 +81140,7 @@ "umv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) "umz" = ( @@ -84461,7 +84461,7 @@ /area/station/service/chapel) "vba" = ( /obj/effect/mapping_helpers/burnt_floor, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "vbb" = ( diff --git a/_maps/minigame/basketball/greytide_worldwide.dmm b/_maps/minigame/basketball/greytide_worldwide.dmm index 3c9ce6ad692..f62e06681ce 100644 --- a/_maps/minigame/basketball/greytide_worldwide.dmm +++ b/_maps/minigame/basketball/greytide_worldwide.dmm @@ -603,7 +603,7 @@ /area/centcom/basketball) "Ql" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/plating, /area/centcom/basketball) "QC" = ( @@ -624,7 +624,7 @@ /turf/open/floor/plating, /area/centcom/basketball) "SF" = ( -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/plating, /area/centcom/basketball) "Tc" = ( diff --git a/_maps/shuttles/emergency_birdshot.dmm b/_maps/shuttles/emergency_birdshot.dmm index b5cba87dda8..e6839a40833 100644 --- a/_maps/shuttles/emergency_birdshot.dmm +++ b/_maps/shuttles/emergency_birdshot.dmm @@ -338,7 +338,7 @@ /obj/structure/chair/comfy/shuttle{ dir = 8 }, -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /obj/item/reagent_containers/syringe/contraband{ pixel_x = -4; pixel_y = -16 diff --git a/_maps/shuttles/emergency_fame.dmm b/_maps/shuttles/emergency_fame.dmm index 919a8651b37..088944a2a28 100644 --- a/_maps/shuttles/emergency_fame.dmm +++ b/_maps/shuttles/emergency_fame.dmm @@ -879,7 +879,7 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/escape) "Or" = ( -/mob/living/basic/cockroach, +/obj/effect/mob_spawn/cockroach, /turf/open/floor/fakebasalt, /area/shuttle/escape/brig) "Ow" = ( diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 6c0984009e2..12c304782e1 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -432,6 +432,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_SILENT_FOOTSTEPS "silent_footsteps" /// hnnnnnnnggggg..... you're pretty good.... #define TRAIT_NICE_SHOT "nice_shot" +/// trait added if mob is killed with an anti pest reagent +#define TRAIT_BUGKILLER_DEATH "bugkiller_death" /// prevents the damage done by a brain tumor #define TRAIT_TUMOR_SUPPRESSED "brain_tumor_suppressed" /// Prevents hallucinations from the hallucination brain trauma (RDS) diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index f4dbbcad7e2..1e796d960d9 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -185,6 +185,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_BORN_MONKEY" = TRAIT_BORN_MONKEY, "TRAIT_BOT_PATH_HUD" = TRAIT_BOT_PATH_HUD, "TRAIT_BOXING_READY" = TRAIT_BOXING_READY, + "TRAIT_BUGKILLER_DEATH" = TRAIT_BUGKILLER_DEATH, "TRAIT_BRAINWASHING" = TRAIT_BRAINWASHING, "TRAIT_BRAWLING_KNOCKDOWN_BLOCKED" = TRAIT_BRAWLING_KNOCKDOWN_BLOCKED, "TRAIT_BYPASS_EARLY_IRRADIATED_CHECK" = TRAIT_BYPASS_EARLY_IRRADIATED_CHECK, diff --git a/code/datums/elements/bugkiller_reagent.dm b/code/datums/elements/bugkiller_reagent.dm index d2c25926e96..f6a09989335 100644 --- a/code/datums/elements/bugkiller_reagent.dm +++ b/code/datums/elements/bugkiller_reagent.dm @@ -69,6 +69,8 @@ if(owner.stat == DEAD || QDELETED(owner)) return + ADD_TRAIT(owner, TRAIT_BUGKILLER_DEATH, REF(src)) + if(isbasicmob(owner)) var/mob/living/basic/basic_owner = owner basic_owner.basic_mob_flags &= ~DEL_ON_DEATH diff --git a/code/game/objects/effects/spawners/random/trash.dm b/code/game/objects/effects/spawners/random/trash.dm index 7377331ecdc..8ae1de04e9e 100644 --- a/code/game/objects/effects/spawners/random/trash.dm +++ b/code/game/objects/effects/spawners/random/trash.dm @@ -162,6 +162,7 @@ loot = list( // This spawner will scatter garbage around a dirty site. /obj/effect/spawner/random/trash/garbage = 6, /mob/living/basic/cockroach = 5, + /mob/living/basic/cockroach/bloodroach = 1, /obj/effect/decal/cleanable/garbage = 4, /obj/effect/decal/cleanable/vomit/old = 3, /obj/effect/spawner/random/trash/cigbutt = 2, @@ -171,7 +172,7 @@ if(mapload) var/turf/location = get_turf(loc) if(location.initial_gas_mix != OPENTURF_DEFAULT_ATMOS && location.initial_gas_mix != OPENTURF_DIRTY_ATMOS) - loot -= /mob/living/basic/cockroach + loot -= list(/mob/living/basic/cockroach, /mob/living/basic/cockroach/bloodroach) return ..() /obj/effect/spawner/random/trash/moisture diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index ccfd185f6f0..5b29921438a 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -1121,6 +1121,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /mob/living/basic/ant, /mob/living/basic/butterfly, /mob/living/basic/cockroach, + /mob/living/basic/cockroach/bloodroach, /mob/living/basic/spider/growing/spiderling, /mob/living/basic/bee, /obj/effect/decal/cleanable/ants, diff --git a/code/modules/events/scrubber_overflow.dm b/code/modules/events/scrubber_overflow.dm index 7f24648a9e5..16a455de0cf 100644 --- a/code/modules/events/scrubber_overflow.dm +++ b/code/modules/events/scrubber_overflow.dm @@ -116,7 +116,7 @@ else if (prob(danger_chance)) dispensed_reagent.add_reagent(get_overflowing_reagent(dangerous = TRUE), reagents_amount) new /mob/living/basic/cockroach(get_turf(vent)) - new /mob/living/basic/cockroach(get_turf(vent)) + new /mob/living/basic/cockroach/bloodroach(get_turf(vent)) else dispensed_reagent.add_reagent(get_overflowing_reagent(dangerous = FALSE), reagents_amount) diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 1aec7399c9a..180054fa7a1 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -77,6 +77,7 @@ var/static/list/mob_list = list( /mob/living/basic/butterfly, /mob/living/basic/cockroach, + /mob/living/basic/cockroach/bloodroach, /mob/living/basic/spider/maintenance, /mob/living/basic/mouse, /mob/living/basic/snail, diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index a988e736936..89fd3361a06 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -225,7 +225,7 @@ new /obj/item/dnainjector/wackymut(src) if(91) for(var/i in 1 to 30) - new /mob/living/basic/cockroach(src) + new /mob/living/basic/cockroach/bloodroach(src) if(92) new /obj/item/katana(src) if(93) diff --git a/code/modules/mining/lavaland/mining_loot/megafauna/colossus.dm b/code/modules/mining/lavaland/mining_loot/megafauna/colossus.dm index d21322424cf..76e3153e4e0 100644 --- a/code/modules/mining/lavaland/mining_loot/megafauna/colossus.dm +++ b/code/modules/mining/lavaland/mining_loot/megafauna/colossus.dm @@ -344,7 +344,7 @@ valid_mobs += possible_mob if (!length(valid_mobs)) //Just in case there aren't any animals on the station, this will leave you with a terrible option to possess if you feel like it //i found it funny that in the file for a giant angel beast theres a cockroach - new /mob/living/basic/cockroach(get_step(src,dir)) + new /mob/living/basic/cockroach/bloodroach(get_step(src,dir)) return var/mob/living/picked_mob = pick(valid_mobs) diff --git a/code/modules/mob/living/basic/vermin/cockroach/cockroach.dm b/code/modules/mob/living/basic/vermin/cockroach/cockroach.dm index 394abd5b87e..4a8ece69b14 100644 --- a/code/modules/mob/living/basic/vermin/cockroach/cockroach.dm +++ b/code/modules/mob/living/basic/vermin/cockroach/cockroach.dm @@ -38,6 +38,8 @@ var/minion_path = /mob/living/basic/cockroach/sewer /// Command list given to minionised cockroaches var/list/minion_commands + /// Cockroach death drops + var/static/list/death_drops = list(/obj/effect/decal/cleanable/insectguts) /mob/living/basic/cockroach/Initialize(mapload) var/turf/our_turf = get_turf(src) @@ -48,8 +50,7 @@ minimum_survivable_temperature = 140 // 40kelvin below icebox temp add_atom_colour("#66ccff", FIXED_COLOUR_PRIORITY) . = ..() - var/static/list/roach_drops = list(/obj/effect/decal/cleanable/insectguts) - AddElement(/datum/element/death_drops, roach_drops) + AddElement(/datum/element/death_drops, death_drops) AddElement(/datum/element/swabable, cockroach_cell_line, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 7) AddComponent( \ /datum/component/squashable, \ @@ -91,6 +92,32 @@ minion_path = null ai_controller = /datum/ai_controller/basic_controller/cockroach/aggro +/mob/living/basic/cockroach/bloodroach + name = "bloodroach" + desc = "This cockroach has gorged itself on maintenance blood, and has a glistening red sheen to its fatty carapace. Incredibly disgusting." + icon_state = "bloodroach" + icon_dead = "bloodroach_no_animation" + health = 3 + maxHealth = 3 // Wow!! + var/static/list/blood_drops = list(/obj/effect/decal/cleanable/blood/gibs/old) + +/mob/living/basic/cockroach/bloodroach/Initialize(mapload) + . = ..() + // Overriding the static drops of parent + AddElement(/datum/element/death_drops, blood_drops) + +/mob/living/basic/cockroach/bloodroach/death(gibbed) + if(HAS_TRAIT(src, TRAIT_BUGKILLER_DEATH)) + return ..() + // explode into a pile of blood if not pest controlled + for(var/turf/messy_turf in view(src, 2)) + new /obj/effect/decal/cleanable/blood(messy_turf) + for(var/mob/living/mob_in_turf in messy_turf) + mob_in_turf.visible_message(span_danger("[mob_in_turf] is splattered with blood!"), span_userdanger("You're splattered with blood!")) + mob_in_turf.add_blood_DNA(list("Non-human DNA" = random_human_blood_type())) + playsound(mob_in_turf, 'sound/effects/splat.ogg', 50, TRUE, extrarange = SILENCED_SOUND_EXTRARANGE) + return ..() + /// Roach with a spiky hat, like a caltrop /mob/living/basic/cockroach/hauberoach name = "hauberoach" diff --git a/code/modules/mob_spawn/mob_spawn.dm b/code/modules/mob_spawn/mob_spawn.dm index 166f3132a13..094a9c5f6ab 100644 --- a/code/modules/mob_spawn/mob_spawn.dm +++ b/code/modules/mob_spawn/mob_spawn.dm @@ -350,3 +350,14 @@ //don't use this in subtypes, just add 1000 brute yourself. that being said, this is a type that has 1000 brute. it doesn't really have a home anywhere else, it just needs to exist /obj/effect/mob_spawn/corpse/human/damaged brute_damage = 1000 + +/obj/effect/mob_spawn/cockroach + name = "Cockroach Spawner" + desc = "A spawner for cockroaches, the most common vermin in the station. Small chance to spawn a bloodroach." + mob_type = /mob/living/basic/cockroach + var/bloodroach_chance = 1 // 1% chance to spawn a bloodroach + +/obj/effect/mob_spawn/cockroach/Initialize(mapload) + if(prob(bloodroach_chance)) + mob_type = /mob/living/basic/cockroach/bloodroach + return ..() diff --git a/icons/mob/simple/animal.dmi b/icons/mob/simple/animal.dmi index 5c419b03cb8..ed63ab39ad7 100644 Binary files a/icons/mob/simple/animal.dmi and b/icons/mob/simple/animal.dmi differ