Registrarse

Error al colorear las estadísticas favorecidas y no favorecidas según la naturaleza en Pokémon Esmeralda en español.

Estado
Cerrado para nuevas respuestas.

Cronocato

Profesional de WaH
Hola¡ Tras una búsqueda por Internet encontré un par de rutinas ASM que cambian el color de la estadística de un Pokémon favorecida por la naturaleza de color negro a rojo y la estadifica no favorecida de negro a azul. La página es Development: ASM Resource Thread - Page 36 - The PokéCommunity Forums y las rutinas son dadas por el usuario DizzyEgg. En dicha página el usuario muestra dos rutinas LeftStats color change y RightStats color change.Estas son las rutinas:

LeftStats color change:

.text
.thumb
.thumb_func
.align 2

main:
push {r5}
sub sp, sp, #0x20
ldr r0, [r4] @pokemon summary pointer
add r0, #0xA3 @poke nature
ldrb r1, [r0]
ldr r0, nature_stat_table
lsl r2, r1, #2
add r2, r1, r2 @multiply by 5
add r2, r2, r0 @r2 contains nature info
ldr r3, left_stats_string
mov r1, sp
mov r5, #0

handle_hp:
ldrb r0, [r3, r5]
strb r0, [r1, r5]
add r5, #1
cmp r5, #6
bne handle_hp
add r3, #6
add r1, #6
mov r5, #0

handle_atk:
ldrb r0, [r2]
cmp r0, #1
beq red_font_atk
cmp r0, #0xFF
bne copy_atk
bl blue_font
b copy_atk

red_font_atk:
bl red_font

copy_atk:
ldrb r0, [r3, r5]
strb r0, [r1, r5]
add r5, #1
cmp r5, #3
bne copy_atk
add r3, #3
add r1, #3
mov r5, #0

handle_def:
add r2, #1
ldrb r0, [r2]
cmp r0, #1
beq red_font_def
cmp r0, #0xFF
beq blue_font_def
bl default_font
b copy_def

red_font_def:
bl red_font
b copy_def

blue_font_def:
bl blue_font

copy_def:
ldrb r0, [r3, r5]
strb r0, [r1, r5]
add r5, #1
cmp r5, #3
bne copy_def

copy_string:
ldr r0, displayed_string
mov r1, sp
ldr r2, special_f7_string_fct
bl callvia_r2

return:
mov r0, r9
add sp, sp, #0x20
pop {r5}
ldr r2, =(0x081C37A8 + 1)
b callvia_r2

blue_font: @FC 01 07
mov r0, #0xFC
strb r0, [r1]
add r1, #1
mov r0, #1
strb r0, [r1]
add r1, #1
mov r0, #7 @color of the lowered stat
strb r0, [r1]
add r1, #1
bx lr

red_font: @FC 01 05
mov r0, #0xFC
strb r0, [r1]
add r1, #1
mov r0, #1
strb r0, [r1]
add r1, #1
mov r0, #5 @color of the raised stat
strb r0, [r1]
add r1, #1
bx lr

default_font: @FC 01 01
mov r0, #0xFC
strb r0, [r1]
add r1, #1
mov r0, #1
strb r0, [r1]
add r1, #1
strb r0, [r1]
add r1, #1
bx lr

callvia_r2:
bx r2

.align 2

nature_stat_table: .word 0x0831E818
left_stats_string: .word 0x0861CE82
displayed_string: .word 0x02021FC4
special_f7_string_fct: .word 0x081AFC29

@at 0x1C379E insert: 00 00 00 4A 10 47 XX+1 XX XX 08 where XX is the address of the inserted routine

RightStats color change:

.text
.thumb
.thumb_func
.align 2

main:
push {r5}
sub sp, sp, #0x20
ldr r0, [r4] @pokemon summary pointer
add r0, #0xA3 @poke nature
ldrb r1, [r0]
ldr r0, nature_stat_table
lsl r2, r1, #2
add r2, r1, r2 @multiply by 5
add r2, r2, r0 @r2 contains nature info
add r2, #3 @r2 contains beg of spatk stat
ldr r3, right_stats_string
mov r1, sp
mov r5, #0

handle_spatk:
ldrb r0, [r2]
cmp r0, #1
beq red_font_spatk
cmp r0, #0xFF
bne copy_spatk
bl blue_font
b copy_spatk

red_font_spatk:
bl red_font

copy_spatk:
ldrb r0, [r3, r5]
strb r0, [r1, r5]
add r5, #1
cmp r5, #3
bne copy_spatk
add r3, #3
add r1, #3
mov r5, #0

handle_spdef:
add r2, #1
ldrb r0, [r2]
cmp r0, #1
beq red_font_spdef
cmp r0, #0xFF
beq blue_font_spdef
bl default_font
b copy_spdef

red_font_spdef:
bl red_font
b copy_spdef

blue_font_spdef:
bl blue_font

copy_spdef:
ldrb r0, [r3, r5]
strb r0, [r1, r5]
add r5, #1
cmp r5, #3
bne copy_spdef
add r3, #3
add r1, #3
mov r5, #0

handle_spd:
sub r2, #2
ldrb r0, [r2]
cmp r0, #1
beq red_font_spd
cmp r0, #0xFF
beq blue_font_spd
bl default_font
b copy_spd

red_font_spd:
bl red_font
b copy_spd

blue_font_spd:
bl blue_font

copy_spd:
ldrb r0, [r3, r5]
strb r0, [r1, r5]
add r5, #1
cmp r5, #3
bne copy_spd
add r3, #3
add r1, #3

return:
ldr r0, displayed_string
mov r1, sp
ldr r2, special_f7_string_fct
bl callvia_r2
add sp, sp, #0x20
pop {r5}
ldr r2, =(0x081C386C + 1)
bx r2

blue_font: @FC 01 07
mov r0, #0xFC
strb r0, [r1]
add r1, #1
mov r0, #1
strb r0, [r1]
add r1, #1
mov r0, #7 @color of the lowered stat
strb r0, [r1]
add r1, #1
bx lr

red_font: @FC 01 05
mov r0, #0xFC
strb r0, [r1]
add r1, #1
mov r0, #1
strb r0, [r1]
add r1, #1
mov r0, #5 @color of the raised stat
strb r0, [r1]
add r1, #1
bx lr

default_font: @FC 01 01
mov r0, #0xFC
strb r0, [r1]
add r1, #1
mov r0, #1
strb r0, [r1]
add r1, #1
strb r0, [r1]
add r1, #1
bx lr

callvia_r2:
bx r2

.align 2

nature_stat_table: .word 0x0831E818
right_stats_string: .word 0x0861CE8E
displayed_string: .word 0x02021FC4
special_f7_string_fct: .word 0x081AFC29

@at 0x1C3864 insert 00 4A 10 47 XX+1 XX XX 08

(2) Seguí un tutorial de Cheve para generar los archivos *.bin a partir de las rutinas *.asm que encontré en http://whackahack.com/foro/t-25206/duda-como-insertar-rutina-asm-solucionado Con el editor Hexadecimal HxD inserte la rutina LeftStats.bin (cambio de color para las estadísticas izquierdas) en el offset 0xE3CF64 de la rom en inglés y la rutina RightStats.bin en el offset 0xE3D044 de la misma. Luego, con el editor hexadecimal HxD, sustituí el código hexadecimal pedido al final de las instrucciones de las rutinas leftStat y RightStat en los offsets 0x1C379E y 0x1C3864 de la rom, respectivamente. Guarde los cambios en la rom y me funciono.Aquí la imagen:


A fin de hacer funcionar las rutinas en Pokémon Esmeralda en español, busque los offsets equivalentes a aquellos que aparecen en las rutinas los cuales son:

0x831E818 por 0x8324AD4
0x861CE82 por 0x861F79E
0x81AFC29 --- 0x81AF849
0x81C37A8 --- 0x81C33C8
0x81C386C --- 0x81C348C
0x81C3864 --- 0x81C3484

Con offsets equivalentes quiero decir que son aquellos que tienen más o menos el mismo entorno de valores hexadecimales. Hice lo mismo que para la rom en inglés, pero solo me funciona la rutina LeftStats. En las estadísticas derechas hay errores. Aquí la imagen:


Soy nuevo en este del ASM, pero me parece que si la rutina LeftStat funciono con los cambios que hice también debe hacerlo la rutina rightStats. Alguien puede ayudarme a explicar este error.
 
Estado
Cerrado para nuevas respuestas.
Arriba