[Homebrew] Noah and the Poohludies WIP



También tendrá port a Saturn que por ahora está más verde: https://streamable.com/oq5fc3

Si no es vaporware es el desarrollo 3D para un sistema retro más currado que he visto al representar un mundo 3D abierto y con movimiento de cámara. La distancia de dibujado está muy alejada para un juego de PS1, si bien es cierto que es a costa de generarlo con una carga poligonal baja y sin texturas, pero comparado con la niebla a dos metros o la aparición repentina de una montaña de 2km de altura está muy bien. La técnica se parece a la usada por Spyro, supongo que será la misma ya que todavía se usa en el presente en juegos actuales, que es ir bajando/aumentado la carga poligonal y texturas del entorno según el jugador se acerque o aleje. En Spyro es mucho más sutil ya que los escenarios no son tan abiertos, al menos visualmente hablando.

No he encontrado ninguna web que seguir del proyecto, hoy me puse a buscar homebrew de PSX y apareció en vídeos de casualidad. Lo único que he encontrado fue en facebook una página dedicada a Saturn que dice esto:

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."


Se centra sobre todo en comentar la versión de Saturn como era de esperar. Pero bueno al menos parece que es cierto. El vídeo de PSX se publicó el 29 de Marzo así que April's Fools no debería ser.
Hola!

Soy el creador del juego :). Visito a menudo EOL aunque nunca escribo nada (de hecho he ido a contestar a este hilo pensando q ya tenía una cuenta desde hace tiempo, pero no).

Me ha hecho ilusión ver el post aquí la verdad. Es un juego en el q llevo trabajando unos años, pero lo hago en mi tiempo libre así q va mu despacio.

Empecé con el homebrew para la versión de ps1, y más tarde lo intenté portar a dreamcast pero antes de terminar me picó la curiosidad por la saturn y ahí es donde estoy ahora mismo. La idea es intentar q la versión de saturn corra a 30 fps y luego traer los avances de esta a las otras versiones, pero como digo esto va despacito.

No tengo de momento página web ni nada específico, solo el canal de Youtube con un video visible XD. Si en algún momento puedo trabajar más rápido y poner actualizaciones más a menudo ya crearé algo. De momento cuando trabajo en algo lo enseño en el discord de segaxtreme (ya q ahora estoy con la saturn) con el mismo nombre de usuario.

Este es el vídeo de la última actualización q hice:



Y hace poco me hicieron una entrevista para una pagina web q aunque está centrada en saturn, hablo un poco de todo y de q irá el proyecto en sí:

https://www.segasaturnshiro.com/2021/04 ... view-natp/

Un saludo!
@Misscelan buenas! No sabía que eras español [beer] Lo primero felicitarte, no abunda el homebrew en 3D y mucho menos en Saturn o PSX por eso me sorprendió mucho tu proyecto. Si en algún momento tienes algo jugable aquí somos varios que seguro estamos encantado de probarlo, en Saturn por mi parte también aunque todavía estoy esperando que me llegue mi cacharro para cargar juegos en ella porque lleva 20 días parado en Aduanas.

Cuando puedas revisa tu canal de youtube porque al investigar tu perfil para encontrar más vídeos sólo aparece el que enlacé aquí de hace 11 meses. Lo que has enlazado tú debe estar configurado de forma que sea privado excepto para quienes tengan el enlace. Por cierto vaya mejora en la versión de Saturn [tadoramo]

