Migración de juegos Fenix a Bennu - Apuntes de diferencias y resoluciones.

Started by FreeYourMind, September 30, 2009, 05:20:12 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

FreeYourMind

A ver, voy ahora a empezar a probar de nuevo, antes os aclaro:

1 - No entiendo esto:

ES HHHHWWWW 4 digitos para cada dimension... si queres 1280x800 tenes que poner 12800800...

, entonces porque esto así se define correctamente: m320x200 (o esto 1280x800), tambien lo tenia que poner 03200200 !!!???

2 -

no lo se, pero desktop_size creo que no va para fullscreen, ahi no hay desktop... creo, no estoy seguro...
por otro lado, para que si estas en fullscreen haces desktop_size?, ya tenes el modo cuando hiciste set_mode, en pc se ajusta solo a fullscreen...
la verdad que no entiendo que estas queriendo hacer...


Pues es muy sencillo, si pongo fullscreen la imagen se queda con bordes negros, ya que el juego esta a 320x200, lo que quiero es rescalar el tamaño de la ventana del juego para que ocupe toda la pantalla, sea el pc que sea.... A mi me parece facil de entender esto, los usuarios de emuladores tienen esta opcion en casi todos los emuladores....

Con scale_resolution veo la solución, sólo tengo que saber que valores elejir para cada pantalla del pc en que se ejecute y ponerselos, para eso pergunto si es posible obtenerlos...

FreeYourMind

Ya tengo una solución, ahora solo me falta que me ayudeis en otra cosa, necesito pegar 2 textos o valores, pero no sumarlos, seria juntarlos creando un texto con la junción de los 2.


O sea, la solución es esta:

Private
string juntar;

Begin
fullscreen = true;

// Es aqui que necesito ayuda, como puedo juntar estas 2 variables en un texto por extenso (y no sumarlas)
juntar = desktop_width-window_width+client_width, desktop_height-window_height+client_height; //  1280, 0800

scale_resolution =  juntar;   // Valor pretendido: 12800800;
set_mode(m320x200);


Con esto ya tendria el rescalado del juego a pantalla completa manteniendo las proporciones del juego original.
Me queda sólo sabe como manipular strings en Bennu y juntarlas, ya que parece que al igualar int con strings hace la conversión y se pueden igualar.





SplinterGU

hombre te suenan la constantes?

en bennu hay ciertas constantes predefinidas... las standards para los modos de video... m320x240 es una constante que tiene un valor numerico... dicho valor es 3200240... hombre 0!!!!


un numero con 4 digitos para una dimension y 4 para la otra...

tu formula no es ninguna solucion, no sirve.... por 2 motivos...

1) "&" da la direccion (puntero) de(a) la variable y no el valor de la misma
2) si tuvieras en dichas variables 1280x800, entonces seria

1280 + 800 = 2080

y eso dista muchisimo de ser 12800800... repito  0800

lo correcto es...

scale_resolution = alto * 10000 + ancho

EDIT: Veo que cambiaste tu formula... igual no va... aca tenes la solucion... :P
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Me estoy liando totalmente, perdonar, me apetece llorar.

Edito, que tonto soy, ni comento porque esta parte fallaba ;)
He puesto con window mode, lo siguiente:

write_int(0, 10, 10, 3, &window_width);
write_int(0, 10, 30, 3, &client_width);
write_int(0, 10, 50, 3, &desktop_height);

tengo:

0
0
200

o sea, el código de DCelso no me esta pillando valores de window_width y client_width para poder hacer calculos,

esto:

set_mode (desktop_width-window_width+client_width,desktop_height-window_height+client_height);

me pone la resolucion que tengo por defecto para desktop_width y desktop_height, o sea, 320x200, porque ocurre ? falla al obtener valores para client y window ??


Sobre lo que comentas Splinter, scale_resolution = alto * 10000 + ancho
es la solución ??? no la entiendo, que valores tiene alto y ancho, son los que defino por defecto, o sea, 320x200 ?? y porque se multiplica por 10000 !!!!


Estoy cada vez más perdido... Sólo quiero obtener el valor para poner en el scale_resolution... teniendo por defecto 320x200...

SplinterGU

no, no llores... a ver...

si usas el flag fullscreen, entonces no hay windows... en fullscreen lo que vos pongas como set_mode es lo que obtendras en el get_desktop_size (por lo menos asi deberia ser en teoria)... asi que no te sirve de nada... pero no entiendo bien que es lo que queres hacer, asi que esta explicacion puede no serte util...

la formula es: ancho * 10000 + alto (perdon)

con respecto a la multiplicacion por 10000, el porque es demasiado simple, porque 1280 x 10000 = 12800000 = 1280 0000 = WWWW HHHH = 4 digitos de ancho que son 1280

en el caso de:

ancho 1280
alto 800

ancho * 10000 = 1280 * 10000 = 12800000

valor = ancho * 10000 + alto

valor = 12800000 + 800 = 12800800

si modo de video es WWWWHHHH = 12800800 = WWWW HHHH = 1280 0800

