diff --git a/code/datums/spell.dm b/code/datums/spell.dm index 6aaedf5bd68..b18b912c6b5 100644 --- a/code/datums/spell.dm +++ b/code/datums/spell.dm @@ -375,7 +375,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin revert_cast(user) return - perform(targets) + perform(targets, user=user) return @@ -390,7 +390,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin revert_cast() return - perform(targets) + perform(targets, user=user) return diff --git a/code/datums/spells/area_teleport.dm b/code/datums/spells/area_teleport.dm index 522bb62a9fa..badf94d60d6 100644 --- a/code/datums/spells/area_teleport.dm +++ b/code/datums/spells/area_teleport.dm @@ -8,7 +8,7 @@ var/sound1 = "sound/weapons/ZapBang.ogg" var/sound2 = "sound/weapons/ZapBang.ogg" -/obj/effect/proc_holder/spell/targeted/area_teleport/perform(list/targets, recharge = 1) +/obj/effect/proc_holder/spell/targeted/area_teleport/perform(list/targets, recharge = 1, mob/living/user = usr) var/thearea = before_cast(targets) if(!thearea || !cast_check(1)) revert_cast() diff --git a/code/datums/spells/bloodcrawl.dm b/code/datums/spells/bloodcrawl.dm index a972c6e32f7..0b23b12b9f2 100644 --- a/code/datums/spells/bloodcrawl.dm +++ b/code/datums/spells/bloodcrawl.dm @@ -15,7 +15,7 @@ /obj/effect/proc_holder/spell/bloodcrawl/choose_targets(mob/user = usr) for(var/obj/effect/decal/cleanable/target in range(range, get_turf(user))) if(target.can_bloodcrawl_in()) - perform(target) + perform(target, user = user) return revert_cast() to_chat(user, "There must be a nearby source of blood!") diff --git a/code/datums/spells/dumbfire.dm b/code/datums/spells/dumbfire.dm index e4a3d2f56c0..27969c9a1ab 100644 --- a/code/datums/spells/dumbfire.dm +++ b/code/datums/spells/dumbfire.dm @@ -28,7 +28,7 @@ if(new_turf.density) break T = new_turf - perform(list(T)) + perform(list(T), user = user) /obj/effect/proc_holder/spell/dumbfire/cast(list/targets, mob/user = usr) diff --git a/code/datums/spells/projectile.dm b/code/datums/spells/projectile.dm index 55d607d852e..258925653d8 100644 --- a/code/datums/spells/projectile.dm +++ b/code/datums/spells/projectile.dm @@ -75,7 +75,7 @@ qdel(trail) if(projectile.loc in range(target.loc,proj_trigger_range)) - projectile.perform(list(target)) + projectile.perform(list(target), user = user) break current_loc = projectile.loc diff --git a/code/datums/spells/trigger.dm b/code/datums/spells/trigger.dm index 6c21153bb83..bba1f22cb1a 100644 --- a/code/datums/spells/trigger.dm +++ b/code/datums/spells/trigger.dm @@ -22,8 +22,8 @@ /obj/effect/proc_holder/spell/targeted/trigger/cast(list/targets, mob/user = usr) for(var/mob/living/target in targets) for(var/obj/effect/proc_holder/spell/spell in contents) - spell.perform(list(target),0) + spell.perform(list(target), 0, user = user) for(var/obj/effect/proc_holder/spell/spell in linked_spells) - spell.perform(list(target),0) + spell.perform(list(target), 0, user = user) return \ No newline at end of file diff --git a/code/game/dna/genes/goon_powers.dm b/code/game/dna/genes/goon_powers.dm index 778fed2ef9f..fd57ae5b471 100644 --- a/code/game/dna/genes/goon_powers.dm +++ b/code/game/dna/genes/goon_powers.dm @@ -296,7 +296,7 @@ revert_cast(user) return - perform(targets) + perform(targets, user = user) /obj/effect/proc_holder/spell/targeted/eat/cast(list/targets, mob/user = usr) if(!targets.len) @@ -540,7 +540,7 @@ revert_cast(user) return - perform(targets) + perform(targets, user = user) /obj/effect/proc_holder/spell/targeted/empath/cast(list/targets, mob/user = usr) if(!ishuman(user)) return diff --git a/code/game/dna/genes/vg_powers.dm b/code/game/dna/genes/vg_powers.dm index a194ddfeed1..ed18f2acb58 100644 --- a/code/game/dna/genes/vg_powers.dm +++ b/code/game/dna/genes/vg_powers.dm @@ -28,17 +28,17 @@ action_icon_state = "genetic_morph" -/obj/effect/proc_holder/spell/targeted/morph/cast(list/targets) - if(!ishuman(usr)) return +/obj/effect/proc_holder/spell/targeted/morph/cast(list/targets, mob/user = usr) + if(!ishuman(user)) return - if(istype(usr.loc,/mob/)) - to_chat(usr, "You can't change your appearance right now!") + if(istype(user.loc,/mob/)) + to_chat(user, "You can't change your appearance right now!") return - var/mob/living/carbon/human/M=usr + var/mob/living/carbon/human/M = user var/obj/item/organ/external/head/head_organ = M.get_organ("head") var/obj/item/organ/internal/eyes/eyes_organ = M.get_int_organ(/obj/item/organ/internal/eyes) - var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female") + var/new_gender = alert(user, "Please select gender.", "Character Generation", "Male", "Female") if(new_gender) if(new_gender == "Male") M.change_gender(MALE) @@ -219,7 +219,7 @@ validtargets += M if(!validtargets.len) - to_chat(usr, "There are no valid targets!") + to_chat(user, "There are no valid targets!") start_recharge() return @@ -229,24 +229,24 @@ revert_cast(user) return - perform(targets) + perform(targets, user = user) -/obj/effect/proc_holder/spell/targeted/remotetalk/cast(list/targets) - if(!ishuman(usr)) return +/obj/effect/proc_holder/spell/targeted/remotetalk/cast(list/targets, mob/user = usr) + if(!ishuman(user)) return var/say = input("What do you wish to say") as text|null if(!say) return say = strip_html(say) for(var/mob/living/target in targets) - log_say("Project Mind: [key_name(usr)]->[key_name(target)]: [say]") + log_say("Project Mind: [key_name(user)]->[key_name(target)]: [say]") if(REMOTE_TALK in target.mutations) - target.show_message("You hear [usr.real_name]'s voice: [say]") + target.show_message("You hear [user.real_name]'s voice: [say]") else target.show_message("You hear a voice that seems to echo around the room: [say]") - usr.show_message("You project your mind into [target.real_name]: [say]") + user.show_message("You project your mind into [target.real_name]: [say]") for(var/mob/dead/observer/G in player_list) - G.show_message("Telepathic message from [usr] ([ghost_follow_link(usr, ghost=G)]) to [target] ([ghost_follow_link(target, ghost=G)]): [say]") + G.show_message("Telepathic message from [user] ([ghost_follow_link(user, ghost=G)]) to [target] ([ghost_follow_link(target, ghost=G)]): [say]") /datum/dna/gene/basic/grant_spell/remoteview name="Remote Viewing" @@ -283,39 +283,39 @@ if(REMOTE_VIEW in M.mutations) remoteviewers += M if(!remoteviewers.len || remoteviewers.len == 1) - to_chat(usr, "No valid targets with remote view were found!") + to_chat(user, "No valid targets with remote view were found!") start_recharge() return targets += input("Choose the target to spy on.", "Targeting") as mob in remoteviewers - perform(targets) + perform(targets, user = user) -/obj/effect/proc_holder/spell/targeted/remoteview/cast(list/targets) - var/mob/living/carbon/human/user - if(ishuman(usr)) - user = usr +/obj/effect/proc_holder/spell/targeted/remoteview/cast(list/targets, mob/user = usr) + var/mob/living/carbon/human/H + if(ishuman(user)) + H = user else return var/mob/target - if(istype(user.l_hand, /obj/item/tk_grab) || istype(user.r_hand, /obj/item/tk_grab/)) - to_chat(user, "Your mind is too busy with that telekinetic grab.") - user.remoteview_target = null - user.reset_view(0) + if(istype(H.l_hand, /obj/item/tk_grab) || istype(H.r_hand, /obj/item/tk_grab/)) + to_chat(H, "Your mind is too busy with that telekinetic grab.") + H.remoteview_target = null + H.reset_view(0) return - if(user.client.eye != user.client.mob) - user.remoteview_target = null - user.reset_view(0) + if(H.client.eye != user.client.mob) + H.remoteview_target = null + H.reset_view(0) return for(var/mob/living/L in targets) target = L if(target) - user.remoteview_target = target - user.reset_view(target) + H.remoteview_target = target + H.reset_view(target) else - user.remoteview_target = null - user.reset_view(0) + H.remoteview_target = null + H.reset_view(0) diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index 17f26d8753d..eb3aed6485b 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -117,7 +117,7 @@ revert_cast(user) return - perform(list(T)) + perform(list(T), user = user) /obj/effect/proc_holder/spell/vampire/self/choose_targets(mob/user = usr) perform(list(user)) @@ -131,7 +131,7 @@ revert_cast(user) return - perform(targets) + perform(targets, user = user) /datum/vampire_passive var/gain_desc @@ -387,7 +387,7 @@ for(var/i = locs.len + 1 to num_bats) locs += user.loc - perform(locs) + perform(locs, user = user) /obj/effect/proc_holder/spell/vampire/bats/cast(list/targets, mob/user = usr) for(var/T in targets) @@ -492,7 +492,7 @@ to_chat(user, "\red You cannot find darkness to step to.") return - perform(turfs) + perform(turfs, user = user) /obj/effect/proc_holder/spell/vampire/shadowstep/cast(list/targets, mob/user = usr) if(usr.buckled) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index ed0092cf60d..9f33ea61a04 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -49,30 +49,13 @@ return 1 /obj/structure/closet/proc/dump_contents() - //Cham Projector Exception - for(var/obj/effect/dummy/chameleon/AD in src) - AD.forceMove(loc) - - for(var/obj/I in src) - I.forceMove(loc) - - for(var/mob/M in src) - moveMob(M, loc) - if(M.client) - M.client.eye = M.client.mob - M.client.perspective = MOB_PERSPECTIVE - -/obj/structure/closet/proc/moveMob(var/mob/M, var/atom/destination) - loc.Exited(M) - M.loc = destination - if(isturf(loc)) - loc.Entered(M, src, ignoreRest = 1) - else - loc.Entered(M, src) - for(var/atom/movable/AM in loc) - if(istype(AM, /obj/item)) - continue - AM.Crossed(M) + var/turf/T = get_turf(src) + for(var/atom/movable/AM in src) + AM.forceMove(T) + if(throwing) // you keep some momentum when getting out of a thrown closet + step(AM, dir) + if(throwing) + throwing = 0 /obj/structure/closet/proc/open() if(src.opened) @@ -126,7 +109,7 @@ M.client.perspective = EYE_PERSPECTIVE M.client.eye = src - moveMob(M, src) + M.forceMove(src) itemcount++ src.icon_state = src.icon_closed diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm index 3f49d3e3bde..f08f0a6f7e5 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/crates_lockers/closets/statue.dm @@ -60,10 +60,9 @@ qdel(src) /obj/structure/closet/statue/dump_contents() - - if(istype(src.loc, /mob/living/simple_animal/hostile/statue)) - var/mob/living/simple_animal/hostile/statue/S = src.loc - src.loc = S.loc + if(istype(loc, /mob/living/simple_animal/hostile/statue)) + var/mob/living/simple_animal/hostile/statue/S = loc + forceMove(S.loc) if(S.mind) for(var/mob/M in contents) S.mind.transfer_to(M) @@ -71,24 +70,19 @@ break qdel(S) - - for(var/obj/O in src) - O.loc = src.loc - for(var/mob/living/M in src) - M.loc = src.loc + M.forceMove(loc) M.disabilities -= MUTE M.take_overall_damage((M.health - health - 100),0) //any new damage the statue incurred is transfered to the mob if(M.client) M.client.eye = M.client.mob M.client.perspective = MOB_PERSPECTIVE - + + ..() /obj/structure/closet/statue/open() return - - /obj/structure/closet/statue/open() return diff --git a/code/modules/mining/lavaland/colossus_loot.dm b/code/modules/mining/lavaland/colossus_loot.dm index 5df742bd9f6..d680edd4def 100644 --- a/code/modules/mining/lavaland/colossus_loot.dm +++ b/code/modules/mining/lavaland/colossus_loot.dm @@ -483,11 +483,12 @@ if(!isfloorturf(user.loc)) return var/datum/mind/target_mind = user.mind + var/mob/living/current = user // Saving the current mob here to gib as usr seems to get confused after the mind's been transferred, due to delay in transfer_to for(var/i in user) if(istype(i, /obj/structure/closet/stasis)) var/obj/structure/closet/stasis/S = i S.dump_contents(0) qdel(S) break - user.gib() + current.gib() target_mind.RemoveSpell(/obj/effect/proc_holder/spell/targeted/exit_possession)