You've got the `< fifo0` in the wrong place. You want it to be `engine`'s stdin, not `tee`'s:
mkfifo fifo0 fifo1 fifo2
< fifo0 ./engine | tee fifo1 fifo2 &
./bot1 > fifo0 < fifo1 &
./bot2 > fifo0 < fifo2
Note that many utilities start to buffer their output when it doesn't go to a tty device (here a pipe (or possibly a socket pair if the shell is ksh93)). On GNU systems and FreeBSD, you may try to use the `stdbuf` command to disable that buffering:
mkfifo fifo0 fifo1 fifo2
< fifo0 stdbuf -o0 ./engine | tee fifo1 fifo2 &
stdbuf -o0 ./bot1 > fifo0 < fifo1 &
stdbuf -o0 ./bot2 > fifo0 < fifo2