Tutorial de programacion para NES - Básico

Foro sobre la N.E.S. Aqui esta el verdadero mejunje donde podreis conversar.

Responder
Avatar de Usuario
sewave
Nintender@
Mensajes: 100
Registrado: Dom, 15 May 2005, 22:28
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por sewave » Sab, 26 Nov 2011, 22:05

Diskover escribió:Como supongo que has ido actualizándolo y hace mucho que no cuelgas algún ejemplo nuevo (que de ahí sacaba las actualizaciones de tu framework :-) ) si, estará desactualizado.

¿Tienes algo nuevo entre manos?

Bueno, al menos he conseguido hacer esto. Dos pantallas que cambian cada segundo en un bucle infinito :-)

ROM: http://www.megaupload.com/?d=GL2UZS48

Parece que la funcion la tenia en el ejemplo de las pantallas del Megaman 2, tendre que meterla en el framework porque iria bien xD
Ahora mismo yo estoy entre la herramienta java para no tener que definir los metasprites a mano y como cargarlos en la nes desde el codigo que salga de la herramienta, ademas de poder tener objetos con velocidad, aceleracion, gravedad, colisiones... vamos todo lo referente a los objetos del juego.
Pero voy muy poco a poco, tengo muy poco tiempo entresemana y el finde, en cuanto termine la herramienta la colgaré, aunque solo sea para que se vaya acostumbrando a su uso porque luego sera lo mejor del mundo a la hora de poner objetos en el juego xD

Avatar de Usuario
Diskover
##El Jefe##
Mensajes: 488
Registrado: Lun, 27 Oct 2003, 20:59
Ubicación: Planeta Tierra
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por Diskover » Dom, 27 Nov 2011, 12:50

sewave escribió:
Diskover escribió:Como supongo que has ido actualizándolo y hace mucho que no cuelgas algún ejemplo nuevo (que de ahí sacaba las actualizaciones de tu framework :-) ) si, estará desactualizado.

¿Tienes algo nuevo entre manos?

Bueno, al menos he conseguido hacer esto. Dos pantallas que cambian cada segundo en un bucle infinito :-)

ROM: http://www.megaupload.com/?d=GL2UZS48

Parece que la funcion la tenia en el ejemplo de las pantallas del Megaman 2, tendre que meterla en el framework porque iria bien xD
Ahora mismo yo estoy entre la herramienta java para no tener que definir los metasprites a mano y como cargarlos en la nes desde el codigo que salga de la herramienta, ademas de poder tener objetos con velocidad, aceleracion, gravedad, colisiones... vamos todo lo referente a los objetos del juego.
Pero voy muy poco a poco, tengo muy poco tiempo entresemana y el finde, en cuanto termine la herramienta la colgaré, aunque solo sea para que se vaya acostumbrando a su uso porque luego sera lo mejor del mundo a la hora de poner objetos en el juego xD


Jeje, pues a la espera estaré y de mientras seguiré haciendo cosas y probando :-)

Lo cierto es que los tiles de los sprites me les estoy haciendo a mano en el NES Screen Tool por que por ahora me resulta muy cómodo aunque no es lo mejor del mundo y lo de cargar BMPs desistí por que me transforma los colores e incluso me borra pixels :-(

Si tienes o sabes de otra herramienta mejor...
No dejes de visitar www.RetroNES.net la mejor pagina sobre la NES 8 bits de Nintendo, ¡Y en español!

Avatar de Usuario
sewave
Nintender@
Mensajes: 100
Registrado: Dom, 15 May 2005, 22:28
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por sewave » Dom, 27 Nov 2011, 13:12

Hay gente que utiliza este:
http://www.romhacking.net/utilities/119/
Pero como nunca me he puesto en serio no sabria que decirte.

Avatar de Usuario
Diskover
##El Jefe##
Mensajes: 488
Registrado: Lun, 27 Oct 2003, 20:59
Ubicación: Planeta Tierra
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por Diskover » Dom, 27 Nov 2011, 17:54

Una cosa nueva.

- Estoy probando con un metasprite sencillo de 1x1 al que le he dado movimiento. Le llamo "mira" y todo el es una funcion que incluye su control y dos variables x e y.
- Por otra parte tengo dos pantallas. Las he metido en una función llamada "pantallas".
- He creado una variable llamada "situacion". Cuando situacion esta a 1, se carga la pantalla 1, y cuando esta a 2, se carga la pantalla 2. Bien.

Mi idea que quiero llevar a cabo pero no me sale:
- Quiero que cuando "mira" llegue al borde de la pantalla derecha, cargue la pantalla 1 y cuando llega al borde de la izquierda, que cargue la pantalla 2. Y no me sale. No se como explicárselo.

¿una ayudita? :-)
No dejes de visitar www.RetroNES.net la mejor pagina sobre la NES 8 bits de Nintendo, ¡Y en español!

Avatar de Usuario
sewave
Nintender@
Mensajes: 100
Registrado: Dom, 15 May 2005, 22:28
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por sewave » Dom, 27 Nov 2011, 18:59

Tendrias que comparar la posicion X de la mira con algo cercano al borde de la pantalla, por ejemplo el derecho:

Código: Seleccionar todo

lda xMirilla
cmp #240
if(greater) {
//si no estamos en la pantalla 2, cargar la pantalla 2
}

Avatar de Usuario
Diskover
##El Jefe##
Mensajes: 488
Registrado: Lun, 27 Oct 2003, 20:59
Ubicación: Planeta Tierra
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por Diskover » Dom, 27 Nov 2011, 19:23

