Hace un par de dias que difruto de la maravillosa WIZ y los emuladores, pero ahora quiero empezar a jugar mis propios juegos en ella así que me asaltan las dudas. Puedo compilar mis proyectos en Windows y ejecutarlos en la WIZ incluyendo el .dcb y la version openwiz de Bennu? Es posible generar un ejecutable para WIZ? Lo tengo que compilar en una distribución de Linux? Gracias por vuestra atención. Saludos!
Si, al igual que fenix, los DCB son portables entre versiones.
No, no existen ejecutables en WIZ tal como lo conoces (tampoco recuerdo el poder hacer ejecutables en windows, sólo los DCB). Cuando descargas el zip de Bennu para WIZ, hay una carpeta llamada bgd-runtime, en el está el BGDI de WIZ, que no es ejecutable como tal, pero como si lo fuera. Tienes que ejecutarlo como si lo hicieses en windows por linea de comandos, sólo que en lugar de linea de comandos usas un "script". Como te dije en el otro foro, abre los .GPE con un editor de texto compatible con el formato UNIX (notepad++ por ejemplo) de los dos juegos de ejemplo y verás cómo se hace.
No tienes que compilarlo en una distribución Linux, vale cualquiera, aunque te recomiendo que hagas como los ejemplos de splinter y compiles el prg directamente en la WIZ (si, tambien tienes el BGDC en el runtime) para evitarte problemas de versiones incompatibles y errores raros entre distribuciones.
Y enhorabuena por tu compra.
felicitaciones por tu compra...
es posible generar un ejecutable para wiz, tal cual se puede para windows o para linux... claro que los modulos quedan fuera... y lo del script es solo una forma, se puede hacer de muchas formas... configurando el sistema con ldconfig, o si no queres tocar el sistema (cosa que recomiendo) entonces usar los scripts...
en resumen, la version openwiz goza de todas las maravillas de las otras versiones (salvo modo 320x240x16 u 8, nomas)
¿Eh? ¿no hay modo 8 ni 16 bits? ¿Entonces cómo hago mis juegos en modo7? :'(
yo dije eso? lee bien... please...
aclaro, solo soporta modos 320x240 16 y 8 bits... 32 y otras resoluciones no.
Ah, vale, entonces lo entendí al revés, que susto.
(Aunque eso echa por tierrra otro proyecto aparte :P)
lamentablemente es limitacion del hardware o de la SDL
I'm Back with new's doubts :)
Hay forma de saber en que máquina se esta ejecutando el dcb ?
Uno de mis nuevos ports va ser version dual, o sea, va estar optimizada para correr en PC y en Wiz, ya que tampoco existia versión para PC (sólo DOS).
Pues eso, me gustaria de comprobar al principio de una forma (sin ser chapuza, que de esa forma ya se hacerlo ;)) de saber si se ejecuta en PC o Wiz, creo recordar que Fenix si tenia funciones internas que lo permitian.
Esto porque quiero darle al usuario en la versión PC la opcion de hacer swith entre fullscreen o modo windows, ya que el juego va correr en 320*240.
Gracias.
Hola Free, mira yo no tenía ni idea de si existía o no, pero me fui a la wiki (http://wiki.bennugd.org) y puse search operating system y me encontré lo siguiente:
http://wiki.bennugd.org/index.php?title=OS_codes
Tooma, una variable global id_os lleva esa información, ahora no se si ya habrá una constante para especificar que es WIZ, supongo que splinter habrá pensado en eso y sí la habrá.
Bueno te digo mi forma de encontrar la info, para que te pueda servir para futuras preguntas y vayas más rápido a la solución sin esperar una respuesta.
Saludos.
Gracias. Ya lo miro.
Bueno, iba a buscar el post para poner las nuevas dudas, pero hay varios con titulos similares, así que las pongo aqui:
Estoy portando un juego de Div directamente a Bennu:
1 - Las funciones load() y save() para ficheros externos son distintas, como segundo parametro para Bennu tengo 2 situaciones que no se reconocen en Bennu:
No me reconoce 'mivariable' (que es un vector):
LOAD(lo_que_sea, &mivariable)
LOAD(lo_que_sea, OFFSET mivariable)
SAVE(lo_que_sea, &mivariable)
SAVE(lo_que_sea, OFFSET mivariable)
Si lo substituyo por
LOAD(lo_que_sea, mivariable)
SAVE(lo_que_sea, mivariable)
Compila, pero parece que Bennu peta despues al llamar la función.
Soluciones ?
(de todos modos despues pongo el código exacto, estoy en el curro y no lo tengo aqui)
2 - Cual seria lo equivalente a la funcion change_sound(...) de Div ??
Gracias.
Quote from: FreeYourMind on September 21, 2009, 09:37:38 AM
I'm Back with new's doubts :)
Hay forma de saber en que máquina se esta ejecutando el dcb ?
Uno de mis nuevos ports va ser version dual, o sea, va estar optimizada para correr en PC y en Wiz, ya que tampoco existia versión para PC (sólo DOS).
Pues eso, me gustaria de comprobar al principio de una forma (sin ser chapuza, que de esa forma ya se hacerlo ;)) de saber si se ejecuta en PC o Wiz, creo recordar que Fenix si tenia funciones internas que lo permitian.
Esto porque quiero darle al usuario en la versión PC la opcion de hacer swith entre fullscreen o modo windows, ya que el juego va correr en 320*240.
Gracias.
OS_ID
a la wiki hay que agregarle OS_GP2X_WIZ
---
el save es sin el offset
---
que tipo de variable tenes? por razones logicas dicha variable no puede contener punteros.
Son tablas (vectores).
Tampoco he visto muy bien lo que guardan, creo que es la estructura del nivel.
Cuando llegue a casa, si me arreglan internet (tengo el adsl caido no se porque) ya explico mejor el problema, se que en div la funcion tiene 3 parametros,
creo que se llama de esta forma (no me acuerdo bien):
LOAD(lo_que_sea, &mitabla, OFFSET tabla)
tampoco he visto para que utiliza 3, pero habra que ver porque en Bennu tiene menos parametros.
porque bennu no necesita 3 parametros...
el tamaño y el offset, ya los conoce internamente... eso si, tu vector no puede ser dinamico...
Entonces porque Bennu hace crash de esta forma:
LOAD(lo_que_sea, mivector) ??
que tendria que cambiar ?
Saludos.
int vector[1000];
...
save( "nombre de archivo", mivector );
...
load( "nombre de archivo", mivector );
Hay algo que hago mal cuando quiero ejecutar un .dcb en WIZ sin compilarlo en la consola.
Este es el contenido del .gpe:
#!/bin/sh
cd center
./bgdi center.dcb
cd /usr/gp2x
exec /usr/gp2x/gp2xmenu
Al ejecutarlo se queda bloqueado.
puede ser algun bug o diferencia no controlada...
misma version del compilador e interprete?
Prueba a sacar los datos a ver que te dice:
#!/bin/sh
cd center
./bgdi center.dcb >log.txt 2>error.txt
sync
cd /usr/gp2x
exec /usr/gp2x/gp2xmenu
Tambien puede ser que te falten un par de lineas para definir el PATH y no se que más.
Y recomiendo no olvidar el sync en los scripts, es la instrucción que fuerza al SO a realizar las escrituras retardadas y esas cosas para poder desmontar la tarjeta sin peligro.
Quote from: splinter_work on September 21, 2009, 06:07:48 PM
int vector[1000];
...
save( "nombre de archivo", mivector );
...
load( "nombre de archivo", mivector );
Eso fue lo que puse, y Bennu peta. De cualquier forma lo tengo que mirar a lupa y ya te cuento.
por favor, pone un codigo de ejemplo... ya sabes como funciona esto y que tan rapido se resuelven los temas con un codigo...
Ya he mirado mejor este engorroso código. Lo que hace el crash no era eso (funciona bien por cierto) pero si un for para parar borrar sonidos.
Lo que no entiendo es que si no tienes sonidos (no lo has grabado, porque el fichero de la ruta no existe)y haces operaciones con el sonido, Bennu trata esas excepciones internamente y no te peta nuncsa, pero utilizando un for parece que si.
Mañana te pongo el código exacto.
Me han salido muchas más problemas en la ejecución del código que funcionaba perfectamente en DIV 1,
te pongo algunos que me recuerdo, esto lo tendre que mirar con más tiempo y ver porque salen los errores:
1 - Las animaciones que estan en vectores te pone gráficos con id's distintos a los definidos (al hacer el for pasa por gráficos que no estan definidos en el loop de esa animacion)
2 - Algunos Mapas de durezas que no funcionan, el protagonista al aparecer se cae al vacio, y sólo algunos objectos parece que lo sostienen en el escenario.
Ya te contare mas en detalle.
Saludos.
no peta de pedo...
si usas handles de sonido que no cargaron en operaciones de sonido, va a petar...
esperaremos los detalles...
Splinter ¿tu no estabas tan ocupado que no te ibas a poder pasar por aqui? no estás tan activo pero sigues estando en todos lados ;D ;D ;D
si, no puedo ponerme a trabajar en el codigo... pero no puedo evitar pasar y responder...
Todo llegara heheh. Una cosa que me moskea, no se si ya os ha sucedido.
No es un problema de Bennu, pero si genérico de estos lenguages.
Estoy pasando uno de los ports a la mitad de resolución manualmente.
El rescalado automatico que trae Bennu es muy chulo, pero la verdad no se consigue el acabado gráfico que uno desea, ya que se pierde definición de gráficos y fuentes. Rescalar todos los gráficos a la mitad y asignar mitad de la resolución soluciona el problema, hay uno que otro gráfico que no queda bien al tranformarlo a la mitad de tamaño, pero se corrige con el editor de gráficos.
El problema es que se tienen que ajustar todas las coordenadas 'x' y 'y' tanto de posición como de deslocación.
Lo que ocurre es que si en el original tenemos posiciones impares o deslocamientos impares, ejemplo, y=233, x += 3, ..., no podemos poner la division exacta por 2, que seria y=116,5 y x += 1,5, esto no se permite porque se hacen arredondamientos y quedaria y=117, x += 2, que no es lo mismo, vamos.
Reactivando la pregunta del change_sound...
Cual seria el equivalente a estas 2 funciones de DIV:
change_sound()
get_sound() ???
Como pondria algo similar a esto en Bennu:
1 - sound(sonido, get_sound(x, y), 256);
2 - change_sound(sonido2, get_sound(x, y), 256);
Supongo que así
http://wiki.bennugd.org/index.php?title=Play_wav
Program
include "mod_sound"
include "mod_key"
Private
int wave[0];
int canal;
Begin
wave[0] = load_wav("my_wav1.wav");
wave[1] = load_wav("my_wav2.wav");
canal=256;
play_wav(wave,0,canal);
play_wav(wave,0,canal);
While(!key(_esc))
frame;
End
unload_wav(wave[0]);
unload_wav(wave[1]);
End
No DCelso, mi problema no es saber como ponerla a tocar, ya se que es distinto.
Lo que quiero es modificar el volumen del sonido tal como hace change_sound, y tambien el get_sound, que sirva como parametro de entrada al cambiar el volumen, tal como el ejemplo DIV que puse.
En un port que hice hace años en Fenix, lo que hice fue cambiar el volumen de algunos sonidos directamente en la musica con un editor audio.
En este caso queria hacerlo dinamicamente, como DIV lo hace.
Para el volumen de los OGG, mod, etc :
set_song_volume(volumen);
Para el volumen de los wav :
set_channel_volume(canal,volumen);
Canal : -1 si quieres modificar el volumen de todos los canales a la vez, bennu genera 8 canales por defecto si mal no recuerdo.
Volumen : 0-127
Muchas gracias Bomber, fijate que busque por el function-list.txt y no lo encontre ::)
Me falta ver lo del get_sound, ya ni me recuerdo de sus parametros de entrada, lo mirare en la ayuda de DIV a ver si me refresca la memória.
Upppss... si incluso lo tenia montado en mi funcion de volumen genérica para Wiz....
Lo bueno es que desconocia lo del parametro -1, fijate que estaba disminuyendo/aumentando el sonido con esto de forma genérica, como no provoca error si el canal no existe lo hacia de esta forma chapuzerá para modificar el volumen general:
set_channel_volume(0, vol);
set_channel_volume(2, vol);
set_channel_volume(3, vol);
set_channel_volume(4, vol);
set_channel_volume(5, vol);
set_channel_volume(6, vol);
set_channel_volume(7, vol);
set_channel_volume(8, vol);
set_channel_volume(9, vol);
Ahora lo que tendre que hacer es ver el rango de volumen para div y bennu, si no son iguales tendre que calcular el valor equivalente en Bennu para un volumen similar....
Buenas.
Me gustaria saber como cambiar la frequencia de un sonido con Bennu, se encuentra entre estas funciones ??:
INT SET_PANNING(INTEGER, INTEGER, INTEGER)
INT SET_POSITION(INTEGER, INTEGER, INTEGER)
INT SET_DISTANCE(INTEGER, INTEGER)
INT REVERSE_STEREO(INTEGER, INTEGER)
Por ejemplo en DIV es com:
sound(<código del sonido>, <volumen>, <frecuencia>)
frequencia = 256: velocidad normal
frequencia < 256: más grave
frequencia > 256: más agudo
Grácias.
Pues no, no se puede desde DIV2. Es una de las funciones que nunca se implementaron en Fenix/Bennu.
Joer, tendre que modificar los ficheros audio directamente ;)
Y que hace la SET_PANNING(INTEGER, INTEGER, INTEGER) ??
Creo que modifica el volumen de los canales L y R para que suene más hacia la derecha o a la izquierda.
Quote from: FreeYourMind on October 31, 2009, 10:30:18 AM
Buenas.
Me gustaria saber como cambiar la frequencia de un sonido con Bennu, se encuentra entre estas funciones ??:
INT SET_PANNING(INTEGER, INTEGER, INTEGER)
INT SET_POSITION(INTEGER, INTEGER, INTEGER)
INT SET_DISTANCE(INTEGER, INTEGER)
INT REVERSE_STEREO(INTEGER, INTEGER)
Por ejemplo en DIV es com:
sound(<código del sonido>, <volumen>, <frecuencia>)
frequencia = 256: velocidad normal
frequencia < 256: más grave
frequencia > 256: más agudo
Grácias.
Vuelvo a desenterrar el tema.
Splinter necesitaria cambiar la frequencia de un sonido por codigo, algun dia lo tendremos implementado ? (O mas bien lo deseo ya xD)
Veo que Bennu la utiliza como Global:
Mix_OpenAudio(int frequency, Uint16 format, int channels, int chunksize); // SDL
// Global de 'mod_sound'
sound_freq = 22050;
Lo ideal era que se pudiera definir de forma independiente para cada sonido...
Quote from: FreeYourMind on March 23, 2011, 03:23:18 PM
Veo que Bennu la utiliza como Global:
Mix_OpenAudio(int frequency, Uint16 format, int channels, int chunksize); // SDL
// Global de 'mod_sound'
sound_freq = 22050;
Lo ideal era que se pudiera definir de forma independiente para cada sonido...
deciselo a Mr. SDL_Mixer...
aunque estoy pensando en cambiar de libreria de audio.
Lo ideal es que pongas alguna mas de forma oficial y que la gente pueda incluso hacer el switch
switch de que?
si cambio algo, sera internamente, no puedo meter una lib a nivel bennugd con un api diferente... asi que a la gente no le tiene porque importar que se usa internamente.
se pueden agregar nuevas funciones, pero no romper compatibilidad.
¿Es muy difícil acceder al buffer de audio en C y ponerlo a reproducir? nunca he trabajado con sonido en C y para estas cosas siempre he visto que se usan librerías.
C no tiene funciones de sonido, no hay una solucion generica para lo que preguntas, depende de la lib de sonido que uses o de la tarjeta de sonido, device o lo que sea, si quieres hacer algo mas directo.
¿Entonces es cierto? ¿mikmod se apoya sobre SDL_mixer?
Es sólo por curiosidad, por saber las posibilidades que existen para generar audio en tiempo real. Ya sabes que tengo en una parte de la lista el tema de efectos de audio, por si alguna década lo puedo sacar :D
creo que es al reves, sdl_mixer, puede usar mikmod, pero la verdad que no estoy seguro... puede que este diciendo cualquier barbaridad.
creo que en SDL hay algunas funciones que permiten hacer algo de eso, o sea, manipular el buffer del audio antes de tocarlo.