diff --git a/code/game/objects/effects/spiderwebs.dm b/code/game/objects/effects/spiderwebs.dm index d47c00590003..887ac22dd630 100644 --- a/code/game/objects/effects/spiderwebs.dm +++ b/code/game/objects/effects/spiderwebs.dm @@ -160,11 +160,18 @@ sealed = TRUE has_frill = FALSE can_atmos_pass = ATMOS_PASS_NO + resistance_flags = FIRE_PROOF /obj/structure/spider/stickyweb/sealed/Initialize(mapload) . = ..() air_update_turf(TRUE, TRUE) +/obj/structure/spider/stickyweb/sealed/atmos_expose(datum/gas_mixture/air, exposed_temperature) + return + +/obj/structure/spider/should_atmos_process(datum/gas_mixture/air, exposed_temperature) + return FALSE + /// Walls which reflects lasers /obj/structure/spider/stickyweb/sealed/reflector name = "reflective silk screen" @@ -263,7 +270,7 @@ . = ..() pixel_x = -9 pixel_y = -9 - add_filter(SPIDER_WEB_TINT, 10, list("type" = "outline", "color" = "#ac0000ff", "size" = 0.1)) + //add_filter(SPIDER_WEB_TINT, 10, list("type" = "outline", "color" = "#ac0000ff", "size" = 0.1)) // IRIS REMOVAL AddComponent(/datum/component/caltrop, min_damage = 20, max_damage = 30, flags = CALTROP_NOSTUN | CALTROP_BYPASS_SHOES) /obj/structure/spider/effigy 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 6d0f3771a82b..b0048357ce55 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 @@ -41,22 +41,26 @@ icon_living = "ambush" icon_dead = "ambush_dead" gender = FEMALE - maxHealth = 125 - health = 125 - obj_damage = 45 - - melee_damage_lower = 25 - melee_damage_upper = 30 - speed = 5 + maxHealth = 100 // IRIS EDIT + health = 100 // IRIS EDIT + obj_damage = 30 // IRIS EDIT + melee_damage_lower = 5 // IRIS EDIT + melee_damage_upper = 10 // IRIS EDIT + poison_per_bite = 5 // IRIS ADDITION + poison_type = /datum/reagent/toxin/staminatoxin // IRIS ADDITION + speed = 3 player_speed_modifier = -3.1 - menu_description = "Slow spider, with a strong disarming pull and above average health and damage." - innate_actions = list(/datum/action/cooldown/mob_cooldown/sneak/spider) + menu_description = "Fast spider with an average health, a strong disarming pull and a ranged slowdown." // IRIS EDIT + innate_actions = list( + /datum/action/cooldown/mob_cooldown/sneak/spider, + /datum/action/cooldown/spell/pointed/projectile/web_restraints, // IRIS ADDITION + ) /mob/living/basic/spider/giant/ambush/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_STRONG_GRABBER, INNATE_TRAIT) - AddElement(/datum/element/web_walker, /datum/movespeed_modifier/slow_web) + AddElement(/datum/element/web_walker, /datum/movespeed_modifier/average_web) // IRIS EDIT: slow_web -> average_web /** * ### Guard Spider @@ -71,15 +75,15 @@ icon_living = "guard" icon_dead = "guard_dead" gender = FEMALE - maxHealth = 160 - health = 160 + maxHealth = 120 // IRIS EDIT + health = 120 // IRIS EDIT melee_damage_lower = 20 melee_damage_upper = 25 - obj_damage = 45 - speed = 5 + obj_damage = 30 // IRIS EDIT + speed = 4 // IRIS EDIT player_speed_modifier = -4 - menu_description = "Tanky and strong able to shed a carcass for protection." - innate_actions = list(/datum/action/cooldown/mob_cooldown/web_effigy) + menu_description = "Average health, damage and speed." // IRIS EDIT + //innate_actions = list(/datum/action/cooldown/mob_cooldown/web_effigy) //IRIS REMOVAL /mob/living/basic/spider/giant/guard/Initialize(mapload) . = ..() @@ -127,8 +131,8 @@ icon_state = "scout" icon_living = "scout" icon_dead = "scout_dead" - maxHealth = 65 - health = 65 + maxHealth = 80 // IRIS EDIT + health = 80 // IRIS EDIT obj_damage = 10 melee_damage_lower = 5 melee_damage_upper = 10 @@ -160,15 +164,16 @@ 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 + maxHealth = 80 // IRIS EDIT + health = 80 // IRIS EDIT melee_damage_lower = 5 melee_damage_upper = 10 speed = 4 player_speed_modifier = -3.1 web_speed = 0.25 web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer - menu_description = "Avarage speed spider able to heal other spiders and itself together with a fast web laying capability, has low damage and health." + menu_description = "A weak spider able to heal other spiders, lay faster webs and shed an effigy." // IRIS EDIT + innate_actions = list(/datum/action/cooldown/mob_cooldown/web_effigy) // IRIS ADDITION ///Used in the caves away mission. /mob/living/basic/spider/giant/nurse/away_caves @@ -179,9 +184,10 @@ . = ..() ADD_TRAIT(src, TRAIT_MEDICAL_HUD, INNATE_TRAIT) +//IRIS EDIT: Heals damage more AddComponent(/datum/component/healing_touch,\ - heal_brute = 10,\ - heal_burn = 10,\ + heal_brute = 20,\ + heal_burn = 20,\ heal_time = 2.5 SECONDS,\ interaction_key = DOAFTER_SOURCE_SPIDER,\ valid_targets_typecache = typecacheof(list(/mob/living/basic/spider/giant)),\ @@ -207,23 +213,24 @@ icon_dead = "tangle_dead" gender = FEMALE butcher_results = list(/obj/item/food/meat/slab/spider = 2, /obj/item/food/spiderleg = 8, /obj/item/food/spidereggs = 4) - maxHealth = 55 - health = 55 - melee_damage_lower = 1 - melee_damage_upper = 1 - poison_per_bite = 2.5 - poison_type = /datum/reagent/toxin/acid - obj_damage = 40 + maxHealth = 120 // IRIS EDIT + health = 120 // IRIS EDIT + melee_damage_lower = 5 // IRIS EDIT + melee_damage_upper = 10 // IRIS EDIT + //poison_per_bite = 2.5 // IRIS REMOVAL + //poison_type = /datum/reagent/toxin/acid // IRIS REMOVAL + obj_damage = 50 // IRIS EDIT web_speed = 0.25 speed = 4 player_speed_modifier = -3.1 web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer - menu_description = "Average speed spider with self healing abilities and multiple web types to reinforce the nest with little to no damage and low health." + menu_description = "Average speed spider with self healing abilities, multiple web types to reinforce the nest, low damage and average health." // IRIS EDIT innate_actions = list( /datum/action/cooldown/mob_cooldown/lay_web/solid_web, /datum/action/cooldown/mob_cooldown/lay_web/sticky_web, /datum/action/cooldown/mob_cooldown/lay_web/web_passage, /datum/action/cooldown/mob_cooldown/lay_web/web_spikes, + /datum/action/cooldown/mob_cooldown/lay_web/web_reflector, // IRIS ADDITION ) /mob/living/basic/spider/giant/tangle/Initialize(mapload) @@ -261,26 +268,29 @@ icon_state = "tank" icon_living = "tank" icon_dead = "tank_dead" - maxHealth = 500 - health = 500 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 1, OXY = 1) - melee_damage_lower = 5 - melee_damage_upper = 5 - obj_damage = 15 + maxHealth = 300 // IRIS EDIT + health = 300 // IRIS EDIT + //damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 1, OXY = 1) // IRIS REMOVAL + melee_damage_lower = 25 // IRIS EDIT + melee_damage_upper = 30 // IRIS EDIT + obj_damage = 30 // IRIS EDIT speed = 5 player_speed_modifier = -4 - menu_description = "Extremely tanky with very poor offence. Able to self heal and lay reflective silk screens." + menu_description = "High health and damage. Low speed." // IRIS EDIT /mob/living/basic/spider/giant/tank/Initialize(mapload) . = ..() + /* IRIS REMOVAL START 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) + IRIS REMOVAL END */ AddElement(/datum/element/web_walker, /datum/movespeed_modifier/below_average_web) + /* IRIS REMOVAL START AddComponent(/datum/component/healing_touch,\ heal_brute = 50,\ heal_burn = 50,\ @@ -300,6 +310,8 @@ return FALSE return TRUE + IRIS REMOVAL END */ + /** * ### Spider Breacher * A subtype of the giant spider, specialized in breaching and invasion. @@ -322,18 +334,19 @@ wound_bonus = 25 exposed_wound_bonus = 50 sharpness = SHARP_EDGED - obj_damage = 60 + obj_damage = 120 web_speed = 0.25 limb_destroyer = 50 speed = 5 player_speed_modifier = -4 sight = SEE_TURFS + web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer // IRIS ADDITION menu_description = "Has 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/lay_web/web_passage/web_passage = new(src) // IRIS EDIT + web_passage.Grant(src) // IRIS EDIT var/datum/action/cooldown/mob_cooldown/command_spiders/warning_spiders/spiders_warning = new(src) spiders_warning.Grant(src) @@ -358,26 +371,33 @@ health = 400 melee_damage_lower = 35 melee_damage_upper = 40 - obj_damage = 100 + obj_damage = 50 damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, STAMINA = 0, OXY = 1) - speed = 6 + speed = 5 // IRIS EDIT 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 - web_speed = 0.7 + //web_speed = 0.7 // IRIS EDIT web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer + sight = SEE_MOBS // IRIS ADDITION 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." innate_actions = list( - /datum/action/cooldown/mob_cooldown/charge/basic_charge, - /datum/action/cooldown/mob_cooldown/lay_web/solid_web, + ///datum/action/cooldown/mob_cooldown/charge/basic_charge/tarantula, // IRIS REMOVAL: duplicate + ///datum/action/cooldown/mob_cooldown/lay_web/solid_web, // IRIS REMOVAL /datum/action/cooldown/mob_cooldown/lay_web/web_passage, ) /// Charging ability, kept seperate from innate_actions due to implementation details - var/datum/action/cooldown/mob_cooldown/charge/basic_charge/charge + var/datum/action/cooldown/mob_cooldown/charge/basic_charge/tarantula/charge // IRIS EDIT + +// IRIS ADDITION START +/datum/action/cooldown/mob_cooldown/charge/basic_charge/tarantula + charge_delay = 1 SECONDS + cooldown_time = 15 SECONDS +// IRIS ADDITION END /mob/living/basic/spider/giant/tarantula/Initialize(mapload) . = ..() - charge = new /datum/action/cooldown/mob_cooldown/charge/basic_charge() + charge = new /datum/action/cooldown/mob_cooldown/charge/basic_charge/tarantula() // IRIS EDIT charge.Grant(src) AddElement(/datum/element/web_walker, /datum/movespeed_modifier/slow_web) @@ -403,16 +423,16 @@ icon_state = "viper" icon_living = "viper" icon_dead = "viper_dead" - maxHealth = 55 - health = 55 + maxHealth = 80 // IRIS EDIT + health = 80 // IRIS EDIT melee_damage_lower = 5 melee_damage_upper = 5 poison_per_bite = 5 poison_type = /datum/reagent/toxin/viperspider - speed = 2 + speed = 3 // IRIS EDIT 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." + menu_description = "Fast spider with a lethal venom, but has less health and damage." // IRIS EDIT innate_actions = list( /datum/action/cooldown/mob_cooldown/defensive_mode, ) @@ -446,6 +466,7 @@ gold_core_spawnable = NO_SPAWN web_speed = 0.5 web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer + sight = SEE_MOBS | SEE_OBJS | SEE_TURFS menu_description = "Royal spider variant specializing in reproduction and leadership, deals low damage." innate_actions = list( /datum/action/cooldown/mob_cooldown/command_spiders, @@ -458,6 +479,7 @@ /datum/action/cooldown/mob_cooldown/lay_web/web_spikes, /datum/action/cooldown/mob_cooldown/set_spider_directive, /datum/action/cooldown/mob_cooldown/wrap, + /datum/action/cooldown/mob_cooldown/web_effigy, // IRIS ADDITION ) /mob/living/basic/spider/giant/midwife/Initialize(mapload) 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 0c32711c49c0..3c5878b5da01 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/spider.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/spider.dm @@ -53,6 +53,8 @@ var/menu_description = "Tanky and strong for the defense of the nest and other spiders." /// 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 + // IRIS ADDITION - spiders cant attack each other + var/static/list/typecache_player_spiders = typecacheof(list(/mob/living/basic/spider)) /datum/emote/spider mob_type_allowed_typecache = /mob/living/basic/spider @@ -84,6 +86,13 @@ webbing.Grant(src) ai_controller?.set_blackboard_key(BB_SPIDER_WEB_ACTION, webbing) + // IRIS EDIT START - Makes player-controlled spiders unable to attack each other. + AddElement(/datum/element/prevent_attacking_of_player_types, \ + typecache_player_spiders, \ + "Wait! That's your fellow spider!"\ + ) + // IRIS EDIT END + /mob/living/basic/spider/Login() . = ..() if(!. || !client) 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 5bb27b5109cb..bcf424d01042 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 @@ -108,7 +108,7 @@ /datum/action/cooldown/mob_cooldown/lay_web/web_passage name = "Spin Web Passage" - desc = "Spin a web passage to hide the nest from prey view." + desc = "Spin a web passage to hide the nest from prey view and block fires from spreading." // IRIS EDIT button_icon_state = "spider_roof" cooldown_time = 0 SECONDS webbing_time = 4 SECONDS @@ -177,7 +177,7 @@ name = "Spin reflective silk screen" desc = "Spin a web to reflect missiles from the nest." button_icon_state = "spider_mirror" - cooldown_time = 30 SECONDS + cooldown_time = 60 SECONDS // IRIS EDIT webbing_time = 4 SECONDS /datum/action/cooldown/mob_cooldown/lay_web/web_reflector/obstructed_by_other_web() diff --git a/code/modules/mob_spawn/ghost_roles/spider_roles.dm b/code/modules/mob_spawn/ghost_roles/spider_roles.dm index 0ee4435a9e46..3773bda6181c 100644 --- a/code/modules/mob_spawn/ghost_roles/spider_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/spider_roles.dm @@ -80,15 +80,14 @@ var/obj/structure/spider/eggcluster/egg /// Which antag datum do we grant? var/granted_datum = /datum/antagonist/spider + // IRIS EDIT START /// The types of spiders that the spawner can produce var/list/potentialspawns = list( - /mob/living/basic/spider/growing/spiderling/nurse, - /mob/living/basic/spider/growing/spiderling/hunter, - /mob/living/basic/spider/growing/spiderling/ambush, - /mob/living/basic/spider/growing/spiderling/tangle, /mob/living/basic/spider/growing/spiderling/guard, - /mob/living/basic/spider/growing/spiderling/scout, + /mob/living/basic/spider/growing/spiderling/tank, + /mob/living/basic/spider/growing/spiderling/viper, ) + // IRIS EDIT END /// Do we flash the byond window when this particular egg type is available? var/flash_window = FALSE @@ -154,8 +153,10 @@ 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/viper, + /mob/living/basic/spider/growing/spiderling/nurse, + /mob/living/basic/spider/growing/spiderling/ambush, + /mob/living/basic/spider/growing/spiderling/tangle, + /mob/living/basic/spider/growing/spiderling/scout, ) flash_window = TRUE diff --git a/modular_iris/code/datums/prevent_attacking_of_player_types.dm b/modular_iris/code/datums/prevent_attacking_of_player_types.dm new file mode 100644 index 000000000000..14d6223d1e2b --- /dev/null +++ b/modular_iris/code/datums/prevent_attacking_of_player_types.dm @@ -0,0 +1,43 @@ +// IRIS MODULE +//heavily cribbed off /datum/element/prevent_attacking_of_types + +/datum/element/prevent_attacking_of_player_types + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 2 + + var/list/typecache + + var/alert_message + +/datum/element/prevent_attacking_of_player_types/Attach(datum/target, list/typecache, alert_message) + . = ..() + if (!isanimal_or_basicmob(target)) + return ELEMENT_INCOMPATIBLE + + src.typecache = typecache + src.alert_message = alert_message + + RegisterSignal(target, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(on_pre_attacking_player_target)) + +/datum/element/prevent_attacking_of_player_types/Detach(datum/source, ...) + UnregisterSignal(source, COMSIG_HOSTILE_PRE_ATTACKINGTARGET) + return ..() + +/datum/element/prevent_attacking_of_player_types/proc/on_pre_attacking_player_target(mob/source, atom/target) + SIGNAL_HANDLER + + if (!typecache[target.type]) + return + + // only proceed if both source and target are living mobs + var/mob/living/l_source = istype(source, /mob/living) ? source : null + var/mob/living/l_target = istype(target, /mob/living) ? target : null + if (!l_source || !l_target) + return + + // only block if both are player-controlled + if (!l_source.client || !l_target.client) + return + + l_target.balloon_alert(l_source, alert_message) + return COMPONENT_HOSTILE_NO_ATTACK diff --git a/modular_nova/modules/spider/spider_abilities/spider_abilities.dm b/modular_nova/modules/spider/spider_abilities/spider_abilities.dm index f139a4d87c0b..81bacf778fbf 100644 --- a/modular_nova/modules/spider/spider_abilities/spider_abilities.dm +++ b/modular_nova/modules/spider/spider_abilities/spider_abilities.dm @@ -25,7 +25,7 @@ icon_state = "spideregg" damage = 0 // So this is basically to avoid hitting webs before the person - projectile_phasing = PASSTABLE | PASSGRILLE | PASSSTRUCTURE + projectile_phasing = PASSTABLE | PASSGRILLE /*| PASSSTRUCTURE */// IRIS REMOVAL reflectable = FALSE /obj/projectile/webslinger_snare/on_hit(atom/target, blocked = 0, pierce_hit) diff --git a/tgstation.dme b/tgstation.dme index 0f21316f72d7..1860c3308d4f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6911,6 +6911,7 @@ #include "modular_iris\code\__DEFINES\ntsl.dm" #include "modular_iris\code\__DEFINES\send2relay.dm" #include "modular_iris\code\_onclick\hud\ghost.dm" +#include "modular_iris\code\datums\prevent_attacking_of_player_types.dm" #include "modular_iris\code\datums\ruins.dm" #include "modular_iris\code\datums\components\crafting\furniture.dm" #include "modular_iris\code\datums\mood_events\drug_events.dm"