mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-11 18:22:14 +00:00
Fixes Shadow Walk (#77518)
## About The Pull Request Phased mobs are not turfs so the new check failed. Fixes this and adds a unit test for it. Also makes shadow walk VV-able to any level of lightness. ## Changelog 🆑 Melbert fix: Fixes Shadow Walk /🆑
This commit is contained in:
@@ -19,6 +19,12 @@
|
|||||||
/// What dummy mob type do we put jaunters in on jaunt?
|
/// What dummy mob type do we put jaunters in on jaunt?
|
||||||
var/jaunt_type = /obj/effect/dummy/phased_mob
|
var/jaunt_type = /obj/effect/dummy/phased_mob
|
||||||
|
|
||||||
|
/datum/action/cooldown/spell/jaunt/get_caster_from_target(atom/target)
|
||||||
|
if(istype(target.loc, jaunt_type))
|
||||||
|
return target
|
||||||
|
|
||||||
|
return ..()
|
||||||
|
|
||||||
/datum/action/cooldown/spell/jaunt/before_cast(atom/cast_on)
|
/datum/action/cooldown/spell/jaunt/before_cast(atom/cast_on)
|
||||||
return ..() | SPELL_NO_FEEDBACK // Don't do the feedback until after we're jaunting
|
return ..() | SPELL_NO_FEEDBACK // Don't do the feedback until after we're jaunting
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,9 @@
|
|||||||
spell_requirements = NONE
|
spell_requirements = NONE
|
||||||
jaunt_type = /obj/effect/dummy/phased_mob/shadow
|
jaunt_type = /obj/effect/dummy/phased_mob/shadow
|
||||||
|
|
||||||
|
/// The max amount of lumens on a turf allowed before we can no longer enter jaunt with this
|
||||||
|
var/light_threshold = SHADOW_SPECIES_LIGHT_THRESHOLD
|
||||||
|
|
||||||
/datum/action/cooldown/spell/jaunt/shadow_walk/Grant(mob/grant_to)
|
/datum/action/cooldown/spell/jaunt/shadow_walk/Grant(mob/grant_to)
|
||||||
. = ..()
|
. = ..()
|
||||||
RegisterSignal(grant_to, COMSIG_MOVABLE_MOVED, PROC_REF(update_status_on_signal))
|
RegisterSignal(grant_to, COMSIG_MOVABLE_MOVED, PROC_REF(update_status_on_signal))
|
||||||
@@ -17,6 +20,12 @@
|
|||||||
. = ..()
|
. = ..()
|
||||||
UnregisterSignal(remove_from, COMSIG_MOVABLE_MOVED)
|
UnregisterSignal(remove_from, COMSIG_MOVABLE_MOVED)
|
||||||
|
|
||||||
|
/datum/action/cooldown/spell/jaunt/shadow_walk/enter_jaunt(mob/living/jaunter, turf/loc_override)
|
||||||
|
var/obj/effect/dummy/phased_mob/shadow/shadow = ..()
|
||||||
|
if(istype(shadow))
|
||||||
|
shadow.light_max = light_threshold
|
||||||
|
return shadow
|
||||||
|
|
||||||
/datum/action/cooldown/spell/jaunt/shadow_walk/can_cast_spell(feedback = TRUE)
|
/datum/action/cooldown/spell/jaunt/shadow_walk/can_cast_spell(feedback = TRUE)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!.)
|
if(!.)
|
||||||
@@ -24,7 +33,7 @@
|
|||||||
if(is_jaunting(owner))
|
if(is_jaunting(owner))
|
||||||
return TRUE
|
return TRUE
|
||||||
var/turf/cast_turf = get_turf(owner)
|
var/turf/cast_turf = get_turf(owner)
|
||||||
if(cast_turf.get_lumcount() >= SHADOW_SPECIES_LIGHT_THRESHOLD)
|
if(cast_turf.get_lumcount() >= light_threshold)
|
||||||
if(feedback)
|
if(feedback)
|
||||||
to_chat(owner, span_warning("It isn't dark enough here!"))
|
to_chat(owner, span_warning("It isn't dark enough here!"))
|
||||||
return FALSE
|
return FALSE
|
||||||
@@ -44,6 +53,8 @@
|
|||||||
|
|
||||||
/obj/effect/dummy/phased_mob/shadow
|
/obj/effect/dummy/phased_mob/shadow
|
||||||
name = "shadows"
|
name = "shadows"
|
||||||
|
/// Max amount of light permitted before being kicked out
|
||||||
|
var/light_max = SHADOW_SPECIES_LIGHT_THRESHOLD
|
||||||
/// The amount that shadow heals us per SSobj tick (times seconds_per_tick)
|
/// The amount that shadow heals us per SSobj tick (times seconds_per_tick)
|
||||||
var/healing_rate = 1.5
|
var/healing_rate = 1.5
|
||||||
/// When cooldown is active, you are prevented from moving into tiles that would eject you from your jaunt
|
/// When cooldown is active, you are prevented from moving into tiles that would eject you from your jaunt
|
||||||
@@ -109,11 +120,9 @@
|
|||||||
* * location_to_check - The location to have its light level checked.
|
* * location_to_check - The location to have its light level checked.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/obj/effect/dummy/phased_mob/shadow/proc/check_light_level(location_to_check)
|
/obj/effect/dummy/phased_mob/shadow/proc/check_light_level(atom/location_to_check)
|
||||||
var/turf/T = get_turf(location_to_check)
|
var/turf/light_turf = get_turf(location_to_check)
|
||||||
var/light_amount = T.get_lumcount()
|
return light_turf.get_lumcount() > light_max // jaunt ends on TRUE
|
||||||
if(light_amount > 0.2) // jaunt ends
|
|
||||||
return TRUE
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the user should recieve a warning that they're moving into light.
|
* Checks if the user should recieve a warning that they're moving into light.
|
||||||
|
|||||||
@@ -229,6 +229,7 @@
|
|||||||
#include "species_unique_id.dm"
|
#include "species_unique_id.dm"
|
||||||
#include "species_whitelists.dm"
|
#include "species_whitelists.dm"
|
||||||
#include "spell_invocations.dm"
|
#include "spell_invocations.dm"
|
||||||
|
#include "spell_jaunt.dm"
|
||||||
#include "spell_mindswap.dm"
|
#include "spell_mindswap.dm"
|
||||||
#include "spell_names.dm"
|
#include "spell_names.dm"
|
||||||
#include "spell_shapeshift.dm"
|
#include "spell_shapeshift.dm"
|
||||||
|
|||||||
21
code/modules/unit_tests/spell_jaunt.dm
Normal file
21
code/modules/unit_tests/spell_jaunt.dm
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
/// Tests Shadow Walk can be entered and exited
|
||||||
|
/datum/unit_test/shadow_jaunt
|
||||||
|
|
||||||
|
/datum/unit_test/shadow_jaunt/Run()
|
||||||
|
var/mob/living/carbon/human/jaunter = allocate(/mob/living/carbon/human/consistent)
|
||||||
|
var/datum/action/cooldown/spell/jaunt/shadow_walk/walk = allocate(/datum/action/cooldown/spell/jaunt/shadow_walk, jaunter)
|
||||||
|
walk.Grant(jaunter)
|
||||||
|
|
||||||
|
var/turf/jaunt_turf = jaunter.loc
|
||||||
|
TEST_ASSERT(istype(jaunt_turf), "Jaunter was not allocated to a turf, instead to [jaunt_turf || "nullspace"].")
|
||||||
|
TEST_ASSERT(walk.IsAvailable(), "Unit test room is not suitable to test [walk].")
|
||||||
|
|
||||||
|
walk.Trigger()
|
||||||
|
|
||||||
|
TEST_ASSERT_NOTEQUAL(jaunter.loc, jaunt_turf, "Jaunter's loc did not change on casting [walk].")
|
||||||
|
TEST_ASSERT(istype(jaunter.loc, walk.jaunt_type), "Jaunter failed to enter jaunt on casting [walk].")
|
||||||
|
|
||||||
|
walk.next_use_time = -1
|
||||||
|
walk.Trigger()
|
||||||
|
|
||||||
|
TEST_ASSERT_EQUAL(jaunter.loc, jaunt_turf, "Jaunter failed to exit jaunt on exiting [walk].")
|
||||||
Reference in New Issue
Block a user