Registrarse

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

Andrea

Usuario mítico
Good morning!
These days i saw an update of an Italian hack, where there was a very interesting feature, that is the loading the image of items when they added to the bag.
Since it seemed like a nice thing to implement in our ROMs, today i'll explain how to do that!

#1 - Hook and asm routine
Let's go to the offset 080F6F08 and overwrite with the byte 00480047XXXXXX08
Where in place of the x will be insert the asm routine offset in little endian format +1.
Next we compile the following routine in a free offset in the rom:
.THUMB
.ALIGN 2

CMP R4, #1
BNE END

MOV R0, R5
MOV R1, #3
BL BOX

PUSH {R0-R7}
LDR R0, = 0x03000EC4
LDR R0, [R0]
LDR R1, = 0x081A6816
LDR R2, = 0x081A6820
CMP R0, R1
BEQ LOAD
CMP R0, R2
BNE END_

LOAD:
LDR R0, = 0x020370C0
LDRH R0, [R0]
LSL R0, R0, #3
LDR R5, = 0x083D4294
ADD R5, R0
LDR R0, [R5]
LDR R1, = 0x06008020
SWI 0x12

MOV R2, R1
LDR R0, [R5, #4]
LDR R1, = 0x02037798
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, = 0x02001C6E
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, = 0x08003F20+1
MOV R10, R0
POP {R0}
BX R10

#2 - Final Result:
 

Annatar

A la luz del quinto día, mira al este
Simply amazing, it's something useful and easy to insert in the rom. I think it's a little detail that improves hack's impression.

Thank u for bringing it to our forum ^^
 

FEL!X

ᴛᴜ ᴀᴍɪɢᴏ ᴇʟ ᴇsᴘᴀᴅᴀᴄʜíɴ
Usuario de Oro
¡Yeah! It will be very useful! Thank you very much Andrea! When I can I will try it, this goes straight to my bookmarks;)

~A hug

PD:

Aporte movido a Aportes>Scripts y rutinas
 

Katherine

Omnipresente
Miembro de honor
I do not know how I haven't seen this before, but it is amazing how easy it is to insert and how beautiful it looks. This is one of those small details that give your personality to the hack. Thanks for bringing it to Wah! I know It's going to be really useful.

Au revoir~.
 

Sage0ne

VTuber Peruano
LOL!! Mamma mia!
Aportazo! No es lo típico que te sueles encontrar por ahí, esto trae un toque de decoración y detallismo a una ROM Hack, es verdaderamente genial! :D
Gracias por compartirnos esto.

PD---------

No sé porque no me funciona (uso FireRed)
Inserto correctamente la rutine y remplazo los bytes en 0F6F08 con little endian
00480047D173A408 pero non mi aparece la imagene del item. He provado tambien con una nueva ROM pero el resultado es el mismo. :/
Alguno sabe perche?

La routine compilada es esta:

01 2C 4A D1 28 1C 03 21 00 F0 4A F8 FF B4 27 48 00 68 27 49 27 4A 88 42 01 D0 90 42 3C D1 26 48 00 88 C0 00 25 4D 2D 18 28 68 25 49 12 DF 0A 1C 68 68 24 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 10 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 0A 48 82 46 01 BC 50 47 00 00 C4 0E 00 03 16 68 1A 08 20 68 1A 08 C0 70 03 02 94 42 3D 08 20 80 00 06 98 77 03 02 6E 1C 00 02 21 3F 00 08
 
LOL!! Mamma mia!
Aportazo! No es lo típico que te sueles encontrar por ahí, esto trae un toque de decoración y detallismo a una ROM Hack, es verdaderamente genial! :D
Gracias por compartirnos esto.

PD---------
Puede que te pasara lo que a mi al principio, esta rutina solo aplica esta función a los objetos "que se encuentran", es decir los que muestran el diálogo de obtención con el tipo de mensaje MSG_FIND, si lo has puesto con MSG_OBTAIN, no saldrá la imagen. Prueba a hacer el script con ese otro comando.
 

