Promotion/Relegation
Teams will have been ranked 1 to 16 within their league, with bots pushed to the bottom - so even if a bot wins their league playoffs they won't be #1 unless their league is completely bot. There should also be an inter-league ranking, so for example, that among teams that finished #2 in their respective leagues, there will be a priority for promotion.
Teams within each division can then be classified in 5 lists:
(1) Definite promotion. This is the top N active teams in a division, where N is the number of leagues. If all leagues in a division have active teams, this is simply all the 1st place teams from the division. Otherwise, it can include 2nd, 3rd, 4th, etc. teams. A team must be in the top 8 within its league to promote.automatically, so sometimes the list will have less than N teams, and can even be empty.
(2) Conditional promotion to replace bots. This includes the remaining active teams in 2nd through 8th places. They can be promoted if there are more than N bots in the division above.
(3) Retained. Active teams that finish 9th through 12th. Teams from (2) that don't promote, active teams that relegate from the division above, teams from (4) that don't relegate, and active teams from the division below that promote will be added later.
(4) Conditional relegation. Active teams that finish 13th through 16th. These teams can only be replaced by definite promotion teams (1) from the division below. They may be retained if there are lots of bots, or few activated leagues in the division below.
(5) Bots, regardless of their place. These will be relegated except when there is an extreme number of bots.
Promotion/relegation should be done a pair of divisions at a time. This ensure that active teams can only be promoted one division, while bots can be relegated multiple divisions.
There are two cases:
Case I. More (or same number of) bots (5) in the upper division than definite promotion candidates (1) in the lower division. In this case, extra promotiion teams are moved from the conditional promotion list (2) to the definite promotion list (1). In some extreme instances, this will exhaust the conditional promotion list. This will simply result in some bots being retained in the upper division. When this occurs, the bots that are relegated should be selected so as to balance the number of teams between leagues (more active teams promote into the leagues with more bots).
All conditional relegation teams (4) in the upper division will be retained, as will any remaining conditional promotion teams (2) in the lower division. Teams that promote will be moved to the retained list (3) for the division above, and relegated bots will be moved to the bot list for the division below so that they can be relegated further.
Note that Case I covers the trivial case where a division is totally bot. There are no promotable teams, which will be the same or fewer than the number of bots in the upper division.
Case II. Fewer bots (5) in the upper division than definite promotion (1) teams in the lower division. All bots and some (or all) conditional relegation (4) teams in the upper division will be relegated. Some of the conditional relegation (4) teams in the upper division may be protected from relegation. This will occur if some of the leagues in the upper division have 5 or more bots, or if there are relatively few activated leagues in the lower division.
If any conditional relegation (4) teams are saved from relegation, they are moved to the retained list (3). Then the bots (5) and the remaining conditional relegation (4)teams swap with the definite promotion (1) teams. Active teams are moved to the retained list in their new division, along with the conditional promotion (2) teams in the lower division since they remained in the division. The bots are moved to bot list in the lower division for possible further relegation.