Registrarse

[ASM] FR, E | Batalla por movimiento

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

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
Código:
mov r0, #0xBF @Flag a verificar por 4
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

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
luego vamos a 0xE2E0 y colocamos esto
Código:
00 4D 28 47 XX XX XX 08
replaza el XX XX XX por la dereccion invertida +1
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
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
Código:
00 4D 28 47 XX XX XX 08
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

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
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
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:
Respuesta: [FR][EM]Batalla por movimiento

una vez que compilo la rutina de "eliminar pokemon"
como hago el script o que hago despues. espero puedas responderme
 

Ancer

Usuario de oro
Respuesta: [FR][EM]Batalla por movimiento

una vez que compilo la rutina de "eliminar pokemon"
como hago el script o que hago despues. espero puedas responderme
Simple si la pusiste flag activa la y listo ,claro recuerda que ”eliminar pokemon" es el complemento de batalla por movimiento si lo has colocado todo debería ir bien

Recuerda crear la tabla en un espacio vacío y que el ultimo offset sea 00 00 00 00
Su pongamos que tiene tablas en las direcciones
28FC64
D72E80

pues la colocas de esta forma
Código:
65 FC 28 08 81 2E D7 08 00 00 00 00
Recuerda que al final de la rutina de batalla por movimiento hay un table 0x8xxxxx la x las cambias por donde creaste la tabla

Como dije para activarla tienes que hacer un setflag 0xflag y para desactivarla clearflag 0xflag

No se si lo explique bien si tienes mas duda me avisas
 
Arriba