inv_gba
Thread Id: 24952
Thread Name: [Investigación][En Progreso] Minis Específicos Transparentes
#0
Cheve_X 15014
Bueno, en un video, hace un tiempo, me encontré con un scripts de un "fantasma" de un Eevee (No pude volver a dar con el susodicho video) el cual era transparente, tal cual una Textbox.

Ahora bien, usando el BLDMOD, COLEV, COLEY y WININ (resumiendo, el I/O) uno puede lograr minis transparentes, pero en realidad toda la data de la parte de "OBJ" es puesta en éste modo:





Como ví que de ésta manera me sería imposible hacer que solo el OBJ que yo quiera sea transparente, fuí a GBATEK, para ver si habría algo que me ayudase...


Link a la Data original: GBATEK - GBA/NDS Technical Info

Iniciado por GBATEK
Atributos de los OBJ
Existen 128 entradas en el OAM para cada OBJ, del OBJ0 al OBJ127. Cada entrada consiste de 6Bytes (3 atributos de 16bits). Los atributos del OBJ0 se encuentran en 07000000, para OBJ1, al 07000008, OBJ2 a 07000010 y así.

Como puedes ver, hay espacios en blanco en 07000006, 0700000E, 07000016, etc. - Estos valores de 16bit son usados para Rotar/Escalar los OBJ (Como se describe en el proximo capitulo) - Ellos no están directamente realacionados con los separados OBJ

Atributo de OBJ 0 (R/W) (R/W = Read/Writable) (Leíble / Escribible)


Bit Expl.
0-7 Coordenada-Y (0-255)
8 Flag de Rotacion/Scaling (0=Off, 1=On)
Cuando se usa la Rotacion/Scaling (Attribute 0, bit 8 set):
9 Double-Size Flag (0=Normal, 1=Double)
When Rotation/Scaling not used (Attribute 0, bit 8 cleared):
9 OBJ Disable (0=Normal, 1=Not displayed)
10-11 OBJ Mode (0=Normal, 1=Semi-Transparente, 2=OBJ Window, 3=Prohibited)
12 OBJ Mosaic (0=Off, 1=On)
13 Colors/Palettes (0=16/16, 1=256/1)
14-15 OBJ Shape (0=Square,1=Horizontal,2=Vertical,3=Prohibited)

Atención: Un OBJ demasiado grande (de 128px verticales, por ejemplo, un obj de 64px de Doble tamañlo de area) ubicado en Y>128 será tratado como Y>-128, el OBJ entonces es mostrado en partes fuera de la pantalla en el TOP del display, y no se muestra en la parte más baja


OBJ Attribute 1 (R/W)

Bit Expl.
0-8 X-Coordinate (0-511)
When Rotation/Scaling used (Attribute 0, bit 8 set):
9-13 Rotation/Scaling Parameter Selection (0-31)
(Selects one of the 32 Rotation/Scaling Parameters that
can be defined in OAM, for details read next chapter.)
When Rotation/Scaling not used (Attribute 0, bit 8 cleared):
9-11 Not used
12 Horizontal Flip (0=Normal, 1=Mirrored)
13 Vertical Flip (0=Normal, 1=Mirrored)
14-15 OBJ Size (0..3, depends on OBJ Shape, see Attr 0)
Size Square Horizontal Vertical
0 8x8 16x8 8x16
1 16x16 32x8 8x32
2 32x32 32x16 16x32
3 64x64 64x32 32x64

OBJ Attribute 2 (R/W)
Bit Expl.
0-9 Character Name (0-1023=Tile Number)
10-11 Priority relative to BG (0-3; 0=Highest)
12-15 Palette Number (0-15) (Not used in 256 color/1 palette mode)


Luego voy a estar tranduciendo ésto.

Bueno, entonces, ahí dice que con a primer parte de 16bits, en el bit 10-11 puedo cambiar el modo de los OBJ a semitransparente... Intenté hacerlo con un WBTO, pero la data en la Ram se carga una y otra vez, y no me permite hacer nada...

Los datos de los OBJ como dice GBATEK empiezan en 0x07000000
#1
Loony Boo♪ 12263
El NSE te permitía acceder a la paleta en cuestión, es concretamente la del reflejo del agua, puedes probar a ver.
#2
Synchrony 28239
Iniciado por Cheve_X
Intenté hacerlo con un WBTO, pero la data en la Ram se carga una y otra vez, y no me permite hacer nada...


¿Con eso te refieres a que si pones el WBTO no pasa nada porque se refresa de inmediato o se refresca después que el mini hace un cambio de frame?
Interesante tema, por cierto.
#3
Cheve_X 15014
Bueno, les cuento como saber donde está la data de cada mini en la RAM... La del protagonista está en 0x07000000, y son estos 6bytes:



Cada par de Bytes, corresponde a una de los atributos de objetos.

Asi tenemos que el primer byte vale:

8038 (HEX)

Que sería

1000000000111000 (BIN)

Es decir...

1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0
F E D C B A 9 8 7 6 5 4 3 2 1 0

Éstos son, los bits que manejamos con la tabla de arriba...



Entonces lo que hago es poner un 1 en A (A=10) con lo que pongo valor 1 en el bit 10-11, quedando el numero así:


1 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0
F E D C B A 9 8 7 6 5 4 3 2 1 0

1000010000111000 (BIN)

8438 (HEX)

entonces lo que yo intento es hacer un WBTO al 0x07000000 con el valor 0x84, cuando el script lo carga, vuelve a su valor original (0x80)

Eso es a lo que me refiero [MENTION=28239]NoMore Rancor[/MENTION]
#4
Kirito 28212
Hello, I have done this research a long time ago.
I added you on skype to explain how to do, after can update the first post.