diff --git a/code/citadel/pokemon.dm b/code/citadel/pokemon.dm
new file mode 100644
index 0000000000..b6be0033c0
--- /dev/null
+++ b/code/citadel/pokemon.dm
@@ -0,0 +1,306 @@
+//Sprites are trademarks of Gamefreak, Nintendo, The Pokemon Company, and Spike Chunsoft.
+#define ispokemon(A) (istype(A, /mob/living/simple_animal/pokemon))
+//POKEBALL
+/obj/item/pokeball
+ name = "pokeball"
+ icon = 'icons/obj/pokeball.dmi'
+ icon_state = "pokeball"
+ force = 0
+ throwforce = 0
+ var/success_chance = 25
+ var/pokemon
+/obj/item/pokeball/great
+ name = "great ball"
+ icon_state = "pokeball_great"
+ success_chance = 50
+/obj/item/pokeball/ultra
+ icon_state = "pokeball_ultra"
+ name = "ultra ball"
+ success_chance = 75
+/obj/item/pokeball/master
+ icon_state = "pokeball_master"
+ name = "master ball"
+ success_chance = 100
+/* //WIP
+/obj/item/pokeball/throw_impact(atom/hit_atom)
+ if(ispokemon(hit_atom))
+ var/mob/living/simple_animal/pokemon/pmon = hit_atom
+ var/initial_success_chance = success_chance
+ pmon.resize = 0.1
+ pmon.color = "RED"
+ pmon.canmove = 0
+ sleep(15)
+ if(pmon.pokeball == src)
+ pmon.loc = src
+ pokemon = pmon
+
+ return 1
+ if(pmon.pokeball && pmon.pokeball !=src)
+ return ..()
+ var/bonus_chance = ((pmon.maxHealth - pmon.health) / 2)
+ if(bonus_chance > 100)
+ bonus_chance = 100
+ success_chance = (success_chance + bonus_chance)
+ if(success_chance > 100)
+ success_chance = 100
+ if(success_chance < 0)//just in case
+ success_chance = 0
+ sleep(15)
+ if(prob(success_chance))
+ visible_message("[src] shakes...")
+ else
+ escape()
+ sleep(15)
+ if(prob(success_chance))
+ visible_message("[src] shakes...")
+ else
+ escape()
+ sleep(15)
+ if(prob(success_chance))
+ visible_message("[src] shakes...")
+ else
+ escape()
+ else
+ ..()
+/obj/item/pokeball/proc/capture(mob/living/simple_animal/pokemon/pmon, mob/living/user)
+
+/obj/item/pokeball/proc/escape(mob/living/simple_animal/pokemon/pmon, mob/living/user)
+ if(!pokemon)
+ return
+ pmon.resize = 10
+ pmon.color = null
+ pmon.canmove = 1
+ pmon.loc = src.loc
+ if(pmon.pokeball != src)
+ visible_message("[pmon] breaks free from [src]")
+ PoolOrNew(/obj/effect/particle_effect/sparks, loc)
+ playsound(src.loc, "sparks", 50, 1)
+ qdel(src)
+
+ else
+/obj/item/pokeball/proc/recall
+/obj/item/pokeball/proc/release
+*/
+/mob/living/simple_animal/pokemon
+ name = "eevee"
+ icon_state = "eevee"
+ icon_living = "eevee"
+ icon_dead = "eevee_d"
+ desc = "Gotta catch 'em all!"
+ icon = 'icons/mob/pokemon.dmi'
+ var/pokeball
+ pixel_x = -16
+ butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 5)
+ ventcrawler = 2
+ health = 100
+ maxHealth = 100
+ layer = 4
+ response_help = "pets"
+ wander = 1
+ turns_per_move = 2
+ pass_flags = PASSTABLE | PASSMOB
+
+/mob/living/simple_animal/pokemon/proc/simple_lay_down()
+ set name = "Rest"
+ set category = "IC"
+
+ resting = !resting
+ src << "You are now [resting ? "resting" : "getting up"]."
+ update_canmove()
+ update_icon()
+
+/mob/living/simple_animal/pokemon/proc/update_icon()
+ if(lying || resting || sleeping)
+ icon_state = "[icon_state]_rest"
+ else
+ icon_state = "[icon_living]"
+
+/mob/living/simple_animal/pokemon/New()
+ ..()
+ verbs += /mob/living/simple_animal/pokemon/proc/simple_lay_down
+
+/*
+/////TEMPLATE/////
+
+/mob/living/simple_animal/pokemon/
+ name = ""
+ icon_state = ""
+ icon_living = ""
+ icon_dead = ""
+*/
+
+/mob/living/simple_animal/pokemon/leg
+ icon = 'icons/mob/legendary.dmi'
+ pixel_x = -32
+ butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 12)
+ health = 200
+ maxHealth = 200
+
+
+/mob/living/simple_animal/pokemon/leg/articuno
+ name = "Articuno"
+ icon_state = "articuno"
+ icon_living = "articuno"
+ icon_dead = "articuno_d"
+ flying = 1
+
+/mob/living/simple_animal/pokemon/leg/rayquaza
+ name = "Rayquaza"
+ icon_state = "rayquaza"
+ icon_living = "rayquaza"
+ icon_dead = "rayquaza_d"
+ flying = 1
+
+//ALPHABETICAL PLEASE
+
+/mob/living/simple_animal/pokemon/absol
+ name = "absol"
+ icon_state = "absol"
+ icon_living = "absol"
+ icon_dead = "absol_d"
+ speak = list("Absol!", "Ab-Absol!")
+
+/mob/living/simple_animal/pokemon/aggron
+ name = "aggron"
+ icon_state = "aggron"
+ icon_living = "aggron"
+ icon_dead = "aggron_d"
+
+/mob/living/simple_animal/pokemon/ampharos
+ name = "ampharos"
+ icon_state = "ampharos"
+ icon_living = "ampharos"
+ icon_dead = "ampharos_d"
+
+/mob/living/simple_animal/pokemon/charmander
+ name = "charmander"
+ icon_state = "charmander"
+ icon_living = "charmander"
+ icon_dead = "charmander_d"
+
+/mob/living/simple_animal/pokemon/ditto
+ name = "ditto"
+ icon_state = "ditto"
+ icon_living = "ditto"
+ icon_dead = "ditto_d"
+
+/mob/living/simple_animal/pokemon/dratini/dragonair
+ name = "dragonair"
+ desc = "A Dragonair stores an enormous amount of energy inside its body. It is said to alter the weather around it by loosing energy from the crystals on its neck and tail."
+ icon_state = "dragonair"
+ icon_living = "dragonair"
+ icon_dead = "dragonair_d"
+
+/mob/living/simple_animal/pokemon/dratini/dragonair/dragonite
+ name = "dragonite"
+ desc = "It can circle the globe in just 16 hours. It is a kindhearted Pokémon that leads lost and foundering ships in a storm to the safety of land."
+ icon_state = "dragonite"
+ icon_living = "dragonite"
+ icon_dead = "dragonite_d"
+
+/mob/living/simple_animal/pokemon/dratini
+ name = "dratini"
+ desc = "A Dratini continually molts and sloughs off its old skin. It does so because the life energy within its body steadily builds to reach uncontrollable levels."
+ icon_state = "dratini"
+ icon_living = "dratini"
+ icon_dead = "dratini_d"
+
+/mob/living/simple_animal/pokemon/eevee
+ name = "eevee"
+ desc = "Eevee has an unstable genetic makeup that suddenly mutates due to its environment. Radiation from various stones causes this Pokémon to evolve."
+ icon_state = "eevee"
+ icon_living = "eevee"
+ icon_dead = "eevee_d"
+ speak = list("Eevee!", "Ee-Eevee!")
+ response_help = "pets"
+ response_harm = "hits"
+
+/mob/living/simple_animal/pokemon/eevee/espeon
+ name = "espeon"
+ desc = "Espeon is extremely loyal to any trainer it considers to be worthy. It is said to have developed precognitive powers to protect its trainer from harm."
+ icon_state = "espeon"
+ icon_living = "espeon"
+ icon_dead = "espeon_d"
+
+/mob/living/simple_animal/pokemon/flaaffy
+ name = "flaaffy"
+ icon_state = "flaaffy"
+ icon_living = "flaaffy"
+ icon_dead = "flaaffy_d"
+
+/mob/living/simple_animal/pokemon/eevee/flareon
+ name = "flareon"
+ desc = "Flareon's fluffy fur releases heat into the air so that its body does not get excessively hot. Its body temperature can rise to a maximum of 1,650 degrees F."
+ icon_state = "flareon"
+ icon_living = "flareon"
+ icon_dead = "flareon_d"
+ speak = list("Flare!", "Flareon!")
+
+/mob/living/simple_animal/pokemon/eevee/glaceon
+ name = "glaceon"
+ desc = "By controlling its body heat, it can freeze the atmosphere around it to make a diamond-dust flurry."
+ icon_state = "glaceon"
+ icon_living = "glaceon"
+ icon_dead = "glaceon_d"
+ speak = list("Glace!", "Glaceon!")
+
+/mob/living/simple_animal/pokemon/eevee/jolteon
+ name = "jolteon"
+ desc = "Its cells generate weak power that is amplified by its fur's static electricity to drop thunderbolts. The bristling fur is made of electrically charged needles."
+ icon_state = "jolteon"
+ icon_living = "jolteon"
+ icon_dead = "jolteon_d"
+ speak = list("Jolt!", "Jolteon!")
+
+/mob/living/simple_animal/pokemon/larvitar
+ name = "larvitar"
+ desc = "It is born deep underground. It can't emerge until it has entirely consumed the soil around it."
+ icon_state = "larvitar"
+ icon_living = "larvitar"
+ icon_dead = "larvitar_d"
+
+/mob/living/simple_animal/pokemon/mareep
+ name = "mareep"
+ icon_state = "mareep"
+ icon_living = "mareep"
+ icon_dead = "mareep_d"
+
+/mob/living/simple_animal/pokemon/poochyena/mightyena
+ name = "mightyena"
+ icon_state = "mightyena"
+ icon_living = "mightyena"
+ icon_dead = "mightyena"
+
+/mob/living/simple_animal/pokemon/miltank
+ name = "miltank"
+ icon_state = "miltank"
+ icon_living = "miltank"
+ icon_dead = "miltank_d"
+
+/mob/living/simple_animal/pokemon/poochyena
+ name = "poochyena"
+ icon_state = "poochyena"
+ icon_living = "poochyena"
+ icon_dead = "poochyena_d"
+
+/mob/living/simple_animal/pokemon/eevee/sylveon
+ name = "Sylveon"
+ desc = "Sylveon, the Intertwining Pokémon. Sylveon affectionately wraps its ribbon-like feelers around its Trainer's arm as they walk together."
+ icon_state = "sylveon"
+ icon_living = "sylveon"
+ icon_dead = "sylveon_d"
+ speak = list("Sylveon!", "Syl!")
+ response_help = "pets"
+ response_harm = "hits"
+
+/mob/living/simple_animal/pokemon/eevee/umbreon
+ name = "umbreon"
+ icon_state = "umbreon"
+ icon_dead = "umbreon_d"
+ icon_living = "umbreon"
+
+/mob/living/simple_animal/pokemon/vulpix
+ name = "vulpix"
+ icon_state = "vulpix"
+ icon_living = "vulpix"
+ icon_dead = "vulpix_d"
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 04a9b38903..ce6732f4c1 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -115,6 +115,12 @@
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown)
burn_state = FLAMMABLE
+/obj/item/weapon/storage/bag/plants/holding // Now botany can crash the server too
+ name = "plant bag of holding"
+ icon_state = "plantbag_holding"
+ storage_slots = INFINITY
+ max_combined_w_class = INFINITY
+
////////
/obj/item/weapon/storage/bag/plants/portaseeder
diff --git a/icons/mob/pokemon.dmi b/icons/mob/pokemon.dmi
index a2316fe640..a115c14994 100644
Binary files a/icons/mob/pokemon.dmi and b/icons/mob/pokemon.dmi differ
diff --git a/icons/obj/hydroponics/equipment.dmi b/icons/obj/hydroponics/equipment.dmi
index 558e0f6250..b3c852e89d 100644
Binary files a/icons/obj/hydroponics/equipment.dmi and b/icons/obj/hydroponics/equipment.dmi differ
diff --git a/icons/obj/pokeball.dmi b/icons/obj/pokeball.dmi
new file mode 100644
index 0000000000..c84362a793
Binary files /dev/null and b/icons/obj/pokeball.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index e365563baa..f018c061bc 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -130,6 +130,7 @@
#include "code\_onclick\hud\swarmer.dm"
#include "code\citadel\dogborgs.dm"
#include "code\citadel\dogborgstuff.dm"
+#include "code\citadel\pokemon.dm"
#include "code\citadel\vore\hook-defs_vr.dm"
#include "code\citadel\vore\trycatch_vr.dm"
#include "code\citadel\vore\eating\belly_vr.dm"