[DS] Inició en el desarrollo para NDS

1, 2, 3, 4
Pues en teoria si vas eliminando los sprites que vas usando y los vas reemplazando por otros nuevos no se me ocurre el tema...

Puede ser que te equivoques al asignar los números de sprites y crees algún duplicado o algún tema con las paletas. ¿Lo has probado en hardware? Porque el emu a veces se le pira bastante con borrar sprites y fondos...
A mi tampoco se me ocurre que puede ser, a menos que sea uno de estos fallos tontos que cargas el sprite en la otra pantalla sin cargar la paleta antes o algo asín...


Una dudilla, que supongo que no, pero por probar que no quede... hay alguna forma de simultanear procesos? a ver, nunca he trabajado con multihilos, pero creo que se trata de algo así... pongo un ejemplo, un personaje de un juego con una animación típica de 2 sprites diferentes que se van intercambiando, como por ejemplo este smile -->[tadoramo] bien... si quiero que ese sprite mantenga su movimiento mientras se ejecuta otra parte de código, por ejemplo escribir en pantalla o cualquier cosa así... hay algún método fácil? o por lo menos no tan "cutre" como ir intercalando los cambios de sprites entre el código... que al final queda ilegible....

Aunque la respuesta sea "NO", gracias, que no sabéis cuanto aprendo con vosotros, curioso mundo este de la animación y los sprites xD
Yo también estoy buscando algo como lo que dices DarkSilvano, si encuentras algo avisame :)
prizzio prueba a actualizar tu versión de las PAlibs por si acaso, que siempre andan arreglando bugs..

P.D: Oks Yaw
Si, lo he probado en la DS y falla igual que en el emulador.

Y es raro porque funciona perfectamente un buen rato hasta que parece que se carga bastante y peta.

Volvere a mirar la asignacion del numero de sprites pero no creo q sea eso. Yo creo que falla en el tema de la paleta, pero no se como arreglarlo.

Uso el PAfxconverter asi que la paleta que le meto en el include son dos archivos solamente. No se que pasara.

Un saludo.

Pd: Os adjunto un fichero para que probeis si tambien os da el mismo fallo. Al principio debe ir bien pero al cabo de un rato peta.
Solo he creado el nivel 1,2,3,4 y el 25.
Para seleccionar nivel es con la crucreta y para poner flechas tambien.

Adjuntos

Darksilvano, no existen hilos en la NDS (bueno si, porque tenemos 2 micros, pero el caso no es ese...), por lo que no puedes ejecutar dos instrucciones simultaneas, todo es secuancial.

Pero eso no implica que puedas hacer muchas cosas a la vez. Lo que preguntas es una pregunta de estructuración de código, y hay mil respuestas. Por ejemplo, yo suelo programar que mi bucle principal no tiene nada, simplemente una llamada al GraphicEngine (Clase o Metodo mio) que actualiza los gráficos, y otro al Process() del GameEngine que se encarga de los calculos del "mundo".

Por lo que ya dentro de tu GraphicEngine, tienes que tratar que gráficos han cambiado y cambiarlos si es necesario, actualizar posiciones etc.... Pero las posiciones y que cambiar no lo debe adivinar el GraphicEngine, sino el GameEngine que con llamadas a el indica que cambia, o que tiene que hacer nuevo (cambiando su estado ....).
Es un poco máquina de estados.

Ya te aseguro yo que ningun juego de NDS tiene hilos (salvo que tiene dos micros, por lo que son dos hilos, y cada uno hace sus cosas), pero tecnicamente lo gordo lo hace uno, que es como se ha programado siempre xD.

No se, la idea es estructurar mucho el codigo, no hacer metodos muy grandes, muy pequeños siempre, de menor a mayor abstracción, usando objetos, estructuras o lo que se necesite en cada caso... y ya verás como te queda un código limpio, bonito y muy legible :-)
Me ha gustado la idea, osea que dentro del juego vas llamando al GraphicEngine y el se encarga de actualizar en función del estado en el que esté, bien pensado xD, pos nada muchicimas gracias, supongo que sería una duda un poco básica, pero todo lo que el uso de gráficos lo estoy aprendiendo ahora y por mi cuenta, así que no doy pa mas xD

