Ya he conseguido reproducirlo, y bueno, al mirar el codigo detenidamente he visto donde estaba la cosa, ademas, te comento otras cosillas:
- cuando lo ejecutes en modo ventana, es mejor que pases 0 como bits per pixel ya que de ese modo se elegira el mismo BPP que el desktop y se evitara que se haga una reconversion al vuelo (que suele ser lentilla). Yo no lo fuerzo desde las entrañas de CRM32Pro por si acaso alguien quiere activar un modo aposta aunque luego reconvierta al vuelo al mismo depthcolor que el desktop.
- no utilices 24BPP, es muy lento en comparacion con 32BPP, asi que usa este mejor, (en un patch que estoy haciendo, no sera posible seleccionar 24BPP salvo que indiques 0 al estar en modo ventana y tu desktop este a 24 je)
- Tambien tienes una doble liberacion de superficie, fijate que la liberas dos veces, no te ha pasado nada de milagro(con los punteros hay que tener cuidado), de hecho, eso me ha inspirado para añadir un safe free surface en CRM32Pro, asi nunca eliminaras dos veces una superficie y te avisara del error

- Para el teclado añade esto bajo el case de SDL_KEYDOWN:
if(event.key.keysym.sym==SDLK_ESCAPE) done=0; - Y por ultimo, el error, pues bien, estabas usando IScreenFX->FadeImageA() de un modo no valido, en la documentacion dice:
Fade to given surface from screen surface using alpha channel
y es un pelin vaga y no especifica el detalle que la superfice dada no puede ser la propia screen. El motivo de porque fallaba en modo pantalla completa y no en ventana viene dado por el modo de acceder a video de cada backend, en este caso directdraw, con windib por ejemplo no fallaba. Vamos, resumiendo, añadire un mensajito de warning a las funciones de fade image para evitar justo esto y el modo de solucionarlo es facil:
// Efecto de Pantalla
sBg=IImage->Load(GFX_RESOURCE,"background");
IScreenFX->FadeImageA(sBg,10);
SDL_FreeSurface(sBg);
IScreenFX->FadeBlackA(10);
Ahora bien, seguro que no ves nada porque va a todo pastilla jeje, y es que ya te dije que eran de las funciones mas antiguas...cuando esto era muy lento y no hacia falta poner un timer, pues bien, ahora si, asi que para ese patch que voy a preparar, el control sera total, le indicaras cuantos ms quieres que dure el fade, en vez de utilizar esos flags un poco ambiguos (FADE_FAST,FADE_SLOW...).
Pues nada, espero que todo esto te sirva, ya me contaras

me piro de viernes nocheee :ph34r: