Page 1 of 2
Posted: Sun Feb 03, 2002 3:51 pm
by BackupUser
Restored from previous forum. Originally posted by FAKEFACTORY.
Hi,
i there any way to make more random random-numbers out of the RANDOM() function? I.e. RANDOM(7)+1 for random numbers between 1 and 8 gives me
mainly:
1,1,1,1,5,5,5,1,5,5,5,1,....
This is a little bit to static for a random generator. Can we "load" the function with a randomizer-seed, like CurrentTicks? Or is there another Random-generator sourcecode avaiable?
Registered PureBasic Coder
Posted: Sun Feb 03, 2002 5:09 pm
by BackupUser
Restored from previous forum. Originally posted by El_Choni.
Hi, try this code:
Code: Select all
Global result.l
max.l
seed.l
!Extern _GetTickCount@0
!call _GetTickCount@0
!mov [v_seed], eax
Procedure.l MyRandom(max.l) ; don't use 0 as max, or fires a division by 0 error (avoidable, but would make it slower)
!mov [v_max], eax
!mov eax, [v_seed]
!mov dword ecx, $41c64e6d
!mul ecx
!add dword eax, $3039
!And dword eax, $7ffffff
!mov [v_seed], eax
!mov ecx, [v_max]
!sub edx, edx
!div ecx
!mov [v_result], edx
ProcedureReturn result
EndProcedure
result = MyRandom(7)
MessageRequester("Random result:", Str(result), 0)
Bye,
El_Choni
Edited by - El_Choni on 03 February 2002 17:23:47
Posted: Sun Feb 03, 2002 5:24 pm
by BackupUser
Restored from previous forum. Originally posted by Paul.
Excellent procedure El_Choni !!
Just a note, make sure you reseed off the system clock or something... else you will receive the same set of random numbers every time you restart your program.
Posted: Sun Feb 03, 2002 5:43 pm
by BackupUser
Restored from previous forum. Originally posted by El_Choni.
"reseed off"? I don't understand. the GetTickCount call is used to get a different seed each time, precisely to avoid what you say.
I got this code from the Win32asm message board. There are several other pseudorandom number generators there, check it if you wish.
Bye,
El_Choni
Posted: Sun Feb 03, 2002 5:51 pm
by BackupUser
Restored from previous forum. Originally posted by MrVainSCL.
Hi El_Choni
Many many thanks for your suppport to optimize the Random() and Str() commands... The new Random() works very fine... I must test the Str() replace... Anyway many thanks for the friendly and fast support - now my program is a bit smaller

) Would be nice to see the feature in next PB where danilo told about... Link only needed stuff to a file (obj) ...

) This would be very welcome Fred!
PIII450, 256MB Ram, 6GB HD, RivaTNT, DirectX8.1, SB AWE64, Win98SE + Updates...
greetz
MrVainSCL! aka Thorsten
Posted: Sun Feb 03, 2002 6:06 pm
by BackupUser
Restored from previous forum. Originally posted by Paul.
You have since edited the version posted.
The version I copy and pasted had a set seed (seed.l=5555), it did not have the GetTickCount.
Posted: Sun Feb 03, 2002 6:16 pm
by BackupUser
Restored from previous forum. Originally posted by DarkUni.
We should probably get Fred to add a RANDOMIZE command native.
Then we could the system timer to randomize easier.
This is definitely vital to video game coding.
Shane R. Monroe
Dark Unicorn Productions
Posted: Sun Feb 03, 2002 7:01 pm
by BackupUser
Restored from previous forum. Originally posted by El_Choni.
You have since edited the version posted.
The version I copy and pasted had a set seed (seed.l=5555), it did not have the GetTickCount.
He, he, I saw my error and corrected it, but thought that your post was made after the correction.
Bye,
El_Choni
Posted: Sun Feb 03, 2002 7:46 pm
by BackupUser
Restored from previous forum. Originally posted by FAKEFACTORY.
@El_Choni
Great code! Many thanks
Registered PureBasic Coder
Posted: Mon Feb 04, 2002 5:57 pm
by BackupUser
Restored from previous forum. Originally posted by MrVainSCL.
is this for any OS? -jb
sorry... the lib will be coded in pure x86 code... also it dont want run on 680x0 amiga os for example...
PIII450, 256MB Ram, 6GB HD, RivaTNT, DirectX8.1, SB AWE64, Win98SE + Updates...
greetz
MrVainSCL! aka Thorsten
Posted: Mon Feb 04, 2002 6:18 pm
by BackupUser
Restored from previous forum. Originally posted by El_Choni.
Tron, if you talk about the randomizing procedure, it must be easy to translate (anyway, PB Amiga will be updated soon and will likely include the Random() function, I guess).
Here's a rough translation using 86TO68:
Code: Select all
Data:
seed: dc.l 0
Code:
PB_InitRandom:
jsr _GetTickCount@0 ; this should be changed to some Amiga API function which puts the result in d0
move.l d0,seed
rts
PB_Randomize:
move.l d0,-(a7)
move.l seed(pc),d0
move.l #1103515245,d2
add.l #12345,d0
and.l #134217727,d0
move.l d0,seed
move.l (a7)+,d2
sub.l d3,d3
move.l d0,d5
move.l d3,d0
move.l d5,d3
rts
See you,
Edited by - El_Choni on 04 February 2002 18:44:46
Posted: Tue Feb 05, 2002 1:12 am
by BackupUser
Restored from previous forum. Originally posted by El_Choni.
I'm quite sure it won't work without testing and correcting, which I can't do because I lost my WinUAE instalation and my A4000/40 is 600 Km. away.
But it's a start
Bye,
El_Choni
Posted: Tue Feb 05, 2002 10:30 am
by BackupUser
Restored from previous forum. Originally posted by PB.
> I lost my WinUAE instalation
I just installed the latest WinUAE and wow: it's so FAST now! I can
actually play Alien Breed 3D at a respectable speed! Very good work
by whoever added the JIT code to it.
PB - Registered PureBasic Coder
Posted: Tue Feb 05, 2002 11:29 am
by BackupUser
Restored from previous forum. Originally posted by El_Choni.
I think that what is so fast now is your computer

. I'm going to install it again, but don't know where to find a good assembler to test things, and CygnusEd, (oh, well, and so much other things that don't come with UAE, of course).
Have a nice day,
El_Choni
Posted: Tue Feb 05, 2002 11:37 am
by BackupUser
Restored from previous forum. Originally posted by fred.
search for PhxAss.. and GoldED.
Fred - AlphaSND