Fortaleza Reznor
¡Bienvenido a Fortaleza Reznor!
¿Que es Fortaleza Reznor?
Fortaleza Reznor es un foro de SMWH (Super Mario World Hacking) Aquí modificamos (hackeamos) el juego de Mario World a nuestro gusto y enseñamos a otros a saber a manejar el hacking de SMW usando la famosa herramienta "Lunar Magic".

¡Regístrate!
Únete a nuestra comunidad!, te ayudaremos en cada duda que tengas respecto al SMWH. Aparte podrás participar en eventos que hay en el foro y descargar los recursos que crean nuestros usuarios.

¡ANÍMATE! ¡Te divertirás en nuestro foro!

Atte:
La administracion.


¡Super Mario World Hacking en español! ¡Ayuda, tips, diversión y más!
 
ÍndiceMiembrosRegistrarseConectarseCalendarioFAQBuscar

Comparte | .
 

 Tutorial de HDMA

Ver el tema anterior Ver el tema siguiente Ir abajo 
AutorMensaje
Invitado
Invitado
avatar


MensajeTema: Tutorial de HDMA   Sáb Oct 09, 2010 12:12 am

Bien, hace poco aprendi a hacer HDMA. Este tutorial lo escribio originalmente Kaijyuu de SMWCentral y yo lo traduci (bueno, solo lo que pude comprender).

1) Que es HDMA?:
2) Recursos necesarios
3) Mi primer gradiante y HDMA Basico
4) Usando multiples canales de HDMA
5) Notas del color de fondo y matematica de colores

1) Que es HDMA?
HDMA son efectos usados por el SNES para producir algunos efectos graficos como el circulo que se expande en la "Title Screen" de SMW. Lo que hace el HDMA es modificar configuraciones graficas de la mitad de la pantalla siendo dibujadas en la T.V. Una T.V funciona dibujando lineas de color horizontales. Este dibuja una linea, baja un poquito y sigue con la otra. Esas lineas se llaman "Scanlines". El HDMA cuenta esas "Scanlines" que uno especifica y cambia la configuracion grafica para producir un efecto. Puedes cambiar el color del Background (Fondo) y producir un gradiante, puedes hacer un efecto de ondas como de calor y un monton de cosas con el.

2) Recursos necesarios:
Antes que nada, debes saber un poco de ASM, como la RAM funciona, un poco de indexamiento y tablas. Tambien necesitas algun metodo para correr el HDMA, como Level ASM + Init o puedes crear un generador (lo cual seria un poco mas dificil). El punto es que el HDMA corra todos los frames. Y obviamente Notepad, o algun programa donde puedas guardar un archivo .TXT.

3) Mi primer gradiante y HDMA Basico:
Ahora que tienes todo lo necesario, es hora de hacer un gradiante de brillo (Aun no llegamos a hacer gradiantes con colores). Lo mas facil de hacer con HDMA es un gradiante de Brillo. Si copias y pegas el siguiente codigo en Level ASM (o un generador, ahi se vera como) la pantalla se vera asi:


Vaya que oscuro...

REP #$20 ; Acumulador de 16 bit
LDA #$0000 ; $43X0 = 00
STA $4330 ; $43x1 = 00
LDA #LVL1BRIGHT ; Obtener puntero de la tabla de brillo
STA $4332 ; Restaurarlo a un puntero de Bajo y Alto Byte
PHK ; Obtener Banco
PLY ;
STY $4334 ; store to bank pointer byte Restaurar a un puntero de banco
SEP #$20 ; Acumulador de 8 bit
LDA #$08 ; Activar canal 3 de HDMA
TSB $0D9F ;
RTS ; Retorna

LVL1BRIGHT:
db $0C,$0F
db $0C,$0E
db $0C,$0D
db $0C,$0C
db $0C,$0B
db $0C,$0A
db $0C,$09
db $0C,$08
db $0C,$07
db $0C,$06
db $0C,$05
db $0C,$04
db $0C,$03
db $0C,$02
db $0C,$01
db $0C,$00
db $00


Muy bien, ahora tienes el codigo, pero no lo entiendes (o si?). Dejame explicarlo:

