Advertisement
AlexRaider

Wolfenstein 3D ID_US_A.ASM

Apr 16th, 2019
746
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement