{$H1} {$S2} program fire; const MAXX = 30; MAXY = 50; var firebuf: array [0..MAXY, 0..MAXX] of integer; firepalette: array [0..15] of integer = ( $FFA, $FF8, $FF4, $FF0, $FE0, $FD0, $FA0, $F90, $F00, $E00, $D00, $A00, $800, $600, $300, $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 firebuf[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 := ((firebuf[y + 1, x - 1] + firebuf[y + 1, x] + firebuf[y + 1, x + 1] + firebuf[y + 2, x]) ) shr 2; if i > 0 then i := i - 1; firebuf[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 firebuf[y] do begin putpixel(300 + x, 150 + y, col shr 3); x := x + 1; end; end; end; begin randomize; initgraphics; createPalette; while not conavail do begin fireItUp; updateFire; drawFire; end; for y := 0 to MAXY do begin x := firebuf[y, 10]; drawline(0, y, x, y, 1); end; end.