weno, pos aki os dejo otra dudilla pa que no os aburrais xD
Esto es un problema de preogramación de C/C++ que he tenido mil veces (en otros ámbitos) pero hoy estoy con una empanada mental que no consigo hacerlo... a ver, para los gráficos utilizo el all_gfx.h que genera el PAGfx haciendo los includes típicos en el main: #include "gfx/all_gfx.c" #include "gfx/all_gfx.h"

pero... luego tengo un archivo de cabecera con la declaración de unas funciones, y, claro está, otro .c con las definiciones de las funciones declaradas en el archivo de cabecera.

El caso es que estas funciones también hacen uso de los gráficos, por lo que incluyo #include "gfx/all_gfx.c" #include "gfx/all_gfx.h" también en el .c resultado: Error, multiple declaración de los sprites xD

y si no lo pongo en alguno de los 2 .c (el main y el de las funciones) pues no sabe lo que son los Sprites...

He probado a hacer lo de #ifndef #define pero algo debo estar haciendo mal.. seguro que es una tontá xD
En fin, os vais a creer que estoy aprendiendo a programar ahora, q triste xD
Eso es que no haras bien lo del #ifndef xDD

Hazlo así en cada archivo .h y .c, en todos, si coges esa costumbre nunca tendrás ese problema:

#ifndef __ALL_GFX_C__
#define __ALL_GFX_C__

codigoooooo

#endif


El nombre no tieen que tener esa estructura, pero es la forma estándar que se suele poner en todos los proyectos :)
Si lo que pasa es que en su día me acostumbré mal con el Borland que cada vez que añadías un nuevo módulo te creaba él solito el .c y el .h con sus includes y sus ifndef... y claro, ahora cuesta xD

De todas formas ya te digo que lo estaba haciendo así y no m sale, si no no habría preguntado, es que dispongo de poco tiempo pa programar y odio atascarme en cosillas como esta, como no encuentre el fallo lo pongo todo en el main y hasta luego xD

Muchas gracias por contestar, comprobaré de nuevo cuando tenga tiempo, de todas formas se aceptan sugerencias de otras posibles causas xD
Postea el fichero que te da la doble deficion y le hechamos ub vistazo.
Aunque el problema va a estar en el all_gfx y demas archivos, xq el programa no es para nada perfecto y muchas veces mete mal los nombres de las paletas, imagenes etc...

Yo te recomiendo que segun generas, los metas en un .c tu a mano, sin el extern ni nada los archivos de imagnes y paletas, y asi incluyes ese archivo solo (o le haces un .h) y tirando, que seguro que es eso. A mi me paso con el Sudoku que se volvia loco si tenia un añadido antes de añadir otro, y me cambiaba la paleta (sí, el orden :|) en fin, lo que te interesa son lso arrays, asi que hazte tu gfx.c y ya veras como va bien ;)
Buenas,

Morfeo comentas que en tu sudoku te cambiaba las paletas, pues en mi juego creo que me pasa lo mismo, puedo jugar a 12 veces en diferentes niveles sin problemas pero de golpe es como si se confundiera de paleta el programa.

Me puedes explicar como crear ese archivo que tu llamas gfx.c, que le metes dentro?

Un saludo. :)

Te adjunto el fichero que he creado gfx.c pero me sigue dando el mismo fallo el juego.

Adjuntos

he encontrado tu problema :P :P :P

Mueve el #ifndef al principio de todo el archivo!!! y asi en todos, por que lo que no queremos que se repita son los includes, porque si en alguno se te ha escapado ahi dara el error.

Otro problema aparente es que tienes en este archivo las supuestas definiciones de los graficos, pero como no tienes puesto el extern lo que te hace es crear aki una variable vacia de ese nombre y en el otro tmb!!! (creo).

Yo lo que me referia es que pegases aki directamente el codigo de las imagenes, el array y eso, y te olvidaras de lo que te genera el pagfx.

Mira mi ejemplo (archivo adjunto) copio y pego lo que me genera todo a un archivo (o separado por categorias) pero sin .h que la lian (en mi opinion, en este caso, para el resto los .h son la salvacion xD).

Es que esto de meter el raw de las imagenes a pelo es un poco .... en fin, como decirlo.... tercermundista xDDD

Bueno, espero que te sirva.

