wolf3d

The original open source release of Wolfenstein 3D
Log | Files | Refs

ID_US_A.ASM (2782B)


      1 IDEAL
      2 MODEL	MEDIUM,C
      3 
      4 ;	Assembly portion of the User Mgr. This is just John Carmack's table
      5 ;		driven pseudo-random number generator, and we put it in the User Mgr
      6 ;		because we couldn't figure out where it should go
      7 
      8 
      9 ;============================================================================
     10 ;
     11 ;                           RANDOM ROUTINES
     12 ;
     13 ;============================================================================
     14 
     15 	FARDATA
     16 
     17 rndindex	dw	?
     18 
     19 rndtable db    0,   8, 109, 220, 222, 241, 149, 107,  75, 248, 254, 140,  16,  66
     20 	db   74,  21, 211,  47,  80, 242, 154,  27, 205, 128, 161,  89,  77,  36
     21 	db   95, 110,  85,  48, 212, 140, 211, 249,  22,  79, 200,  50,  28, 188
     22 	db   52, 140, 202, 120,  68, 145,  62,  70, 184, 190,  91, 197, 152, 224
     23 	db  149, 104,  25, 178, 252, 182, 202, 182, 141, 197,   4,  81, 181, 242
     24 	db  145,  42,  39, 227, 156, 198, 225, 193, 219,  93, 122, 175, 249,   0
     25 	db  175, 143,  70, 239,  46, 246, 163,  53, 163, 109, 168, 135,   2, 235
     26 	db   25,  92,  20, 145, 138,  77,  69, 166,  78, 176, 173, 212, 166, 113
     27 	db   94, 161,  41,  50, 239,  49, 111, 164,  70,  60,   2,  37, 171,  75
     28 	db  136, 156,  11,  56,  42, 146, 138, 229,  73, 146,  77,  61,  98, 196
     29 	db  135, 106,  63, 197, 195,  86,  96, 203, 113, 101, 170, 247, 181, 113
     30 	db   80, 250, 108,   7, 255, 237, 129, 226,  79, 107, 112, 166, 103, 241
     31 	db   24, 223, 239, 120, 198,  58,  60,  82, 128,   3, 184,  66, 143, 224
     32 	db  145, 224,  81, 206, 163,  45,  63,  90, 168, 114,  59,  33, 159,  95
     33 	db   28, 139, 123,  98, 125, 196,  15,  70, 194, 253,  54,  14, 109, 226
     34 	db   71,  17, 161,  93, 186,  87, 244, 138,  20,  52, 123, 251,  26,  36
     35 	db   17,  46,  52, 231, 232,  76,  31, 221,  84,  37, 216, 165, 212, 106
     36 	db  197, 242,  98,  43,  39, 175, 254, 145, 190,  84, 118, 222, 187, 136
     37 	db  120, 163, 236, 249
     38 
     39 PUBLIC	rndtable
     40 
     41 	CODESEG
     42 
     43 LastRnd		dw	?
     44 
     45 ;=================================================
     46 ;
     47 ; void US_InitRndT (boolean randomize)
     48 ; Init table based RND generator
     49 ; if randomize is false, the counter is set to 0
     50 ;
     51 ;=================================================
     52 
     53 PROC	US_InitRndT randomize:word
     54 	uses	si,di
     55 	public	US_InitRndT
     56 
     57 	mov	ax,SEG rndtable
     58 	mov	es,ax
     59 
     60 	mov	ax,[randomize]
     61 	or	ax,ax
     62 	jne	@@timeit		;if randomize is true, really random
     63 
     64 	mov	dx,0			;set to a definite value
     65 	jmp	@@setit
     66 
     67 @@timeit:
     68 	mov	ah,2ch
     69 	int	21h			;GetSystemTime
     70 	and	dx,0ffh
     71 
     72 @@setit:
     73 	mov	[es:rndindex],dx
     74 	ret
     75 
     76 ENDP
     77 
     78 ;=================================================
     79 ;
     80 ; int US_RndT (void)
     81 ; Return a random # between 0-255
     82 ; Exit : AX = value
     83 ;
     84 ;=================================================
     85 PROC	US_RndT
     86 	public	US_RndT
     87 
     88 	mov	ax,SEG rndtable
     89 	mov	es,ax
     90 	mov	bx,[es:rndindex]
     91 	inc	bx
     92 	and	bx,0ffh
     93 	mov	[es:rndindex],bx
     94 	mov	al,[es:rndtable+BX]
     95 	xor	ah,ah
     96 	ret
     97 
     98 ENDP
     99 
    100 END
    101