Banner
Views: 828,926,089
Time:
6 users online: Arceus, Infinity, OEO6, qantuum, SquidBoy20, TheBiob - Guests: 49 - Bots: 81 Users: 44,416 (2,523 active)
Latest: Flowtendo
Tip: Unique level names aren't necessary, but they're a plus.Not logged in.
Ayuda con rutina de gráficos.
Forum Index - SMW Hacking - International SMW Hacking - Español - Ayuda con rutina de gráficos.
Pages: « 1 »
Hola buenos días. Tengo una duda... quiero saber como hago para hacer que un sprite cambie de frame en un momento determinado ( ya sea que dispare hurt etc) . Por ejemplo el bowser de Mario 1. (bowser.asm) abre la boca cuando escupe fuego otro ejemplo es la goomba clásica (classicgoomba.asm) cambia de sprite cuando la aplastas... Se que se hacen con tablas pero no se como... agradecería mucho su ayuda.

PD: si existe algún tutorial en inglés acerca de esto dejen el lnik. Medio entiendo el inglés :D
Estas en lo correcto. Ocupas una tabla libre de sprites para cambiar de frame. Usualmente yo uso la tabla $1602 para esto.

Cambiar de frame dependiendo del estado de esa RAM es muy sencillo, sólo ocupas guardarle un dato a eso dentro de la rutina principal del sprite y de ahi darle un uso desde la rutina gráfica.

Un uso para un sprite de 16x16 sería el siguiente:

Code
rutina_grafica:
	jsr getdrawinfo
	
	lda $00
	sta $0300,y
	
	lda $01
	sta $0301,y
	
	phx
	lda $1602,x
	tax
	lda frames,x
	sta $0302,y
	plx
	
	lda $15F6,x
	ora $64
	sta $0303,y
	
	lda #$00
	ldy #$02
	jsl $01B7B3
	
	rts 

frames:
	db $00,$02,$04


Se ve como una rutina gráfica muy común, ¿no? En verdad lo es. Lo único diferente es la parte de la escritura a $0302.

¿Cómo funciona esa escritura? Es bastante sencillo (asumiendo que sabes como funcionan los índices Y y X), $1602,x contiene un valor cualesquiera que le hayamos guardado durante la rutina principal del sprite, usaremos dicho valor como índice para la tabla llamada frames que se encuentra al final del código que puse. Por ejemplo, si $1602,x tiene el valor de $01 guardado, nuestro índice para frames será $01, haciendo que cuando se lea la tabla frames se cargue en el registro A el valor de $02 (ya que leerá el segundo dato de dicha tabla).

Ahora vamos a un ejemplo un poquito más complicado, un sprite de 16x32:

Code
	lda $1602,x
	asl 
	sta $02

	lda $15F6,x
	ora $64
	sta $03
	
	jsr getdrawinfo
	
	phx
	ldx #$01
loop:	
	lda $00
	sta $0300,y
	
	lda $01
	clc
	adc y_desp,x
	sta $0301,y
	
	phx
	ldx $02
	lda frames,x
	sta $0302,y
	plx
	
	lda $03
	sta $0303,y
	
	iny
	iny
	iny
	iny
	
	dex
	bpl loop
	plx
	
	lda #$01
	ldy #$02
	jsl $01B7B3
	
	rts

y_desp:
	db $00,$10
frames:
	db $00,$02	;frame 1
	db $04,$06	;frame 2
	db $08,$0A	;frame 3


Cambió bastante, ¿no?

Estamos guardando el doble del contenido de $1602,x en una scratch RAM, ¿por qué el doble? Porque la tabla de frames ahora ocupa dos bytes por cada frame, ya que sólo puedes dibujar en tilas de 16x16 (o de 8x8).

Ejemplo:
$1602,x tiene el valor de $01, si lo multiplicamos por 2, será $02. $02 es nuestro índice de la tabla frames, eso quiere decir que no serán leídos los dos primeros valores de dicha tabla ($00,$02) y serán leídos el tercer y cuarto valor ($04,$06) de la tabla, que son los que se deben de leer para que el sprite muestre correctamente el segundo frame.

