unit sprites;
interface

uses  bmpread,timer18;

const
{...}
   ScrSizeX  = 800;
   ScrSizeX1 = ScrSizeX-1;
   ScrSizeY  = 600;
   ScrSizeY1 = ScrSizeY-1;
type
{...}
   ScreenType = array[0..ScrSizeY1,0..ScrSizeX1]of byte;
                                          {для экрана}
{...}

implementation

uses graph;
{...}

PutSprite(Sprite:SpriteType);
                              {вывод спрайта на экран}
begin
   graph.PutSprite(Sprite.X shr 6,Sprite.Y shr 6,
      Sprite.X shr 6 + Xsize - 1,
      Sprite.Y shr 6 + Ysize - 1,
      Sprite.Img^[Sprite.phase,0,0]);
end;
{...}

procedure CreateScreenBuffer;
begin                      {создание экранного буфера}
   if not IsBuffer then begin
      IsBuffer := TRUE;
      getmem(scr,GetPageSize);
      SetVirtualMode(scr);
   end;
end;
procedure DestroyScreenBuffer;
begin                   {уничтожение экранного буфера}
   if IsBuffer then begin
      IsBuffer := FALSE;
      freemem(scr,GetPageSize);
      scr := ptr(SegA000,0);
      SetNormalMode;
   end;
end;

procedure ScreenBufferToScreen;
begin                    {отображение буфера на экран}
   if IsBuffer then
      FlipToScreen(scr);
end;
procedure CreateBackBuffer;
begin                      {создание экранного буфера}
   if not IsBackBuffer then begin
      IsBackBuffer := TRUE;
      getmem(BackBuffer,GetPageSize);
   end;
end;

procedure DestroyBackBuffer;
begin                   {уничтожение экранного буфера}
   if IsBackBuffer then begin
      IsBackBuffer := FALSE;
      freemem(BackBuffer,GetPageSize);
   end;
end;

procedure BackBufferToScreen;
begin                    {отображение буфера на экран}
   if IsBackBuffer then
      move(BackBuffer^,Scr^,GetPageSize);
end;

begin
   IsBuffer := FALSE;
   IsBackBuffer := FALSE;
end.