diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm
index b605d407206..d98de4f4986 100644
--- a/code/game/gamemodes/wizard/soulstone.dm
+++ b/code/game/gamemodes/wizard/soulstone.dm
@@ -139,4 +139,128 @@
C.icon_state = "soulstone2"
T << "Your soul has been recaptured by the soul stone, it's arcane energies reknitting your ethereal form"
U << "\blue Capture successful!: \black [T.name]'s has been recaptured and stored within the soul stone."
+ return
+
+
+/obj/item/device/soulstone/pokeball
+ name = "Pokeball"
+ icon_state = "pokeball"
+ desc = "Gotta catch 'em all!"
+
+ attack(mob/living/carbon/human/M as mob, mob/user as mob)
+ if(!istype(M, /mob/living/carbon/human))//If target is not a human.
+ return ..()
+ M.attack_log += text("\[[time_stamp()]\] Has had their soul captured with [src.name] by [user.name] ([user.ckey])")
+ user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to capture the soul of [M.name] ([M.ckey])")
+
+ transfer_pokemon("VICTIM", M, user)
+ return
+
+ attack_self(mob/user)
+ if (!in_range(src, user))
+ return
+ user.machine = src
+ var/dat = "Pokeball
"
+ for(var/mob/living/simple_animal/shade/A in src)
+ dat += "Pokemon: [A.name]
"
+ dat += {"Choose Pokemon"}
+ dat += "
"
+ dat += {" Close"}
+ user << browse(dat, "window=aicard")
+ onclose(user, "aicard")
+ return
+
+ Topic(href, href_list)
+ var/mob/U = usr
+ if (!in_range(src, U)||U.machine!=src)
+ U << browse(null, "window=aicard")
+ U.machine = null
+ return
+
+ add_fingerprint(U)
+ U.machine = src
+
+ switch(href_list["choice"])//Now we switch based on choice.
+ if ("Close")
+ U << browse(null, "window=aicard")
+ U.machine = null
+ return
+
+ if ("Summon")
+ for(var/mob/living/simple_animal/shade/A in src)
+ A.nodamage = 0
+ A.canmove = 1
+ A << "[U.name] has chosen you!"
+ A.loc = U.loc
+ A.cancel_camera()
+ src.icon_state = "pokeball"
+ attack_self(U)
+
+
+
+
+////////////////////////////Proc for moving soul in and out off stone//////////////////////////////////////
+
+
+/obj/item/proc/transfer_pokemon(var/choice as text, var/target, var/mob/U as mob).
+ switch(choice)
+ if("VICTIM")
+ var/mob/living/carbon/human/T = target
+ var/obj/item/device/soulstone/C = src
+ if(C.imprinted != "empty")
+ U << "\red Darn! Capture failed!: \black The pokeball already contains [C.imprinted]!"
+ else
+ if (T.stat == 0)
+ U << "\red Darn! Capture failed!: \black The pokemon is too strong!"
+ else
+ if(T.client == null)
+ U << "\red Darn! Capture failed!: \black The pokemon has already fainted!"
+ else
+ if(C.contents.len)
+ U << "\red Darn! Capture failed!: \black The pokeball is full! Use or free an existing pokemon to make room."
+ else
+ for(var/obj/item/W in T)
+ T.drop_from_slot(W)
+ new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton
+ T.invisibility = 101
+ var/atom/movable/overlay/animation = new /atom/movable/overlay( T.loc )
+ animation.icon_state = "blank"
+ animation.icon = 'mob.dmi'
+ animation.master = T
+ flick("dust-h", animation)
+ del(animation)
+ var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade( T.loc )
+ S.loc = C //put shade in stone
+ S.nodamage = 1 //So they won't die inside the stone somehow
+ S.canmove = 0//Can't move out of the soul stone
+ S.name = "Shade of [T.name]"
+ if (T.client)
+ T.client.mob = S
+ S.cancel_camera()
+ C.icon_state = "pokeball2"
+ C.name = "Pokeball: [S.name]"
+ S << "You have been captured! [U.name] is now your trainer!"
+ U << "\blue Alright!: \black [T.name] was caught!"
+ S << "The pokeball now contains [S.name], it will no longer react to other pokemon."
+ C.imprinted = "[S.name]"
+ del T
+ if("SHADE")
+ var/mob/living/simple_animal/shade/T = target
+ var/obj/item/device/soulstone/C = src
+ if (T.alive == 0)
+ U << "\red Darn! Capture failed!: \black The pokemon has already fainted!"
+ else
+ if(C.contents.len)
+ U << "\red Darn! Capture failed!: \black The pokeball is full! Use or free an existing pokemon to make room."
+ else
+ if(T.name != C.imprinted)
+ U << "\red Darn! Capture failed!: \black The pokeball already contains [C.imprinted]!"
+ else
+ T.loc = C //put shade in stone
+ T.nodamage = 1
+ T.canmove = 0
+ T.health = T.max_health
+ C.icon_state = "pokeball2"
+ T << "[T.name]! That's enough! You return to the pokeball."
+ U << "\blue [T.name]! That's enough!: \black [T.name] has been recaptured and stored within the pokeball."
return
\ No newline at end of file
diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi
index 009ab5b5edf..23ee7ecb8c3 100644
Binary files a/icons/obj/wizard.dmi and b/icons/obj/wizard.dmi differ