Registrarse

[Rutina] FR | ASM | Cambio de sexo

Javi4315

Babyface
Miembro de honor
La verdad es que eso del "cambio de sexo" no me acaba de sonar bien xD

Bueno, he visto un comentario de Jota que decía lo siguiente:

Lo voy a probar en FR y te digo, que no todos los wbto de ruby funcionan en FR como tú dices, por ejemplo, el del cambio de sexo y alguno mas en FR no me funcionaron.
Hacer un "cambio de sexo" es cambiar del personaje masculino al femenino o viceversa. Esto, si sacrificamos uno de los personajes (obligando por ejemplo a escoger el masculino), implica tener otro personaje con su propio mini, sprite y backsprite. Lo que es un cambio total de personaje (o de ropa). Y como parece que es algo que puede venir bien, he hecho una rutina para cambiarlo:

.align 2
.thumb

push {r0-r1,lr}
ldr r0, .asdf
ldr r1, [r0]
mov r0, #0x0
ldr r0, .var_8000
ldrb r0, [r0]
strb r0, [r1,#0x8]
pop {r0-r1,pc}

.asdf: .word 0x0300500C
.var_8000: .word 0x020370B8
Como ya sabéis, estos datos en FR son dinámicos, por eso no se pueden cambiar con WBTO. Así que lo que hace la rutina es localizar los datos en la ram y modificar el byte que corresponde al sexo elegido.

La rutina la debéis compilar en un offset que termine en 0, 4, 8 o C y se utiliza así:

(...)
setvar 0x8000 0x(sexo)
callasm 0x(offset de la rutina + 1)
(...)
En la variable 0x8000 tenemos que poner 0x0 (chico) o 0x1 (chica).

Aquí tenéis la rutina compilada lista para insertar en el rom:

Código:
03 B5 03 48 01 68 00 20 02 48 00 78 08 72 03 BD 0C 50 00 03 B8 70 03 02
 

Jo7a

Kiero mi nick amarillo D:
Dios que puto amo!!
En serio, eres un crack, esta rutina está de PM y es Super útil si tienes buena imaginación, y es algo que se agradece bastante.

Solo 1 duda, si haces el cambio de sexo y guardas partida, al cargar partida el sexo sigue cambiado o vuelve a ser el que teniamos antes?

Aportazo! (L)
 

Javi4315

Babyface
Miembro de honor
Dios que puto amo!!
En serio, eres un crack, esta rutina está de PM y es Super útil si tienes buena imaginación, y es algo que se agradece bastante.

Solo 1 duda, si haces el cambio de sexo y guardas partida, al cargar partida el sexo sigue cambiado o vuelve a ser el que teniamos antes?

Aportazo! (L)
Sí, se mantiene el cambio al cargar la partida ;D
 

Sayer301!

UnityLord!
Miembro de honor
Vete a tomar por culo tio, así de sencillo! Esto lo estube buscando muchíiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisimo jajajajaj ¿Te acuerdas el cambio de backsprite que me implantaste? Pues con esto me hubiese valido igual jajajajajajaja

eres un máquina, no se si le podré dar mucha utilidad a estas alturas, pero me renta. Gran aporte sigue así!

PD: ¿Desde cuando le das al ASM?
 

Cheve

MoonLover~
Miembro de honor
Vete a tomar por culo tio, así de sencillo! Esto lo estube buscando muchíiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisimo jajajajaj ¿Te acuerdas el cambio de backsprite que me implantaste? Pues con esto me hubiese valido igual jajajajajajaja

eres un máquina, no se si le podré dar mucha utilidad a estas alturas, pero me renta. Gran aporte sigue así!

PD: ¿Desde cuando le das al ASM?
Supongo que desde que aprendió xDD

Buenisima rutina Javi :) Cumple su cometido y está simple y óptima ;) sigue dandonos aportazos asi que nosotros le sabemos dar su uso :rolleyes:
 

Acspower

Pokémon Edición Elemental
Javi <3
Un gran aporte para los rom hackers de wah ;O

Me servir? para llevar a mi protagonista al quir?fano y cambiarle el sexo :awesome: (?)

Con imaginacion se haran cosas chulad!! :)
A mi se me ha ocurrido hacer dos historias paralelas :D
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
He quitado una instrucción inútil y sustituido la multiplicación por un shift, (por que soy así de obsesivo):
Código:
.align 2
.thumb

