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