Una duda,cuando cambias de personaje el id del pokemon no cambia,soy relativamente nuevo en el tema de romhacking,se podria cambiar la id de los pokemon al cambiar de personaje? o ya seria muy complicado?
writebytetooffset 0x(valor) 0x02024EA4
writebytetooffset 0x(valor) 0x02024EA5
...
special 0x8E
@;====================================================================================
@; Rutina para cargar nombres personalizados
@;====================================================================================
@; Crear una tabla con la siguiente estructura:
@; [Nombre(máx 7 caracteres)][Género(00 = Chico, 01 = Chica)]
@; Si el nombre tiene menos de 7 caracteres completar con 0xFF
@;====================================================================================
@; Instalación:
@;====================================================================================
@; Compilar la rutina e insertar en un offset alineado
@;====================================================================================
@; Uso:
@;====================================================================================
@; Settear la variable 0x8000 con 0 para restaurar o 1 para cambiar el nombre
@; Settear la variable 0x8001 con el valor del índice de la tabla que será usado
@; Llamar la rutina en modo Little-Endian (Offset+1)
@;====================================================================================
.thumb
.align 2
Main:
push {lr}
ldr r0, .var_8000
ldrh r0, [r0]
cmp r0, #1 [MENTION=26827]Camb[/MENTION]ia de nombre?
beq Change_Name
Restore_Name:
ldr r0, .Backup_Hero
ldr r0, [r0]
cmp r0, #0
beq Backup
ldr r0, .Backup_Hero
ldr r1, .Name
ldr r1, [r1]
mov r2, #4
swi 0xB
ldr r0, [r0, #0x8]
ldrb r0, [r0]
ldr r1, .Name
ldr r1, [r1, #0x8]
strb r0, [r1]
pop {pc}
Change_Name:
ldr r0, .Backup_Hero
ldr r0, [r0]
cmp r0, #0
beq Backup
ldr r0, .var_8001
ldrh r0, [r0]
mov r1, #0x8
mul r0, r1
ldr r1, .Table
add r0, r0, r1
ldr r1, .Name
ldr r1, [r1]
mov r2, #4
swi 0xB
mov r2, #0xFF
strb r2, [r1, #0x7]
ldrb r0, [r0, #0x7]
strb r0, [r1, #0x8]
pop {pc}
Backup:
push {lr}
ldr r0, .Name
ldr r0, [r0]
ldr r1, .Backup_Hero
mov r2, #0x5
swi 0xB
pop {pc}
.align 2
.var_8000: .word 0x020370B8 @0 = restaura, 1 = cambia
.var_8001: .word 0x020370BA [MENTION=38955]val[/MENTION]or = índice del nombre + género de la tabla
.Name: .word 0x0300500C @puntero dinámico del nombre
.Table: .word 0x08800000 @Tabla
.Backup_Hero: .word 0x020200F0 @RAM donde se guarda el nombre original y su género
En ese caso deshabilitar la ganancia de experiencia de Pokémon intercambiados y la obedencia por medallas sería una opción factible.Cambiar el ID del personaje o de los pokémon acarrea algunos detalles que generalmente no son deseables. Por ejemplo, al restablecer el ID o usar uno distinto, cada pokémon con un ID distinto al del personaje en ese determinado momento se tratará como un pokémon de intercambio y ya se sabe lo que esto significa:
- Adquiere más experiencia que los capturados por el jugador
- Se requiere de las medallas para que obedezcan a partir de determinados niveles
Hace un tiempo hice unas rutinas para cambiar el nombre y el género del personaje en Fire Red pero teniendo cuidado de no cambiar el ID precisamente para evitar esos problema y como bien lo ha indicado MAIDEN la dirección de la data del personaje es dinámica y el puntero a esa dirección se encuentra almacenada en 0x0300500C.
Aquí una de las rutinas que hice:
Y su funcionamiento In Game:Código:@;==================================================================================== @; Rutina para cargar nombres personalizados @;==================================================================================== @; Crear una tabla con la siguiente estructura: @; [Nombre(máx 7 caracteres)][Género(00 = Chico, 01 = Chica)] @; Si el nombre tiene menos de 7 caracteres completar con 0xFF @;==================================================================================== @; Instalación: @;==================================================================================== @; Compilar la rutina e insertar en un offset alineado @;==================================================================================== @; Uso: @;==================================================================================== @; Settear la variable 0x8000 con 0 para restaurar o 1 para cambiar el nombre @; Settear la variable 0x8001 con el valor del índice de la tabla que será usado @; Llamar la rutina en modo Little-Endian (Offset+1) @;==================================================================================== .thumb .align 2 Main: push {lr} ldr r0, .var_8000 ldrh r0, [r0] cmp r0, #1 [MENTION=26827]Camb[/MENTION]ia de nombre? beq Change_Name Restore_Name: ldr r0, .Backup_Hero ldr r0, [r0] cmp r0, #0 beq Backup ldr r0, .Backup_Hero ldr r1, .Name ldr r1, [r1] mov r2, #4 swi 0xB ldr r0, [r0, #0x8] ldrb r0, [r0] ldr r1, .Name ldr r1, [r1, #0x8] strb r0, [r1] pop {pc} Change_Name: ldr r0, .Backup_Hero ldr r0, [r0] cmp r0, #0 beq Backup ldr r0, .var_8001 ldrh r0, [r0] mov r1, #0x8 mul r0, r1 ldr r1, .Table add r0, r0, r1 ldr r1, .Name ldr r1, [r1] mov r2, #4 swi 0xB mov r2, #0xFF strb r2, [r1, #0x7] ldrb r0, [r0, #0x7] strb r0, [r1, #0x8] pop {pc} Backup: push {lr} ldr r0, .Name ldr r0, [r0] ldr r1, .Backup_Hero mov r2, #0x5 swi 0xB pop {pc} .align 2 .var_8000: .word 0x020370B8 @0 = restaura, 1 = cambia .var_8001: .word 0x020370BA [MENTION=38955]val[/MENTION]or = índice del nombre + género de la tabla .Name: .word 0x0300500C @puntero dinámico del nombre .Table: .word 0x08800000 @Tabla .Backup_Hero: .word 0x020200F0 @RAM donde se guarda el nombre original y su género
En este caso como se cambia el byte del género, se cambia el sprite de la trainer card y el backsprite en batalla.
En definitiva, respondiendo a tu duda, ¡si! se puede cambiar el ID pero a mi parecer no sería recomendable. Claro, depende de lo que se desee hacer.
¡Excelente idea!En ese caso deshabilitar la ganancia de experiencia de Pokémon intercambiados y la obedencia por medallas sería una opción factible.