Ancer
Usuario de oro
Hola a todos hoy les traigo el "Batalla por movimiento" y sus complementos de @FBI que posteo en pokecommunity, y el de @HidoranBlaze que lo porteo a esmeralda (aunque había una parte mal pero ya lo arregle )
Bueno lo primero me imagino que es importante dar la explicación de cómo funciona (si no la quieres pasa directo a abajo) ya que vi que hay gente que dice que tiene que tener explicación los post -\('-')/-
Esta rutina se ejecuta 4 veces por turno y lo que hace es ejecutar otras rutinas que serían los complementos. Esta necesitara una flag que se multiplicara por cuatro, es decir:
Ahora si la rutina
luego vamos a 0xE2E0 y colocamos esto
replaza el XX XX XX por la dereccion invertida +1
Donde esta @xxxxxxxxxxxx es donde estaba mal ya que @HidoranBlaze puso 0x806E6D0 y ese es el de Fire red no el de esmeralda
luego vamos a 0x33BF0 y colocamos esto
replaza el XX XX XX por la dereccion invertida +1
Bien ya llegado a este punto verán que al final de las rutina hay un ".table:" y que pondremos hay? las rutinas ? NO, en ese lugar van a poner un lugar donde haya espacio libre (toma 4 byte por rutina) y en ese lugar libre es donde colocaran el offset invertido +1
Para explicarlo mejor en .table pondrán el offset de una dirección libre tipo 9c7c20 y hay colocaran los offset de las rutinas que utilicen
IMPORTANTE EL ULTIMO OFFSET DEBE SER 00 00 00 00
Como ultimo les sugiero colocar flag diferentes a cada una para que puedan utilizarlas en distintas ocasiónesela flag de la de batalla por movimiento es si quieres usar los complementos si esta desactivada no utiliza los complementos
Bueno creo que eso es todo si tiene dudas pregunten
Bueno lo primero me imagino que es importante dar la explicación de cómo funciona (si no la quieres pasa directo a abajo) ya que vi que hay gente que dice que tiene que tener explicación los post -\('-')/-
Esta rutina se ejecuta 4 veces por turno y lo que hace es ejecutar otras rutinas que serían los complementos. Esta necesitara una flag que se multiplicara por cuatro, es decir:
esto me confundió a mí y como esta rutina no se utiliza casi (que no debería) cuando pregunte no me respondieron, pero es así
en hexadecimal BFx4=2FC, es decir
tienen que colocar en 0xBF la flag de tu preferencia dividida entre 4, es decir si es 4 colocan 1 si es 14 colocan 5 y si es 3C colocan F
recuerden que es en hexadecimal
en hexadecimal BFx4=2FC, es decir
Código:
mov r0, #0xBF @Flag a verificar por 4
recuerden que es en hexadecimal
Ahora si la rutina
Código:
.text
.align 2
.thumb
.thumb_func
main:
push {r0-r4}
mov r0, #0xBF @Flag a revisar por 4
lsl r0, r0, #0x2
ldr r1, = (0x806E6D0 +1)
bl linker
cmp r0, #0x0
beq noCrash
ldr r4, .table
loop:
ldr r1, [r4]
cmp r1, #0x0 @Ve la tabla si esta vacía
beq noCrash
bl linker @Llama a la tabla
add r4, r4, #0x4 @Vela si quiete rutina en la tabla
b loop
noCrash:
pop {r0-r4}
lsl r0, r0, #0x18
lsr r0, r0, #0x18
mov r10, r0
lsl r1, r1, #0x10
lsr r1, r1, #0x10
ldr r2, =(0x2022874)
ldr r0, =(0x800E2EA +1)
bx r0
linker:
bx r1
.align 2
.table:
.word 0x8xxxxxx @donde van la tabla de rutinas
Código:
00 4D 28 47 XX XX XX 08
Código:
.text
.align 2
.thumb
.thumb_func
main:
push {r0-r4}
mov r0, #0xBF Flag a revisar por 4
lsl r0, r0, #0x2
ldr r1, =(0x809D790 +1) @xxxxxxxxxxxx
bl linker
cmp r0, #0x0
beq noCrash
ldr r4, .table
loop:
ldr r1, [r4]
cmp r1, #0x0
beq noCrash
bl linker @Llama a la tabla
add r4, r4, #0x4 @Vela si quiete rutina en la tabla
b loop
noCrash:
pop {r0-r4}
lsr r0, r0, #0x18
mov r10, r0
lsl r1, r1, #0x10
lsr r1, r1, #0x10
ldr r2, =(0x2022D10)
ldr r0, =(0x8033BFA +1)
bx r0
linker:
bx r1
.align 2
.table:
.word 0x08xxxxxx @donde van la tabla de rutinas
luego vamos a 0x33BF0 y colocamos esto
Código:
00 4D 28 47 XX XX XX 08
Bien ya llegado a este punto verán que al final de las rutina hay un ".table:" y que pondremos hay? las rutinas ? NO, en ese lugar van a poner un lugar donde haya espacio libre (toma 4 byte por rutina) y en ese lugar libre es donde colocaran el offset invertido +1
Para explicarlo mejor en .table pondrán el offset de una dirección libre tipo 9c7c20 y hay colocaran los offset de las rutinas que utilicen
IMPORTANTE EL ULTIMO OFFSET DEBE SER 00 00 00 00
Como ultimo les sugiero colocar flag diferentes a cada una para que puedan utilizarlas en distintas ocasiónesela flag de la de batalla por movimiento es si quieres usar los complementos si esta desactivada no utiliza los complementos
esta elimina a los Pokémon que se hayan debilitado cuando se termine la batalla así que si lo revives antes todo bien
como extra te recomiendo usar esta rutina junto a "eliminar partida si pierdes"(para evitar las molestias lo estare subiendo despues de este)ya que dará error si la enfermera te curar los Pokémon que no tienes (para ser específico comienzan a salir como 40 Pokeball y no te deja moverte"
si quieres usarla con flag elimina los '@' del inicio si quieres que sea permanente déjaselos úsalo según te convenga
como extra te recomiendo usar esta rutina junto a "eliminar partida si pierdes"(para evitar las molestias lo estare subiendo despues de este)ya que dará error si la enfermera te curar los Pokémon que no tienes (para ser específico comienzan a salir como 40 Pokeball y no te deja moverte"
si quieres usarla con flag elimina los '@' del inicio si quieres que sea permanente déjaselos úsalo según te convenga
Código:
.text
.align 2
.thumb
.thumb_func
main:
push {r0-r5, lr}
@mov r0, #0xFlag
@lsl r0, r0, #0x2
@ldr r3, =(0x806E6D0 +1)
@bl linker
@cmp r0, #0x0
@beq end
ldr r0, =(0x2023E8A)
ldrb r0, [r0]
cmp r0, #0x0
beq realEnd
mov r5, #0x0
loop:
ldr r0, =(0x2024029)
ldrb r4, [r0]
cmp r5, r4
beq end
ldr r0, =(0x2024284)
mov r1, #0x64
mul r1, r1, r5 @slot
add r0, r0, r1 @address
mov r1, #0x39 @C_HP
ldr r3, =(0x803FBE8 +1)
bl linker
cmp r0, #0x0
beq adjustSlots
skip:
add r5, r5, #0x1
b loop
adjustSlots:
cmp r5, #0x5
bge writeLastZero
mov r2, #0x5
sub r2, r2, r5
mov r0, #0x64
mul r2, r2, r0 @size
mov r1, r5
mul r1, r1, r0
ldr r0, =(0x2024284)
add r0, r0, r1 @dest
mov r1, #0x64
add r1, r0, r1 @src
ldr r3, =(0x8040B08 +1)
bl linker
writeLastZero:
ldr r0, =(0x2024478)
mov r1, #0x0
mov r2, #0x64
ldr r3, =(0x81E5ED8 +1)
bl linker
correctCounters:
ldr r0, =(0x2024029)
ldrb r1, [r0]
sub r1, r1, #0x1
strb r1, [r0]
next:
mov r5, #0x0
b loop
end:
ldr r0, =(0x2024029)
ldrb r0, [r0]
cmp r0, #0x0
bne realEnd
mov r0, #0x5E
lsl r0, r0, #0x4
ldr r3, =(0x806E6A8 +1)
bl linker
b realEnd
linker:
bx r3
realEnd:
pop {r0-r5, pc}
.align 2
Código:
.text
.align 2
.thumb
.thumb_func
main:
push {r0-r5, lr}
@mov r0, #0xFlag
@lsl r0, r0, #0x2
@ldr r3, =(0x809d790 +1)
@bl linker
@cmp r0, #0x0
@beq end
ldr r0, =(0x202433A)
ldrb r0, [r0]
cmp r0, #0x0
beq realEnd
mov r5, #0x0
loop:
ldr r0, =(0x20244E9)
ldrb r4, [r0]
cmp r5, r4
beq end
ldr r0, =(0x20244EC)
mov r1, #0x64
mul r1, r1, r5 @slot
add r0, r0, r1 @address
mov r1, #0x39 @C_HP
push {r4-r5}
ldr r3, =(0x806A518 +1)
bl linker
pop {r4-r5}
cmp r0, #0x0
beq adjustSlots
skip:
add r5, r5, #0x1
b loop
adjustSlots:
cmp r5, #0x5
bge writeLastZero
mov r2, #0x5
sub r2, r2, r5
mov r0, #0x64
mul r2, r2, r0 @size
mov r1, r5
mul r1, r1, r0
ldr r0, =(0x20244EC)
add r0, r0, r1 @dest
mov r1, #0x64
add r1, r0, r1 @src
push {r4-r5}
ldr r3, =(0x806B408 +1)
bl linker
pop {r4-r5}
writeLastZero:
ldr r0, =(0x2024618)
mov r1, #0x0
mov r2, #0x64
push {r4-r5}
ldr r3, =(0x82E9434 +1)
bl linker
pop {r4-r5}
correctCounters:
ldr r0, =(0x20244E9)
ldrb r1, [r0]
sub r1, r1, #0x1
strb r1, [r0]
next:
mov r5, #0x0
b loop
end:
ldr r0, =(0x20244E9)
ldrb r0, [r0]
cmp r0, #0x0
bne realEnd
mov r0, #0x5E
lsl r0, r0, #0x4
ldr r3, =(0x809D768 +1)
bl linker
b realEnd
linker:
bx r3
realEnd:
pop {r0-r5, pc}
.align 2
Cuando pierdes una batalla te sale el dialogo que corriste al centro Pokémon esta rutina lo que hace es evitar eso y te deja en el mismo lugar, yo digo que se puede utilizar si quieres hacer una parte en que pongas un entrenador o Pokémon RE OP y un dialogo posterior
La original no tiene para flag pero yo la modifique para que puedan parle un uso más selectivo
Y como en la de arriba si no quieres que sea con flag sino que permanente quita el '@' del inicio y el final
La original no tiene para flag pero yo la modifique para que puedan parle un uso más selectivo
Y como en la de arriba si no quieres que sea con flag sino que permanente quita el '@' del inicio y el final
Código:
.text
.align 2
.thumb
.thumb_func
main:
push {r0-r1, lr}
@mov r0, #0xFlag
@lsl r0, r0, #0x2
@ldr r1, =(0x806E6D0 +1)
@bl linker
@cmp r0, #0x0
@beq end
ldr r0, =(0x2023E8A)
ldrb r1, [r0]
cmp r1, #0x1
bhi setZero
b end
setZero:
cmp r1, #0x5
beq end
mov r1, #0x0
strb r1, [r0]
end:
pop {r0-r1, pc}
[MENTION=40760]link[/MENTION]er:
@bx r1
Código:
.text
.align 2
.thumb
.thumb_func
main:
push {r0-r1, lr}
@mov r0, #0xFlag
@lsl r0, r0, #0x2
@ldr r1, =(0x809d790 +1)
@bl linker
@cmp r0, #0x0
@beq end
ldr r0, =(0x202433A)
ldrb r1, [r0]
cmp r1, #0x1
bhi setZero
b end
setZero:
cmp r1, #0x5
beq end
mov r1, #0x0
strb r1, [r0]
end:
pop {r0-r1, pc}
[MENTION=40760]link[/MENTION]er:
@bx r1
Bueno creo que eso es todo si tiene dudas pregunten
Última edición: