|
| Como crear un Parche [Xkas] | |
| Autor | Mensaje |
---|
New Hacker Eerie
Posts : 397
| Tema: Como crear un Parche [Xkas] Dom Mar 27, 2011 12:57 am | |
| Ahora como me aburrí, decidí a enseñarles como crear un Parche básico, solo Hex Edits (lo mismo que haces con Translhextion). Bueno, empecemos! Hacer un parche es muy facil de hacer, si solo quieres hacer Hex edits. Aqui enseñaré como hacerlo. Primero, hagan un archivo .ASM y obviamente, abranlo. Si no te has dado cuenta, todos los parches tienen un "HEADER" y un "LOROM" al principio. Explicaré las 2. HEADER: Esto significa que el ROM tiene un header, esto es necesario. LOROM: Esto significa que el ROM es en formato LOROM, no, no es ROM.LOROM, también es necesario. Si no pones alguno de estos, no funcionará el parche. Al empezar a hacer un parche, siempre debes poner eso. Aquí hay un ejemplo: - Spoiler:
HEADER LOROM
¡Siempre ponlo, o no funcionará!. Ahora que eso está listo, es hora de hacer los Hex edits. Ve al ROM Map de SMWCentral ( [Tienes que estar registrado y conectado para ver este vínculo]) y busca una dirección cualquiera, como jemplo tomaré esta: - Código:
-
0241F $00:A21F 1 byte ASM Change from F0 (BEQ) to 80 (BRA) to disable pausing Si yo usara el Tranlhextion, debería ir a la dirección 0241F y cambiar ese numero por un 80 para desactival el pause. Pero como estamos haciendo un parche, esto se hace de otra forma. - Código:
-
ORG $XXXXXX
db $YY Ese "ORG" nos hace ir a la dirección escrita a su derecha, o sea, ir a $XXXXXX. El "db" nos sirve para cambiar el valor actual, por el que esa escrito a su derecha ($YY). O sea, que si yo quiero desactivar el pause, debería hacer esto: ORG $00A21Fdb $80Lo que hice fue ir a la dirección ROM $00A21F y caambiar ese valor a $80. Es muy simple. Cambiando más de un valor: Continuará... |
| | | Michael Administrador
Posts : 3580
| Tema: Re: Como crear un Parche [Xkas] Dom Mar 27, 2011 11:08 am | |
| esta facil de hacer y no seria tan complicado, pero claro, si solo son hex edits simples como esas, esperare la segunda parte para aprender a hacer parches asi para los que les da pereza hacer hex edits o no saben como ej yoshi =P gracias por el tuto |
| | | New Hacker Eerie
Posts : 397
| Tema: Re: Como crear un Parche [Xkas] Dom Mar 27, 2011 1:34 pm | |
| Bien, esta es la segunda parte, y gracias! Cambiando más de un valor: Bien, como ya sabemos como cambiar un solo valor, es hora de cambiar más de uno. Esto, es casi lo mismo que lo que hicimos anteriormente, solo que se agragan más valores al db. Ahora tomaré otro ejmplo del ROM Map: - Código:
-
05356 $00:D156 5 bytes ASM Change to EE E4 18 EA 64 to turn the Mushroom into a 1up, but it'll still play the animation Aquí dice que si cambio esa dirección a [EE] [E4] [18] [EA] [64], el Mushroom (hongo rojo) te dará una vida en vez de hacer crecer a Mario. Si usara Translhextion, debería ir a esa dirección y cambiar esos 5 valores a [EE] [E4] [18] [EA] [64]. Para hacer esto en el parche, solo nos vamos a $00D156 (con un ORG) y cambiamos los valores con un "db". O sea, algo como esto: - Código:
-
ORG $00D156 db $EE,$E4,$18,$EA,$64 ¿Notan como funciona? Solo agregué mas valores al db. Aquí otro ejemplo: - Código:
-
0A1A7 $01:9FA7 5 bytes ASM Change to [EA EA EA EA EA] to give the P-Balloon an infinite timer Si cambio esa dirección a [EA] [EA] [EA] [EA] [EA], el P-Balloon (el globo) será infinito. Si quiero hacer eso en el parche, voy a $019FA7 y cambio los valores actuales por [EA] [EA] [EA] [EA] [EA]. Quedaría algo como esto: - Código:
-
ORG $019FA7 db $EA,$EA,$EA,$EA,$EA Así se hacen multiples valores, es muy sencillo. Haciendo un parche real: Con "Hacer un parche real", me refiero a que pongas espacio libre, y que pongas nuevas cosas como walljumps, powerups, etc.. La verdad, para esto nesecitas saber más ASM. Como es más dificil hacerlo, solo explicaré como poner el Freespace y como agregar nuevas cosas. Si descargas un parche de SMWCentral, te darás cuenta que casi siempre al principio dice !FreeSpace = $XXXXXX. Pero, ¿porqué hay que poner espacio libre?. Porque al crear nuevas rutinas o cosas nuevas, necesitas crearlo tu mismo en una parte del ROM en donde no haya nada, o sea, que esté vacío. No puedes reemplazar una rutina existente con una nueva, sólo puedes editarla, o agregarle cosas, es por eso que si no pones espacio libre el juego muere. Bueno, ahora pondremos el espacio libre. - Código:
-
!FreeSpace = $218000 ; <-- PON ESPACIO LIBRE AHÍ!!! Esto se hace para que sea más fácil encontrar en donde poner el espacio libre. Al poner el espacio libre, luego debemos ir a esa dirección y agregar las rutinas, etc. con un ORG. - Código:
-
!FreeSpace = $218000 ; <-- PON ESPACIO LIBRE AHÍ!!!
ORG !FreeSpace
db "STAR" ;\ dw MainEnd-MainStart-$01 ; | Esto es el famoso "Tag RATS", que sirve para proteger el código dw MainEnd-MainStart-$01^$FFFF ;/
MainStart: En "MainStart" empezamos a hacer el código. y en "MainEnd" no ponemos nada, porque ahí se termina el código. Eso es lo básico de un parche, ahi creamos nuestro código como queramos, y al parchearlo al ROM, este funcionará. Para poner un ejemplo, hice un parche simple que pone la pantalla un poco mas oscura al pausar el juego, si, ya se que existe uno, pero creí que era fácil de hacer, así que lo elegí. - Código:
-
!FreeSpace = $1FB000 ; <-- PON ESPACIO LIBRE!!!
HEADER LOROM
ORG $00A233 ; Si el juego está pausado JSL Pausado ; Saltamos a Pausado NOP #11 ; 11 veces NOP (No Operation) En realidad no se para que sirve el NOP...
ORG !FreeSpace ; Nos vamos al espacio libre
db "STAR" ;\ dw MainEnd-MainStart-$01 ; | Y hacemos el Tag RATS dw MainEnd-MainStart-$01^$FFFF ;/
MainStart: Pausado: LDA $13D4 ; Ver si el juego está pausado BNE NotPaused ; Si no, ir a NotPaused BEQ Paused ; Y si lo está, ir a Paused
NotPaused: STZ $13D4 ; No pausar el juego LDA #$0F ;\ Brillo de STA $0DAE ;/ la pantalla LDA #$12 ;\ Hacer un STA $1DF9 ;/ sonido RTL ; Y retorna
Paused: LDA #$01 ;\ Pausar el STA $13D4 ;/ juego LDA #$05 ;\ Brillo de la pantalla STA $0DAE ;/ cuando está pausado LDA #$11 ;\ Otro STA $1DF9 ;/ sonido RTL ; Retorna
MainEnd: ; Fin del código Y así se hace un parche, hay unos muy complicados de entender, como el Levelasm, el ExGFXRevolution, etc.. Este es solo uno muy simple, si lo pruebas, puede que funcione, yo no lo probé, pero es casi el mismo que el original, así que debería... Bueno, si tienen preguntas, o me equivoqué en algo, solo postéen! Una cosa para NoX (que he escuchado que el hace parches): Si crees que es muy poco entendible, editalo, ya que no se si lo entiendan... Gracias por leer el tuto! |
| | | Michael Administrador
Posts : 3580
| Tema: Re: Como crear un Parche [Xkas] Dom Mar 27, 2011 1:45 pm | |
| tengo una duda, de donde se sacan esos LDA, STA y STZ? de donde sacas esos valores? |
| | | Metalstriker Blue Para-Troopa
Posts : 261
| Tema: Re: Como crear un Parche [Xkas] Dom Mar 27, 2011 1:57 pm | |
| mmm grax por traducir el tuto , voy a darle OOOOTRA oportunidad a la creacion de parches |
| | | New Hacker Eerie
Posts : 397
| Tema: Re: Como crear un Parche [Xkas] Dom Mar 27, 2011 3:10 pm | |
| Traducción? Ah, bueno, lo leí hace mucho y solo expliqué lo que me quedó claro. Además no me gusta traducirlos =P.
Y Michael, puedes usar todos los comandos que quieras, siempre y cuando tengan sentido. Puedes cargar (LDA) cualquier valor desde #$00 hasta #$FF y guardar ese valor (STA) en una dirección RAM ($XXXXXX, $XXXX o $XX). La dirección tiene valores que se pueden usar solo es esa dirección, como la Dirección RAM de los Powerups de Mario (7E0019), solo sirven 4 valores (#$00, #$01, #$02, #$03), y si por ejemplo, guardas un #$05 ahí, no pasará nada, solo ocurrirán errores dependiendo de la dirección en que guardes el valor. Es por eso que en el RAM Map ponen los valores validos para cada dirección.
En un parche de Hex edits no necesitas otros comandos mas que ORG y una tabla de valores (db). Pero en un parche real, puedes usarlos todos.
Un parche real es donde editas una dirección, o creas una rutina nueva en espacio libre. Y si editas una, igual debes poner espacio libre. |
| | | Michael Administrador
Posts : 3580
| Tema: Re: Como crear un Parche [Xkas] Vie Abr 15, 2011 2:07 pm | |
| emm tengo otra duda... para crear parches "reales" que se usa? ROM Map o RAM Map? o los 2? |
| | | New Hacker Eerie
Posts : 397
| Tema: Re: Como crear un Parche [Xkas] Sáb Abr 16, 2011 4:35 pm | |
| Se usan los dos, pero el más importante es el ROM, porque ahí es donde vas a escribir el código. En el caso de un parche de Hex Edits, no necesitas RAM Libre. La RAM no es tan necesaria al hacer un parche, pero en algunos casos usas una RAM libre cuando no te sirve ninguna de las que ya hay, o mejor dicho, personalizas una haciendole lo que quieras, como por ejemplo incrementar una RAM libre en 1 cada frame: - Código:
-
INC !FreeRAM O que mediante un bloque la incrementes en 1 - Código:
-
JMP MarioBelow [...] JMP MarioFireball
MarioBelow:
INC !RAM RTL Puede que la última no te haya quedado claro, pero no con tal de que la primera la hayas entendido, está bien. |
| | | Michael Administrador
Posts : 3580
| Tema: Re: Como crear un Parche [Xkas] Sáb Oct 22, 2011 12:14 pm | |
| mmm no se si estoy en lo correcto pero creo que el NOP es como poner EA, osea que si necesitas poner EA EA EA EA pones NOP #4, o estoy equivocado?
|
| | | New Hacker Eerie
Posts : 397
| Tema: Re: Como crear un Parche [Xkas] Sáb Oct 22, 2011 2:09 pm | |
| Por lo que vi en un tutorial, NOP no hace absolutamente nada: - Ersanio's ASM Tutorial escribió:
- This opcode will do absolutely NOTHING. It is often used to disable existing opcodes in a ROM, or used to give time for the math hardware registers to do their work.
O sea, que no hará nada, es a veces usado para desactivar comandos existentes en el ROM, o también para darle tiempo a los "math hardware registers" (no sabría como traducir eso) para hacer su trabajo. |
| | | Contenido patrocinado
| Tema: Re: Como crear un Parche [Xkas] | |
| |
| | | | Como crear un Parche [Xkas] | |
|
Temas similares | |
|
| Permisos de este foro: | No puedes responder a temas en este foro.
| |
| |
| Donaciones |
Quieres ayudar al foro? Siéntete libre de donar la cantidad que quieras!
|
|