{$H1} {$S1} program fire2; uses fastfire; const MAXX = FIREWIDTH; MAXY = FIREHEIGHT; var firecells: FireBuf; firepalette: array [0..15] of integer = { ( $FFA, $FF8, $FF4, $FF0, $FE0, $FD0, $FA0, $F90, $F00, $E00, $D00, $A00, $800, $600, $300, $000); } ( $FFA, $FFA, $FFA, $FFA, $FF0, $FF0, $FF0, $FF0, $FF0, $FD0, $FA0, $C00, $A00, $700, $400, $000); x,y:integer; procedure createPalette; var i:integer; begin for i := 15 downto 0 do setpalette(15 - i, firepalette[i]); end; procedure fireItUp; var x,y:integer; begin y := MAXY - 1; for x := 1 to MAXX - 1 do firecells[y, x] := random and 127; end; procedure updateFire; var i,x,y:integer; begin for y := 0 to MAXY - 2 do for x := 1 to MAXX - 1 do begin i := ((firecells[y + 1, x - 1] + firecells[y + 1, x] + firecells[y + 1, x + 1] + firecells[y + 2, x]) ) shr 2; if i > 0 then i := i - 1; firecells[y, x] := i; end; end; procedure drawFire; var x, y, col:integer; begin for y := 0 to MAXY - 1 do begin x := 0; for col in firecells[y] do begin putpixel(100 + x, 150 + y, col shr 3); x := x + 1; end; end; end; begin randomize; initgraphics; createPalette; while not conavail do begin fireItUp; FastFireUpdate(firecells); { updateFire; } FastFireDraw(firecells, 160, 100); { drawFire; } end; for y := 0 to MAXY do begin x := firecells[y, 10]; drawline(0, y, x, y, 1); end; end.