tuts_gba
Thread Id: 12265
Thread Name: GBA | Otros | Cambiar el Dinero de inicio del Juego
#0
Sonicarvalho 17082
Bueno, mas un tutorial 'ready for action'!

Mientras estudiando las rutinas ASM que tratan el NEW GAME de una rom, me depare con el dinero y pienso que es un pormenor interesante, aún que un poco innecesario, a no ser que pienses hacer un juego serio como ShinyGold, que tiene desafíos por ali y por allá y que necesitas algun dinero para pociones y así.

Hoy vamos a cambiar el dinero con que el player empieza en el inicio del juego!


Cambiar el Dinero de inicio del Juego


Esto es basicamente un Hex Editing, pero os voy a explicar como encontrar el offset para las versiones españolas de las roms.

Juegos: Ruby, FireRed, Emerald

Bien, todos sabemos que empezamos con 3000$ de dinero, cierto? Entonces, pasando a HEX tenemos 0xBB8. Pero no os olvideis que el dinero es tratado como una DWORD (4 bytes), y está permutado en la ROM, así que vamos a hacer algunas cosas antes de buscar en la ROM su offset.

Hacer 0xBB8 una DWORD => 0x00000BB8
Permutar => b8 0b 00 00

Ahora busquen en la ROM con un HEX Editor el valor permutado. Es el primer valor, si lo buscan bién.

Offsets:
Ruby(U): 052F4C
FireRed(U): 054B60
Emerald(U): 0845BC

Para las ROMs españolas es algo de ese genero.
Ruby: 05XXXX
Firered: 05XXXX
Emerald: 08XXXX

Ahora solo queda cambiar al vuestros gustos, chicos! :D

Es todo!
Made By Sonicarvalho
#1
Giratina 20903
Buen aporte pero existe un programa llamado Advance intro ed que te permite modificar el dinero con el que comienzas sin tener que saber de hexadecimales
#2
Cheve_X 15014
^ Si, pero está genial aprender a hacerlo manualmente, así puedes aprendes un poco de Hex, que nunca viene mal ^^

[hr]

Gracias Sonicarvalho por otro mini tutorial ^^
No sabía que a eso se le llama Dword :awesome:
¿Supongo que los Demás datos del Inicio deben de estar cerca No? (Pos x, Pos y, Etc)
Salu2! ñ_ñ
#3
Sonicarvalho 17082
Iniciado por Giratina

Buen aporte pero existe un programa llamado Advance intro ed que te permite modificar el dinero con el que comienzas sin tener que saber de hexadecimales


Si, lo sé, pero encara esto como un entrenamiento para el ASM, pues ASM tambien es saber buscar las cosas y cambiarlas.

Iniciado por Cheve_X

^ Si, pero está genial aprender a hacerlo manualmente, así puedes aprendes un poco de Hex, que nunca viene mal ^^

[hr]

Gracias Sonicarvalho por otro mini tutorial ^^
No sabía que a eso se le llama Dword :awesome:
¿Supongo que los Demás datos del Inicio deben de estar cerca No? (Pos x, Pos y, Etc)
Salu2! ñ_ñ

Eh, en GBA eso es una word, pero solo en GBA, porque DWord = Double Word, en programacion una Word son 2 bytes 0000.

Si los datos estan relativamiente pierto.
Mira esto (FIRERED U):

080549F8 @ =============== S U B R O U T I N E =======================================
080549F8
080549F8
080549F8 sub_080549F8: @ CODE XREF: new_game+CAp
080549F8
080549F8 var_8 = -8
080549F8
080549F8 PUSH {LR}
080549FA SUB SP, SP, #4
080549FC MOVS R2, #1
080549FE NEGS R2, R2
08054A00 MOVS R0, #6
08054A02 STR R0, [SP,#8+var_8]
08054A04 MOVS R0, #4
08054A06 MOVS R1, #1
08054A08 MOVS R3, #6
08054A0A BL sub_0805538C
08054A0E BL load_warp_map
08054A12 ADD SP, SP, #4
08054A14 POP {R0}
08054A16 BX R0
08054A16 @ End of function sub_080549F8
08054A16

Esa rutina es llamada por la rutina del new game, como puedes ver luego al inicio (sub_080549F8: @ CODE XREF: new_game+CA). Code XREF es "Code Reference (referencia de llamada). Si te interesa, la rutina del newgame esta en 0x054A60
Mira esos MOVS (es el mismo que MOV, sin "s", mi disassembler hace eso, no te preocupes")

MOV R0, #4 = Banco del mapa (banco 0x4)
MOV R1, #1 = Mapa 0x1 (tu habitacion en pallet town)
MOV R3, #6 = Coordenada X donde vas a aparecer en el mapa.

Saludos!
#4
cosarara97 12296
Eh, en GBA eso es una word, pero solo en GBA, porque DWord = Double Word, en programación una Word son 2 bytes 0000.

??? (no he acabado de entender eso xD)

Bueno, por lo que yo se, si un procesador es de 32 bits, una word va a ser de 32 bits, si es de 16 bits, una word van a ser 16 bits, etc.
La GBA tiene un procesador ARM7TDMI, que dispone de 2 modos básicos (ARM y THUMB) + los de gameboy y gameboy color. El modo ARM es de 32 bits, mientras que el THUMB es de 16, así que una word en una rutina THUMB equivale a 16 bits, (2 bytes de 8 bits cada uno), como tu has dicho, pero en una rutina ARM equivale a 32 bits (4 bytes de 8 bits cada uno).
Y bueno, decir que es solo en GBA tampoco es correcto, porque en los viejos ordenadores de 16 bits y otros procesadores de 16 bits una word también ocupa 2 bytes.


EDIT: Normalmente una word es el espacio que ocupa un int.
#5
Sonicarvalho 17082
Iniciado por cosarara97

Bueno, por lo que yo se, si un procesador es de 32 bits, una word va a ser de 32 bits, si es de 16 bits, una word van a ser 16 bits, etc.

Si, tienes razón aquí, era eso que yo queria decir, incluso me has aclarado una duda xD.
Iniciado por cosarara97

La GBA tiene un procesador ARM7TDMI, que dispone de 2 modos básicos (ARM y THUMB) + los de gameboy y gameboy color.

Si, lo sé, ARM, THUMB y Z80 (GBC).

Iniciado por cosarara97
El modo ARM es de 32 bits, mientras que el THUMB es de 16, así que una word en una rutina THUMB equivale a 16 bits, (2 bytes de 8 bits cada uno), como tu has dicho, pero en una rutina ARM equivale a 32 bits (4 bytes de 8 bits cada uno).

Pues aquí estas equivocado, pues el tamaño de una Word depiende del procesador como tu dejiste, no del 'instruction set'. Una son 4 bytes tanto en ARM como en Thumb (si no fuera, como el procesador iba a ler un offset? Con 2 'reads'? Que pierda de tiempo y performance.

Iniciado por cosarara97

Y bueno, decir que es solo en GBA tampoco es correcto, porque en los viejos ordenadores de 16 bits y otros procesadores de 16 bits una word también ocupa 2 bytes.

Si, aquí tienes razón, tambien estaba un poco confuso cuando estaba a escrebir.
Iniciado por cosarara97

EDIT: Normalmente una word es el espacio que ocupa un int.

Si, te refireres a un Int32, cierto?

~Sonicarvalho