diff --git a/_maps/RandomRuins/SpaceRuins/crashedship.dmm b/_maps/RandomRuins/SpaceRuins/crashedship.dmm index 583c4d40329..e983ab3153d 100644 --- a/_maps/RandomRuins/SpaceRuins/crashedship.dmm +++ b/_maps/RandomRuins/SpaceRuins/crashedship.dmm @@ -382,7 +382,7 @@ "pP" = ( /obj/machinery/porta_turret{ dir = 8; - installation = /obj/item/gun/energy/lasercannon; + installation = /obj/item/gun/energy/lasercannon }, /obj/effect/mapping_helpers/atom_injector/obj_flag{ inject_flags = 1; diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm index 798a345a3cf..a4c071a17d0 100644 --- a/_maps/RandomZLevels/caves.dmm +++ b/_maps/RandomZLevels/caves.dmm @@ -1310,7 +1310,7 @@ }, /area/awaymission/caves/bmp_asteroid/level_two) "kE" = ( -/mob/living/simple_animal/hostile/giant_spider/hunter, +/mob/living/basic/giant_spider/hunter, /turf/open/floor/iron, /area/awaymission/caves/bmp_asteroid) "kL" = ( @@ -1382,7 +1382,7 @@ /area/awaymission/caves/northblock) "pC" = ( /obj/item/mjollnir, -/mob/living/simple_animal/hostile/giant_spider/nurse, +/mob/living/basic/giant_spider/nurse, /turf/open/misc/asteroid/basalt{ initial_gas_mix = "n2=23;o2=14;TEMP=2.7" }, @@ -1477,7 +1477,7 @@ /obj/machinery/sleeper{ dir = 8 }, -/mob/living/simple_animal/hostile/giant_spider/hunter, +/mob/living/basic/giant_spider/hunter, /turf/open/floor/iron, /area/awaymission/caves/bmp_asteroid) "uO" = ( @@ -1635,7 +1635,7 @@ }, /area/awaymission/caves/bmp_asteroid/level_two) "Bz" = ( -/mob/living/simple_animal/hostile/giant_spider/nurse, +/mob/living/basic/giant_spider/nurse, /turf/open/misc/asteroid/basalt{ initial_gas_mix = "n2=23;o2=14;TEMP=2.7" }, @@ -1726,7 +1726,7 @@ "FS" = ( /obj/machinery/light/small/built/directional/north, /obj/structure/spider/stickyweb, -/mob/living/simple_animal/hostile/giant_spider/hunter, +/mob/living/basic/giant_spider/hunter, /turf/open/floor/iron, /area/awaymission/caves/bmp_asteroid) "FV" = ( @@ -1982,7 +1982,7 @@ /turf/open/floor/iron, /area/awaymission/caves/bmp_asteroid) "Xs" = ( -/mob/living/simple_animal/hostile/giant_spider/hunter, +/mob/living/basic/giant_spider/hunter, /turf/open/misc/asteroid/basalt{ initial_gas_mix = "n2=23;o2=14;TEMP=2.7" }, @@ -2004,7 +2004,7 @@ /area/awaymission/caves/bmp_asteroid/level_two) "XR" = ( /obj/structure/spider/stickyweb, -/mob/living/simple_animal/hostile/giant_spider/hunter, +/mob/living/basic/giant_spider/hunter, /turf/open/misc/asteroid/basalt{ initial_gas_mix = "n2=23;o2=14;TEMP=2.7" }, diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index 34e271eb0e6..fa899659a7c 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -5517,7 +5517,7 @@ /area/awaymission/snowdin/post/cavern2) "pc" = ( /obj/structure/spider/stickyweb, -/mob/living/simple_animal/hostile/giant_spider/hunter/ice, +/mob/living/basic/giant_spider/hunter/ice, /turf/open/misc/asteroid/snow/ice, /area/awaymission/snowdin/cave/cavern) "pd" = ( @@ -11798,7 +11798,7 @@ dir = 5 }, /obj/structure/spider/stickyweb, -/mob/living/simple_animal/hostile/giant_spider/hunter/ice, +/mob/living/basic/giant_spider/hunter/ice, /turf/open/floor/iron/freezer, /area/awaymission/snowdin/post/kitchen) "Ps" = ( @@ -12052,7 +12052,7 @@ /turf/open/floor/iron/dark, /area/awaymission/snowdin/post/research) "QM" = ( -/mob/living/simple_animal/hostile/giant_spider/nurse/ice, +/mob/living/basic/giant_spider/nurse/ice, /turf/open/misc/asteroid/snow/ice, /area/awaymission/snowdin/cave/cavern) "QN" = ( @@ -12296,7 +12296,7 @@ /turf/open/floor/iron/dark/snowdin, /area/awaymission/snowdin/cave) "Si" = ( -/mob/living/simple_animal/hostile/giant_spider/hunter/ice, +/mob/living/basic/giant_spider/hunter/ice, /turf/open/misc/asteroid/snow/ice, /area/awaymission/snowdin/cave/cavern) "Sj" = ( @@ -12879,7 +12879,7 @@ }, /area/awaymission/snowdin/outside) "Vo" = ( -/mob/living/simple_animal/hostile/giant_spider/ice, +/mob/living/basic/giant_spider/ice, /turf/open/misc/asteroid/snow/ice, /area/awaymission/snowdin/cave/cavern) "Vp" = ( diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 7bf38f8c442..1fc59ab28ad 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -23475,7 +23475,7 @@ "gLm" = ( /obj/machinery/status_display/ai/directional/south, /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/giant_spider/hunter/scrawny, +/mob/living/basic/giant_spider/hunter/scrawny, /turf/open/floor/plating, /area/station/maintenance/department/electrical) "gLn" = ( @@ -38930,7 +38930,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/mob/living/simple_animal/hostile/giant_spider/tarantula/scrawny, +/mob/living/basic/giant_spider/tarantula/scrawny, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) "kZK" = ( @@ -42963,7 +42963,7 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/blood/old, -/mob/living/simple_animal/hostile/giant_spider/hunter/scrawny, +/mob/living/basic/giant_spider/hunter/scrawny, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) "mii" = ( @@ -62741,7 +62741,7 @@ "rSL" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/mob/living/simple_animal/hostile/giant_spider/hunter/scrawny, +/mob/living/basic/giant_spider/hunter/scrawny, /turf/open/floor/plating, /area/station/maintenance/department/electrical) "rSN" = ( diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index dedbeb32140..0447df99975 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -28751,7 +28751,7 @@ "kms" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/mob/living/simple_animal/hostile/retaliate/bat/sgt_araneus, +/mob/living/basic/giant_spider/sgt_araneus, /turf/open/floor/carpet, /area/station/command/heads_quarters/hos) "kmN" = ( diff --git a/_maps/shuttles/whiteship_delta.dmm b/_maps/shuttles/whiteship_delta.dmm index 4120bd9ef8e..575db94e7f7 100644 --- a/_maps/shuttles/whiteship_delta.dmm +++ b/_maps/shuttles/whiteship_delta.dmm @@ -494,7 +494,7 @@ /obj/effect/turf_decal/tile/bar{ dir = 1 }, -/mob/living/simple_animal/hostile/giant_spider/hunter/scrawny, +/mob/living/basic/giant_spider/hunter/scrawny, /turf/open/floor/iron, /area/shuttle/abandoned/bar) "bd" = ( @@ -1026,7 +1026,7 @@ dir = 8 }, /obj/structure/cable, -/mob/living/simple_animal/hostile/giant_spider/tarantula/scrawny, +/mob/living/basic/giant_spider/tarantula/scrawny, /turf/open/floor/iron/dark, /area/shuttle/abandoned/bridge) "cg" = ( @@ -1609,7 +1609,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/giant_spider/nurse/scrawny, +/mob/living/basic/giant_spider/nurse/scrawny, /turf/open/floor/iron, /area/shuttle/abandoned/cargo) "dx" = ( @@ -1685,7 +1685,7 @@ "dG" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable, -/mob/living/simple_animal/hostile/giant_spider/hunter/scrawny, +/mob/living/basic/giant_spider/hunter/scrawny, /turf/open/floor/iron, /area/shuttle/abandoned/medbay) "dH" = ( diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 16aaf019de9..144054efbaa 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -165,7 +165,7 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list( #define isclown(A) (istype(A, /mob/living/simple_animal/hostile/retaliate/clown)) -#define isspider(A) (istype(A, /mob/living/simple_animal/hostile/giant_spider)) +#define isspider(A) (istype(A, /mob/living/basic/giant_spider)) //Misc mobs diff --git a/code/_globalvars/phobias.dm b/code/_globalvars/phobias.dm index 35b738867f4..d440f6ebb28 100644 --- a/code/_globalvars/phobias.dm +++ b/code/_globalvars/phobias.dm @@ -51,7 +51,7 @@ GLOBAL_LIST_INIT(phobia_regexes, list( )) GLOBAL_LIST_INIT(phobia_mobs, list( - "spiders" = typecacheof(list(/mob/living/simple_animal/hostile/giant_spider)), + "spiders" = typecacheof(list(/mob/living/basic/giant_spider)), "security" = typecacheof(list(/mob/living/simple_animal/bot/secbot)), "lizards" = typecacheof(list(/mob/living/simple_animal/hostile/lizard)), "skeletons" = typecacheof(list(/mob/living/simple_animal/hostile/skeleton)), diff --git a/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm index bfabe1cb8b7..1407f1d40a2 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm @@ -34,7 +34,7 @@ else controller.queue_behavior(/datum/ai_behavior/perform_speech, pick(speak)) -/datum/ai_planning_subtree/random_speech/cockroach +/datum/ai_planning_subtree/random_speech/insect speech_chance = 5 emote_hear = list("chitters.") diff --git a/code/datums/elements/prevent_attacking_of_types.dm b/code/datums/elements/prevent_attacking_of_types.dm index a7f961800a9..ff08c05dbb3 100644 --- a/code/datums/elements/prevent_attacking_of_types.dm +++ b/code/datums/elements/prevent_attacking_of_types.dm @@ -13,7 +13,7 @@ /datum/element/prevent_attacking_of_types/Attach(datum/target, list/typecache, alert_message) . = ..() - if (!ishostile(target)) + if (!isanimal_or_basicmob(target)) return ELEMENT_INCOMPATIBLE src.alert_message = alert_message diff --git a/code/datums/memory/_memory.dm b/code/datums/memory/_memory.dm index 506542a3bbd..f6f51888fba 100644 --- a/code/datums/memory/_memory.dm +++ b/code/datums/memory/_memory.dm @@ -248,8 +248,8 @@ /mob/living/simple_animal/hostile/asteroid/goliath/beast, /mob/living/simple_animal/hostile/bear, /mob/living/simple_animal/hostile/blob/blobbernaut/independent, - /mob/living/simple_animal/hostile/giant_spider, - /mob/living/simple_animal/hostile/giant_spider/hunter, + /mob/living/basic/giant_spider, + /mob/living/basic/giant_spider/hunter, /mob/living/simple_animal/hostile/gorilla, /mob/living/simple_animal/hostile/headcrab, /mob/living/simple_animal/hostile/killertomato, diff --git a/code/datums/status_effects/debuffs/fire_stacks.dm b/code/datums/status_effects/debuffs/fire_stacks.dm index 4db2a1adaa1..6951ae2c4d8 100644 --- a/code/datums/status_effects/debuffs/fire_stacks.dm +++ b/code/datums/status_effects/debuffs/fire_stacks.dm @@ -27,8 +27,10 @@ . = ..() if(isbasicmob(owner)) - qdel(src) - return + var/mob/living/basic/basic_owner = owner + if(!basic_owner.flammable) + qdel(src) + return if(isanimal(owner)) var/mob/living/simple_animal/animal_owner = owner diff --git a/code/game/objects/effects/spiderwebs.dm b/code/game/objects/effects/spiderwebs.dm index eb7d5fc7b91..718ed2f0b2d 100644 --- a/code/game/objects/effects/spiderwebs.dm +++ b/code/game/objects/effects/spiderwebs.dm @@ -65,7 +65,7 @@ if(isspider(mover)) return TRUE else if(isliving(mover)) - if(istype(mover.pulledby, /mob/living/simple_animal/hostile/giant_spider)) + if(istype(mover.pulledby, /mob/living/basic/giant_spider)) return TRUE if(prob(50)) balloon_alert(mover, "stuck in web!") @@ -127,19 +127,19 @@ AddComponent(/datum/component/swarming) /obj/structure/spider/spiderling/hunter - grow_as = /mob/living/simple_animal/hostile/giant_spider/hunter + grow_as = /mob/living/basic/giant_spider/hunter /obj/structure/spider/spiderling/nurse - grow_as = /mob/living/simple_animal/hostile/giant_spider/nurse + grow_as = /mob/living/basic/giant_spider/nurse /obj/structure/spider/spiderling/midwife - grow_as = /mob/living/simple_animal/hostile/giant_spider/midwife + grow_as = /mob/living/basic/giant_spider/midwife /obj/structure/spider/spiderling/viper - grow_as = /mob/living/simple_animal/hostile/giant_spider/viper + grow_as = /mob/living/basic/giant_spider/viper /obj/structure/spider/spiderling/tarantula - grow_as = /mob/living/simple_animal/hostile/giant_spider/tarantula + grow_as = /mob/living/basic/giant_spider/tarantula /obj/structure/spider/spiderling/Bump(atom/user) if(istype(user, /obj/structure/table)) @@ -219,10 +219,10 @@ if(amount_grown >= 100) if(!grow_as) if(prob(3)) - grow_as = pick(/mob/living/simple_animal/hostile/giant_spider/tarantula, /mob/living/simple_animal/hostile/giant_spider/viper, /mob/living/simple_animal/hostile/giant_spider/midwife) + grow_as = pick(/mob/living/basic/giant_spider/tarantula, /mob/living/basic/giant_spider/viper, /mob/living/basic/giant_spider/midwife) else - grow_as = pick(/mob/living/simple_animal/hostile/giant_spider, /mob/living/simple_animal/hostile/giant_spider/hunter, /mob/living/simple_animal/hostile/giant_spider/nurse) - var/mob/living/simple_animal/hostile/giant_spider/S = new grow_as(src.loc) + grow_as = pick(/mob/living/basic/giant_spider, /mob/living/basic/giant_spider/hunter, /mob/living/basic/giant_spider/nurse) + var/mob/living/basic/giant_spider/S = new grow_as(src.loc) S.faction = faction.Copy() S.directive = directive qdel(src) diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 2d1a656a042..0c4aabd891f 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -880,7 +880,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/effect/decal/cleanable/ants, )) strong_against = typecacheof(list( - /mob/living/simple_animal/hostile/giant_spider, + /mob/living/basic/giant_spider, )) diff --git a/code/modules/antagonists/traitor/objectives/kill_pet.dm b/code/modules/antagonists/traitor/objectives/kill_pet.dm index 2d3c1c7f3c8..87f35c1417f 100644 --- a/code/modules/antagonists/traitor/objectives/kill_pet.dm +++ b/code/modules/antagonists/traitor/objectives/kill_pet.dm @@ -54,7 +54,7 @@ possible_heads = list( JOB_HEAD_OF_SECURITY = list( /mob/living/basic/carp/pet/lia, - /mob/living/simple_animal/hostile/retaliate/bat/sgt_araneus + /mob/living/basic/giant_spider/sgt_araneus, ), JOB_WARDEN = list( /mob/living/basic/pet/dog/pug/mcgriff diff --git a/code/modules/events/scrubber_clog.dm b/code/modules/events/scrubber_clog.dm index 01a8219cb8f..4e982ff05b5 100644 --- a/code/modules/events/scrubber_clog.dm +++ b/code/modules/events/scrubber_clog.dm @@ -151,7 +151,7 @@ var/static/list/mob_list = list( /mob/living/basic/mouse/rat, /mob/living/simple_animal/hostile/bee, - /mob/living/simple_animal/hostile/giant_spider, + /mob/living/basic/giant_spider, ) return pick(mob_list) diff --git a/code/modules/events/shuttle_loan/shuttle_loan_datum.dm b/code/modules/events/shuttle_loan/shuttle_loan_datum.dm index ba85a41132a..a5eb95cf67c 100644 --- a/code/modules/events/shuttle_loan/shuttle_loan_datum.dm +++ b/code/modules/events/shuttle_loan/shuttle_loan_datum.dm @@ -196,11 +196,11 @@ var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/emergency/specialops] pack.generate(pick_n_take(empty_shuttle_turfs)) - spawn_list.Add(/mob/living/simple_animal/hostile/giant_spider) - spawn_list.Add(/mob/living/simple_animal/hostile/giant_spider) - spawn_list.Add(/mob/living/simple_animal/hostile/giant_spider/nurse) + spawn_list.Add(/mob/living/basic/giant_spider) + spawn_list.Add(/mob/living/basic/giant_spider) + spawn_list.Add(/mob/living/basic/giant_spider/nurse) if(prob(50)) - spawn_list.Add(/mob/living/simple_animal/hostile/giant_spider/hunter) + spawn_list.Add(/mob/living/basic/giant_spider/hunter) var/turf/victim_turf = pick_n_take(empty_shuttle_turfs) diff --git a/code/modules/mob/living/basic/basic.dm b/code/modules/mob/living/basic/basic.dm index f7a386e9ba9..283206387b6 100644 --- a/code/modules/mob/living/basic/basic.dm +++ b/code/modules/mob/living/basic/basic.dm @@ -97,6 +97,9 @@ ///This damage is taken when the body temp is too hot. Set both this and unsuitable_cold_damage to 0 to avoid adding the basic_body_temp_sensitive element. var/unsuitable_heat_damage = 1 + ///Whether or not this mob can catch on fire + var/flammable = FALSE + /mob/living/basic/Initialize(mapload) . = ..() @@ -124,9 +127,8 @@ /mob/living/basic/Life(delta_time = SSMOBS_DT, times_fired) . = ..() - ///Automatic stamina re-gain if(staminaloss > 0) - adjustStaminaLoss(-stamina_recovery * delta_time, FALSE, TRUE) + adjustStaminaLoss(-stamina_recovery * delta_time, forced = TRUE) /mob/living/basic/say_mod(input, list/message_mods = list()) if(length(speak_emote)) @@ -205,3 +207,22 @@ /mob/living/basic/compare_sentience_type(compare_type) return sentience_type == compare_type + +/// Updates movement speed based on stamina loss +/mob/living/basic/update_stamina() + set_varspeed(initial(speed) + (staminaloss * 0.06)) + +/mob/living/basic/on_fire_stack(delta_time, times_fired, datum/status_effect/fire_handler/fire_stacks/fire_handler) + adjust_bodytemperature((maximum_survivable_temperature + (fire_handler.stacks * 12)) * 0.5 * delta_time) + +/mob/living/basic/update_fire_overlay(stacks, on_fire, last_icon_state, suffix = "") + var/mutable_appearance/fire_overlay = mutable_appearance('icons/mob/effects/onfire.dmi', "generic_fire") + if(on_fire && isnull(last_icon_state)) + add_overlay(fire_overlay) + return fire_overlay + else if(!on_fire && !isnull(last_icon_state)) + cut_overlay(fire_overlay) + return null + else if(on_fire && !isnull(last_icon_state)) + return last_icon_state + return null diff --git a/code/modules/mob/living/basic/space_fauna/faithless/faithless.dm b/code/modules/mob/living/basic/space_fauna/faithless.dm similarity index 100% rename from code/modules/mob/living/basic/space_fauna/faithless/faithless.dm rename to code/modules/mob/living/basic/space_fauna/faithless.dm diff --git a/code/modules/mob/living/basic/retaliate/garden_gnome.dm b/code/modules/mob/living/basic/space_fauna/garden_gnome.dm similarity index 100% rename from code/modules/mob/living/basic/retaliate/garden_gnome.dm rename to code/modules/mob/living/basic/space_fauna/garden_gnome.dm diff --git a/code/modules/mob/living/basic/retaliate/ghost.dm b/code/modules/mob/living/basic/space_fauna/ghost.dm similarity index 100% rename from code/modules/mob/living/basic/retaliate/ghost.dm rename to code/modules/mob/living/basic/space_fauna/ghost.dm diff --git a/code/modules/mob/living/basic/space_fauna/giant_spider/giant_spider.dm b/code/modules/mob/living/basic/space_fauna/giant_spider/giant_spider.dm new file mode 100644 index 00000000000..6fd4e3b4e9b --- /dev/null +++ b/code/modules/mob/living/basic/space_fauna/giant_spider/giant_spider.dm @@ -0,0 +1,101 @@ +/** + * # Giant Spider + * + * A mob which can be created by dynamic event, botany, or xenobiology. + * The basic type is the guard, which is slow but sturdy and outputs good damage. + * All spiders can produce webbing. + */ +/mob/living/basic/giant_spider + name = "giant spider" + desc = "Furry and black, it makes you shudder to look at it. This one has deep red eyes." + icon_state = "guard" + icon_living = "guard" + icon_dead = "guard_dead" + mob_biotypes = MOB_ORGANIC|MOB_BUG + speak_emote = list("chitters") + butcher_results = list(/obj/item/food/meat/slab/spider = 2, /obj/item/food/spiderleg = 8) + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "gently pushes aside" + response_disarm_simple = "gently push aside" + initial_language_holder = /datum/language_holder/spider + speed = 4 + maxHealth = 80 + health = 80 + damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1) + status_flags = NONE + unsuitable_cold_damage = 4 + unsuitable_heat_damage = 4 + obj_damage = 30 + melee_damage_lower = 20 + melee_damage_upper = 25 + combat_mode = TRUE + faction = list("spiders") + pass_flags = PASSTABLE + attack_verb_continuous = "bites" + attack_verb_simple = "bite" + attack_sound = 'sound/weapons/bite.ogg' + attack_vis_effect = ATTACK_EFFECT_BITE + unique_name = 1 + gold_core_spawnable = HOSTILE_SPAWN + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + see_in_dark = NIGHTVISION_FOV_RANGE + flammable = TRUE + ai_controller = /datum/ai_controller/basic_controller/giant_spider + /// Speed modifier to apply if controlled by a human player + var/player_speed_modifier = -4 + /// What reagent the mob injects targets with + var/poison_type = /datum/reagent/toxin/hunterspider + /// How much of a reagent the mob injects on attack + var/poison_per_bite = 0 + /// Multiplier to apply to web laying speed. Fractional numbers make it faster, because it's a multiplier. + var/web_speed = 1 + /// Type of webbing ability to learn. + var/web_type = /datum/action/cooldown/lay_web + /// The message that the mother spider left for this spider when the egg was layed. + var/directive = "" + /// Short description of what this mob is capable of, for radial menu uses + var/menu_description = "Versatile spider variant for frontline combat with high health and damage." + /// If true then you shouldn't be told that you're a spider antagonist as soon as you are placed into this mob + var/apply_spider_antag = TRUE + +/mob/living/basic/giant_spider/Initialize(mapload) + . = ..() + AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW) + AddElement(/datum/element/nerfed_pulling, GLOB.typecache_general_bad_things_to_easily_move) + AddElement(/datum/element/prevent_attacking_of_types, GLOB.typecache_general_bad_hostile_attack_targets, "this tastes awful!") + + if(poison_per_bite) + AddElement(/datum/element/venomous, poison_type, poison_per_bite) + + var/datum/action/cooldown/lay_web/webbing = new web_type(src) + webbing.webbing_time *= web_speed + webbing.Grant(src) + +/mob/living/basic/giant_spider/Login() + . = ..() + if(!. || !client) + return FALSE + GLOB.spidermobs[src] = TRUE + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/player_spider_modifier, multiplicative_slowdown = player_speed_modifier) + if (apply_spider_antag) + var/datum/antagonist/spider/spider_antag = new(directive) + mind.add_antag_datum(spider_antag) + +/mob/living/basic/giant_spider/Logout() + . = ..() + remove_movespeed_modifier(/datum/movespeed_modifier/player_spider_modifier) + +/mob/living/basic/giant_spider/Destroy() + GLOB.spidermobs -= src + return ..() + +/mob/living/basic/giant_spider/mob_negates_gravity() + if(locate(/obj/structure/spider/stickyweb) in loc) + return TRUE + return ..() + +/mob/living/basic/giant_spider/expose_reagents(list/reagents, datum/reagents/source, methods=TOUCH, volume_modifier=1, show_message=TRUE) + . = ..() + for(var/datum/reagent/toxin/pestkiller/current_reagent in reagents) + apply_damage(50 * volume_modifier, STAMINA, BODY_ZONE_CHEST) diff --git a/code/modules/mob/living/basic/space_fauna/giant_spider/giant_spider_ai.dm b/code/modules/mob/living/basic/space_fauna/giant_spider/giant_spider_ai.dm new file mode 100644 index 00000000000..826982e491d --- /dev/null +++ b/code/modules/mob/living/basic/space_fauna/giant_spider/giant_spider_ai.dm @@ -0,0 +1,46 @@ +#define SPIDER_ATTACK_COOLDOWN (2 SECONDS) + +/// For now, essentially just a Simple Hostile but room for expansion +/datum/ai_controller/basic_controller/giant_spider + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + ) + + ai_traits = STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking + + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/attack_obstacle_in_path/giant_spider, + /datum/ai_planning_subtree/basic_melee_attack_subtree/giant_spider, + /datum/ai_planning_subtree/random_speech/insect, // Space spiders are taxonomically insects not arachnids, don't DM me + ) + + +/// Used by Araneus, who only attacks those who attack first +/datum/ai_controller/basic_controller/giant_spider/retaliate + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/ignore_faction(), + ) + + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/attack_obstacle_in_path/giant_spider, + /datum/ai_planning_subtree/basic_melee_attack_subtree/giant_spider, + /datum/ai_planning_subtree/random_speech/insect, + ) + +/datum/ai_planning_subtree/attack_obstacle_in_path/giant_spider + attack_behaviour = /datum/ai_behavior/attack_obstructions/giant_spider + +/datum/ai_behavior/attack_obstructions/giant_spider + action_cooldown = SPIDER_ATTACK_COOLDOWN + +/datum/ai_planning_subtree/basic_melee_attack_subtree/giant_spider + melee_attack_behavior = /datum/ai_behavior/basic_melee_attack/giant_spider + +/datum/ai_behavior/basic_melee_attack/giant_spider + action_cooldown = SPIDER_ATTACK_COOLDOWN + +#undef SPIDER_ATTACK_COOLDOWN diff --git a/code/modules/mob/living/basic/space_fauna/giant_spider/spider_abilities/hivemind.dm b/code/modules/mob/living/basic/space_fauna/giant_spider/spider_abilities/hivemind.dm index 96f29f99171..08a688c3d0b 100644 --- a/code/modules/mob/living/basic/space_fauna/giant_spider/spider_abilities/hivemind.dm +++ b/code/modules/mob/living/basic/space_fauna/giant_spider/spider_abilities/hivemind.dm @@ -62,7 +62,7 @@ if(!message) return var/my_message = span_spider("Command from [user]: [message]") - for(var/mob/living/simple_animal/hostile/giant_spider/spider as anything in GLOB.spidermobs) + for(var/mob/living/basic/giant_spider/spider as anything in GLOB.spidermobs) to_chat(spider, my_message) for(var/ghost in GLOB.dead_mob_list) var/link = FOLLOW_LINK(ghost, user) diff --git a/code/modules/mob/living/basic/space_fauna/giant_spider/spider_variants.dm b/code/modules/mob/living/basic/space_fauna/giant_spider/spider_variants.dm new file mode 100644 index 00000000000..2eacd437ecf --- /dev/null +++ b/code/modules/mob/living/basic/space_fauna/giant_spider/spider_variants.dm @@ -0,0 +1,329 @@ +/** + * # Spider Hunter + * A subtype of the giant spider which is faster, has toxin injection, but less health and damage. + * This spider is only slightly slower than a human. + */ +/mob/living/basic/giant_spider/hunter + name = "hunter spider" + desc = "Furry and black, it makes you shudder to look at it. This one has sparkling purple eyes." + icon_state = "hunter" + icon_living = "hunter" + icon_dead = "hunter_dead" + maxHealth = 50 + health = 50 + melee_damage_lower = 15 + melee_damage_upper = 20 + poison_per_bite = 5 + speed = 3 + player_speed_modifier = -3.1 + menu_description = "Fast spider variant specializing in catching running prey and toxin injection, but has less health and damage." + +/** + * # Spider Nurse + * + * A subtype of the giant spider which specializes in support skills. + * Nurses can place down webbing in a quarter of the time that other species can and can wrap other spiders' wounds, healing them. + * Note that it cannot heal itself. + */ +/mob/living/basic/giant_spider/nurse + name = "nurse spider" + desc = "Furry and black, it makes you shudder to look at it. This one has brilliant green eyes." + icon_state = "nurse" + icon_living = "nurse" + icon_dead = "nurse_dead" + gender = FEMALE + butcher_results = list(/obj/item/food/meat/slab/spider = 2, /obj/item/food/spiderleg = 8, /obj/item/food/spidereggs = 4) + maxHealth = 40 + health = 40 + melee_damage_lower = 5 + melee_damage_upper = 10 + web_speed = 0.25 + web_type = /datum/action/cooldown/lay_web/sealer + menu_description = "Support spider variant specializing in healing their brethren and placing webbings very swiftly, but has very low amount of health and deals low damage." + ///The health HUD applied to the mob. + var/health_hud = DATA_HUD_MEDICAL_ADVANCED + +/mob/living/basic/giant_spider/nurse/Initialize(mapload) + . = ..() + var/datum/atom_hud/datahud = GLOB.huds[health_hud] + datahud.show_to(src) + + AddComponent(/datum/component/healing_touch,\ + interaction_key = DOAFTER_SOURCE_SPIDER,\ + valid_targets_typecache = typecacheof(list(/mob/living/basic/giant_spider)),\ + action_text = "%SOURCE% begins wrapping the wounds of %TARGET%.",\ + complete_text = "%SOURCE% wraps the wounds of %TARGET%.",\ + ) + +/** + * # Tarantula + * + * A subtype of the giant spider which specializes in pure strength and staying power. + * Is slowed down when not on webbing, but can lunge to throw off attackers and possibly to stun them. + */ +/mob/living/basic/giant_spider/tarantula + name = "tarantula" + desc = "Furry and black, it makes you shudder to look at it. This one has abyssal red eyes." + icon_state = "tarantula" + icon_living = "tarantula" + icon_dead = "tarantula_dead" + maxHealth = 300 // woah nelly + health = 300 + melee_damage_lower = 35 + melee_damage_upper = 40 + obj_damage = 100 + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) + speed = 6 + player_speed_modifier = -5.5 // Doesn't seem that slow but it gets a debuff off web + mob_size = MOB_SIZE_LARGE + gold_core_spawnable = NO_SPAWN + menu_description = "Tank spider variant with an enormous amount of health and damage, but is very slow when not on webbing. It also has a charge ability to close distance with a target after a small windup." + /// Charging ability + var/datum/action/cooldown/mob_cooldown/charge/basic_charge/charge + +/mob/living/basic/giant_spider/tarantula/Initialize(mapload) + . = ..() + charge = new /datum/action/cooldown/mob_cooldown/charge/basic_charge() + charge.Grant(src) + + AddElement(/datum/element/web_walker, /datum/movespeed_modifier/tarantula_web) + +/mob/living/basic/giant_spider/tarantula/Destroy() + QDEL_NULL(charge) + return ..() + +/// Lunge if you click something at range +/mob/living/basic/giant_spider/tarantula/ranged_secondary_attack(atom/atom_target, modifiers) + charge.Trigger(target = atom_target) + +/** + * # Spider Viper + * + * A subtype of the giant spider which specializes in speed and poison. + * Injects a deadlier toxin than other spiders, moves extremely fast, but has a limited amount of health. + */ +/mob/living/basic/giant_spider/viper + name = "viper spider" + desc = "Furry and black, it makes you shudder to look at it. This one has effervescent purple eyes." + icon_state = "viper" + icon_living = "viper" + icon_dead = "viper_dead" + maxHealth = 40 + health = 40 + melee_damage_lower = 5 + melee_damage_upper = 5 + poison_per_bite = 5 + poison_type = /datum/reagent/toxin/viperspider + speed = 2 + player_speed_modifier = -2.5 + gold_core_spawnable = NO_SPAWN + menu_description = "Assassin spider variant with an unmatched speed and very deadly poison, but has very low amount of health and damage." + +/** + * # Spider Broodmother + * + * A subtype of the giant spider which is the crux of a spider horde, and the way which it grows. + * Has very little offensive capabilities but can lay eggs at any time to create more basic spiders. + * After consuming human bodies can lay specialised eggs including more broodmothers. + * They are also capable of sending messages to all living spiders and setting directives for their children. + */ +/mob/living/basic/giant_spider/midwife + name = "broodmother spider" + desc = "Furry and black, it makes you shudder to look at it. This one has scintillating green eyes. Might also be hiding a real knife somewhere." + gender = FEMALE + icon_state = "midwife" + icon_living = "midwife" + icon_dead = "midwife_dead" + maxHealth = 60 + health = 60 + melee_damage_lower = 10 + melee_damage_upper = 15 + gold_core_spawnable = NO_SPAWN + web_speed = 0.5 + web_type = /datum/action/cooldown/lay_web/sealer + menu_description = "Royal spider variant specializing in reproduction and leadership, but has very low amount of health and deals low damage." + +/mob/living/basic/giant_spider/midwife/Initialize(mapload) + . = ..() + var/datum/action/cooldown/wrap/wrapping = new(src) + wrapping.Grant(src) + + var/datum/action/lay_eggs/make_eggs = new(src) + make_eggs.Grant(src) + + var/datum/action/lay_eggs/enriched/make_better_eggs = new(src) + make_better_eggs.Grant(src) + + var/datum/action/set_spider_directive/give_orders = new(src) + give_orders.Grant(src) + + var/datum/action/command_spiders/not_hivemind_talk = new(src) + not_hivemind_talk.Grant(src) + +/** + * # Giant Ice Spider + * + * A subtype of the giant spider which is immune to temperature damage, unlike its normal counterpart. + * Currently unused in the game unless spawned by admins. + */ +/mob/living/basic/giant_spider/ice + name = "giant ice spider" + 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) + minimum_survivable_temperature = 0 + maximum_survivable_temperature = 1500 + color = rgb(114,228,250) + gold_core_spawnable = NO_SPAWN + menu_description = "Versatile ice spider variant for frontline combat with high health and damage. Immune to temperature damage." + +/** + * # Ice Nurse Spider + * + * A temperature-proof nurse spider. Also unused. + */ +/mob/living/basic/giant_spider/nurse/ice + name = "giant ice spider" + 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) + minimum_survivable_temperature = 0 + maximum_survivable_temperature = 1500 + poison_type = /datum/reagent/consumable/frostoil + color = rgb(114,228,250) + menu_description = "Support ice spider variant specializing in healing their brethren and placing webbings very swiftly, but has very low amount of health and deals low damage. Immune to temperature damage." + +/** + * # Ice Hunter Spider + * + * A temperature-proof hunter with chilling venom. Also unused. + */ +/mob/living/basic/giant_spider/hunter/ice + name = "giant ice spider" + 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) + minimum_survivable_temperature = 0 + maximum_survivable_temperature = 1500 + poison_type = /datum/reagent/consumable/frostoil + color = rgb(114,228,250) + gold_core_spawnable = NO_SPAWN + menu_description = "Fast ice spider variant specializing in catching running prey and frost oil injection, but has less health and damage. Immune to temperature damage." + +/** + * # Scrawny Hunter Spider + * + * A hunter spider that trades damage for health, unable to smash enviroments. + * Used as a minor threat in abandoned places, such as areas in maintenance or a ruin. + */ +/mob/living/basic/giant_spider/hunter/scrawny + name = "scrawny spider" + environment_smash = ENVIRONMENT_SMASH_NONE + health = 60 + maxHealth = 60 + melee_damage_lower = 5 + melee_damage_upper = 10 + desc = "Furry and black, it makes you shudder to look at it. This one has sparkling purple eyes, and looks abnormally thin and frail." + menu_description = "Fast spider variant specializing in catching running prey and toxin injection, but has less damage than a normal hunter spider at the cost of a little more health." + +/** + * # Scrawny Tarantula + * + * A weaker version of the Tarantula, unable to smash enviroments. + * Used as a moderately strong but slow threat in abandoned places, such as areas in maintenance or a ruin. + */ +/mob/living/basic/giant_spider/tarantula/scrawny + name = "scrawny tarantula" + environment_smash = ENVIRONMENT_SMASH_NONE + health = 150 + maxHealth = 150 + melee_damage_lower = 20 + melee_damage_upper = 25 + desc = "Furry and black, it makes you shudder to look at it. This one has abyssal red eyes, and looks abnormally thin and frail." + menu_description = "A weaker variant of the tarantula with reduced amount of health and damage, very slow when not on webbing. It also has a charge ability to close distance with a target after a small windup." + +/** + * # Scrawny Nurse Spider + * + * A weaker version of the nurse spider with reduced health, unable to smash enviroments. + * Mainly used as a weak threat in abandoned places, such as areas in maintenance or a ruin. + * In the future we should give this AI so that it actually heals its teammates. + */ +/mob/living/basic/giant_spider/nurse/scrawny + name = "scrawny nurse spider" + environment_smash = ENVIRONMENT_SMASH_NONE + health = 30 + maxHealth = 30 + desc = "Furry and black, it makes you shudder to look at it. This one has brilliant green eyes, and looks abnormally thin and frail." + menu_description = "Weaker version of the nurse spider, specializing in healing their brethren and placing webbings very swiftly, but has very low amount of health and deals low damage." + +/** + * # Flesh Spider + * + * A subtype of giant spider which only occurs from changelings. + * Has the base stats of a hunter, but they can heal themselves and spin webs faster. + * They also occasionally leave puddles of blood when they walk around. Flavorful! + */ +/mob/living/basic/giant_spider/hunter/flesh + desc = "A odd fleshy creature in the shape of a spider. Its eyes are pitch black and soulless." + icon_state = "flesh_spider" + icon_living = "flesh_spider" + icon_dead = "flesh_spider_dead" + web_speed = 0.7 + menu_description = "Self-sufficient spider variant capable of healing themselves and producing webbbing fast, but has less health and damage." + +/mob/living/basic/giant_spider/hunter/flesh/Initialize(mapload) + . = ..() + AddComponent(/datum/component/blood_walk, \ + blood_type = /obj/effect/decal/cleanable/blood/bubblegum, \ + blood_spawn_chance = 5) + // It might be easier and more fitting to just replace this with Regenerator + AddComponent(/datum/component/healing_touch,\ + heal_brute = maxHealth * 0.5,\ + heal_burn = maxHealth * 0.5,\ + self_targetting = HEALING_TOUCH_SELF_ONLY,\ + interaction_key = DOAFTER_SOURCE_SPIDER,\ + valid_targets_typecache = typecacheof(list(/mob/living/basic/giant_spider/hunter/flesh)),\ + extra_checks = CALLBACK(src, PROC_REF(can_mend)),\ + action_text = "%SOURCE% begins mending themselves...",\ + complete_text = "%SOURCE%'s wounds mend together.",\ + ) + +/// Prevent you from healing other flesh spiders, or healing when on fire +/mob/living/basic/giant_spider/hunter/flesh/proc/can_mend(mob/living/source, mob/living/target) + if (on_fire) + balloon_alert(src, "on fire!") + return FALSE + return TRUE + +/** + * # Viper Spider (Wizard) + * + * A spider form for wizards. Has the viper spider's extreme speed and strong venom, with additional health and vent crawling abilities. + */ +/mob/living/basic/giant_spider/viper/wizard + maxHealth = 80 + health = 80 + menu_description = "Stronger assassin spider variant with an unmatched speed, high amount of health and very deadly poison, but deals very low amount of damage. It also has ability to ventcrawl." + apply_spider_antag = FALSE + +/mob/living/basic/giant_spider/viper/wizard/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) + +/** + * # Sergeant Araneus + * + * This friendly arachnid hangs out in the HoS office on some space stations. Better trained than an average officer and does not attack except in self-defence. + */ +/mob/living/basic/giant_spider/sgt_araneus + name = "Sergeant Araneus" + real_name = "Sergeant Araneus" + desc = "A fierce companion of the Head of Security, this spider has been carefully trained by Nanotrasen specialists. Its beady, staring eyes send shivers down your spine." + faction = list("spiders") + maxHealth = 250 + health = 250 + melee_damage_lower = 15 + melee_damage_upper = 20 + ai_controller = /datum/ai_controller/basic_controller/giant_spider/retaliate + apply_spider_antag = FALSE + +/mob/living/basic/giant_spider/sgt_araneus/Initialize(mapload) + . = ..() + AddElement(/datum/element/pet_bonus, "chitters proudly!") + AddElement(/datum/element/ai_retaliate) + ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) diff --git a/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm b/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm index 0eb46d8b95a..2d33b5eda95 100644 --- a/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm +++ b/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm @@ -50,22 +50,22 @@ /mob/living/basic/creature/proc/health_full_behaviour() melee_damage_lower = 20 melee_damage_upper = 30 - set_varspeed(2) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/netherworld_enrage, multiplicative_slowdown = 0) /mob/living/basic/creature/proc/health_high_behaviour() melee_damage_lower = 25 melee_damage_upper = 40 - set_varspeed(1.5) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/netherworld_enrage, multiplicative_slowdown = -0.5) /mob/living/basic/creature/proc/health_medium_behaviour() melee_damage_lower = 30 melee_damage_upper = 50 - set_varspeed(1) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/netherworld_enrage, multiplicative_slowdown = -1) /mob/living/basic/creature/proc/health_low_behaviour() melee_damage_lower = 35 melee_damage_upper = 60 - set_varspeed(0.5) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/netherworld_enrage, multiplicative_slowdown = -1.5) /mob/living/basic/creature/proc/can_be_seen(turf/location) // Check for darkness diff --git a/code/modules/mob/living/basic/space_fauna/netherworld/migo.dm b/code/modules/mob/living/basic/space_fauna/netherworld/migo.dm index 62d5d233851..ec347654d46 100644 --- a/code/modules/mob/living/basic/space_fauna/netherworld/migo.dm +++ b/code/modules/mob/living/basic/space_fauna/netherworld/migo.dm @@ -49,19 +49,19 @@ health_full_behaviour() /mob/living/basic/migo/proc/health_full_behaviour() - set_varspeed(1) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/netherworld_enrage, multiplicative_slowdown = 0) dodge_prob = 10 /mob/living/basic/migo/proc/health_high_behaviour() - set_varspeed(0.5) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/netherworld_enrage, multiplicative_slowdown = -0.5) dodge_prob = 20 /mob/living/basic/migo/proc/health_medium_behaviour() - set_varspeed(0) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/netherworld_enrage, multiplicative_slowdown = -1) dodge_prob = 30 /mob/living/basic/migo/proc/health_low_behaviour() - set_varspeed(-0.5) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/netherworld_enrage, multiplicative_slowdown = -1.5) dodge_prob = 50 /mob/living/basic/migo/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null, filterproof = null, message_range = 7, datum/saymode/saymode = null) diff --git a/code/modules/mob/living/basic/vermin/cockroach.dm b/code/modules/mob/living/basic/vermin/cockroach.dm index 2abca82218c..604f10e76df 100644 --- a/code/modules/mob/living/basic/vermin/cockroach.dm +++ b/code/modules/mob/living/basic/vermin/cockroach.dm @@ -61,7 +61,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( - /datum/ai_planning_subtree/random_speech/cockroach, + /datum/ai_planning_subtree/random_speech/insect, /datum/ai_planning_subtree/find_and_hunt_target/roach, ) @@ -94,7 +94,7 @@ /datum/ai_controller/basic_controller/cockroach/glockroach planning_subtrees = list( /datum/ai_planning_subtree/pet_planning, - /datum/ai_planning_subtree/random_speech/cockroach, + /datum/ai_planning_subtree/random_speech/insect, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_ranged_attack_subtree/glockroach, //If we are attacking someone, this will prevent us from hunting /datum/ai_planning_subtree/find_and_hunt_target/roach, @@ -140,7 +140,7 @@ /datum/ai_controller/basic_controller/cockroach/hauberoach planning_subtrees = list( /datum/ai_planning_subtree/pet_planning, - /datum/ai_planning_subtree/random_speech/cockroach, + /datum/ai_planning_subtree/random_speech/insect, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree/hauberoach, //If we are attacking someone, this will prevent us from hunting /datum/ai_planning_subtree/find_and_hunt_target/roach, @@ -155,7 +155,7 @@ /datum/ai_controller/basic_controller/cockroach/sewer planning_subtrees = list( /datum/ai_planning_subtree/pet_planning, - /datum/ai_planning_subtree/random_speech/cockroach, + /datum/ai_planning_subtree/random_speech/insect, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree/sewer, /datum/ai_planning_subtree/find_and_hunt_target/roach, @@ -176,7 +176,7 @@ /datum/ai_controller/basic_controller/cockroach/mobroach planning_subtrees = list( /datum/ai_planning_subtree/pet_planning, - /datum/ai_planning_subtree/random_speech/cockroach, + /datum/ai_planning_subtree/random_speech/insect, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_ranged_attack_subtree/mobroach, //If we are attacking someone, this will prevent us from hunting /datum/ai_planning_subtree/find_and_hunt_target/roach, diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 6c919e66804..172efdca851 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1349,8 +1349,8 @@ /mob/living/simple_animal/hostile/retaliate/bat, /mob/living/simple_animal/hostile/retaliate/goat, /mob/living/simple_animal/hostile/killertomato, - /mob/living/simple_animal/hostile/giant_spider, - /mob/living/simple_animal/hostile/giant_spider/hunter, + /mob/living/basic/giant_spider, + /mob/living/basic/giant_spider/hunter, /mob/living/simple_animal/hostile/blob/blobbernaut/independent, /mob/living/basic/carp/magic, /mob/living/basic/carp/magic/chaos, diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm deleted file mode 100644 index 5512880978d..00000000000 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ /dev/null @@ -1,421 +0,0 @@ -/** - * # Giant Spider - * - * A versatile mob which can occur from a variety of sources. - * - * A mob which can be created by botany or xenobiology. The basic type is the guard, which is slower but sturdy and outputs good damage. - * All spiders can produce webbing. Currently does not inject toxin into its target. - */ -/mob/living/simple_animal/hostile/giant_spider - name = "giant spider" - desc = "Furry and black, it makes you shudder to look at it. This one has deep red eyes." - icon_state = "guard" - icon_living = "guard" - icon_dead = "guard_dead" - mob_biotypes = MOB_ORGANIC|MOB_BUG - speak_emote = list("chitters") - emote_hear = list("chitters") - speak_chance = 5 - speed = 0 - turns_per_move = 5 - butcher_results = list(/obj/item/food/meat/slab/spider = 2, /obj/item/food/spiderleg = 8) - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - initial_language_holder = /datum/language_holder/spider - maxHealth = 80 - health = 80 - damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1) - flammable = TRUE - status_flags = NONE - unsuitable_cold_damage = 4 - unsuitable_heat_damage = 4 - obj_damage = 30 - melee_damage_lower = 20 - melee_damage_upper = 25 - combat_mode = TRUE - faction = list("spiders") - pass_flags = PASSTABLE - move_to_delay = 6 - attack_verb_continuous = "bites" - attack_verb_simple = "bite" - attack_sound = 'sound/weapons/bite.ogg' - attack_vis_effect = ATTACK_EFFECT_BITE - unique_name = 1 - gold_core_spawnable = HOSTILE_SPAWN - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE - see_in_dark = NIGHTVISION_FOV_RANGE - footstep_type = FOOTSTEP_MOB_CLAW - ///How much of a reagent the mob injects on attack - var/poison_per_bite = 0 - ///What reagent the mob injects targets with - var/poison_type = /datum/reagent/toxin/hunterspider - ///How quickly the spider can place down webbing. One is base speed, larger numbers are slower. - var/web_speed = 1 - ///What action is used to lay webs, some spiders have a version which can turn webs into walls. - var/web_type = /datum/action/cooldown/lay_web - ///The message that the mother spider left for this spider when the egg was layed. - var/directive = "" - /// Short description of what this mob is capable of, for radial menu uses - var/menu_description = "Versatile spider variant for frontline combat with high health and damage." - -/mob/living/simple_animal/hostile/giant_spider/Initialize(mapload) - . = ..() - var/datum/action/cooldown/lay_web/webbing = new web_type(src) - webbing.webbing_time *= web_speed - webbing.Grant(src) - - if(poison_per_bite) - AddElement(/datum/element/venomous, poison_type, poison_per_bite) - AddElement(/datum/element/nerfed_pulling, GLOB.typecache_general_bad_things_to_easily_move) - AddElement(/datum/element/prevent_attacking_of_types, GLOB.typecache_general_bad_hostile_attack_targets, "this tastes awful!") - -/mob/living/simple_animal/hostile/giant_spider/Login() - . = ..() - if(!. || !client) - return FALSE - var/datum/antagonist/spider/spider_antag = new(directive) - mind.add_antag_datum(spider_antag) - GLOB.spidermobs[src] = TRUE - -/mob/living/simple_animal/hostile/giant_spider/Destroy() - GLOB.spidermobs -= src - return ..() - -/mob/living/simple_animal/hostile/giant_spider/mob_negates_gravity() - if(locate(/obj/structure/spider/stickyweb) in loc) - return TRUE - return ..() - -/mob/living/simple_animal/hostile/giant_spider/expose_reagents(list/reagents, datum/reagents/source, methods=TOUCH, volume_modifier=1, show_message=TRUE) - . = ..() - for(var/datum/reagent/toxin/pestkiller/current_reagent in reagents) - apply_damage(50 * volume_modifier, STAMINA, BODY_ZONE_CHEST) - -/** - * # Spider Hunter - * - * A subtype of the giant spider with purple eyes and toxin injection. - * - * A subtype of the giant spider which is faster, has toxin injection, but less health and damage. This spider is only slightly slower than a human. - */ -/mob/living/simple_animal/hostile/giant_spider/hunter - name = "hunter spider" - desc = "Furry and black, it makes you shudder to look at it. This one has sparkling purple eyes." - icon_state = "hunter" - icon_living = "hunter" - icon_dead = "hunter_dead" - maxHealth = 50 - health = 50 - melee_damage_lower = 15 - melee_damage_upper = 20 - poison_per_bite = 5 - move_to_delay = 5 - speed = -0.1 - menu_description = "Fast spider variant specializing in catching running prey and toxin injection, but has less health and damage." - -/** - * # Spider Nurse - * - * A subtype of the giant spider with green eyes that specializes in support. - * - * A subtype of the giant spider which specializes in support skills. Nurses can place down webbing in a quarter of the time - * that other species can and can wrap other spiders' wounds, healing them. Note that it cannot heal itself. - */ -/mob/living/simple_animal/hostile/giant_spider/nurse - name = "nurse spider" - desc = "Furry and black, it makes you shudder to look at it. This one has brilliant green eyes." - icon_state = "nurse" - icon_living = "nurse" - icon_dead = "nurse_dead" - gender = FEMALE - butcher_results = list(/obj/item/food/meat/slab/spider = 2, /obj/item/food/spiderleg = 8, /obj/item/food/spidereggs = 4) - maxHealth = 40 - health = 40 - melee_damage_lower = 5 - melee_damage_upper = 10 - web_speed = 0.25 - web_type = /datum/action/cooldown/lay_web/sealer - menu_description = "Support spider variant specializing in healing their brethren and placing webbings very swiftly, but has very low amount of health and deals low damage." - ///The health HUD applied to the mob. - var/health_hud = DATA_HUD_MEDICAL_ADVANCED - -/mob/living/simple_animal/hostile/giant_spider/nurse/Initialize(mapload) - . = ..() - var/datum/atom_hud/datahud = GLOB.huds[health_hud] - datahud.show_to(src) - AddComponent(\ - /datum/component/healing_touch,\ - interaction_key = DOAFTER_SOURCE_SPIDER,\ - valid_targets_typecache = typecacheof(list(/mob/living/simple_animal/hostile/giant_spider)),\ - action_text = "%SOURCE% begins wrapping the wounds of %TARGET%.",\ - complete_text = "%SOURCE% wraps the wounds of %TARGET%.",\ - ) - -/** - * # Tarantula - * - * The tank of spider subtypes. Is incredibly slow when not on webbing, but has a lunge and the highest health and damage of any spider type. - * - * A subtype of the giant spider which specializes in pure strength and staying power. Is slowed down greatly when not on webbing, but can lunge - * to throw off attackers and possibly to stun them, allowing the tarantula to net an easy kill. - */ -/mob/living/simple_animal/hostile/giant_spider/tarantula - name = "tarantula" - desc = "Furry and black, it makes you shudder to look at it. This one has abyssal red eyes." - icon_state = "tarantula" - icon_living = "tarantula" - icon_dead = "tarantula_dead" - maxHealth = 300 // woah nelly - health = 300 - melee_damage_lower = 35 - melee_damage_upper = 40 - obj_damage = 100 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) - move_to_delay = 8 - speed = 1 - mob_size = MOB_SIZE_LARGE - gold_core_spawnable = NO_SPAWN - menu_description = "Tank spider variant with an enormous amount of health and damage, but is very slow when not on webbing. It also has a charge ability to close distance with a target after a small windup." - /// Charging ability - var/datum/action/cooldown/mob_cooldown/charge/basic_charge/charge - -/mob/living/simple_animal/hostile/giant_spider/tarantula/Initialize(mapload) - . = ..() - charge = new /datum/action/cooldown/mob_cooldown/charge/basic_charge() - charge.Grant(src) - AddElement(/datum/element/web_walker, /datum/movespeed_modifier/tarantula_web) - -/mob/living/simple_animal/hostile/giant_spider/tarantula/Destroy() - QDEL_NULL(charge) - return ..() - -/mob/living/simple_animal/hostile/giant_spider/tarantula/OpenFire() - if(client) - return - charge.Trigger(target = target) - -/** - * # Spider Viper - * - * The assassin of spider subtypes. Essentially a juiced up version of the hunter. - * - * A subtype of the giant spider which specializes in speed and poison. Injects a deadlier toxin than other spiders, moves extremely fast, - * but like the hunter has a limited amount of health. - */ -/mob/living/simple_animal/hostile/giant_spider/viper - name = "viper spider" - desc = "Furry and black, it makes you shudder to look at it. This one has effervescent purple eyes." - icon_state = "viper" - icon_living = "viper" - icon_dead = "viper_dead" - maxHealth = 40 - health = 40 - melee_damage_lower = 5 - melee_damage_upper = 5 - poison_per_bite = 5 - move_to_delay = 4 - poison_type = /datum/reagent/toxin/viperspider - speed = -0.5 - gold_core_spawnable = NO_SPAWN - menu_description = "Assassin spider variant with an unmatched speed and very deadly poison, but has very low amount of health and damage." - -/** - * # Spider Broodmother - * - * The reproductive line of spider subtypes. Is the only subtype to lay eggs, which is the only way for spiders to reproduce. - * - * A subtype of the giant spider which is the crux of a spider horde. Can lay normal eggs at any time which become normal spider types, - * but by consuming human bodies can lay special eggs which can become one of the more specialized subtypes, including possibly another broodmother. - * However, this spider subtype has no offensive capability and can be quickly dispatched without assistance from other spiders. They are also capable - * of sending messages to all living spiders, being a communication line for the rest of the horde. - */ -/mob/living/simple_animal/hostile/giant_spider/midwife - name = "broodmother spider" - desc = "Furry and black, it makes you shudder to look at it. This one has scintillating green eyes. Might also be hiding a real knife somewhere." - gender = FEMALE - icon_state = "midwife" - icon_living = "midwife" - icon_dead = "midwife_dead" - maxHealth = 60 - health = 60 - melee_damage_lower = 10 - melee_damage_upper = 15 - gold_core_spawnable = NO_SPAWN - web_speed = 0.5 - web_type = /datum/action/cooldown/lay_web/sealer - menu_description = "Royal spider variant specializing in reproduction and leadership, but has very low amount of health and deals low damage." - -/mob/living/simple_animal/hostile/giant_spider/midwife/Initialize(mapload) - . = ..() - var/datum/action/cooldown/wrap/wrapping = new(src) - wrapping.Grant(src) - - var/datum/action/lay_eggs/make_eggs = new(src) - make_eggs.Grant(src) - - var/datum/action/lay_eggs/enriched/make_better_eggs = new(src) - make_better_eggs.Grant(src) - - var/datum/action/set_spider_directive/give_orders = new(src) - give_orders.Grant(src) - - var/datum/action/command_spiders/not_hivemind_talk = new(src) - not_hivemind_talk.Grant(src) - -/** - * # Giant Ice Spider - * - * A giant spider immune to temperature damage. Injects frost oil. - * - * A subtype of the giant spider which is immune to temperature damage, unlike its normal counterpart. - * Currently unused in the game unless spawned by admins. - */ -/mob/living/simple_animal/hostile/giant_spider/ice - name = "giant ice spider" - 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) - minbodytemp = 0 - maxbodytemp = 1500 - poison_type = /datum/reagent/consumable/frostoil - color = rgb(114,228,250) - gold_core_spawnable = NO_SPAWN - menu_description = "Versatile ice spider variant for frontline combat with high health and damage. Immune to temperature damage." - -/** - * # Ice Nurse Spider - * - * A nurse spider immune to temperature damage. Injects frost oil. - * - * Same thing as the giant ice spider but mirrors the nurse subtype. Also unused. - */ -/mob/living/simple_animal/hostile/giant_spider/nurse/ice - name = "giant ice spider" - 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) - minbodytemp = 0 - maxbodytemp = 1500 - poison_type = /datum/reagent/consumable/frostoil - color = rgb(114,228,250) - menu_description = "Support ice spider variant specializing in healing their brethren and placing webbings very swiftly, but has very low amount of health and deals low damage. Immune to temperature damage." - -/** - * # Ice Hunter Spider - * - * A hunter spider immune to temperature damage. Injects frost oil. - * - * Same thing as the giant ice spider but mirrors the hunter subtype. Also unused. - */ -/mob/living/simple_animal/hostile/giant_spider/hunter/ice - name = "giant ice spider" - 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) - minbodytemp = 0 - maxbodytemp = 1500 - poison_type = /datum/reagent/consumable/frostoil - color = rgb(114,228,250) - gold_core_spawnable = NO_SPAWN - menu_description = "Fast ice spider variant specializing in catching running prey and frost oil injection, but has less health and damage. Immune to temperature damage." - -/** - * # Scrawny Hunter Spider - * - * A hunter spider that trades damage for health, unable to smash enviroments. - * - * Mainly used as a minor threat in abandoned places, such as areas in maintenance or a ruin. - */ -/mob/living/simple_animal/hostile/giant_spider/hunter/scrawny - name = "scrawny spider" - environment_smash = ENVIRONMENT_SMASH_NONE - health = 60 - maxHealth = 60 - melee_damage_lower = 5 - melee_damage_upper = 10 - desc = "Furry and black, it makes you shudder to look at it. This one has sparkling purple eyes, and looks abnormally thin and frail." - menu_description = "Fast spider variant specializing in catching running prey and toxin injection, but has less damage than a normal hunter spider at the cost of a little more health." - -/** - * # Scrawny Tarantula - * - * A weaker version of the Tarantula, unable to smash enviroments. - * - * Mainly used as a moderately strong but slow threat in abandoned places, such as areas in maintenance or a ruin. - */ -/mob/living/simple_animal/hostile/giant_spider/tarantula/scrawny - name = "scrawny tarantula" - environment_smash = ENVIRONMENT_SMASH_NONE - health = 150 - maxHealth = 150 - melee_damage_lower = 20 - melee_damage_upper = 25 - desc = "Furry and black, it makes you shudder to look at it. This one has abyssal red eyes, and looks abnormally thin and frail." - menu_description = "A weaker variant of the tarantula with reduced amount of health and damage, very slow when not on webbing. It also has a charge ability to close distance with a target after a small windup." - -/** - * # Scrawny Nurse Spider - * - * A weaker version of the nurse spider with reduced health, unable to smash enviroments. - * - * Mainly used as a weak threat in abandoned places, such as areas in maintenance or a ruin. - */ -/mob/living/simple_animal/hostile/giant_spider/nurse/scrawny - name = "scrawny nurse spider" - environment_smash = ENVIRONMENT_SMASH_NONE - health = 30 - maxHealth = 30 - desc = "Furry and black, it makes you shudder to look at it. This one has brilliant green eyes, and looks abnormally thin and frail." - menu_description = "Weaker version of the nurse spider, specializing in healing their brethren and placing webbings very swiftly, but has very low amount of health and deals low damage." - -/** - * # Flesh Spider - * - * A giant spider subtype specifically created by changelings. Built to be self-sufficient, unlike other spider types. - * - * A subtype of giant spider which only occurs from changelings. Has the base stats of a hunter, but they can heal themselves. - * They also produce web in 70% of the time of the base spider. They also occasionally leave puddles of blood when they walk around. Flavorful! - */ -/mob/living/simple_animal/hostile/giant_spider/hunter/flesh - desc = "A odd fleshy creature in the shape of a spider. Its eyes are pitch black and soulless." - icon_state = "flesh_spider" - icon_living = "flesh_spider" - icon_dead = "flesh_spider_dead" - web_speed = 0.7 - menu_description = "Self-sufficient spider variant capable of healing themselves and producing webbbing fast, but has less health and damage." - -/mob/living/simple_animal/hostile/giant_spider/hunter/flesh/Initialize(mapload) - . = ..() - AddComponent(/datum/component/blood_walk, \ - blood_type = /obj/effect/decal/cleanable/blood/bubblegum, \ - blood_spawn_chance = 5) - AddComponent(\ - /datum/component/healing_touch,\ - heal_brute = maxHealth * 0.5,\ - heal_burn = maxHealth * 0.5,\ - self_targetting = HEALING_TOUCH_SELF_ONLY,\ - interaction_key = DOAFTER_SOURCE_SPIDER,\ - valid_targets_typecache = typecacheof(list(/mob/living/simple_animal/hostile/giant_spider/hunter/flesh)),\ - extra_checks = CALLBACK(src, PROC_REF(can_mend)),\ - action_text = "%SOURCE% begins mending themselves...",\ - complete_text = "%SOURCE%'s wounds mend together.",\ - ) - -/// Prevent you from healing other flesh spiders, or healing when on fire -/mob/living/simple_animal/hostile/giant_spider/hunter/flesh/proc/can_mend(mob/living/source, mob/living/target) - if (on_fire) - balloon_alert(src, "on fire!") - return FALSE - return TRUE - -/** - * # Viper Spider (Wizard) - * - * A viper spider buffed slightly so I don't need to hear anyone complain about me nerfing an already useless wizard ability. - * - * A viper spider with buffed attributes. All I changed was its health value and gave it the ability to ventcrawl. The crux of the wizard meta. - */ -/mob/living/simple_animal/hostile/giant_spider/viper/wizard - maxHealth = 80 - health = 80 - menu_description = "Stronger assassin spider variant with an unmatched speed, high amount of health and very deadly poison, but deals very low amount of damage. It also has ability to ventcrawl." - -/mob/living/simple_animal/hostile/giant_spider/viper/wizard/Initialize(mapload) - . = ..() - ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm index 4d1dac06918..0edc1f31420 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm @@ -38,27 +38,3 @@ AddElement(/datum/element/simple_flying) ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) - -/mob/living/simple_animal/hostile/retaliate/bat/sgt_araneus //Despite being a bat for... reasons, this is now a spider, and is one of the HoS' pets. - name = "Sergeant Araneus" - real_name = "Sergeant Araneus" - desc = "A fierce companion of the Head of Security, this spider has been carefully trained by Nanotrasen specialists. Its beady, staring eyes send shivers down your spine." - emote_hear = list("chitters") - faction = list("spiders") - harm_intent_damage = 3 - icon_dead = "guard_dead" - icon_gib = "guard_dead" - icon_living = "guard" - icon_state = "guard" - maxHealth = 250 - health = 250 - melee_damage_lower = 15 - melee_damage_upper = 20 - movement_type = GROUND - response_help_continuous = "pets" - response_help_simple = "pet" - turns_per_move = 10 - -/mob/living/simple_animal/hostile/retaliate/bat/sgt_araneus/Initialize(mapload) - . = ..() - AddElement(/datum/element/pet_bonus, "chitters proudly!") diff --git a/code/modules/mob_spawn/ghost_roles/spider_roles.dm b/code/modules/mob_spawn/ghost_roles/spider_roles.dm index 13415939035..83f8fb537a7 100644 --- a/code/modules/mob_spawn/ghost_roles/spider_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/spider_roles.dm @@ -59,9 +59,9 @@ var/obj/structure/spider/eggcluster/egg /// The types of spiders that the spawner can produce var/list/potentialspawns = list( - /mob/living/simple_animal/hostile/giant_spider, - /mob/living/simple_animal/hostile/giant_spider/hunter, - /mob/living/simple_animal/hostile/giant_spider/nurse, + /mob/living/basic/giant_spider, + /mob/living/basic/giant_spider/hunter, + /mob/living/basic/giant_spider/nurse, ) /obj/effect/mob_spawn/ghost_role/spider/Initialize(mapload) @@ -102,7 +102,7 @@ to_chat(user, span_warning("\The [src] is not ready to hatch yet!")) return FALSE -/obj/effect/mob_spawn/ghost_role/spider/special(mob/living/simple_animal/hostile/giant_spider/spawned_mob, mob/mob_possessor) +/obj/effect/mob_spawn/ghost_role/spider/special(mob/living/basic/giant_spider/spawned_mob, mob/mob_possessor) spawned_mob.directive = directive egg.spawner = null QDEL_NULL(egg) @@ -114,9 +114,9 @@ you_are_text = "You are an enriched spider." cluster_type = /obj/structure/spider/eggcluster/enriched potentialspawns = list( - /mob/living/simple_animal/hostile/giant_spider/tarantula, - /mob/living/simple_animal/hostile/giant_spider/viper, - /mob/living/simple_animal/hostile/giant_spider/midwife, + /mob/living/basic/giant_spider/tarantula, + /mob/living/basic/giant_spider/viper, + /mob/living/basic/giant_spider/midwife, ) /obj/effect/mob_spawn/ghost_role/spider/bloody @@ -127,7 +127,7 @@ directive = "You are the spawn of a vicious changeling. You have no ambitions except to wreak havoc and ensure your own survival. You are aggressive to all living beings outside of your species, including changelings." cluster_type = /obj/structure/spider/eggcluster/bloody potentialspawns = list( - /mob/living/simple_animal/hostile/giant_spider/hunter/flesh, + /mob/living/basic/giant_spider/hunter/flesh, ) /obj/effect/mob_spawn/ghost_role/spider/midwife @@ -137,7 +137,7 @@ directive = "Ensure the survival of the spider species and overtake whatever structure you find yourself in." cluster_type = /obj/structure/spider/eggcluster/midwife potentialspawns = list( - /mob/living/simple_animal/hostile/giant_spider/midwife, + /mob/living/basic/giant_spider/midwife, ) /** @@ -153,7 +153,7 @@ var/list/spider_list = list() var/list/display_spiders = list() for(var/choice in potentialspawns) - var/mob/living/simple_animal/hostile/giant_spider/spider = choice + var/mob/living/basic/giant_spider/spider = choice spider_list[initial(spider.name)] = choice var/datum/radial_menu_choice/option = new diff --git a/code/modules/movespeed/modifiers/mobs.dm b/code/modules/movespeed/modifiers/mobs.dm index 03e51a533d5..675e01f1e53 100644 --- a/code/modules/movespeed/modifiers/mobs.dm +++ b/code/modules/movespeed/modifiers/mobs.dm @@ -131,3 +131,9 @@ /datum/movespeed_modifier/auto_wash multiplicative_slowdown = 3 + +/datum/movespeed_modifier/player_spider_modifier + variable = TRUE + +/datum/movespeed_modifier/netherworld_enrage + variable = TRUE diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index 0c788f4a0d7..2934306b3c6 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -126,7 +126,7 @@ /datum/chemical_reaction/slime/slimemobspawn/spider/summon_mobs(datum/reagents/holder, turf/T) T.visible_message(span_danger("The slime extract begins to vibrate crikey-ingly!")) - addtimer(CALLBACK(src, PROC_REF(chemical_mob_spawn), holder, 3, "Traitor Spider Slime", /mob/living/simple_animal/hostile/giant_spider/midwife, FACTION_NEUTRAL, FALSE), 50) + addtimer(CALLBACK(src, PROC_REF(chemical_mob_spawn), holder, 3, "Traitor Spider Slime", /mob/living/basic/giant_spider/midwife, FACTION_NEUTRAL, FALSE), 50) //Silver diff --git a/code/modules/spells/spell_types/shapeshift/shapechange.dm b/code/modules/spells/spell_types/shapeshift/shapechange.dm index 3079a7d5b86..95ca1a81dab 100644 --- a/code/modules/spells/spell_types/shapeshift/shapechange.dm +++ b/code/modules/spells/spell_types/shapeshift/shapechange.dm @@ -15,6 +15,6 @@ /mob/living/basic/pet/dog/corgi, /mob/living/basic/carp/magic/chaos, /mob/living/simple_animal/bot/secbot/ed209, - /mob/living/simple_animal/hostile/giant_spider/viper/wizard, + /mob/living/basic/giant_spider/viper/wizard, /mob/living/simple_animal/hostile/construct/juggernaut/mystic, ) diff --git a/code/modules/unit_tests/simple_animal_freeze.dm b/code/modules/unit_tests/simple_animal_freeze.dm index 3e4f7f0cf51..823483f7251 100644 --- a/code/modules/unit_tests/simple_animal_freeze.dm +++ b/code/modules/unit_tests/simple_animal_freeze.dm @@ -149,20 +149,6 @@ /mob/living/simple_animal/hostile/construct/wraith/noncult, /mob/living/simple_animal/hostile/dark_wizard, /mob/living/simple_animal/hostile/eyeball, - /mob/living/simple_animal/hostile/giant_spider, - /mob/living/simple_animal/hostile/giant_spider/hunter, - /mob/living/simple_animal/hostile/giant_spider/hunter/flesh, - /mob/living/simple_animal/hostile/giant_spider/hunter/ice, - /mob/living/simple_animal/hostile/giant_spider/hunter/scrawny, - /mob/living/simple_animal/hostile/giant_spider/ice, - /mob/living/simple_animal/hostile/giant_spider/midwife, - /mob/living/simple_animal/hostile/giant_spider/nurse, - /mob/living/simple_animal/hostile/giant_spider/nurse/ice, - /mob/living/simple_animal/hostile/giant_spider/nurse/scrawny, - /mob/living/simple_animal/hostile/giant_spider/tarantula, - /mob/living/simple_animal/hostile/giant_spider/tarantula/scrawny, - /mob/living/simple_animal/hostile/giant_spider/viper, - /mob/living/simple_animal/hostile/giant_spider/viper/wizard, /mob/living/simple_animal/hostile/gorilla, /mob/living/simple_animal/hostile/gorilla/cargo_domestic, /mob/living/simple_animal/hostile/guardian, @@ -256,7 +242,6 @@ /mob/living/simple_animal/hostile/regalrat/controlled, /mob/living/simple_animal/hostile/retaliate, /mob/living/simple_animal/hostile/retaliate/bat, - /mob/living/simple_animal/hostile/retaliate/bat/sgt_araneus, /mob/living/simple_animal/hostile/retaliate/clown, /mob/living/simple_animal/hostile/retaliate/clown/banana, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk, diff --git a/tgstation.dme b/tgstation.dme index 3c4307df1b4..d8e35cb977b 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3764,9 +3764,10 @@ #include "code\modules\mob\living\basic\lavaland\bileworm\bileworm_vileworm.dm" #include "code\modules\mob\living\basic\pets\dog.dm" #include "code\modules\mob\living\basic\pets\pet.dm" -#include "code\modules\mob\living\basic\retaliate\garden_gnome.dm" -#include "code\modules\mob\living\basic\retaliate\ghost.dm" #include "code\modules\mob\living\basic\ruin_defender\stickman.dm" +#include "code\modules\mob\living\basic\space_fauna\faithless.dm" +#include "code\modules\mob\living\basic\space_fauna\garden_gnome.dm" +#include "code\modules\mob\living\basic\space_fauna\ghost.dm" #include "code\modules\mob\living\basic\space_fauna\carp\carp.dm" #include "code\modules\mob\living\basic\space_fauna\carp\carp_abilities.dm" #include "code\modules\mob\living\basic\space_fauna\carp\carp_ai_actions.dm" @@ -3775,7 +3776,9 @@ #include "code\modules\mob\living\basic\space_fauna\carp\carp_controllers.dm" #include "code\modules\mob\living\basic\space_fauna\carp\magicarp.dm" #include "code\modules\mob\living\basic\space_fauna\carp\megacarp.dm" -#include "code\modules\mob\living\basic\space_fauna\faithless\faithless.dm" +#include "code\modules\mob\living\basic\space_fauna\giant_spider\giant_spider.dm" +#include "code\modules\mob\living\basic\space_fauna\giant_spider\giant_spider_ai.dm" +#include "code\modules\mob\living\basic\space_fauna\giant_spider\spider_variants.dm" #include "code\modules\mob\living\basic\space_fauna\giant_spider\spider_abilities\hivemind.dm" #include "code\modules\mob\living\basic\space_fauna\giant_spider\spider_abilities\lay_eggs.dm" #include "code\modules\mob\living\basic\space_fauna\giant_spider\spider_abilities\web.dm" @@ -3996,7 +3999,6 @@ #include "code\modules\mob\living\simple_animal\hostile\cat_butcher.dm" #include "code\modules\mob\living\simple_animal\hostile\dark_wizard.dm" #include "code\modules\mob\living\simple_animal\hostile\eyeballs.dm" -#include "code\modules\mob\living\simple_animal\hostile\giant_spider.dm" #include "code\modules\mob\living\simple_animal\hostile\goose.dm" #include "code\modules\mob\living\simple_animal\hostile\headcrab.dm" #include "code\modules\mob\living\simple_animal\hostile\heretic_monsters.dm" diff --git a/tools/UpdatePaths/Scripts/73350_simple_spiders_to_basic.txt b/tools/UpdatePaths/Scripts/73350_simple_spiders_to_basic.txt new file mode 100644 index 00000000000..090a8ef6340 --- /dev/null +++ b/tools/UpdatePaths/Scripts/73350_simple_spiders_to_basic.txt @@ -0,0 +1,4 @@ +# transforms simple spiders to the new basic spiders + +/mob/living/simple_animal/hostile/giant_spider/@SUBTYPES : /mob/living/basic/giant_spider/@SUBTYPES{@OLD} +/mob/living/simple_animal/hostile/retaliate/bat/sgt_araneus : /mob/living/basic/giant_spider/sgt_araneus{@OLD}