push {r0-r2,lr}
ldr r0, .asdf
ldrh r1, [r0,#0x2]
ldrh r2, [r0]
lsl r1, r1, #0x10
add r1, r1, r2
ldr r0, .var_8000
ldrb r0, [r0]
strb r0, [r1,#0x8]
pop {r0-r2,pc}

.asdf: .word 0x0300500C
.var_8000: .word 0x020370B8
¿Qué método recomiendas para refrescar la cosilla? ¿Un warp?
 

eing

Miembro de honor
Miembro de honor
He quitado una instrucción inútil y sustituido la multiplicación por un shift, (por que soy así de obsesivo):
Código:
.align 2
.thumb

push {r0-r2,lr}
ldr r0, .asdf
ldrh r1, [r0,#0x2]
ldrh r2, [r0]
lsl r1, r1, #0x10
add r1, r1, r2
ldr r0, .var_8000
ldrb r0, [r0]
strb r0, [r1,#0x8]
pop {r0-r2,pc}

.asdf: .word 0x0300500C
.var_8000: .word 0x020370B8
¿Qué método recomiendas para refrescar la cosilla? ¿Un warp?
Si, es un warp por narices dado que la funcion que coloca los pointers del sexo en la ram (osea su frameset, pointer 1 y paleta) es una funcion que se procesa una vez, al pasar por warps. (Ya que se refresca ..) no es como cambiando el pointer del frameset que es ejecucion continua.


Buen aporte javi, aunque se cargan el pj femenino pero bue.. Es un buen aporte.
 

Jo7a

Kiero mi nick amarillo D:
Si, es un warp por narices dado que la funcion que coloca los pointers del sexo en la ram (osea su frameset, pointer 1 y paleta) es una funcion que se procesa una vez, al pasar por warps. (Ya que se refresca ..) no es como cambiando el pointer del frameset que es ejecucion continua.


Buen aporte javi, aunque se cargan el pj femenino pero bue.. Es un buen aporte.
FR tiene una rutina para refrescar sin usar warp, ¿no serviría esa rutina?
 

Jo7a

Kiero mi nick amarillo D:
Javi4315♪;250336 dijo:
Nop. Parece ser que la rutina no funciona en este caso.
Entonces solo nos queda usar warp?
Bueno, aun asi la rutina está genial.

Pero no entiendo, ¿qué diferencia hayq entre tu rutina y la que ha dejado Cosarara?
 

Javi4315

Babyface
Miembro de honor
Entonces solo nos queda usar warp?
Bueno, aun asi la rutina está genial.

Pero no entiendo, ¿qué diferencia hayq entre tu rutina y la que ha dejado Cosarara?
Nada, es lo mismo. Lo que ha hecho cosarara es cambiar un par de comandos. Pero no afecta en nada xD

--------------------------
Por cierto, he cambiado la rutina. Ahora utiliza menos registros y es más corta:

.align 2
.thumb

push {r0-r1,lr}
ldr r0, .asdf
ldr r1, [r0]
mov r0, #0x0
ldr r0, .var_8000
ldrb r0, [r0]
strb r0, [r1,#0x8]
pop {r0-r1,pc}

.asdf: .word 0x0300500C
.var_8000: .word 0x020370B8
Está todo en el primer post.
 

Isra

Más raro que algo raro.
Hola mira, yo inserto la rutina en la dirección 980000 pero cuando inicio el juego no se inicia y al abrirlo con el AM me salen los tiles y las paletas cambiadas.
Lo he probado 2 o 3 veces cambiando el offset y ya no se que mas puedo hacer.

Uso FR en inglés (No se si tiene algo que ver)
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
Hola mira, yo inserto la rutina en la dirección 980000 pero cuando inicio el juego no se inicia y al abrirlo con el AM me salen los tiles y las paletas cambiadas.
Lo he probado 2 o 3 veces cambiando el offset y ya no se que mas puedo hacer.

Uso FR en inglés (No se si tiene algo que ver)
¿Cómo estás insertando la rutina? ¿No será que la estás poniendo en 980000 en lugar de 0x980000?
Si realmente quieres que veamos qué haces mal, grábate en vídeo haciéndolo y súbelo a youtube (o haz un montón de capturas).
 

Isra

Más raro que algo raro.
Vale, ya se de que era el error...
Me equivoqué e insertaba la rutina con CTRL+V en vez de CTRL+B aunque ahora tengo otro problema :/

IMAGEN

Y este es el script que utilizo :

Código:
'-----------------------
#org 0x8000DB
lock
faceplayer
msgbox 0x88000F0 '"asodabsd"
setvar 0x8000 0x1
callasm 0x8DB3F01 
release
end


'---------
' Strings
'---------
#org 0x8000F0
= asodabsd

En que me equivoqué? :S
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
No decías que la pondrías en 0x980000?
Sea como sea, prueba a ser más explícito: cambia el callasm por un "callasm 0x88DB3F01". Probablemente se esté escribiendo como "callasm 0x08DB3F01".
 

Isra

Más raro que algo raro.
Puse lo que me dijiste, pero ahora al hablar se queda pillado--'
Hasta he cogido otro FR y lo inserté en el 980000 y tampoco:/ (Obviamente después en el script puse callasm 0x9800001)
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
Puse lo que me dijiste, pero ahora al hablar se queda pillado--'
Hasta he cogido otro FR y lo inserté en el 980000 y tampoco:/ (Obviamente después en el script puse callasm 0x9800001)
En el script tenías que haber puesto callasm 0x8900001, está mal.
 

Javi4315

Babyface
Miembro de honor
Puse lo que me dijiste, pero ahora al hablar se queda pillado--'
Hasta he cogido otro FR y lo inserté en el 980000 y tampoco:/ (Obviamente después en el script puse callasm 0x9800001)
A menos que tengas el rom expandido, no exsite tal dirección (0x9800001). O bien lo has insertado en la 0x980000 o en la 0x8800000 (y yo diría que es la primera). Aunque no sé si tendrás el rom expandido o no.

EDITO: Cosarara, sé dónde vives... xD
 
Arriba