File: MAIN.C | Size: 5,754 bytes | Download file | Back to directory listing | BWPOW's homepage
#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?");
}