[MIRROR] Multiple buckling and wizard spell fixes (#11437)

Co-authored-by: Will <7099514+Willburd@users.noreply.github.com>
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2025-08-15 20:31:14 -07:00
committed by GitHub
parent 90a9f2c39c
commit 91bb52b6d4
8 changed files with 20 additions and 14 deletions

View File

@@ -73,25 +73,26 @@
L+=T L+=T
if(!L.len) if(!L.len)
to_chat(user, "The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.") to_chat(user, span_warning("The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry."))
return return
if(user && user.buckled) if(user && user.buckled)
user.buckled.unbuckle_mob() user.buckled.unbuckle_mob( user, TRUE)
var/list/tempL = L var/list/tempL = L
var/attempt = null var/attempt = null
var/success = 0 var/success = 0
while(tempL.len) while(tempL.len)
attempt = pick(tempL) attempt = pick(tempL)
success = user.Move(attempt) success = user.forceMove(attempt)
if(!success) if(!success)
tempL.Remove(attempt) tempL.Remove(attempt)
else else
break break
if(!success) if(!success)
user.loc = pick(L) to_chat(user, span_warning("The spell matrix was unable to locate a suitable teleport destination, because the destination area is entirely obstructed. Sorry."))
user.forceMove(pick(L))
smoke.start() smoke.start()
src.uses -= 1 src.uses -= 1

View File

@@ -20,7 +20,7 @@
var/turf/starting = get_turf(user) var/turf/starting = get_turf(user)
if(T) if(T)
if(user.buckled) if(user.buckled)
user.buckled = null user.buckled.unbuckle_mob( user, TRUE)
user.forceMove(T) user.forceMove(T)
var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread() var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread()

View File

@@ -33,7 +33,6 @@
opacity = 0 opacity = 0
density = TRUE density = TRUE
unacidable = TRUE unacidable = TRUE
invisibility = INVISIBILITY_ABSTRACT
/obj/effect/forcefield/bullet_act(var/obj/item/projectile/Proj, var/def_zone) /obj/effect/forcefield/bullet_act(var/obj/item/projectile/Proj, var/def_zone)
var/turf/T = get_turf(src.loc) var/turf/T = get_turf(src.loc)
@@ -46,6 +45,7 @@
icon_state = "empty" icon_state = "empty"
name = "invisible wall" name = "invisible wall"
desc = "You have a bad feeling about this." desc = "You have a bad feeling about this."
invisibility = INVISIBILITY_ABSTRACT
/obj/effect/forcefield/cultify() /obj/effect/forcefield/cultify()
new /obj/effect/forcefield/cult(get_turf(src)) new /obj/effect/forcefield/cult(get_turf(src))

View File

@@ -51,11 +51,11 @@
L+=T L+=T
if(!L.len) if(!L.len)
to_chat(user, "The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.") to_chat(user, span_warning("The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry."))
return return
if(user && user.buckled) if(user && user.buckled)
user.buckled = null user.buckled.unbuckle_mob( user, TRUE)
var/attempt = null var/attempt = null
var/success = 0 var/success = 0
@@ -68,7 +68,8 @@
break break
if(!success) if(!success)
user.loc = pick(L) to_chat(user, span_warning("The spell matrix was unable to locate a suitable teleport destination, because the destination area is entirely obstructed. Sorry."))
user.forceMove(pick(L))
return return

View File

@@ -17,7 +17,8 @@
/spell/targeted/ethereal_jaunt/cast(list/targets) //magnets, so mostly hardcoded /spell/targeted/ethereal_jaunt/cast(list/targets) //magnets, so mostly hardcoded
for(var/mob/living/target in targets) for(var/mob/living/target in targets)
target.transforming = 1 //protects the mob from being transformed (replaced) midjaunt and getting stuck in bluespace target.transforming = 1 //protects the mob from being transformed (replaced) midjaunt and getting stuck in bluespace
if(target.buckled) target.buckled = null if(target.buckled)
target.buckled.unbuckle_mob( target, TRUE)
spawn(0) spawn(0)
var/mobloc = get_turf(target.loc) var/mobloc = get_turf(target.loc)
var/obj/effect/dummy/spell_jaunt/holder = new /obj/effect/dummy/spell_jaunt( mobloc ) var/obj/effect/dummy/spell_jaunt/holder = new /obj/effect/dummy/spell_jaunt( mobloc )
@@ -31,7 +32,7 @@
animation.master = holder animation.master = holder
target.ExtinguishMob() target.ExtinguishMob()
if(target.buckled) if(target.buckled)
target.buckled = null target.buckled.unbuckle_mob( target, TRUE)
jaunt_disappear(animation, target) jaunt_disappear(animation, target)
target.loc = holder target.loc = holder
target.transforming=0 //mob is safely inside holder now, no need for protection. target.transforming=0 //mob is safely inside holder now, no need for protection.

View File

@@ -136,8 +136,8 @@ Targeted spells have two useful flags: INCLUDEUSER and SELECTABLE. These are exp
target.Paralyse(amt_paralysis) target.Paralyse(amt_paralysis)
target.Stun(amt_stunned) target.Stun(amt_stunned)
if(amt_weakened || amt_paralysis || amt_stunned) if(amt_weakened || amt_paralysis || amt_stunned)
if(target.buckled) if(target && target.buckled)
target.buckled = null target.buckled.unbuckle_mob( target, TRUE)
target.Blind(amt_eye_blind) target.Blind(amt_eye_blind)
target.eye_blurry += amt_eye_blurry target.eye_blurry += amt_eye_blurry
target.make_dizzy(amt_dizziness) target.make_dizzy(amt_dizziness)

View File

@@ -31,7 +31,8 @@
/mob/living/stumble_into(mob/living/M) /mob/living/stumble_into(mob/living/M)
var/mob/living/carbon/human/S = src var/mob/living/carbon/human/S = src
if(S.buckled || M.buckled)
return
playsound(src, "punch", 25, 1, -1) playsound(src, "punch", 25, 1, -1)
M.Weaken(4) M.Weaken(4)
M.stop_flying() M.stop_flying()

View File

@@ -204,6 +204,8 @@
var/mob/living/simple_mob/SA = M var/mob/living/simple_mob/SA = M
if(!SA.has_hands) if(!SA.has_hands)
return 0 return 0
if(mob_size < MOB_SMALL && src == M)
return 0
if(size_diff >= 0.50 || mob_size < MOB_SMALL || size_diff >= get_effective_size() || ignore_size) if(size_diff >= 0.50 || mob_size < MOB_SMALL || size_diff >= get_effective_size() || ignore_size)
if(buckled) if(buckled)
to_chat(src,span_notice("You have to unbuckle \the [src] before you pick them up.")) to_chat(src,span_notice("You have to unbuckle \the [src] before you pick them up."))