Ver Mensaje Individual
  #11  
22/11/2018
Predeterminado Respuesta: [ASM] Checktype
Dicho por Finrod Felagund Ver mensaje
Checktype

Hoy os traigo otra pequeña rutina que de seguro para más de uno le es útil. Ni más ni menos que analizar si un determinado Pokémon de nuestro equipo es de un tipo que nosotros escojamos.

Esta rutina comprueba tanto el primer tipo como el segundo.

La rutina:

Código:
.text
.align 2
.thumb

main:
	push {r0-r2, lr}
	mov r1, #0x64
	ldr r0, var_8004
	ldrh r0, [r0]
	mul r0, r0, r1
	ldr r1, pokemondata
	add r0, r0, r1
	mov r1, #0xB
	ldr r2, pokedecrypt
	bl linker
	mov r1, #0x1C
	mul r0, r0, r1
	ldr r1, tablestart
	sub r1, r1, #0x1C
	add r0, r0, r1
	mov r2, r0
	ldrb r0, [r0]
	ldr r1, var_8005
	ldrh r1, [r1]
	cmp r0, r1
	beq label
	mov r0, r2
	add r0, r0, #0x1
	ldrb r0, [r0]
	ldr r1, var_8005
	ldrh r1, [r1]
	cmp r0, r1
	beq label
	mov r0, #0x0
	ldr r1, var_8005
	strh r0, [r1]
	b end

label:
	mov r0, #0x1
	ldr r1, var_8005
	strh r0, [r1]
	b end

linker:
	bx r2

end:
	pop {r0-r2, pc}
	


.align 2
	var_8004:	.word 0x020370C0
	var_8005:	.word 0x020370C2
	tablestart:	.word 0x082547A6
	pokemondata:	.word 0x02024284
	pokedecrypt:	.word 0x0803FBE9
Créditos a @Heavy Metal Kaktus por la rutina.

La rutina compilada:

Código:
07 B5 64 21 12 48 00 88 48 43 14 49 40 18 0B 21 13 4A 00 F0 1A F8 1C 21 48 43 0F 49 1C 39 40 18 02 1C 00 78 0B 49 09 88 88 42 0A D0 10 1C 01 30 00 78 08 49 09 88 88 42 03 D0 00 20 05 49 08 80 04 E0 01 20 03 49 08 80 00 E0 10 47 07 BD C0 46 C0 70 03 02 C2 70 03 02 A6 47 25 08 84 42 02 02 E9 FB 03 08


Tipos Pokémon

NORMAL 0x0
FIGHT 0x1
FLYING 0x2
POISON 0x3
GROUND 0x4
ROCK 0x5
BUG 0x6
GHOST 0x7
STEEL 0x8
??? 0x9
FIRE 0xA
WATER 0xB
GRASS 0xC
ELECTR 0xD
PSYCHC 0xE
ICE 0xF
DRAGON 0x10
DARK 0x11


Esto es todo por hoy. Espero que os sirva
Como seria el script base para el checktype?