qna_rh
Thread Id: 14802
Thread Name: Números aleatórios [FR]
#0
cosarara97 12296
Alguien sabe como funciona exactamente el comando "random"?
Según el .h de PKSV lleva un argumento de 2 bytes, al que llama "possibilities", cosa que no dice mucho.
En un principio he intentado usar algo así:

'pksv
random 9
compare LASTRESULT 1
if == jump @asdf
compare LASTRESULT 2
if == jump @asdf2
' etc.

'xse -- aunque no estoy seguro de que sea correcto
random 9
compare LASTRESULT 1
if 1 goto @asdf
compare LASTRESULT 2
if 1 goto @asdf2
' etc.
(Siendo 9 el máximo valor del random)
Pero no funciona, así que supongo que hay que usarlo de otro modo...
Alguien sabe como funciona?

Si no, alguien sabe alguna otra forma de conseguir un número aleatorio y/o el tiempo del reloj en segundos?

Estoy trabajando en FR, pero si conoceis un modo específico para Ruby decidlo igualmente, ya que siempre puedo portar el script.
#1
Sonicarvalho 17082
Rutina: FireRed
0806A5DC
0806A5DC @ =============== S U B R O U T I N E =======================================
0806A5DC
0806A5DC
0806A5DC s8F_get_random_val: @ DATA XREF: ROM:0815FBF0o
0806A5DC PUSH {R4,R5,LR}
0806A5DE BL script_read_halfword
0806A5E2 LSLS R0, R0, #0x10
0806A5E4 LSRS R0, R0, #0x10
0806A5E6 BL var_load
0806A5EA MOVS R4, R0
0806A5EC LSLS R4, R4, #0x10
0806A5EE LSRS R4, R4, #0x10
0806A5F0 LDR R5, =var_800D
0806A5F2 BL rand
0806A5F6 LSLS R0, R0, #0x10
0806A5F8 LSRS R0, R0, #0x10
0806A5FA MOVS R1, R4
0806A5FC BL modulo
0806A600 STRH R0, [R5]
0806A602 MOVS R0, #0
0806A604 POP {R4,R5}
0806A606 POP {R1}
0806A608 BX R1
0806A608 @ End of function s8F_get_random_val
0806A608

Bien, pienso que no necesito explicarte mucho, cierto?

El comando empieza grabando el valor especificado por el scripter en R1.
Después, utilizando el PRNG del juego, graba un valor cualquier (aleatorio) en R0, lo cual después utiliza para hacer un MODULO (porque como sabes, el valor del PNRG es un valor de 16bit (2 bytes).

Osea, sí, funciona así. El argumento puede ser un numero normal (hasta 0x3FFF) o una variable (0x4000->...)

Saludos, alguna duda pregunta!
#2
cosarara97 12296
Muchas gracias por una explicación tan detallada :)
Entonces supongo que estaré haciendo otra cosa mal D:
Cierro el tema.