Javi4315
Puntuación de reacción
1.955

Mensajes de perfil Última actividad Publicaciones Acerca

  • Y que es lo que ase? Mandame video o algo!
    Si quieres ejecutar otra rutina desde tu rutina has de hacer un branch.
    Vamos un "b loquesea" seria branch normal. (Es ideal para hacer saltos dentro de la rutina)
    Bl loquesea = branch with link (es como un "call" ya que pone en r14 el punto de la rutina donde volveras, y ha de der en rutinas cercanas tambien).

    Ldr r7, .offset_rutina+1
    Bx r7
    --> branch exchangue, es para hacer un salto sin limite de tamaño y con cambio de modo del procesador, y no es obligatorio cambiar el modo, elijes que modo usaras con el +1..

    Blx = branch link and exchange, finciona igual que el de arriba pero con la diferencia que te pone en r14, (el link register) donde volver.

    Si quieres ejecutar scripts desde rutinas, has de hacerlo mediante el tutorial de sonic carvalho que es una rtina que permite llamar al ejecutor de scripts.
    Pues la pantalla en si, que esta negra entera tras los pensamientos de EIng XD, si uso la de mini no me vale, si uso fadscreen no me vale, solo se refresca si pulso "start" o paso por Warp.
    Pues a ver cuando hablamos y me explicas visualmente porque si no no nos podemos entender xD
    O hazme un dibujo con las ubicaciones de dichas vars o algo que se yo D:
    -es que con la explicacion que me das es liosa..-
    Javi man, sabes alguna rutina del juego para refrescar la pantalla?
    Es que solo se refresca al dar a pausa o pasar por un warp y la verdad es que no queda muy bonito XD
    Ya me agregarás y hablamos.
    La mayoria de mañanas puedo.
    E imagino que el pointer está permutado, y si lo cargas se verá permutado, por lo tanto no se podrá leer como pointer, por lo tanto le puedes dar la vuelta con ROR (creo recordar..)
    O si no ir byte por byte y multiplicandolo por 100 xD (hasta 3 veces) así dejarás espacio para el siguiente byte y haciendo add.

    Ejemplo: 10 3a f0 08
    Cargarias primero el ultimo byte (ldrb rx, [rx,#0x4])
    Multiplicas por 100, entonces quedaría 00000800
    Cargas el siguiente byte y lo añades.. etc
    Cmp es compare.
    Agregame al skype que se habla menos interrumpido, es einghack.
    Luego me conecto y vemos eso "en primera" persona.
    El fallo es que como te dije antes cargas el valor del offset no el offset.
    Quita ldr r0,[r0,#0x0], porque eso te hace cargar los valores de ese offset. (No el offset, el offset ya lo has cargado antes. Es decir, con eso has cargado el valor de la variable 8000, y tu lo que quieres solamente es su offset, entonces basta solo con el ldr r0,.var , asi ya cargas el offset. Lo otro es para saber los bytes que contiene ese offset -valor de variable vamos-)

    Y despues de cargar en r1 la otra var, COMO QUIERES OBTENER SU VALOR, Entonces SI has de poner LDR R1, [R1,#0x0].

    Veo que te lias con la manera de cargarlo, es lioso pero una vez entendido te quita muchos problemas.
    -si quieres solo la direccion haz ldr rx,.offset
    -si quieres valores de esa direccion es paso anterior + ldr rx,[rx,#0x0] (siempre pon ldr aunque cargues 4 bytes, luego para meterlos puedes modificarlo com strb o strh)
    Y si es para un cmp, entonces si, en ves de ldr rx,[rx,#0x0] usa ldrb.
    Esta rutina de abajo que me has puesto yo no te la he puesto..
    Esta mal, porque metes el ultimo byte del offset r1 en r0, que r0 son los valorss de la var 8000 (no su offset).
    Si quieres meter el valor 8000, en 8004 es strh r0,[r1,#0x0] (solo has de cambiar eso de la rutina, strh y no strb porque las vars son halfword 16 bits, 2bytes)

    Y si es al reves entonces debes quitar el ldr r0,[r0,#0x0] y ponerlo despues de ldr r1,.var_8004, pero cambiando r0, por r1. (Los dos r0 de esa funcion).

    Entiendes? Es algo complicado al primcipio pero es muy facil, si quieres cargar comtenido de offset has de cargar primero offset y luego el valor de este, poniendo de nuevo ldr rx, [rx,#0x0]
    Y si solo quieres la ubicacion lara luego escribir en ella es ldr rx,.offset
    Y para poner pues str[tamaño_datos], [rx,#0xpos]
    Creo que te hace falta leerte un poco mejor el manual..
    Si si es posible.
    Ldr r0, .var_8004 @cargamos pointer var 8004
    Ldr r0, [r0,#0x0] @cargamos bytes contenido var 8004
    Ldr r1, .var_8000. @cargamos offset var 8000
    Strh r0,[r1,#0x0] @metemos una halfword (16 bits, el tamaño de una var, en l var 800).

    Lo he dejado asi porque no has especificado en cual lo querias si. 800, o 8001.
    Primero que nada, usa los mismos registros que cargas punteros para cargar sus valores.
    Asi quedara todo mas limpio y usas menos registros.

    Segundo: estas liandote tu solo.
    Una vez que un registro ha cargado el valor del puntero, ya no puedes volver a cargar sus valores de nuevo.
    Ejemplo: ldr r1, [r0,0#0x14] -> estas cargando valor variable (x ejemplo 0) +0x14. So.. El r1= 14. No offset + 14

    La rutina bien echa quedaria asi:
    Ldr r0, .var_8000
    Ldr r1, .var_8004
    Ldr r1, [r1,#0x0]
    Strb r1,[r0,#0x14]

    Segun he entendido, querias poner el valor de var 8000 en la pos de var. 8004+0x14 bytes.
    Por lo tanto asi seria lo mejor.
    Tu sabras si es dinamico o no xD repito que a mi me da la sensacion de que no se cambia.. Aunque quizas te refieras con dinamica que cambian los valores y no la posicion. (Para ambas cosas se utilizan la palabra "dinamismo".. Pero bueno tampoco vayamos a discutir que luego no me hablas en años con el pique ^^

    Respecto a tu duda; te lo explico bien sencillo:
    Ldr = cargas 32 bits ( 4 bytes)
    Ldrh = cargas 16 bits (2 bytes)
    Ldrb = cargas 8 bits (1 byte)

    Ahora con eso, puedes cargar valores simples o valores de punteros.
    Valores simples: ldr r0, .valor
    .valor: .word: 0x01234567

    Entonces r0, tendra: 01234567

    Valores de punteros:
    Ldr r0, .pointer
    Ldr r0, [r0,#0x0]
    .pointer: .word 0x086F3A10

    R0 tendra el valor del puntero 086F3A10. (Vamos los 4 bytes que veas en el hxd en esa direccion).
    ¡Socorro, AUXILIIIIIO! ¡Unas babosas gigantes nos atacan! ¡Venga, échame un cable hombre, necesito una sartén gigante!
    Afirmativo, tan sólo me queda esperar el resultado de una de las asignaturas y prepararme otras dos (una de teoría y la otra de problemas, esta última no me llevará demasiado).
    [Tutorial] HackMew's Knowledge - The PokéCommunity Forums

    En ese tutorial que imagino que ya has leido, -es un must have..- sale la direccion, hacmew no nombra nada de dinamico que yo recuerde.
    En concreto es esta: 0x0300500C
    [Name (8 bytes)] [Gender (1 byte)] [??? (1 byte)] [Trainer ID (2 bytes)] [Secret ID (2 bytes)]
    [Hours of play (2 bytes)] [Minutes (1 byte)] [Seconds (1 byte)] [Frames (1 byte)]
    [??? (1 byte)] [Options (2 bytes)]

    Sumale 20 a ese valor inicial, y llegaras a donde estan los dos bytes de options. Cambia ahora los textbox mediante las opciones y mira a ver si se cambia, esta es la unica que se me ocurre sin asm .
    Ya imagino, que es un simple detalle.. Pero a veces es necesario es necesario asm.
    De todas formas, me ha venido un "flash", cerca del nomre del player, sexo, tiempo.. Etc hay dos bytes que indican las preferencias del player. (En binario imagino que seran estas posibilidades..) pues prueba a editar el tipo de textbox que quieres que aparezca y a ver si cambia ese byte xd otra cosa sin asm no se me ocurre (y es chapuza..)
  • Cargando…
  • Cargando…
  • Cargando…
Arriba