› Foros › Retro y descatalogado › Consolas clásicas
case #0 {
lda #$8
}
Diskover escribió:Ok, estuve mirando y lo de la animación de Mario incluso subirle o bajarle la velocidad . Los case... no lo pillo. Dependiendo hacia donde lo muevas te hace una cosa u otra, ok, pero por ejemplocase #0 {
lda #$8
}
1)Mmm le estamos diciendo que si empieza en el tile 0 avance hasta el 8, que esto se guarde en "a" y que el sprite se cargue a partir de ahí con los atributos que le dimos antes? ¿Esto es así?
2)Otra cosa ¿El sprite de Mario de donde coge la paleta de colores? Lo estoy abriendo con el NES Screen Tool y cargo el archivo PAL que viene y ninguna de las muestras corresponde con el de Mario.
3)De todas formas no me cuadra. He cambiado la pantalla de fondo por otra mía con una PAL diferente y el sprite de Mario parece como que tiene la suya propia, ¿pero de donde coje su paleta?
wave escribió:Jeje, ya veo, la verdad es que no esta nada mal, de cara al sprite de Link, si sus animaciones ocupan muchos tiles lo que hacen muchos (con MMC3) juegos es utilizar 1/4 parte de los sprites para el personaje principal y con el MMC3 hacer bankswitch de los tiles segun que animacion se esté mostrando.
Os interesaria que hiciera un resumen de los mappers que soporto en el framework, cuales son sus caracteristicas, que efectos se pueden lograr, etc?
Diskover escribió:wave escribió:Jeje, ya veo, la verdad es que no esta nada mal, de cara al sprite de Link, si sus animaciones ocupan muchos tiles lo que hacen muchos (con MMC3) juegos es utilizar 1/4 parte de los sprites para el personaje principal y con el MMC3 hacer bankswitch de los tiles segun que animacion se esté mostrando.
Os interesaria que hiciera un resumen de los mappers que soporto en el framework, cuales son sus caracteristicas, que efectos se pueden lograr, etc?
Estaría interesante, pero mas adelante, que con esto de los sprites me salen muchísimas dudas.
Por ejemplo, para ahorrar tiles, he usado la animación que tenias con Mario para Link, pero con la cosa de que el gorro de Link, en ambos lados es el mismo tile. De esta forma, en los "case" en vez de decirle que me muestre de #0 a #4 (en el caso de Link, eh) y luego de #4 a #0, le quiero decir que solo me muestre de #2 a #4 y de #4 a #2, que es la parte de la cara, manos y pies, sin tener que cambiar los dos primeros tiles del gorro. Pruebo, pero no doy con la solución para representar esto.
1)¿alguna idea?
2)Y otra cosa ¿puedo poner mas metaSprites? Es que no me queda clara una cosa, si metaSprite es una función en si misma o es el nombre que le has dado a ese metaSprite, por que se me estaban ocurriendo muchas cosas que hacer, jejeje
3)Y por último, cuando pones metaSprites[0].... ¿que es ese "0"?
putMetaSprite(#50, #50, #2, #4, #SPR_ATTR.PALETTE_0, #8)
//Numero de metasprites cargados
lda #sizeof(MetaSprite)*2
sta _vidLastMetaSprite
//Metasprite de Link
putMetaSprite(#150, #130, #2, #3, #SPR_ATTR.PALETTE_0, #0)
putMetaSprite1(#150, #130, #2, #1, #SPR_ATTR.PALETTE_0, #0)
putMetaSprite2(#150, #130, #2, #2, #SPR_ATTR.PALETTE_0, #2)
Diskover escribió:Mmm, ok, veras. Yo ahora mismo para representar a Link, lo tengo declarado así://Metasprite de Link
putMetaSprite(#150, #130, #2, #3, #SPR_ATTR.PALETTE_0, #0)
Que representa en esencia esto:
Y quiero hacer dos metaSprites que representen esto:
Entonces como lo haría ¿así?:putMetaSprite1(#150, #130, #2, #1, #SPR_ATTR.PALETTE_0, #0)
putMetaSprite2(#150, #130, #2, #2, #SPR_ATTR.PALETTE_0, #2)
putMetaSprite(#150, #130, #2, #1, #SPR_ATTR.PALETTE_0, #0)
putMetaSprite(#150, #138, #2, #2, #SPR_ATTR.PALETTE_0, #2)
//Numero de metasprites cargados
lda #sizeof(MetaSprite)*2
sta _vidLastMetaSprite
//Animacion andando de link
lda frames
cmp #20
if(greater) {
lda metaSprites[1].firstTile
switch(reg.a) {
case #2 {
lda #$6
}
case #$6 {
lda #$9
}
case #9 {
lda #2
}
}
sta metaSprites[1].firstTile
lda #0
sta frames
}
case #$6 {
lda #$9
lda #2
}
Diskover escribió:Venga, que estoy en el ajo... ¿como puedo cargar en este mismo código otra paleta para otro metaSprite diferente respetando la paleta de Link?
//Cargamos la paleta de mario
nes_loadMemsrc(nombrePaleta)
lda #Paleta del 4 al 7 (la del 4 la usa link ahora mismo)
vid_loadPalette_a()
putMetaSprite(#50, #50, #2, #4, #SPR_ATTR.PALETTE_1, #8)
//Numero de metasprites cargados
lda #sizeof(MetaSprite)*3
sta _vidLastMetaSprite
putMetaSprite(#150, #130, #2, #3, #SPR_ATTR.PALETTE_1, #10)
putMetaSprite(#150, #130, #2, #2, #SPR_ATTR.PALETTE_1, #10)
wave escribió:En tu tercer metasprite has puesto:putMetaSprite(#150, #130, #2, #3, #SPR_ATTR.PALETTE_1, #10)
y deberia ser (creo asi a ojo)putMetaSprite(#150, #130, #2, #2, #SPR_ATTR.PALETTE_1, #10)
Diskover escribió:wave escribió:En tu tercer metasprite has puesto:putMetaSprite(#150, #130, #2, #3, #SPR_ATTR.PALETTE_1, #10)
y deberia ser (creo asi a ojo)putMetaSprite(#150, #130, #2, #2, #SPR_ATTR.PALETTE_1, #10)
Jajaja, si, si, me acababa de dar cuenta. Puse al principio un 2x3 con la idea de añadir detalle al cinturón y las botas, pero desistí y luego se me olvido cambiarlo
Sigo peleandome con el tema este. Se me muestran los metaSprites de Link mirando de frente y de lado (los acabo de hacer estos). La cosa es que quiero que cuando vaya hacia arriba o abajo me dibuje solo los de frente y cuando vaya de izquierda a derecha solo los de lado ¿Debo meter los bucles dentro del control de mando?
lda metaSprites[2].attributes
AND #SPR_ATTR.V_FLIP
sta metaSprites[2].attributes
inc metaSprites[2].y
//si pulsamos la derecha
ldand(pads[CONTROLLER.PLAYER1].pressed, #BUTTON.DOWN)
if(true) {
ldx #0
sta linkDir
inc yLink
}
ldand(pads[CONTROLLER.PLAYER1].pressed, #BUTTON.UP)
if(true) {
ldx #1
sta linkDir
dec yLink
}
...
//Y al final de todo antes del draw metasprites
lda linkDir
switch(reg.a) {
case #0 {
//cargar los metasprites de link mirando abajo
lda yLink
sta yLinkTmp
lda xLink
sta xLinkTmp
putMetaSprite(xLinkTmp , yLinkTmp, #2, #1, #SPR_ATTR.PALETTE_0, #0)
//Si hay mas tenemos que sumar a xLinkTmp o yLinkTmp la diferencia entre uno u otro
lda yLinkTmp
clc
adc #8
putMetaSprite(xLinkTmp , yLinkTmp, #2, #1, #SPR_ATTR.PALETTE_0, #0)
}
...
//mas cases
}
vid_waitFadeToNormal_a()
-------------------------- de aquí para arriba, todo igual.
//Coordenadas iniciales. Las damos un valor.
lda #150
sta linkDir_x1
lda #130
sta linkDir_y1
lda #150
sta linkDir_x2
lda #138
sta linkDir_y2
//Bucle principal, se ejecutara siempre
forever {
//Metasprite de Link
putMetaSprite(linkDir_x1, linkDir_y1, #2, #1, #SPR_ATTR.PALETTE_0, #0) //0
putMetaSprite(linkDir_x2, linkDir_y2, #2, #2, #SPR_ATTR.PALETTE_0, #2) //1
putMetaSprite(linkDir_x1, linkDir_y1, #2, #2, #SPR_ATTR.PALETTE_1, #10) //2
doFrame()
}
}
inline doFrame() {
//Leemos el joypad 1
inp_update(#PORT_1)
ldand( pads[CONTROLLER.PLAYER1].mantained, #BUTTON.DOWN)
if(true) {
lda frames
cmp #12
if(greater) {
lda metaSprites[1].firstTile
switch(reg.a) {
case #2 {
lda #$6
}
case #$6 {
lda #$9
lda #2
}
}
sta metaSprites[1].firstTile
lda #0
sta frames
}
inc metaSprites[0].y //Incrementamos el valor de metaSprite 0 en y
lda metaSprites[0].y //Cargamos ese valor en a
sta linkDir_y1 //Introducimos el valor de a en la coordenada y1
inc metaSprites[1].y //Incrementamos el valor de metaSprite 1 en y
lda metaSprites[1].y //Cargamos ese valor en a
sta linkDir_y2
inc metaSprites[2].y //Incrementamos el valor de metaSprite 2 en y
lda metaSprites[2].y //Cargamos ese valor en a
sta linkDir_y1 //Introducimos el valor de a en la coordenada y1
}
ldand(pads[CONTROLLER.PLAYER1].mantained, #BUTTON.UP)
if(true) {
lda frames
cmp #12
if(greater) {
lda metaSprites[1].firstTile
switch(reg.a) {
case #2 {
lda #$6
}
case #$6 {
lda #$9
lda #2
}
}
sta metaSprites[1].firstTile
lda #0
sta frames
}
dec metaSprites[0].y //Decrecentamos el valor de metaSprite 0 en y
lda metaSprites[0].y //Cargamos ese valor en a
sta linkDir_y1 //Introducimos el valor de a en la coordenada y1
dec metaSprites[1].y //Decrecentamos el valor de metaSprite 1 en y
lda metaSprites[1].y //Cargamos ese valor en a
sta linkDir_y2
dec metaSprites[2].y //Decrecentamos el valor de metaSprite 2 en y
lda metaSprites[2].y //Cargamos ese valor en a
sta linkDir_y1 //Introducimos el valor de a en la coordenada y1
}
ldand(pads[CONTROLLER.PLAYER1].mantained, #BUTTON.LEFT)
if(true) {
lda frames
cmp #12
if(greater) {
lda metaSprites[1].firstTile
switch(reg.a) {
case #2 {
lda #$6
}
case #$6 {
lda #$9
lda #2
}
}
sta metaSprites[1].firstTile
lda #0
sta frames
}
dec metaSprites[0].x //Decrecentamos el valor de metaSprite 0 en x
lda metaSprites[0].x //Cargamos ese valor en a
sta linkDir_x1 //Introducimos el valor de a en la coordenada x1
dec metaSprites[1].x //Decrecentamos el valor de metaSprite 1 en x
lda metaSprites[1].x //Cargamos ese valor en a
sta linkDir_x2
dec metaSprites[2].x //Decrecentamos el valor de metaSprite 2 en x
lda metaSprites[2].x //Cargamos ese valor en a
sta linkDir_x1 //Introducimos el valor de a en la coordenada x1
}
ldand(pads[CONTROLLER.PLAYER1].mantained, #BUTTON.RIGHT)
if(true) {
lda frames
cmp #12
if(greater) {
lda metaSprites[1].firstTile
switch(reg.a) {
case #2 {
lda #$6
}
case #$6 {
lda #$9
lda #2
}
}
sta metaSprites[1].firstTile
lda #0
sta frames
}
inc metaSprites[0].x //Incrementamos el valor de metaSprite 0 en x
lda metaSprites[0].x //Cargamos ese valor en a
sta linkDir_x1 //Introducimos el valor de a en la coordenada x1
inc metaSprites[1].x //Incrementamos el valor de metaSprite 1 en x
lda metaSprites[1].x //Cargamos ese valor en a
sta linkDir_x2
inc metaSprites[2].x //Incrementamos el valor de metaSprite 2 en x
lda metaSprites[2].x //Cargamos ese valor en a
sta linkDir_x1 //Introducimos el valor de a en la coordenada x1
}
----------------------- a partir de aquí para abajo, todo igual
inc frames
d:\Users\Diskover\Desktop\nesframework\projects\zeldaSprites>..\..\bin\neshla ".
\src\project.as" -o ".\out" -listvars -listfuncs -listbanks -listsrc
Nintendo NES High Level Assembler
Version 1.0.0, April 12th, 2005
By Brian Provinciano :: http://www.bripro.com
Compiling file: .\src\project.as ...
[Error]: Within "doFrame": (118),
main.as (106: 3): Branch out of range!The time was: 0.093000
[Fatal Error]: Compile: FAILED!
d:\Users\Diskover\Desktop\nesframework\projects\zeldaSprites>pause
Presione una tecla para continuar . . .
Diskover escribió:Ok, ya he conseguido hacer que cuando Link vaya a la derecha o a la izquierda, cambie el metasprite, etc...
Resulta que he ahora estoy animando el andar a la derecha e izquierda y llega un momento que sin venir a cuento, el compilador casca en cuanto meto el ultimo case de una de las animaciones. Error de fuera de rango o algo así. Si meto un case mas, casca.
¿Puede ser que me haya pasado del límite de calculo o algo así? Por que la verdad que es bastante complejo, son 3 frames diferentes, y cada uno esta compuesto de 2 metasprites para el tema de los colores
P.D.: Tengo la cabeza que me echa humo entre lo de ayer y hoy, jajaja