Registrarse

Números aleatórios [FR]

Estado
Cerrado para nuevas respuestas.

cosarara97

Dejad de cambiar de nick
Miembro de honor
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í:
Código:
'pksv
random 9
compare LASTRESULT 1
if == jump @asdf
compare LASTRESULT 2
if == jump @asdf2
' etc.
Código:
'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.
 

Sonicarvalho

Tutorial Maker
Rutina: FireRed
Código:
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!
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
Muchas gracias por una explicación tan detallada :)
Entonces supongo que estaré haciendo otra cosa mal D:
Cierro el tema.
 
Estado
Cerrado para nuevas respuestas.
Arriba