#include <mikmod.h> #include <math.h> #include <allegro.h> #include <easymik.h> #include <tdgui.h> #include <jpeg.h> #include "main.h" #include "things.h" char om; UNIMOD *mf; void _draw_duke() { int x,y,nx,ny; char r,m; x=info.x; y=info.y; r=info.r; m=info.m; temp=create_bitmap(duk[r*9+m]->w,duk[r*9+m]->h); clear_to_color(temp,makecol(255,0,255)); if(info.f==0) draw_sprite(temp,duk[r*9+m],0,0); else draw_sprite_h_flip(temp,duk[r*9+m],0,0); nx=duk[r*9+m]->w/1.05+(y-20); ny=duk[r*9+m]->h/1.05+(y-30); stretch_sprite(bmp,temp,x*20-nx/2,y*10-ny+5,nx,ny); destroy_bitmap(temp); m+=1; if(m>8) m=1; info.m=m; } typedef struct { int y; int c; } Item; int qsort_helper_by_size(void *e1, void *e2) { return ((Item *)e1)->y - ((Item *)e2)->y; } void draw_scene() { char r,m,x,y; int nx,ny; char rm; Item list[30]; char zobj,i,c; x=info.x; y=info.y; rm=info.room; blit(broom,bmp,0,0,0,0,640,400); c=info.room; zobj=0; for(i=0;i<30;i++){ if(room[c].obj[i]>0){ list[zobj].y=obj[room[c].obj[i]-1].y; list[zobj].c=room[c].obj[i]-1; zobj++; } } list[zobj].y=info.y; list[zobj].c=-1; zobj++; qsort(list, zobj, sizeof(Item), qsort_helper_by_size); for(i=0;i<zobj;i++){ c=list[i].c; if(c==-1) _draw_duke(); else{ draw_sprite(bmp,objs[c],obj[c].x*20-objs[c]->w/2, obj[c].y*10-objs[c]->h); } } } void chyba(char text[80]) { end_mikmod(); allegro_exit(); printf("%s\n",text); exit(0); } char tbuf[60]; void load_room(int c) { // unsigned int col[256]; PALETTE tpal; int i,x,y; if(info.nroom==c) return; info.nroom=c; /* sprintf(tbuf,"room%0004d.pal",c); tdata=load_datafile_object("xmas.dat",tbuf); for(i=0;i<256;i++){ col[i]=((unsigned char *)tdata[0].dat)[i*2+1]*256; col[i]+=((unsigned char *)tdata[0].dat)[i*2]; } unload_datafile_object(tdata); */ sprintf(tbuf,"room%0004d.pre",c); tdata=load_datafile_object("xmas.dat",tbuf); for(y=0;y<40;y++) for(x=0;x<32;x++) pole[x][y]=((char *)tdata[0].dat)[x+y*32]; unload_datafile_object(tdata); sprintf(tbuf,"xmas.dat#room%0004d.jpg",c); broom=load_jpeg(tbuf,tpal); /* set_color_depth(8); sprintf(tbuf,"room%0004d.pcx",c); tdata=load_datafile_object("xmas.dat",tbuf); set_color_depth(16); for(y=0;y<400;y++) for(x=0;x<640;x++){ putpixel(broom,x,y,col[getpixel(tdata[0].dat,x,y)]); } unload_datafile_object(tdata); */ if(info.mtype==0){ if(room[c].music!=info.music){ if(mf!=0){ unload_datafile_object(music); stop_mod(); free_mod(mf); } sprintf(tbuf,"musx%0004d.sm1",room[c].music); music=load_datafile_object("xmas.dat",tbuf); mf=init_data_mod(&music[0]); info.music=room[c].music; play_mod(mf,1); } } /* // if(info.mtype==1) // { if(room[c].music!=info.music){ info.music=room[c].music; unload_amp(); load_amp("data/imission.mp3",1); amp_buf_len=1000000; } // } */ if(room[c].demo>0&&info.demo==0) { demo(room[c].demo-1); room[c].demo=0; } } void main(void) { allegro_init(); bill_init(); install_keyboard(); install_timer(); install_mouse(); set_config_file("xmas.cfg"); // if(info.mtype==0){ init_mikmod(0); set_mod_volume(25); // } // if(info.mtype==1){ // install_sound(-1,0,0); // install_amp(); // } packfile_password("MeCiAr"); printf("Startujem...\n"); set_color_depth(get_config_int("gfx","bpp",16)); broom=create_bitmap(640,400); if(broom==0) chyba("Alloc_mem: Nedostatocna XMS pamat."); bmp=create_bitmap(640,480); if(bmp==0) chyba("Alloc_mem: Nedostatocna XMS pamat."); clear(bmp); init_datafiles(); /* duk=load_datafile("data/duke.dat"); if(duk==NULL) chyba("Load_duke: Chyba pri citani z disku!"); if(info.mtype==0){ music=load_datafile("data/music.dat"); if(music==NULL) chyba("Load_music: Chyba pri citani z disku!"); } objs=load_datafile("data/objs.dat"); if(objs==NULL) chyba("Load_obj: Chyba pri citani z disku!"); datas=load_datafile("data/data.dat"); if(datas==NULL) chyba("Load_data: Chyba pri citani z disku!"); invent=load_datafile("data/invent.dat"); if(invent==NULL) chyba("Load_inventory: Chyba pri citani z disku!"); faces=load_datafile("data/faces.dat"); if(faces==NULL) chyba("Load_faces: Chyba pri citani z disku!"); demos=load_datafile("data/demos.dat"); if(demos==NULL) chyba("Load_demos: Chyba pri citani z disku!"); */ init_engine(); datas=load_datafile_object("xmas.dat","font0000"); if(set_gfx_mode(0,640,480,0,0)<0) chyba("Init_gfx: Nedokazem nastavit graficky rezim 640x480 16bit."); if(os_type==OSTYPE_WIN95) set_gfx_mode(0,640,480,0,0); set_mouse_sprite(utils[3]); blit(utils[1],bmp,0,0,0,400,640,20); ta_funkcie=create_bitmap(240,60); blit(utils[0],ta_funkcie,0,0,0,0,240,60); /* tdbox(ta_funkcie,0,0,240,60,6); text_mode(-1); textout_centre(ta_funkcie,datas[0].dat,"CHOD",40,2,0); textout_centre(ta_funkcie,datas[0].dat,"ZOBER",120,2,0); textout_centre(ta_funkcie,datas[0].dat,"SPOJ",200,2,0); textout_centre(ta_funkcie,datas[0].dat,"POUZI",40,32,0); textout_centre(ta_funkcie,datas[0].dat,"POZRI",120,32,0); textout_centre(ta_funkcie,datas[0].dat,"HOVOR",200,32,0); vline(ta_funkcie,80,2,57,makecol(150,150,150)); vline(ta_funkcie,160,2,57,makecol(150,150,150)); tdhline(ta_funkcie,2,29,236); tdbox(bmp,241,420,18,60,6); tdbox(bmp,621,420,18,60,6); */ blit(ta_funkcie,bmp,0,0,0,420,240,60); temp1=create_bitmap(640,80); main_menu(); chyba("Kde je Santa KLAUS?"); }