Registrarse

[ASM] FR, E | Mostrar Sprite al encontrar un Objeto en el Mapa

MACHINE

Space Cowboy
Hola WaH!

Navegando por Pokécommunity encontré esta interesante Rutina ASM, su función es mostrar el Sprite del objeto al encontrarlo en el mapa (Ej: En una Poké Ball).

*Post Original: https://www.pokecommunity.com/showthread.php?t=393573

Bueno esta es la explicación (Mejorada y Traducida por mi):

Paso #1:

-Buscar un Offset libre donde colocar la siguiente rutina ASM:

Código:
.equ GAMECODE, 0

.THUMB
.ALIGN 2

CMP R4, #1
BNE END

MOV R0, R5
MOV R1, #3
BL BOX

PUSH {R0-R7}
LDR R0, .SCRIPT
LDR R0, [R0]
LDR R1, .SCRIPT1
LDR R2, .SCRIPT2
CMP R0, R1
BEQ LOAD
CMP R0, R2
BNE END_

LOAD:
LDR R0, .8007
LDRH R0, [R0]
LSL R0, R0, #3
LDR R5, .TABLE
ADD R5, R0
LDR R0, [R5]
LDR R1, .TILE
SWI 0x12

MOV R2, R1
LDR R0, [R5, #4]
LDR R1, .PAL
SWI 0x12

MOV R0, #0x7F
LSL R0, R0, #8
ADD R0, #0xFF
STRH R0, [R1, #0x1E]

MOV R0, R2
MOV R6, #0x12
LSL R6, R6, #5
MOV R5, #0

LOOP_:
LDRB R1, [R0, R5]
LDRB R2, [R0, R5]
MOV R3, #0x0F
MOV R4, #0xF0
AND R1, R3
AND R2, R4
CMP R1, #0
BNE LAST

MOV R1, #0x0F

LAST:
LSR R3, R2, #4
CMP R3, #0
BNE CONTROL

MOV R2, #0xF0

CONTROL:
ORR R2, R1

ADD R5, #1
CMP R5, #2
BNE BYTE

LSL R2, R2, #8
ORR R7, R2
STRH R7, [R0]
ADD R0, #2
MOV R5, #0
B COUNTER

BYTE:
MOV R7, R2

COUNTER:
SUB R6, #1
BPL LOOP_

MOV R1, #0xD
LSL R1, R1, #12
ADD R1, R1, #1
MOV R2, #2
MOV R3, #2
LDR R0, .RAW 
LOOP:
STRH R1, [R0]
ADD R0, #2
ADD R1, #1
SUB R2, #1
BPL LOOP
MOV R2, #2
ADD R0, #0x3A
SUB R3, #1
BPL LOOP
END_:
POP {R0-R7}

END:
POP {R4, R5}
POP {R0}
BX R0

BOX:
PUSH {R0}
LDR R0, .BOX 
MOV R10, R0
POP {R0}
BX R10

.ALIGN 2
.if GAMECODE==0
.BOX: .word 0x08003F20+1
.RAW: .word 0x02001C6E
.PAL: .word 0x02037798
.SCRIPT: .word 0x03000EC4
.SCRIPT1: .word 0x081A6816
.SCRIPT2: .word 0x081A6820
.8007: .word 0x020370C0
.TABLE: .word 0x083D4294
.TILE: .word 0x06008020
.elseif GAMECODE==1
.BOX: .word 0x08003658+1
.RAW: .word 0x02001C70
.PAL: .word 0x02037CB4
.SCRIPT: .word 0x03000E54
.SCRIPT1: .word 0x08271C62
.SCRIPT2: .word 0x08271C85
.8007: .word 0x020375E0
.TABLE: .word 0x08614410
.TILE: .word 0x06008020
.else
.fail 0
.endif
*Nota: En .equ GAMECODE, # colocar 0 Para Fire Red y 1 para Emerald.

*El Offset debe terminar en: 0, 4, 8 o C.

-Compilar la Rutina.

Paso #2:

-Ir a los siguientes Offsets dependiendo de la ROM:

Fire Red

-Ir a Offset 0F6F08 y pegar (Ctr+B) 00 48 00 47 XX XX XX 08 (En XX XX XX poner el offset donde se insertó la rutina, convertido en pointer+1)

Emerald

- Ir a Offset 1973E8 y pegar (Ctr+B) 00 48 00 47 XX XX XX 08 (En XX XX XX poner el offset donde se insertó la rutina, convertido en pointer+1).

-Ir a Offset 099738 y cambiar los bytes por 00 00.

Resultado:


IMPORTANTE: Solo funciona con el tipo MSG_FIND

-Si encuentran algún bug, notificarme-

Edito:*Créditos para: Andrea (Por publicar originalmente el tema: https://whackahack.com/foro/t-48585/fr-show-item-image-when-it-added-to-the-bag

Eso es todo... Espero les sea útil :D
 
Última edición:
Respuesta: [FR] y [E] (ASM) Mostrar Sprite al encontrar un Objeto en el Mapa

Eso esta correcto? ¿Debería mostrar el icono de la Pokéball, o es algún error en el asm?
 
Respuesta: [FR] y [E] (ASM) Mostrar Sprite al encontrar un Objeto en el Mapa

Wooooow! Nunca pensé que existiría un método para hacer esto yo optaba por hacer uso del comando showpokepic con los sprites de los objetos pero esto ocupa muchísimo menos espacio y es fácil de implementar.
Solo una pregunta, ¿porque no hay ningún comentario? xD

Edito: Recién lo comprobé y funciona perfectamente, revisé algunas cosas en mi rom hackeada y no daña ningún código del juego así que se puede usar tranquilamente.
 
Última edición:

CompuMax

Discord: CompuMax#0425
Miembro insignia
Respuesta: [FR] y [E] (ASM) Mostrar Sprite al encontrar un Objeto en el Mapa

El tutorial es bastante básico y útil en realidad. Ahora pasaré a comentar un par de cosas:

1.- El Offset debe terminar preferiblemente en: 0, 4, 8 o C
Preferiblemente no! debe ser así ya que el procesador lee las instrucciones en múltiplos de words y como el procesador de la GBA, el ARM7TDMI, es un procesador de 32 bits, cada word es de 4 bytes, de allí a que se deba insertar en offsets múltiplos de 4 o como se conocen offsets alineados.

2.- Una de las razones que supongo por las que no hay comentarios aquí (a parte de que esto está cada día más muerto), es que este sistema ya había sido publicado por su propio autor: Andrea en el siguiente post:

[FR]Show item image when it added to the bag

Igualmente muchas gracias por haberlo traído de vuelta, traducirlo y explicarlo un poco mejor.
 
Última edición:

MACHINE

Space Cowboy
Respuesta: [FR] y [E] (ASM) Mostrar Sprite al encontrar un Objeto en el Mapa

El tutorial es bastante básico y útil en realidad. Ahora pasaré a comentar un par de cosas:

1.- El Offset debe terminar preferiblemente en: 0, 4, 8 o C
Preferiblemente no! debe ser así ya que el procesador lee las instrucciones en múltiplos de words y como el procesador de la GBA, el ARM7TDMI, es un procesador de 32 bits, cada word es de 4 bytes, de allí a que se deba insertar en offsets múltiplos de 4 o como se conocen offsets alineados.

2.- Una de las razones que supongo por las que no hay comentarios aquí (a parte de que esto está cada día más muerto), es que este sistema ya había sido publicado por su propio autor: Andrea en el siguiente post:

[FR]Show item image when it added to the bag

Igualmente muchas gracias por haberlo traído de vuelta, traducirlo y explicarlo un poco mejor.
Gracias CompuMax, ya edite y mejoré el tema y di los créditos a su Autor.
 

Naren Jr.

Puto amo
Usuario de Platino
Respuesta: [FR] y [E] (ASM) Mostrar Sprite al encontrar un Objeto en el Mapa

Wow excelente tutorial!!!!!!

Me encanto, probablemente lo aplique, creo que en mis recursos tengo uno para mostrar las imagenes de los obejtos tipo BW.

Muchas gracias por compartirlo!
 

Rubire4

Usuario mítico
Respuesta: [FR] y [E] (ASM) Mostrar Sprite al encontrar un Objeto en el Mapa

Dejo por aquí las rutinas compiladas:

Fire Red:
Código:
01 2C 4A D1 28 1C 03 21 00 F0 4A F8 FF B4 2A 48 00 68 2A 49 2A 4A 88 42 01 D0 90 42 3C D1 29 48 00 88 C0 00 28 4D 2D 18 28 68 28 49 12 DF 0A 1C 68 68 20 49 12 DF 7F 20 00 02 FF 30 C8 83 10 1C 12 26 76 01 00 25 41 5D 42 5D 0F 23 F0 24 19 40 22 40 00 29 00 D1 0F 21 13 09 00 2B 00 D1 F0 22 0A 43 01 35 02 2D 05 D1 12 02 17 43 07 80 02 30 00 25 00 E0 17 1C 01 3E E5 D5 0D 21 09 03 01 31 02 22 02 23 0A 48 01 80 02 30 01 31 01 3A FA D5 02 22 3A 30 01 3B F6 D5 FF BC 30 BC 01 BC 00 47 01 B4 02 48 82 46 01 BC 50 47 C0 46 21 3F 00 08 6E 1C 00 02 98 77 03 02 C4 0E 00 03 16 68 1A 08 20 68 1A 08 C0 70 03 02 94 42 3D 08 20 80 00 06
Emerald:
Código:
01 2C 4A D1 28 1C 03 21 00 F0 4A F8 FF B4 2A 48 00 68 2A 49 2A 4A 88 42 01 D0 90 42 3C D1 29 48 00 88 C0 00 28 4D 2D 18 28 68 28 49 12 DF 0A 1C 68 68 20 49 12 DF 7F 20 00 02 FF 30 C8 83 10 1C 12 26 76 01 00 25 41 5D 42 5D 0F 23 F0 24 19 40 22 40 00 29 00 D1 0F 21 13 09 00 2B 00 D1 F0 22 0A 43 01 35 02 2D 05 D1 12 02 17 43 07 80 02 30 00 25 00 E0 17 1C 01 3E E5 D5 0D 21 09 03 01 31 02 22 02 23 0A 48 01 80 02 30 01 31 01 3A FA D5 02 22 3A 30 01 3B F6 D5 FF BC 30 BC 01 BC 00 47 01 B4 02 48 82 46 01 BC 50 47 C0 46 59 36 00 08 70 1C 00 02 B4 7C 03 02 54 0E 00 03 62 1C 27 08 85 1C 27 08 E0 75 03 02 10 44 61 08 20 80 00 06
 

Jon.

Usuario mítico
Respuesta: [FR][E] | ASM | Mostrar Sprite al encontrar un Objeto en el Mapa

Muy buena rutina, no es algo fundamental para un hack, pero es un muy buen detalle que alegra la vida y queda de diez... Aparte solo se aplica en un tipo msgbox por lo tanto se podra activar cuando se quiere
 

KERBEROS

Usuario de Platino
Respuesta: [FR][E] | ASM | Mostrar Sprite al encontrar un Objeto en el Mapa

vaya!
ultimamente andas metido en el ASM, eso me gusta ! sigue trayendo estos aportes!
 

Nachoius

Caminante del cielo
hay manera de modificar la rutina para que no solo aparezca cuando te encuentras un item, si no tambien cuando te lo da alguien?
 
Arriba