Trasteando con el Lua Player de Saturn (Tutorial)

Trasteando con el Lua Player de Saturn (Tutorial)
Artículo
Mensaje Re: Trasteando con el Lua Player de Saturn (Tutorial) 
 
--sigo aqui, tengo problemas en ponerlo en un solo tema--


Lo comento linea a linea para que os quede más claro lo que he hecho:

--//------------------------------------------------------------------------
--//                Ejemplo de azar y condicionales
--//------------------------------------------------------------------------


slInitSystem(TV_320x240,NULL,1)    -- Inicio el sistema de video, esta vez he puesto una resolución más baja que el otro dia me flipe

slPrint("Generamos un numero al azar -", 2, 1)  -- Los print ya los conocemos, ponemos en pantalla una información

slRandom() -- El comando nuevo que hemos aprendido, con esto ya ha generado un número entre 0.0 y el 1 con un montón de decimales

if slRandom()<0.49999999999999 then slPrint("RESULTADO: Ha salido menos de medio", 2, 3)
else slPrint("RESULTADO: Ha salido mas de medio", 2, 3)
end  -- Aqui tenemos el primer condicional, le estamos diciendo que si el número que ha generado al azar con el comando slRandom es más pequeño que 0.5 o medio, entonces que ponga en pantalla que efectivamente ha salido menos. Luego el else le dice que si no es asi, por logica aplastante es que será más, por lo tanto en ese caso tiene que escribir en pantalla que ha salido más

slPrint("Para los desconfiaos,", 2, 5) -- prints normales de texto no los comento ya
slPrint("aqui esta la prueba:", 2, 6)
slPrint(slRandom(), 2, 7) -- Esto es en parte lo que aprendimos en la anterior lección, imprimir una variable. En este caso el resultado del comando slRandom que lo ha guardado como una variable interna y con ese resultado hemos hecho el condicional y obrado en consecuencia

slPrint("-------------------", 2, 10)
slPrint("Ahora generamos otro distinto -", 2, 11)
slRandom() -- Lo mismo, generamos otro nuevo
if slRandom()<0.49999999999999 then slPrint("Ha salido menos de medio", 2, 13)
else slPrint("Ha salido mas de medio", 2, 13)  
end -- Volvemos a comprobar el valor que tiene con el condicionante y le decimos que haga una cosa u otra

slPrint("A las pruebas me remito:", 2, 14)
slPrint(slRandom(), 2, 15) -- Volvemos a imprimir el número con el que hemos trabajado para demostrar que funciona

slPrint("Ryo Suzuki _ www.segasaturno.com", 2, 18) -- Un poco de autobombo nunca viene mal xD

while true do slSynch() end




 
 Ryo Suzuki [ 12 May 2014, 03:26 AM ]


Trasteando con el Lua Player de Saturn (Tutorial)
Comentarios
Mensaje Re: Trasteando con el Lua Player de Saturn (Tutorial) 
 
--sorry, tengo que ponerlo en tres temas o el foro se vuelve loco por los codes y me los junta :S --



Muy bonito, ¿y para qué coño quiero esto?

Es algo que quizás os preguntaréis. Yo lo he hecho, la verdad.
Los condicionales no hay duda que nos van a servir para muchas cosas y como decía antes se ve que son importantísimos en la programación en general. En cuanto al tema del azar... puede ser también interesante.

Le voy a dar un uso práctico para que os hagais una idea que todo con algo de ingenio se puede adecuar a lo que necesitemos. Imaginaos que cuando aprendamos más estamos haciendo un juego 3D simple y que generamos como escenario una serie de cubos que están por ahí por el fondo de la pantalla.

Podríamos hacer por ejemplo que los cubos tuvieran un color al azar. No sería muy costoso y así cada vez que viéramos ese escenario cambiaría ligeramente y nunca sería exactamente igual. Supongamos que vamos a colocar cubos verdes o rojos y dejaremos que la máquina decida al azar con las mismas posibilidades.

El mismo código de antes adaptado a esa idea, algo asi:

slInitSystem(TV_320x240,NULL,1)    