Lo mismo pasa con el tercer frame. Para mostrar el tercer frame es necesario que $1602,x sea $02, multiplicado por 2 sería $04 y en la tabla se leerían los valores correspondientes al tercer frame ($08,$0A).

Para otros tamaños de sprites, se usaría algo muy parecido a lo de 16x32 que puse aquí. Sólo depende de que sea una rutina bastante estandar, hay varias que son complejas debido a los requerimientos de los sprites.

El tutorial de Iceguy/Nesquik Bunny de programación de sprites es bastante decente (de ahí aprendí las bases para hacer sprites), es algo viejo por usar TRASM (no lo uses), pero explica muy bien unas cosas.
Hmmm se ve algo complejo. Intentare a ver como me va (estoy tratando de hacer un Reznor qué dispare fuego. Similares a los de súper Mario LD.)

Si tengo alguna duda volveré por aca .

PD: Gracias LX5 me has ayudado bastante en mi corta estadía en smwc #tb{^V^}
Me fue mal :(

El sprite no hace ninguna animación solo mueve congelado (estoy usando de base a lesson2b.asm) que estoy haciendo mal? Y no entiendo mucho el lado de guardarle un dato en la rutina principal...
Pon tu código.

Y con la rutina principal me refiero al codigo que no va en la rutina grafica.
Tranquilo amigo no es necesario poco a poco voy entendiendo como funciona eso. Estem.

tengo otra pregunta.

Revise el tutorial de iceguy y me descargue la plantilla del sprite 32x32 animado (el que usan para hacer el boss) y me di cuenta que el cfg editor no le cambia los colores. que debo hacer para que le cambie los colores le agradecería su ayuda gracias.
Cambia todo este código, con este otro código.

Y sorry por no contestar, estuve ausente esta semana.
Gracias amigo me funciono agradezco tu ayuda. Emm te molestaria si te hago esta clase de preguntas por pm. es que veo que eres el ÚNICO de la comunidad latina en smwc que se interesa en ayudarme... eso es triste :(

Gracias por tu ayuda.
Es que sólo hay dos personas que se especializan en ASM de la comunidad hispanohablante, el resto hace niveles, música o gráficos, pero su conocimiento de ASM es límitado o nulo.

Y pues yo sugeriría seguir poniendo acá tus dudas en caso de que yo no pueda contestar por X o Y razón.
:( Tienes razon, los unicos que he notado que saben de asm en smwc (que son latinos o hablan espanol) son tu (lx5) y un chileno llamado anoninmz o doppleganger que esta haciendo un super hack llamado smw random revolution y un tal magus y proximamente yo xD.

En la parte ingles de la pagina. Casi TODOS saben de asm yo no tendria problemas en hacer mis preguntas en el asm related topics lo malo es que no escribo bien el ingles (lo entiendo pero no se escribirlo bien)
Y no puedo usar google traductor por que consume muchos datos. Y bueno gracias de nuevo.

PD: eres programador verdad?
Nah. Solo se ASM por hobby, todos los demas lenguajes de programacion no los he aprendido (y tampoco los ando aprendiendo).
Descuida. te hice esta pregunta porque varios que saben de asm aquí son programadores (ersanio alcaro anonimx) yo no se mucho de programar (batch y pascal cuentan?)

y ahora Quiero que me respondas esta pregunta

he notado que los eruditos de Asm de aquí hablan mucho de munchers

que tienen ellas de especial? ellas son solo bloques? verdad??.
Este es un muncher

La gente los ama, porque flotan y muerden :)

🦊 Hi. 🦊
Pages: « 1 »
Forum Index - SMW Hacking - International SMW Hacking - Español - Ayuda con rutina de gráficos.

The purpose of this site is not to distribute copyrighted material, but to honor one of our favourite games.

Copyright © 2005 - 2020 - SMW Central
Legal Information - Privacy Policy - Link To Us


Total queries: 14

Menu

Follow Us On

  • YouTube
  • Twitch
  • Twitter

Affiliates

  • Super Mario Bros. X Community
  • ROMhacking.net
  • Mario Fan Games Galaxy