mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-24 20:47:10 +01:00
Hopefully final magic fixes, and fixes the possessor
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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, "<span class='warning'>There must be a nearby source of blood!</span>")
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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, "<span class='warning'>You can't change your appearance right now!</span>")
|
||||
if(istype(user.loc,/mob/))
|
||||
to_chat(user, "<span class='warning'>You can't change your appearance right now!</span>")
|
||||
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, "<span class='warning'>There are no valid targets!</span>")
|
||||
to_chat(user, "<span class='warning'>There are no valid targets!</span>")
|
||||
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("<span class='notice'>You hear [usr.real_name]'s voice: [say]</span>")
|
||||
target.show_message("<span class='notice'>You hear [user.real_name]'s voice: [say]</span>")
|
||||
else
|
||||
target.show_message("<span class='notice'>You hear a voice that seems to echo around the room: [say]</span>")
|
||||
usr.show_message("<span class='notice'>You project your mind into [target.real_name]: [say]</span>")
|
||||
user.show_message("<span class='notice'>You project your mind into [target.real_name]: [say]</span>")
|
||||
for(var/mob/dead/observer/G in player_list)
|
||||
G.show_message("<i>Telepathic message from <b>[usr]</b> ([ghost_follow_link(usr, ghost=G)]) to <b>[target]</b> ([ghost_follow_link(target, ghost=G)]): [say]</i>")
|
||||
G.show_message("<i>Telepathic message from <b>[user]</b> ([ghost_follow_link(user, ghost=G)]) to <b>[target]</b> ([ghost_follow_link(target, ghost=G)]): [say]</i>")
|
||||
|
||||
/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, "<span class='warning'>No valid targets with remote view were found!</span>")
|
||||
to_chat(user, "<span class='warning'>No valid targets with remote view were found!</span>")
|
||||
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, "<span class='warning'>Your mind is too busy with that telekinetic grab.</span>")
|
||||
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, "<span class='warning'>Your mind is too busy with that telekinetic grab.</span>")
|
||||
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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user