Si contestas mñana antes de las 14:00 te contesto si tienes mas dudas, sino hasta el martes nada que me voy a las fallas :D

Siento si no me he explicado mucho, pero es que tengo prisa por la maleta y eso. Cuando vuelva si eso hago un tutorial o manual de como usar el PGfx correctamente (realmente es solo copy/paste).

Espero que te haya ayudado.

Adjuntos

Buenas,

Muchas gracias por tu respuesta. He creado un archivo tal y como indicas, y me compila perfectamente.

El problema es el mismo de siempre, funciona perfectamente pero llega un momento en el que falla y carga los sprites que le da la gana, yo es que no se que puede ser.

Un saludo, y que disfrutes las fallas [beer].

PD: Te dejo mi archivo main por si quieres mirartelo, no esta muy estructurado. ;).

Adjuntos

hey he hecho una pag sobre las palibs. En ella encontrareis tutoriales (mas adelante) documentacion, enlaces de interes y descargas.
Aqui os la dejo:

sPAnishLIB

comentarios y aportes en este hilo:

http://elotrolado.net/showthread.php?s=&threadid=527856
Buenas,

Tengo una pregunta rápida y concisa, ¿cómo se hacen los tiempos de carga?

Estoy preparando un proyecto bastante grande y preveo que voy a tener que hacer algunos tiempos de carga para borrar sprites y crear los nuevos y tal... El tema es que no tengo mucha idea de como hacerlo...

Tampoco me corre mucha prisa pero bueno, a ver si alguien me ilumina :D
En los foros de la pagina de Talfi,

http://www.talfi.net

he realizado unos cuantos tutoriales de las palib y los fuentes de mis juegos como Antarex.

Espero que os sirvan de ayuda [oki]
Buenas

Bueno, tengo una dudilla haber si podeis solventarmela. Hay alguna funcion, en la que yo le pase por parametros una coordenada de pantalla y me devuelva el color del pixel que tiene. Es que se me ha ocurrido un juego divertido y la unica forma que se me ocurre de momento para hacerlo es usando una funcion que haga eso.

Si no existe tal funcion, como podria saber que color tiene un pixel en concreto :O.

;) Un saludo compañeros.
prizzio escribió:Buenas

Bueno, tengo una dudilla haber si podeis solventarmela. Hay alguna funcion, en la que yo le pase por parametros una coordenada de pantalla y me devuelva el color del pixel que tiene. Es que se me ha ocurrido un juego divertido y la unica forma que se me ocurre de momento para hacerlo es usando una funcion que haga eso.

Si no existe tal funcion, como podria saber que color tiene un pixel en concreto :O.

;) Un saludo compañeros.


Claro que la hay ^^, yo la uso para el PaperFootball, la función es tal que así:

PA_Get8bitPixel(pantalla,x,y)

El fondo tiene que ser un mapa de 8bit, si no no funcionará :) (devuelve la posición del color en la paleta)
Muchas gracias [ok], voy a probarla. Haber si consigo que me salga el invento.

Un saludo [bye]
Una duda que me ha surgido ahora en el curro xD

Estaba pensando ahora, como se podría hacer un juego isométrico con PAlibs??? Porque el TiledLayer solo acepta tiles cuadrados por lo que descartado. Luego un Background Drawable (o como se diga) no es factible porque se hucpa muchísima RAM.
Existe alguna manera asi que no consuma muchos recursos?? En J2ME es bastante fácil porque solo se "pinta", no existe ni backgrounds ni na, solo pintar :D

Supongo que para GBA habría el mismo problema, como lo harían? a pelo a la vieja usanza??. Me da que va a ver que tirar de libnds....

Que opinais??
No se si se pregunto est ya pero yo no puedo leerme todos los post porque toy en un cyber y se me acaba el tiempo...

Cual es el mejor link para iniciarcer a la programacion para DS.
Los tutoriales de aaronrogers son de los mejores, pero estan en ingles.

Y por supuesto los tutoriales que tiene talfi en en su foro: http://www.talfi.net
Wenas, estoy dandole vueltas a mi proyecto y no consigo avanzar, yo creo que es que me está costando más de lo que creía no pensar en orientación a objetos, así que me estoy planteando empezarlo de nuevo en C++ a ver si así veo la solución

