From 3440047807a383eadd792bb0af8b74292f90e56d Mon Sep 17 00:00:00 2001 From: NovaBot <154629622+NovaBot13@users.noreply.github.com> Date: Wed, 27 Mar 2024 19:19:28 -0400 Subject: [PATCH] [MIRROR] Simple animal xenos are now basic animal xenos (#1649) * Simple animal xenos are now basic animal xenos * Update living.dm * Update living.dm * Update living.dm * Update Paths Ran * Fix spawners to basic * Update mothership_astrum.dmm --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: SomeRandomOwl <2568378+SomeRandomOwl@users.noreply.github.com> Co-authored-by: SomeRandomOwl --- .../LavaRuins/lavaland_surface_xeno_nest.dmm | 22 +-- .../SpaceRuins/infested_frigate.dmm | 38 ++-- .../SpaceRuins/nova/waypointstation.dmm | 30 +-- _maps/RandomRuins/SpaceRuins/oldstation.dmm | 22 +-- _maps/RandomZLevels/moonoutpost19.dmm | 34 ++-- _maps/RandomZLevels/mothership_astrum.dmm | 26 +-- _maps/shuttles/emergency_bar.dmm | 2 +- _maps/shuttles/emergency_cruise.dmm | 2 +- _maps/shuttles/nova/whiteship_blueshift.dmm | 22 +-- _maps/virtual_domains/xeno_nest.dmm | 16 +- code/__DEFINES/is_helpers.dm | 2 +- .../ai/idle_behaviors/idle_random_walk.dm | 5 +- .../virtual_domain/modular_mob_segment.dm | 6 +- code/modules/mapping/mapping_helpers.dm | 63 ++++++- code/modules/mob/living/basic/alien/_alien.dm | 84 +++++++++ .../mob/living/basic/alien/alien_ai.dm | 73 ++++++++ code/modules/mob/living/basic/alien/drone.dm | 9 + code/modules/mob/living/basic/alien/maid.dm | 60 ++++++ code/modules/mob/living/basic/alien/queen.dm | 40 ++++ .../mob/living/basic/alien/sentinel.dm | 20 ++ .../mob/living/carbon/alien/adult/adult.dm | 5 - code/modules/mob/living/living.dm | 13 +- .../mob/living/simple_animal/hostile/alien.dm | 173 ------------------ code/modules/shuttle/special.dm | 25 --- .../unit_tests/simple_animal_freeze.dm | 7 - icons/effects/mapping_helpers.dmi | Bin 26231 -> 26667 bytes .../modules/tarkon/code/misc_fluff/spawner.dm | 16 +- tgstation.dme | 7 +- .../UpdatePaths/Scripts/82187_basic_xenos.txt | 4 + 29 files changed, 481 insertions(+), 345 deletions(-) create mode 100644 code/modules/mob/living/basic/alien/_alien.dm create mode 100644 code/modules/mob/living/basic/alien/alien_ai.dm create mode 100644 code/modules/mob/living/basic/alien/drone.dm create mode 100644 code/modules/mob/living/basic/alien/maid.dm create mode 100644 code/modules/mob/living/basic/alien/queen.dm create mode 100644 code/modules/mob/living/basic/alien/sentinel.dm delete mode 100644 code/modules/mob/living/simple_animal/hostile/alien.dm create mode 100644 tools/UpdatePaths/Scripts/82187_basic_xenos.txt diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm index 3cf1169c0bb..e7a854d6bde 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm @@ -33,7 +33,7 @@ /area/ruin/unpowered/xenonest) "j" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien, +/mob/living/basic/alien, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/xenonest) "l" = ( @@ -55,7 +55,7 @@ /area/ruin/unpowered/xenonest) "t" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/sentinel, +/mob/living/basic/alien/sentinel, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/xenonest) "u" = ( @@ -103,18 +103,18 @@ /area/ruin/unpowered/xenonest) "E" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/drone{ - plants_off = 1 +/mob/living/basic/alien/drone{ + can_plant_weeds = 0 }, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/xenonest) "F" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/queen/large{ +/mob/living/basic/alien/queen/large{ desc = "A gigantic alien who is in charge of the hive and all of its loyal servants."; name = "alien queen"; pixel_x = -16; - plants_off = 1 + can_plant_weeds = 0 }, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/xenonest) @@ -137,13 +137,13 @@ /area/ruin/unpowered/xenonest) "K" = ( /obj/structure/alien/weeds/node, -/mob/living/simple_animal/hostile/alien, +/mob/living/basic/alien, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/xenonest) "L" = ( /obj/structure/alien/weeds/node, -/mob/living/simple_animal/hostile/alien/drone{ - plants_off = 1 +/mob/living/basic/alien/drone{ + can_plant_weeds = 0 }, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/xenonest) @@ -160,8 +160,8 @@ "Q" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood, -/mob/living/simple_animal/hostile/alien/drone{ - plants_off = 1 +/mob/living/basic/alien/drone{ + can_plant_weeds = 0 }, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/xenonest) diff --git a/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm b/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm index 2e224118ea1..a6a593d8e30 100644 --- a/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm +++ b/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm @@ -1,7 +1,7 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "ab" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien{ +/mob/living/basic/alien{ faction = list("syndicate","xenomorph") }, /turf/open/floor/mineral/plastitanium, @@ -368,7 +368,7 @@ /turf/template_noop, /area/ruin/space/has_grav/infested_frigate) "eE" = ( -/mob/living/simple_animal/hostile/alien{ +/mob/living/basic/alien{ faction = list("syndicate","xenomorph") }, /obj/structure/cable, @@ -430,7 +430,6 @@ /obj/effect/turf_decal/tile/bar, /obj/structure/table/reinforced, /obj/structure/closet/mini_fridge/grimy{ - anchored = 1; pixel_y = 6 }, /obj/effect/spawner/random/food_or_drink/refreshing_beverage, @@ -844,7 +843,7 @@ /turf/open/floor/pod/dark, /area/ruin/space/has_grav/infested_frigate) "nG" = ( -/mob/living/simple_animal/hostile/alien{ +/mob/living/basic/alien{ faction = list("syndicate","xenomorph") }, /turf/open/floor/mineral/plastitanium/red, @@ -1232,7 +1231,7 @@ icon_state = "warningline_red"; dir = 4 }, -/mob/living/simple_animal/hostile/alien{ +/mob/living/basic/alien{ faction = list("syndicate","xenomorph") }, /turf/open/floor/pod/dark, @@ -1327,8 +1326,7 @@ }, /obj/effect/mob_spawn/corpse/human/syndicatecommando/lessenedgear, /obj/structure/bed/nest, -/mob/living/simple_animal/hostile/alien/drone{ - del_on_death = 1; +/mob/living/basic/alien/drone{ loot = list(/obj/effect/gibspawner/xeno); faction = list("syndicate","xenomorph") }, @@ -1387,7 +1385,7 @@ dir = 4 }, /obj/structure/cable, -/mob/living/simple_animal/hostile/alien{ +/mob/living/basic/alien{ faction = list("syndicate","xenomorph") }, /turf/open/floor/mineral/plastitanium, @@ -1475,7 +1473,7 @@ icon_state = "gib1-old" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/mob/living/simple_animal/hostile/alien{ +/mob/living/basic/alien{ faction = list("syndicate","xenomorph") }, /turf/open/floor/mineral/plastitanium/red, @@ -1535,7 +1533,7 @@ /obj/item/ammo_casing/spent, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /obj/structure/cable, -/mob/living/simple_animal/hostile/alien{ +/mob/living/basic/alien{ faction = list("syndicate","xenomorph") }, /turf/open/floor/mineral/plastitanium/red, @@ -1643,7 +1641,7 @@ /obj/effect/mob_spawn/corpse/human/syndicatecommando/lessenedgear, /obj/item/ammo_casing/spent, /obj/item/ammo_casing/spent, -/mob/living/simple_animal/hostile/alien{ +/mob/living/basic/alien{ faction = list("syndicate","xenomorph") }, /turf/open/floor/mineral/titanium/tiled/white, @@ -1941,8 +1939,7 @@ /area/ruin/space/has_grav/infested_frigate) "ER" = ( /obj/structure/cable, -/mob/living/simple_animal/hostile/alien/sentinel{ - del_on_death = 1; +/mob/living/basic/alien/sentinel{ loot = list(/obj/effect/gibspawner/xeno); faction = list("syndicate","xenomorph") }, @@ -1958,7 +1955,7 @@ /obj/effect/decal/cleanable/glass, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/mob/living/simple_animal/hostile/alien{ +/mob/living/basic/alien{ faction = list("syndicate","xenomorph") }, /turf/open/floor/mineral/plastitanium/red, @@ -2050,7 +2047,7 @@ }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/mob/living/simple_animal/hostile/alien{ +/mob/living/basic/alien{ faction = list("syndicate","xenomorph") }, /turf/open/floor/mineral/plastitanium/red, @@ -2077,7 +2074,7 @@ icon_state = "gib1-old" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/mob/living/simple_animal/hostile/alien{ +/mob/living/basic/alien{ faction = list("syndicate","xenomorph") }, /turf/open/floor/mineral/plastitanium, @@ -2098,7 +2095,7 @@ icon_state = "xgibhead"; dir = 4 }, -/mob/living/simple_animal/hostile/alien{ +/mob/living/basic/alien{ faction = list("syndicate","xenomorph") }, /turf/open/floor/mineral/plastitanium, @@ -2201,7 +2198,7 @@ /turf/open/floor/pod/dark, /area/ruin/space/has_grav/infested_frigate) "Jx" = ( -/mob/living/simple_animal/hostile/alien{ +/mob/living/basic/alien{ faction = list("syndicate","xenomorph") }, /turf/open/floor/mineral/plastitanium, @@ -2809,8 +2806,7 @@ /obj/item/shard{ icon_state = "plastitaniumtiny" }, -/mob/living/simple_animal/hostile/alien/queen/large{ - del_on_death = 1; +/mob/living/basic/alien/queen/large{ loot = list(/obj/effect/gibspawner/xeno,/obj/item/ammo_box/magazine/plastikov9mm,/obj/effect/mob_spawn/corpse/human/syndicatecommando/soft_suit); desc = "What you saw in your dreams last night."; faction = list("syndicate","xenomorph") @@ -3086,7 +3082,7 @@ "Yd" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/alien/egg/burst, -/mob/living/simple_animal/hostile/alien{ +/mob/living/basic/alien{ faction = list("syndicate","xenomorph") }, /turf/open/floor/mineral/plastitanium/red, diff --git a/_maps/RandomRuins/SpaceRuins/nova/waypointstation.dmm b/_maps/RandomRuins/SpaceRuins/nova/waypointstation.dmm index 1db27495571..eae8b1f5a76 100644 --- a/_maps/RandomRuins/SpaceRuins/nova/waypointstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/waypointstation.dmm @@ -28,7 +28,7 @@ /turf/open/floor/iron/airless, /area/ruin/space/has_grav/waypoint) "bF" = ( -/mob/living/simple_animal/hostile/alien/queen/large, +/mob/living/basic/alien/queen/large, /obj/structure/alien/weeds, /turf/open/floor/iron/airless, /area/ruin/space/has_grav/waypoint) @@ -52,7 +52,7 @@ /area/ruin/space/has_grav/waypoint) "co" = ( /obj/structure/lattice, -/mob/living/simple_animal/hostile/alien, +/mob/living/basic/alien, /turf/template_noop, /area/ruin) "cV" = ( @@ -67,7 +67,7 @@ /turf/open/floor/carpet/royalblue/airless, /area/ruin/space/has_grav/waypoint) "dz" = ( -/mob/living/simple_animal/hostile/alien, +/mob/living/basic/alien, /turf/open/floor/iron/airless, /area/ruin/space/has_grav/waypoint) "dQ" = ( @@ -140,7 +140,7 @@ /area/ruin) "hE" = ( /obj/effect/decal/cleanable/blood/tracks, -/mob/living/simple_animal/hostile/alien, +/mob/living/basic/alien, /turf/open/floor/iron/airless, /area/ruin/space/has_grav/waypoint) "iu" = ( @@ -175,12 +175,12 @@ /turf/open/floor/carpet/royalblue/airless, /area/ruin/space/has_grav/waypoint) "kR" = ( -/mob/living/simple_animal/hostile/alien/sentinel, +/mob/living/basic/alien/sentinel, /turf/open/floor/iron/airless, /area/ruin/space/has_grav/waypoint) "lf" = ( /obj/effect/decal/cleanable/blood/drip, -/mob/living/simple_animal/hostile/alien, +/mob/living/basic/alien, /turf/open/floor/iron/airless, /area/ruin/space/has_grav/waypoint) "lr" = ( @@ -241,11 +241,11 @@ /turf/open/floor/iron/airless, /area/ruin/space/has_grav/waypoint) "nC" = ( -/mob/living/simple_animal/hostile/alien/drone, +/mob/living/basic/alien/drone, /turf/open/floor/iron/airless, /area/ruin/space/has_grav/waypoint) "nO" = ( -/mob/living/simple_animal/hostile/alien, +/mob/living/basic/alien, /obj/structure/alien/weeds, /turf/open/floor/iron/airless, /area/ruin/space/has_grav/waypoint) @@ -351,7 +351,7 @@ pixel_x = -3; pixel_y = 10 }, -/mob/living/simple_animal/hostile/alien/sentinel, +/mob/living/basic/alien/sentinel, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/waypoint) "sw" = ( @@ -476,7 +476,7 @@ /turf/open/floor/iron/airless, /area/ruin/space/has_grav/waypoint) "zy" = ( -/mob/living/simple_animal/hostile/alien/drone, +/mob/living/basic/alien/drone, /obj/effect/decal/cleanable/xenoblood, /obj/structure/sign/poster/contraband/lusty_xenomorph/directional/east, /turf/open/floor/iron/dark, @@ -499,7 +499,7 @@ /turf/open/floor/carpet/royalblue/airless, /area/ruin/space/has_grav/waypoint) "Af" = ( -/mob/living/simple_animal/hostile/alien/sentinel, +/mob/living/basic/alien/sentinel, /obj/structure/alien/weeds/node, /turf/open/floor/iron/airless, /area/ruin/space/has_grav/waypoint) @@ -517,7 +517,7 @@ /area/ruin/space/has_grav/waypoint) "AG" = ( /obj/effect/decal/cleanable/blood/drip, -/mob/living/simple_animal/hostile/alien/drone, +/mob/living/basic/alien/drone, /turf/open/floor/iron/airless, /area/ruin/space/has_grav/waypoint) "AP" = ( @@ -537,7 +537,7 @@ }, /obj/effect/decal/cleanable/blood/splatter, /obj/machinery/light/small/broken/directional/north, -/mob/living/simple_animal/hostile/alien/sentinel, +/mob/living/basic/alien/sentinel, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/waypoint) "BD" = ( @@ -959,7 +959,7 @@ /obj/item/stack/cable_coil{ pixel_y = -3 }, -/mob/living/simple_animal/hostile/alien/drone, +/mob/living/basic/alien/drone, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/waypoint) "VK" = ( @@ -971,7 +971,7 @@ /turf/open/floor/carpet/royalblue/airless, /area/ruin/space/has_grav/waypoint) "Wg" = ( -/mob/living/simple_animal/hostile/alien/drone, +/mob/living/basic/alien/drone, /turf/open/floor/plating/airless, /area/ruin/space/has_grav/waypoint) "Wu" = ( diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index 890cfb4e146..99b871316f7 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -24,7 +24,7 @@ /area/ruin/space/ancientstation/delta/biolab) "af" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien, +/mob/living/basic/alien, /turf/open/floor/iron/dark, /area/ruin/space/ancientstation/delta/ai) "ag" = ( @@ -47,7 +47,7 @@ /area/ruin/space/ancientstation/charlie/bridge) "ao" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/drone, +/mob/living/basic/alien/drone, /turf/open/floor/iron/dark, /area/ruin/space/ancientstation/delta/ai) "ap" = ( @@ -727,7 +727,7 @@ /area/ruin/space/ancientstation/delta/ai) "de" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/queen, +/mob/living/basic/alien/queen, /turf/open/floor/iron/dark, /area/ruin/space/ancientstation/delta/ai) "df" = ( @@ -1496,7 +1496,7 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm/directional/east, /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/alien/drone, +/mob/living/basic/alien/drone, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) "gE" = ( @@ -1708,7 +1708,7 @@ /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/sec) "hE" = ( -/mob/living/simple_animal/hostile/alien/drone, +/mob/living/basic/alien/drone, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, @@ -2638,7 +2638,7 @@ "lq" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood/gibs/old, -/mob/living/simple_animal/hostile/alien, +/mob/living/basic/alien, /turf/open/floor/iron/dark, /area/ruin/space/ancientstation/delta/ai) "lr" = ( @@ -3234,7 +3234,7 @@ /area/ruin/space/ancientstation/delta/hall) "nN" = ( /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/alien/drone, +/mob/living/basic/alien/drone, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) "nO" = ( @@ -3907,7 +3907,7 @@ /obj/effect/decal/cleanable/blood/tracks{ dir = 1 }, -/mob/living/simple_animal/hostile/alien, +/mob/living/basic/alien, /obj/structure/cable, /obj/machinery/light/broken/directional/east, /turf/open/floor/iron, @@ -4459,7 +4459,7 @@ "wr" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/alien/drone, +/mob/living/basic/alien/drone, /obj/machinery/duct, /obj/machinery/light/broken/directional/south, /turf/open/floor/iron, @@ -4988,7 +4988,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, -/mob/living/simple_animal/hostile/alien/drone, +/mob/living/basic/alien/drone, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 10 }, @@ -6296,7 +6296,7 @@ /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) "JZ" = ( -/mob/living/simple_animal/hostile/alien, +/mob/living/basic/alien, /obj/structure/alien/weeds, /obj/machinery/light/small/broken/directional/west, /turf/open/floor/iron/dark, diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index c64455b1d09..a7850a6fe9d 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -2089,7 +2089,7 @@ /area/awaymission/moonoutpost19/syndicate) "nz" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/sentinel, +/mob/living/basic/alien/sentinel, /turf/open/misc/asteroid/moon{ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, @@ -3088,8 +3088,8 @@ /area/awaymission/moonoutpost19/arrivals) "tN" = ( /obj/structure/alien/weeds/node, -/mob/living/simple_animal/hostile/alien/drone{ - plants_off = 1 +/mob/living/basic/alien/drone{ + can_plant_weeds = 0 }, /turf/open/misc/asteroid/moon{ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" @@ -3223,11 +3223,11 @@ /area/awaymission/moonoutpost19/arrivals) "uH" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/queen/large{ +/mob/living/basic/alien/queen/large{ desc = "A gigantic alien who is in charge of the hive and all of its loyal servants."; name = "alien queen"; pixel_x = -16; - plants_off = 1 + can_plant_weeds = 0 }, /turf/open/misc/asteroid/moon{ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" @@ -4701,7 +4701,7 @@ /area/awaymission/moonoutpost19/research) "EZ" = ( /obj/structure/alien/weeds/node, -/mob/living/simple_animal/hostile/alien, +/mob/living/basic/alien, /turf/open/misc/asteroid/moon{ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, @@ -5015,7 +5015,7 @@ /area/awaymission/moonoutpost19/research) "Ha" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien, +/mob/living/basic/alien, /turf/open/misc/asteroid/moon{ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, @@ -5292,8 +5292,8 @@ "Ja" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood, -/mob/living/simple_animal/hostile/alien/drone{ - plants_off = 1 +/mob/living/basic/alien/drone{ + can_plant_weeds = 0 }, /turf/open/misc/asteroid/moon{ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" @@ -5370,8 +5370,8 @@ /area/awaymission/moonoutpost19/research) "Jw" = ( /obj/structure/alien/weeds/node, -/mob/living/simple_animal/hostile/alien/drone{ - plants_off = 1 +/mob/living/basic/alien/drone{ + can_plant_weeds = 0 }, /turf/open/misc/asteroid/moon{ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" @@ -5504,8 +5504,8 @@ /area/awaymission/moonoutpost19/research) "KA" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/drone{ - plants_off = 1 +/mob/living/basic/alien/drone{ + can_plant_weeds = 0 }, /turf/open/misc/asteroid/moon{ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" @@ -5950,8 +5950,8 @@ }, /area/awaymission/moonoutpost19/arrivals) "NU" = ( -/mob/living/simple_animal/hostile/alien/drone{ - plants_off = 1 +/mob/living/basic/alien/drone{ + can_plant_weeds = 0 }, /turf/open/misc/asteroid/moon{ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" @@ -7011,8 +7011,8 @@ /area/awaymission/moonoutpost19/research) "UI" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/drone{ - plants_off = 1 +/mob/living/basic/alien/drone{ + can_plant_weeds = 0 }, /turf/open/misc/asteroid/moon{ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" diff --git a/_maps/RandomZLevels/mothership_astrum.dmm b/_maps/RandomZLevels/mothership_astrum.dmm index b734d2885eb..f3ec7530560 100644 --- a/_maps/RandomZLevels/mothership_astrum.dmm +++ b/_maps/RandomZLevels/mothership_astrum.dmm @@ -192,7 +192,7 @@ /area/awaymission/mothership_astrum/deck4) "dk" = ( /obj/structure/alien/weeds/creature, -/mob/living/simple_animal/hostile/alien/sentinel{ +/mob/living/basic/alien/sentinel{ faction = list("Abductor") }, /turf/open/floor/plating/abductor2, @@ -204,7 +204,7 @@ /area/awaymission/mothership_astrum/deck4) "dG" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/sentinel{ +/mob/living/basic/alien/sentinel{ faction = list("Abductor") }, /turf/open/floor/plating/abductor2, @@ -475,9 +475,8 @@ /area/awaymission/mothership_astrum/halls) "iF" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/drone{ +/mob/living/basic/alien/drone{ faction = list("Abductor"); - plants_off = 1 }, /turf/open/floor/plating/abductor2, /area/awaymission/mothership_astrum/deck4) @@ -496,9 +495,8 @@ /area/awaymission/mothership_astrum/halls) "iS" = ( /obj/structure/alien/weeds/creature, -/mob/living/simple_animal/hostile/alien/drone{ +/mob/living/basic/alien/drone{ faction = list("Abductor"); - plants_off = 1 }, /turf/open/floor/plating/abductor2, /area/awaymission/mothership_astrum/deck4) @@ -556,7 +554,7 @@ }, /area/awaymission/mothership_astrum/deck5) "jH" = ( -/mob/living/simple_animal/hostile/alien/sentinel{ +/mob/living/basic/alien/sentinel{ faction = list("Abductor") }, /obj/structure/alien/weeds, @@ -921,9 +919,8 @@ /turf/open/floor/plating/abductor, /area/awaymission/mothership_astrum/halls) "pz" = ( -/mob/living/simple_animal/hostile/alien/drone{ +/mob/living/basic/alien/drone{ faction = list("Abductor"); - plants_off = 1 }, /turf/open/floor/mineral/abductor, /area/awaymission/mothership_astrum/halls) @@ -2512,9 +2509,8 @@ /area/awaymission/mothership_astrum/halls) "LT" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/drone{ +/mob/living/basic/alien/drone{ faction = list("Abductor"); - plants_off = 1 }, /turf/open/floor/mineral/abductor, /area/awaymission/mothership_astrum/halls) @@ -2892,9 +2888,8 @@ /turf/open/floor/plating/abductor2, /area/awaymission/mothership_astrum/halls) "PI" = ( -/mob/living/simple_animal/hostile/alien/drone{ +/mob/living/basic/alien/drone{ faction = list("Abductor"); - plants_off = 1 }, /obj/structure/alien/weeds, /turf/open/floor/mineral/abductor, @@ -3090,7 +3085,7 @@ /area/awaymission/mothership_astrum/deck2) "RJ" = ( /obj/structure/alien/weeds/creature, -/mob/living/simple_animal/hostile/alien/queen/large{ +/mob/living/basic/alien/queen/large{ faction = list("Abductor") }, /turf/open/floor/plating/abductor2, @@ -3105,9 +3100,8 @@ /turf/open/floor/iron, /area/awaymission/mothership_astrum/deck2) "Se" = ( -/mob/living/simple_animal/hostile/alien/drone{ +/mob/living/basic/alien/drone{ faction = list("Abductor"); - plants_off = 1 }, /turf/open/floor/plating/abductor2, /area/awaymission/mothership_astrum/halls) diff --git a/_maps/shuttles/emergency_bar.dmm b/_maps/shuttles/emergency_bar.dmm index e547390ded9..848f487020f 100644 --- a/_maps/shuttles/emergency_bar.dmm +++ b/_maps/shuttles/emergency_bar.dmm @@ -230,7 +230,7 @@ /turf/open/floor/iron, /area/shuttle/escape) "aU" = ( -/mob/living/simple_animal/hostile/alien/maid/barmaid, +/mob/living/basic/alien/maid/barmaid, /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/shuttle/escape) diff --git a/_maps/shuttles/emergency_cruise.dmm b/_maps/shuttles/emergency_cruise.dmm index aa4364858e1..81328a07751 100644 --- a/_maps/shuttles/emergency_cruise.dmm +++ b/_maps/shuttles/emergency_cruise.dmm @@ -955,7 +955,7 @@ /turf/open/floor/iron/dark, /area/shuttle/escape) "uu" = ( -/mob/living/simple_animal/hostile/alien/maid/barmaid, +/mob/living/basic/alien/maid/barmaid, /turf/open/floor/wood/parquet, /area/shuttle/escape) "uy" = ( diff --git a/_maps/shuttles/nova/whiteship_blueshift.dmm b/_maps/shuttles/nova/whiteship_blueshift.dmm index 58d0ff34ac6..edf554f60bc 100644 --- a/_maps/shuttles/nova/whiteship_blueshift.dmm +++ b/_maps/shuttles/nova/whiteship_blueshift.dmm @@ -470,7 +470,7 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/drone, +/mob/living/basic/alien/drone, /obj/machinery/duct, /turf/open/floor/iron, /area/shuttle/abandoned/crew) @@ -494,7 +494,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/maid/barmaid, +/mob/living/basic/alien/maid/barmaid, /turf/open/floor/iron/dark, /area/shuttle/abandoned/bar) "fq" = ( @@ -1406,7 +1406,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/alien/sentinel, +/mob/living/basic/alien/sentinel, /turf/open/floor/iron/dark, /area/shuttle/abandoned/cargo) "ne" = ( @@ -1654,7 +1654,7 @@ dir = 8 }, /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/sentinel, +/mob/living/basic/alien/sentinel, /turf/open/floor/iron, /area/shuttle/abandoned/bridge) "pl" = ( @@ -2298,7 +2298,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/structure/alien/weeds/node, -/mob/living/simple_animal/hostile/alien/sentinel, +/mob/living/basic/alien/sentinel, /turf/open/floor/plating, /area/shuttle/abandoned/engine) "vh" = ( @@ -2850,7 +2850,7 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden, /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien, +/mob/living/basic/alien, /obj/structure/cable, /turf/open/floor/iron, /area/shuttle/abandoned/crew) @@ -3446,7 +3446,7 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien, +/mob/living/basic/alien, /obj/machinery/duct, /turf/open/floor/iron, /area/shuttle/abandoned/medbay) @@ -3574,7 +3574,7 @@ "Ir" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/alien/weeds/node, -/mob/living/simple_animal/hostile/alien, +/mob/living/basic/alien, /turf/open/floor/iron/cafeteria, /area/shuttle/abandoned/crew) "Iy" = ( @@ -4639,7 +4639,7 @@ dir = 4 }, /obj/structure/alien/weeds/node, -/mob/living/simple_animal/hostile/alien/drone, +/mob/living/basic/alien/drone, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden, /turf/open/floor/iron/dark, @@ -5144,7 +5144,7 @@ dir = 4 }, /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/drone, +/mob/living/basic/alien/drone, /turf/open/floor/iron, /area/shuttle/abandoned/engine) "WP" = ( @@ -5520,7 +5520,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/mob/living/simple_animal/hostile/alien/queen/large, +/mob/living/basic/alien/queen/large, /turf/open/floor/iron/dark, /area/shuttle/abandoned/cargo) "ZN" = ( diff --git a/_maps/virtual_domains/xeno_nest.dmm b/_maps/virtual_domains/xeno_nest.dmm index 5d2952a5b1a..a80fe0ea149 100644 --- a/_maps/virtual_domains/xeno_nest.dmm +++ b/_maps/virtual_domains/xeno_nest.dmm @@ -66,8 +66,8 @@ /area/ruin/space/has_grav/powered/virtual_domain) "p" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/drone{ - plants_off = 1 +/mob/living/basic/alien/drone{ + can_plant_weeds = 0 }, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/space/has_grav/powered/virtual_domain) @@ -81,8 +81,8 @@ /area/virtual_domain/safehouse) "s" = ( /obj/structure/alien/weeds/node, -/mob/living/simple_animal/hostile/alien/drone{ - plants_off = 1 +/mob/living/basic/alien/drone{ + can_plant_weeds = 0 }, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/space/has_grav/powered/virtual_domain) @@ -175,11 +175,11 @@ /area/ruin/space/has_grav/powered/virtual_domain) "J" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/queen/large{ +/mob/living/basic/alien/queen/large{ desc = "A gigantic alien who is in charge of the hive and all of its loyal servants."; name = "alien queen"; pixel_x = -16; - plants_off = 1 + can_plant_weeds = 0 }, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/space/has_grav/powered/virtual_domain) @@ -218,7 +218,7 @@ /area/ruin/space/has_grav/powered/virtual_domain) "P" = ( /obj/structure/alien/weeds/node, -/mob/living/simple_animal/hostile/alien, +/mob/living/basic/alien, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/space/has_grav/powered/virtual_domain) "Q" = ( @@ -228,7 +228,7 @@ /area/ruin/space/has_grav/powered/virtual_domain) "S" = ( /obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien, +/mob/living/basic/alien, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/space/has_grav/powered/virtual_domain) "T" = ( diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 8271bb725d1..91c5c03b74f 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -123,7 +123,7 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( #define islarva(A) (istype(A, /mob/living/carbon/alien/larva)) -#define isalienadult(A) (istype(A, /mob/living/carbon/alien/adult) || istype(A, /mob/living/simple_animal/hostile/alien)) +#define isalienadult(A) (istype(A, /mob/living/carbon/alien/adult) || istype(A, /mob/living/basic/alien)) #define isalienhunter(A) (istype(A, /mob/living/carbon/alien/adult/hunter)) diff --git a/code/datums/ai/idle_behaviors/idle_random_walk.dm b/code/datums/ai/idle_behaviors/idle_random_walk.dm index 8924da5c30b..c27caa50072 100644 --- a/code/datums/ai/idle_behaviors/idle_random_walk.dm +++ b/code/datums/ai/idle_behaviors/idle_random_walk.dm @@ -6,14 +6,15 @@ . = ..() var/mob/living/living_pawn = controller.pawn if(LAZYLEN(living_pawn.do_afters)) - return + return FALSE if(SPT_PROB(walk_chance, seconds_per_tick) && (living_pawn.mobility_flags & MOBILITY_MOVE) && isturf(living_pawn.loc) && !living_pawn.pulledby) var/move_dir = pick(GLOB.alldirs) var/turf/destination_turf = get_step(living_pawn, move_dir) if(!destination_turf?.can_cross_safely(living_pawn)) - return + return FALSE living_pawn.Move(destination_turf, move_dir) + return TRUE /datum/idle_behavior/idle_random_walk/less_walking walk_chance = 10 diff --git a/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm b/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm index ab691274bc5..c0e017a0b9f 100644 --- a/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm +++ b/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm @@ -151,9 +151,9 @@ /datum/modular_mob_segment/xenos mobs = list( - /mob/living/simple_animal/hostile/alien, - /mob/living/simple_animal/hostile/alien/sentinel, - /mob/living/simple_animal/hostile/alien/drone, + /mob/living/basic/alien, + /mob/living/basic/alien/sentinel, + /mob/living/basic/alien/drone, ) #undef SPAWN_ALWAYS diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index faaaf9e4206..e601256a8b6 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -1414,13 +1414,68 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) continue if(isliving(possible_buckle)) - mobs += possible_buckle - + mobs += possible_buckle + if(isnull(buckle_to)) log_mapping("[type] at [x] [y] [z] did not find anything to buckle to") return INITIALIZE_HINT_QDEL - + for(var/mob/living/mob as anything in mobs) buckle_to.buckle_mob(mob, force = force_buckle) - + return INITIALIZE_HINT_QDEL + +///Basic mob flag helpers for things like deleting on death. +/obj/effect/mapping_helpers/basic_mob_flags + name = "Basic mob flags helper" + desc = "Used to apply basic_mob_flags to basic mobs on the same turf." + late = TRUE + + ///The basic mob flag that we're adding to all basic mobs on the turf. + var/flag_to_give + +/obj/effect/mapping_helpers/basic_mob_flags/Initialize(mapload) + . = ..() + if(!mapload) + log_mapping("[src] spawned outside of mapload!") + return INITIALIZE_HINT_QDEL + +/obj/effect/mapping_helpers/basic_mob_flags/LateInitialize() + . = ..() + var/had_any_mobs = FALSE + for(var/mob/living/basic/basic_mobs in loc) + had_any_mobs = TRUE + basic_mobs.basic_mob_flags |= flag_to_give + if(!had_any_mobs) + CRASH("[src] called on a turf without any basic mobs.") + qdel(src) + +/obj/effect/mapping_helpers/basic_mob_flags/del_on_death + name = "Basic mob del on death flag helper" + icon_state = "basic_mob_del_on_death" + flag_to_give = DEL_ON_DEATH + +/obj/effect/mapping_helpers/basic_mob_flags/flip_on_death + name = "Basic mob flip on death flag helper" + icon_state = "basic_mob_flip_on_death" + flag_to_give = FLIP_ON_DEATH + +/obj/effect/mapping_helpers/basic_mob_flags/remain_dense_while_dead + name = "Basic mob remain dense while dead flag helper" + icon_state = "basic_mob_remain_dense_while_dead" + flag_to_give = REMAIN_DENSE_WHILE_DEAD + +/obj/effect/mapping_helpers/basic_mob_flags/flammable_mob + name = "Basic mob flammable flag helper" + icon_state = "basic_mob_flammable" + flag_to_give = FLAMMABLE_MOB + +/obj/effect/mapping_helpers/basic_mob_flags/immune_to_fists + name = "Basic mob immune to fists flag helper" + icon_state = "basic_mob_immune_to_fists" + flag_to_give = IMMUNE_TO_FISTS + +/obj/effect/mapping_helpers/basic_mob_flags/immune_to_getting_wet + name = "Basic mob immune to getting wet flag helper" + icon_state = "basic_mob_immune_to_getting_wet" + flag_to_give = IMMUNE_TO_GETTING_WET diff --git a/code/modules/mob/living/basic/alien/_alien.dm b/code/modules/mob/living/basic/alien/_alien.dm new file mode 100644 index 00000000000..d809e7c292f --- /dev/null +++ b/code/modules/mob/living/basic/alien/_alien.dm @@ -0,0 +1,84 @@ +/mob/living/basic/alien + name = "alien hunter" + desc = "Hiss!" + icon = 'icons/mob/nonhuman-player/alien.dmi' + icon_state = "alienh" + icon_living = "alienh" + icon_dead = "alienh_dead" + icon_gib = "syndicate_gib" + gender = FEMALE + status_flags = CANPUSH + butcher_results = list( + /obj/item/food/meat/slab/xeno = 4, + /obj/item/stack/sheet/animalhide/xeno = 1, + ) + + maxHealth = 125 + health = 125 + bubble_icon = "alien" + combat_mode = TRUE + faction = list(ROLE_ALIEN) + + // Going for a dark purple here + lighting_cutoff_red = 30 + lighting_cutoff_green = 15 + lighting_cutoff_blue = 50 + unique_name = TRUE + + basic_mob_flags = FLAMMABLE_MOB + speed = 0 + obj_damage = 60 + + speak_emote = list("hisses") + melee_damage_lower = 25 + melee_damage_upper = 25 + attack_verb_continuous = "slashes" + attack_verb_simple = "slash" + + attack_sound = 'sound/weapons/bladeslice.ogg' + attack_vis_effect = ATTACK_EFFECT_CLAW + gold_core_spawnable = NO_SPAWN + death_sound = 'sound/voice/hiss6.ogg' + death_message = "lets out a waning guttural screech, green blood bubbling from its maw..." + + habitable_atmos = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + unsuitable_atmos_damage = FALSE + unsuitable_heat_damage = 20 + + ai_controller = /datum/ai_controller/basic_controller/alien + + ///List of loot items to drop when deleted, if this is set then we apply DEL_ON_DEATH + var/list/loot + ///Boolean on whether the xeno can plant weeds. + var/can_plant_weeds = TRUE + ///Boolean on whether the xeno can lay eggs. + var/can_lay_eggs = FALSE + +/mob/living/basic/alien/Initialize(mapload) + . = ..() + if(length(loot)) + basic_mob_flags |= DEL_ON_DEATH + loot = string_list(loot) + AddElement(/datum/element/death_drops, loot) + AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_CLAW) + +/mob/living/basic/alien/get_butt_sprite() + return BUTT_SPRITE_XENOMORPH + +///Places alien weeds on the turf the mob is currently standing on. +/mob/living/basic/alien/proc/place_weeds() + if(!isturf(loc) || isspaceturf(loc)) + return + if(locate(/obj/structure/alien/weeds/node) in get_turf(src)) + return + visible_message(span_alertalien("[src] plants some alien weeds!")) + new /obj/structure/alien/weeds/node(loc) + +///Lays an egg on the turf the mob is currently standing on. +/mob/living/basic/alien/proc/lay_alien_egg() + if(!isturf(loc) || isspaceturf(loc)) + return + if(locate(/obj/structure/alien/egg) in get_turf(src)) + return + visible_message(span_alertalien("[src] lays an egg!")) + new /obj/structure/alien/egg(loc) diff --git a/code/modules/mob/living/basic/alien/alien_ai.dm b/code/modules/mob/living/basic/alien/alien_ai.dm new file mode 100644 index 00000000000..a06ec4ea943 --- /dev/null +++ b/code/modules/mob/living/basic/alien/alien_ai.dm @@ -0,0 +1,73 @@ +/datum/ai_controller/basic_controller/alien + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/attack_obstacle_in_path, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) + + movement_delay = 0.8 SECONDS + +/datum/ai_controller/basic_controller/alien/sentinel + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/attack_obstacle_in_path, + /datum/ai_planning_subtree/basic_ranged_attack_subtree/alien, + ) + +/datum/ai_controller/basic_controller/alien/drone + idle_behavior = /datum/idle_behavior/idle_random_walk/plant_weeds + +/datum/ai_controller/basic_controller/alien/queen + idle_behavior = /datum/idle_behavior/idle_random_walk/plant_weeds/queen + + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/attack_obstacle_in_path, + /datum/ai_planning_subtree/basic_ranged_attack_subtree/alien, + ) + +/** + * Alien projectile + * Try to avoid friendly fire, and has a 3 second delay. + */ +/datum/ai_planning_subtree/basic_ranged_attack_subtree/alien + ranged_attack_behavior = /datum/ai_behavior/basic_ranged_attack/alien + +/datum/ai_behavior/basic_ranged_attack/alien + action_cooldown = 3 SECONDS + required_distance = 3 + avoid_friendly_fire = TRUE + +/datum/idle_behavior/idle_random_walk/plant_weeds + var/plant_cooldown = 30 + var/plants_off = 0 + +/datum/idle_behavior/idle_random_walk/plant_weeds/perform_idle_behavior(seconds_per_tick, datum/ai_controller/controller) + . = ..() + if(!.) + return . + plant_cooldown-- + var/mob/living/basic/alien/alien_pawn = controller.pawn + if(alien_pawn.can_plant_weeds && !plants_off && plant_cooldown <= 0) + plant_cooldown = initial(plant_cooldown) + alien_pawn.place_weeds() + +/datum/idle_behavior/idle_random_walk/plant_weeds/queen + var/eggs_off = 0 + var/egg_cooldown = 30 + +/datum/idle_behavior/idle_random_walk/plant_weeds/queen/perform_idle_behavior(seconds_per_tick, datum/ai_controller/controller) + . = ..() + if(!.) + return . + egg_cooldown-- + var/mob/living/basic/alien/alien_pawn = controller.pawn + if(alien_pawn.can_lay_eggs && !eggs_off && egg_cooldown <= 0) + egg_cooldown = initial(egg_cooldown) + alien_pawn.lay_alien_egg() diff --git a/code/modules/mob/living/basic/alien/drone.dm b/code/modules/mob/living/basic/alien/drone.dm new file mode 100644 index 00000000000..80c4c61dddc --- /dev/null +++ b/code/modules/mob/living/basic/alien/drone.dm @@ -0,0 +1,9 @@ +/mob/living/basic/alien/drone + name = "alien drone" + icon_state = "aliend" + icon_living = "aliend" + icon_dead = "aliend_dead" + melee_damage_lower = 15 + melee_damage_upper = 15 + + ai_controller = /datum/ai_controller/basic_controller/alien/drone diff --git a/code/modules/mob/living/basic/alien/maid.dm b/code/modules/mob/living/basic/alien/maid.dm new file mode 100644 index 00000000000..decfe5736ce --- /dev/null +++ b/code/modules/mob/living/basic/alien/maid.dm @@ -0,0 +1,60 @@ +/mob/living/basic/alien/maid + name = "lusty xenomorph maid" + melee_damage_lower = 0 + melee_damage_upper = 0 + combat_mode = FALSE + friendly_verb_continuous = "caresses" + friendly_verb_simple = "caress" + obj_damage = 0 + environment_smash = ENVIRONMENT_SMASH_NONE + gold_core_spawnable = HOSTILE_SPAWN + icon_state = "maid" + icon_living = "maid" + icon_dead = "maid_dead" + +/mob/living/basic/alien/maid/Initialize(mapload) + . = ..() + AddElement(/datum/element/cleaning) + RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) + +///Handles the maid attacking other players, cancelling the attack to clean up instead. +/mob/living/basic/alien/maid/proc/pre_attack(mob/living/puncher, atom/target) + SIGNAL_HANDLER + target.wash(CLEAN_SCRUB) + if(istype(target, /obj/effect/decal/cleanable)) + visible_message(span_notice("[src] cleans up \the [target].")) + else + visible_message(span_notice("[src] polishes \the [target].")) + return COMPONENT_HOSTILE_NO_ATTACK + +/** + * Barmaid special type + * Spawns on emergency shuttles, has access to them and godmode while inside of them. + */ +/mob/living/basic/alien/maid/barmaid + gold_core_spawnable = NO_SPAWN + name = "Barmaid" + desc = "A barmaid, a maiden found in a bar." + pass_flags = PASSTABLE + unique_name = FALSE + initial_language_holder = /datum/language_holder/universal + + ai_controller = null //they don't have their own AI and can uniquely only be controlled by players. + + ///The access card we use to store access to the emergency shuttle. + var/obj/item/card/id/access_card + +/mob/living/basic/alien/maid/barmaid/Initialize(mapload) + . = ..() + // Simple bot ID card that can hold all accesses. Someone turn access into a component at some point, please. + access_card = new /obj/item/card/id/advanced/simple_bot(src) + + var/datum/id_trim/job/cap_trim = SSid_access.trim_singletons_by_path[/datum/id_trim/job/captain] + access_card.add_access(cap_trim.access + cap_trim.wildcard_access + list(ACCESS_CENT_BAR)) + + ADD_TRAIT(access_card, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) + AddComponentFrom(ROUNDSTART_TRAIT, /datum/component/area_based_godmode, area_type = /area/shuttle/escape, allow_area_subtypes = TRUE) + +/mob/living/basic/alien/maid/barmaid/Destroy() + QDEL_NULL(access_card) + return ..() diff --git a/code/modules/mob/living/basic/alien/queen.dm b/code/modules/mob/living/basic/alien/queen.dm new file mode 100644 index 00000000000..f2d787743a2 --- /dev/null +++ b/code/modules/mob/living/basic/alien/queen.dm @@ -0,0 +1,40 @@ +/mob/living/basic/alien/queen + name = "alien queen" + icon_state = "alienq" + icon_living = "alienq" + icon_dead = "alienq_dead" + health = 250 + maxHealth = 250 + melee_damage_lower = 15 + melee_damage_upper = 15 + status_flags = NONE //can't shove the queen, kiddo. + unique_name = FALSE + + ai_controller = /datum/ai_controller/basic_controller/alien/queen + + ///The type of projectile that fires from attacks. + var/projectiletype = /obj/projectile/neurotoxin/damaging + ///The sound that plays when the projectile is fired. + var/projectilesound = 'sound/weapons/pierce.ogg' + +/mob/living/basic/alien/queen/Initialize(mapload) + . = ..() + AddComponent(/datum/component/ranged_attacks, projectile_type = projectiletype, projectile_sound = projectilesound, cooldown_time = 1 SECONDS) + +/mob/living/basic/alien/queen/large + name = "alien empress" + icon = 'icons/mob/nonhuman-player/alienqueen.dmi' + icon_state = "alienq" + icon_living = "alienq" + icon_dead = "alienq_dead" + health_doll_icon = "alienq" + bubble_icon = "alienroyal" + maxHealth = 400 + health = 400 + butcher_results = list( + /obj/item/food/meat/slab/xeno = 10, + /obj/item/stack/sheet/animalhide/xeno = 2, + ) + mob_size = MOB_SIZE_LARGE + gold_core_spawnable = NO_SPAWN + diff --git a/code/modules/mob/living/basic/alien/sentinel.dm b/code/modules/mob/living/basic/alien/sentinel.dm new file mode 100644 index 00000000000..8f5ae815c5f --- /dev/null +++ b/code/modules/mob/living/basic/alien/sentinel.dm @@ -0,0 +1,20 @@ +/mob/living/basic/alien/sentinel + name = "alien sentinel" + icon_state = "aliens" + icon_living = "aliens" + icon_dead = "aliens_dead" + health = 150 + maxHealth = 150 + melee_damage_lower = 15 + melee_damage_upper = 15 + + ai_controller = /datum/ai_controller/basic_controller/alien/sentinel + + ///The type of projectile that fires from attacks. + var/projectiletype = /obj/projectile/neurotoxin/damaging + ///The sound that plays when the projectile is fired. + var/projectilesound = 'sound/weapons/pierce.ogg' + +/mob/living/basic/alien/sentinel/Initialize(mapload) + . = ..() + AddComponent(/datum/component/ranged_attacks, projectile_type = projectiletype, projectile_sound = projectilesound, cooldown_time = 1 SECONDS) diff --git a/code/modules/mob/living/carbon/alien/adult/adult.dm b/code/modules/mob/living/carbon/alien/adult/adult.dm index bbacffd4f6f..d2ee7432b3c 100644 --- a/code/modules/mob/living/carbon/alien/adult/adult.dm +++ b/code/modules/mob/living/carbon/alien/adult/adult.dm @@ -69,11 +69,6 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list( playsound(get_turf(src), pick('sound/voice/lowHiss2.ogg', 'sound/voice/lowHiss3.ogg', 'sound/voice/lowHiss4.ogg'), 50, FALSE, -5) return ..() -/mob/living/carbon/alien/adult/set_name() - if(numba) - name = "[name] ([numba])" - real_name = name - /mob/living/carbon/alien/adult/setGrabState(newstate) if(newstate == grab_state) return diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 82d64732bc2..e1927ccbec5 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1528,7 +1528,7 @@ else picked_xeno_type = pick( /mob/living/carbon/alien/adult/hunter, - /mob/living/simple_animal/hostile/alien/sentinel, + /mob/living/basic/alien/sentinel, ) new_mob = new picked_xeno_type(loc) @@ -1863,8 +1863,12 @@ GLOBAL_LIST_EMPTY(fire_appearances) if(isliving(dropping)) var/mob/living/M = dropping if(M.can_be_held && U.pulling == M) - return M.mob_try_pickup(U) //NOVA EDIT CHANGE //blame kevinz dont open the mobs inventory if you are picking them up - . = ..() + return M.mob_try_pickup(U) //NOVA EDIT CHANGE - Original: + /* + M.mob_try_pickup(U)//blame kevinz + return//dont open the mobs inventory if you are picking them up + */ + return ..() /mob/living/proc/mob_pickup(mob/living/user) var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, held_state, head_icon, held_lh, held_rh, worn_slot_flags) @@ -1872,7 +1876,8 @@ GLOBAL_LIST_EMPTY(fire_appearances) user.put_in_hands(holder) /mob/living/proc/set_name() - numba = rand(1, 1000) + if(!numba) + numba = rand(1, 1000) name = "[name] ([numba])" real_name = name diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm deleted file mode 100644 index 8ce6d28f2ab..00000000000 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ /dev/null @@ -1,173 +0,0 @@ -/mob/living/simple_animal/hostile/alien - name = "alien hunter" - desc = "Hiss!" - icon = 'icons/mob/nonhuman-player/alien.dmi' - icon_state = "alienh" - icon_living = "alienh" - icon_dead = "alienh_dead" - icon_gib = "syndicate_gib" - gender = FEMALE - speed = 0 - butcher_results = list(/obj/item/food/meat/slab/xeno = 4, - /obj/item/stack/sheet/animalhide/xeno = 1) - maxHealth = 125 - health = 125 - harm_intent_damage = 5 - obj_damage = 60 - melee_damage_lower = 25 - melee_damage_upper = 25 - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - speak_emote = list("hisses") - bubble_icon = "alien" - combat_mode = TRUE - attack_sound = 'sound/weapons/bladeslice.ogg' - attack_vis_effect = ATTACK_EFFECT_CLAW - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - faction = list(ROLE_ALIEN) - status_flags = CANPUSH - minbodytemp = 0 - unsuitable_heat_damage = 20 - // Going for a dark purple here - lighting_cutoff_red = 30 - lighting_cutoff_green = 15 - lighting_cutoff_blue = 50 - unique_name = TRUE - gold_core_spawnable = NO_SPAWN - death_sound = 'sound/voice/hiss6.ogg' - death_message = "lets out a waning guttural screech, green blood bubbling from its maw..." - footstep_type = FOOTSTEP_MOB_CLAW - -/mob/living/simple_animal/hostile/alien/drone - name = "alien drone" - icon_state = "aliend" - icon_living = "aliend" - icon_dead = "aliend_dead" - melee_damage_lower = 15 - melee_damage_upper = 15 - var/plant_cooldown = 30 - var/plants_off = 0 - -/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) - plant_cooldown = initial(plant_cooldown) - SpreadPlants() - -/mob/living/simple_animal/hostile/alien/sentinel - name = "alien sentinel" - icon_state = "aliens" - icon_living = "aliens" - icon_dead = "aliens_dead" - health = 150 - maxHealth = 150 - melee_damage_lower = 15 - melee_damage_upper = 15 - ranged = 1 - retreat_distance = 5 - minimum_distance = 5 - projectiletype = /obj/projectile/neurotoxin/damaging - projectilesound = 'sound/weapons/pierce.ogg' - - -/mob/living/simple_animal/hostile/alien/queen - name = "alien queen" - icon_state = "alienq" - icon_living = "alienq" - icon_dead = "alienq_dead" - health = 250 - maxHealth = 250 - melee_damage_lower = 15 - melee_damage_upper = 15 - ranged = 1 - retreat_distance = 5 - minimum_distance = 5 - move_to_delay = 4 - butcher_results = list(/obj/item/food/meat/slab/xeno = 4, - /obj/item/stack/sheet/animalhide/xeno = 1) - projectiletype = /obj/projectile/neurotoxin/damaging - projectilesound = 'sound/weapons/pierce.ogg' - status_flags = 0 - unique_name = FALSE - var/sterile = 1 - var/plants_off = 0 - var/egg_cooldown = 30 - var/plant_cooldown = 30 - -/mob/living/simple_animal/hostile/alien/queen/handle_automated_action() - if(!..()) //AIStatus is off - return - egg_cooldown-- - plant_cooldown-- - if(AIStatus == AI_IDLE) - if(!plants_off && prob(10) && plant_cooldown <= 0) - plant_cooldown = initial(plant_cooldown) - SpreadPlants() - if(!sterile && prob(10) && egg_cooldown <= 0) - egg_cooldown = initial(egg_cooldown) - LayEggs() - -/mob/living/simple_animal/hostile/alien/get_butt_sprite() - return BUTT_SPRITE_XENOMORPH - -/mob/living/simple_animal/hostile/alien/proc/SpreadPlants() - if(!isturf(loc) || isspaceturf(loc)) - return - if(locate(/obj/structure/alien/weeds/node) in get_turf(src)) - return - visible_message(span_alertalien("[src] plants some alien weeds!")) - new /obj/structure/alien/weeds/node(loc) - -/mob/living/simple_animal/hostile/alien/proc/LayEggs() - if(!isturf(loc) || isspaceturf(loc)) - return - if(locate(/obj/structure/alien/egg) in get_turf(src)) - return - visible_message(span_alertalien("[src] lays an egg!")) - new /obj/structure/alien/egg(loc) - -/mob/living/simple_animal/hostile/alien/queen/large - name = "alien empress" - icon = 'icons/mob/nonhuman-player/alienqueen.dmi' - icon_state = "alienq" - icon_living = "alienq" - icon_dead = "alienq_dead" - health_doll_icon = "alienq" - bubble_icon = "alienroyal" - move_to_delay = 4 - maxHealth = 400 - health = 400 - butcher_results = list(/obj/item/food/meat/slab/xeno = 10, - /obj/item/stack/sheet/animalhide/xeno = 2) - mob_size = MOB_SIZE_LARGE - gold_core_spawnable = NO_SPAWN - -/mob/living/simple_animal/hostile/alien/maid - name = "lusty xenomorph maid" - melee_damage_lower = 0 - melee_damage_upper = 0 - combat_mode = FALSE - friendly_verb_continuous = "caresses" - friendly_verb_simple = "caress" - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - gold_core_spawnable = HOSTILE_SPAWN - icon_state = "maid" - icon_living = "maid" - icon_dead = "maid_dead" - -/mob/living/simple_animal/hostile/alien/maid/Initialize(mapload) - . = ..() - AddElement(/datum/element/cleaning) - -/mob/living/simple_animal/hostile/alien/maid/AttackingTarget(atom/attacked_target) - if(ismovable(target)) - target.wash(CLEAN_SCRUB) - if(istype(target, /obj/effect/decal/cleanable)) - visible_message(span_notice("[src] cleans up \the [target].")) - else - visible_message(span_notice("[src] polishes \the [target].")) - return TRUE diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 13f3c5fdf30..0617b9696a7 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -167,31 +167,6 @@ . = ..() AddComponentFrom(ROUNDSTART_TRAIT, /datum/component/area_based_godmode, area_type = /area/shuttle/escape, allow_area_subtypes = TRUE) -/mob/living/simple_animal/hostile/alien/maid/barmaid - gold_core_spawnable = NO_SPAWN - name = "Barmaid" - desc = "A barmaid, a maiden found in a bar." - pass_flags = PASSTABLE - unique_name = FALSE - AIStatus = AI_OFF - stop_automated_movement = TRUE - initial_language_holder = /datum/language_holder/universal - -/mob/living/simple_animal/hostile/alien/maid/barmaid/Initialize(mapload) - . = ..() - // Simple bot ID card that can hold all accesses. Someone turn access into a component at some point, please. - access_card = new /obj/item/card/id/advanced/simple_bot(src) - - var/datum/id_trim/job/cap_trim = SSid_access.trim_singletons_by_path[/datum/id_trim/job/captain] - access_card.add_access(cap_trim.access + cap_trim.wildcard_access + list(ACCESS_CENT_BAR)) - - ADD_TRAIT(access_card, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) - AddComponentFrom(ROUNDSTART_TRAIT, /datum/component/area_based_godmode, area_type = /area/shuttle/escape, allow_area_subtypes = TRUE) - -/mob/living/simple_animal/hostile/alien/maid/barmaid/Destroy() - qdel(access_card) - . = ..() - // Bar table, a wooden table that kicks you in a direction if you're not // barstaff (defined as someone who was a roundstart bartender or someone // with CENTCOM_BARSTAFF) diff --git a/code/modules/unit_tests/simple_animal_freeze.dm b/code/modules/unit_tests/simple_animal_freeze.dm index 80701705d20..f556b8d902a 100644 --- a/code/modules/unit_tests/simple_animal_freeze.dm +++ b/code/modules/unit_tests/simple_animal_freeze.dm @@ -24,13 +24,6 @@ /mob/living/simple_animal/bot/secbot/pingsky, /mob/living/simple_animal/bot/vibebot, /mob/living/simple_animal/hostile, - /mob/living/simple_animal/hostile/alien, - /mob/living/simple_animal/hostile/alien/drone, - /mob/living/simple_animal/hostile/alien/maid, - /mob/living/simple_animal/hostile/alien/maid/barmaid, - /mob/living/simple_animal/hostile/alien/queen, - /mob/living/simple_animal/hostile/alien/queen/large, - /mob/living/simple_animal/hostile/alien/sentinel, /mob/living/simple_animal/hostile/asteroid, /mob/living/simple_animal/hostile/asteroid/curseblob, /mob/living/simple_animal/hostile/asteroid/elite, diff --git a/icons/effects/mapping_helpers.dmi b/icons/effects/mapping_helpers.dmi index 351bb5f00c4aa267d2325891754135e0d6ce89c1..8bfe0af0854d4a3935481a4bf7f2d044ced2406c 100644 GIT binary patch delta 3287 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 V*qEUf!*l=u002ovPDHLkV1gpesKWpN diff --git a/modular_nova/modules/tarkon/code/misc_fluff/spawner.dm b/modular_nova/modules/tarkon/code/misc_fluff/spawner.dm index 8937a089b78..29bf41d1762 100644 --- a/modular_nova/modules/tarkon/code/misc_fluff/spawner.dm +++ b/modular_nova/modules/tarkon/code/misc_fluff/spawner.dm @@ -192,13 +192,13 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod/tarkon, 32) max_mobs = 4 spawn_time = 30 SECONDS mob_types = list( - /mob/living/simple_animal/hostile/alien, - /mob/living/simple_animal/hostile/alien/drone, - /mob/living/simple_animal/hostile/alien/sentinel + /mob/living/basic/alien, + /mob/living/basic/alien/drone, + /mob/living/basic/alien/sentinel ) spawn_text = "crawls out of" faction = list(ROLE_TARKALIEN) - var/boss_mob = /mob/living/simple_animal/hostile/alien/queen/large + var/boss_mob = /mob/living/basic/alien/queen/large var/loot_drop = /obj/effect/mob_spawn/corpse/human/tarkon /obj/structure/spawner/tarkon_xenos/deconstruct(disassembled) @@ -242,7 +242,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod/tarkon, 32) max_integrity = 300 max_mobs = 2 spawn_time = 40 SECONDS - boss_mob = /mob/living/simple_animal/hostile/alien/queen + boss_mob = /mob/living/basic/alien/queen loot_drop = /obj/effect/spawner/random/astrum/sci_loot/tarkon /obj/structure/spawner/tarkon_xenos/minor @@ -254,10 +254,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod/tarkon, 32) max_mobs = 1 spawn_time = 40 SECONDS mob_types = list( - /mob/living/simple_animal/hostile/alien, - /mob/living/simple_animal/hostile/alien/drone + /mob/living/basic/alien, + /mob/living/basic/alien/drone ) - boss_mob = /mob/living/simple_animal/hostile/alien/sentinel + boss_mob = /mob/living/basic/alien/sentinel loot_drop = /obj/effect/spawner/random/exotic/technology/tarkon /obj/effect/spawner/random/astrum/sci_loot/tarkon diff --git a/tgstation.dme b/tgstation.dme index df6fbfc039b..4b197d39d71 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4663,6 +4663,12 @@ #include "code\modules\mob\living\basic\festivus_pole.dm" #include "code\modules\mob\living\basic\health_adjustment.dm" #include "code\modules\mob\living\basic\tree.dm" +#include "code\modules\mob\living\basic\alien\_alien.dm" +#include "code\modules\mob\living\basic\alien\alien_ai.dm" +#include "code\modules\mob\living\basic\alien\drone.dm" +#include "code\modules\mob\living\basic\alien\maid.dm" +#include "code\modules\mob\living\basic\alien\queen.dm" +#include "code\modules\mob\living\basic\alien\sentinel.dm" #include "code\modules\mob\living\basic\blob_minions\blob_ai.dm" #include "code\modules\mob\living\basic\blob_minions\blob_mob.dm" #include "code\modules\mob\living\basic\blob_minions\blob_spore.dm" @@ -5104,7 +5110,6 @@ #include "code\modules\mob\living\simple_animal\bot\vibebot.dm" #include "code\modules\mob\living\simple_animal\friendly\gondola.dm" #include "code\modules\mob\living\simple_animal\friendly\pet.dm" -#include "code\modules\mob\living\simple_animal\hostile\alien.dm" #include "code\modules\mob\living\simple_animal\hostile\dark_wizard.dm" #include "code\modules\mob\living\simple_animal\hostile\hostile.dm" #include "code\modules\mob\living\simple_animal\hostile\illusion.dm" diff --git a/tools/UpdatePaths/Scripts/82187_basic_xenos.txt b/tools/UpdatePaths/Scripts/82187_basic_xenos.txt new file mode 100644 index 00000000000..6821a136258 --- /dev/null +++ b/tools/UpdatePaths/Scripts/82187_basic_xenos.txt @@ -0,0 +1,4 @@ +# repating all subtypes of xeno (and snipe base type) to basic mob. + +/mob/living/simple_animal/hostile/alien/@SUBTYPES : /mob/living/basic/alien/@SUBTYPES{@OLD} +/mob/living/simple_animal/hostile/alien : /mob/living/basic/alien{@OLD}