REP #$20 ; Acumulador de 16 bit
LDA #$0000 ; $43X0 = 00
STA $4330 ; $43x1 = 00
LDA #LVL1BRIGHT ; Obtener puntero de la tabla de brillo
STA $4332 ; Restaurarlo a un puntero de Bajo y Alto Byte
PHK ; Obtener Banco
PLY ;
STY $4334 ; store to bank pointer byte Restaurar a un puntero de banco
SEP #$20 ; Acumulador de 8 bit
LDA #$08 ; Activar canal 3 de HDMA
TSB $0D9F ;
RTS ; Retorna


REP #$20: Esto hace que el acumulador se vuelva de 16 bits de ancho, o sea, que se pueden usar 2 registros al mismo tiempo.
LDA #$0000: Esto es mas complejo. El Bajo Byte (#$0000) esta dirigido al registro $4330, por ahora, debes dejar esto en 00. El Alto Byte (#$0000) esta dirigido al registro $4331, el cual debiera ser 00 para un gradiante de brillo (para un gradiante de color, este va a cambiar)
STA $4330: Como estamos en modo 16 bit, restaurando a este registro, estaremos escribiento a $4330 y a $4331 al mismo tiempo.
LDA #LVL1BRIGHT
STA $4332
: Esto hace que los valores de la tabla LVL1BRIGHT se guarden en $4332.
PHK
PLY
STY $4334
: Realmente no necesitas saber lo que hace, solo entiende que este obtiene el Banco de donde esta la tabla y lo pone en Y.
SEP #$20: Esto hace que el Acumulador vuelva nuevamente a ser de 8 bit.
LDA #$08
TSB $0D9F
: $0D9F sostiene cuales canales de HDMA estan activos. TSB toma los bits en A y los pone en la carta de direccion (WTF?), en este caso el cuarto bit esta activo y se activaran 3 canales de HDMA.

[b]LVL1BRIGHT:
db $0C,$0F
db $0C,$0E
db $0C,$0D
db $0C,$0C
db $0C,$0B
db $0C,$0A
db $0C,$09
db $0C,$08
db $0C,$07
db $0C,$06
db $0C,$05
db $0C,$04
db $0C,$03
db $0C,$02
db $0C,$01
db $0C,$00
db $00
: Esta es la tabla de valores de HDMA, es muy importante, notaras que la tabla tiene 2 valores por cada "db". Aqui se explica:
El primer Byte en la linea es el contador de "Scanlines" (en este caso es $0C). Este controla la cantidad de scanlines que el HDMA espera antes de hacer uncambio. No pongas un numero mayor a $80, pueden ocurrir errores. El segundo byte es el valor que se da al gradiante. En un gradiante de brillo, $0F significa que la pantalla es completamente blanca mientras que $00 es completamente negra. Si se pone un valor mayor a $0F no hara nada. El ultimo byte ($00) es muy importante, siempre debes terminar las tablas de HDMA con un db $00 o si no la pantalla comenzara a dar colores malos.

O sea que si quiero que el gradiante comienze desde la parte mas alta de la pantalla, el primer byte de la tabla ($0C) lo pondria en $00 y si quiero que sea mas abajo, lo pondria en $80 (el cual no seria la parte mas baja de la pantalla). Ya sabes que el segundo byte es el valor de brillo. Ahora, que hago si quiero que las lineas de cambio de brillo sean mas delgadas o mas gruesas? Modificas los primeros bytes desde el segundo db, o sea, si escribo $01, las lineas seran muy delgadas y si escribo $08 seran mas gruesas. Todos los valores van desde $01 (Realmente no se si $00 hara algo) hasta $80. Ahora que tienes lo basico, es hora de...

4) Usando multiples canales de HDMA:
PENDIENTE...



Volver arriba Ir abajo
Invitado
Invitado
avatar


MensajeTema: Re: Tutorial de HDMA   Sáb Oct 09, 2010 3:28 pm

4) Usando multiples canales de HDMA:

Ahora con tu conocimiento puedes hacer un gradiante de color :D.

