Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Megafauna no longer gib bodies #9807

Merged
merged 4 commits into from
Nov 6, 2023
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -152,14 +152,6 @@ Difficulty: Medium
if(isliving(target))
var/mob/living/L = target
if(L.stat == DEAD)
visible_message("<span class='danger'>[src] butchers [L]!</span>",
"<span class='userdanger'>You butcher [L], restoring your health!</span>")
if(!is_station_level(z) || client) //NPC monsters won't heal while on station
if(guidance)
adjustHealth(-L.maxHealth)
else
adjustHealth(-(L.maxHealth * 0.5))
L.gib()
return TRUE
changeNext_move(CLICK_CD_MELEE)
miner_saw.melee_attack_chain(src, target)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -259,14 +259,15 @@ Difficulty: Hard
new /obj/effect/temp_visual/bubblegum_hands/leftthumb(T)
SLEEP_CHECK_DEATH(6)
for(var/mob/living/L in T)
if(!faction_check_mob(L))
if(L.stat != CONSCIOUS)
to_chat(L, "<span class='userdanger'>[src] drags you through the blood!</span>")
playsound(T, 'sound/magic/enter_blood.ogg', 100, 1, -1)
var/turf/targetturf = get_step(src, dir)
L.forceMove(targetturf)
playsound(targetturf, 'sound/magic/exit_blood.ogg', 100, 1, -1)
addtimer(CALLBACK(src, PROC_REF(devour), L), 2)
if(faction_check_mob(L))
continue
if(L.stat == CONSCIOUS || L.stat == DEAD)
continue
to_chat(L, "<span class='userdanger'>[src] drags you through the blood!</span>")
playsound(T, 'sound/magic/enter_blood.ogg', 100, 1, -1)
var/turf/targetturf = get_step(src, dir)
L.forceMove(targetturf)
playsound(targetturf, 'sound/magic/exit_blood.ogg', 100, 1, -1)
SLEEP_CHECK_DEATH(1)

/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/blood_warp()
Expand Down Expand Up @@ -384,13 +385,6 @@ Difficulty: Hard
if(useoriginal)
charge(chargeat, delay, chargepast)

/mob/living/simple_animal/hostile/megafauna/bubblegum/devour(mob/living/L)
var/turf/death_turf = get_turf(L)
. = ..()
if(. && death_turf)
for(var/i in 1 to 3)
new /mob/living/simple_animal/hostile/asteroid/hivelordbrood/slaughter(death_turf)

/mob/living/simple_animal/hostile/megafauna/bubblegum/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
. = ..()
if(. > 0 && prob(25))
Expand Down
22 changes: 10 additions & 12 deletions code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
Original file line number Diff line number Diff line change
Expand Up @@ -351,18 +351,16 @@ Difficulty: Medium
icon_state = "dragon"
playsound(loc, 'sound/effects/meteorimpact.ogg', 200, 1)
for(var/mob/living/L in orange(1, src))
if(L.stat)
visible_message("<span class='warning'>[src] slams down on [L], crushing [L.p_them()]!</span>")
L.gib()
else
L.adjustBruteLoss(75)
if(L && !QDELETED(L)) // Some mobs are deleted on death
var/throw_dir = get_dir(src, L)
if(L.loc == loc)
throw_dir = pick(GLOB.alldirs)
var/throwtarget = get_edge_target_turf(src, throw_dir)
L.throw_at(throwtarget, 3)
visible_message("<span class='warning'>[L] is thrown clear of [src]!</span>")
if(L.stat == DEAD)
continue
L.adjustBruteLoss(75)
if(L && !QDELETED(L)) // Some mobs are deleted on death
var/throw_dir = get_dir(src, L)
if(L.loc == loc)
throw_dir = pick(GLOB.alldirs)
var/throwtarget = get_edge_target_turf(src, throw_dir)
L.throw_at(throwtarget, 3)
visible_message("<span class='warning'>[L] is thrown clear of [src]!</span>")
for(var/obj/mecha/M in orange(1, src))
M.take_damage(75, BRUTE, MELEE, 1)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -432,22 +432,21 @@ Difficulty: Hard
did_reset = FALSE

/mob/living/simple_animal/hostile/megafauna/hierophant/AttackingTarget()
if(!blinking)
if(target && isliving(target))
var/mob/living/L = target
if(L.stat != DEAD)
if(ranged_cooldown <= world.time)
calculate_rage()
ranged_cooldown = world.time + max(5, ranged_cooldown_time - anger_modifier * 0.75)
INVOKE_ASYNC(src, PROC_REF(burst), get_turf(src))
else
burst_range = 3
INVOKE_ASYNC(src, PROC_REF(burst), get_turf(src), 0.25) //melee attacks on living mobs cause it to release a fast burst if on cooldown
OpenFire()
else
devour(L)
else
return ..()
if(blinking)
return
if(!target || !isliving(target))
return ..()
var/mob/living/L = target
if(L.stat == DEAD)
return
if(ranged_cooldown <= world.time)
calculate_rage()
ranged_cooldown = world.time + max(5, ranged_cooldown_time - anger_modifier * 0.75)
INVOKE_ASYNC(src, PROC_REF(burst), get_turf(src))
else
burst_range = 3
INVOKE_ASYNC(src, PROC_REF(burst), get_turf(src), 0.25) //melee attacks on living mobs cause it to release a fast burst if on cooldown
OpenFire()

/mob/living/simple_animal/hostile/megafauna/hierophant/DestroySurroundings()
if(!blinking)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,30 +104,15 @@
if(recovery_time >= world.time)
return
. = ..()
if(. && isliving(target))
var/mob/living/L = target
if(L.stat != DEAD)
if(!client && ranged && ranged_cooldown <= world.time)
OpenFire()

if(L.health <= HEALTH_THRESHOLD_DEAD && HAS_TRAIT(L, TRAIT_NODEATH)) //Nope, it still gibs yall
devour(L)
else
devour(L)

/mob/living/simple_animal/hostile/megafauna/proc/devour(mob/living/L)
if(!L)
return FALSE
visible_message(
"<span class='danger'>[src] devours [L]!</span>",
"<span class='userdanger'>You feast on [L], restoring your health!</span>")
if(!is_station_level(z) || client) //NPC monsters won't heal while on station
adjustBruteLoss(-L.maxHealth/2)
for(var/obj/item/W in L)
if(!L.dropItemToGround(W))
qdel(W)
L.gib()
return TRUE
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this proc should go away entirely - megafauna should still have some means of healing after scoring a kill, though I'm not sure by exactly what means.

Do you have any thoughts on it?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe that with enough dedication and perseverance dying/being recovered/being revived you probably deserve the kill. I don't think there will be any non-snowflake way of making them heal after each kill, and just the time investment in beginning the fight, dying, waiting to be recovered, the paramedic dodging the megafauna, and being brought back to the station (?) and being revived, not by defib mind you because the organs are probably going to be rotten, that you won't get far just trying to brute force bubblegum or something.

if(!. || !isliving(target))
return

var/mob/living/L = target
if(L.stat == DEAD)
return

if(!client && ranged && ranged_cooldown <= world.time)
OpenFire()

/mob/living/simple_animal/hostile/megafauna/ex_act(severity, target)
switch (severity)
Expand Down