scripts_n_asm
Thread Id: 28219
Thread Name: FR | ASM | Cambio de sexo
#0
Javi4315♪ 13374
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:

03 B5 03 48 01 68 00 20 02 48 00 78 08 72 03 BD 0C 50 00 03 B8 70 03 02
#1
J.com 12785
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)
#2
Javi4315♪ 13374
Iniciado por Jotta
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
#3
Tito Sayer301 26309
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?
#4
Cheve_X 15014
Iniciado por Sayer301
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:
#5
AcsPowerade 24582
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
#6
Dani_SR_17 28493
Me viene de perlas para una idea que tengo para el hack :D
#7
cosarara97 12296
He quitado una instrucción inútil y sustituido la multiplicación por un shift, (por que soy así de obsesivo):
.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?
#8
eing 12479
Iniciado por cosarara97
He quitado una instrucción inútil y sustituido la multiplicación por un shift, (por que soy así de obsesivo):
.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.
#9
J.com 12785
Iniciado por eing
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?
#10
Javi4315♪ 13374
Iniciado por Jotta
FR tiene una rutina para refrescar sin usar warp, ¿no serviría esa rutina?


Nop. Parece ser que la rutina no funciona en este caso.
#11
J.com 12785
Iniciado por Javi4315♪
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?
#12
Javi4315♪ 13374
Iniciado por Jotta
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.
#13
Isra 28938
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)
#14
cosarara97 12296
Iniciado por IsR
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).
#15
Isra 28938
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 :

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


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


En que me equivoqué? :S
#16
cosarara97 12296
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".
#17
Isra 28938
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)
#18
cosarara97 12296
Iniciado por IsR
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.
#19
Javi4315♪ 13374
Iniciado por IsR
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
#20
Isra 28938
Iniciado por cosarara97
En el script tenías que haber puesto callasm 0x8900001, está mal.


Tampoco, puse callstd 0x6 antes del msgbox para que hablase y veo que el error de quedarse pillado llega cuando hablo por que me salta el texto y al segundo el juego se queda pillado aunque se escucha la música.

'-----------------------
#org 0x80005A
lock
faceplayer
msgbox 0x88000F9 '"asdasdasd"
callstd 0x6
setvar 0x8000 0x1
callasm 0x8900001
release
end


'---------
' Strings
'---------
#org 0x8000F9
= asdasdasd


Javi acabo de leer tu mensaje, yo a la hora de hacer el callasm pongo la dirección donde puse la rutina más el 1 que hay que poner.
Y que yo sepa yo no he expandido la rom, solamente la descargué del post de descargas de rom's aquí en WAH
#21
cosarara97 12296
Es decir, ves el texto o no? Porque si no, significa que no has configurado bien el mini en AM.
#22
Isra 28938
Iniciado por cosarara97
Es decir, ves el texto o no? Porque si no, significa que no has configurado bien el mini en AM.


Si, se ve el mensaje y después al llegar a la parte de cargar la variable y la rutina se queda pillado (He probado el mismo script sin la variable y la rutina y me habla y después puedo seguir jugando (No se queda pillado))

Añado una imagen de como esta el codigo en el HxD (No soy muy pro todavía en como insertar las rutinas y a lo mejor puede ser fallo de eso :/ )

IMAGEN
#23
Javi4315♪ 13374
Pero es que te estás equivocando. 2 + 1 son 3, no 21. Es decir, 0x980000 + 1 es 0x980001, no 0x9800001.
#24
Isra 28938
Muchas gracias javi, ese era el fallo:)
Sinceramente me estaba equivocando de una forma terrible y no entendí tu primer comentario jajaja
PD : Te doy gracias que lo te mereces.
#25
Megascep_9 Kuchiki 28187
Hola Javi, la rutina me parece excelente, pero tengo una duda...

¿Tendría que eliminar, por ejemplo, la elección de la chica al inicio del juego?

¿Y también, puedo modificar su sprite a mi gusto?
#26
Foxz. 16646
Iniciado por Megasceptile9
Hola Javi, la rutina me parece excelente, pero tengo una duda...

¿Tendría que eliminar, por ejemplo, la elección de la chica al inicio del juego?

¿Y también, puedo modificar su sprite a mi gusto?


No he provado la rutina, pero no creo que sea necesario, simplemente has un checkgender antes y usa la rutina según el personaje que elegiste.
#27
Megascep_9 Kuchiki 28187
Iniciado por Foxz.
No he provado la rutina, pero no creo que sea necesario, simplemente has un checkgender antes y usa la rutina según el personaje que elegiste.


Eso quería hacer, pero es mucho trabajo XD...aún así
puedo eliminar a la chica???
#28
Javi4315♪ 13374
Iniciado por Megasceptile9
Eso quería hacer, pero es mucho trabajo XD...aún así
puedo eliminar a la chica???


Sí puedes hacerlo, sin ningún problema.