I have only played around a bit with some bot stuff but the line...
Code:
bot_t bots[32]; // max of 32 bots in game
I think could be better written as bot_t bots[ 33 ],
that way you can access the bot's data with just a call to ENTINDEX whenever needed.
Setting the array size to 32 will allocate space for players 1-31 since 0 is worldspawn it makes it useless.
Having it 33 ensures you can index from 1 to 32 with 0 remaining unused.
Though thats just from looking at that one line, let me know if I'm wrong about that.