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 >
Wrap
Assembly Source File
|
1994-11-16
|
7KB
|
222 lines
;******************************************************************************
;******************************************************************************
; CODE DONE BY MAC OF PROPHECY!
; YOU CAN CONTACT ME AT:
; BBS: DARK iLLUSiON +49-(0)89-36102651 (PROPHECY WHQ)
; FIDONET: 2:2480/826.14
;******************************************************************************
; THiS SOURCE CODE iS FREEWARE
; iF YOU FiND THiS CODE USEFULL PLEASE GREET US ( PROPHECY )
; iF YOU USE THiS IN YOUR OWN PRODUCTIONS PLEASE GiMME THE CREDiTS
;******************************************************************************
; MY CODE iS BASED ON THE FiRE-EFFECT BY DANiEL SJOBERG
; BECAUSE HE USED A RANDOM PROCEDURE ( MADE BY ANONYMOUS ) AND THE
; SiMPLE FORMULA OF JARE/VANGELiSTEAM ( TNX )
; i REWROTE AND iMPROVED ALMOST EVERYTHiNG OF HiS CODE
;******************************************************************************
; THE MEMBERSTATUS OF PROPHECY IN LATE 1994
;
; CYBOMAN - MUSiC
; GEMiNi - CODE
; HUMANOiD - MUSiC
; MAS - CODE (UT)
; MAC - CODE, GFX
; KAOS - BBS, ORGANIZER
;******************************************************************************
;******************************************************************************
.386
_data segment use16 public 'data'
flames db 160*100 dup (0) ;Flamemap
banner db 'Code done by MAC of PROPHECY in 1994!',10,13
db 'call the DARK iLLUSiON BBS: +49-(0)89-36102651'
db 10,13,'$'
_data ends
_code segment use16 public 'code'
assume cs:_code,ds:_data,ss:_stack
main proc near
mov ax,_data
mov ds,ax
mov ax,13h ;<- 320x200x256 gfx-mode installieren
int 10h
mov ax,pal ;<- feuerpalette installieren
mov es,ax
mov ax,1012h
xor bx,bx
mov cx,255
xor dx,dx
int 10h
;***********************************************************
; Main Code
;***********************************************************
call flame ;<- flammenroutine aufrufen
mov ax,3 ;<- zurück in Textmode
int 10h
mov ax,_data
mov ds,ax
mov dx,offset banner ;<- end banner ausgeben
mov ah,9
int 21h
mov ax,4c00h ;<- und zurück ins dos
int 21h
main endp
;************************************************************
; Flammen Routine
;************************************************************
flame proc near
mov ax,_data
mov ds,ax
mov es,ax
mov di,99*160 ;<- unterste zeile im feuer
add di,5 ;<- verschiebung der punkte, um auch rand zu
;soften (s.u.)
mov cx,6 ;<- anzahl der punkte (hotspots)
hotspots:
push di ;<- register sichern, Random proc zerstört
push cx ;diese register
push es
push di
mov ax,150 ;<- wert zwischen 0 und 150 für hotspot holen
call random ; ^-breite des feuers
pop di ; minus 2x verschiebung (s.o.)
add di,ax ;<- stelle für hotspot festlegen
mov ax,80 ;<- paletteneintrag für hotspot holen
push di ;je höher desto heller (0-150)
call random
add ax,70 ;<- um hotspot heller zu machen
pop di ;also um werte zwischen 70 und 150 zu bekommen
pop es ;sonst brennt das Feuer zu niedrig
pop cx
mov ah,al ;<- hotspot verdoppeln
mov [di],ax ;<- hotspot setzten (in die Flamemap)
pop di
loop hotspots ;<- loop um alle hotspots zu setzten
mov di,320+160*30 ;<- in der 31 zeile mit dem einlesen und
scanning_flames: ;berechnen der flamme anfangen
xor ax,ax
xor bx,bx
mov bl,flames[di] ;<- einen punkt einlesen
mov al,flames[di+160] ;<- den unten,linken und rechten benachbarten
add bx,ax ;punkt dazu addieren
mov al,flames[di-1]
add bx,ax
mov al,flames[di+1]
add bx,ax
shr bx,2 ;<- die quersumme davon berechnen(=soften)
jz @@1 ;<- wenn schon 0, dann schon schwarz
dec bx ;<- sonst um 1 dunkler machen
@@1:
mov flames[di-160],bl ;<- punkt in die Flamemap setzen und nach oben
inc di ;setzten
cmp di,160*100 ;<- nächsten punkt berechenen
jb scanning_flames
mov ax,0a000h
mov es,ax
mov si,offset flames
add si,160*30
mov di,320*60
mov bx,66 ;<- 96 zeilen (*2..verdopplung der pixel)
@plot_it:
mov cx,160 ;<- mit je 160 pixel pro zeile
@@2:
mov al,ds:[si]
mov ah,al
mov es:[di],ax ;<- pixel 4mal setzten
mov es:[di+320],ax ;damit ist der pixel um 2 getreckt
inc si
inc di
inc di
loop @@2 ;<- alle pixel der zeile setzten
add di,640-320
dec bx
jnz @plot_it ;<- die restlichen zeilen setzten
in al,60h ;<- wartet auf <esc>
cmp al,1
je flamme_ende ;<- dann raus
jmp flame ;<- sonst wieder neue Flamme
flamme_ende:
ret
flame endp
;************************************************************
; Initialisiert den Zufallsgenerator
;************************************************************
RandSeed dd 0
randomize proc near
mov ah,2Ch
int 21h
mov Word ptr cs:[RandSeed],cx
mov Word ptr cs:[RandSeed+2],dx
ret
randomize endp
;************************************************************
; Berechnet eine Zufallszahl
;************************************************************
; In: AX - Range
; Out: AX - Value within 0 through AX-1
;************************************************************
random proc near
mov cx,ax ; save limit
mov ax,Word ptr cs:[RandSeed+2]
mov bx,Word ptr cs:[RandSeed]
mov si,ax
mov di,bx
mov dl,ah
mov ah,al
mov al,bh
mov bh,bl
xor bl,bl
rcr dl,1
rcr ax,1
rcr bx,1
add bx,di
adc ax,si
add bx,62e9h
adc ax,3619h
mov word ptr cs:[RandSeed],bx
mov word ptr cs:[RandSeed+2],ax
xor dx,dx
div cx
mov ax,dx ; return modulus
ret
random endp
_code ends
_stack segment use16 public stack 'stack'
db 100h dup (?)
_stack ends
pal segment use16 public 'data'
include palette.inc
pal ends
end main