vitoco escribió:Ya ha pasado un mes sin saber si hay avances en este proyecto. ¿Alguna posibilidad de ver algo en vivo en la junta express?
Avances hay, lo que no he continuado es el relato. Renix me está entusiasmando a ir, si eso se concreta, lo veremos en vivo. En otro caso, puedo publicar el XEX para que lo vean allá.
vitoco escribió:Y no publiques el XEX... a lo mejor califica para ABBUC
No creo que lo termine este año de todas formas!
No digo que para este año (el plazo es a fines de julio), pero para el año que sea que se presente, no tiene que haber sido publicado... bueno, hay sutilezas, pero mejor que sea novedad.
El render de los escenarios de Prince of Persia no está basado en tiles rectangulares (como Draconus o Montezuma), sino que utiliza "bloques isométricos". La pantalla está dividida en 3 filas de 10 bloques cada una, y cada bloque está formado por 5 secciones:
A = Sección de fondo (ejemplo, pilar de fondo)
F = Sección de frente (ejemplo, pilar de frente)
D = Piso de frente
B = Sección de fondo que se mezcla con el bloque que está a la derecha
C = Sección de fondo que se mezcla con el bloque que está arriba a la derecha.
Por ejemplo, cuando el personaje pasa por debajo de los pilares, en realidad pasa sobre la sección A y tras la sección F. En cambio en los juegos normales, el personaje siempre pasa por encima o por detrás, pero nunca por encima y detrás al mismo tiempo.
Esta forma de renderizar hace que el proceso tome bastante tiempo, ya que no se puede pintar el bloque directamente en pantalla, sino que hay que enmascarar y mezclar con los bloques que están alrededor. La cantidad de combinaciones posibles entre secciones y mezclas de secciones hace que sea muy arriesgado usar redefinición de caracteres. Es muy fácil que en un momento no alcancen los caracteres para una combinación en particular, además que hay que considerar que algunos elementos del escenario se mueven, y eso aumenta el número de combinaciones posibles.
Por si esto no fuera poco, el personaje hay que pintarlo y mezclarlo con el fondo, por encima y por detrás. Cuando uno ve la versión de Apple II, se nota que en algunos puntos el render se pone lento y es completamente entendible.
En mi versión, dividí el proceso en dos partes, una que le llamo el "pre render" y otra que es el "render" en si mismo. Cada vez que cambio de pantalla, el pre render calcula todo lo que se pueda calcular a priori, por ejemplo direcciones de memoria de la pantalla, direcciones de memoria de las secciones a pintar, de sus máscaras, etc. La idea es que el render sea lo más tonto posible, y por lo tanto rápido. El render solo tiene una lista de tareas por hacer y las hace, calculando lo mínimo posible. Esta separación hace que el cambio de pantalla ocupe un tiempo relativamente largo, pero al momento de redibujar secciones porque el personaje las manchó, esto se realice de la forma más rápida posible.
Un desafío que tuve al principio, antes de poner el personaje en pantalla, fue dibujar correctamente cada pantalla de PoP.. En PoP no solamente se dibuja la pantalla actual, sino que también se dibujan secciones de las pantallas adyacentes. Por ejemplo en la fila inferior se dibujan además todas las secciones C de la pantalla inferior más la sección C de la pantalla inferior izquierda. En la primer columna se dibujan las secciones C y B de la pantalla izquierda, y en la primera fila todas las secciones D de la pantalla superior.
Ir calculando los bloques de las pantallas adjuntas (que a veces no están presentes) hubiese complicado en exceso el código de dibujado si no estuviera separado en pre-render y render. En cambio, con esa separación, solo tuve que agregar algunos cálculos al pre-render y el render prácticamente es el mismo.
Acá les dejo un video de la primera vez que probamos Prince of Persia en un Atari real con UgaTec y otros amigos. En esa versión aun no está el personaje, y tampoco estaba dibujando las pantallas adyacentes izquierda e inferior.
vitoco escribió:Uff!!! Complejo el cuento del render y las secciones... ¿En el video se muestran secciones F?
Sigo impresionado y esperando más avances.
Sí, las secciones F son por ejemplo los pilares izquierdos, y esos bloques grandotes.
Hasta ahora la programación me ha parecido natural, no he tenido que ocupar truculencias (que las tengo reservadas en caso de). Ahora estoy en recuperación después de una extracción de muela del juicio, pero por mientras les puedo dejar este teaser de lo que relataré en un futuro post.
vitoco escribió:¿Hubo avances durante las vacaciones de invierno? ¿Los habrán durante las fiestas patrias? ¡Salú!
No hay avances por ahora. Dentro del tiempo que me queda para proyectos personales la prioridad se la está llevando RetroBoxTV2.
Uno de estos días actualizaré el relato al menos.
BTW: Ya estoy pensando - o en realidad pasándome rollos - con un posible juego para Atari de diseño propio
ojala no te olvides del Prince of Persia, sera glorioso tenerlo en nuestros ataris 130xe.
solo pensar que el desarrollo del New Rally X para Atari se detuvo hace tanto tiempo, y aunque se libero el codigo fuente nadie continuo con el ese proyecto..... que la fuerza te acompañe.
Aun estoy lo suficientemente entusiasmado como para seguir trabajando en él, sólo que necesito ir liberando otros proyectos que están "a punto" de terminar
No ha avanzado porque (aparte del trabajo normal) estaba enfocado en publicar RetroBoxTV 2. Lo publiqué la semana pasada y hasta ahora he quedado un poco sobrepasado con el soporte, pero de a poco la cosa se va calmando.