home *** CD-ROM | disk | FTP | other *** search
/ The Equalizer BBS / equalizer-bbs-collection_2004.zip / equalizer-bbs-collection / DEMOSCENE-STUFF / FIRE!.ZIP / FIRE!.ASM < prev    next >
Assembly Source File  |  1994-11-16  |  7KB  |  222 lines

  1. ;******************************************************************************
  2. ;******************************************************************************
  3. ;                       CODE DONE BY MAC OF PROPHECY!
  4. ; YOU CAN CONTACT ME AT: 
  5. ; BBS: DARK iLLUSiON +49-(0)89-36102651 (PROPHECY WHQ)
  6. ; FIDONET: 2:2480/826.14
  7. ;******************************************************************************
  8. ;                        THiS SOURCE CODE iS FREEWARE
  9. ;          iF YOU FiND THiS CODE USEFULL PLEASE GREET US ( PROPHECY )
  10. ;       iF YOU USE THiS IN YOUR OWN PRODUCTIONS PLEASE GiMME THE CREDiTS
  11. ;******************************************************************************
  12. ;           MY CODE iS BASED ON THE FiRE-EFFECT BY DANiEL SJOBERG
  13. ;     BECAUSE HE USED A RANDOM PROCEDURE ( MADE BY ANONYMOUS ) AND THE
  14. ;                 SiMPLE FORMULA OF JARE/VANGELiSTEAM ( TNX )
  15. ;           i REWROTE AND iMPROVED ALMOST EVERYTHiNG OF HiS CODE 
  16. ;******************************************************************************
  17. ;                 THE MEMBERSTATUS OF PROPHECY IN LATE 1994
  18. ;
  19. ;                       CYBOMAN  - MUSiC
  20. ;                       GEMiNi   - CODE
  21. ;                       HUMANOiD - MUSiC
  22. ;                       MAS      - CODE (UT)
  23. ;                       MAC      - CODE, GFX
  24. ;                       KAOS     - BBS, ORGANIZER
  25. ;******************************************************************************
  26. ;******************************************************************************
  27.  
  28. .386
  29.  
  30. _data segment use16 public 'data'
  31.  
  32.      flames       db 160*100 dup (0)   ;Flamemap
  33.     banner        db 'Code done by MAC of PROPHECY in 1994!',10,13
  34.             db 'call the DARK iLLUSiON BBS: +49-(0)89-36102651'
  35.             db 10,13,'$'
  36.  
  37. _data ends
  38.  
  39. _code segment use16 public 'code'
  40. assume cs:_code,ds:_data,ss:_stack
  41.  
  42. main proc near
  43.  
  44.     mov ax,_data
  45.     mov ds,ax
  46.  
  47.     mov ax,13h         ;<- 320x200x256 gfx-mode installieren
  48.     int 10h
  49.  
  50.     mov ax,pal        ;<- feuerpalette installieren
  51.     mov es,ax
  52.  
  53.     mov ax,1012h        
  54.     xor bx,bx
  55.     mov cx,255
  56.     xor dx,dx
  57.     int 10h
  58.  
  59. ;***********************************************************
  60. ;                       Main Code
  61. ;***********************************************************
  62.  
  63. call flame            ;<- flammenroutine aufrufen
  64.  
  65. mov ax,3             ;<- zurück in Textmode
  66. int 10h            
  67. mov ax,_data
  68. mov ds,ax
  69. mov dx,offset banner        ;<- end banner ausgeben
  70. mov ah,9
  71. int 21h
  72. mov ax,4c00h            ;<- und zurück ins dos
  73. int 21h
  74.  
  75. main endp
  76.  
  77. ;************************************************************
  78. ;      Flammen Routine
  79. ;************************************************************
  80.  
  81. flame  proc   near
  82.     mov ax,_data
  83.     mov ds,ax
  84.     mov es,ax
  85.  
  86.            mov  di,99*160          ;<- unterste zeile im feuer
  87.     add  di,5         ;<- verschiebung der punkte, um auch rand zu
  88.                 ;soften (s.u.)
  89.            mov  cx,6        ;<- anzahl der punkte (hotspots)
  90. hotspots:
  91.            push di            ;<- register sichern, Random proc zerstört
  92.            push cx            ;diese register
  93.            push es
  94.            push di
  95.            mov  ax,150             ;<- wert zwischen 0 und 150 für hotspot holen
  96.            call random        ;                ^-breite des feuers
  97.            pop  di            ;                 minus 2x verschiebung (s.o.)
  98.            add  di,ax        ;<- stelle für hotspot festlegen
  99.  
  100.            mov  ax,80              ;<- paletteneintrag für hotspot holen 
  101.            push di            ;je höher desto heller (0-150)
  102.            call random
  103.            add  ax,70        ;<- um hotspot heller zu machen 
  104.            pop  di            ;also um werte zwischen 70 und 150 zu bekommen
  105.            pop  es            ;sonst brennt das Feuer zu niedrig
  106.            pop  cx
  107.            mov  ah,al        ;<- hotspot verdoppeln
  108.            mov  [di],ax            ;<- hotspot setzten (in die Flamemap)
  109.            pop  di
  110.            loop hotspots           ;<- loop um alle hotspots zu setzten   
  111.  
  112.     mov di,320+160*30       ;<- in der 31 zeile mit dem einlesen und
  113. scanning_flames:                ;berechnen der flamme anfangen        
  114.         xor  ax,ax
  115.         xor  bx,bx
  116.         mov  bl,flames[di]    ;<- einen punkt einlesen
  117.         mov  al,flames[di+160]  ;<- den unten,linken und rechten benachbarten 
  118.         add  bx,ax        ;punkt dazu addieren
  119.         mov  al,flames[di-1]
  120.         add  bx,ax
  121.         mov  al,flames[di+1]
  122.         add  bx,ax
  123.         shr  bx,2        ;<- die quersumme davon berechnen(=soften)
  124.     jz   @@1        ;<- wenn schon 0, dann schon schwarz
  125.     dec  bx            ;<- sonst um 1 dunkler machen
  126. @@1:
  127.            mov  flames[di-160],bl  ;<- punkt in die Flamemap setzen und nach oben  
  128.            inc  di            ;setzten
  129.     cmp di,160*100         ;<- nächsten punkt berechenen 
  130.            jb   scanning_flames
  131.  
  132.            mov  ax,0a000h        
  133.            mov  es,ax
  134.            mov  si,offset flames
  135.     add  si,160*30
  136.            mov  di,320*60
  137.            mov  bx,66        ;<- 96 zeilen (*2..verdopplung der pixel)
  138. @plot_it:
  139.            mov  cx,160        ;<- mit je 160 pixel pro zeile
  140. @@2:
  141.      mov al,ds:[si]
  142.     mov ah,al
  143.      mov es:[di],ax        ;<- pixel 4mal setzten
  144.      mov es:[di+320],ax    ;damit ist der pixel um 2 getreckt
  145.     inc si
  146.     inc di
  147.     inc di
  148.     loop @@2        ;<- alle pixel der zeile setzten
  149.  
  150.            add  di,640-320
  151.            dec  bx
  152.     jnz  @plot_it           ;<- die restlichen zeilen setzten
  153.  
  154.     in al,60h        ;<- wartet auf <esc>
  155.     cmp al,1
  156.     je flamme_ende        ;<- dann raus
  157.  
  158.     jmp flame        ;<- sonst wieder neue Flamme
  159.  
  160. flamme_ende:
  161.     ret      
  162.  
  163. flame  endp
  164.  
  165. ;************************************************************
  166. ;      Initialisiert den Zufallsgenerator
  167. ;************************************************************
  168. RandSeed        dd       0
  169.  
  170. randomize       proc  near   
  171.         mov      ah,2Ch
  172.         int      21h
  173.         mov      Word ptr cs:[RandSeed],cx
  174.         mov      Word ptr cs:[RandSeed+2],dx
  175.         ret
  176. randomize       endp
  177.  
  178. ;************************************************************
  179. ;      Berechnet eine Zufallszahl
  180. ;************************************************************
  181. ; In:  AX - Range
  182. ; Out: AX - Value within 0 through AX-1
  183. ;************************************************************
  184.  
  185. random          proc  near
  186.         mov      cx,ax          ; save limit
  187.         mov      ax,Word ptr cs:[RandSeed+2]
  188.         mov      bx,Word ptr cs:[RandSeed]
  189.         mov      si,ax
  190.         mov      di,bx
  191.         mov      dl,ah
  192.         mov      ah,al
  193.         mov      al,bh
  194.         mov      bh,bl
  195.         xor      bl,bl
  196.         rcr      dl,1
  197.         rcr      ax,1
  198.         rcr      bx,1
  199.         add      bx,di
  200.         adc      ax,si
  201.         add      bx,62e9h
  202.         adc      ax,3619h
  203.         mov      word ptr cs:[RandSeed],bx
  204.         mov      word ptr cs:[RandSeed+2],ax
  205.         xor      dx,dx
  206.         div      cx
  207.         mov      ax,dx                  ; return modulus
  208.         ret
  209. random          endp
  210.  
  211. _code ends
  212.  
  213. _stack segment use16 public stack 'stack'
  214. db 100h dup (?)
  215. _stack ends
  216.  
  217. pal segment use16 public 'data'
  218. include palette.inc
  219. pal ends
  220.  
  221. end main
  222.