From 61700e2d9247eb1d9f228551de675028c8f513ed Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Fri, 24 Jun 2022 17:25:58 -0700 Subject: [PATCH] better (#14503) --- .../hostile/megafauna/_megafauna.dm | 5 +++++ .../hostile/mining_mobs/mining_mobs.dm | 8 ++++++++ .../ashwalkers/code/megafauna/_megafauna.dm | 13 ------------- .../ashwalkers/code/species/Ashwalkers.dm | 13 +++++++++++++ .../ashwalkers/code/species/damage_datum.dm | 18 ++++++++++++++++++ tgstation.dme | 1 + 6 files changed, 45 insertions(+), 13 deletions(-) delete mode 100644 modular_skyrat/modules/ashwalkers/code/megafauna/_megafauna.dm create mode 100644 modular_skyrat/modules/ashwalkers/code/species/damage_datum.dm diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm index 8b8c3ed081f..ad163da15d0 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm @@ -91,6 +91,11 @@ if(crusher_dmg && crusher_loot && crusher_dmg.total_damage >= maxHealth * 0.6) spawn_crusher_loot() crusher_kill = TRUE + //SKYRAT ADDITION START - ASHWALKER TROPHIES + var/datum/status_effect/ashwalker_damage/ashie_damage = has_status_effect(/datum/status_effect/ashwalker_damage) + if(!crusher_kill && ashie_damage && crusher_loot && ashie_damage.total_damage >= maxHealth * 0.6) + spawn_crusher_loot() + //SKYRAT ADDITION END if(true_spawn && !(flags_1 & ADMIN_SPAWNED_1)) var/tab = "megafauna_kills" if(crusher_kill) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm index a2d565ad0fe..c274acd7150 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm @@ -54,8 +54,16 @@ /mob/living/simple_animal/hostile/asteroid/death(gibbed) SSblackbox.record_feedback("tally", "mobs_killed_mining", 1, type) var/datum/status_effect/crusher_damage/C = has_status_effect(/datum/status_effect/crusher_damage) + var/crusher_loot_spawned = FALSE //SKYRAT ADDITION if(C && crusher_loot && prob((C.total_damage/maxHealth) * crusher_drop_mod)) //on average, you'll need to kill 4 creatures before getting the item spawn_crusher_loot() + crusher_loot_spawned = TRUE //SKYRAT ADDITION + //SKYRAT ADDITION START - ASHWALKER TROPHIES + var/datum/status_effect/ashwalker_damage/ashie_damage = has_status_effect(/datum/status_effect/ashwalker_damage) + if(!crusher_loot_spawned && ashie_damage && crusher_loot && prob((ashie_damage.total_damage / maxHealth) * crusher_drop_mod)) + spawn_crusher_loot() + crusher_loot_spawned = TRUE + //SKYRAT ADDITION END ..(gibbed) /mob/living/simple_animal/hostile/asteroid/proc/spawn_crusher_loot() diff --git a/modular_skyrat/modules/ashwalkers/code/megafauna/_megafauna.dm b/modular_skyrat/modules/ashwalkers/code/megafauna/_megafauna.dm deleted file mode 100644 index accfd8e2dd2..00000000000 --- a/modular_skyrat/modules/ashwalkers/code/megafauna/_megafauna.dm +++ /dev/null @@ -1,13 +0,0 @@ -/mob/living/simple_animal/hostile/megafauna - /// Has this been harmed by an ashwalker at least once? - var/ashwalker_harmed = FALSE - -/mob/living/simple_animal/hostile/megafauna/attacked_by(obj/item/I, mob/living/user) - if(!ashwalker_harmed && is_species(user, /datum/species/lizard/ashwalker)) - ashwalker_harmed = TRUE - return ..() - -/mob/living/simple_animal/hostile/megafauna/death(gibbed, list/force_grant) - if(ashwalker_harmed) - spawn_crusher_loot() - return ..() diff --git a/modular_skyrat/modules/ashwalkers/code/species/Ashwalkers.dm b/modular_skyrat/modules/ashwalkers/code/species/Ashwalkers.dm index 5bc4b236449..0e4e0cbde4a 100644 --- a/modular_skyrat/modules/ashwalkers/code/species/Ashwalkers.dm +++ b/modular_skyrat/modules/ashwalkers/code/species/Ashwalkers.dm @@ -6,7 +6,20 @@ /datum/species/lizard/ashwalker/on_species_gain(mob/living/carbon/C, datum/species/old_species) . = ..() ADD_TRAIT(C, TRAIT_ASHSTORM_IMMUNE, SPECIES_TRAIT) + RegisterSignal(C, COMSIG_MOB_ITEM_ATTACK, .proc/mob_attack) /datum/species/lizard/ashwalker/on_species_loss(mob/living/carbon/C) . = ..() REMOVE_TRAIT(C, TRAIT_ASHSTORM_IMMUNE, SPECIES_TRAIT) + UnregisterSignal(C, COMSIG_MOB_ITEM_ATTACK) + +/datum/species/lizard/ashwalker/proc/mob_attack(datum/source, mob/M, mob/user) + SIGNAL_HANDLER + + if(!isliving(M)) + return + var/mob/living/living_target = M + var/datum/status_effect/ashwalker_damage/ashie_damage = living_target.has_status_effect(/datum/status_effect/ashwalker_damage) + if(!ashie_damage) + ashie_damage = living_target.apply_status_effect(/datum/status_effect/ashwalker_damage) + ashie_damage.register_mob_damage(living_target) diff --git a/modular_skyrat/modules/ashwalkers/code/species/damage_datum.dm b/modular_skyrat/modules/ashwalkers/code/species/damage_datum.dm new file mode 100644 index 00000000000..66d95199b60 --- /dev/null +++ b/modular_skyrat/modules/ashwalkers/code/species/damage_datum.dm @@ -0,0 +1,18 @@ +/datum/status_effect/ashwalker_damage //tracks the damage dealt to this mob by ashwalkers + id = "ashwalker_damage" + duration = -1 + tick_interval = -1 + status_type = STATUS_EFFECT_UNIQUE + alert_type = null + /// How much damage has been dealt to the mob + var/total_damage = 0 + +/datum/status_effect/ashwalker_damage/proc/register_mob_damage(mob/living/target) + RegisterSignal(target, COMSIG_MOB_APPLY_DAMAGE, .proc/calculate_total) + +/datum/status_effect/ashwalker_damage/proc/calculate_total(datum/source, damage, damagetype, def_zone) + SIGNAL_HANDLER + + if(!QDELETED(src)) + total_damage += damage + UnregisterSignal(source, COMSIG_MOB_APPLY_DAMAGE) diff --git a/tgstation.dme b/tgstation.dme index 511742df4cd..79d47738474 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4911,6 +4911,7 @@ #include "modular_skyrat\modules\ashwalkers\code\items\ash_weapon.dm" #include "modular_skyrat\modules\ashwalkers\code\items\ashwalker_shaman.dm" #include "modular_skyrat\modules\ashwalkers\code\species\Ashwalkers.dm" +#include "modular_skyrat\modules\ashwalkers\code\species\damage_datum.dm" #include "modular_skyrat\modules\ashwalkers\code\turfs\icemoon_tiles.dm" #include "modular_skyrat\modules\assault_operatives\code\areas.dm" #include "modular_skyrat\modules\assault_operatives\code\assault_operatives.dm"