#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(); }