Professional Documents
Culture Documents
mito.
Aprende a programar scripts y traducir el ROM.
Por: ~Areku!
Introducción.
Y recuerden esto:
¡¡¡Prohibida su venta!!!
Palabras raras (‘’’._.’’’?)
Compilar:
Se le llama así al procedimiento de convertir una serie de
órdenes que podemos interpretar fácilmente a un código.
Decompilar:
Es lo contrario a compilar; convierte código a una serie de
órdenes.
Hexadecimal:
Sistema universal de codificación que va desde el 0 a la F.
(Lo veremos más adelante a detalle.
El sistema hexadecimal
El sistema hexadecimal es un sistema de numeración de
base 16 (es decir, utilizan 16 símbolos como dígitos), usualmente
utiliza el 0-9, más el “A”, “B”, “C”, “D”, “E” y “F” o
alternativamente “a”, “b”, “c”, “d”, “e” y “f” para representar
valores del 10 al 15. No estamos acostumbrados a utilizar la
numeración de esta forma, ya que los seres humanos siempre nos
hemos acostumbrado a trabajar con el sistema decimal, del 0 al
9.
Pero, ¿Por qué me quiero centrar tanto hacia el sistema
hexadecimal o “hex”? Primeramente por que los editores
hexadecimales definen todos los datos numéricos como
hexadecimales. Entonces, cuando utilices un script podrías
utilizar un editor hexadecimal para depurar el script, o sea,
corregir cualquier error. (haha, repito demasiado “hexadecimal” ¿No creen?, es para que se
acostumbren a este término, bastante importante en el ROM-Hacking a nivel universal, no sólo de Pokémon o de
GBA)
Términos extraños
Imagina por tercera vez el mismo libro. (Otra vez la burra
al trigo ¬¬U!) Y… ¡Oh sorpresa!
Encuentras un párrafo mal escrito, hay palabras que le
faltan sílabas y letras, y no entiendes concretamente lo que dice
el párrafo.
Ahora comparémoslo con el ROM, la palabra en este caso es
el comando; las letras y algunas sílabas son los parámetros, con
esto quiero decir que una palabra no nos dice nada si no tiene
letras, al igual que un comando no nos dice nada si no tiene
parámetros, entonces un comando, por ende, necesita tenerlos,
para que de esta forma nos diga qué expresa en concreto, qué
valores tiene o qué es lo que hará.
Un claro ejemplo de un comando debe incluir un parámetro
y que no lo tiene:
Wildbattle
Byte:
La unidad más pequeña de información, consiste en una
pareja de dígitos en sistema hexadecimal. Puede significar desde
0 (00) hasta 255 (FF).
Word:
Es otro tipo de parámetro, este consiste en 2 bytes, es
decir, 2 parejas de dígitos, un ejemplo de ello es el “People ID”
del AdvanceMap.
Flag:
Es un tipo especial de “Word”, ésta mas bien actúa como
interruptor, ya que puede tener 2 tipos de valor, activado y
desactivado. (0 y 1)
Estas suelen utilizarse para evitar la repetición de un script o
para deshabilitar algun evento después de ocurrir otro.
Existen también “flags” especiales, las cuales nos permiten
activar la PokéDex, el PokéNav y las de las medallas de gimnasio.
Offset:
Es la dirección del ROM en la que se guarda el script que
hacemos. Un ejemplo podría ser 0x7A6B5A. Se forma por 3
bytes.
Pointer o Puntero:
Bueno, yo confundía este término con el de Offset, pero después
de leer la guía del XSE me dí cuenta que es casi lo mismo, la única
diferencia es que contiene un byte al inicio que determina qué
tipo de memoria accederá. Por lo ahora sólo utilizar la memoria
ROM, de modo que un puntero se conforma de esta forma, 1 byte
que determina el tipo de memoria al que accederemos y los
últimos 3 bytes nos indican el offset.
08 XX XX XX
Ahora el dicho de “El que busca encuentra” se hace tan real como
esto.
¿Y cómo lo selecciono x3!!!?
Pulsa la barra de espacio al inicio del texto, ahora desplázate con
el cursor hasta la “$” donde finaliza el mensaje, una vez que
llegues a este punto presiona de nuevo la barra de espacio.
Aparecerá esto:
Editamos de nuevo
Les dejo una serie de bytes combinados con las que pueden
hacer cosas interesantes.
Todo esto que sigue se pone antes de nuestro texto, así que
recuerda guardar los suficientes espacios para insertar los
bytes, por ejemplo, asigna 3 espacios si quieres insertar 3 bytes.
He aquí algunos trucos.
00=Down0
01=Up0
02=Left0
03=Right0
04=Down1
05=Up1
06=Left1
07=Right1
08=Down2
09=Up2
0A=Left2
0B=Right2
0C=HopTileDown
0D=HopTileUp
0E=HopTileLeft
0F=HopTileRight
10=Delay0
11=Delay1
12=Delay2
13=Delay3
14=Delay4
15=Down3
16=Up3
17=Left3
18=Right3
19=StDown1
1A=StUp1
1B=StLeft1
1C=StRight1
1D=StDown2
1E=StUp2
1F=StLeft2
20=StRight2
21=StDown3
22=StUp3
23=StLeft3
24=StRight3
25=StDown4
26=StUp4
27=StLeft4
28=StRight4
29=Down3
2A=Up3
2B=Left3
2C=Right3
2D=Down4
2E=Up4
2F=Left4
30=Right4
31=SlideFaceDown
32=SlideFaceUp
33=SlideFaceLeft
34=SlideFaceRight
35=RunDown
36=RunUp
37=RunLeft
38=RunRight
39=St0
3A=HighHopDown
3B=HighHopUp
3C=HighHopLeft
3D=HighHopRight
3E=Up0A
3F=Down0A
40=mov40
41=mov41
42=JumpDown
43=JumpUp
44=JumpLeft
45=JumpRight
46=HopDown
47=HopUp
48=HopLeft
49=HopRight
4A=HopDown180
4B=HopUp180
4C=HopLeft180
4D=HopRight180
4E=Down0B
4F=StRun
50=mov50
51=mov51
52=mov52
53=mov53
54=Hide
55=Show
56=Alert
57=Question
58=Love
59=mov59
5A=Pokeball
5B=mov5B
5C=mov5C
5D=mov5D
5E=mov5E
5F=mov5F
60=mov60
61=mov61
63=Up0B
64=mov64
65=Right0A
66=RunStopLoopDown
67=RunStopLoopUp
68=RunStopLoopLeft
69=RunStopLoopRight
6A=StDown1i
6B=StUp1i
6C=StLeft1i
6D=StRight1i
6E=StDown5
6F=StUp5
70=StLeft5
71=StRight5
72=Down15
73=Up15
74=Left15
75=Right15
76=mov76
77=mov77
78=mov78
79=mov79
7A=Down6
7B=Up6
7C=Left6
7D=Right6
7E=RunDown2
7F=RunUp2
80=RunLeft2
81=RunRight2
82=Down7
83=Up7
84=Left7
85=Right7
86=IceSlideDown
87=IceSlideUp
88=IceSlideLeft
89=IceSlideRight
8A=8A
8B=8B
8C=8C
8D=8D
8E=8E
8F=8F
90=90
91=91
92=92
93=93
94=94
95=95
96=96
97=97
98=98
99=99
9A=9A
9B=9B
9C=9C
9D=9D
9E=9E
9F=9F
A0=A0
A1=A1
A2=A2
A3=A3
A4=A4
A5=A5
A6=A6
A7=A7
A8=A8
A9=A9
AA=AA
AB=AB
AC=AC
AD=AD
AE=AE
AF=AF
B0=B0
B1=B1
B2=B2
B3=B3
B4=B4
B5=B5
B6=B6
B7=B7
B8=B8
B9=B9
BA=BA
BB=BB
BC=BC
BD=BD
BE=BE
BF=BF
C0=C0
C1=C1
C2=C2
C3=C3
C4=C4
C5=C5
C6=C6
C7=C7
C8=C8
C9=C9
CA=CA
CB=CB
CC=CC
CD=CD
CE=CE
CF=CF
D0=D0
D1=D1
D2=D2
D3=D3
D4=D4
D5=D5
D6=D6
D7=D7
D8=D8
D9=D9
DA=DA
DB=DB
DC=DC
DD=DD
DE=DE
DF=DF
E0=E0
E1=E1
E2=E2
E3=E3
E4=E4
E5=E5
E6=E6
E7=E7
E8=E8
E9=E9
EA=EA
EB=EB
EC=EC
ED=ED
EE=EE
EF=EF
F0=F0
F1=F1
F2=F2
F3=F3
F4=F4
F5=F5
F6=F6
F7=F7
F8=F8
F9=F9
FA=FA
FB=FB
FC=FC
FD=FD
FE=Exit
FF=FF