› Foros › Retro y descatalogado › PlayStation
So.., here's an intriguing twist... 😮🤯
Turns out the recently shared Saturn homebrew by misscelan, is actually a PORT of a PlayStation homebrew.., also by misscelan!!! This, of course, makes for a very interesting story, so here's a little more information on this fascinating new work in progress... 😉
Working Title: "Noah and the Poohloudies" by misscelan
Original PlayStation version:
https://www.youtube.com/channel/UCkh_i0 ... yjgYN_91cw
Sega Saturn Port:
https://streamable.com/oq5fc3
Brief Synopsis:
"You are a robot called Noah and you are tasked with a mission to save several other robots [Poohloudies] from a meteorite that is on a path to destroy their planet. When you encounter and jump on one of these robots [Poohloudies], they will merge with you, granting new abilities. So, it's kind of like a 3D Platformer with monster hunting..."
Development:
"I actually spent a great deal of time working on the PlayStation version [before deciding to port it to Saturn].
Saturn does have some benefits over PlayStation (and vice versa). The same goes for the assembly language they use.
If you want to squeeze them, each has its own cool features that the other doesn't...
That said, the PlayStation's GTE [Geometry Transfer Engine] makes it much easier to push a huge amount of polygons, but the Saturn's lighting fast [CPU] multiplication gets it pretty close. Each console is basically a completely different world.
The [Saturn's] architecture is a bit messy, but I like to make it a 'well-thought architecture' by simply ignoring some parts of the hardware, like the DSP or VDP2 (I don't use them at all, and if everything goes according to plan, I never will...)
Without them, it's fairly similar [to PSX development]. The use of quads and the lack of UVS is a annoyance, but it's just a bit more initial work for the exporters on the art side of things...
I'm basically using a custom renderer that doesn't bother waiting for VDP2 to sync... The benefit of this is not having to wait for VDP2 on every frame, however, the drawback is the inability to create some of the more advanced lighting and effects that XL2 does, for example, in HellSlave.
Without the use of VDP2, the background is just a skydome rendered in VDP1. There are probably ways to do it in VDP2.., but that would likely mess with the overall rendering and possiblity of doing other things while the plotter works... So, it's basically just a sphere with a gradient color inside, and other textures, like the clouds, are placed on an inner sphere.
As for the use of the DSP, it looks good when most of the polys are sequential and you're not culling much, like a racing game or a crash bandicoot type game.., because the MAC operation on the SH-2s does already 4 instructions at a time without halting much. [for a more open environment like this, it didn't seem appropriate]
[For the Saturn version] I still need to implement some missing features, and it's currently running on a single processor at about 17-18 FPS on real hardware, so it's not really playable yet... Using both CPUs, it ought to reach 30 FPS, and once I have everything implemented that is present in the PlayStation version and optimize it a bit more, I'll be sure to share a demo on SegaXtreme."
Gray Fox 69 escribió:@Misscelan enhorabuena por el homebrew, yo estoy intentando ponerme con la PSX ¿que SDK me recomiendas?
Gracias por el currazo que te pegas!
Saludos
SuperPadLand escribió:Gray Fox 69 escribió:@Misscelan enhorabuena por el homebrew, yo estoy intentando ponerme con la PSX ¿que SDK me recomiendas?
Gracias por el currazo que te pegas!
Saludos
Buscando homebrew también encontré esto que creo que aclara un poco tu pregunta: http://www.psxdev.net/forum/viewtopic.php?f=24&t=3702
SuperPadLand escribió:@Misscelan buenas! No sabía que eras español Lo primero felicitarte, no abunda el homebrew en 3D y mucho menos en Saturn o PSX por eso me sorprendió mucho tu proyecto...
Gray Fox 69 escribió:@Misscelan enhorabuena por el homebrew, yo estoy intentando ponerme con la PSX ¿que SDK me recomiendas?
Gracias por el currazo que te pegas!
Saludos
Misscelan escribió:hey @SuperPadLand
Pues mi intención era terminar la implementación de Saturn antes de volver a las plataformas anteriores (PSX y PC), pero tengo que hacer un montón de mini-tests para ver como mejoro la cache de instrucciones antes de saltar al segundo procesador, el problema que los emuladores no emulan la cache correctamente y para hacer esos mini-tests en hardware básicamente tengo que cambiar un par de líneas de código, recompilar el proyecto, pasarlo a una tarjeta SD, meterlo en el Fenrir, esperar a que se cargue, ver los resultados y decidir cuál va a ser el siguiente test y empezar otra vez desde 0.
Tengo poco tiempo para trabajar en esto y con ese método se me va una brutalidad de tiempo en pocos tests, así que la versión de Saturn lleva aparcada ya unos meses hasta que Fenrir implemente la opción de transferir juegos por wifi, cuando compré el Fenrir a principios de año parecía que se iba a implementar inminentemente, pero está tardando un poquillo en ver la luz.
Así que mientras espero a eso, volví a la versión de Dreamcast (que había dejado de lado para trabajar en la de Saturn).
La de Dreamcast está así ahora mismo. Esto es de un emulador, en hardware se me queda atascado en el menú principal (problemas de alineamiento en memoria de algunas variables).
Este es la primera vez que enseño la versión de Dreamcast Está todavía en un estado algo primitivo pero bueno se puede ver un poco como va.
Como ves todo el desarrollo va mu despacito, mi idea es implementar lo que tengo en dos o tres plataformas más y abir un patreon (no sería antes de mediados del 2022) y si despierta algo de interés pues podré dedicar más tiempo y trabajar más rápido, sino pues seguiré trabajando a este mismo ritmo, pero terminar salvo que me pase algo se terminará.
SuperPadLand escribió:@misterjano lamentablemente eso no es posible porque la PS1 requiere tener la consola lista para leer copias, imagina el jaleo si alguien financia esto sin leer la letra pequeña y le llega un juego para PS1 que detecta como copia pirata.
Ese es uno de los motivos por los que hay tantos homebrew en físico para Dreamcast, tu puedes hacer un programa para ella, quemarlo en un CD cutre y la consola lo traga como un original.
Por alguna razón no se sabe o no debe ser barato hacer repros en CD con la información de disco al arrancar necesaria para que la máquina lo lea directamente. Es una pena porque yo pillaría repros de este tipo de los juegos más caros del sistema (SotN, Suikoden 2, etc)
Misscelan escribió:He pensado lo del kickstarter y también lo de la distribución física.
Pero no me va mucho el kickstarter porque me va a crear un montón de estrés con gente demandando el producto final y estás cosas siempre tienen retrasos.
Me gusta más la idea de patreon durante el desarrollo porque alguien da un poco y obtiene algo en ese mismo momento y si no le gusta pues adiós y si le medio interesa siempre puede volver más tarde cuando esté más avanzado (o si le mola mucho sigue subscrito).
Pero bueno tampoco tengo lo del patreon muy claro, es algo que me plantearé cuando el juego tenga algo de jugo y no solo sea una demo técnica.
El cuanto a la distribución física, es otro berenjenal que no me gustaría meterme, pero si el juego saliese medio decente (que ya es mucho decir) siempre saldría algún interesado en hacer la distribución y llevarse una parte, lo cual no me importaría.
Misscelan escribió:Venía desde hace tiempo con ganas de hincarle el diente a la rama preview de Libdragon (https://github.com/DragonMinded/libdragon/tree/preview) , llevaba tiempo viendo los progresos y hace un par de findes me animé a portar lo que tengo.
Esta escena renderiza approx 1200 triángulos con colisiones y animación del personaje principal a 20 fps @ 320x240, la captura es de Ares, pero en hardware los números son bastantes parecidos. Los cracs entre los polígonos es un bug del motor y no de N64, lo mismo con el tembleque de los vértices.
Activar o desactivar el antialiasing y el dithering no parece tener un impacto significante, quizás por la resolución del juego.
Por el momento no uso el Z-Buffer, tengo una lista ordenada de los polígonos de atrás para adelante, aunque tengo planeado usarlo. Creo que desactivar el Z-buffer tiene sentido en juegos donde el overdraw sea muy bajo (por ejemplo en juegos de carreras), si el juego tiene bastante overdraw es probable que si activas el Z-Buffer y le pasas los polígonos de adelante a atrás provoques menos accesos de memoria (esto es lo que me gustaría acabar implementando).
No tengo activada la corrección de perspectiva en las texturas, esto no cambia mucho la carga de trabajo del RDP, aunque si te obliga a tener en memoria la 1/W del resultado de la multiplicación del vértice contra la inversa de la matriz de la cámara, y por ende otro acceso a memoria más tarde. Haré pruebas a ver que implicaciones tiene, aunque no creo que tenga muchas.
Para texturas uso 4 bpp y paleta de 16 colores, así que tampoco le estoy dando mucho uso a la cache de texturas. Por el momento no estoy agrupando los polígonos por materiales para así ahorrar accesos de memoria para llenar la cache, aunque no creo que tenga mucho efecto al final si quiero tener cierta variedad de texturas.
Para la animación uso la que tenía ya en el motor “animación por vertex”. En principio esta no es la solución más óptima para N64 ya que, aunque la animación por huesos puede ser computacionalmente más intensa (más cuanto más huesos y más incidencia de vértices por hueso) requiere de accesos de memoria extra para cada vértice. Pero creo que se puede optimizar bastante si pones las animaciones descomprimidas en ROM y las pasas todos los vértices de golpe a la RAM.
Hago todo el cálculo matricial en la CPU y además de una manera que no le viene muy bien a N64, solo uso el RSP para cargar el overlay de Libdragon que prepara los coeficientes de los triángulos que demanda el RDP.
Así en general, hay mucho de donde se podría rascar todavía y mejorar. Comparando con otras consolas, el problema no parece ser de la potencia sino del sospechoso habitual de n64 “la memoria”, y casi todas las mejoras vendrían de apartar del acceso a ella en lo máximo posible a todos los componentes.
Si por ejemplo desactivo la parte donde el RSP calcula los coeficientes y los manda al RDP, todo los demás (incluidos los cálculos matriciales en la CPU) consumen un total de 20ms, 4ms menos y entraría en la franja del requerimiento de la CPU para los 60 fps (relativamente fácil de alcanzar con solo pasar los cálculos matriciales al RSP).
Como anécdota, una vez tenía una variable global declarada fuera de un procedimiento, la cambié a dentro de la función y gané 2 FPS . No es únicamente por tener que acceder a la memoria para leer la variable cada vez que entraba en la función, es que reorganizar el código cambia el alineamiento de memoria de funciones y variables y todo eso tiene implicaciones. En otros sistemas no he tenido estos cambios tan bruscos por cosas tan “nimias”. Esto es solo un ejemplo de lo tensionada que está la memoria unificada y como pequeños cambios tienen efectos en cascada.
El motor ya llevo bastante tiempo desarrollándolo, pero el “porting” a N64 lo he hecho en un par de fines de semana. No lo digo por fardar, lo digo porque sido posible gracias al trabajazo enorme que se ha hecho con Libdragon, es super fácil de usar, esta todo super bien documentado, no he tenido que preguntar nada porque se encontraba todo fácil, ¡y además es gratuito y legal! Así que bueno, si sabéis un poco de programación y os gusta cacharrear es de los SDKs retro más asequibles para nuevos.
Flash-Original escribió:Guala que profesional te esta quedando.
Me encanta el resultado que veo y gracias por pasar la novedad por aqui. ¿Te ha sido muy dificil hacerlo o es tema mas de tiempo y conocimiento de maquina?
Yo me suscribo en youtube para que me peqgue cualquier aviso