bien, la idea es recopilar información sobre las características para los juegos que se programan en wiz (para aquellos que no tenemos una)
primero sobre la medida de scroll, eso ya se comentó, y aquí hay una liga:
http://forum.bennugd.org/index.php?topic=962.0
detectar teclas en la wiz:
http://forum.bennugd.org/index.php?topic=737.0
pantalla táctil:
mouse.left y coordenadas de mouse.
discusiones con respecto al wiz:
http://forum.bennugd.org/index.php?topic=772.0
ahora algunas dudas:
he escuchado rumores acerca de que no es bueno modificar el size del gráfico, es verdad?
cuánto es la recaida de fps ante los escalados de gráficos?
cómo está el tema de las transparencias?
están completamente prohibidas?
colisiones, cómo van?
consumen mucho en el wiz?
sugerencias, problemas, ventajas?
saludos
pd:
una duda que tengo desde hace tiempo que no tiene mucho que ver con la wiz, al hacer exit() libero recursos? o lo tengo que hacer antes?
al morir un programa el sistema libera todo aquello que no se ha liberado...
todas las demas preguntas, creo que mientras no abuses no hay problema...
transparencias?? que quieres decir con transparencias?? porque un esprite es transparente por algunas partes...
Quote from: Futublog on December 30, 2009, 08:58:13 AM
transparencias?? que quieres decir con transparencias?? porque un esprite es transparente por algunas partes...
Se refiere, imagino, a si usas un efecto de transparencia como flags=4;
La verdad es que el tema de Flags y el tema de size(sobretodo size) si que afectan bastantante al rendimiento.
Si tienes solo 4 o 5 graficos "resizeados" no pasa nada pero si usas por ejemplo enemigos resizeados, aunque sea a poco tamaño y juntes 10 o 15 sí que notaras caidas importante de framerate.
Si no teneis wiz para probar el codigo intentar encontrar a alguien con una para que os haga de betatester frecuentemente... a veces añades codigo nuevo que en el PC va de muerte y que en la wiz, por el motivo que sea, ralentiza bastante.
Saludos!
Quote from: Hokutoy on December 30, 2009, 01:25:06 PM
Quote from: Futublog on December 30, 2009, 08:58:13 AM
transparencias?? que quieres decir con transparencias?? porque un esprite es transparente por algunas partes...
Se refiere, imagino, a si usas un efecto de transparencia como flags=4;
La verdad es que el tema de Flags y el tema de size(sobretodo size) si que afectan bastantante al rendimiento.
Si tienes solo 4 o 5 graficos "resizeados" no pasa nada pero si usas por ejemplo enemigos resizeados, aunque sea a poco tamaño y juntes 10 o 15 sí que notaras caidas importante de framerate.
Si no teneis wiz para probar el codigo intentar encontrar a alguien con una para que os haga de betatester frecuentemente... a veces añades codigo nuevo que en el PC va de muerte y que en la wiz, por el motivo que sea, ralentiza bastante.
Saludos!
a eso me refería, gracias por la información amigo :)
Flags=4 es mucho más efectivo en rendimiento que usar la local ALPHA.
En teoría, si, usar size y alpha consumen recursos... pero en GP2X. Con 4 o 5 procesos con un alpha distinta de 255 si que se nota la bajada de rendimiento: de 60 a 50fps. En WIZ no debería haber tanto problema, pues hablamos de una máquina por defecto 2.5 veces más potente (hasta 4 veces usando overclock).
Pero eso si, no es bueno abusar, seguimos hablando de recursos limitados.
De momento, yo estoy haciendo mis pruebas en mi gp2x, y creo que estoy haciendo BURRADAS, y apenas he perdido unos 4 o 5 fps: voy a 50 fps y he metido unos 100 procesos tile con siete procesos enemigo, con una detección de durezas de considerable tamaño, y detectando colisiones. Lo que he probado, a 240MHz y activando los RAM timings (cambio de los tiempos de reacción de la RAM a unos más rápidos) va suave suave, por lo que en wiz debe ir de fábula.
Lo que si está prohibido es usar resoluciones más altas a la nativa, porque ahi si que cae el rendimiento a lo bestia (a poco que le metas alguna transparencia, adiós). En mi negrita, 800x600 va por debajo de 25fps.
Y no lo he probado en Bennu, pero los comandos PUT a toda la pantalla tampoco es muy buena idea. Si Splinter ha hecho MUY bien sus deberes, ya no debería ser tanto problema, pero en Fenix sí que lo era.
Recomendación: la misma que todos, haz pruebas, usa una WIZ, una GP2X o un PC a 500-800MHz.
Algo que si es importante... si pensais utilizar overclock en la wiz (con el polluxset) pensar que la tactil se descalibra una barbaridad... hablo de 2 a 3 cms de fallo que en la pantallita de la wiz es brutal.
Resumen... overclock en la wiz con un juego no tactil, genial, mas fluidez. Overclock en un juego que usa tactil con frecuencia, inviable.
Aunque sin overclockear la wiz, se tendría que poder hacer cualquier cosa de sobras.
Saludos!
Quote from: Hokutoy on December 30, 2009, 01:25:06 PM
Quote from: Futublog on December 30, 2009, 08:58:13 AM
transparencias?? que quieres decir con transparencias?? porque un esprite es transparente por algunas partes...
Se refiere, imagino, a si usas un efecto de transparencia como flags=4;
La verdad es que el tema de Flags y el tema de size(sobretodo size) si que afectan bastantante al rendimiento.
Si tienes solo 4 o 5 graficos "resizeados" no pasa nada pero si usas por ejemplo enemigos resizeados, aunque sea a poco tamaño y juntes 10 o 15 sí que notaras caidas importante de framerate.
Si no teneis wiz para probar el codigo intentar encontrar a alguien con una para que os haga de betatester frecuentemente... a veces añades codigo nuevo que en el PC va de muerte y que en la wiz, por el motivo que sea, ralentiza bastante.
Saludos!
A lo que comento: ¿para que usar un size de un personaje, enemigo o lo que sea si es una pantalla de 320 x 240?? prefiero reducirlo con el paint ^^U pixelará de todas formas...
un par de cuestions mor: -Un .fpg con imagenes tan pequeñas (esprites 32 x 32 por ejemplo) no relentizará el rendimiento aunque tenga muchiiiiiiisimas ¿no? lo digo para no usar flag para invertir la imagen...
-¿como va el tema del puntero? cambiando de tema...
a lo mejor es
Quotepantalla táctil:
mouse.left y coordenadas de mouse.
pero estoy muy pez en eso...
Quote from: Hokutoy on December 31, 2009, 06:02:11 AM
Algo que si es importante... si pensais utilizar overclock en la wiz (con el polluxset) pensar que la tactil se descalibra una barbaridad... hablo de 2 a 3 cms de fallo que en la pantallita de la wiz es brutal.
Resumen... overclock en la wiz con un juego no tactil, genial, mas fluidez. Overclock en un juego que usa tactil con frecuencia, inviable.
Aunque sin overclockear la wiz, se tendría que poder hacer cualquier cosa de sobras.
Saludos!
Yo no he tenido ese problema y overclockeo a 800 mhz con polluxset..
--
Respecto al alpha, si es 1 proceso pero ocupa toda la pantalla va a ser siempre lento, es decir el tamaño del gráfico con transparencia es tan importante como el número de ellos.
Futulog puedes usar flags invertido sin ningún tipo de problema.
Quotelos comandos PUT a toda la pantalla tampoco es muy buena idea. Si Splinter ha hecho MUY bien sus deberes, ya no debería ser tanto problema, pero en Fenix sí que lo era.
mi juego se basa en dibujado con draw, habrá problemas?
la variable exit_status funciona en la wiz, sirve para algo?
Quote
-¿como va el tema del puntero? cambiando de tema...
a lo mejor es
Quotepantalla táctil:
mouse.left y coordenadas de mouse.
pero estoy muy pez en eso...
pues tengo entendido que pulsar sobre la pantalla es igual a mouse.left, y por ende las coordenadas de la pulsación deben ser las del mouse :)
muchas gracias por sus comentarios, me están sirviendo muchísimo, ya que en México la wiz es algo del otro mundo (no la he visto en ningún lugar ??? ).
Quote
Algo que si es importante... si pensais utilizar overclock en la wiz (con el polluxset) pensar que la tactil se descalibra una barbaridad... hablo de 2 a 3 cms de fallo que en la pantallita de la wiz es brutal.
eso se activa con código o de alguna otra forma, es que mi juego es completamente táctil, y si necesita presición (de cm a mm)
Quote from: BoMbErLiNk on December 31, 2009, 02:00:37 PM
Quote from: Hokutoy on December 31, 2009, 06:02:11 AM
Algo que si es importante... si pensais utilizar overclock en la wiz (con el polluxset) pensar que la tactil se descalibra una barbaridad... hablo de 2 a 3 cms de fallo que en la pantallita de la wiz es brutal.
Resumen... overclock en la wiz con un juego no tactil, genial, mas fluidez. Overclock en un juego que usa tactil con frecuencia, inviable.
Aunque sin overclockear la wiz, se tendría que poder hacer cualquier cosa de sobras.
Saludos!
Yo no he tenido ese problema y overclockeo a 800 mhz con polluxset..
--
Respecto al alpha, si es 1 proceso pero ocupa toda la pantalla va a ser siempre lento, es decir el tamaño del gráfico con transparencia es tan importante como el número de ellos.
Futulog puedes usar flags invertido sin ningún tipo de problema.
Buenas Bomber!
Eso que comentas me interesa bastante la verdad... te importa pasarme el .gpe que usas para cargar el pollusex sin que se descalibre la pantalla? Lo he probado bastntes veces con varios juegos mios que usan la tactil y el resultado siempre es el mismo cuando usas Bennu y overclock... pulsas en mitad de la pantalla y el "cursor" aparece en la derecha del todo... con un fallo de sensibilidad de 2 a 3 cms.
Si no es molestia pasame el .gpe (o escribe en el foro las lineas) o un ejemplo si tienes algo de tiempo.
Gracias!
Pues uso el siguiente código, espero que te sirva :)
Quote
#!/bin/sh
./pollux_set 'lcd_timings=397,1,37,277,341,0,17,337;dpc_clkdiv0 =9;cpuclk=800;ram_timings=2,9,4,1,1,1,1'
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../ruta_mi_juego/bgd-runtime
PATH=$PATH:../ruta_mi_juego/bgd-runtime
echo 2 > /proc/cpu/alignment
bgdi mi_juego
sync
cd /usr/gp2x
exec /usr/gp2x/gp2xmenu
Si te sigue fallando intenta recalibrar la pantalla, quizas el problema este por ahí ;)
--
Por cierto he visto que andabas haciendo un Streets of rage de cartas o algo así, tienes alguna captura o más info ? ;D
La lógica es la siguiente: a procesos con imágeens más grandes, más pixels que procesar. Así que un size con imágenes pequeñas no pasa nada, pero a medida que aumenta, el rendimiento baja, pero desconozco el tope.
Se pueden tener muchos procesos simultáneos (ya lo he dicho, más de 150 procesos tile de 16x16 sin problemas de rendimiento), pero ojo, la creación y la destrucción de procesos consume tiempo.
Y tambien se puede usar draw_xxx sin miedo, pero no se hasta que punto: en Fenix+GP2X el límite estaba en 320x120 pixels por frame. Bennu es más rápido, y la wiz unas 3 veces más potente.
entiendo, creo que voy entonces bien. gracias drumpi, karma++
Me a ayudado bastante este post, para mi futuro juego para Wiz (y tambien para soporte Windows/linux)
reflotando un poco este tema...
estuve buscando bastante por el foro, y termine mas confundido que al principio, jaja.
Lo que quiero saber es:
- como recibe bennu los controles de la WIZ?
- que botones exactamente se pueden usar de la WIZ en bennu?
- existe una forma "recomendada" de manejar esos controles?
- el volumen de la consola se puede / tiene que manejar desde bennu o no?
- funciona todo de la misma forma que lo hace mi joystick en windows?
Bueno, espero me puedan ayudar un poco con este tema, saludos!
los controles se manejan mediante el siguiente archivo (está en el link)
http://forum.bennugd.org/index.php?topic=737.0
también hay un ejemplo.
solo me queda una duda (aprovecho).
tenemos que usar
[code language="bennu"]
jkeys_state[ _JKEY_VOLUP ]
jkeys_state[ _JKEY_VOLDOWN ]
[/code]
internamente para el volumen?
si, con eso detectas si estan pulsandose las teclas del volumen y en consecuencia, tenes que subir el volumen en tu juego o usar esas teclas para otras cosas... la wiz no sube el volumen sola... hay que hacerlo por software.
muchas gracias, cualquier cosa vuelvo en un rato!
Quote from: SplinterGU on January 27, 2010, 08:13:02 PM
si, con eso detectas si estan pulsandose las teclas del volumen y en consecuencia, tenes que subir el volumen en tu juego o usar esas teclas para otras cosas... la wiz no sube el volumen sola... hay que hacerlo por software.
ahhh!!.. genial, gracias :)
Creo que lo comenté hace poco:
Se debe cambiar el volumen de todos los canales WAV con set_channel_volume(-1,[0,128]) y también set_song_volume([0,128]) ya que van por separado. Con eso se controla el volumen general.
set_channel_volume(-1,[0,128]) ???
con solo poner -1 es igual a todos los sonidos?? :O
Lo provare!
yo lo usaba de 1 en uno, ya que la ayuda no me dice que si pongo -1 es equivalente a todos.
Si, yo ya tengo programado el volumen, y va muy bien :)
Quote from: simulatorone on January 28, 2010, 07:20:05 AM
set_channel_volume(-1,[0,128]) ???
con solo poner -1 es igual a todos los sonidos?? :O
Lo provare!
yo lo usaba de 1 en uno, ya que la ayuda no me dice que si pongo -1 es equivalente a todos.
Si, yo ya tengo programado el volumen, y va muy bien :)
sip. yo lo tengo como -1 en set_channel_volume y si me funciona en todos
Guay!!
alguien que a provado la wiz lo suficiente para saber si es malo usar load_* y unload_* muchas veces??
es que algo raro me paso con el juego del PUSH...
http://forum.bennugd.org/index.php?topic=1127.msg16953#msg16953
No te olvides antes de llamar un unload_wav comprobar si es nulo, sino te va petar.
y tras un unload, setear la variable a NULL
aunque esto lo podriamos cambiar o dar soporte a una funcion extra que setee ya a null la variable tras un unload...
Eso es cuestionable, y tu siempre has defendido lo opuesto, o sea, que Bennu tenga más lógica que Div o Fenix, si quieres hacer eso, tambien tendria lógica si haces un unload a algo que no existe que no pete como ocurria en Div, y que lo controle internamente, ya que hace tiempo comentaba por aqui estas diferencias con DIV al hacer mi port. De todos modos, lo mas importante no es implementar estas cosas o dejar de hacerlo, pero si documentarlas si se hacen, para que la gente sepa como funcionan las cosas cuando las utiliza en Bennu.
en la wiki hay mucha documentacion...
Yo he tenido recientemente errores al intentar reproducir música que se ha descargado o al descargarla cuando ya la había descargado.
Por suerte, ya sabía por donde venía el fallo (es lo que tiene compilar tras cada 10 lineas nuevas), pero podría dar algún aviso de "sonido no encontrado" o algo así.
Por cierto, me sorprende que, pudiendo cargar sólo un archivo de música con load_song, funciones como is_playing_song(), pause_song() o fade_music_off(milisegundos) no necesiten el ID de la canción cargada, y el unload_song() si. ¿O acaso se puede cargar más de una canción, pero sólo reproducir una?
¿como se asignan las teclas de wiz??
mexplico: solo uso unas cinco o seis teclas en el juego y me gustaria asignarlas a wiz, segun esto: http://forum.bennugd.org/index.php?topic=737.0 osea el codigo de la wiki:
Quote from: SplinterGU on August 28, 2009, 03:17:05 AM
jkeys.lib
import "mod_key";
import "mod_joy";
import "mod_proc";
/* -------------------------------------------------------------------------- */
const
_JKEY_UP = 0 ;
_JKEY_UPLEFT = 1 ;
_JKEY_LEFT = 2 ;
_JKEY_DOWNLEFT = 3 ;
_JKEY_DOWN = 4 ;
_JKEY_DOWNRIGHT = 5 ;
_JKEY_RIGHT = 6 ;
_JKEY_UPRIGHT = 7 ;
_JKEY_MENU = 8 ;
_JKEY_SELECT = 9 ;
_JKEY_L = 10 ;
_JKEY_R = 11 ;
_JKEY_A = 12 ;
_JKEY_B = 13 ;
_JKEY_X = 14 ;
_JKEY_Y = 15 ;
_JKEY_VOLUP = 16 ;
_JKEY_VOLDOWN = 17 ;
_JKEY_CLICK = 18 ;
_JKEY_LAST = 19 ;
end
/* -------------------------------------------------------------------------- */
global
int jkeys[_JKEY_LAST];
int jkeys_state[_JKEY_LAST];
end
/* -------------------------------------------------------------------------- */
function jkeys_set_default_keys()
begin
jkeys[ _JKEY_UP ] = _UP ;
jkeys[ _JKEY_UPLEFT ] = 0 ;
jkeys[ _JKEY_LEFT ] = _LEFT ;
jkeys[ _JKEY_DOWNLEFT ] = 0 ;
jkeys[ _JKEY_DOWN ] = _DOWN ;
jkeys[ _JKEY_DOWNRIGHT ] = 0 ;
jkeys[ _JKEY_RIGHT ] = _RIGHT ;
jkeys[ _JKEY_UPRIGHT ] = 0 ;
jkeys[ _JKEY_MENU ] = _ESC ;
jkeys[ _JKEY_SELECT ] = _ENTER ;
jkeys[ _JKEY_L ] = 0 ;
jkeys[ _JKEY_R ] = 0 ;
jkeys[ _JKEY_A ] = _A ;
jkeys[ _JKEY_B ] = _D ;
jkeys[ _JKEY_X ] = _S ;
jkeys[ _JKEY_Y ] = _W ;
jkeys[ _JKEY_VOLUP ] = 0 ;
jkeys[ _JKEY_VOLDOWN ] = 0 ;
jkeys[ _JKEY_CLICK ] = 0 ;
end
/* -------------------------------------------------------------------------- */
process jkeys_controller()
private
i;
begin
signal_action( s_kill, s_ign );
signal( type jkeys_controller, s_kill );
signal_action( s_kill, s_dfl );
loop
for ( i = 0; i < _JKEY_LAST; i++ )
if ( jkeys[i] )
jkeys_state[i] = key( jkeys[i] );
else
jkeys_state[i] = 0;
end
end
if ( os_id == OS_GP2X_WIZ && joy_number() ) /* Wiz */
jkeys_state[ _JKEY_UP ] |= joy_getbutton( 0, _JKEY_UP );
jkeys_state[ _JKEY_UPLEFT ] |= joy_getbutton( 0, _JKEY_UPLEFT );
jkeys_state[ _JKEY_LEFT ] |= joy_getbutton( 0, _JKEY_LEFT );
jkeys_state[ _JKEY_DOWNLEFT ] |= joy_getbutton( 0, _JKEY_DOWNLEFT );
jkeys_state[ _JKEY_DOWN ] |= joy_getbutton( 0, _JKEY_DOWN );
jkeys_state[ _JKEY_DOWNRIGHT ] |= joy_getbutton( 0, _JKEY_DOWNRIGHT );
jkeys_state[ _JKEY_RIGHT ] |= joy_getbutton( 0, _JKEY_RIGHT );
jkeys_state[ _JKEY_UPRIGHT ] |= joy_getbutton( 0, _JKEY_UPRIGHT );
jkeys_state[ _JKEY_MENU ] |= joy_getbutton( 0, _JKEY_MENU );
jkeys_state[ _JKEY_SELECT ] |= joy_getbutton( 0, _JKEY_SELECT );
jkeys_state[ _JKEY_L ] |= joy_getbutton( 0, _JKEY_L );
jkeys_state[ _JKEY_R ] |= joy_getbutton( 0, _JKEY_R );
jkeys_state[ _JKEY_A ] |= joy_getbutton( 0, _JKEY_A );
jkeys_state[ _JKEY_B ] |= joy_getbutton( 0, _JKEY_B );
jkeys_state[ _JKEY_X ] |= joy_getbutton( 0, _JKEY_X );
jkeys_state[ _JKEY_Y ] |= joy_getbutton( 0, _JKEY_Y );
jkeys_state[ _JKEY_VOLUP ] |= joy_getbutton( 0, _JKEY_VOLUP );
jkeys_state[ _JKEY_VOLDOWN ] |= joy_getbutton( 0, _JKEY_VOLDOWN );
jkeys_state[ _JKEY_CLICK ] |= joy_getbutton( 0, _JKEY_CLICK );
jkeys_state[ _JKEY_UP ] |= jkeys_state[ _JKEY_UPLEFT ] | jkeys_state[ _JKEY_UPRIGHT ] ;
jkeys_state[ _JKEY_DOWN ] |= jkeys_state[ _JKEY_DOWNRIGHT ] | jkeys_state[ _JKEY_DOWNLEFT ] ;
jkeys_state[ _JKEY_LEFT ] |= jkeys_state[ _JKEY_UPLEFT ] | jkeys_state[ _JKEY_DOWNLEFT ] ;
jkeys_state[ _JKEY_RIGHT ] |= jkeys_state[ _JKEY_UPRIGHT ] | jkeys_state[ _JKEY_DOWNRIGHT ] ;
end
frame;
end
end
/* -------------------------------------------------------------------------- */
he de copiarlo todo y pegarlo en el programa + añadir la libreria pertinente...
¿es necesario o con poner las teclas que uso tengo bastante???
Mete un #include "jkeys.lib" y en tu juego en lugar de usar key(_lateclaquesea) usa _JKEY_botonquesea en los ifs, y en pc te funcionara con teclado y en la wiz con los botoncios.
En la funcion jkeys_set_default_keys() puedes cambiar las equivalencias boton WIZ-tecla PC si no te gustan las que vienen por defecto...
Momia, siento contradecirte pero no funciona del todo asi.
A ver, lo primero que tienes que hacer es un mapeo entre las teclas que usas en el ordenador (teclado) y las teclas que quieres que sean en la wiz.
Esto se hace pegando todo el código que has puesto al inicio de tu .prg y cambiando el mapeo en el siguiente código:
function jkeys_set_default_keys()
begin
jkeys[ _JKEY_UP ] = _UP ;
jkeys[ _JKEY_UPLEFT ] = 0 ;
jkeys[ _JKEY_LEFT ] = _LEFT ;
jkeys[ _JKEY_DOWNLEFT ] = 0 ;
jkeys[ _JKEY_DOWN ] = _DOWN ;
jkeys[ _JKEY_DOWNRIGHT ] = 0 ;
jkeys[ _JKEY_RIGHT ] = _RIGHT ;
jkeys[ _JKEY_UPRIGHT ] = 0 ;
jkeys[ _JKEY_MENU ] = _ESC ;
jkeys[ _JKEY_SELECT ] = _ENTER ;
jkeys[ _JKEY_L ] = 0 ;
jkeys[ _JKEY_R ] = 0 ;
jkeys[ _JKEY_A ] = _A ;
jkeys[ _JKEY_B ] = _D ;
jkeys[ _JKEY_X ] = _S ;
jkeys[ _JKEY_Y ] = _W ;
jkeys[ _JKEY_VOLUP ] = 0 ;
jkeys[ _JKEY_VOLDOWN ] = 0 ;
jkeys[ _JKEY_CLICK ] = 0 ;
end
por ejemplo aqui
jkeys[ _JKEY_MENU ] = _ESC ;
decimos que queremos mapear la tecla escape del PC con la tecla menu de wiz.
En tu caso, aqui deberías de poner todas a 0 y cambiar solo las que tu quieres mapear con las de tu juego.
Luego en donde hayas usado la función key(_tecla)
tienes que sustituirlo por keystate[_teclawiz], donde tecla wiz son las que podimos ver en el mapeo anterior, es decir
_JKEY_MENU para el caso de escape, etc.
para el ejemplo anterior, donde ponias if key(_esc) ... tienes que poner if (key_state[_JKEY_MENU]) ...
Haciendo esto podrás usar tu juego en windows usando las teclas del pc y en wiz usando tus teclas con el mismo código sin necesidad de tener dos versiones (una para wiz y otra para pc).
buf, estoy es muy lioso y hay que estudiarlo mas detenidamente, así que para el concurso no entrará las teclas de wiz, y si me descalifican que me descalifiquen; ya habrá mas concursos...
je je je
¿complicado?
el que, si es facilísimo.
Puedes hacerlo de otra forma que quizá te sea más facil de entender pero más dificil de implementar
añade a tus condicionales
if (key(_teclaPC))
"hago cosas"
end
algo como
const
_JKEY_UP = 0 ;
_JKEY_UPLEFT = 1 ;
_JKEY_LEFT = 2 ;
_JKEY_DOWNLEFT = 3 ;
_JKEY_DOWN = 4 ;
_JKEY_DOWNRIGHT = 5 ;
_JKEY_RIGHT = 6 ;
_JKEY_UPRIGHT = 7 ;
_JKEY_MENU = 8 ;
_JKEY_SELECT = 9 ;
_JKEY_L = 10 ;
_JKEY_R = 11 ;
_JKEY_A = 12 ;
_JKEY_B = 13 ;
_JKEY_X = 14 ;
_JKEY_Y = 15 ;
_JKEY_VOLUP = 16 ;
_JKEY_VOLDOWN = 17 ;
_JKEY_CLICK = 18 ;
_JKEY_LAST = 19 ;
end
if (key(_teclaPC) OR ( joy_number() AND joy_getbutton( 0, _JKEY_teclaWiz) ) )
"hago cosas"
end
como ves es tu comprobación de tecla para PC y una comprobación de si hay joystic y en caso de que haya saber si está pulsado el botón del joystic.
por ejemplo si queremos comprobar si está pulsada la tecla flecha arriba en el PC o arriba de la cruceta de wiz sería esto.
if (key(_UP) OR ( joy_number() AND joy_getbutton( 0, _JKEY_UP) ) )
"hago cosas"
end
Como verás queda un if muy feote y que hay que ir cambiando quizás en muchos sitios, por eso splintergu nos deleitó con ese controlador más cómodo.
Quote from: Futublog on February 01, 2010, 10:59:59 AM
¿como se asignan las teclas de wiz??
mexplico: solo uso unas cinco o seis teclas en el juego y me gustaria asignarlas a wiz, segun esto: http://forum.bennugd.org/index.php?topic=737.0 osea el codigo de la wiki:
Quote from: SplinterGU on August 28, 2009, 03:17:05 AM
jkeys.lib
import "mod_key";
import "mod_joy";
import "mod_proc";
/* -------------------------------------------------------------------------- */
const
_JKEY_UP = 0 ;
_JKEY_UPLEFT = 1 ;
_JKEY_LEFT = 2 ;
_JKEY_DOWNLEFT = 3 ;
_JKEY_DOWN = 4 ;
_JKEY_DOWNRIGHT = 5 ;
_JKEY_RIGHT = 6 ;
_JKEY_UPRIGHT = 7 ;
_JKEY_MENU = 8 ;
_JKEY_SELECT = 9 ;
_JKEY_L = 10 ;
_JKEY_R = 11 ;
_JKEY_A = 12 ;
_JKEY_B = 13 ;
_JKEY_X = 14 ;
_JKEY_Y = 15 ;
_JKEY_VOLUP = 16 ;
_JKEY_VOLDOWN = 17 ;
_JKEY_CLICK = 18 ;
_JKEY_LAST = 19 ;
end
/* -------------------------------------------------------------------------- */
global
int jkeys[_JKEY_LAST];
int jkeys_state[_JKEY_LAST];
end
/* -------------------------------------------------------------------------- */
function jkeys_set_default_keys()
begin
jkeys[ _JKEY_UP ] = _UP ;
jkeys[ _JKEY_UPLEFT ] = 0 ;
jkeys[ _JKEY_LEFT ] = _LEFT ;
jkeys[ _JKEY_DOWNLEFT ] = 0 ;
jkeys[ _JKEY_DOWN ] = _DOWN ;
jkeys[ _JKEY_DOWNRIGHT ] = 0 ;
jkeys[ _JKEY_RIGHT ] = _RIGHT ;
jkeys[ _JKEY_UPRIGHT ] = 0 ;
jkeys[ _JKEY_MENU ] = _ESC ;
jkeys[ _JKEY_SELECT ] = _ENTER ;
jkeys[ _JKEY_L ] = 0 ;
jkeys[ _JKEY_R ] = 0 ;
jkeys[ _JKEY_A ] = _A ;
jkeys[ _JKEY_B ] = _D ;
jkeys[ _JKEY_X ] = _S ;
jkeys[ _JKEY_Y ] = _W ;
jkeys[ _JKEY_VOLUP ] = 0 ;
jkeys[ _JKEY_VOLDOWN ] = 0 ;
jkeys[ _JKEY_CLICK ] = 0 ;
end
/* -------------------------------------------------------------------------- */
process jkeys_controller()
private
i;
begin
signal_action( s_kill, s_ign );
signal( type jkeys_controller, s_kill );
signal_action( s_kill, s_dfl );
loop
for ( i = 0; i < _JKEY_LAST; i++ )
if ( jkeys[i] )
jkeys_state[i] = key( jkeys[i] );
else
jkeys_state[i] = 0;
end
end
if ( os_id == OS_GP2X_WIZ && joy_number() ) /* Wiz */
jkeys_state[ _JKEY_UP ] |= joy_getbutton( 0, _JKEY_UP );
jkeys_state[ _JKEY_UPLEFT ] |= joy_getbutton( 0, _JKEY_UPLEFT );
jkeys_state[ _JKEY_LEFT ] |= joy_getbutton( 0, _JKEY_LEFT );
jkeys_state[ _JKEY_DOWNLEFT ] |= joy_getbutton( 0, _JKEY_DOWNLEFT );
jkeys_state[ _JKEY_DOWN ] |= joy_getbutton( 0, _JKEY_DOWN );
jkeys_state[ _JKEY_DOWNRIGHT ] |= joy_getbutton( 0, _JKEY_DOWNRIGHT );
jkeys_state[ _JKEY_RIGHT ] |= joy_getbutton( 0, _JKEY_RIGHT );
jkeys_state[ _JKEY_UPRIGHT ] |= joy_getbutton( 0, _JKEY_UPRIGHT );
jkeys_state[ _JKEY_MENU ] |= joy_getbutton( 0, _JKEY_MENU );
jkeys_state[ _JKEY_SELECT ] |= joy_getbutton( 0, _JKEY_SELECT );
jkeys_state[ _JKEY_L ] |= joy_getbutton( 0, _JKEY_L );
jkeys_state[ _JKEY_R ] |= joy_getbutton( 0, _JKEY_R );
jkeys_state[ _JKEY_A ] |= joy_getbutton( 0, _JKEY_A );
jkeys_state[ _JKEY_B ] |= joy_getbutton( 0, _JKEY_B );
jkeys_state[ _JKEY_X ] |= joy_getbutton( 0, _JKEY_X );
jkeys_state[ _JKEY_Y ] |= joy_getbutton( 0, _JKEY_Y );
jkeys_state[ _JKEY_VOLUP ] |= joy_getbutton( 0, _JKEY_VOLUP );
jkeys_state[ _JKEY_VOLDOWN ] |= joy_getbutton( 0, _JKEY_VOLDOWN );
jkeys_state[ _JKEY_CLICK ] |= joy_getbutton( 0, _JKEY_CLICK );
jkeys_state[ _JKEY_UP ] |= jkeys_state[ _JKEY_UPLEFT ] | jkeys_state[ _JKEY_UPRIGHT ] ;
jkeys_state[ _JKEY_DOWN ] |= jkeys_state[ _JKEY_DOWNRIGHT ] | jkeys_state[ _JKEY_DOWNLEFT ] ;
jkeys_state[ _JKEY_LEFT ] |= jkeys_state[ _JKEY_UPLEFT ] | jkeys_state[ _JKEY_DOWNLEFT ] ;
jkeys_state[ _JKEY_RIGHT ] |= jkeys_state[ _JKEY_UPRIGHT ] | jkeys_state[ _JKEY_DOWNRIGHT ] ;
end
frame;
end
end
/* -------------------------------------------------------------------------- */
he de copiarlo todo y pegarlo en el programa + añadir la libreria pertinente...
¿es necesario o con poner las teclas que uso tengo bastante???
una vez incluido este codigo, solo tenes que llamar a:
jkeys_set_default_keys();
jkeys_controller();
en el main y luego tras cada let_me_alone(); poner:
jkeys_controller();
y por ultimo, reemplazar todos los key(...) por jkeys_state[ tecla ] donde tecla es uno de los siguientes defines:
_JKEY_UP = 0 ;
_JKEY_UPLEFT = 1 ;
_JKEY_LEFT = 2 ;
_JKEY_DOWNLEFT = 3 ;
_JKEY_DOWN = 4 ;
_JKEY_DOWNRIGHT = 5 ;
_JKEY_RIGHT = 6 ;
_JKEY_UPRIGHT = 7 ;
_JKEY_MENU = 8 ;
_JKEY_SELECT = 9 ;
_JKEY_L = 10 ;
_JKEY_R = 11 ;
_JKEY_A = 12 ;
_JKEY_B = 13 ;
_JKEY_X = 14 ;
_JKEY_Y = 15 ;
_JKEY_VOLUP = 16 ;
_JKEY_VOLDOWN = 17 ;
_JKEY_CLICK = 18 ;
si necesitas agregar alguna otra tecla que no esta asignada, la pones reemplazando esto:
function jkeys_set_default_keys()
begin
jkeys[ _JKEY_UP ] = _UP ;
jkeys[ _JKEY_UPLEFT ] = 0 ;
jkeys[ _JKEY_LEFT ] = _LEFT ;
jkeys[ _JKEY_DOWNLEFT ] = 0 ;
jkeys[ _JKEY_DOWN ] = _DOWN ;
jkeys[ _JKEY_DOWNRIGHT ] = 0 ;
jkeys[ _JKEY_RIGHT ] = _RIGHT ;
jkeys[ _JKEY_UPRIGHT ] = 0 ;
jkeys[ _JKEY_MENU ] = _ESC ;
jkeys[ _JKEY_SELECT ] = _ENTER ;
jkeys[ _JKEY_L ] = 0 ;
jkeys[ _JKEY_R ] = 0 ;
jkeys[ _JKEY_A ] = _A ;
jkeys[ _JKEY_B ] = _D ;
jkeys[ _JKEY_X ] = _S ;
jkeys[ _JKEY_Y ] = _W ;
jkeys[ _JKEY_VOLUP ] = 0 ;
jkeys[ _JKEY_VOLDOWN ] = 0 ;
jkeys[ _JKEY_CLICK ] = 0 ;
end
donde tras el = va lo mismo que pones en la funcion key(...)
vamos que es "for dummy".
es una pena que por algo tan estupido tu juego quede fuera de concurso, hiciste tanto ya que esto es minimo.
saludos, espero el update.
Bueno, después de tal despliegue de ideas me sabe mal escribir mi código, porque a lo mejor no es tan bueno o te termina liando más, pero si lo quieres, dilo ^^U
Lo cierto es que a mi también me costó un poco pillarle el truquillo, pero después de un poco de ensayo y error, acabó saliendo y lo adapté a mi fórmula estandar de manejo de teclas.
Bueno, vale, de acuerdo, ya he copiado el codigo; le he metido las librerias pertinentes y me dá el error de:
[code language="bennu"]OS_GP2X_WIZ[/code]
¿eso que es en cuention?
por que está dentro de:
[code language="bennu"] if ( os_id == OS_GP2X_WIZ && joy_number() ) /* Wiz */[/code]
y es ahí donde me lio, eso sin contar que he copiado el codigo sin echarle un vistazo, osea que tengo que razonarlo...
tampoco uso el ''let_me_alone()''
Es facil entenderlo el codigo de teclas de la Wiz...
enseguida lo entendi :)
Quote from: Futublog on February 03, 2010, 11:59:48 AM
Bueno, vale, de acuerdo, ya he copiado el codigo; le he metido las librerias pertinentes y me dá el error de:
[code language="bennu"]OS_GP2X_WIZ[/code]
¿eso que es en cuention?
por que está dentro de:
[code language="bennu"] if ( os_id == OS_GP2X_WIZ && joy_number() ) /* Wiz */[/code]
y es ahí donde me lio, eso sin contar que he copiado el codigo sin echarle un vistazo, osea que tengo que razonarlo...
tampoco uso el ''let_me_alone()''
OS_GP2X_WIZ es una constante predefinida para usar con la variable global OS_ID. símplemente compruebas que el BGDI corresponde a la versión de la WIZ, de lo contrario, ejecuta otro código.
Si no la tienes, quizás es que estás usando una versión demasiado antigua de Bennu.
Por cierto, para las comparaciones, recomiendo usar paréntesis SIEMPRE, nunca se sabe si el compilador va a saber interpretar bien el orden de las operaciones.
drumpi, hay una tablita de precedencias de operadores en la seccion de documentacion
futublog, bajate la ultima version de bennu, segui mi firma... estas trabajando con una muy vieja.
creo que no pero dounloadin...
que vá, me sigo quedando en blanco, no se sacarlo :'(
Quote from: SplinterGU on February 03, 2010, 02:51:05 PM
drumpi, hay una tablita de precedencias de operadores en la seccion de documentacion
¿Y? nunca se sabe cuando puede hacer algo raro el compilador.
El otro día se me olvidó un + en
hijos[cont]=fuego_espiritual(file,
x3+(35*cos( (60000*cont) + 30000 )) ,
y3+(35*sin( (60000*cont) + 30000 )) );
(Justo el de después del x3) y me tiró un error de "alpha: process already declared" o algo así 2000 lineas más adelante en otro proceso ;D
De todas formas, nunca está de más recomendar el uso de paréntesis, apenas le consume tiempo al compilador y siempre te salva de un apuro :D
nunca esta demas, pero creo que ese codigo era parte del que hice yo... :D
Entonces, creo que lo voy entendiendo...
hay que crear un archivo jkeys.lib al que hay que copiarle el tocho ese de las teclas y que se importe desde el .prg ¿no?
otra cosa es hacer un archivo .gpe para wiz con unas instrucciones tipo
[code language="bennu"]#!/bin/sh
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../../bgd-runtime
PATH=$PATH:../../bgd-runtime
echo 2 > /proc/cpu/alignment
bgdc defendorx.prg
bgdi defendorx.dcb
cd /usr/gp2x
exec /usr/gp2x/gp2xmenu
[/code]
que no se por qué pero tiene que ser para que corra en wiz...
a ver si me entero gracias a la insistencia...
por cierto gracias splinterGU
Por que WIZ no reconoce los archivos binarios/ejecutables por si solos.
En Linux, cualquier fichero puede ser ejecutable, da igual la extensión ¿pero cómo trasladas eso a una consola sin teclado? pues creando un fichero que se pueda reconocer por la extensión, y que ejecute comandos del sistema: lo que se conoce como un script, vamos.
Resumiendo: para ponerlo fácil.
eso ya me lo temia, pero me interesa la traduccion, al hacer otro juego tengo ca cambiar algo, o no????
[code language="bennu"]#!/bin/sh
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../../bgd-runtime
PATH=$PATH:../../bgd-runtime
echo 2 > /proc/cpu/alignment
bgdc defendorx.prg
bgdi defendorx.dcb
cd /usr/gp2x
exec /usr/gp2x/gp2xmenu
[/code]
clarop, al menos el nombre del prg y del dcb :D.
Yo me creé mi propia estructura de archivos para facilitarme la vida un poco al pasarlos a wiz.
Puedes verlo en los ejemplos que tengo en la sección de proyectos, can shooter y cohete.
Es la siguiente. Imagínate tu SD pues colgando del directorio raiz se vela siguiente jerarquia de ficheros
bgd-runtime
+ bgdc
+ ...
<b>Cohete</b>
+recursos
+ imagen1.png
+ ...
+game.dcb
+game.prg
+icon.png
+runme.gpe
<b>Cohete</b>.ini
Explcacion de cada cosa:
En el directorio bgd-runtime se encuentra todo el programa bennu, sus dlls, sus binarios, etc.
Luego el directorio cohete es un directorio con el nombre de tu juego (si es muy grande el nombre es mejor poner un nombre corto descriptivo), en mi caso se llama cohete, pero si se llamase el cohete que despega y aterriza podrías ponerle cohete a secas :D.
Hay un archivo .ini con el mismo nombre que tu juego que sirve para que wiz muestre en pantalla tu juego, contiene lo siguiente:
[info]
name="<b>Cohete</b>"
path="/<b>Cohete</b>/runme.gpe"
icon="/<b>Cohete</b>/icon.png"
se ve claro que es cada cosa, la primera es el nombre a mostrar en pantalla del juego (aquí podría haberle puesto el cohete que despega y aterriza :D), la segunda la ruta del ejecutable (o script) de iniciación del juego y la tercera un icono a mostrar en pantalla.
Luego dentro del directorio cohete están todos los archivos necesarios de tu proyecto, con la salvedad que para hacerlo homogéneo para cualquier otro nuevo juego le he puesto al prg principal el nombre de game.prg obteniendo al compilarse el game.dcb que es el binario final de nuestro juego (el vendría en un juego comercial), pues quedaría comentar el fichero script de ejecución del juego que contiene lo siguiente:
runme.gpe
#!/bin/sh
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../bgd-runtime
PATH=$PATH:../bgd-runtime
echo 2 > /proc/cpu/alignment
bgdi game.dcb
cd /usr/gp2x
exec /usr/gp2x/gp2xmenu
Es parecido al tuyo pero sin compilar el .prg (imagínate que es un juego comercial, sería feo poner el código fuente :D)
Lo que hace es por lineas:
la primera es un comentario que indica al sistema operativo el shell a usar para ejecutar este script, en este caso han puesto "sh", pero hay otros como ksh, o bien bash.
La segunda es para que el sistema operativo cuando necesite encontrar una función de forma dinámica busque en las librerías dinámicas de bennugd.
La tercera es para que cuando alguien le diga al sistema operativo que ejecute bgdc o bgdc sepa donde buscarlo para ejecutarlo.
La cuarta es insertar un 2 en el archivo aligment, no se para que vale, si alguien quiere decirlo, lo edito y lo pongo :D.
La quinta ejecuta nuestro juego dcb compilado con bennugd, gracias a la configuración del sistema que hemos hecho en estas lineas anteriores.
La sexta y cuarta sirve para que wiz vuelva al menú típico de selección de juegos inicial después de ejecutar nuestro juego.
Con esta estructura, para cada juego solo tienes que cambiar una cosa de forma sistemática (el nombre de tu juego) en varios sitios.
En el caso que he presentado del cohete sería cambiar todas las referencias a la palabra "Cohete" por el nombre del nuevo proyecto :D. Si te das cuenta, en el post anterior he resaltado en negrita la palabra cohete en todos los sitios, que sería donde hay que cambiarla.
1.- El nombre de la carpeta de tu juego.
2.- El nombre del .ini asociado a la carpeta.
3.- Editar el *.ini para poner el nombre del juego y la ruta del juego.
4.- Crear o editar el archivo icon.png de tu juego.
Y ya está, si te das cuenta, el script .gpe no hace falta cambiarlo ya que si siempre llamas al dcb de tu juego game, este lo ejecutará.
Bajate alguno de mis proyectos para wiz para entender mejor la estructura.
http://forum.bennugd.org/index.php?action=dlattach;topic=796.0;attach=526
En el mismo ejemplo que viene en la descarga de la versión WIZ ya se puede ver eñ uso del sistema, y viene con un GPE universal, que compila y ejecuta todos los PRG de la capeta destino.
Lo de alignment es para decirle al sistema operativo que trabaje tomando como base datos de tipo BYTE, porque de lo contrario lo haría con INT y el funcionamiento con tipos de menos bytes se resentiría más aun.
Es que la wiz es un poco especialita con el manejo de datos, parece ser (por eso no funciona el modo 32 bits).
- el gpe debe estar en formato UNIX, si esta en DOS, no funciona, deja la pantalla en negro.
- el "echo 2 > /proc/cpu/alignment" ya lo habia explicado, es para alinear los miembros de las estructuras a 1, sino el procesador levanta cualquier cosa si no esta alineado a palabras... esto hace el proceso mas lento, pero hace que las cosas funcionen correctamente.
Resusito este tema despues de mucho tiempo por no abrir uno nuevo
Tras denscargarme el ejemplo de DCelso veo que no puedo echar a andarlo en la wiz, sale directamente...
http://forum.bennugd.org/index.php?action=dlattach;topic=796.0;attach=526
sin embargo una pamplina como esta si funca: http://dl.openhandhelds.org/cgi-bin/wiz.cgi?0,0,0,0,19,206
el caso es que no se si me falta el runtime o si es un caso aislado que me gustaria que se tratase
Pues en este momento tampoco te puedo mirar lo que pasa directamente en la consola ^^U
¿Qué es lo que te dice el log de salida? ¿Algún error?
Si no sabes ver el log de salida, te copio/pego el script que uso con wiz en mis juegos para debug:
#!/bin/sh
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../bgd-runtime
PATH=$PATH:../bgd-runtime
export LD_LIBRARY_PATH
export PATH
echo 2 > /proc/cpu/alignment
bgdc juego.prg >log1.txt 2>err1.txt
bgdi juego.dcb >log2.txt 2>err2.txt
cd /usr/gp2x
exec /usr/gp2x/gp2xmenu
Esto te debería generar un fichero de log y otro de error, tanto para la compilación como para la ejecución. Ahí te dirá los errores que te suelen salir en la consola de comandos, igual que si usaras Linux o Windows (como Wiz no es un sistema multiventana, es la única forma de ver el output de compilador e intérprete sin conectar la consola al PC mediante una red USB (que es la forma más rápida de probar cosas en la negrita, la verdad, pero un peñazo montar todos los cables, hacer la conexión...)).
Lo importante son las llamdas a BGDC y BGDI. Usalas de ejemplo para modificar tus ficheros GPE.
me está a mi dando que compilar en linux tiene algo que ver...
yo suelo usar en la terminal de mi pc el tipico:
bgdc juego.prg (que me genera un .dcb)
bgdi juego.dcb (que me sirve para jugar en pc)
y luego copio-pego en mi tarjeta sd ese dcb para ejecutarlo en el explorador que tiene la wiz (dentro de una carpeta con el runtime) que teoricamente debe de funcionar porque lo hace cualquier otro dcb de esa forma descargado desde openhandhels
no se que estoy haciendo mal, peeero dime como con que nombre debo de guardar el codigo que me has puesto
(creo que con el nombre del juego .gpe)
Puedes ponerle el nombre que te de la gana, da igual.
El nombre sólo es relevante si vas a crear un fichero .ini para ejecutarlo directamente desde el icono de la SD, en ese caso, tanto el ini, como el gpe y la carpeta deben tener el mismo nombre.
OJO: si has leido el código, las dos primeras lineas dicen claramente que el runtime está en una carpeta llamada "bgd-runtime", una carpeta por encima de donde se encuentra el gpe, el prg y el futuro dcb. Si el runtime lo tienes suelto en la misma carpeta que el gpe, deberías sustituir en ambas líneas "../bgd-runtime" por "." ... creo, lo suyo es que lo metas en una carpeta, fuera, como hago yo (y así usas el mismo runtime para todos los juegos de Bennu que tengas) o en una carpeta dentro, y así las líneas serían "bgd-runtime" simplemente.