84 lines
1.5 KiB
ObjectPascal
84 lines
1.5 KiB
ObjectPascal
{$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.
|