¿alguien tiene algún código fuente de algún proyecto que use las PAlibs y c++? es para ver si hay que hacer alguna virguería para q t lo reconozca o algo así, porque he probado a crear la primera clase:

#ifndef __PJ_H
#define __PJ_H

#include

class PJ{
private:
char* nombre; // Nombre del personaje
.
.
.

public:

PJ();
~PJ();

};

#endif


y he recibido un flamante error: expected '=', ',', ';', 'asm' or '__attribute__' before 'PJ'


--------------------------------------------------------------------------------
OFFTOPIC ON:

xD, salimos de Malaga y nos metemos en Malagón xD

La programación de DS no me quiere :_( [mamaaaaa]

enga gracias, a ver si algún día consigo hacer algo más que un hola mundo xD, la verdad es que me estoy desanimando bastante porque apenas tengo tiempo y no consigo nada, cuando c y c++ lo tendría que tener dominao (c++ el año pasado y este año c para linux, ya sabéis, llamadas al sistema y esas cosillas..)

el caso es que este año estoy con java y con lo fáciles q se hacen las cosas ahi.. xD

además Eclipse me hace él solito medio código xD

pues eso, a ver si alguien me echa una mano ;) Saludos

OFFTOPIC OFF
Bajate las ultimas PAlibs (sí las beta), e instalalo con el CPPInstall.bat y ya te debería funcionar ;)

Ya nos contarás....
NO hace falta que tengas la beta, ve a la carpeta donde tengas las PAlib y ejecuta el CPPInstaler.bat, así deberia ir
A mi es que con las anteriores y algunas instrucciones me petaba, (quiza tenia una antigua) pero no me iba casi ninguna instruccion PA, daba error por todos los lados con C++...
Muchas gracias! ya estaba usando las beta, porque había leido que en principio con c++ ya iba mucho mejor, pero no le había dado a lo de cppinstall

Bien, os comento la jugada, probé primero a hacer clean y luego al cppinstall, pero me daba un error.. (y ya de paso vi que no hacía falta darle al clean porque había una regla pa que lo hiciera solito antes del make xD)

weno, probé a cargarme las PAlibs enteras y volverlas a poner, dando como primera instalación al cppinstall pero el mismo error... el caso es que he probado a ver si así reconocía la clase y parece que sí, pero a cambio me daba otros errores en los bin del arm9 o el arm7, vamos, que no se había instalado bien antes, ya lo sabía xD

el caso es que casi desistiendo le doy al cinstall pa que volveiera todo a la normalidad y.. tachán... ya funcionaba, el caso es que no me lo explico muy bien, porque cinstall tambien hace clean...

ahms, eso si, cada vez que compilo me da unos warnings con el sonido, pero como que por ahora me doy por contento, además como es una beta puede ser de eso.. por ahora no molestan

os pongo los warnings:
cc:/devkitPro/PAlib/include/nds/arm9/PA_Sound.h: In function 'void PA_PlayFSSoundEx(u8, u16, u8, int, s16)':
c:/devkitPro/PAlib/include/nds/arm9/PA_Sound.h:295: warning: dereferencing type-punned pointer will break strict-aliasing rules
c:/devkitPro/PAlib/include/nds/arm9/PA_Sound.h: In function 'void PA_PlayFSSoundEx2(u8, u16, u8, int, s16, BOOL, int)':
c:/devkitPro/PAlib/include/nds/arm9/PA_Sound.h:331: warning: dereferencing type-punned pointer will break strict-aliasing rules
c:/devkitPro/PAlib/include/nds/arm9/PA_Sound.h: In function 'void PA_PlayFSSound(u8, u16, u8, u32)':
c:/devkitPro/PAlib/include/nds/arm9/PA_Sound.h:440: warning: dereferencing type-punned pointer will break strict-aliasing rules
c:/devkitPro/PAlib/include/nds/arm9/PA_Sound.h: In function 'void PA_PlayFSSimpleSound(u8, u16)':
c:/devkitPro/PAlib/include/nds/arm9/PA_Sound.h:502: warning: dereferencing type-punned pointer will break strict-aliasing rules


Pues eso, muchas gracias otra vez a todos !!

