(*      Green Fire       *)
(* By Nick Slaughter '96 *)

(* Feel free to use this source!  *)
(* I had fun making it! ;)        *)

(*              //Nick Slaughter  *)

(* Sorry about my bad ENGLISH! ;) heheh *)
Program gfire;

Uses Crt;

Var Buffer : Array[0..64000] of Byte;

procedure mcga;  { Mcga (mode 13) }
  begin
  Asm
    Mov  ax,13h
    Int  10h
  End;
end;
Procedure Firecalc;
{ Calculating of the Fire!}

Var
  x, y, ColorVal : Integer;

Begin
  For y := 199 downto 0 do
  For x := 319 downto 0 do
  Begin
  ColorVal := (Buffer[(Y+1)*320+x]+Buffer[(Y+1)*320+(x+1)]+
    Buffer[(Y+1)*320+(x-1)]+Buffer[(Y)*320+x]) shr 2;
  If ColorVal > 0
   Then ColorVal := ColorVal -1;
    Buffer[Y*320+x] := ColorVal;
  End;
End;

Procedure Kordinat;
{Sets the cordinates at the bottom of the screen!}

Var  q : Integer;

Begin
  For q := 0 to 319 do
    Buffer[195*320+q] := Random(2) * 255;

End;


Procedure Kopiera;
{ Copy the fire using 2*2 squars }

Var
  x,y : Integer;

Begin
  For y := 197 downto 0 do
  For x := 319 downto 0 do
  Mem[$A000:y*320+x] := Buffer[y*320+x];
End;

Procedure Greencolor;
{ Makes the green COLOR! }

Var
 col : Integer;

Begin
 For col := 255 Downto 0 do
  Begin
   Port[$3c8] := col;
   Port[$3c9] := col Div 12;
   Port[$3c9] := col Div 7;
   Port[$3c9] := 0;
 End;
End;

begin
  mcga;  { Get the mode13 procedure }
  FillChar(Buffer, Sizeof(Buffer), 0);
  Greencolor;   { Get the Greencolor procedure }
  Repeat              { Repeats until a key is pressed }
    Kordinat;
    Firecalc;
    Kopiera;
  Until KeyPressed;
  Asm
  Mov  ax,0003h   { Back in text mode }
  Int  10h
  End;
End.


Contact me:

E-MAIL:

jimmy.painless@falkenberg.mail.telia.com

cya

                        //Nick Slaughter
