From 77a8be0818f2f52166d322cbe69cc475ca40ef39 Mon Sep 17 00:00:00 2001 From: homexp13 Date: Wed, 12 Jun 2024 14:40:30 +0300 Subject: [PATCH 1/2] combo wombo --- .../objects/effects/effect_system/smoke.dm | 8 +++ .../castes/defiler/abilities_defiler.dm | 34 ++++++++++ .../castes/defiler/castedatum_defiler.dm | 1 + .../castes/sentinel/castedatum_sentinel.dm | 2 +- .../code/modules/projectiles/ammo_datums.dm | 65 ++++++++++++++++++- 5 files changed, 107 insertions(+), 3 deletions(-) diff --git a/modular_RUtgmc/code/game/objects/effects/effect_system/smoke.dm b/modular_RUtgmc/code/game/objects/effects/effect_system/smoke.dm index 3eb2235c64b0b..370c88914e70f 100644 --- a/modular_RUtgmc/code/game/objects/effects/effect_system/smoke.dm +++ b/modular_RUtgmc/code/game/objects/effects/effect_system/smoke.dm @@ -3,3 +3,11 @@ /obj/effect/particle_effect/smoke/xeno/burn/extinguishing smoke_traits = SMOKE_XENO|SMOKE_XENO_ACID|SMOKE_GASP|SMOKE_COUGH|SMOKE_HUGGER_PACIFY|SMOKE_EXTINGUISH + +/obj/effect/particle_effect/smoke/xeno/transvitox/light + alpha = 60 + opacity = FALSE + smoke_traits = SMOKE_XENO|SMOKE_XENO_TRANSVITOX|SMOKE_COUGH + +/datum/effect_system/smoke_spread/xeno/transvitox/light + smoke_type = /obj/effect/particle_effect/smoke/xeno/transvitox/light diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/defiler/abilities_defiler.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/defiler/abilities_defiler.dm index 3144fcbe3bbd6..8ffbede3220b6 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/defiler/abilities_defiler.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/defiler/abilities_defiler.dm @@ -5,3 +5,37 @@ /datum/action/ability/activable/xeno/inject_egg_neurogas ability_cost = 80 keybind_flags = null + +///Called when we slash while reagent slash is active +/datum/action/ability/xeno_action/reagent_slash/reagent_slash(datum/source, mob/living/target, damage, list/damage_mod, list/armor_mod) + var/mob/living/carbon/xenomorph/xeno_owner = owner + if(xeno_owner.selected_reagent == /datum/reagent/toxin/acid) + + if(!target?.can_sting()) //We only care about targets that we can actually sting + return + + var/mob/living/carbon/xeno_target = target + + if(HAS_TRAIT(xeno_target, TRAIT_INTOXICATION_IMMUNE)) + xeno_target.balloon_alert(xeno_owner, "Immune to Intoxication") + return + + playsound(xeno_target, 'sound/effects/spray3.ogg', 20, TRUE) + if(xeno_target.has_status_effect(STATUS_EFFECT_INTOXICATED)) + var/datum/status_effect/stacking/intoxicated/debuff = xeno_target.has_status_effect(STATUS_EFFECT_INTOXICATED) + debuff.add_stacks(SENTINEL_TOXIC_SLASH_STACKS_PER + xeno_owner.xeno_caste.additional_stacks) + else + xeno_target.apply_status_effect(STATUS_EFFECT_INTOXICATED, SENTINEL_TOXIC_SLASH_STACKS_PER + xeno_owner.xeno_caste.additional_stacks) + + GLOB.round_statistics.defiler_reagent_slashes++ //Statistics + SSblackbox.record_feedback("tally", "round_statistics", 1, "defiler_reagent_slashes") + + reagent_slash_count-- //Decrement the toxic slash count + + if(!reagent_slash_count) //Deactivate if we have no reagent slashes remaining + reagent_slash_deactivate(xeno_owner) + + return + + return ..() + diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/defiler/castedatum_defiler.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/defiler/castedatum_defiler.dm index d836773073047..6d6c689a5e8b1 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/defiler/castedatum_defiler.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/defiler/castedatum_defiler.dm @@ -9,3 +9,4 @@ // *** Defense *** // soft_armor = list(MELEE = 55, BULLET = 55, LASER = 55, ENERGY = 55, BOMB = 30, BIO = 40, FIRE = 50, ACID = 40) + additional_stacks = 2 diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/sentinel/castedatum_sentinel.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/sentinel/castedatum_sentinel.dm index aa4c30d313977..6337442b42cb5 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/sentinel/castedatum_sentinel.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/sentinel/castedatum_sentinel.dm @@ -5,7 +5,7 @@ // *** Plasma *** // plasma_max = 650 plasma_gain = 21 - spit_types = list(/datum/ammo/xeno/acid/toxic_spit) + spit_types = list(/datum/ammo/xeno/acid/toxic_spit, /datum/ammo/xeno/transvitox) // *** Flags *** // can_flags = CASTE_CAN_BE_QUEEN_HEALED|CASTE_CAN_BE_GIVEN_PLASMA|CASTE_CAN_BE_LEADER|CASTE_CAN_RIDE_CRUSHER|CASTE_CAN_HOLD_FACEHUGGERS|CASTE_CAN_HOLD_JELLY diff --git a/modular_RUtgmc/code/modules/projectiles/ammo_datums.dm b/modular_RUtgmc/code/modules/projectiles/ammo_datums.dm index edb80578cf772..4fe743ee6bc6a 100644 --- a/modular_RUtgmc/code/modules/projectiles/ammo_datums.dm +++ b/modular_RUtgmc/code/modules/projectiles/ammo_datums.dm @@ -221,10 +221,71 @@ /datum/ammo/xeno/toxin bullet_color = COLOR_LIGHT_ORANGE -/datum/ammo/xeno/toxin/sent //Sentinel - spit_cost = 70 +/datum/ammo/xeno/transvitox + name = "transvitox spit" + flags_ammo_behavior = AMMO_XENO|AMMO_EXPLOSIVE|AMMO_SKIPS_ALIENS + spit_cost = 80 + added_spit_delay = 0 + damage_type = STAMINA + accurate_range = 5 + max_range = 10 + accuracy_var_low = 3 + accuracy_var_high = 3 + damage = 20 + stagger_stacks = 1.1 SECONDS + slowdown_stacks = 1.5 + smoke_strength = 0.5 + smoke_range = 0 + reagent_transfer_amount = 4 icon_state = "xeno_sent_neuro" +///Set up the list of reagents the spit transfers upon impact +/datum/ammo/xeno/transvitox/proc/set_reagents() + spit_reagents = list(/datum/reagent/toxin/xeno_transvitox = reagent_transfer_amount) + +/datum/ammo/xeno/transvitox/on_hit_mob(mob/living/carbon/carbon_victim, obj/projectile/proj) + drop_transvitox_smoke(get_turf(carbon_victim)) + + if(!istype(carbon_victim) || carbon_victim.stat == DEAD || carbon_victim.issamexenohive(proj.firer) ) + return + + if(isnestedhost(carbon_victim)) + return + + carbon_victim.adjust_stagger(stagger_stacks) + carbon_victim.add_slowdown(slowdown_stacks) + + set_reagents() + for(var/reagent_id in spit_reagents) + spit_reagents[reagent_id] = carbon_victim.modify_by_armor(spit_reagents[reagent_id], armor_type, penetration, proj.def_zone) + + carbon_victim.reagents.add_reagent_list(spit_reagents) + + return ..() + +/datum/ammo/xeno/transvitox/on_hit_obj(obj/O, obj/projectile/P) + var/turf/T = get_turf(O) + drop_transvitox_smoke(T.density ? P.loc : T) + +/datum/ammo/xeno/transvitox/on_hit_turf(turf/T, obj/projectile/P) + drop_transvitox_smoke(T.density ? P.loc : T) + +/datum/ammo/xeno/transvitox/do_at_max_range(turf/T, obj/projectile/P) + drop_transvitox_smoke(T.density ? P.loc : T) + +/datum/ammo/xeno/transvitox/set_smoke() + smoke_system = new /datum/effect_system/smoke_spread/xeno/transvitox/light() + +/datum/ammo/xeno/transvitox/proc/drop_transvitox_smoke(turf/T) + if(T.density) + return + + set_smoke() + smoke_system.strength = smoke_strength + smoke_system.set_up(smoke_range, T) + smoke_system.start() + smoke_system = null + /datum/ammo/xeno/acid icon_state = "xeno_acid_weak" From b6d75cc464a2e359bfb8fabafef919ef7ae3df35 Mon Sep 17 00:00:00 2001 From: homexp13 Date: Wed, 12 Jun 2024 22:51:20 +0300 Subject: [PATCH 2/2] toxic combo --- code/modules/reagents/reagents/toxin.dm | 18 +++++ .../objects/effects/effect_system/smoke.dm | 8 --- .../castes/sentinel/castedatum_sentinel.dm | 2 +- .../code/modules/projectiles/ammo_datums.dm | 65 +------------------ 4 files changed, 21 insertions(+), 72 deletions(-) diff --git a/code/modules/reagents/reagents/toxin.dm b/code/modules/reagents/reagents/toxin.dm index 15573958fd8d2..9c1889e7919fa 100644 --- a/code/modules/reagents/reagents/toxin.dm +++ b/code/modules/reagents/reagents/toxin.dm @@ -503,6 +503,12 @@ if(is_type_in_typecache(current_reagent, GLOB.defiler_toxins_typecache_list)) //For each xeno toxin reagent, double the strength multiplier slowdown_multiplier *= 2 //Each other Defiler toxin increases the multiplier by 2x; 2x if we have 1 combo chem, 4x if we have 2 + //RUTGMC EDIT + if(L.has_status_effect(STATUS_EFFECT_INTOXICATED)) + var/datum/status_effect/stacking/intoxicated/debuff = L.has_status_effect(STATUS_EFFECT_INTOXICATED) + if(debuff.stacks > 10) + slowdown_multiplier *= 2 + switch(slowdown_multiplier) //Description varies in severity and probability with the multiplier if(0 to 1) if(prob(10)) @@ -549,6 +555,12 @@ if(is_type_in_typecache(current_reagent, GLOB.defiler_toxins_typecache_list)) //For each xeno toxin reagent, double the strength multiplier tox_cap_multiplier *= 2 //Each other Defiler toxin doubles the multiplier + //RUTGMC EDIT + if(L.has_status_effect(STATUS_EFFECT_INTOXICATED)) + var/datum/status_effect/stacking/intoxicated/debuff = L.has_status_effect(STATUS_EFFECT_INTOXICATED) + if(debuff.stacks > 10) + tox_cap_multiplier *= 2 + var/tox_loss = L.getToxLoss() if(tox_loss > DEFILER_TRANSVITOX_CAP) //If toxin levels are already at their cap, cancel out return ..() @@ -572,6 +584,12 @@ if(is_type_in_typecache(current_reagent, GLOB.defiler_toxins_typecache_list)) //For each xeno toxin reagent, double the strength multiplier tox_cap_multiplier *= 2 //Each other Defiler toxin doubles the multiplier + //RUTGMC EDIT + if(L.has_status_effect(STATUS_EFFECT_INTOXICATED)) + var/datum/status_effect/stacking/intoxicated/debuff = L.has_status_effect(STATUS_EFFECT_INTOXICATED) + if(debuff.stacks > 10) + tox_cap_multiplier *= 2 + var/tox_loss = L.getToxLoss() if(tox_loss > DEFILER_TRANSVITOX_CAP) //If toxin levels are already at their cap, cancel out return diff --git a/modular_RUtgmc/code/game/objects/effects/effect_system/smoke.dm b/modular_RUtgmc/code/game/objects/effects/effect_system/smoke.dm index 370c88914e70f..3eb2235c64b0b 100644 --- a/modular_RUtgmc/code/game/objects/effects/effect_system/smoke.dm +++ b/modular_RUtgmc/code/game/objects/effects/effect_system/smoke.dm @@ -3,11 +3,3 @@ /obj/effect/particle_effect/smoke/xeno/burn/extinguishing smoke_traits = SMOKE_XENO|SMOKE_XENO_ACID|SMOKE_GASP|SMOKE_COUGH|SMOKE_HUGGER_PACIFY|SMOKE_EXTINGUISH - -/obj/effect/particle_effect/smoke/xeno/transvitox/light - alpha = 60 - opacity = FALSE - smoke_traits = SMOKE_XENO|SMOKE_XENO_TRANSVITOX|SMOKE_COUGH - -/datum/effect_system/smoke_spread/xeno/transvitox/light - smoke_type = /obj/effect/particle_effect/smoke/xeno/transvitox/light diff --git a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/sentinel/castedatum_sentinel.dm b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/sentinel/castedatum_sentinel.dm index 6337442b42cb5..aa4c30d313977 100644 --- a/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/sentinel/castedatum_sentinel.dm +++ b/modular_RUtgmc/code/modules/mob/living/carbon/xenomorph/castes/sentinel/castedatum_sentinel.dm @@ -5,7 +5,7 @@ // *** Plasma *** // plasma_max = 650 plasma_gain = 21 - spit_types = list(/datum/ammo/xeno/acid/toxic_spit, /datum/ammo/xeno/transvitox) + spit_types = list(/datum/ammo/xeno/acid/toxic_spit) // *** Flags *** // can_flags = CASTE_CAN_BE_QUEEN_HEALED|CASTE_CAN_BE_GIVEN_PLASMA|CASTE_CAN_BE_LEADER|CASTE_CAN_RIDE_CRUSHER|CASTE_CAN_HOLD_FACEHUGGERS|CASTE_CAN_HOLD_JELLY diff --git a/modular_RUtgmc/code/modules/projectiles/ammo_datums.dm b/modular_RUtgmc/code/modules/projectiles/ammo_datums.dm index 4fe743ee6bc6a..edb80578cf772 100644 --- a/modular_RUtgmc/code/modules/projectiles/ammo_datums.dm +++ b/modular_RUtgmc/code/modules/projectiles/ammo_datums.dm @@ -221,71 +221,10 @@ /datum/ammo/xeno/toxin bullet_color = COLOR_LIGHT_ORANGE -/datum/ammo/xeno/transvitox - name = "transvitox spit" - flags_ammo_behavior = AMMO_XENO|AMMO_EXPLOSIVE|AMMO_SKIPS_ALIENS - spit_cost = 80 - added_spit_delay = 0 - damage_type = STAMINA - accurate_range = 5 - max_range = 10 - accuracy_var_low = 3 - accuracy_var_high = 3 - damage = 20 - stagger_stacks = 1.1 SECONDS - slowdown_stacks = 1.5 - smoke_strength = 0.5 - smoke_range = 0 - reagent_transfer_amount = 4 +/datum/ammo/xeno/toxin/sent //Sentinel + spit_cost = 70 icon_state = "xeno_sent_neuro" -///Set up the list of reagents the spit transfers upon impact -/datum/ammo/xeno/transvitox/proc/set_reagents() - spit_reagents = list(/datum/reagent/toxin/xeno_transvitox = reagent_transfer_amount) - -/datum/ammo/xeno/transvitox/on_hit_mob(mob/living/carbon/carbon_victim, obj/projectile/proj) - drop_transvitox_smoke(get_turf(carbon_victim)) - - if(!istype(carbon_victim) || carbon_victim.stat == DEAD || carbon_victim.issamexenohive(proj.firer) ) - return - - if(isnestedhost(carbon_victim)) - return - - carbon_victim.adjust_stagger(stagger_stacks) - carbon_victim.add_slowdown(slowdown_stacks) - - set_reagents() - for(var/reagent_id in spit_reagents) - spit_reagents[reagent_id] = carbon_victim.modify_by_armor(spit_reagents[reagent_id], armor_type, penetration, proj.def_zone) - - carbon_victim.reagents.add_reagent_list(spit_reagents) - - return ..() - -/datum/ammo/xeno/transvitox/on_hit_obj(obj/O, obj/projectile/P) - var/turf/T = get_turf(O) - drop_transvitox_smoke(T.density ? P.loc : T) - -/datum/ammo/xeno/transvitox/on_hit_turf(turf/T, obj/projectile/P) - drop_transvitox_smoke(T.density ? P.loc : T) - -/datum/ammo/xeno/transvitox/do_at_max_range(turf/T, obj/projectile/P) - drop_transvitox_smoke(T.density ? P.loc : T) - -/datum/ammo/xeno/transvitox/set_smoke() - smoke_system = new /datum/effect_system/smoke_spread/xeno/transvitox/light() - -/datum/ammo/xeno/transvitox/proc/drop_transvitox_smoke(turf/T) - if(T.density) - return - - set_smoke() - smoke_system.strength = smoke_strength - smoke_system.set_up(smoke_range, T) - smoke_system.start() - smoke_system = null - /datum/ammo/xeno/acid icon_state = "xeno_acid_weak"