On scripting a ruleset then make sure you can't reasonably do it within an engine -- if they are only allowed 5 extra pokemon why not remove balls from pickups, rewards and shops and instead just give them 5 master balls or whatever. Otherwise it will depend upon what you aim to allow/restrict -- some things can be done quite simply by making a cheat to remove things from inventory, or force a condition to always be on, others will require a more fundamental rework of things.
On making moves then most would probably subvert existing moves into doing things. I also don't know if the number of moves (including moves the game might include for older generations) goes beyond a number that makes it harder to work with*. I don't know how pokemon does it here though given as far back as Red it was a data table ( https://github.com/pret/pokered/blob/master/data/moves.asm
) rather than individual actions within game code (think a platform where you essentially have 4 or 5 main actions) then I would assume they carried on with such an approach here.
*if the game already has 256 moves and the game only includes the number of bits in there to allow that many then you could change it but it would involve either adding an odd exception, or changing loads of other aspects of the game. http://www.psypokes.com/rsefrlg/attacks.php
reckons some 354 moves so probably not. Would still have to expand the table though wherever it is, unless you are lucky enough to have pointers for each move.