Me atrevo a escribir que estás haciendo progresos significativos en la lógica del programa.
Como mencionaste, es importante considerar el rendimiento y la eficiencia de la solución.
Para manejar las combinaciones excluidas, aunque la lista podría ser larga, puedes automatizar su generación o definir patrones para evitar tener que enumerar cada combinación específica. Por ejemplo, si ciertos eventos son mutuamente excluyentes, podrías escribir reglas para evitar su combinación.
Con respecto al tercer punto sobre generar combinaciones de eventos ocurriendo simultáneamente, trata de buscar una manera de tener una visión más completa de los escenarios de juego.
¡Buena suerte con tu proyecto!