From 5f921601a3ec15f2eb84bdad57972269eb98e677 Mon Sep 17 00:00:00 2001 From: Arturlang <24881678+Arturlang@users.noreply.github.com> Date: Fri, 6 Dec 2024 15:59:36 +0200 Subject: [PATCH] Not doing portals no longer kills the dragon (#2596) ## About The Pull Request When the dragon runs out of time to make a rift, instead of deleting the dragon, they are given the dragon depression movespeed debuff. ## Why It's Good For The Game You are forced to get into full on combat with everyone or be literally deleted, this should give people a chance to RP as dragon, with dragon ## Proof Of Testing Tested and it confirmed that it did not break the victory condition ## Changelog :cl: del: Dragon no longer gets deleted if you don't do rifts, instead you are given dragon depression, which slows you down heavily. /:cl: --- code/modules/antagonists/space_dragon/carp_rift.dm | 1 + .../antagonists/space_dragon/space_dragon.dm | 11 +++++------ code/modules/movespeed/modifiers/mobs.dm | 2 ++ code/modules/unit_tests/dragon_expiration.dm | 14 +++++++++----- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/code/modules/antagonists/space_dragon/carp_rift.dm b/code/modules/antagonists/space_dragon/carp_rift.dm index 6299bde9275..e6c21112623 100644 --- a/code/modules/antagonists/space_dragon/carp_rift.dm +++ b/code/modules/antagonists/space_dragon/carp_rift.dm @@ -35,6 +35,7 @@ return if(locate(/obj/structure/carp_rift) in owner.loc) return + owner.remove_movespeed_modifier(/datum/movespeed_modifier/dragon_depression/no_portal) // BUBBER ADDITION var/obj/structure/carp_rift/new_rift = new(get_turf(owner)) playsound(owner.loc, 'sound/vehicles/rocketlaunch.ogg', 100, TRUE) dragon.riftTimer = -1 diff --git a/code/modules/antagonists/space_dragon/space_dragon.dm b/code/modules/antagonists/space_dragon/space_dragon.dm index 74b0c60a872..6b695e5fca7 100644 --- a/code/modules/antagonists/space_dragon/space_dragon.dm +++ b/code/modules/antagonists/space_dragon/space_dragon.dm @@ -132,7 +132,6 @@ /datum/antagonist/space_dragon/proc/rift_checks() if((rifts_charged == 3 || (SSshuttle.emergency.mode == SHUTTLE_DOCKED && rifts_charged > 0)) && !objective_complete) victory() - return if(riftTimer == -1) return riftTimer = min(riftTimer + 1, maxRiftTimer + 1) @@ -140,11 +139,11 @@ to_chat(owner.current, span_boldwarning("You have a minute left to summon the rift! Get to it!")) return if(riftTimer >= maxRiftTimer) - to_chat(owner.current, span_boldwarning("You've failed to summon the rift in a timely manner! You're being pulled back from whence you came!")) - destroy_rifts() - SEND_SOUND(owner.current, sound('sound/effects/magic/demon_dies.ogg')) - owner.current.death(/* gibbed = */ TRUE) - QDEL_NULL(owner.current) + // BUBBER CHANGE START: dragons don't die to not summoning a rift + to_chat(owner.current, span_boldwarning("You've failed to summon the rift in a timely manner! You will be slowed down until you do so!")) + owner.current.add_movespeed_modifier(/datum/movespeed_modifier/dragon_depression/no_portal) + riftTimer = -1 + // BUBBER CHANGE END /** * Destroys all of Space Dragon's current rifts. diff --git a/code/modules/movespeed/modifiers/mobs.dm b/code/modules/movespeed/modifiers/mobs.dm index aa8c8153e97..46335367763 100644 --- a/code/modules/movespeed/modifiers/mobs.dm +++ b/code/modules/movespeed/modifiers/mobs.dm @@ -145,6 +145,8 @@ /datum/movespeed_modifier/dragon_depression multiplicative_slowdown = 5 +/datum/movespeed_modifier/dragon_depression/no_portal + /datum/movespeed_modifier/morph_disguised multiplicative_slowdown = -1 diff --git a/code/modules/unit_tests/dragon_expiration.dm b/code/modules/unit_tests/dragon_expiration.dm index 45262dc9d60..e2ea43fa128 100644 --- a/code/modules/unit_tests/dragon_expiration.dm +++ b/code/modules/unit_tests/dragon_expiration.dm @@ -23,9 +23,13 @@ var/datum/antagonist/space_dragon/dragon_antag_datum = dragon_time.mind.add_antag_datum(/datum/antagonist/space_dragon) dragon_time.eat(to_be_consumed) - dragon_antag_datum.riftTimer = dragon_antag_datum.maxRiftTimer + 1 - dragon_antag_datum.rift_checks() + // BUBBER CHANGE START: dragon doesn't have a riftTimer anymore + dragon_time.death(TRUE) + QDEL_NULL(dragon_antag_datum.owner.current) + // dragon_antag_datum.riftTimer = dragon_antag_datum.maxRiftTimer + 1 + // dragon_antag_datum.rift_checks() - TEST_ASSERT(QDELETED(dragon_time), "The space dragon wasn't deleted after having its rift timer exceeded!") - TEST_ASSERT(!QDELETED(to_be_consumed), "After having its rift timer exceeded, the dragon deleted the dummy instead! The dragon should be dead prior to being deleted!") - TEST_ASSERT(isturf(to_be_consumed.loc), "After having its rift timer exceeded, the dragon did not eject the dummy! (Dummy's loc: [to_be_consumed.loc])") + // TEST_ASSERT(QDELETED(dragon_time), "The space dragon wasn't deleted after having its rift timer exceeded!") + TEST_ASSERT(!QDELETED(to_be_consumed), "After eating the dummy and dying, the dragon deleted the dummy instead!") + TEST_ASSERT(isturf(to_be_consumed.loc), "After eating the dummy and dying, the dragon did not eject the dummy! (Dummy's loc: [to_be_consumed.loc])") + // BUBBER CHANGE END