H.B.P

Emperador Kaktiácero
Miembro de honor
Gracias por traerlo, aunque quedaría mejor que saliera la imagen en el centro, como ocurre con los showpokepic. Por otro lado, imagino que no podemos aplicar la rutina si utilizamos algún comando tipo additem.
 

Sage0ne

VTuber Peruano
Puede que te pasara lo que a mi al principio, esta rutina solo aplica esta función a los objetos "que se encuentran", es decir los que muestran el diálogo de obtención con el tipo de mensaje MSG_FIND, si lo has puesto con MSG_OBTAIN, no saldrá la imagen. Prueba a hacer el script con ese otro comando.

@Helix Boo♪ es correcto, no se puede usar el comando a menos que sea con msg_find, sin embargo, he visto a gente expandiendo la rutina y obteniendo resultados espectaculares, solo para la gente curiosa dejare el link del tema original por aqui: Pokémon Hacking (aunque tal parece que solo podreis verlo si sois miembros)

Como sea:
Item encontrado por ahi, o con cualquier otro comando


item con msg_find


Grazie tante Andre!! :heart:
 

Inferno

Personer
Como veo que esto no se actualiza decidí hacerlo yo, posteando la versión para Emerald (y de paso traducir las explicaciones a la hora de aplicar todo), cambios ya posteados en Pokeco por el mismo @Andrea en este post: https://www.pokecommunity.com/showthread.php?t=393573

TODOS LOS CRÉDITOS A ANDREA

Lo primero será compilar la siguiente rutina haciendo, previamente, un ligero cambio dependiendo de si usamos Fire Red o Emerald.
Código:
.equ GAMECODE_BPRE, 0
.equ GAMECODE_BPEE, 1
.equ GAMECODE_AXVE, 2

.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

El ligero cambio que mencioné recae sobre la siguiente instrucción:
Código:
.equ GAMECODE, 0
Si estáis usando Fire Red como base debéis dejar el valor 0, pero por el contrario si estáis usando Emerald, deberéis sustituir ese valor por un 1.

Rutina compilada para 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
Rutina compilada para 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

Una vez hecho paso a dividir la ampliación del aporte:

Una vez insertada la rutina en un lugar libre de nuestra ROM, deberemos ir al siguiente offset: 080F6F08 y sustituir los bytes ahí presentes por la siguiente secuencia:
00480047XXXXXX08
Siendo XX XX XX el offset donde insertaste la rutina, pero permutado y sumándole +1.
Ejemplo:
Si insertaste la rutina en el offset 0x80A020 entonces la secuencia te quedaría 00 48 00 47 21 A0 80 08

Resultado final:

Una vez insertada la rutina en un lugar libre de nuestra ROM, deberemos ir a los siguientes offsets:
a) 081973E8 y sustituir los bytes ahí presentes por la siguiente secuencia:
00480047XXXXXX08
Siendo XX XX XX el offset donde insertaste la rutina, pero permutado y sumándole +1.
Ejemplo:
Si insertaste la rutina en el offset 0xE61820 entonces la secuencia te quedaría 00 48 00 47 21 18 E6 08

b) 08099738 y cambiar los bytes ahí presentes por 00 00

Resultado final:

Edit: Se me olvidó comentar algo importante (aunque ya está por aquí arriba), la rutina solo funcionará con el tipo de msgbox: MSG_FIND.
Cuidado con eso.
 
Última edición:

Dionen

El Emperador Pálido
¿Es difícil convertir esto en una rutina de "show item image"? Intenté con otras rutinas de OAM, pero tuve problemas probablemente relacionados con el tamaño de la imagen (24x24, no 32x32).
 

OPPAi_DAiSUKi

Usuario habitual
By the way sir do know how to change the SIZE Viewer in Pokemon Emerald into BASE STATS Viewer?...similar to Pokemon Fire Red Mod Exe where there is an option that changes it...i have seen it in Blazing Emerald....and i think its much more useful that the Size Viewer in Pokedex... THANKS in advance!!!
 
Arriba