diff --git a/code/datums/spells/wizard.dm b/code/datums/spells/wizard.dm
index bcd5bbd56bb..5672052e0a2 100644
--- a/code/datums/spells/wizard.dm
+++ b/code/datums/spells/wizard.dm
@@ -46,6 +46,7 @@
message = "\blue You feel strong! You feel a pressure building behind your eyes!"
range = -1
include_user = 1
+ centcom_cancast = 0
mutations = list(M_LASER, M_HULK)
duration = 300
@@ -278,4 +279,48 @@
/obj/effect/proc_holder/spell/wizard/targeted/explosion/fireball
ex_severe = -1
ex_heavy = -1
- ex_light = 2
\ No newline at end of file
+ ex_light = 2
+
+/obj/effect/proc_holder/spell/wizard/aoe_turf/repulse
+ name = "Repulse"
+ desc = "This spell throws everything around the user away."
+ charge_max = 400
+ clothes_req = 1
+ invocation = "GITTAH WEIGH"
+ invocation_type = "shout"
+ range = 5
+ cooldown_min = 150
+ selection_type = "view"
+ var/maxthrow = 5
+
+/obj/effect/proc_holder/spell/wizard/aoe_turf/repulse/cast(list/targets)
+ var/mob/user = usr
+ var/list/thrownatoms = list()
+ var/atom/throwtarget
+ var/distfromcaster
+ for(var/turf/T in targets) //Done this way so things don't get thrown all around hilariously.
+ for(var/atom/movable/AM in T)
+ thrownatoms += AM
+
+ for(var/atom/movable/AM in thrownatoms)
+ if(AM == user || AM.anchored) continue
+
+ var/obj/effect/overlay/targeteffect = new /obj/effect/overlay{icon='icons/effects/effects.dmi'; icon_state="shieldsparkles"; mouse_opacity=0; density = 0}()
+ AM.overlays += targeteffect
+ throwtarget = get_edge_target_turf(user, get_dir(user, get_step_away(AM, user)))
+ distfromcaster = get_dist(user, AM)
+ spawn(10)
+ AM.overlays -= targeteffect
+ qdel(targeteffect)
+ if(distfromcaster == 0)
+ if(istype(AM, /mob/living))
+ var/mob/living/M = AM
+ M.Weaken(5)
+ M.adjustBruteLoss(5)
+ M << "You're slammed into the floor by a mystical force!"
+ else
+ if(istype(AM, /mob/living))
+ var/mob/living/M = AM
+ M.Weaken(2)
+ M << "You're thrown back by a mystical force!"
+ spawn(0) AM.throw_at(throwtarget, ((Clamp((maxthrow - (Clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1)//So stuff gets tossed around at the same time.
diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm
index 7cbb4f22a1c..b4724e42414 100644
--- a/code/game/gamemodes/wizard/spellbook.dm
+++ b/code/game/gamemodes/wizard/spellbook.dm
@@ -49,7 +49,7 @@
dat += "
"
- dat += "Remove Clothes Requirement"
+ dat += "Remove Clothes Requirement
"
dat += "Warning: this takes away 2 spell choices.
"
dat += "Magic Missile (15)
"
@@ -67,6 +67,9 @@
dat += "Smoke (10)
"
dat += "This spell spawns a cloud of choking smoke at your location and does not require wizard garb.
"
+ dat += "Repulse (40)
"
+ dat += "This spell throws nearby objects away from you and knocks creatures down.
"
+
dat += "Blind (30)
"
dat += "This spell temporarly blinds a single person and does not require wizard garb.
"
@@ -200,7 +203,7 @@
uses--
/*
*/
- var/list/available_spells = list(magicmissile = "Magic Missile", fireball = "Fireball", disintegrate = "Disintegrate", disabletech = "Disable Tech", smoke = "Smoke", blind = "Blind", mindswap = "Mind Transfer", forcewall = "Forcewall", blink = "Blink", teleport = "Teleport", mutate = "Mutate", etherealjaunt = "Ethereal Jaunt", knock = "Knock", horseman = "Curse of the Horseman", fleshtostone = "Flesh to Stone", summonitem = "Instant Summons", summonguns = "Summon Guns", summonmagic = "Summon Magic", staffchange = "Staff of Change", soulstone = "Six Soul Stone Shards and the spell Artificer", armor = "Mastercrafted Armor Set", staffanimate = "Staff of Animation", staffchaos = "Staff of Chaos", staffdoor = "Staff of Door Creation", wands = "Wand Assortment")
+ var/list/available_spells = list(magicmissile = "Magic Missile", fireball = "Fireball", disintegrate = "Disintegrate", disabletech = "Disable Tech", repulse = "Repulse", smoke = "Smoke", blind = "Blind", mindswap = "Mind Transfer", forcewall = "Forcewall", blink = "Blink", teleport = "Teleport", mutate = "Mutate", etherealjaunt = "Ethereal Jaunt", knock = "Knock", horseman = "Curse of the Horseman", fleshtostone = "Flesh to Stone", summonitem = "Instant Summons", summonguns = "Summon Guns", summonmagic = "Summon Magic", staffchange = "Staff of Change", soulstone = "Six Soul Stone Shards and the spell Artificer", armor = "Mastercrafted Armor Set", staffanimate = "Staff of Animation", staffchaos = "Staff of Chaos", staffdoor = "Staff of Door Creation", wands = "Wand Assortment")
var/already_knows = 0
for(var/obj/effect/proc_holder/spell/wizard/aspell in H.spell_list)
if(available_spells[href_list["spell_choice"]] == initial(aspell.name))
@@ -238,7 +241,7 @@
feedback_add_details("wizard_spell_learned","NC")
H.spell_list += new /obj/effect/proc_holder/spell/wizard/noclothes
temp = "This teaches you how to use your spells without your magical garb, truely you are the wizardest."
- uses--
+ uses -= 2
if("magicmissile")
feedback_add_details("wizard_spell_learned","MM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
H.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/projectile/magic_missile(H)
@@ -255,6 +258,10 @@
feedback_add_details("wizard_spell_learned","DT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
H.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/emplosion/disable_tech(H)
temp = "You have learned disable technology."
+ if("repulse")
+ feedback_add_details("wizard_spell_learned","RP") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
+ H.spell_list += new /obj/effect/proc_holder/spell/wizard/aoe_turf/repulse(null)
+ temp = "You have learned repulse."
if("smoke")
feedback_add_details("wizard_spell_learned","SM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
H.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/smoke(H)
diff --git a/code/game/jobs/jobprocs.dm b/code/game/jobs/jobprocs.dm
index 60b8c6a99df..8955f135b4b 100644
--- a/code/game/jobs/jobprocs.dm
+++ b/code/game/jobs/jobprocs.dm
@@ -26,28 +26,6 @@
new /obj/effect/forcefield/mime(locate(usr.x,usr.y,usr.z))
return
-///////////Mimewalls///////////
-
-/obj/effect/forcefield/mime
- icon_state = "empty"
- name = "invisible wall"
- desc = "You have a bad feeling about this."
- var/timeleft = 300
- var/last_process = 0
-
-/obj/effect/forcefield/mime/New()
- ..()
- last_process = world.time
- processing_objects.Add(src)
-
-/obj/effect/forcefield/mime/process()
- timeleft -= (world.time - last_process)
- if(timeleft <= 0)
- processing_objects.Remove(src)
- del(src)
-
-///////////////////////////////
-
/client/proc/mimespeak()
set category = "Mime"
set name = "Speech"
diff --git a/code/game/objects/effects/forcefields.dm b/code/game/objects/effects/forcefields.dm
new file mode 100644
index 00000000000..df83d69f3b5
--- /dev/null
+++ b/code/game/objects/effects/forcefields.dm
@@ -0,0 +1,33 @@
+/obj/effect/forcefield
+ desc = "A space wizard's magic wall."
+ name = "FORCEWALL"
+ icon = 'icons/effects/effects.dmi'
+ icon_state = "m_shield"
+ anchored = 1.0
+ opacity = 0
+ density = 1
+ unacidable = 1
+
+
+
+
+
+///////////Mimewalls///////////
+
+/obj/effect/forcefield/mime
+ icon_state = "empty"
+ name = "invisible wall"
+ desc = "You have a bad feeling about this."
+ var/timeleft = 50
+ var/last_process = 0
+
+/obj/effect/forcefield/mime/New()
+ ..()
+ last_process = world.time
+ processing_objects.Add(src)
+
+/obj/effect/forcefield/mime/process()
+ timeleft -= (world.time - last_process)
+ if(timeleft <= 0)
+ processing_objects.Remove(src)
+ qdel(src)
\ No newline at end of file
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 203ac1ede50..68d902e656e 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 6731364f9b9..e04b91d28d1 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -557,6 +557,7 @@
#include "code\game\objects\effects\anomalies.dm"
#include "code\game\objects\effects\bump_teleporter.dm"
#include "code\game\objects\effects\effect_system.dm"
+#include "code\game\objects\effects\forcefields.dm"
#include "code\game\objects\effects\gibs.dm"
#include "code\game\objects\effects\glowshroom.dm"
#include "code\game\objects\effects\landmarks.dm"