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
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 » Jue, 24 Nov 2011, 11:24

error
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 » Jue, 24 Nov 2011, 11:30

Mete todo el codigo de dentro del if en una funcion

Código: Seleccionar todo

function nombre() {
//bla bla bla cosas de dentro de un if
}

Y llamala desde donde toque:

Código: Seleccionar todo

   ldand(pads[CONTROLLER.PLAYER1].mantained, #BUTTON.LEFT)
   if(true) {
          nombre()
   }

La funcion la puedes crear arriba, despues de la definicion de las paletas por ejemplo.

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 » Jue, 24 Nov 2011, 11:36

Eso lo he hecho. He creado una función llamada Mario() para no repetir todo el rato lo mismo dos veces, pero sigue dando problema.

¿adc y sdc no pueden guardar el valor de una variable, solo números?

De todas formas, el código que me has pasado para aumentar la velocidad, funciona probandolo en otro archivo que tenia con menos historias, pero yo quiero que lo haga cuando pulso B no todo el rato :-(
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 » Jue, 24 Nov 2011, 11:42

Diskover escribió:Eso lo he hecho. He creado una función llamada Mario() para no repetir todo el rato lo mismo dos veces, pero sigue dando problema.

¿adc y sdc no pueden guardar el valor de una variable, solo números?

adc y sbc son sumar y restar, el resultado queda en A, si luego quieres guardarlo, has de hacer sta dondesea.
adc y sbc pueden restar a A el valor de una variable, por ejemplo:
lda #5
sta variable


lda #3
clc
adc variable
sta suma


La variable suma ahora vale 8.

Si no tienes conceptos de programacion quiza deberias primero mirarte otros tutoriales, para saber que hace cada instruccion del 6502: http://www.obelisk.demon.co.uk/6502/reference.html

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 » Jue, 24 Nov 2011, 11:44

Ok, perdona, que me estaba haciendo un lio y ya está solucionado :-)

Lo de Mario() use inline en vez de function, por eso me seguía sin ir. Ahora ya está solucionado.
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 » Jue, 24 Nov 2011, 11:47

Diskover escribió:Ok, perdona, que me estaba haciendo un lio y ya está solucionado :-)

Lo de Mario() use inline en vez de function, por eso me seguía sin ir. Ahora ya está solucionado.

inline es lo que se llama una "Macro" lo unico que hace es ahorrarte escribir el codigo varias veces porque al compilar copia y pega el trozo :mrgreen:
Function sin embargo hace que en tiempo de ejecucion se salte a la subritina y luego se vuelva.

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 » Jue, 24 Nov 2011, 12:26

Bueno, te enseño el código que he hecho. Me ha extrañado que queriendo aprovechar la variable velocidad tanto para la animación como para la posición, en posición se comportaba al reves: Cuando andaba normal iba acelerado y si pulsaba B andaba normal. No así con la animación, que funcionaba correctamente :-(

Así que he tenido que hacer dos variables de velocidad diferentes: vel_pos y vel_anima y a cada uno darle lo suyo ¿?

Y otra cosa: Cuando voy hacia la izquierda... ¿me lo parece a mi o anda mas deprisa que hacia la derecha?

Subo la ROM nueva para que compruebes:
http://www.megaupload.com/?d=YDN73CEA

Código: Seleccionar todo

inline doFrame() {
   //Ponemos la velocidad de posicion a un valor
   lda #2
   sta vel_pos
   lda #8
   sta vel_anima
   
   //Leemos el joypad 1
   inp_update(#PORT_1)
      

   ldand(pads[CONTROLLER.PLAYER1].mantained, #BUTTON.B)
   if(true){
      lda #2
      sta vel_anima
      lda #4
      sta vel_pos
   }
   
   ldand(pads[CONTROLLER.PLAYER1].released, #BUTTON.B)
   if(true){
      lda #8
      sta vel_anima
      lda #2
      sta vel_pos
   }

   ldand(pads[CONTROLLER.PLAYER1].mantained, #BUTTON.RIGHT)
   if(true) {

      inc frames
   
      Mario()

      lda #SPR_ATTR.H_FLIP ^ 0xFF
      and metaSprites[0].attributes
      sta metaSprites[0].attributes
      lda metaSprites[0].x
      clc
      adc vel_pos
      sta metaSprites[0].x
      
      lda #SPR_ATTR.H_FLIP ^ 0xFF
      and metaSprites[1].attributes
      sta metaSprites[1].attributes
      lda metaSprites[1].x
      clc
      adc vel_pos
      sta metaSprites[1].x   
   }

   ldand(pads[CONTROLLER.PLAYER1].mantained, #BUTTON.LEFT)
   if(true) {

      inc frames
   
      Mario()

      lda metaSprites[0].attributes
      ora #SPR_ATTR.H_FLIP
      sta metaSprites[0].attributes
      lda metaSprites[0].x
      clc
      sbc vel_pos
      sta metaSprites[0].x
      
      lda metaSprites[1].attributes
      ora #SPR_ATTR.H_FLIP
      sta metaSprites[1].attributes
      lda metaSprites[1].x
      clc
      sbc vel_pos
      sta metaSprites[1].x      
   }

   ldand(pads[CONTROLLER.PLAYER1].released, #BUTTON.RIGHT)
   if(true) {
      lda #0
      sta metaSprites[0].firstTile
      lda #8
      sta metaSprites[1].firstTile
   }

   ldand(pads[CONTROLLER.PLAYER1].released, #BUTTON.LEFT)
   if(true) {
      lda #0
      sta metaSprites[0].firstTile
      lda #8
      sta metaSprites[1].firstTile
   }
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 » Jue, 24 Nov 2011, 12:33

Diskover escribió:Bueno, te enseño el código que he hecho. Me ha extrañado que queriendo aprovechar la variable velocidad tanto para la animación como para la posición, en posición se comportaba al reves: Cuando andaba normal iba acelerado y si pulsaba B andaba normal. No así con la animación, que funcionaba correctamente :-(

Así que he tenido que hacer dos variables de velocidad diferentes: vel_pos y vel_anima y a cada uno darle lo suyo ¿?

Y otra cosa: Cuando voy hacia la izquierda... ¿me lo parece a mi o anda mas deprisa que hacia la derecha?

Subo la ROM nueva para que compruebes:
http://www.megaupload.com/?d=YDN73CEA

Es normal porque la de animacion significa: cuantos frames quedan para animarme?
Si pones 8, tarda mas tiempo, con 2, menos tiempo. Sin embargo para la velocidad es al reves, 2 pixels es mas lento, 8 pixels es mas rapido.

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 » Jue, 24 Nov 2011, 12:46

¿Y lo de que cuando vas hacia la izquierda va mas rápido?
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 » Jue, 24 Nov 2011, 12:50

Diskover escribió:¿Y lo de que cuando vas hacia la izquierda va mas rápido?

Ahora estoy en el trabajo y no lo puedo mirar.

Responder