diff --git a/code/__DEFINES/span.dm b/code/__DEFINES/span.dm
index 361c4d41b81..76ab9ccf841 100644
--- a/code/__DEFINES/span.dm
+++ b/code/__DEFINES/span.dm
@@ -115,6 +115,7 @@
#define span_smallnoticeital(str) ("" + str + "")
#define span_spiderbroodmother(str) ("" + str + "")
#define span_spiderscout(str) ("" + str + "")
+#define span_spiderbreacher(str) ("" + str + "")
#define span_suicide(str) ("" + str + "")
#define span_suppradio(str) ("" + str + "")
#define span_syndradio(str) ("" + str + "")
diff --git a/code/game/objects/effects/spiderwebs.dm b/code/game/objects/effects/spiderwebs.dm
index 9b44d3507db..9a3d6c9c8e3 100644
--- a/code/game/objects/effects/spiderwebs.dm
+++ b/code/game/objects/effects/spiderwebs.dm
@@ -194,6 +194,22 @@
. = ..()
AddComponent(/datum/component/caltrop, min_damage = 20, max_damage = 30, flags = CALTROP_NOSTUN | CALTROP_BYPASS_SHOES)
+/obj/structure/spider/reflector
+ name = "Reflective silk screen"
+ icon = 'icons/effects/effects.dmi'
+ desc = "Made up of an extremly reflective silk material looking at it hurts."
+ icon_state = "reflector"
+ max_integrity = 30
+ density = TRUE
+ opacity = TRUE
+ anchored = TRUE
+ flags_ricochet = RICOCHET_SHINY | RICOCHET_HARD
+ receive_ricochet_chance_mod = INFINITY
+
+/obj/structure/spider/reflector/Initialize(mapload)
+ . = ..()
+ air_update_turf(TRUE, TRUE)
+
/obj/structure/spider/effigy
name = "web effigy"
icon = 'icons/effects/effects.dmi'
diff --git a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm
index 8cb7d8398bf..5db32316753 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm
@@ -37,11 +37,12 @@
maxHealth = 125
health = 125
obj_damage = 45
+
melee_damage_lower = 25
melee_damage_upper = 30
speed = 5
player_speed_modifier = -3.1
- menu_description = "Slow spider variant specializing in stalking and ambushing prey, above avarage health and damage with a strong grip."
+ menu_description = "Slow spider, with a strong disarming pull and above avarage health and damage."
/mob/living/basic/spider/giant/ambush/Initialize(mapload)
. = ..()
@@ -72,7 +73,7 @@
obj_damage = 45
speed = 5
player_speed_modifier = -4
- menu_description = "Tanky and strong for the defense of the nest and other spiders."
+ menu_description = "Tanky and strong able to shed a carcass for protection."
/mob/living/basic/spider/giant/guard/Initialize(mapload)
. = ..()
@@ -100,7 +101,7 @@
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."
+ menu_description = "Fast spider with toxin injection, but has less health and damage."
/mob/living/basic/spider/giant/hunter/Initialize(mapload)
. = ..()
@@ -129,7 +130,7 @@
speed = 2.8
player_speed_modifier = -3.1
sight = SEE_SELF|SEE_MOBS
- menu_description = "Fast spider variant specializing in scouting and alerting of prey, with the ability to travel in vents."
+ menu_description = "Fast spider able to see enemies through walls, send messages to the nest and the ability to travel in vents."
/mob/living/basic/spider/giant/scout/Initialize(mapload)
. = ..()
@@ -162,7 +163,7 @@
player_speed_modifier = -3.1
web_speed = 0.25
web_type = /datum/action/cooldown/mob_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."
+ menu_description = "Avarage speed spider able to heal other spiders and itself together with a fast web laying capability, has low damage and health."
///The health HUD applied to the mob.
var/health_hud = DATA_HUD_MEDICAL_ADVANCED
@@ -209,7 +210,7 @@
speed = 4
player_speed_modifier = -3.1
web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer
- menu_description = "Support spider variant specializing in contruction to protect their brethren, but has very low amount of health and deals low damage."
+ menu_description = "Avarage speed spider with self healing abilities and multiple web types to reinforce the nest with little to no damage and low health."
/mob/living/basic/spider/giant/tangle/Initialize(mapload)
. = ..()
@@ -246,6 +247,97 @@
return FALSE
return TRUE
+/**
+ * ### Spider Tank
+ * A subtype of the giant spider, specialized in taking damage.
+ * This spider is only slightly slower than a human.
+ */
+/mob/living/basic/spider/giant/tank
+ name = "tank spider"
+ desc = "Furry and Purple with a white top, it makes you shudder to look at it. This one has bright yellow eyes."
+ icon_state = "tank"
+ icon_living = "tank"
+ icon_dead = "tank_dead"
+ maxHealth = 500
+ health = 500
+ damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1)
+ melee_damage_lower = 5
+ melee_damage_upper = 5
+ obj_damage = 15
+ speed = 5
+ player_speed_modifier = -4
+ menu_description = "Extremly tanky with very poor offence. Able to self heal and lay reflective silk screens."
+
+/mob/living/basic/spider/giant/tank/Initialize(mapload)
+ . = ..()
+ var/datum/action/cooldown/mob_cooldown/lay_web/web_reflector/reflector_web = new(src)
+ reflector_web.Grant(src)
+
+ var/datum/action/cooldown/mob_cooldown/lay_web/web_passage/passage_web = new(src)
+ passage_web.Grant(src)
+
+ AddElement(/datum/element/web_walker, /datum/movespeed_modifier/below_average_web)
+
+ AddComponent(/datum/component/healing_touch,\
+ heal_brute = 50,\
+ heal_burn = 50,\
+ heal_time = 5 SECONDS,\
+ self_targetting = HEALING_TOUCH_SELF_ONLY,\
+ interaction_key = DOAFTER_SOURCE_SPIDER,\
+ valid_targets_typecache = typecacheof(list(/mob/living/basic/spider/growing/young/tank, /mob/living/basic/spider/giant/tank)),\
+ 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 when on fire
+/mob/living/basic/spider/giant/tank/proc/can_mend(mob/living/source, mob/living/target)
+ if (on_fire)
+ balloon_alert(src, "on fire!")
+ return FALSE
+ return TRUE
+
+/**
+ * ### Spider Breacher
+ * A subtype of the giant spider, specialized in breaching and invasion.
+ * This spider is only slightly slower than a human.
+ */
+/mob/living/basic/spider/giant/breacher
+ name = "breacher spider"
+ desc = "Furry and light brown with dark brown and red highlights, it makes you shudder to look at it. This one has bright red eyes."
+ icon_state = "breacher"
+ icon_living = "breacher"
+ icon_dead = "breacher_dead"
+ maxHealth = 120
+ health = 120
+ melee_damage_lower = 5
+ melee_damage_upper = 10
+ unsuitable_atmos_damage = 0
+ minimum_survivable_temperature = 0
+ maximum_survivable_temperature = 700
+ unsuitable_cold_damage = 0
+ wound_bonus = 25
+ bare_wound_bonus = 50
+ sharpness = SHARP_EDGED
+ obj_damage = 60
+ web_speed = 0.25
+ limb_destroyer = 50
+ speed = 5
+ player_speed_modifier = -4
+ sight = SEE_TURFS
+ menu_description = "Atmospherically resistant with the ability to destroy walls and limbs, and to send warnings to the nest."
+
+/mob/living/basic/spider/giant/breacher/Initialize(mapload)
+ . = ..()
+ var/datum/action/cooldown/mob_cooldown/lay_web/solid_web/web_solid = new(src)
+ web_solid.Grant(src)
+
+ var/datum/action/cooldown/mob_cooldown/command_spiders/warning_spiders/spiders_warning = new(src)
+ spiders_warning.Grant(src)
+
+ AddElement(/datum/element/tear_wall)
+ AddElement(/datum/element/web_walker, /datum/movespeed_modifier/below_average_web)
+
/**
* ### Tarantula
*
@@ -259,8 +351,8 @@
icon_state = "tarantula"
icon_living = "tarantula"
icon_dead = "tarantula_dead"
- maxHealth = 360 // woah nelly
- health = 360
+ maxHealth = 400 // woah nelly
+ health = 400
melee_damage_lower = 35
melee_damage_upper = 40
obj_damage = 100
@@ -277,16 +369,9 @@
/mob/living/basic/spider/giant/tarantula/Initialize(mapload)
. = ..()
- var/datum/action/cooldown/mob_cooldown/lay_web/solid_web/web_solid = new(src)
- web_solid.Grant(src)
-
- var/datum/action/cooldown/mob_cooldown/lay_web/web_passage/passage_web = new(src)
- passage_web.Grant(src)
-
charge = new /datum/action/cooldown/mob_cooldown/charge/basic_charge()
charge.Grant(src)
- AddElement(/datum/element/tear_wall)
AddElement(/datum/element/web_walker, /datum/movespeed_modifier/slow_web)
/mob/living/basic/spider/giant/tarantula/Destroy()
@@ -373,11 +458,14 @@
var/datum/action/cooldown/mob_cooldown/wrap/wrapping = new(src)
wrapping.Grant(src)
- var/datum/action/cooldown/mob_cooldown/lay_eggs/make_eggs = new(src)
- make_eggs.Grant(src)
+ var/datum/action/cooldown/mob_cooldown/lay_eggs/make_eggs_tier1 = new(src)
+ make_eggs_tier1.Grant(src)
+
+ var/datum/action/cooldown/mob_cooldown/lay_eggs/abnormal/make_eggs_tier2 = new(src)
+ make_eggs_tier2.Grant(src)
- var/datum/action/cooldown/mob_cooldown/lay_eggs/enriched/make_better_eggs = new(src)
- make_better_eggs.Grant(src)
+ var/datum/action/cooldown/mob_cooldown/lay_eggs/enriched/make_eggs_tier3 = new(src)
+ make_eggs_tier3.Grant(src)
var/datum/action/cooldown/mob_cooldown/set_spider_directive/give_orders = new(src)
give_orders.Grant(src)
diff --git a/code/modules/mob/living/basic/space_fauna/spider/spider.dm b/code/modules/mob/living/basic/space_fauna/spider/spider.dm
index 53b48129e2e..9ce7f50d017 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/spider.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/spider.dm
@@ -54,6 +54,7 @@
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!")
AddElement(/datum/element/cliff_walking)
+ AddComponent(/datum/component/health_scaling_effects, min_health_slowdown = 1.5)
if(poison_per_bite)
AddElement(/datum/element/venomous, poison_type, poison_per_bite)
diff --git a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/hivemind.dm b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/hivemind.dm
index bbeb2b28bb5..790879b0de2 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/hivemind.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/hivemind.dm
@@ -84,3 +84,16 @@
/datum/action/cooldown/mob_cooldown/command_spiders/communication_spiders/format_message(mob/living/user, message)
return span_spiderscout("Report from [user]: [message]")
+
+/**
+ * Sends a smaller message to all currently living spiders.
+ */
+/datum/action/cooldown/mob_cooldown/command_spiders/warning_spiders
+ name = "Warning"
+ desc = "Send a warning to all living spiders."
+ button_icon = 'icons/mob/actions/actions_animal.dmi'
+ button_icon_state = "warning"
+
+/datum/action/cooldown/mob_cooldown/command_spiders/warning_spiders/format_message(mob/living/user, message)
+ return span_spiderbreacher("Warning from [user]: [message]")
+
diff --git a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/lay_eggs.dm b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/lay_eggs.dm
index 01477cd8435..5979c98448d 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/lay_eggs.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/lay_eggs.dm
@@ -5,8 +5,8 @@
button_icon_state = "lay_eggs"
background_icon_state = "bg_alien"
overlay_icon_state = "bg_alien_border"
- cooldown_time = 0
- melee_cooldown_time = 0
+ cooldown_time = 20 SECONDS
+ melee_cooldown_time = 5 SECONDS
shared_cooldown = NONE
click_to_activate = FALSE
///How long it takes for a broodmother to lay eggs.
@@ -60,10 +60,18 @@
if (spider_directive)
new_eggs.directive = spider_directive.current_directive
+/datum/action/cooldown/mob_cooldown/lay_eggs/abnormal
+ name = "Lay Abnormal Eggs"
+ desc = "Lay a cluster of eggs, which will soon grow into a uncommon spider."
+ button_icon_state = "lay_abnormal_eggs"
+ cooldown_time = 180 SECONDS
+ egg_type = /obj/effect/mob_spawn/ghost_role/spider/abnormal
+
/datum/action/cooldown/mob_cooldown/lay_eggs/enriched
name = "Lay Enriched Eggs"
- desc = "Lay a cluster of eggs, which will soon grow into a greater spider. Requires you drain a human per cluster of these eggs."
+ desc = "Lay a cluster of eggs, which will soon grow into a rare spider. Requires you drain a human per cluster of these eggs."
button_icon_state = "lay_enriched_eggs"
+ cooldown_time = 60 SECONDS
egg_type = /obj/effect/mob_spawn/ghost_role/spider/enriched
/// How many charges we have to make eggs
var/charges = 0
diff --git a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/web.dm b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/web.dm
index d4f587c9386..fa44cb35b2d 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/web.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/web.dm
@@ -117,7 +117,6 @@
/datum/action/cooldown/mob_cooldown/lay_web/web_passage/plant_web(turf/target_turf, obj/structure/spider/stickyweb/existing_web)
new /obj/structure/spider/passage(target_turf)
-
/datum/action/cooldown/mob_cooldown/lay_web/sticky_web
name = "Spin Sticky Web"
desc = "Spin a sticky web to trap intruders."
@@ -171,3 +170,16 @@
/datum/action/cooldown/mob_cooldown/web_effigy/Activate()
new /obj/structure/spider/effigy(get_turf(owner))
return ..()
+
+/datum/action/cooldown/mob_cooldown/lay_web/web_reflector
+ name = "Spin reflective silk screen"
+ desc = "Spin a web to reflect missiles from the nest."
+ button_icon_state = "lay_web_reflector"
+ cooldown_time = 30 SECONDS
+ webbing_time = 4 SECONDS
+
+/datum/action/cooldown/mob_cooldown/lay_web/web_reflector/obstructed_by_other_web()
+ return !!(locate(/obj/structure/spider/reflector) in get_turf(owner))
+
+/datum/action/cooldown/mob_cooldown/lay_web/web_reflector/plant_web(turf/target_turf, obj/structure/spider/stickyweb/existing_web)
+ new /obj/structure/spider/reflector(target_turf)
diff --git a/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling.dm b/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling.dm
index c949b438683..f36b1bc46ba 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling.dm
@@ -39,6 +39,7 @@
AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW, volume = 0.2) // they're small but you can hear 'em
AddElement(/datum/element/web_walker, /datum/movespeed_modifier/spiderling_web)
AddElement(/datum/element/ai_retaliate)
+ AddElement(/datum/element/web_walker, /datum/movespeed_modifier/fast_web)
// keep in mind we have infinite range (the entire pipenet is our playground, it's just a matter of random choice as to where we end up) so lower and upper both have their gives and takes.
// but, also remember the more time we aren't in a vent, the more susceptible we are to dying to anything and everything.
diff --git a/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling_subtypes.dm b/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling_subtypes.dm
index 5d42ca5cb61..06d086d8967 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling_subtypes.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling_subtypes.dm
@@ -1,5 +1,4 @@
-// This whole file is just a container for the spiderling subtypes that actually differentiate into different young spiders. None of them are particularly special as of now.
-
+/// This whole file is just a container for the spiderling subtypes that actually differentiate into different young spiders. None of them are particularly special as of now.
/// Will differentiate into the base young spider (known colloquially as the "guard" spider).
/mob/living/basic/spider/growing/spiderling/guard
grow_as = /mob/living/basic/spider/growing/young/guard
@@ -52,6 +51,24 @@
icon_state = "tangle_spiderling"
icon_dead = "tangle_spiderling_dead"
+/// Will differentiate into the "tank" young spider.
+/mob/living/basic/spider/growing/spiderling/tank
+ grow_as = /mob/living/basic/spider/growing/young/tank
+ name = "tank spiderling"
+ desc = "Furry and purple, it looks defenseless. This one has dim yellow eyes."
+ icon = 'icons/mob/simple/arachnoid.dmi'
+ icon_state = "tank_spiderling"
+ icon_dead = "tank_spiderling_dead"
+
+/// Will differentiate into the "breacher" young spider.
+/mob/living/basic/spider/growing/spiderling/breacher
+ grow_as = /mob/living/basic/spider/growing/young/breacher
+ name = "breacher spiderling"
+ desc = "Furry and baige, it looks defenseless. This one has dim red eyes."
+ icon = 'icons/mob/simple/arachnoid.dmi'
+ icon_state = "breacher_spiderling"
+ icon_dead = "breacher_spiderling_dead"
+
/// Will differentiate into the "midwife" young spider.
/mob/living/basic/spider/growing/spiderling/midwife
grow_as = /mob/living/basic/spider/growing/young/midwife
diff --git a/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider.dm b/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider.dm
index 50ec85e342c..bdaf7d03faa 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider.dm
@@ -47,3 +47,6 @@
/datum/ai_planning_subtree/find_unwebbed_turf,
/datum/ai_planning_subtree/spin_web,
)
+
+/mob/living/basic/spider/growing/young/start_pulling(atom/movable/pulled_atom, state, force = move_force, supress_message = FALSE) // we're TOO FUCKING WEAK
+ return
diff --git a/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider_subtypes.dm b/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider_subtypes.dm
index f5d128e41b7..de44bc74180 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider_subtypes.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider_subtypes.dm
@@ -11,6 +11,11 @@
melee_damage_upper = 15
speed = 0.7
+/mob/living/basic/spider/growing/young/guard/Initialize(mapload)
+ . = ..()
+
+ AddElement(/datum/element/web_walker, /datum/movespeed_modifier/average_web)
+
/// Will differentiate into the "ambush" giant spider.
/mob/living/basic/spider/growing/young/ambush
grow_as = /mob/living/basic/spider/giant/ambush
@@ -27,6 +32,8 @@
/mob/living/basic/spider/growing/young/ambush/Initialize(mapload)
. = ..()
+ AddElement(/datum/element/web_walker, /datum/movespeed_modifier/slow_web)
+
var/datum/action/cooldown/mob_cooldown/sneak/spider/sneak_web = new(src)
sneak_web.Grant(src)
@@ -66,6 +73,11 @@
speed = 0.5
poison_per_bite = 2
+/mob/living/basic/spider/growing/young/Initialize(mapload)
+ . = ..()
+
+ AddElement(/datum/element/web_walker, /datum/movespeed_modifier/fast_web)
+
/// Will differentiate into the "nurse" giant spider.
/mob/living/basic/spider/growing/young/nurse
grow_as = /mob/living/basic/spider/giant/nurse
@@ -98,6 +110,8 @@
complete_text = "%SOURCE% wraps the wounds of %TARGET%.",\
)
+ AddElement(/datum/element/web_walker, /datum/movespeed_modifier/average_web)
+
/// Will differentiate into the "tangle" giant spider.
/mob/living/basic/spider/growing/young/tangle
grow_as = /mob/living/basic/spider/giant/tangle
@@ -130,6 +144,8 @@
complete_text = "%SOURCE%'s wounds mend together.",\
)
+ AddElement(/datum/element/web_walker, /datum/movespeed_modifier/average_web)
+
/// Prevent you from healing other tangle spiders, or healing when on fire
/mob/living/basic/spider/growing/young/tangle/proc/can_mend(mob/living/source, mob/living/target)
if (on_fire)
@@ -137,6 +153,64 @@
return FALSE
return TRUE
+
+/// Will differentiate into the "tank" giant spider.
+/mob/living/basic/spider/growing/young/tank
+ grow_as = /mob/living/basic/spider/giant/tank
+ name = "young tank spider"
+ desc = "Furry and purple, it looks defenseless. This one has dim yellow eyes."
+ icon = 'icons/mob/simple/arachnoid.dmi'
+ icon_state = "young_tank"
+ icon_dead = "young_tank_dead"
+ maxHealth = 50
+ health = 50
+ damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0.5, CLONE = 0.5, STAMINA = 0.5, OXY = 1)
+ melee_damage_lower = 10
+ melee_damage_upper = 15
+ speed = 1
+
+/mob/living/basic/spider/growing/young/tank/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/healing_touch,\
+ heal_brute = 5,\
+ heal_burn = 5,\
+ heal_time = 2 SECONDS,\
+ self_targetting = HEALING_TOUCH_SELF_ONLY,\
+ interaction_key = DOAFTER_SOURCE_SPIDER,\
+ valid_targets_typecache = typecacheof(list(/mob/living/basic/spider/growing/young/tank, /mob/living/basic/spider/giant/tank)),\
+ extra_checks = CALLBACK(src, PROC_REF(can_mend)),\
+ action_text = "%SOURCE% begins mending themselves...",\
+ complete_text = "%SOURCE%'s wounds mend together.",\
+ )
+
+ AddElement(/datum/element/web_walker, /datum/movespeed_modifier/below_average_web)
+
+/// Prevent you from healing when on fire
+/mob/living/basic/spider/growing/young/tank/proc/can_mend(mob/living/source, mob/living/target)
+ if (on_fire)
+ balloon_alert(src, "on fire!")
+ return FALSE
+ return TRUE
+
+/// Will differentiate into the "breacher" giant spider.
+/mob/living/basic/spider/growing/young/breacher
+ grow_as = /mob/living/basic/spider/giant/breacher
+ name = "young breacher spider"
+ desc = "Furry and baige, it looks defenseless. This one has dim red eyes."
+ icon = 'icons/mob/simple/arachnoid.dmi'
+ icon_state = "young_breacher"
+ icon_dead = "young_breacher_dead"
+ maxHealth = 60
+ health = 60
+ melee_damage_lower = 5
+ melee_damage_upper = 10
+ speed = 1
+
+/mob/living/basic/spider/growing/young/breacher/Initialize(mapload)
+ . = ..()
+
+ AddElement(/datum/element/web_walker, /datum/movespeed_modifier/below_average_web)
+
/// Will differentiate into the "midwife" giant spider.
/mob/living/basic/spider/growing/young/midwife
grow_as = /mob/living/basic/spider/giant/midwife
@@ -153,6 +227,11 @@
web_speed = 0.5
web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer
+/mob/living/basic/spider/growing/young/midwife/Initialize(mapload)
+ . = ..()
+
+ AddElement(/datum/element/web_walker, /datum/movespeed_modifier/average_web)
+
/// Will differentiate into the "viper" giant spider.
/mob/living/basic/spider/growing/young/viper
grow_as = /mob/living/basic/spider/giant/viper
@@ -183,3 +262,8 @@
melee_damage_upper = 25
speed = 1
obj_damage = 40
+
+/mob/living/basic/spider/growing/young/tarantula/Initialize(mapload)
+ . = ..()
+
+ AddElement(/datum/element/web_walker, /datum/movespeed_modifier/slow_web)
diff --git a/code/modules/mob_spawn/ghost_roles/spider_roles.dm b/code/modules/mob_spawn/ghost_roles/spider_roles.dm
index fb3d470f5aa..e6197df2d71 100644
--- a/code/modules/mob_spawn/ghost_roles/spider_roles.dm
+++ b/code/modules/mob_spawn/ghost_roles/spider_roles.dm
@@ -36,6 +36,10 @@
if(100 to INFINITY)
. += span_info("These eggs are plump, teeming with life. Any moment now...")
+/obj/structure/spider/eggcluster/abnormal
+ name = "abnormal egg cluster"
+ color = rgb(0, 148, 211)
+
/obj/structure/spider/eggcluster/enriched
name = "enriched egg cluster"
color = rgb(148, 0, 211)
@@ -134,6 +138,16 @@
var/datum/antagonist/spider/spider_antag = new granted_datum(directive)
spawned_mob.mind.add_antag_datum(spider_antag)
+/obj/effect/mob_spawn/ghost_role/spider/abnormal
+ name = "abnormal egg cluster"
+ color = rgb(0, 148, 211)
+ cluster_type = /obj/structure/spider/eggcluster/abnormal
+ potentialspawns = list(
+ /mob/living/basic/spider/growing/spiderling/tank,
+ /mob/living/basic/spider/growing/spiderling/breacher,
+ )
+ flash_window = TRUE
+
/obj/effect/mob_spawn/ghost_role/spider/enriched
name = "enriched egg cluster"
color = rgb(148, 0, 211)
@@ -168,7 +182,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/basic/spider/giant/midwife, // We don't want the event to end instantly because of a 2 hp spiderling dying
+ /mob/living/basic/spider/growing/spiderling/midwife, // We don't want the event to end instantly because broodmothers got a bad spawn
)
flash_window = TRUE
diff --git a/code/modules/movespeed/modifiers/mobs.dm b/code/modules/movespeed/modifiers/mobs.dm
index e5f29323223..49358223e35 100644
--- a/code/modules/movespeed/modifiers/mobs.dm
+++ b/code/modules/movespeed/modifiers/mobs.dm
@@ -109,6 +109,9 @@
/datum/movespeed_modifier/average_web
multiplicative_slowdown = 1.2
+/datum/movespeed_modifier/below_average_web
+ multiplicative_slowdown = 2.5
+
/datum/movespeed_modifier/slow_web
multiplicative_slowdown = 5
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 1859a451270..9828e307431 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/icons/mob/actions/actions_animal.dmi b/icons/mob/actions/actions_animal.dmi
index f3f9a667f22..64b1c700f41 100644
Binary files a/icons/mob/actions/actions_animal.dmi and b/icons/mob/actions/actions_animal.dmi differ
diff --git a/icons/mob/simple/arachnoid.dmi b/icons/mob/simple/arachnoid.dmi
index fca53195d4c..d17297f2ccf 100644
Binary files a/icons/mob/simple/arachnoid.dmi and b/icons/mob/simple/arachnoid.dmi differ
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
index 7e0a5830fdc..73e997f0478 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
@@ -705,8 +705,14 @@ em {
font-size: 185%;
}
+.spiderbreacher {
+ color: #e8b670;
+ font-weight: bold;
+ font-size: 140%;
+}
+
.spiderscout {
- color: #231d99;
+ color: #231d98;
font-weight: bold;
font-size: 120%;
}
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
index 6ee5c6c4ce7..2e7e9c5af0a 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
@@ -737,8 +737,14 @@ h2.alert {
font-size: 185%;
}
+.spiderbreacher {
+ color: #804b02;
+ font-weight: bold;
+ font-size: 140%;
+}
+
.spiderscout {
- color: #1b10cd;
+ color: #0c0674;
font-weight: bold;
font-size: 120%;
}