home *** CD-ROM | disk | FTP | other *** search
/ 100 af Verdens Bedste Spil / 100Spil.iso / dos / wolf3d / source / wolfsrc.1 / ID_US_A.ASM < prev    next >
Assembly Source File  |  1993-02-04  |  3KB  |  102 lines

  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.  
  102.