From a6921c529344f6ce74e6f93be9023641c648b81c Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Fri, 10 Jul 2026 11:58:04 +0200 Subject: [PATCH 1/4] grenade changes --- .../xenomorph/abilities/praetorian/praetorian_abilities.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_abilities.dm index 5991ac7fde8b8..ef7775e4d4f63 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_abilities.dm @@ -250,7 +250,7 @@ plasma_cost = 80 var/activation_delay = 1 SECONDS - var/prime_delay = 1 SECONDS + var/prime_delay = 1.25 SECONDS /datum/action/xeno_action/activable/prae_acid_ball/use_ability(atom/target) if (!target) @@ -281,7 +281,7 @@ var/obj/item/explosive/grenade/xeno_acid_grenade/grenade = new /obj/item/explosive/grenade/xeno_acid_grenade grenade.cause_data = create_cause_data(initial(acidball_user.caste_type), acidball_user) grenade.forceMove(get_turf(acidball_user)) - grenade.throw_atom(target, 5, SPEED_SLOW, acidball_user, TRUE) + grenade.throw_atom(target, 5, SPEED_AVERAGE, acidball_user, TRUE, launch_type = HIGH_LAUNCH) addtimer(CALLBACK(grenade, TYPE_PROC_REF(/obj/item/explosive, prime)), prime_delay) return ..() From 28e397d3b7a2abc4f693e7c712283b76fd4f9e9c Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Sat, 25 Jul 2026 19:04:25 +0200 Subject: [PATCH 2/4] Drathek request --- .../objects/items/explosives/grenades/xeno_nades.dm | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/code/game/objects/items/explosives/grenades/xeno_nades.dm b/code/game/objects/items/explosives/grenades/xeno_nades.dm index 7925434e2fb46..dc74c207c9129 100644 --- a/code/game/objects/items/explosives/grenades/xeno_nades.dm +++ b/code/game/objects/items/explosives/grenades/xeno_nades.dm @@ -11,6 +11,16 @@ var/shrapnel_count = 14 var/shrapnel_type = /datum/ammo/xeno/acid/prae_nade +/obj/item/explosive/grenade/xeno_acid_grenade/Move(NewLoc, direct) + if(throwing) + for(var/obj/structure/barricade/target_barricade in NewLoc) + if(!target_barricade.density) + continue + playsound(target_barricade, 'sound/effects/slam1.ogg', 15, 1) + return FALSE + + return ..() + /obj/item/explosive/grenade/xeno_acid_grenade/prime() create_shrapnel(loc, shrapnel_count, , ,shrapnel_type, cause_data) qdel(src) From 665260f98c362ad46b6b4286b80d8bba0b72864f Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Sat, 8 Aug 2026 02:18:07 +0200 Subject: [PATCH 3/4] we swap logic, now we use pass flags and fix cades --- code/__DEFINES/movement.dm | 5 +++-- code/_globalvars/bitfields.dm | 4 ++++ .../objects/items/explosives/grenades/xeno_nades.dm | 10 ---------- code/game/objects/structures/barricade/barricade.dm | 8 ++++---- .../abilities/praetorian/praetorian_abilities.dm | 2 +- 5 files changed, 12 insertions(+), 17 deletions(-) diff --git a/code/__DEFINES/movement.dm b/code/__DEFINES/movement.dm index 473fed1619d94..242e71a7ed9f2 100644 --- a/code/__DEFINES/movement.dm +++ b/code/__DEFINES/movement.dm @@ -43,14 +43,15 @@ #define PASS_HIGH_OVER_ONLY (1<<15) // For atoms that require a high toss to go over it, should only really be using this for flags_can_pass_x vars #define PASS_BUILDING_ONLY (1<<16) // For throwing stuff over walls (that lead to open ceilings) #define PASS_CRUSHER_CHARGE (1<<17) // For crusher charge specifically +#define PASS_ACID_GRENADE (1<<18) // For praetorian grenade specifically // Pass flag groups -#define PASS_OVER (PASS_OVER_THROW_ITEM|PASS_OVER_THROW_MOB|PASS_OVER_FIRE|PASS_OVER_ACID_SPRAY) +#define PASS_OVER (PASS_OVER_THROW_ITEM|PASS_OVER_THROW_MOB|PASS_OVER_FIRE|PASS_OVER_ACID_SPRAY|PASS_ACID_GRENADE) #define PASS_HIGH_OVER (PASS_HIGH_OVER_ONLY|PASS_OVER) #define PASS_BUILDING (PASS_HIGH_OVER|PASS_BUILDING_ONLY) #define PASS_MOB_IS (PASS_MOB_IS_XENO|PASS_MOB_IS_HUMAN|PASS_MOB_IS_OTHER) #define PASS_MOB_THRU (PASS_MOB_THRU_XENO|PASS_MOB_THRU_HUMAN|PASS_MOB_THRU_OTHER) -#define PASS_ALL (PASS_THROUGH|PASS_AROUND|PASS_OVER|PASS_UNDER|PASS_GLASS|PASS_MOB_IS|PASS_MOB_THRU|PASS_HIGH_OVER_ONLY|PASS_BUILDING_ONLY|PASS_TYPE_CRAWLER|PASS_CRUSHER_CHARGE) +#define PASS_ALL (PASS_THROUGH|PASS_AROUND|PASS_OVER|PASS_UNDER|PASS_GLASS|PASS_MOB_IS|PASS_MOB_THRU|PASS_HIGH_OVER_ONLY|PASS_BUILDING_ONLY|PASS_TYPE_CRAWLER|PASS_CRUSHER_CHARGE|PASS_ACID_GRENADE) // Short-hand pass flags for very specific things #define PASS_FLAGS_WEEDS (PASS_UNDER|PASS_MOB_THRU|PASS_OVER_ACID_SPRAY) diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 25717b4e9053d..c6cfbc39e3dbc 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -529,6 +529,7 @@ DEFINE_BITFIELD(flags_pass, list( "PASS_HIGH_OVER_ONLY" = PASS_HIGH_OVER_ONLY, "PASS_BUILDING_ONLY" = PASS_BUILDING_ONLY, "PASS_CRUSHER_CHARGE" = PASS_CRUSHER_CHARGE, + "PASS_ACID_GRENADE" = PASS_ACID_GRENADE, )) DEFINE_BITFIELD(flags_can_pass_all, list( @@ -550,6 +551,7 @@ DEFINE_BITFIELD(flags_can_pass_all, list( "PASS_HIGH_OVER_ONLY" = PASS_HIGH_OVER_ONLY, "PASS_BUILDING_ONLY" = PASS_BUILDING_ONLY, "PASS_CRUSHER_CHARGE" = PASS_CRUSHER_CHARGE, + "PASS_ACID_GRENADE" = PASS_ACID_GRENADE, )) DEFINE_BITFIELD(flags_can_pass_front, list( @@ -571,6 +573,7 @@ DEFINE_BITFIELD(flags_can_pass_front, list( "PASS_HIGH_OVER_ONLY" = PASS_HIGH_OVER_ONLY, "PASS_BUILDING_ONLY" = PASS_BUILDING_ONLY, "PASS_CRUSHER_CHARGE" = PASS_CRUSHER_CHARGE, + "PASS_ACID_GRENADE" = PASS_ACID_GRENADE, )) DEFINE_BITFIELD(flags_can_pass_behind, list( @@ -592,6 +595,7 @@ DEFINE_BITFIELD(flags_can_pass_behind, list( "PASS_HIGH_OVER_ONLY" = PASS_HIGH_OVER_ONLY, "PASS_BUILDING_ONLY" = PASS_BUILDING_ONLY, "PASS_CRUSHER_CHARGE" = PASS_CRUSHER_CHARGE, + "PASS_ACID_GRENADE" = PASS_ACID_GRENADE, )) DEFINE_BITFIELD(sight, list( diff --git a/code/game/objects/items/explosives/grenades/xeno_nades.dm b/code/game/objects/items/explosives/grenades/xeno_nades.dm index dc74c207c9129..7925434e2fb46 100644 --- a/code/game/objects/items/explosives/grenades/xeno_nades.dm +++ b/code/game/objects/items/explosives/grenades/xeno_nades.dm @@ -11,16 +11,6 @@ var/shrapnel_count = 14 var/shrapnel_type = /datum/ammo/xeno/acid/prae_nade -/obj/item/explosive/grenade/xeno_acid_grenade/Move(NewLoc, direct) - if(throwing) - for(var/obj/structure/barricade/target_barricade in NewLoc) - if(!target_barricade.density) - continue - playsound(target_barricade, 'sound/effects/slam1.ogg', 15, 1) - return FALSE - - return ..() - /obj/item/explosive/grenade/xeno_acid_grenade/prime() create_shrapnel(loc, shrapnel_count, , ,shrapnel_type, cause_data) qdel(src) diff --git a/code/game/objects/structures/barricade/barricade.dm b/code/game/objects/structures/barricade/barricade.dm index 38c0916ea6349..5ab33be23e4d1 100644 --- a/code/game/objects/structures/barricade/barricade.dm +++ b/code/game/objects/structures/barricade/barricade.dm @@ -268,8 +268,8 @@ update_health(-50) can_wire = FALSE is_wired = TRUE - flags_can_pass_front_temp &= ~PASS_OVER_THROW_MOB - flags_can_pass_behind_temp &= ~PASS_OVER_THROW_MOB + flags_can_pass_front_temp &= ~PASS_OVER_THROW_MOB|PASS_ACID_GRENADE + flags_can_pass_behind_temp &= ~PASS_OVER_THROW_MOB|PASS_ACID_GRENADE climbable = FALSE update_icon() return @@ -289,8 +289,8 @@ update_health(50) can_wire = TRUE is_wired = FALSE - flags_can_pass_front_temp &= ~PASS_OVER_THROW_MOB - flags_can_pass_behind_temp &= ~PASS_OVER_THROW_MOB + flags_can_pass_front_temp |= ~PASS_OVER_THROW_MOB|PASS_ACID_GRENADE + flags_can_pass_behind_temp |= ~PASS_OVER_THROW_MOB|PASS_ACID_GRENADE climbable = TRUE update_icon() new/obj/item/stack/barbed_wire( src.loc ) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_abilities.dm index 885e35dda77b9..6508f3f37170b 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_abilities.dm @@ -278,7 +278,7 @@ var/obj/item/explosive/grenade/xeno_acid_grenade/grenade = new /obj/item/explosive/grenade/xeno_acid_grenade grenade.cause_data = create_cause_data(initial(acid_ball_user.caste_type), acid_ball_user) grenade.forceMove(get_turf(acid_ball_user)) - grenade.throw_atom(target, 5, SPEED_AVERAGE, acid_ball_user, TRUE, launch_type = HIGH_LAUNCH) + grenade.throw_atom(target_atom, 5, SPEED_AVERAGE, acid_ball_user, TRUE, launch_type = HIGH_LAUNCH, pass_flags = PASS_ACID_GRENADE) addtimer(CALLBACK(grenade, TYPE_PROC_REF(/obj/item/explosive, prime)), prime_delay) return ..() From a4f74c9ddbd6080f355d792b7beed74f091edc97 Mon Sep 17 00:00:00 2001 From: Venuska1117 Date: Thu, 13 Aug 2026 13:16:56 +0200 Subject: [PATCH 4/4] Drathek suggested changes: PASS_ACID_GRENADE is inside PASS_OVER, no need to add it to initialize unless adding it to PASS_OVER was bad idea. --- code/game/objects/structures/barricade/barricade.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/objects/structures/barricade/barricade.dm b/code/game/objects/structures/barricade/barricade.dm index 5ab33be23e4d1..ec740878b3a80 100644 --- a/code/game/objects/structures/barricade/barricade.dm +++ b/code/game/objects/structures/barricade/barricade.dm @@ -268,8 +268,8 @@ update_health(-50) can_wire = FALSE is_wired = TRUE - flags_can_pass_front_temp &= ~PASS_OVER_THROW_MOB|PASS_ACID_GRENADE - flags_can_pass_behind_temp &= ~PASS_OVER_THROW_MOB|PASS_ACID_GRENADE + flags_can_pass_front_temp &= ~(PASS_OVER_THROW_MOB|PASS_ACID_GRENADE) + flags_can_pass_behind_temp &= ~(PASS_OVER_THROW_MOB|PASS_ACID_GRENADE) climbable = FALSE update_icon() return @@ -289,8 +289,8 @@ update_health(50) can_wire = TRUE is_wired = FALSE - flags_can_pass_front_temp |= ~PASS_OVER_THROW_MOB|PASS_ACID_GRENADE - flags_can_pass_behind_temp |= ~PASS_OVER_THROW_MOB|PASS_ACID_GRENADE + flags_can_pass_front_temp |= PASS_OVER_THROW_MOB|PASS_ACID_GRENADE + flags_can_pass_behind_temp |= PASS_OVER_THROW_MOB|PASS_ACID_GRENADE climbable = TRUE update_icon() new/obj/item/stack/barbed_wire( src.loc )