¿Por cierto que SDK usas? Encontré tu vídeo buscando si alguien había empezado a usar el PSnoobSDK ( http://lameguy64.net/?page=psn00bsdk ) que apareció hace un par de años, pero no parece que nadie lo esté usando realmente o la scene de PSX está muy escondida, esta consola está muy abandonada en este aspecto lamentablemente.

Y sobre la entrevista, el mundo es pañuelo, pero Vaccine lo conocía me lo pasó un amigo que sabe que juego los RE clásicos de cuando en cuando y me dijo que podría gustarme. FreezeMe en cambio acabo de descubrirlo y me sorprende porque en el 2016 exploré bastante a fondo lo poco que salía de WiiU. [tomaaa]

Un saludo y gracias por dar señales de vida!
@Misscelan enhorabuena por el homebrew, yo estoy intentando ponerme con la PSX ¿que SDK me recomiendas?

Gracias por el currazo que te pegas!

Saludos
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ó:
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 gracias por el enlace, me pondré con ello.
@Gray Fox 69 cualquier proyecto o avance comunícalo [angelito]
Gracias por los comentarios!


SuperPadLand escribió:@Misscelan buenas! No sabía que eras español [beer] Lo primero felicitarte, no abunda el homebrew en 3D y mucho menos en Saturn o PSX por eso me sorprendió mucho tu proyecto...


La demo es algo q tengo previsto para verano cuando haya podido meterme con el segundo procesador de saturn, pero bueno siempre voy con retraso así q a ver si lo consigo.

Desgraciadamente no hay muchos juegos homebrew para psx, la comunidad está más centrada en decompilación de proyectos, emuladores y software. Aunque está el minecraft desarollado con candyk q tiene muy buena pinta.
Para saturn si que hay más cositas, todos los años se celebra una competición de juegos y salen cosas chulas, aquí puedes ver las entradas del año anterior:

https://segaxtreme.net/threads/sega-sat ... ion.24626/

Lo del canal de Youtube tengo más videos de desarrollo que están ocultos igual, los q haga públicos quieron q sean más completos, tengo la impresión de q si pongo los de saturn públicos q funcionan con un procesador solo o le faltan texturas la gente se lo va a tomar como q es como va a funcionar al final (aunque explique la situación en la descripción).

Y sí, uso el psnoobsdk :)


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


El link q te ha puesto @superpadland te explica bastante bien todas las opciones. Yo te recomendaría cualquiera opensource para no usar de manera ilegal librerias, aunque seguramente a sony le da igual mejor no jugártela y además cuando le cojas el tranquillo puedes hacerle cambios para ajustar el sdk al proyecto. Psnoobsdk me parece el más completo y los nombres de la api son iguales a la oficial así q te valen la mayor parte de los ejemplos y la documentación de esta, la única pega es q está escrita en ensamblador mips y es un poco tedioso si quieres tú modificar o añadir algo.

Un saludo!
Gracias a los 2 @SuperPadLand y @Misscelan, ya tengo el entorno preparado y compilé los ejemplos, para muestra un imagen:

Imagen

Y ya no ensucio más el hilo de este magnífico homebrew.

Saludos
Pinta bien, el titulo me recuerda al crash bandicoot con las letras rotadas.

Quizá si corre algo más rápido luce más (más ágil todo) , no me he fijado si hay sombra bajo el personaje, era la solución para calcular los saltos en 3D.
@gadesx hay sombra sí. De hecho hasta las montañas tienen sombra en función de donde les da el sol.
@Misscelan ¿Cómo lo llevas? ¿Algún vídeo nuevo que mostrar?
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á.
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á.

joer, pues yo le tengo ganas, kickstarter y versión fisica de PS1 [+risas]
@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. [carcajad]

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)
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. [carcajad]

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)

Pack con la memory lista? [+risas] [+risas] [+risas]

Será por alternativas.
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ó: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.

¿Te importaría compartir información técnica del cómo estás llevando a cabo el juego? SDK, manuales, algunas directrices básicas para alguien a quien le interese mojar los dedos. El know-how de cómo tirar para adelante vaya.
Tengo 6 años de experiencia como programador (y aparte la carrera y patatín patatán), pero tengo el ensamblador oxidado no, lo siguiente. De ver los vídeos estos me han dado ganas de bichear pero nunca sabe uno por dónde empezar en estos temas, es algo bastante poco recurrido. A mí no me importa aprender literalmente lo que sea, me encanta de hecho.
La información siempre está muy dispersa y los recursos instructivos son bastante pobres (siempre se enseña cómo utilizar las cosas en términos muy abstractos, y con pocos o ningunos ejemplos prácticos). A mí me basta con bastante poco para aprender porque tengo facilidades para tirar hacia adelante con poco material, pero generalmente cuando busco sobre estas cosas me siento en la selva porque el conocimiento está siempre muy escondido.

En fin, que gracias por tu tiempo hombre.
Enhorabuena por los resultados actuales por cierto, para ser tan solo una demo técnica se ve bastante legítimo. Se lanzaron al mercado juegos mucho, pero que mucho peores que lo que ya llevas entre manos [carcajad]

(PD: Los privados los tengo bien abiertos [ayay] )

EDIT: Estoy en la parra y he visto que utilizaste el psnoobsdk.
Pues una pregunta: ¿Cómo empezaste con él? ¿Lectura de documentación y probar cosas a saco? Generalmente estoy más acostumbrado a una metodología de aprendizaje mucho más visual que lo que se suele tener en este tipo de herramientas que como mucho están documentadas por funcionalidad y "buena suerte", sin un guión estructurado que muestre las cosas punto por punto.
hey @BSTCloud

El mejor sitio para aprender como programar para PSX en mi opinion es psxdev.net, ahí tienes SDKs, herramientas, tutoriales e incluso el código de algún juego completo. También tiene discord, pero en el discord la gente está más centrada en emuladores y exploits de la consola.

Pasa PSX puedes programar en C, incluso con los SDKs más nuevos tienes alguna función de C++ mu básica.
Para empezar, creo que intenté mostrar un sprite en pantalla y luego moverlo con el mando.
Aquí tienes 3 tutoriales de iniciación diferentes:

Cuando programas las principales a tener en cuenta es la multiplicación es lenta y la división aún más.
PSX tiene 4k de cache de instrucciones pero no tiene cache de datos. Te conviene que el código sea lo más compacto posible y por supuesto acceder a la memoria RAM lo menos posible (pierdes 5 ciclos por cada acceso a RAM). Tiene 1k de scratchpad (es como una memoria cache pero que solo la controla el usuario) en secciones críticas de código se suele reemplazar la dirección de memoria del stack por la dirección donde empieza esta memoria.

Tienes 2mb de memoria RAM y una parte de ella se te va en albergar el ejecutable.

El aspecto diferenciador de PSX respecto a la competencia era el GTE, un coprocesador que era capaz de realizar algunas operaciones matemáticas muy rápido para su tiempo. Por ejemplo puede transformar y proyectar 3 vértices en menos de 30 ciclos con el GTE y además hacerlo en paralelo (por referencia la Saturn tarda más que eso para proyectar un vértices solo, aunque la Saturn tiene otras virtudes). Para exprimir la consola al máximo te interesa echarle un ojo a que funciones puedes delegar para que haga el GTE en vez del procesador normal, e intentar correr otras funciones en paralelo en el procesador principal mientras el GTE te devuelve los resultados.

También si quieres sacarle todo el juego, necesitaras un poco de ensamblador MIPS, pero son pocas instrucciones y se aprende rápido. En cualquier caso MIPS es solo para sacar hasta la última gota, puedes hacer juegos perfectamente sin aprenderlo.

En cuando a recursos gráficos, PSX usa para imágenes su propio formato (TIM). Tienes herramientas para convertir imagenes en formato TIM. Hay que tener en cuenta que solo tienes 1mb de memoria de video y esta compartida con los buffers de imagen, osea a más resolución menos espacio para las texturas.

En cuanto a formato 3d, solo el SDK oficial tiene funciones para importar un formato 3d creado por ellos, que es horrible y ya no soporta ninguna herramienta de edición 3d actual. Lo mejor es que te crees tu formato desde 0.
También si te metes en el mundo de las 3d, tienes que tener en cuenta uno de los principales talones de aquiles de la PSX: Affine texture mapping, esto es que las texturas no tienen corrección de perspectiva, por lo general no importa mucho pero cuando vienen muy tumbadas y cerca de la cámara puede generar bastante confusión al jugador. La única manera de reducirlo es dividiendo los polígonos que estén cerca de la cámara en partes más pequeñas, esto te va a quitar bastantes ciclos de procesador y también añadir trabajo extra a la GPU.

Y así en resumen puede parecer un poco abrumador, pero si lo vas haciendo paso a paso las cosas van saliendo y es muy gratificante. Eso sí, si te metes en homebrew tienes que saber que el desarrollo siempre va muy despacio y hay que tomárselo con filosofía.
Llevo una semana siguiendo un curso de youtube para programar en ensamblador cuyo primer objetivo es crear un sprite (creo que inanimado) en Amstrad CPC y me veía muy feliz por haber comprendido más o menos lo de las instrucciones, como meterlas, ver que hacen, etc. Acabo de leeros y bueno, fingiré que no existís y seguiré siendo feliz poniendo pixeles de colores aleatoriamente en ensamblador y sentirme Dios. [sonrisa]
@Misscelan
No te había contestado pero vamos, de Dios todopoderoso el post que has escrito.
Lo recurriré en unos meses, ya que ahora mismo me ando (descansando en el último tercio de) un proyecto no-homebrewtástico pero sí de programación a modo de demo técnica/ejercicio de aprendizaje (unity) en el que llevo más de un año metido, y lo quiero acabar ya por cabezonería, así que hasta 2022 al menos no creo que me vea tomándome en serio la programación de PSX.

Pero me encantaría, es mi consola favorita.

(EDIT: Aquí había puesto unas preguntas sobre ejecutar el código en la consola, pero en realidad me debería de callar y buscar en los enlaces que has recomendado y ya está)
20 respuestas