tuts_gba
Thread Id: 29783
Thread Name: FR | ASM | Carga de Mugshots mediante ASM
#0
G0LD_ZTHVARD0X! 27515
[Mugshots mediante ASM


Hola, de seguro preguntarás de que va esto, pues como sabrás, muchos de nosotros hemos hecho cajas de texto con retratos o "mugshots" pero estos son muy limitados, ya que solo puedes mostrar uno a la vez (dos mediante herramienta), ademas de estar en un cuadro de texto, siempre se reproduce el grito del pokemon reemplazado, y solo hay espacio para 25 mugshots, (hay mas, pero significaría deshacerte de un pokemon) asi que con este tutorial mediante ASM podrás mostrar mughots transparentes, sin gritos, dos a la vez y con un limite de 255 mugshots.


Herramientas a usar.

Compilador THUMB ASM
Rutina activadora (loading.asm)
Rutina desactivadora (removing.asm)
Editor hexadecimal
Un cerebro y conocimientos minimos sobre hex y ensamblaje de rutinas ASM


Ademas, necesitas tener insertados algunos mugshots de 64x64 con sus respectivas paletas comprimidas insertadas en diferentes offsets (con Unlzgba puedes hacer esto.)




=============
Paso1
=============

Primero crearemos la tabla de punteros de los mugshots, para ello buscaremos alguna offset con bastante espacio libre, para una tabla de 32 mugshots buscaremos 0x180 bytes, una vez ubicada empezaremos la tabla.

La estructura de la tabla es asi:
[puntero de la imagen]08[Puntero de la paleta]08[Numero de slot de paleta][00 00 00]

No es muy complicado, el puntero de la imagen es la offset permutada de la offset donde la pusimos, mismo caso con la paleta, el numero de slot de la memoria donde se ubicará la paleta, solo sirve de 00 a 0F, cualquier valor superiór colgará el juego.

Un ejemplo de como debe quedar:
EFCDAB08563412080E000000
]

Esa es la estructura al puntero de un mugshot, este sería el mugshot número 0, así sucesivamente agregamos mas punteros y tendremos nuestra tabla creada.



==========
Paso 2
==========


Ahora debemos editar ambas rutinas que descargamos (loading.asm y removing.asm) y buscaremos en loding.asm esta linea:
.equ TABLE, 0x08(TABLE)

Reemplazamos donde dice (TABLE) por la offset donde pusimos nuestra tabla de punteros, a mi me quedo asi

.equ TABLE, 0x08874520

por último cambiaremos todas las líneas donde dice [OFFSET_OF_THIS_CODE] por la offset donde vamos a poner esta rutina ASM, yo la pondré en0xF002A4

La rutina es algo chapuza, pero de momento es lo que hay.

cuando termines, descomprime el endamblador en una carpeta, y luego pon el la carpeta donde descomprimiste el ensamblador las rutinas loading.asm y remove.asm.

ahora arrastra ambos archivos al icono "THUMB.bat", cuando lo hagas la consola de windows aparecerá fugazmente y al cerrarse tendrás dos archivos, "loading.bin" y "remove.bin"

Abre ambos archivos .bin y tu ROM con tu editor hexadecimal, ahora dirigete a la primer rutina y msrcala toda y copiala, luego dirigete e tu ROM. y ve al offset que reemplazó los"[OFFSET_OF_THIS_CODE] y pega ahi el contenido de "loading.bin".


Ahora vete a la ventana de "remove.bin" copialo todo y pegalo justo donde terminó el "loading.bin", guarda tu ROM y cierra.

Como esta rutina es THUMB debe de sumarse un dígito al último número de la offset donde pusimos ambas rutinas.
(EJ: 0xF002A4 cambia a 0xF002A5; 0xF004D8 cambia a 0xF004D9)

Ahora debemos conocer la estructura del script donde llamaremos nuestro mugshot:


#dynamic 0x8823A0
#org @pajas
lock
setvar 0x4500 0x0
setvar 0x4501 0x0
setvar 0x4502 0x0
callasm 0x(offset donde pusiste loading.bin) +1
msgbox @poyia0x6
callasm 0x(offset donde pusiste remove.bin) +1
end

#org @Poyia
= Puto quien lea esto xD.Ahora a explicar las variales:

@/VAR 0x4500 = Número de sprite en la tsbla
@VAR 0x4501 = Pocisión del sprite@
@VAR 0x4502 = Número de sprite en el script

0x4500: el valor de esta variable determinará el número de sprite a cargar, si queremos cargar el primer mugshot la fijamos en 0x0, si queremos el segundo en 0x1 y asi sucesivamente.

0x4501 aqui podes decidir en que lugar de la pantalla queres, 00 para izquierda, 01 para derecha

0x4502 el valor definirá que número de mugshot estamos cargando, si solo es uno la fijamos en 0x0, si hay dos en 0x1.

Ejemplo de script para cargar dos mugshots:


#dynamic 0x8906AB
#org @culo
lock
setvar 0x4500 0x5 'cargará el sprite 6
setvar 0x4501 0x0 'pocisión izquierda
setvar 0x4502 0x0 'este será el primer sprite
callasm 0x(offset donde pusiste el loding.bin) +1
setvar 0x4500 0x1 'cargará el sprite 2
setvar 0x4501 0x1 'pocisión derecha
setvar 0x4502 0x1 'este será el segudo sprite
callasm 0x(offset donde pusiste el loading.bin) +1
msgbox @pajilla 0x6
callasm 0x(offset donde pusiste el removing.bin) +1
release
end

#org @pajilla
= Ola ke ase ijuefruta?

Aqui una scan del resultado final:



Y eso es todo, si sabes algo de hex y como ensamblar una rutina ASM esto no debería ser dificil, si se usa esto dar créditos a:
-Kyoko1 (autor del metodo y rutinas)
-knizz

Es todo c:
#1
wobba_ffet 12383
que gran aporte, llevaba varios días intentando hacer esto, lo que mas me gusto fue que no usas la bese de jpan, que por algún motivo no era compatible con una herramienta que estaba usando.

muchas gracias.
#2
Tito Sayer301 26309
Yiah makayinah broo! que guapo me renta! es de esos aportes que te la ponen medio dura!

No tengo nada de ganas de comentar, pero este aporte lo merecía, te llevas mi repu maan!

EDIT: No me deja!! tengo que esparcirla mas! ajajjaa
#3
BLAx/Atlas 26580
Ostras tío, genial genial genial :D

Me sirve bastante para una cosilla xD
#4
Megascep_9 Kuchiki 28187
[MENTION=27794]Soloo.EXE[/MENTION] este es método que yo utilizo, es el mismo que está
en Pokeco.

En fin, que bueno que lo allas traido a WAH, a mi me funciona perfecto.