ahms, si os interesa os pongo el error que me da el cppinstall
hola ya que este es un magnifico post de programacion y hay gente muy competente y ya que he fundido la bios del m3 perfect y no me sale el menu en la nd se puede programar a traves de un taj o de alguna manera gracias
Hum, este hilo está mas orientado a la programación de otro estilo pero a ver si pueden responderte ;)
Buenas, como compilo un archivo .c o .cpp en .nds, con que makefile?

No me hace caso ninguno. Ayuda plis, gracias.

EDITO:

Tengo el devkitPRO 1.3.4, las PAlib y todo lo ke hace falta. Pero me he bajado ejemplos y tal, o del mismo PAlibTemplates, y al darle al build.bat, me genera la carpeta BUILD, pero con pocas cosas dentro, un main.d y un main.o . Nada mas.

EDITO 2: Ya me funciona
hola, me estoy leyendo un manual de palib y hay algo que no entiendo, es sobre los sprites, lo que llaman, supongo que la traduccion es "paletas". a que se refiere con paletas? que es una paleta? y porque dicen que hay 16 paletas por pantalla?

gracias!
Una paleta es un conjunto de colores. Vamos que es como las paletas que utiliza un dibujante en la realidad. En la DS tienes una paleta de 256 colores para cada recurso. Por recurso me refiero a sprites y fondos y además por pantalla. Es decir, entre las 2 pantallas y entre sprites y fondos hay 4 paletas cada una de 256 colores. Ahora bien, tienes 2 formas de usarlas. Puedes tenerlas como 1 paleta de 256 colores o bien como 16 paletas de 16 colores (16x16=256). ¿Por qué hay paletas de colores? Porque normalmente se trabaja en 4 u 8 bits de color. Es decir, una imagen está guardada como índices a los colores de esas paletas, y según el número de bits del indice (con 4 bits puedes apuntar a 16 colores y con 8 bits a 256) pues además ocupa más o menos en memoria.

También están las paletas extendidas, pero eso para cuando domines lo otro.

PD: La traducción de sprite es...hada/duende. Es broma no tiene traducción (que yo sepa). Se usa para las imágenes que no son fondos (personajes, balas,etc)

Palette es paleta
Ola! He intentado hacer algo de programacion con la DS, pero es que no consigo enterarme de nada de nada >_< :(

Agradezco mucho toda la informacion proporcionada, pero hay muchos conceptos que se dan por sentados que no se, y además la mayoría de manuales estan en ingles, y no todo el mundo lo entiende a la perfeccion.

Dejano esto a parte, porque evidentemente, si todo estubiera en castellano ya estaría puesto, queria pedir si alguien me pudiera responer a un par preguntas, porque a lo mejor, no lo he visto todo.

- Que programa debo utilizar?

- Ai algu coñe de manual en español... xDDD?

Nota: el material necessario lo tengo (NDS, supercard, superpass, tarjeta SD y lector)

Lo que más me interesa por ahora es el programa. Me he bajado Devkit Pro, que esta en ingles, pero el manual en español, y me pierdo.

En fin, que pido mucho, pero de momento solo quiero información "superficial" para entrar en el tema. Como por ejemplo que lenguaje usa de programacion, etc.

Un saludo. Gracias!
Hola, querría preguntaros a todos a ver que coño pasa:


Resulta que la me he bajado la ROM del brain training de Ds, varias versiones. Tengo todos los emuladores, y no me funciona con ninguno, alguien sabe porke?
1º) No es el hilo adecuado para preguntarlo.
2º) Actualmente no se pueden emular casi ningun juego de la DS
3º) Esto está respondido muchas veces aquí

:)
Hola VisstarAlax, yo me acabo de iniciar en esto, te recomiendo usar palib, es lo más simple que he visto. Es C con las librerias palib que te permiten trabajar con la DS.

No sé si sabes programar o no, yo sé y lo encuentro bastante asequible, sino te recomiendo aprender antes a programar en c, encontraras cantidad de tutoriales y muy buenos por internet.
He estado mirando por todos los links y el problema es que algunos ya no funcionan. Particularmente he buscado manuales en castellano y en pdf, pero muchos de los enlaces a estos manuales ya han caducado.

En concreto el de Geardome me funciona, pero descarga un archivo corrupto (ya lo he bajado varias veces).

¿Alguien tiene dicho tutorial y puede enviarmelo? O alguno similar...
Hola a todos, tengo un juego (el hundir la flota, no os vayais a pensar) ya practicamente terminado, y quiero poder jugar con wifi.

He mirado las instrucciones en el pa_lib wiki tutorial y no se como hacerlo.
Tengo que crear un socket en cada consola y despues pasarme los datos de las ips de una consola a la otra y además una conexion a internet???
Es que no queda nada claro en el tuto la verda.
Por que por lo visto no tiene implementado conexion Ad-Hoc no?
hola yuseppe, no tengo ni idea porque nunca lo he probado pero si no ves que se pueda con palib mirate ndslib, son más "dificiles" pero si es solo para ese tema no creo que sea demasiado complicado.
hola me gustaria hacer programas para la ds.
pero no tengo ni idea de programacion. que podria hacer?
jeje es dificil? necesito estudiar al gun grado superior o algo? jejeje

gracias saludos
Hola!
Me alegra ver que hay tanta gente interesada en la programación en DS. Yo estudio informática y este cuatrimestre me toca hacer un proyecto de redes, y mi idea es hacer algo en DS sacando provecho del wifi (casi todo el mundo hace servidores o aplicaciones móvil-PC via Bluetooth). Así que antes de empezar estoy recopilando información y me he topado con este hilo, y me ha parecido tan interesante que me he registrado X-D. Estoy dudando en si usar las PaLib o las NDSLib. Por lo que he leído las PaLib son más sencillas de usar pero menos potentes, así que no sé qué hacer. Como hay mucha gente aquí que ya ha hecho alguna cosita me gustaría pedir consejo. Nuestra aplicación (es un proyecto en grupo) aún no está definida del todo pero la base es poder enviar/recibir información entre la DS y un servidor web. No sé si implementaremos un browser o nos las apañaremos con algo más cutre, lo que dé tiempo, pero básicamente es eso. Las PaLib son suficientemente potentes para hacer algo así? También me gustaría saber qué limitaciones tiene la consola en cuanto a persistencia de datos. Tengo la SC y SuperKey con una SD mini de 1GB pero no sé si es posible ejecutar una aplicación que reciba información externa y que la guarde en la SD. Espero que alguien pueda echarme una mano, si no supongo que me decantaré por las NDSLib... mejor que sobre que no que falte. Enhorabuena por este hilo, que no decaiga! Saludos.
Oye porque no hacen un post nuevo de programación en nds?? esque este ta muy... es decir ya tengo todo lo que pone ahora que??
Pues yo me quiero apuntar a programar en DS y me ha surgido un problemon...

En este post recomendais el PA_lib, y ya me he bajado los 3 ultimos intaladores salidos hasta la fecha, pero ninguno me funciona.
Nada más terminar de instalar, le doy a Finalizar y me sale un error:
VhamInit.exe - Error de la aplicación
La aplicación no se ha podido inicializar correctamente (0xc0000135). Haga clic en Aceptar para terminar la aplicación.


¿A alguien más le pasa? Es k ser novato y no poder usar el PA_lib... lo llevo claro [triston]
Se puede mezclar sin ningun problema ndslib y pa_lib. Hice un reversi hace tiempo para ds, los sprites y fondos los cargaba con la PA_Lib y las coordenadas del stylus y el estado del pad con las ndslib.
Gracias por el hilo, aunk mi nivel de ingles es un poco basico hare lo k pueda para programar algo mas k un hello world
KNT-Zero escribió:Pues yo me quiero apuntar a programar en DS y me ha surgido un problemon...

En este post recomendais el PA_lib, y ya me he bajado los 3 ultimos intaladores salidos hasta la fecha, pero ninguno me funciona.
Nada más terminar de instalar, le doy a Finalizar y me sale un error:

VhamInit.exe - Error de la aplicación
La aplicación no se ha podido inicializar correctamente (0xc0000135). Haga clic en Aceptar para terminar la aplicación.

¿A alguien más le pasa? Es k ser novato y no poder usar el PA_lib... lo llevo claro [triston]


Me pasó lo mismo, tienes que tener instalado el Framework 2.0
195 respuestas
1, 2, 3, 4