Files
Bubberstation/code/modules/bitrunning/util/virtual_megafauna.dm
Thunder12345 232b5013a2 Blood drunk miner bitrunner domain drops the cache correctly (#95005)
## About The Pull Request

Added support for turning basic mob bosses into virtual megafauna. Moved
blood drunk miner's loot dropping behaviour up to /basic/boss to support
this better in future.

Fixes #94878 

## Why It's Good For The Game

It's not very useful if admins have to spawn the cache manually or lose
the time and points spent on the domain.

## Changelog
🆑
fix: The Sanguine Excavation bitrunning domain will drop the cache on
killing the boss again.
/🆑
2026-01-27 11:54:13 -07:00

52 lines
2.1 KiB
Plaintext

/// Removes all the loot and achievements from megafauna for bitrunning related (/simple_animal/hostile/megafauna version)
/mob/living/simple_animal/hostile/megafauna/proc/make_virtual_megafauna()
var/new_max = clamp(maxHealth * 0.5, 600, 1300)
maxHealth = new_max
health = new_max
true_spawn = FALSE
// rebuild the achievement element's arguments to remove it appropriately
if (achievement_type || score_achievement_type)
var/list/achievements = list(/datum/award/achievement/boss/boss_killer, /datum/award/score/boss_score)
if (achievement_type)
achievements += achievement_type
if (score_achievement_type)
achievements += score_achievement_type
RemoveElement(/datum/element/kill_achievement, string_list(achievements), crusher_achievement_type, /datum/memory/megafauna_slayer)
// remove the crusher loot element's arguments also to remove it appropriately
RemoveElement(\
/datum/element/crusher_loot,\
trophy_type = crusher_loot,\
guaranteed_drop = 0.6,\
replace_all = replace_crusher_drop,\
drop_immediately = del_on_death,\
)
loot.Cut()
loot += /obj/structure/closet/crate/secure/bitrunning/encrypted
/// Removes all the loot and achievements from megafauna for bitrunning related (/basic/boss version)
/mob/living/basic/boss/proc/make_virtual_megafauna()
var/new_max = clamp(maxHealth * 0.5, 600, 1300)
maxHealth = new_max
health = new_max
// rebuild the achievement element's arguments to remove it appropriately
if (achievements)
var/list/achievements_list = list(/datum/award/achievement/boss/boss_killer, /datum/award/score/boss_score)
achievements_list += achievements
RemoveElement(/datum/element/kill_achievement, string_list(achievements_list), crusher_achievement_type, /datum/memory/megafauna_slayer)
// remove the crusher loot element's arguments also to remove it appropriately
RemoveElement(\
/datum/element/crusher_loot,\
trophy_type = string_list(crusher_loot),\
guaranteed_drop = 0.6,\
drop_immediately = DEL_ON_DEATH,\
)
RemoveElement(/datum/element/death_drops, string_list(regular_loot))
AddElement(/datum/element/death_drops, /obj/structure/closet/crate/secure/bitrunning/encrypted)