Author Id: 13374 Author Name: Javi4315♪ Post Content: A raíz de la duda de un usuario para recibir un pokémon con nombre predefinido, se me ocurrió una idea para mi hack en base a eso. Así que decidí escribir la rutina y, por si a alguien le interesa también, la comparto. Y ya que estamos, créditos necesarios :P La rutina .align 2 .thumb push {r0-r4,lr} ldr r0, .load_pointer ldr r0, [r0] ldr r2, .var_8000 ldrb r2, [r2] mov r3, #0x64 mul r2, r3 add r2, #0x8 ldr r3, .pkmn_party add r3, r2 ldr r1, .var_8000 ldrb r1, [r1] add r1, #0x1 mov r4, #0x0 bucle1: ldrb r2, [r0,r4] cmp r2, #0xFF beq completar cmp r4, #0xA beq fin strb r2, [r3,r4] add r4, #0x1 b bucle1 completar: cmp r4, #0xA beq fin ldr r2, =0xFF strb r2, [r3,r4] mov r2, #0x0 add r4, #0x1 b completar fin: pop {r0-r4,pc} .load_pointer: .word 0x03000f14 .var_8000: .word 0x020370B8 .pkmn_party: .word 0x02024284 Y aquí la tenéis directamente compilada: 1F B5 0E 48 00 68 0E 4A 12 78 64 23 5A 43 08 32 0C 4B 9B 18 0A 49 09 78 01 31 00 24 02 5D FF 2A 04 D0 0A 2C 09 D0 1A 55 01 34 F7 E7 0A 2C 04 D0 FF 22 1A 55 00 22 01 34 F8 E7 1F BD 14 0F 00 03 B8 70 03 02 84 42 02 02 Ya sabéis, la insertáis en una zona vacía del rom. El offset donde lo insertéis debe acabar en 0, 4, 8 o C. Es decir, en el offset 0x801343, por ejemplo, no lo podríais insertar porque acaba en 3. Además, para llamar a la rutina, le debéis sumar 1. Es decir, si la insertas en el offset 0xB00000, luego tendrás que poner "callasm 0xB00001". La rutina es para FR. Buscaré los offsets para ruby y actualizaré más adelante. El script El script es sencillísimo. Pero es necesario tener en cuenta que la rutina sólo funciona si hay espacio en el equipo. Es decir, si el pokémon va al PC, no funciona. El script es el siguiente: [quote](...) loadpointer 0x0 @nombre 'Compila el nombre countpokemon 'Comprueba la cantidad de pokémon en el equipo copyvar 0x8000 LASTRESULT 'Guarda la cantidad en 0x8000 compare 0x8000 0x6 'Comprueba si tienes 6 (completo) if 0x1 goto @noespacio 'Si los tienes va a @noespacio givepokemon 0x(pokemon) 0x(nivel) 0x(objeto) 0x0 0x0 0x0 callasm 0x(offset de la rutina + 1) 'Ejecuta la rutina (...) #org @noespacio (lo que pasa si no tienes espacio en el equipo) (...) #org @nombre = PIPIOLO[/quote] Hay que tener en cuenta algunos aspectos: [LIST] [*]Son 10 caracteres máximos para el nombre del pokémon. Si pones más, sólo se leerán los 10 primeros. [*]El número de pokémon (obtenido con countpokemon) siempre deberá guardarse en la variable 0x8000, ya que es la que lee la rutina. [*]La rutina debe ejecutarse (callasm) después de tener el número de pokémon en la variable 0x8000 y de haber hecho el givepokemon. [/LIST] Y eso es todo. Yo la he estado probando y no me da ningún problema. Pero si no os va o tenéis algún problema me lo decís ;D