CAP 3B Playfield Segunda parte.Hasta ahora no hemos tenemos problema en cuadrar nuestro datafetching y nuestra ventana. Ahora vamos a probar otro escenario.

En este caso elegimos un playfield mas corto que la imagen.
Como siempre, definimos la ventana y calculamos el DDF que nos haga falta para cuadrar el bitmap. Aqui la unica novedad es fijarse donde "arranca" la imagen. Si quieres que el bitmap esté centrado, deberias añadirle los bytes necesarios a BPLxPTH/L para cuadrar esos 32 pixels (4 bytes). De otra forma, empezara a dibujar el primer pixel de la imagen al inicio de DIWSTRT.
Ha quedado claro, ¿no?
Pues solo nos queda el ejemplo donde el DDF es mas corto que nuestra imagen. Aqui deciamos que habia que saltar los bytes que no quisieramos.

De eso se encarga BPL1MOD y BPL2MOD ($dff108 y $dff10a). Uno manda sobre los bitplanes impares y el otro sobre los pares. Ahora mismo usamos playfields sencillos, donde podemos usar los bitplanes que necesitemos. En modo DUAL PLAYFIELD la cosa cambia y tienes los planos divididos entre pares e impares (imagina que quieres hacer un ""parallax"", pues el 1,3,5 serian para el plano cercano y el 2,4,6 se usarian para el fondo).
En el caso de la imagen solo tendriamos que poner dc.w BPL1MOD,40 en nuestra copperlist (o move.w #40,$dff108 si lo haces desde CPU). OJO, en este caso estoy usando DECIMAL, no hexa.

Da igual donde se encuentre el playfield, si los modulos estan separados el salto sigue siendo de 40 (la suma). Lo explico porque alguno puede pensar que solo hay que saltar la parte derecha.
Ahora que tenemos claro que es eso del modulo ¿que utilidad tiene ademas de ocultar lo que no cabe en el DDF?
Hasta ahora hemos trabajado con un bitplane. Como vimos en la introduccion, el color de la imagen se consigue apilando capas.
Plano 1
1111111111111111
1100000000000011
1100000000000011
1100000000000011
1100000000000011
1111111111111111Plano 2
1111111111111111
1100000000000011
1100000000000011
1100000000000011
1100000000000011
1111111111111111Plano 3
1111111111111111
1100000000000011
1100000000000011
1100000000000011
1100000000000011
1111111111111111Si no conoces el concepto de modulo, esa seria la forma mas logica de trabajo. Sin embargo el Amiga se encuentra en su salsa cuando ve esto:
Plano1
1111111111111111Plano 2
1111111111111111Plano 3
1111111111111111110000000000001111000000000000111100000000000011110000000000001111000000000000111100000000000011110000000000001111000000000000111100000000000011110000000000001111000000000000111100000000000011111111111111111111111111111111111111111111111111Todo este entrelazado lo podemos expresar de esta forma:

Si aplicamos lo que habiamos aprendido, vemos que hay que usar los modulos para saltarnos los demas bitplanes. En este caso seria (40+40) BPL1MOD =80 BPL2MOD=80 porque estamos usando bitplanes pares e impares en playfield SENCILLO.
Imaginemos como se va a generar la imagen.
El rayo llega DIWSTRT, el chipset busca BPL1PTH/L, BPL2PTH/L y BPL3PTH/L y empieza a dibujarlos (haciendo que vayan incrementandose), cuando termina la linea cierra el grifo, le da un empujon de 80 bytes a los 3 punteros (por orden BPL1MOD y BPL2MOD) y vuelven a pintar.....
La forma de ubicar los punteros a la hora de cargarlos, es usando el primero como referecia y despues le sumas el ancho en bytes de cada bitplane. En el caso del ejemplo vemos +40 +80 .
Espero que no haya sido muy lioso.

photo sharingBasicamente hemos hecho un pequeño loop para pokear las direcciones de los BPLxPTH/L.
Como sabemos que la imagen es 40bytes de ancho, pues subimos 40 al puntero original, asi hasta llenar todos.
La copperlist no tiene muchos cambios, mas bitplanes mas colores, los modulos y encendido de 3 bpl con compatibilidad A1000.
Ahora toca rizar el rizo para comprobar que todo esta entendido:

Si estuvieramos en esta situacion, no tenemos que olvidar que ademas de saltar los otros bitplanes, hay que saltar lo que queda fuera del DDF.
¿Alguna duda?