Pretty self-explanatory. Fully knowing this is a horrible idea, for my first playthrough of Pokemon Insurgence I decided to do a monotype run, just for fun. When the game asked me if I wanted to do a Challenge Mode, I thought that was a pretty cool idea. I can see parts of this that would be easy to code and other parts that would be hard.
The basic rules would be something like these, most likely. You choose a type at the start of the game to be your monotype, and all Pokemon in your team must have that type. You can catch Pokemon of other types, but they will be boxed and cannot be withdrawn unless the challenge is forfeited. An exception would be Pokemon who gain that type on evolution, like Staryu. But for Pokemon with branching evolutions, like Eevee or Snorunt, if the Pokemon is evolved into a final form of another type (for example, Eevee into Flareon in a Grass monotype), it is boxed after evolution.
Castform, Arceus, and Protean Greninja (and maybe Kecleon) are iffy as to whether they’d be allowed, but I’d err towards yes, because the player can make their own ruling on it for their own playthrough. For simplicity’s sake, Rotom would probably only be valid in an Electric monotype.
The biggest problem I see is with the starters, and I see two solutions to it. If the starter is not/doesn’t evolve to the monotype, then it can be boxed after the second gym. Boxing it after the first gym would create problems for monotype Dragon, Fairy, or Steel teams (I think, off the top of my head), or potentially other types in a randomized challenge. And that’s a problem that will be fixed in Metchi Town with the Friend Safari access (which may be considered cheating, but I feel that should be left up to the player; if nothing else, they may have to catch one Pokemon to prevent issues and get the first of their monotype, if it comes down to it). Alternatively, and this would be a little more complicated, replacing the Delta Pokemon starter choices with other Pokemon based on the type choice. This wouldn’t match the dialogue, but it would allow the player to not waste the early game experience points on a team member they can’t use.
Another issue would be the game trying to box the last Pokemon in the player’s party. To repeat an earlier example, evolving Eevee into Flareon in a Grass monotype run, but it’s the only Pokemon in the party. There’s only one solution I can see to this and that would be the game going into the box, looking for the first Pokemon of the monotype it can find, and switching them. If it can’t find any, then once a Pokemon of the monotype is caught, the Flareon would be boxed. This seems fairly difficult to code; perhaps by setting a variable, after it’s seen that no Pokemon are owned of the monotype, which causes a line to run every time a Pokemon is caught checking if it’s valid for the monotype, boxing the first Pokemon once something that can be used is caught.
The challenge could be forfeited at any time.