Registrarse

[RH - ASM] Error en rutina mugshots por ASM.

Estado
Cerrado para nuevas respuestas.

ANT0N9

Algun Sprite?
Bueno, Hola WaH vengo con una duda bastante importante (para mi) acerca de una rutina que compartió Gold.
https://whackahack.com/foro/t-29783/fr-asm-carga-mugshots-mediante-asm#post264357

~Ruki!;264357 dijo:
[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:
Código:
[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:

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:
Código:
.equ TABLE, 0x08(TABLE)
Reemplazamos donde dice (TABLE) por la offset donde pusimos nuestra tabla de punteros, a mi me quedo asi

Código:
.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:

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
.
Ahora a explicar las variales:

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
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:

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?
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:

Bueno mi Error o duda es el porque me sale esto

Todo bien.

Muy bien.

... Algo anda mal.

El sprite desaparece luego de terminar el script y el mugshot no desaparece como debería.
Si alguno tiene idea de porque pasa esto por favor díganme ya que no puedo continuar mi hack con este error.
 

MichaKing

Grafista avanzado

Yo no sé mucho de esto ya que aún no me he puesto a probar esta rutina debido a que no creo usarla (O quién sabe en un futuro), y el problema que mencionas se me hace bastante extraño. A pesar de todo esto, creo poder ayudarte. Tengo una posible solución a tu problema: Aunque parezca obvio, asegúrate de colocar nuevamente el callasm al finalizar el script, como se explica en el tutorial, ya que de esa manera se ocultará el Mugshot y todo seguirá normalmente.

~MichaKing
 
Última edición:

ANT0N9

Algun Sprite?
Re: Respuesta: Error en rutina mugshots por ASM.


Yo no sé mucho de esto ya que aún no me he puesto a probar esta rutina debido a que no creo usarla (O quién sabe en un futuro), y el problema que mencionas se me hace bastante extraño. A pesar de todo esto, creo poder ayudarte. Tengo una posible solución a tu problema: Aunque parezca obvio, asegúrate de colocar nuevamente el callasm al finalizar el script, como se explica en el tutorial, ya que de esa manera se ocultará el Mugshot y todo seguirá normalmente.

~MichaKing
#dynamic 0x800000

#org @inicio
lock
setvar 0x4500 0x0
setvar 0x4501 0x0
setvar 0x4502 0x0
callasm 0xF01001
msgbox @habla 0x6
callasm 0xF0111D
end

#org @habla
= Hola

Ese es el script y pongo siempre el callasm 0x(El offset donde puse el desactivador +1)y nada.

siempre me salen los errores mas extraños lll-_-
aunque probé mi rom de nuevo y el mugshot desaparecía pero también el sprite (al cual le puse ese script) luego entre y salí del menu y el error se vuelve a presentar, la verdad es que no se porque pasa esto...:(
 
Última edición:

Cheve

MoonLover~
Miembro de honor
1. ¿Tienes algún NPC con el movimiento "Mirar abajo"? Si es así, cámbialo por "Sin Movimiento"

2. ¿Pusiste la parte de remover exactamente donde termina la otra tal y como dice el tutorial?
 

ANT0N9

Algun Sprite?
1. ¿Tienes algún NPC con el movimiento "Mirar abajo"? Si es así, cámbialo por "Sin Movimiento"

2. ¿Pusiste la parte de remover exactamente donde termina la otra tal y como dice el tutorial?
1. Si tengo algún NPC con "mirar hacia abajo" '¬¬ , pero esto afecta en algo??

2. La puse exactamente después.

i think it's your fault. but pls don't use this routine, it doesn't use the built-in obj alloc system.
I do not know why it's my fault if I followed every step of the tutorial and still do not function. :shock:
 

Cheve

MoonLover~
Miembro de honor
Respuesta: Re: Error en rutina mugshots por ASM.

1. Si tengo algún NPC con "mirar hacia abajo" '¬¬ , pero esto afecta en algo??

2. La puse exactamente después.



I do not know why it's my fault if I followed every step of the tutorial and still do not function. :shock:
Claro que si, ese movimiento está bugeado...
 
Estado
Cerrado para nuevas respuestas.
Arriba