Ver Mensaje Individual
  #1  
20/12/2018
Predeterminado GBA | ASM | Check STAT
CHECK STAT

Es una rutina realmente sencilla que es muy fácil de usar. Su función es decir si una determinada caracteristica de un determinado Pokemon de equipo es menor, igual o superior a un valor a determinar.

Parámetros recividos:

Variable 0x8003: Slot del Pokemon en el equipo (0x0 para el primero y 0x5 para el sexto)

Variable 0x8004: Característica a analizar, a continuación dejo una tabla

Variable 0x8005: Valor al que comparar la estadística

----------------------------------------------------------------------

Parametros devueltos:

Variable 0x8003 Devuelve 0x0 si la estadistica del Pokemon es menor a nuestro valor, 0x1 si es igual y 0x2 si es mayor

ID de cada estadística

0x0: Max PS
0x1: Attack
0x2: Defense
0x3: Speed
0x4: Special Attack
0x5: Special Defense


Rutina para Fire Red USA:

Código:
//Check STATS
//Esta rutina comprueba si un determinado stat de un determinado Pokemon
//del equipo es menor, igual o mayor a un valor a determinar

.text
.align 2
.thumb

main:
	push {r0-r2,lr}
	ldr r0, var_8003
	ldrh r0, [r0] //slot del Pokemon
	mov r1, #0x64
	mul r0, r1
	ldr r1, firstpokemon
	add r0, r0, r1
	add r0, r0, #0x58 //offset de max PS
	ldr r1, var_8004
	ldrh r1, [r1]
	lsl r1, r1, #0x2
	add r0, r0, r1
	ldrh r0, [r0] //valor de la estadística deseada
	ldr r1, var_8005
	ldrh r1, [r1] //parámetro al que comparar la estadística
	cmp r0, r1
	beq equal
	cmp r0, r1
	blo minus
	mov r0, #0x2
	b end	


equal:
	mov r0, #0x1
	b end

minus:
	mov r0, #0x0
	
end:
	ldr r1, var_8003
	strh r0, [r1]
	pop {r0-r2,pc}

.align 2
	var_8003:	.word 0x020370BE
	var_8004:	.word 0x020370C0
	var_8005:	.word 0x020370C2
	firstpokemon:	.word 0x02024284
Créditos @Turambar por la rutina

Como siempre dejo los offsets que haya usado para que puedan ser editados para poder usar la rutina en otras ROMs.

Script de ejemplo:

Código:
#dynamic 0x800000
#org @start
...
setvar 0x8003 0x0
setvar 0x8004 0x2
setvar 0x8005 0xA
callasm 0x(offset de la rutina +1)
compare 0x8003 0x0
if 0x1 call @minus
compare 0x8003 0x1
if 0x1 call @equal
compare 0x8003 0x2
if 0x1 call @plus
...
Cualquier duda, cualquier sugerencia, cualquier cosa comentad sin miedo

Última edición por Turambar; 31/12/2018 a las 10:50