slPrint("Generamos un color al azar -", 2, 1)

slRandom()

if slRandom()>0.49999999999999 then slPrint("RESULTADO: El cubo es verde", 2, 3)
else slPrint("RESULTADO: El cubo es rojo", 2, 3)
end

slPrint("Lo hemos determinado,", 2, 5)
slPrint("con este numero:", 2, 6)
slPrint(slRandom(), 2, 7)

slPrint("-------------------", 2, 10)
slPrint("Ahora queremos otro cubo -", 2, 11)
slRandom()
if slRandom()>0.49999999999999 then slPrint("Esta vez el cubo sera verde", 2, 13)
else slPrint("Esta vez el cubo sera rojo", 2, 13)
end

slPrint("Al azar con las mismas posibilidades:", 2, 14)
slPrint(slRandom(), 2, 15)

slPrint("Los pondria en pantalla si supiese", 2, 19)
slPrint("dibujar y colorear poligonos xD", 2, 20)
slPrint("De momento habra que esperar...", 2, 21)
slPrint("Ryo Suzuki _ www.segasaturno.com", 2, 24)

while true do slSynch() end


Otra vez a general la iso y a correrla en el emulador y nos encontraríamos con esto:

 azar2

Fijaos que esta vez el azar ha determinado que los dos números sean superiores a 0.5, por lo tanto los cubos son rojos los dos. Cosas del random...

También es curioso, y este concepto no lo acabo de asimilar del todo, que el slRandom() aunque crea un número al azar lo hace de forma fija. De este modo en el emulador si lo probais siempre será el mismo una vez que ha decidido ese azar. Habrá que correr la iso en otro emulador para que os aparezcan otros números, no sé cómo funciona bien pero queda como grabado a fuego. Es azar, pero totalmente fijo una vez que lo ha determinado.


Como podeis ver lo de generar un número al azar nos habría servido para algo práctico. Supongo que lo podemos usar para muchas más cosas, es cuestión de sacarle punta al tema (se me ocurren varias historias más que ya tocaré si puedo).

Si tuviese la capacidad de renderizar polígonos simples pondría unos cuantos verdes y rojos en la pantalla al azar, de momento os lo tengo que mostrar en modo texto porque hasta ahí no llego aun

En fin, eso es todo por hoy. Espero que os haya gustado y que os animeis a usar Lua y podamos aprender entre todos.

Luego os contesto a lo que me pusisteis, ya mañana



P.D: Añado en documentacion esta pagina muy interesante:
http://ppcenter.free.fr/satdocs/
Tiene por ejemplo el manual que comentaba al principio de comandos en html para que podamos copiar y pegar (los pdfs estaban protegidos):
http://ppcenter.free.fr/satdocs/ST-238-R1-051795.html

P.D2: Hay una pequeña errata en el primer post que puse. Es una pequeña trampa que coloqué, en realidad.
Citar:
Nos podemos crear una carpeta nueva llamada por ejemplo Samples Mios y ahí copiamos un sample original para modificarlo y hacer nuestros testeos.

En la carpeta Samples Mios habría que copiar en la raíz la IP.BIN tal y como está en la original Samples. Porque de lo contrario no podriais generar las isos de lo que programeis.



 
 Ryo Suzuki [ 12 May 2014, 03:30 AM ]
Mensaje Re: Trasteando Con El Lua Player De Saturn (Tutorial) 
 
Es curiosa la forma en la que se usa el comando de random. Nornalmente, cuando haces una funcion random (que suelen funcionar con el reloj) metes en una variable su resultado por ejemplo asi.

Var alea -- declaro la variable vacia alea, aunque no se si esta seria la forma correcta de acerlo en lua
alea = slRandom() -- ejecuto la funcion random y el resultado que devuelve lo introduzco en la variable alea


Sin embargo de la forma que lo usas es como si la propia funcion se quedase el valor, porque al meterla en un if en otros lenguajes de programacion lo que haria es volver a ejecutarse.