Ok, funciona perfectamente.

;-)

Antes probé así, pero lo puse en el sitio equivocado y no se leía bien.
No dejes de visitar www.RetroNES.net la mejor pagina sobre la NES 8 bits de Nintendo, ¡Y en español!

Avatar de Usuario
Diskover
##El Jefe##
Mensajes: 488
Registrado: Lun, 27 Oct 2003, 20:59
Ubicación: Planeta Tierra
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por Diskover » Dom, 27 Nov 2011, 19:44

EDITO: No, no funciona como debería :-(

Si bien cuando llego al borde si consigo que cambie de pantalla, realmente tambien me lo hace a mitad de la misma, al borde de abajo y un poco arriba de donde parte inicialmente. Te ilustro con una imagen.

Imagen

Esa cosa verde, es la mira que muevo en las cuatro direcciones.

Lo rojo es donde choca para cambiar a la siguiente pantalla.

Y te enseño el código ;-)

Código: Seleccionar todo

todo igual hasta aquí:

   lda #160
   sta mira_x

   lda #125
   sta mira_y

   lda #0
   sta situacion

   //Metasprite de Link
   putMetaSprite(mira_x, mira_y, #1, #1, #SPR_ATTR.PALETTE_0, #0) //0 Sprite de Mira

   //Bucle principal, se ejecutara siempre
   forever {
      doFrame()      
   }
}

function mira(){

   ldand( pads[CONTROLLER.PLAYER1].mantained, #BUTTON.UP)   
   if(true) {
      dec metaSprites[0].y //Incrementamos el valor de metaSprite 0 en y
      lda metaSprites[0].y //Cargamos ese valor en a
      sta mira_y   //Introducimos el valor de a en la coordenada y   
   }
   ldand( pads[CONTROLLER.PLAYER1].mantained, #BUTTON.DOWN)   
   if(true) {
      inc metaSprites[0].y //Incrementamos el valor de metaSprite 0 en y
      lda metaSprites[0].y //Cargamos ese valor en a
      sta mira_y   //Introducimos el valor de a en la coordenada y   
   }
   ldand( pads[CONTROLLER.PLAYER1].mantained, #BUTTON.LEFT)   
   if(true) {
      dec metaSprites[0].x //Incrementamos el valor de metaSprite 0 en y
      lda metaSprites[0].x //Cargamos ese valor en a
      sta mira_y   //Introducimos el valor de a en la coordenada y   
   }
   ldand( pads[CONTROLLER.PLAYER1].mantained, #BUTTON.RIGHT)   
   if(true) {
      inc metaSprites[0].x //Incrementamos el valor de metaSprite 0 en y
      lda metaSprites[0].x //Cargamos ese valor en a
      sta mira_y   //Introducimos el valor de a en la coordenada y   
   }
}

function pantallas(){

   lda situacion
   cmp #1
   if(greater) {
      //Cargamos la paleta titlepal2
      lda #PALETTES.ALL   
      lda #5
      vid_waitFadeToBlack_a()   
      vid_stop();
        nes_loadMemsrc(titlepal2)
      vid_loadBackGrndPalette()
      vid_copyNametable0Vram(titledata2)
        vid_start();
      lda #5
      vid_waitFadeToNormal_a()
   }   
   
   lda situacion
   cmp #2
   if(greater) {
      //Cargamos la paleta titlepal
      lda #PALETTES.ALL
      sta _brightnessApply
      lda #5
      vid_waitFadeToBlack_a()
      vid_stop();
        nes_loadMemsrc(titlepal)
      vid_loadBackGrndPalette()
      vid_copyNametable0Vram(titledata)
        vid_start();
      lda #5
      vid_waitFadeToNormal_a()
   }
}

inline doFrame() {
   //Leemos el joypad 1
   inp_update(#PORT_1)

   mira()

   lda mira_y
   cmp #240   
   if(greater) {
      lda #1
      sta situacion
      pantallas ()
   }

todo igual el resto.
No dejes de visitar www.RetroNES.net la mejor pagina sobre la NES 8 bits de Nintendo, ¡Y en español!

Avatar de Usuario
sewave
Nintender@
Mensajes: 100
Registrado: Dom, 15 May 2005, 22:28
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por sewave » Dom, 27 Nov 2011, 20:03

En la funcion pantallas deberias poner equals en vez de greater, para que solo suceda si son iguales:

Código: Seleccionar todo

 lda situacion
   cmp #1
   if(equals) {

Tambien deberias reiniciar la posicion de la mira una vez cambias de pantalla, pero en el codigo que has puesto no veo nada que interfiera con el cambio de pantalla.

Avatar de Usuario
Diskover
##El Jefe##
Mensajes: 488
Registrado: Lun, 27 Oct 2003, 20:59
Ubicación: Planeta Tierra
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por Diskover » Dom, 27 Nov 2011, 20:12

No me reconoce equals.

Mmm, es extraño y juro que estoy usando el framework que venia con lo de las pantallas de Megaman :-(

¿Me puedes pasar el framework mas actual que tengas?
No dejes de visitar www.RetroNES.net la mejor pagina sobre la NES 8 bits de Nintendo, ¡Y en español!

Avatar de Usuario
sewave
Nintender@
Mensajes: 100
Registrado: Dom, 15 May 2005, 22:28
Contactar:

Re: Tutorial de programacion para NES - Básico

Mensaje por sewave » Dom, 27 Nov 2011, 20:19

Fallo mio, es "equal" sin la s al final :p

Responder