Registrarse

[Rutina] [FR - ASM] Expandir la Bolsa

BluRose

chiste, chiste
lo siento por adelante, mi español no es lo mejor

¡hola a todos! este tema sirve para esos que quieren expandir la bolsa en sus hacks de Pokémon Fire Red (US) de versión 1,0.

hay dos rutinas, una que azurile13 de pokecommunity hizo y la otra que yo hice. mientras no necesito creditos, dale creditos a azurile13 por hacer su parte de esto si la usas, por favor...

primer, tienen que insertar esta rutina con cambios a 0x1083F4:
cambia "largest_pocket_size" a tu cantidad mas grande de todos los "pockets" (BALLS, OBJETOS GENERALES, MTS, etc.)
recuerda que es hex
.equ largest_pocket_size, 0xDB
.equ largest_pocket_size_plus_one, largest_pocket_size + 1
.equ strings_size, largest_pocket_size_plus_one * 19

.org 0x08002B9C
malloc:
push {lr}
mov r1, r0

.org 0x081083F4
main:
push {r4, lr}
ldr r4, =(0x0203AD18)
mov r0, #largest_pocket_size_plus_one
lsl r0, r0, #0x3
bl malloc
str r0, [r4, #0x0]
cmp r0, #0x0
beq return
ldr r0, =strings_size
bl malloc
str r0, [r4, #0x4]
cmp r0, #0x0
beq return
mov r0, #0x1

return:
pop {r4}
pop {r1}
bx r1

esta rutina hace el juego poder reservar la cantidad de espacio en ram para todos los objetos~

ahora, la parte que actualmente expande la bolsa
cambia el numero de objetos que quieres en cada sección y entonces insértalo a 0x099E44
.text
.align 2
.thumb

.equ .OBJETOS_GENERALES, 100
.equ .OBJETOS_IMPORTANTES, 100
.equ .POKE_BALLS, 30
.equ .MTS, 120
.equ .BAYAS, 80

main:
ldr r1, bolsa_informacion
ldr r3, bolsa_nueva_direccion
@ objetos generales
str r3, [r1]
mov r0, #.OBJETOS_GENERALES
strb r0, [r1,#4]
@ objetos importantes
lsl r0, r0, #2
add r3, r0
str r3, [r1,#8]
mov r0, #.OBJETOS_IMPORTANTES
strb r0, [r1,#0xC]
@ poke balls
lsl r0, r0, #2
add r3, r0
str r3, [r1,#0x10]
mov r0, #.POKE_BALLS
strb r0, [r1,#0x14]
@ MTS
ldr r0, saveblock_8
ldr r2, [r0]
mov r3, #0xC4
lsl r3, r3, #2
add r2, r2, r3
str r2, [r1,#0x18]
mov r0, #.MTS
strb r0, [r1,#0x1C]
@ bayas
lsl r0, r0, #2
add r2, r0
str r2, [r1,#0x20]
add r1, r1, #0x24
mov r0, #.BAYAS
strb r0, [r1]
bx lr

.align 2

bolsa_informacion:
.word 0x0203988C
bolsa_nueva_direccion:
.word 0x0203B174
saveblock_8:
.word 0x03005008
no tengo una versión compilada de esa rutina porque cambia de persona a persona~

PD: se me olvidó de decir eso:
a la dirección 0x13B8C2:
1D E0
tienes que desactivar el menú de ayuda que se muestra cuando presionas los botones l or r

PD2: hablemos de limites
si usas más que 0x1000 (4096) objetos en los bolsillos de los objetos generales, importantes, y de los poké balls (cuando las cantidades son combinadas), tu rom rompería
pero el límite de cada bolsillo es 255 objetos porque la byte en ram que guarda la posición del cursor que nos muestra cual objeto seleccionamos
y los bolsillos de las bayas y de los mts usan la ram vieja con esta implementación
así si tienes más mts y bayas de TODOS los objetos que el juego te permitía tener, entonces sí, no puedes hacer eso :p

tl;dr en limites: 255 para los bolsillos de objetos generales, importantes, y poké balls
la cantidad de bayas y mts (combinada) no puede ser más de la cantidad que el juego te permitía tener
algo alrededor de 167

antes de terminar, es importante saber que todos los savefiles (?) de hacks comenzados no funcionarían despues de hacer eso.

si tienen preguntas o necesitas aclaraciones, dime and responderé prontamente~

¡que tengan buena suerte!
 
Última edición:
M

Miembro eliminado 28262

Invitado
Una rutina sin duda la mar de interesante, seguramente lo use para el espacio extra en la mochila, más que nada porque durante el juego siempre suele llenarse de objetos que se encuentran por ahí y otros que se dan en la aventura.

Muchas gracias por el aporte! :D
 

Fran

Profesional de WaH
Hey! No había visto esto.
Me recuerda a cuando llegaste y dijiste que nuestro foro tenía muchos gráficos. Pero ustedes tienen cosas como esta xD.
Sin duda lo probaré. Pero no sabes cuantos objetos más entrarían?.
Bien aporte ^^
 

Adke

weeeh
Con esto se podrían añadir nuevos bolsillos editando el código o debería ser algo completamente diferente?

De todas formas es un aportazo muy muy útil, la de veces que se habrán tenido que dejar objetos por tener la mochila llena..
 

FEL!X

ᴛᴜ ᴀᴍɪɢᴏ ᴇʟ ᴇsᴘᴀᴅᴀᴄʜíɴ
Usuario de Oro
¡Se agradece el aporte! Es un añadido interesante que dará juego a llevar más objetos. Si no tiene ningún error, pues digo ¿Porqué no?

Gracias por el aporte,
~Un abrazo
 

BluRose

chiste, chiste
Hey! No había visto esto.
Me recuerda a cuando llegaste y dijiste que nuestro foro tenía muchos gráficos. Pero ustedes tienen cosas como esta xD.
Sin duda lo probaré. Pero no sabes cuantos objetos más entrarían?.
Bien aporte ^^
sí, pero cosas como esto no son vistosas, el jugador no sabe que el juego permite que tenga más objetos, ajaja
no sé cuantos objetos esto te permitiría tener; depiende en la rom porque usa más ram
Con esto se podrían añadir nuevos bolsillos editando el código o debería ser algo completamente diferente?

De todas formas es un aportazo muy muy útil, la de veces que se habrán tenido que dejar objetos por tener la mochila llena..
sólo permite que añadas más objetos a cada bolsilla~
 

KanaCn

由紀カクタス
Buena rutina :)
Usualmente para mi opinión la bolsa tiene poquísimo espacio.
Es super útil si quieres tener más cosas en tu bolsa...
¡Sigue aportandonos más tutoriales !

-Yuki!
 

NozZ C

Ando activo
esta es una de esas cosas que no pueden faltar en un HR trabajado.
Gracias por traer esta rutina al foro.
 

BLAx501!

A veces comento en temas :3
Miembro de honor
Usuario de Platino
Excelente tutorial, @BlueRose, pero me pregunto si existe algún tipo de limitación a la hora de expandir la mochila. Desde luego que la SRAM no es infinita, así que supongo que de algún modo estaremos limitados. ¿Es necesario haber aplicado el Save Block Hack de JPAN para conseguir tener más espacio en la SRAM o con la poca memoria libre que queda en el juego es posible?

Mil gracias por el aporte :awesome:
 

BluRose

chiste, chiste
Excelente tutorial, @BlueRose, pero me pregunto si existe algún tipo de limitación a la hora de expandir la mochila. Desde luego que la SRAM no es infinita, así que supongo que de algún modo estaremos limitados. ¿Es necesario haber aplicado el Save Block Hack de JPAN para conseguir tener más espacio en la SRAM o con la poca memoria libre que queda en el juego es posible?

Mil gracias por el aporte :awesome:
oh my
necesito dejar de asumir que todos lo tengan aplicado guau
gracias por notificarme ajaja
también cambié la ram usada porque muchos proyectos usan "0x0203C000," ahora es el inicio de la ram usada por el menú de ayuda (0x0203B174)

PD: actualmente
ahora que pienso en ello
no debemos necesitar el save block hack
eso sólo mueve estos al save file
0203C000 - 0203C0CC
0203C0CC - 0203C324
0203C324 - 0203CEC4
en efecto, el save block hack nos da EC4 bytes que podemos usar
pero los bytes que el menú de ayuda usa son 0203B174 - 0203F173
supongo que los limites son: 0x4000 / cuatro por cada objeto
si usas más que 0x1000 (4096) objetos en los bolsillos de los objetos generales, importantes, y de los poké balls (cuando las cantidades son combinadas)
y los bolsillos de las bayas y de los mts usan la ram vieja
así si tienes más mts y bayas de TODOS los objetos que el juego te permitiría tener, entonces sí, no puedes hacer eso :p
tendrías que estar loco para tener tantos objetos :p

PD2: definitivamente se debe usar el save block hack y solo usa despues de 203C000-EC4
 
Última edición:

BluRose

chiste, chiste
@J-Steven usó esto y yo tenía que arreglar unas cosas para él (ahora almanece más de 255 objetos en un bolsillo y cosas con las bayas también:
cambia el valor de freespace a alguna dirección en tu rom
tienes que hacer una parche con un binario que solamente tiene 0xFF bytes y despues aplicarlo usando algo como esto
Código:
.equ Berry_Num, 43 @numero de bayas

.equ rom, 0x8000000
.equ freespace, 0xXXXXXX @ sin el 0x08

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Routines Related to Obtaining Items

.org 0x99DFC, 0xFF
ldrh r0, [r0, #0x4]

.org 0x99E1A, 0xFF
ldrh r4, [r4, #0x4]

.org 0x99ED8, 0xFF
ldrh r1, [r0, #0x4]

.org 0x99EEA, 0xFF
lsl r0, r2, #0x10
lsr r0, r0, #0x10

.org 0x99F16, 0xFF
ldrh r1, [r0, #0x4]

.org 0x99F32, 0xFF
lsl r0, r0, #0x10
lsl r2, r0, #0x10

.org 0x99F6E, 0xFF
ldrh r1, [r0, #0x4]

.org 0x99F9A, 0xFF
lsl r0, r0, #0x10
lsr r2, r0, #0x10
ldrh r0, [r3, #0x4]

.org 0x9A02A, 0xFF
ldrh r1, [r0, #0x4]

.org 0x9A05E, 0xFF
lsl r0, r0, #0x10
lsr r2, r0, #0x10
ldrh r0, [r3, #0x4]

.org 0x9A06E, 0xFF
lsl r0, r0, #0x10
asr r0, r0, #0x10

.org 0x9A0B6, 0xFF
ldrh r1, [r0, #0x4]

.org 0x9A0EA, 0xFF
lsl r0, r0, #0x10
lsr r2, r0, #0x10
ldrh r0, [r5, #0x4]

.org 0x9A110, 0xFF
lsl r0, r0, #0x10
asr r1, r0, #0x10

.org 0x9A14C, 0xFF
lsl r0, r0, #0x10
asr r1, r0, #0x10

.org 0x9A186, 0xFF
lsl r0, r0, #0x10
asr r2, r0, #0x10

.org 0x9A204, 0xFF
ldrh r1, [r0, #0x4]

.org 0x9A24E, 0xFF
lsl r0, r0, #0x10
lsr r2, r0, #0x10
ldrh r0, [r6, #0x4]

.org 0x9A2E8, 0xFF
ldrh r1, [r1, #0x4]

.org 0x9A58E, 0xFF @Shifting Items Up
lsl r1, #0x10
lsr r1, #0x10

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@More Berry Stuff

.org 0x13D1C4, 0xFF
    mov r0, #Berry_Num + 1
    lsl r0, #0x3

.org 0x13D33C, 0xFF
BerryNumFixesHook:
    ldr r0, .BerryNumFixesPtr
    bx r0
.align 2
.BerryNumFixesPtr: .word BerryNumFixes + rom + 1

BerryFix2Hook:
.org 0x14A490, 0xFF
    ldr r0, .BerryFix2Ptr
    bx r0
.align 2
.BerryFix2Ptr: .word BerryFix2 + rom + 1

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

.org freespace, 0xFF 

BerryFix1Ptr:
    cmp r6, #0x1
    bls BerryFix1Return
    mov r0, r5
    bl GetItemPocket
    cmp r0, #0x5 @Berry Pouch
    bne BerryFix1Return
    ldr r0, =0x806BDFC | 1
    bx r0

BerryFix1Return:
    ldr r0, =0x806BE22 | 1
    bx r0

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@0x14A490 with r0
BerryFix2:
    cmp r6, #0x0
    beq BerryFix2Return
    mov r0, r4
    bl GetItemMystery2 @BerryId

BerryFix2Return:
    ldr r0, =0x814A4C2 | 1
    bx r0

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@0x13D33C with r0
BerryNumFixes:
    mov r0, r5
    bl GetItemMystery2
    mov r1, r0
    mov r0, r6
    mov r2, #0x2
    ldr r3, =0x813D344 | 1
    bx r3

GetItemMystery2:
    ldr r1, =0x809A9B4 | 1
    bx r1
esto es también por Skeli de pokeco pero la cambié para los usos de mi rutina
 
Arriba