REP #$20 ; Acumulador de 16 bit
LDA #$3200 ; $43X0 = 00
STA $4330 ; $43x1 = 32
LDA #LVL1RED ; Obtener puntero a la tabla del color Rojo
STA $4332 ; Restaurar el byte alto y bajo
PHK ; Obtener banco
PLY ;
STY $4334 ; Restaurarlo al puntero del Banco
LDA #$3200 ; $43X0 = 00
STA $4340 ; $43x1 = 32
LDA #LVL1GREEN ; Obtener puntero a la tabla del color Verde
STA $4342 ; Restaurarlo a un puntero el alto y bajo byte
STY $4344 ; Restaurarlo al puntero del Banco
LDA #$3200 ; $43X0 = 00
STA $4350 ; $43x1 = 32
LDA #LVL1BLUE ; get pointer to red color table Obtener puntero a la tabla del color Azul
STA $4352 ; Restaurarlo a un puntero el alto y bajo byte
STY $4354 ; Restaurarlo al puntero del Banco
SEP #$20 ; Acumulador de 8 bit
LDA #$38 ; Activar canales 3, 4 y 5 de HDMA
TSB $0D9F ;
RTS ; Retorna

LVL1RED:
db $4F,$21
db $04,$22
db $04,$24
db $04,$25
db $04,$27
db $04,$28
db $04,$2A
db $04,$2B
db $04,$2D
db $04,$2E
db $04,$30
db $00

LVL1GREEN:
db $4F,$50
db $04,$51
db $04,$52
db $04,$53
db $04,$54
db $04,$55
db $04,$56
db $04,$57
db $04,$58
db $04,$59
db $04,$5A
db $00

LVL1BLUE:
db $4F,$99
db $08,$9A
db $08,$9B
db $08,$9D
db $08,$9E
db $08,$9F
db $00


Si vas a usar este codigo, te encontraras con esto:



Lindo, no?.
Ahora el codigo ha cambiado y tiene 3 tablas en vez de una. Dejame explicar algunas cosas:

LDA #$3200 ; $43X0 = 00
STA $4330 ; $43x1 = 32
: Antes, esto era LDA #$0000, ahora es LDA #$3200; cambiamos el byte alto 00 a 32. Solo entiende que #$3200 es el color del Background. Ahora como hay 3 tablas, significa que hay 3 canales de HDMA. Usando 3 canales de HDMA, significa que podemos hacer 3 cambios diferentes. Con los 3 canales activos, debemos fijar los colores Azul, Rojo y Verde por separado. Aqui las tablas son lo mismo que las de brillo. El primer Byte maneja las scanlines y el segundo el valor del brillo, pero en este caso sera el brillo del color. Los valores de los colores son estos (cualquier valor se puede poner en cualquier tabla, pero es recomendable que se ponga cada valor en su canal):

$00-1F = No hace nada
$20-3F = Fijar el color Rojo
$40-5F = Fijar el color Verde
$80-9F = Fijar el color Azul
$60-7F = Fijar los colores Rojo y Verde
$A0-BF = Fijar los colores Rojo y Azul
$C0-DF = Fijar los colores Verde y Azul
$E0-FF = Fijar los colores Rojo, Azul y Verde


Si pones esos valores en una tabla (obviamente en el segundo Byte) dara el color fijado. Pero espera, Como convierto los valores vistos en la paleta de colores de Lunar Magic a estos? Mira, hay 2 formas de hacerlo:

1.- Esta Herramienta (no me prgunten como se usa, yo no se)
2.- O esta:

(Valor visto en el editor de paleta de Lunar Magic)/8, convertir a Hex, + 20/40/80 dependiendo del color.

Aqui un ejemplo:

Digamos que mi color es 64 Rojo, 128 Verde y 248 Azul

Rojo: 64/8 = 8. 8 en Hex es 8. 8 + 20 = 28. El valor para Rojo es 28.
Verde: 128/8 = 16. 16 en Hex es 10. 10 + 40 = 50. El valor para Verde es 50.
Azul: 248/8 = 31. 31 en Hex es 1F. 1F + 80 = 9F. El valor para Azul es 9F.

5) Notas del color de fondo y matematica de colores:

Bien, ahora sabes hacer gradiantes de color. Que tal si hacemos algo mas loco?... Te parece un HDMA que afecte al Background y al Foreground? Ok, ahora agrega este codigo a tu HDMA (puedes ponerlo al principio al final, donde sea):