If slRandom() < 0.5 -- aqui normalmente se ejecutaria la funcion nuevamente dando otro resultado diferente
If alea < 0.5 -- esta seria la forma de hacerlo normalmente con una variable a la que previamente le has introducido el contenido
slPrintf(alea,2,5) -- aquí muestra el contenido en pantalla de la variable con el numero random introducido al principio


No estoy diciendo que lo uses de forma incorrecta, lo que digo es que es curiosa esa diferencia respecto a otros lenguajes que he visto.

En el ejemplo la ejecutas y luego la comparas usando la misma función, que de hacer eso en otro lenguaje se volvería a ejecutar y a dar un resultado diferente:

slRandom() -- aqui normalmente se ejecuta y da un resultado que no va a ninguna variable y por lo tanto se pierde
If slRandom() < 0,5 -- aqui generaría un resultado (diferente del anterior) que se compara en un if
slPrintf(slRandom(),2,5) -- aquí generaría otro resultado diferente y lo imprimiría


Es posible que Lua al ser mas facil no ejecute las funciones en una comparación o una impresión, sino que se guarde su ultimo resultado y lo compare.

PD: es posible que el reloj del emu este siempre a la misma hora exacta? Y como nada mas cargarse la iso se ejecuta el programa siempre tarda lo mismo siempre te el mismo numero, en teoria los randoms salen del reloj del sistema, si el emu comienza a contar desde el 17 de noviembre de 1995 a las 00:00 cuando lo enciendes, siempre sera la misma hora exacta y te dara el mismo random.

Si estoy en lo cierto, al cambiar el programa, que ejecute mas lineas de codigo por ejemplo, tardara mas y dara un numero diferente.

PD2: la utilidad del random, ademas de para crear objetos alea, es para decidir que puntuacion sacas sacas en un combate por turnos: si fallas o no, si sacas critico o cuanto daño haces.

PD3: esto es divertido!! ^^



 
 zeros [ 12 May 2014, 07:52 AM ]
Mensaje Re: Trasteando Con El Lua Player De Saturn (Tutorial) 
 
Esto son palabras mayores,, me voy a otro post   



 
 AngelSega [ 12 May 2014, 10:49 AM ]
Mensaje Re: Trasteando Con El Lua Player De Saturn (Tutorial) 
 
zeros escribió: [Ver mensaje]
Buenísima clase tio!! Me ha gustado lo de proponer un ejercicio XD Pordía montarse un curso de programación en saturn no? Saber que funciones van de SEGA library, cuales de LUA. (yo creo que el estar ahi con el prueba y erro es lo que más echa atras.

Has visto? He intentado hacer de profe como tu

zeros escribió: [Ver mensaje]

Ese gráfico que has mostrado 3D, ese cubo rectángulo, lo que sea... no lo generas por código no? o sea le das un archivo al lua que carga aparte, un archivo hecho con un editor 3D supongo, no? si es así que extensión tiene?

Efectivamente, si te miras el sample veras que hay una carpeta llamada data donde hay varios recursos que necesita ese codigo para funcionar. El objeto tridimensional, el model en sí creo que es MDL_6.MDL.

Fijate en este tutorial que publicó el amigo Facundo ARG (él sí que sabe de estos temas!!):

http://www.segasaturno.com/portal/viewtopic.php?t=4125

Convierte de 3D Studio Max a .mdl que es el formato que parece ser que maneja la Saturn. Todo esto es igual en Saturn Orbit que en Lua, ya que al fin del cabo los assets graficos y demás deben tramitarse igual por lo que estoy viendo.

Pero ahi no queda todo en este ejemplo de Lua. Veo que hay un archivo que tiene relacion con el objeto 3D .mdl, en este caso es poly.c , que contiene esto:

//------------------------------------------------------------------------
//
//    X
//
//    POLYGON DATA
//
//    CONFIDENTIAL
//    Copyright (c) 1996, Sega Technical Institute
//
//    AUTHOR
//  CHRIS COFFIN    
//
//    TARGET            
//    SEGA SATURN
//                                  
//    REVISION
//    00/00/00
//
//    ORIGINAL FILE
//    s:\sgl_3\sgl\sample\chrome\poly.c
//
//------------------------------------------------------------------------

#include    "sgl.h"
#include    "sega_sys.h"
                              

//#define    NO_TEXTURE

// test chrome/bump object

#ifdef    NO_TEXTURE

    // NON TEXTURED FLAGS
    #define        Chrome_ATR    (MESHoff | CL_Gouraud | CL256Bnk)
    #define        Chrome_OPT    (UseGouraud | UsePalette)
    #define        Chrome_COL    (16)
    #define        Chrome_TEX     (No_Texture)
    #define        Chrome_POLY    (sprPolygon)

#else

    // TEXTURED FLAGS
    #define        Chrome_ATR    (CL256Bnk|CL_Gouraud|MESHoff|SPdis|ECdis)
    #define        Chrome_OPT    (UseGouraud)
    #define        Chrome_COL    (1024)
    #define        Chrome_TEX    (0)
    #define        Chrome_POLY    (sprNoflip)

#endif


// DEMO MODEL DATA
                              
#include    "mdl_6.mdl"


Como ves define una serie de atributos y hace referencia al mdl_6.mdl que comentabamos. Tambien te habras fijado que esta en C, creo. Esto me parece que es porque Lua soporta trabajar y llamar cosas de C sin problemas, varios samples lo hacen.

Lo único que no me queda muy claro es que es otro archivo relacionado que se llama poly.o que encontramos tambien en la carpeta data, pero parece linkar informacion importante referente a poly.c ....


P.D: Por cierto, fijaos que el código lo firma el propio CHRIS COFFIN . O sea, Christina Coffin, que estaba haciendo el Sonic Xtreme para la Saturn.

zeros escribió: [Ver mensaje]

Por ejemplo, usar este lenguaje de programación, asegura poder sacar rendimiento a la consola? o hay que programar a más bajo nivel para hacer algo parecido al Sonic Jam por ejemplo?


No estoy seguro. Creo que con el Lua bien optimizado y usando las librerias de SEGA bien, cosas en C, optimizando recursos y demas se podria hacer alguna cosa bastante decente. Por lo que leo que comentó Rockin'-B con Lua se podría programar en la Saturn de forma algo más sencilla y no mencionaba nada que se pierda capacidad respecto a Saturn Orbit/SDK oficial.

Ahora, para hacer al como lo que se ve en Sonic Jam la parte 3D nueva que lleva... Yo creo que eso, para empezar nunca podemos aspirar a ello (colocar un puto poligono es una movida, no me quiero imaginar controlar un engine asi) y luego a mi me da la nariz que ahí ya hay bastante tema en ensamblador para poder sacarle más partido a la máquina.

Luego sigo contestando al crack de Indiket, que queda muy largo esto...



 
 Ryo Suzuki [ 12 May 2014, 03:56 PM ]
Mensaje Re: Trasteando con el Lua Player de Saturn (Tutorial) 
 
Noon, tienes un EXCELENTE foro de habla hispana de programación Dreamcast!!!

http://dreamcast.es/forum/viewforum.php?forum_id=21

Tienes tutoriales para crear tu Toolchain, montarte las herramientas, preguntar... ^^ . Si sabes C o C++ y dominas librerías gráficas como SDL, lo tienes chupado!

Ryo le estás dando caña de la buena amigo!! Pregunta general, sabéis si el homebrew puede aprovechar la RAM del cartucho? Sumándolo todo, cual es el máximo de RAM que puede soportar la Saturn?



 
 Indiket [ 12 May 2014, 10:12 PM ]
Mensaje Re: Trasteando Con El Lua Player De Saturn (Tutorial) 
 
@Ryo:
Excelente, los veo capacitados para ayudarme con el bonus stages del Sonic Jump  



 
 FacundoARG [ 12 May 2014, 10:41 PM ]
Mensaje Re: Trasteando con el Lua Player de Saturn (Tutorial) 
 
Contesto lo del colega Indiket del primer post, que se me acumula la faena:

Indiket escribió: [Ver mensaje]

- La accesibilidad: Nos guste o no, en Dreamcast es muy fácil cargar binarios sin firmar (tan fácil que ni siquiera se necesita chip y custom firmware ni nada!!). Y cada vez hay más opciones: vía SD, vía BBA, pronto vía HDD....
En Saturn, hay que tener la consola chipeada (creo). Y luego, ¿qué opciones hay de cargar binarios? La única que conozco es quemando CD's... hay alguna otra???


Si que las hay. Yo tengo por ejemplo el USB Data Link que permite conectar el PC por USB al Action Replay y ejecutar codigo:

http://www.gamingenterprisesinc.com/DataLink/

Tambien está esa opción:

http://koti.kapsi.fi/~antime/sega/usbcart/usbcart.html

Y luego esta es mas hardcore y aunque puede hacerse como han demostrado no han liberado la info para hacerlo:

http://policeofficersmith.de/cgi-bin/weblog_basic/index.php?p=52

Con eso se podrian vender juegos en cartucho y no necesitarias chip ni nada raro para cargarlos

Indiket escribió: [Ver mensaje]


PD: Ryo, hay pendiente ver una demo rulando de Sonic Jam, cierto? jajaja


¿Quieres decir Sonic Jump? Facundo nos va a matar, jaja!!

-----------------------------
Y a bueno de Zeros:

zeros escribió: [Ver mensaje]

PD: es posible que el reloj del emu este siempre a la misma hora exacta? Y como nada mas cargarse la iso se ejecuta el programa siempre tarda lo mismo siempre te el mismo numero, en teoria los randoms salen del reloj del sistema, si el emu comienza a contar desde el 17 de noviembre de 1995 a las 00:00 cuando lo enciendes, siempre sera la misma hora exacta y te dara el mismo random.

Si estoy en lo cierto, al cambiar el programa, que ejecute mas lineas de codigo por ejemplo, tardara mas y dara un numero diferente.

No, creo que no es por el reloj, no se como lo hace ni donde lo guarda. Pero no te despegas de ese numero ni a tiros

Si cambias lineas de codigo y vuelves a compilar la iso, vuelven a salir los mismos numeros!! La unica forma que he encotrado es cambiar de emulador para que salgan otros. Pruebalo si puedes, ya lo veras...

zeros escribió: [Ver mensaje]
PD2: la utilidad del random, ademas de para crear objetos alea, es para decidir que puntuacion sacas sacas en un combate por turnos: si fallas o no, si sacas critico o cuanto daño haces.


Bien dicho. Supongo que lo haran asi, lo que pasa es que eso tiene que ser un azar bastante más manipulado que el que hemos usado aqui, porque hay juegos que se las traen de lo cabrones que son xD

----------------------------
Y vuelvo a Indi:

Indiket escribió: [Ver mensaje]

Ryo le estás dando caña de la buena amigo!! Pregunta general, sabéis si el homebrew puede aprovechar la RAM del cartucho? Sumándolo todo, cual es el máximo de RAM que puede soportar la Saturn?


Efectivamente, se puede hacer uso de los 4 megas. Algun homebrew de Rockin'-B lo usa, creo que sin ir más lejos una util para pasar partidas del CD a la memoria interna que hemos usado para la traduccion de Policenauts y que creo que viste en el RetroMadrid del 2013 usaba esa capacidad. Creo que soportaba archivos comprimidos y si detectaba la ram extra lo procesaba más rápido.

Es posible usar la Ram extra y creo que eso no seria muy dificil de hacer (aunque en Saturn me da a mi que cualquier minucia entraña su dificultad, lol!)

En total contaríamos con nada menos que 6 megas. 2 Mb que trae la consola y 4 más que podríamos sumarle si tenemos el cartucho metido (y cualquier usuario que vaya a usar un homebrew tiene con casi toda seguridad un Action Replay, o sea que podriamos considerarlo un estandar)

Esto la deja por arriba dos de sus contemporaneas más o menos, la PSX (que tiene 2mb y no se pueda ampliar) y la N64 que gasta 4 megas (aunque esta podria llegar hasta los 8 megas si le poniamos el expansion pack, aunque salio dos años despues de la Saturn). Si es tan importante como comentas, podria darle un plus interesante usar el cartucho siempre.

-----------------------------------------------------------------
FacundoARG escribió: [Ver mensaje]
@Ryo:
Excelente, los veo capacitados para ayudarme con el bonus stages del Sonic Jump  

En lo que se pueda, maestro. Pero tu eres aqui el que dominas del tema. A ver si hablamos que quiero preguntarte varias cosas de poligonos y sprites



 
 Ryo Suzuki [ 13 May 2014, 01:50 AM ]
Mensaje Re: Trasteando con el Lua Player de Saturn (Tutorial) 
 
Que interesante es el USB Data Link!! Ryo, sabes si es fácil obtenerlo? Vale para todos los Action Replay?? Me interesaría tener uno ya!!!  

6 MB de RAM es ya una cantidad interesante en comparación con sus competidores, pero es realmente muy poco si lo comparamos con la mayoría de juegos y ports homebrew!! Pocos conozco que ocupen poco en RAM, la verdad! Casi todos suelen estar entre 10-14 y más!!!

Por esas razones, Rockin-B o vbt sólo hizo ports de XRick (SDL), Another World (intérprete RAW), Wolf3D, Wolf4SDL y Flashback (otro intérprete, no me acuerdo del nombre)!!!! Son juegos en origen DOS, que no ocupan casi nada de RAM y se pueden portear a multitud de sistemas (sabían que hace nada han hecho un port de XRick para SNES?? jajajaja).

Por ejemplo: Another World ocupaba menos de 1 diskette (1.4MB!!), y Wolf3D corría en un 286 con 640kb de RAM!

Eso sí, todos ellos hay un currazo detrás amigos! Ya que hay que reconvertir todas las rutinas de pintado, las de sonido, los controles... a código SGL o parecido! Peeeroo.. He leído que vbt hizo un "wrapper" de la SDL, usando librerías SGL! Eso es lo que sirve amigos, para ir haciendo ports fácilmente y rápidamente!!!

http://www.segasaturno.com/portal/viewtopic.php?t=6910

Sabéis si Rockin-B publica los códigos fuentes de los ports? Dónde se puede obtener ese wrapper, aunque sea con SGL y no libyaul? Sería interesante ver que libs usó y cómo lo hizo, para tener ideas!!!



 
 Indiket [ 13 May 2014, 10:17 PM ]
Mensaje Re: Trasteando con el Lua Player de Saturn (Tutorial) 
 
Indiket escribió: [Ver mensaje]
Por esas razones, Rockin-B o vbt sólo hizo ports de XRick (SDL), Another World (intérprete RAW), Wolf3D, Wolf4SDL y Flashback (otro intérprete, no me acuerdo del nombre)!!!! Son juegos en origen DOS, que no ocupan casi nada de RAM y se pueden portear a multitud de sistemas (sabían que hace nada han hecho un port de XRick para SNES?? jajajaja).


REminiscence

Por cierto, vbt también lleva un tiempo trabajando en una versión Sega Saturn del emulador Final Burn Alpha. Cada cierto tiempo la va mejorando añadiendo mayor compatibilidad de juegos, aunque lógicamente está bastante limitado en los arcades que puede emular Sega Saturn (según él, más por tema CPU que por tema RAM).



 
 Wesker [ 13 May 2014, 11:03 PM ]
Mostrar mensajes anteriores:    
Ocultar¿Este tema fue útil?
Compartir este tema
Correo a un amigo Facebook Twitter Windows Live Favorites MySpace del.icio.us Digg SlashDot google.com LinkedIn StumbleUpon Blogmarks Diigo reddit.com Blinklist co.mments.com
technorati.com DIGG ITA linkagogo.com meneame.net netscape.com newsvine.com yahoo.com Fai Informazione Ok Notizie Segnalo Bookmark IT fark.com feedmelinks.com spurl.net
Página 2 de 4
Ir a la página Anterior  1, 2, 3, 4  Siguiente