Changes to crusher trophies and mining AOE, adds a new raptor-sourced trophy (#92241)

## About The Pull Request

- Rebuke effect (from god's eye and lobstrocity claw trophy) now works
on basicmobs, increasing the cooldown on their ranged attacks just like
it does for simplemobs.
- Bileworm spewlet trophy shots no longer hit your allied mobs, as
previously this would cause you to constantly hit your own
raptor/minebots/NODE drones, making it actively detrimental in some
situations. Its shots now deals brute damage instead of burn, as
otherwise its damage was reduced by 70% due to innate projectile
resistance of lavaland mobs, making it deal measely 6 damage every 10
seconds.
- MOD sphere module bombs now properly aggro lavaland mobs, as
previously they only worked on simplemobs (also fixed a direct
assignment to the blackboard in legionnaire spine code).
- They also no longer deal damage to minebots and NODE drones.
- Afterimages from the ice demon and their trophy can now be passed
through, although hostile AI would attempt to avoid doing so. This way
the trophy should no longer be an active detriment to players, and
demons themselves should be less jank to fight.

And if you're a heartless enough bastard, you can kill and butcher your
raptor to get a new raptor feather crusher trophy, which allows your
destabilizer shots to phase through your allied mobs similarly to
passthrough mods for PKA.

<img width="174" height="125" alt="Aseprite_3Olcd7oyVJ"
src="https://github.com/user-attachments/assets/99d7eebb-e36d-428b-aa48-f1261a173ca1"
/>

## Why It's Good For The Game

These changes should make vent defense more bearable, as right now its
very easy to accidentally damage and kill your own drone due to them
being hit by all AOEs in miner arsenal.
- Rebuke - should probably work on basicmobs as only remaining
simplemobs on lavaland are megafauna
- Bileworm spewlet - its a joke of a trophy at 6 damage as it has a 10
second cooldown, and it hitting your allies made vent defense much
harder than it should've been
- Sphere changes - should make bombs not kill your NODE/mining drones,
aggro helps prevent cheese.
- Afterimages - the trophy can end up bodyblocking you, this change
should make it less of a pain in the ass to use the trophy and to fight
the demons themselves.
- Raptor feather - useful for vent defense when you're using minebots or
have dismounted your raptor, right now its a pain for reasons mentioned
above

## Changelog
🆑
add: Added a raptor feather crusher trophy which makes your crusher
shots go through your allied mobs.
balance: Rebuke effect from lobster claw trophy and the eye of god now
applies to basicmob attacks
balance: Bileworm spewlet's damage is no longer reduced by 70% when
hitting lavaland fauna, and it no longer can hit allied mobs
balance: Sphere MODule bombs no longer hit NODE drones and minebots
balance: Ice demon/ice demon cube afterimages can now be walked through
by players
fix: Sphere MODule bombs now aggro basicmobs hit by their explosions
/🆑
This commit is contained in:
SmArtKar
2025-07-28 17:24:19 +10:00
committed by GitHub
parent 1e1d19099c
commit 5a263b77a3
17 changed files with 128 additions and 24 deletions
@@ -188,15 +188,15 @@
// Detonation effect
var/datum/status_effect/crusher_damage/crusher_damage_effect = target.has_status_effect(/datum/status_effect/crusher_damage) || target.apply_status_effect(/datum/status_effect/crusher_damage)
var/target_health = target.health
var/combined_damage = detonation_damage
for(var/obj/item/crusher_trophy/crusher_trophy as anything in trophies)
crusher_trophy.on_mark_detonation(target, user)
combined_damage += crusher_trophy.on_mark_detonation(target, user)
if(QDELETED(target))
return
if(!QDELETED(crusher_damage_effect))
crusher_damage_effect.total_damage += target_health - target.health //we did some damage, but let's not assume how much we did
new /obj/effect/temp_visual/kinetic_blast(get_turf(target))
var/backstabbed = FALSE
var/combined_damage = detonation_damage
var/def_check = target.getarmor(type = BOMB)
// Backstab bonus
if(check_behind(user, target) || boosted_mark)
@@ -297,6 +297,8 @@
log_override = TRUE
/// Has this projectile been boosted
var/boosted = FALSE
/// Should this projectile go through allied mobs?
var/ignore_allies = FALSE
/obj/projectile/destabilizer/Initialize(mapload)
. = ..()
@@ -313,6 +315,14 @@
damage = 10
range = 9
/obj/projectile/destabilizer/prehit_pierce(atom/target)
if(!isliving(target) || !firer || !ignore_allies)
return ..()
var/mob/living/victim = target
if(firer.faction_check_atom(victim))
return PROJECTILE_PIERCE_PHASE
return ..()
/obj/projectile/destabilizer/on_hit(atom/target, blocked = 0, pierce_hit)
var/obj/item/kinetic_crusher/used_crusher
if(istype(fired_from, /obj/item/kinetic_crusher))
@@ -63,6 +63,7 @@
return
/// Does an effect when you hit a mob that is marked via the projectile
/// Returns additional damage for detonation
/obj/item/crusher_trophy/proc/on_mark_detonation(mob/living/target, mob/living/user) //the target and the user
SHOULD_CALL_PARENT(TRUE)
//if we dont have a set id, use the typepath as identifier
@@ -103,7 +103,7 @@
missing_health *= missing_health_ratio //bonus is active at all times, even if you're above 90 health
missing_health *= bonus_value //multiply the remaining amount by bonus_value
if(missing_health > 0)
target.adjustBruteLoss(missing_health) //and do that much damage
return missing_health //and do that much damage
// Lobstrosity - Rebukes targets, increasing their click cooldown.
/obj/item/crusher_trophy/lobster_claw
@@ -116,7 +116,7 @@
wildhunter_drop = /obj/item/organ/monster_core/rush_gland
/obj/item/crusher_trophy/lobster_claw/effect_desc()
return "mark detonation to briefly rebuke the target for [bonus_value] seconds"
return "mark detonation to briefly rebuke the target for [bonus_value] second[bonus_value > 1 ? "s" : ""]"
/obj/item/crusher_trophy/lobster_claw/on_mark_detonation(mob/living/target, mob/living/user)
. = ..()
@@ -186,13 +186,29 @@
check_flags = NONE
owner_has_control = FALSE
cooldown_time = 10 SECONDS
projectile_type = /obj/projectile/bileworm_acid
projectile_type = /obj/projectile/bileworm_acid/crusher
projectile_sound = 'sound/mobs/non-humanoids/bileworm/bileworm_spit.ogg'
/datum/action/cooldown/mob_cooldown/projectile_attack/dir_shots/spewlet/New(Target)
firing_directions = GLOB.cardinals.Copy()
return ..()
/obj/projectile/bileworm_acid/crusher
damage_type = BRUTE // Otherwise the mobs take heavily reduced damage
/obj/projectile/bileworm_acid/crusher/prehit_pierce(atom/target)
if (!isliving(target))
return ..()
var/mob/living/as_living = target
// Only hit hostile things, or mining mobs if we have no firer (somehow)
if (firer)
if (firer.faction_check_atom(as_living))
return PROJECTILE_DELETE_WITHOUT_HITTING
return ..()
if (as_living.mob_biotypes & MOB_MINING)
return ..()
return PROJECTILE_DELETE_WITHOUT_HITTING
// demonic watcher
/obj/item/crusher_trophy/ice_demon_cube
name = "demonic cube"
@@ -245,7 +261,7 @@
. = ..()
user.apply_status_effect(/datum/status_effect/speed_boost, 1 SECONDS)
// Polar bear
// Polar bear - If you're hurt, you attack twice when you detonate a mark
/obj/item/crusher_trophy/bear_paw
name = "polar bear paw"
desc = "It's a polar bear paw."
@@ -260,7 +276,21 @@
. = ..()
if(user.health / user.maxHealth > 0.5)
return
var/obj/item/I = user.get_active_held_item()
if(!I)
return
I.melee_attack_chain(user, target, null)
var/obj/item/weapon = user.get_active_held_item()
if(weapon)
addtimer(CALLBACK(weapon, TYPE_PROC_REF(/obj/item, melee_attack_chain), user, target), 0.1 SECONDS)
// Raptor - Your shots now go through your allied mobs. You monster.
/obj/item/crusher_trophy/raptor_feather
name = "raptor feather"
desc = "A feather of an innocent raptor. You'd go to hell for this one, if you weren't already mining in it."
icon_state = "raptor_feather"
denied_type = /obj/item/crusher_trophy/raptor_feather
trophy_id = TROPHY_RAPTOR_FEATHER
wildhunter_drop = /obj/item/food/meat/slab/chicken
/obj/item/crusher_trophy/raptor_feather/effect_desc()
return "your shots to go through your allies"
/obj/item/crusher_trophy/raptor_feather/on_projectile_fire(obj/projectile/destabilizer/marker, mob/living/user)
marker.ignore_allies = TRUE
@@ -222,7 +222,7 @@
return
var/mob/living/basic/legion_brood/minion = new (user.loc)
minion.assign_creator(user)
minion.ai_controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] = target
minion.ai_controller.set_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET, target)
/obj/item/crusher_trophy/legionnaire_spine/attack_self(mob/user)
if(!isliving(user))
@@ -241,7 +241,7 @@
//The Thing
/obj/item/crusher_trophy/flesh_glob
name = "glob of shifting flesh"
desc = "A glob of shifting flesh. Sealed shut permanently. Suitable as a trophy for a kinetic crusher."
desc = "A glob of shifting flesh, sealed shut permanently. Suitable as a trophy for a kinetic crusher."
icon_state = "glob"
denied_type = /obj/item/crusher_trophy/flesh_glob
bonus_value = 20