File: SAN.C | Size: 2,128 bytes | Download file | Back to directory listing | BWPOW's homepage
#include <allegro.h>
 
int tim,otim=-1;
 
void santimer()
{
  tim++;
}
END_OF_FUNCTION(santimer);
 
void view_san(char filename[45])
{
  int i,f,w,h,x,y,sw,sh,yy,fr;
  int ymov=1;
  int verz,inter;
  PACKFILE *s;
  BITMAP *bmp,*temp;
  PALETTE pal;
 
  packfile_password("SAN");
  s=pack_fopen(filename,F_READ_PACKED);
  if(s==NULL){
    return;
  }
 
  if(ymov==1) ymov=40;
  else ymov=0;
 
  if(pack_igetw(s)!=2){
    pack_fclose(s);
    return;
  }
 
  verz=pack_igetw(s);
  if(verz!=2){
    pack_fclose(s);
    return;
  }
 
  f=pack_igetw(s);
 
  fr=16;
//  ymov=0;
  if(verz==2){
    fr=pack_igetw(s);
    ymov=pack_igetw(s);
    if(ymov==1) ymov=40;
  }
 
  if(ymov==0){pack_fclose(s);return;}
 
  set_color_depth(8);
  set_gfx_mode(0,640,400,0,0);
 
  LOCK_FUNCTION(santimer);
  install_int_ex(santimer,BPS_TO_TIMER(fr));
 
  w=pack_igetw(s);
  h=pack_igetw(s);
  if(pack_igetw(s)==1&&verz>0) inter=1;
  else inter=0;
  pack_igetw(s);
 
  pack_fread(pal,sizeof(PALETTE),s);
 
  set_color_depth(8);
 
  bmp=create_bitmap(w,h);
  pack_fread(bmp->dat,w*h,s);
 
  sw=w;sh=h;
  set_palette(black_palette);
 
  blit(bmp,screen,0,0,0,ymov,w,h);
  fade_in(pal,3);
  clear(bmp);
  if(inter==0) destroy_bitmap(bmp);
  i=0;
  while(i<f)
  {
    if(tim!=otim){
    otim=tim;
    x=pack_igetw(s);
    y=pack_igetw(s);
 
    w=pack_igetw(s);
    h=pack_igetw(s);
 
    if(inter==0){
 
      bmp=create_bitmap(w,h);
      pack_fread(bmp->dat,w*h,s);
      vsync();
      blit(bmp,screen,0,0,x,y,w,h);
      destroy_bitmap(bmp);
    }
    else{
 
      temp=create_bitmap(w,h/2);
      pack_fread(temp->dat,w*(h/2),s);
      for(yy=0;yy<h;yy+=2){
        blit(temp,bmp,0,yy/2,x,yy+y,w,1);
        blit(temp,bmp,0,yy/2,x,yy+y+1,w,1);
      }
      destroy_bitmap(temp);
      vsync();
      blit(bmp,screen,0,0,0,ymov,sw,sh);
    }
    i++;
 
   }
   if(key[KEY_ESC]) break;
  }
  if(inter==1) destroy_bitmap(bmp);
  pack_fclose(s);
  remove_int(santimer);
  free(s);
  free(bmp);
  free(temp);
  while(key[KEY_ESC]);
  clear_keybuf();
}