LDA #$3F ; enable color math on everything
STA $40
LDA #$00 ; Usar color del Background en vez del original
STA $44
LDA #$1F ; Poner todos los Layers en la pantalla principal
STA $212C
LDA #$00 ; No Layers en la Sub-Pantalla
STA $212D


Combinado este codigo con el del gradiante anterior, la pantalla se deberia ver asi:



Rayos, todo es tan Blanco!

Nota: Usando este efecto, casi siempre hara que se vea asi de blanco, intenta poner valores mas bajos a la tabla de HMDA para que no sea tan blanco.
Nota 2: Usando este codigo, puede que la Prioridad de los Objetos/Sprites cambien. Por ejemplo, que un Koopa aparezca detras de los arbustos cuando deberia ser al reves.
Nota 3: Los Sprites que usan la Paleta 8-B no participan con este efecto, es por eso que Mario se ve normal y no los Koopas.

Bueno este ha sido la traaduccion del tutorial, si ya han leido el original, se daran cuenta que corte otras partes, porque las otras no son tan necesarias.

6) Haciendo un generador de HDMA:

Este punto no estaba en la lista, pero... De todas formas lo hare. Para hacer el Generador de HDMA debes crear un Archivo ASM y copiar/pegar/crear el codigo de HDMA que quieras. Ahora despues de copiado/pegado/creado el codigo pon este al principio del archivo:

print "INIT ",pc

RTL

print "MAIN ",pc


Y despues del "print "MAIN",pc" debe ir el codigo del HDMA.
Ahora solo cambia todos los "RTS" y reemplazalos por un "RTL". Lo unico que faltaria es el .CFG. Para no tener que crear uno, descarga Este Generador de HDMA y copia el .CFG que viene con el. Ahora pegalo en la carpeta de Sprite Tool en donde se encuentre tu generador de HDMA, y abre el .CFG con el Notepad y veras que en una parte dice: BlueSky.asm. Ahora cambia ese nombre por el de tu generador (es obligatorio que pongas ese .ASM) y listo! Ahora insertalo como GENERADOR y ponlo en cualquier parte del nivel.
Nota: Debes poner el generador en la misma pantalla (Screen) en donde mario comience el nivel. Tambien si el nivel tiene Midway Entrance, pon el generador en la pantalla (Screen) en donde mario comience o si no este no funcionara a partir de ahi.

Uff... Al fin, mi primer tutorial terminado. Si tienes preguntas/comentarios/sugerencias/ayuda/hice un error postea aqui y tratare de ayudar. Grcias por leer el Tutorial Happy.
Volver arriba Ir abajo
NoXuS9090
Baby Red Yoshi
Baby Red Yoshi
avatar

Posts Posts : 1306


MensajeTema: Re: Tutorial de HDMA   Sáb Oct 09, 2010 4:34 pm

Ha genial! es el mismo tuto que estaba viendo en la central pero en español! Wiiiiiiiiiiiiiiiii!
Volver arriba Ir abajo
Invitado
Invitado
avatar


MensajeTema: Re: Tutorial de HDMA   Sáb Oct 09, 2010 4:50 pm

Gracias!. Y me di cuenta que tuve muchos errores como el ultimo que dice "Grcias por leer..."
Volver arriba Ir abajo
anonimzwx
Mecha Koopa
Mecha Koopa
avatar

Posts Posts : 1108


MensajeTema: Re: Tutorial de HDMA   Dom Abr 28, 2013 8:21 am

con hdma se puede insertar graficos? o solo se puede alterar el brillo o el color?
Volver arriba Ir abajo
Contenido patrocinado




MensajeTema: Re: Tutorial de HDMA   

Volver arriba Ir abajo
 

Tutorial de HDMA

Ver el tema anterior Ver el tema siguiente Volver arriba 
Página 1 de 1.

 Temas similares

-
» Rayman Gold/Designer Pequeño tutorial sobre qué son los EVE.
» TUTORIAL "Como rellenar la ficha"
» TUTORIAL Para el uso del Chatbox
» Tutorial de cabinas
» TUTORIAL : NUEVA ANIMADORA HUMANA

Permisos de este foro:No puedes responder a temas en este foro.
Fortaleza Reznor ::  Archivero Reznor :: Basurero-