ID_US_A.ASM 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. ; Catacomb Apocalypse Source Code
  2. ; Copyright (C) 1993-2014 Flat Rock Software
  3. ;
  4. ; This program is free software; you can redistribute it and/or modify
  5. ; it under the terms of the GNU General Public License as published by
  6. ; the Free Software Foundation; either version 2 of the License, or
  7. ; (at your option) any later version.
  8. ;
  9. ; This program is distributed in the hope that it will be useful,
  10. ; but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. ; GNU General Public License for more details.
  13. ;
  14. ; You should have received a copy of the GNU General Public License along
  15. ; with this program; if not, write to the Free Software Foundation, Inc.,
  16. ; 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  17. IDEAL
  18. MODEL MEDIUM,C
  19. ; Assembly portion of the User Mgr. This is just John Carmack's table
  20. ; driven pseudo-random number generator, and we put it in the User Mgr
  21. ; because we couldn't figure out where it should go
  22. ;============================================================================
  23. ;
  24. ; RANDOM ROUTINES
  25. ;
  26. ;============================================================================
  27. FARDATA
  28. rndindex dw ?
  29. rndtable db 0, 8, 109, 220, 222, 241, 149, 107, 75, 248, 254, 140, 16, 66
  30. db 74, 21, 211, 47, 80, 242, 154, 27, 205, 128, 161, 89, 77, 36
  31. db 95, 110, 85, 48, 212, 140, 211, 249, 22, 79, 200, 50, 28, 188
  32. db 52, 140, 202, 120, 68, 145, 62, 70, 184, 190, 91, 197, 152, 224
  33. db 149, 104, 25, 178, 252, 182, 202, 182, 141, 197, 4, 81, 181, 242
  34. db 145, 42, 39, 227, 156, 198, 225, 193, 219, 93, 122, 175, 249, 0
  35. db 175, 143, 70, 239, 46, 246, 163, 53, 163, 109, 168, 135, 2, 235
  36. db 25, 92, 20, 145, 138, 77, 69, 166, 78, 176, 173, 212, 166, 113
  37. db 94, 161, 41, 50, 239, 49, 111, 164, 70, 60, 2, 37, 171, 75
  38. db 136, 156, 11, 56, 42, 146, 138, 229, 73, 146, 77, 61, 98, 196
  39. db 135, 106, 63, 197, 195, 86, 96, 203, 113, 101, 170, 247, 181, 113
  40. db 80, 250, 108, 7, 255, 237, 129, 226, 79, 107, 112, 166, 103, 241
  41. db 24, 223, 239, 120, 198, 58, 60, 82, 128, 3, 184, 66, 143, 224
  42. db 145, 224, 81, 206, 163, 45, 63, 90, 168, 114, 59, 33, 159, 95
  43. db 28, 139, 123, 98, 125, 196, 15, 70, 194, 253, 54, 14, 109, 226
  44. db 71, 17, 161, 93, 186, 87, 244, 138, 20, 52, 123, 251, 26, 36
  45. db 17, 46, 52, 231, 232, 76, 31, 221, 84, 37, 216, 165, 212, 106
  46. db 197, 242, 98, 43, 39, 175, 254, 145, 190, 84, 118, 222, 187, 136
  47. db 120, 163, 236, 249
  48. CODESEG
  49. LastRnd dw ?
  50. ;=================================================
  51. ;
  52. ; void US_InitRndT (boolean randomize)
  53. ; Init table based RND generator
  54. ; if randomize is false, the counter is set to 0
  55. ;
  56. ;=================================================
  57. PROC US_InitRndT randomize:word
  58. uses si,di
  59. public US_InitRndT
  60. mov ax,SEG rndtable
  61. mov es,ax
  62. mov ax,[randomize]
  63. or ax,ax
  64. jne @@timeit ;if randomize is true, really random
  65. mov dx,0 ;set to a definite value
  66. jmp @@setit
  67. @@timeit:
  68. mov ah,2ch
  69. int 21h ;GetSystemTime
  70. and dx,0ffh
  71. @@setit:
  72. mov [es:rndindex],dx
  73. ret
  74. ENDP
  75. ;=================================================
  76. ;
  77. ; int US_RndT (void)
  78. ; Return a random # between 0-255
  79. ; Exit : AX = value
  80. ;
  81. ;=================================================
  82. PROC US_RndT
  83. public US_RndT
  84. mov ax,SEG rndtable
  85. mov es,ax
  86. mov bx,[es:rndindex]
  87. inc bx
  88. and bx,0ffh
  89. mov [es:rndindex],bx
  90. mov al,[es:rndtable+BX]
  91. xor ah,ah
  92. ret
  93. ENDP
  94. END