wwww = ancho = 1280 = 1280
hhhhh  = alto    = 0800 = 800
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Vale, antes de leer mejor tu ultima explicación, te comento la solución que me funcionaria, en ella solo tengo que saber como juntar 2 valores por extenso para poner en scale_resolution, igual en tu respuesta tengo la solución, pero antes te pongo el código y despues ya miro con calma tu respuesta a ver si puedo de una vez resolver el tema:

full_screen = true;
get_desktop_size(& desktop_width, & desktop_height);

// Como nota aparte, si utilizo get_desktop_size con full_screen=true tambien pilla bien los valores del desktop, pero al final al salir del juego Bennu me da un crash!!, pero utilizando tambien scale_resolution, ya no lo hace, que es justo lo que quiero tambien hacer, así que se queda sólo como nota, no es un problema en este caso

// Parte que falta terminar:
scale_resolution = quiero poner: 12800800 que es juntar &desktop_width con &desktop_height pero por extenso (no su suma)
set_mode(m320x200);


con esto ya hago lo que quiero, sólo me falta poner los valores por extenso.

FreeYourMind

Vale ya te entiendo, pero hacer eso me peta bennu:

ancho 1280
alto 800

ancho * 10000 = 1280 * 10000 = 12800000

valor = ancho * 10000 + alto

valor = 12800000 + 800 = 12800800


//write_int(0, 10, 20, 3, &desktop_width); -->  1280
//write_int(0, 10, 50, 3, &desktop_height); --> 800

scale_resolution =  &desktop_width * 1000 + &desktop_height; // Bennu crash




FreeYourMind

PERDONAR.... Parece que he bebido, ostias no me puedo creer lo torpe que estoy, me pongo multiplicando punteros, y encima que le falta un cero a la multiplicación...


Solución:


scale_resolution = desktop_width * 10000 + desktop_height;

Perdonar.... grácias por todo vuestro tiempo malgastado  :-\

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Si :) y por cierto ha sido una de las cosas que más me ha gustado, me encanta poder hacer un Fullscreen Sketch

SplinterGU

lastima que se deforma como los tv 16:9 con las señales 4:3... pero bueno... sirve...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Después de tanto lío y no habiendo usado aún scale_resolution me gustaría que pusieses en descarga lo que has conseguido a ver cómo es de vello ;)

A ver si aprendo algo, eso de fullscreen sketch suena bien pero no comprendo a qué te refieres :P
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

FreeYourMind

La verdad nunca he visto que una cosa tan sencilla nadie la entienda, a ver si lo explico sin poner fotos :)

Como sabes en la rc112, splinter hizo que el scale_resolution puediera rescalar un juego de menor resolución a mayor resolución (antes sólo lo hacia al reves).

Bueno con esto y obteniendo la resolución del Desktop de tu PC ya se consigue hacer el Fullscreen Sketch.

Esto no es más que poder poner tu juego tenga la resolución que tenga, a pantalla completa (con los incovenientes en la calidad de imagen que esto pueda tener).

Por ejemplo mi juego esta a 320*200, con el Fullscreen=true; , te lo ponia a pantalla completa sin ventanas, pero con unos marcos negros enormes (que completan el resto de la pantalla ya que tiene mayor resolución que el juego).

O sea, con esto tengo una opcion más de video al empezar el juego, y puedo si quiero, que el juego en fullscreen rellene toda mi pantalla (que es lo mismo, un fullscreen Sketh).

Esto en mi portatil con pantalla 16:9 tiene sus incovenienetes, pero yo adoro poder hacerlo, y me encanta ver semejante pixelado moviendose por pantalla :)

Esta opción abunda en juegos echos en C y emuladores.

Espero que por fin lo entiendas, con esta tranquila explicación, ya que me piro ahora mismo del curro :)

Saludos.

Drumpi

Es que en según qué monitores y tarjetas de video, la resolución 320x240 no se soporta, por lo que internamente busca la más pequeña soportada (en mi caso 640x480) y rodea el juego de bandas negras. Si el PC es antiguo si es posible que el 320x240 rellene toda la pantalla.
Lo que entiendo que intenta hacer es buscar la resolución de pantalla y escalar el juego para que la rellene con scale resolution.

Yo hice algo similar, pero en lugar de complicarme tanto, como 640x480 si que se acepta, pues use el 2x_scale :D
Cuando lo pase a Bennu también lo usaré, pero sin fltro, a mi tambien me gustan los gráficos old school (y tampoco me voy a poner a pixelar cosas más grandes :P)
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

FreeYourMind

Si de echo tienes razón, ya que mi juego con fullscreen la pantalla es algo más grande, más propria de 640x480.

Pero bueno, con esta técnica sabras siempre que el juego estará a pantalla completa sea la máquina que sea, ya que obtendrá el valor que tengas en el Desktop, y si lo tienes es porque es soportado :)

Incluso, imagina que la pantalla ni soporta los 320x200, pues lo rescalará a menor tamaño, el juego estará a toda pantalla y será compatible :) (que es lo que hacia antes, vease los ejemplos de juegos a 640x480 corriendo en la Wiz que tiene resolución 320x240)  ;D