[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.)
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:
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:
La estructura de la tabla es asi:
Código:
[puntero de la imagen]08[Puntero de la paleta]08[Numero de slot de paleta][00 00 00]
Un ejemplo de como debe quedar:
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.EFCDAB08563412080E000000
]
==========
Paso 2
==========
Ahora debemos editar ambas rutinas que descargamos (loading.asm y removing.asm) y buscaremos en loding.asm esta linea:
Código:
.equ TABLE, 0x08(TABLE)
Código:
.equ TABLE, 0x08874520
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:
Código:
#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
Código:
@/VAR 0x4500 = Número de sprite en la tsbla
@VAR 0x4501 = Pocisión del sprite@
@VAR 0x4502 = Número de sprite en el script
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:
Código:
#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?
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: