File: WALKROOM.C | Size: 8,884 bytes | Download file | Back to directory listing | BWPOW's homepage
#include <allegro.h>
#include <tdgui.h>
#include "main.h"
#include "things.h"
 
 
char _text1[100],_text2[100],_text3[100];
int fac;
 
 
void sprava(char text1[100],char text2[100],char text3[100],int face)
{
  fac=face;
 
  strcpy(_text1,text1);
  strcpy(_text2,text2);
  strcpy(_text3,text3);
}
 
 
void _upgrade_text()
{
  if(_text1[0]==0) return;
 
  blit(bmp,temp1,0,400,0,0,640,80);
 
//  tdbox(bmp,0,400,640,80,6);
  blit(utils[4],bmp,0,0,0,400,640,80);
  blit(faces[fac],bmp,0,0,5,405,70,70);
 
  textout(bmp,datas[0].dat,_text1,100,400,0);
  textout(bmp,datas[0].dat,_text2,100,420,0);
  textout(bmp,datas[0].dat,_text3,100,440,0);
 
  blit(bmp,screen,0,0,0,0,640,480);
  show_mouse(screen);
 
  _text1[0]=0;
 
  while(!key[KEY_ENTER]&&!mouse_b);
  clear_keybuf();
  while(mouse_b);
 
  show_mouse(0);
 
  blit(temp1,bmp,0,0,0,400,640,80);
}
 
 
 
 
 
 
void fx()
{
  int i=0;
 
  while(i<201){
    if(info.tim!=info.otim)
    {
      info.otim=info.tim;
      rectfill(bmp,0,i,640,i+30,0);
      rectfill(bmp,0,400-i,640,400-i-30,0);
      blit(bmp,screen,0,0,0,0,640,480);
      i+=30;
    }
  }
}
 
 
 
int _where_stand()
{
  int i,x,y,r;
 
  r=info.room;
  x=info.x;
  y=info.y;
 
  for(i=0;i<5;i++)
  {
    if(x>=room[r].x[i][0]&&x<=room[r].x[i][1]&&
       y>=room[r].y[i][0]&&y<=room[r].y[i][1]){
 
      info.room=room[r].to[i];
      info.x=room[r].wx[i];
      info.y=room[r].wy[i];
      return 1;
    }
  }
  return 0;
}
 
void add_to_invent(int c)
{
  info.invent[info.i]=c;
  info.i++;
}
 
void remove_from_invent(int c)
{
  int i,w=-1;
 
  for(i=0;i<info.i;i++)
    if(info.invent[i]==c) w=i;
 
  if(w==-1) return;
 
  for(i=w;i<info.i-1;i++){
    info.invent[i]=info.invent[i+1];
  }
  info.i--;
}
 
 
void draw_invent()
{
  int i;
  for(i=0;i<6;i++){
    if(i+info.ip>=info.i) break;
    rectfill(bmp,i*60+260,420,i*60+260+60,480,0);
    draw_sprite(bmp,invent[info.invent[i+info.ip]],i*60+290-invent[info.invent[i+info.ip]]->w/2,
                450-invent[info.invent[i+info.ip]]->h/2);
  }
}
 
 
 
static char *funkcie[]={
"CHOD",
"POUZI",
"ZOBER",
"POZRI",
"SPOJ",
"HOVOR",
NULL
};
 
 
int _walk(char x1,char y1)
{
  char z=1;
  char x,y,r,f;
 
  x=info.x;
  y=info.y;
  r=info.r;
  f=info.f;
 
  if(x==x1&&y==y1) return 0;
 
  x+=traj_xy[info.t][0];
  y+=traj_xy[info.t][1];
  if(pole[x][y]==0){
     x-=traj_xy[info.t][0];
     y-=traj_xy[info.t][1];
     z=0;
   }
 
   if(traj_xy[info.t][0]==0){
     if(traj_xy[info.t][1]==+1){r=0;f=0;}
     if(traj_xy[info.t][1]==-1){r=4;f=0;}
   }
 
   if(traj_xy[info.t][0]==1){
     if(traj_xy[info.t][1]==+1){r=1;f=1;}
     if(traj_xy[info.t][1]== 0){r=2;f=1;}
     if(traj_xy[info.t][1]==-1){r=3;f=1;}
   }
 
   if(traj_xy[info.t][0]==-1){
     if(traj_xy[info.t][1]==+1){r=1;f=0;}
     if(traj_xy[info.t][1]== 0){r=2;f=0;}
     if(traj_xy[info.t][1]==-1){r=3;f=0;}
   }
 
   if(traj_xy[info.t][0]==0&&traj_xy[info.t][1]==0) z=0;
   if(x==x1&&y==y1) z=0;
 
   info.t++;
 
   info.x=x;
   info.y=y;
   info.r=r;
   info.f=f;
 
   return z;
}
 
 
int px[30][2],py[30][2];
int pc[30];
char pn;
 
void _init_predmet()
{
  int i,c,p;
  int x,y;
  c=info.room;
 
  pn=0;
 
  for(i=0;i<30;i++){
    if(room[c].obj[i]>0){
      p=room[c].obj[i]-1;
      pc[pn]=p;
 
      x=obj[p].x*20-objs[p]->w/2;
      y=obj[p].y*10-objs[p]->h;
 
      py[pn][0]=y;
      py[pn][1]=obj[p].y*10;
 
      px[pn][0]=x;
      px[pn][1]=x+objs[p]->w;
 
      pn++;
    }
  }
}
 
int _nejaky_predmet(int x,int y)
{
  int i;
  for(i=0;i<pn;i++)
    if(x>px[i][0]&&y>py[i][0]&&x<px[i][1]&&y<py[i][1])
      return pc[i];
 
  if(y>420&&x>260){
    for(i=0;i<6;i++){
      if(i+info.ip>=info.i) break;
      if(x>260+i*60&&x<260+60+i*60) return ((info.invent[i+info.ip])*(-1))-2;
    }
  }
  return -1;
}
 
 
void remove_from_room(int c)
{
  char i,r;
  r=info.room;
  for(i=0;i<30;i++)
    if(room[r].obj[i]==c+1) room[r].obj[i]=0;
}
 
char f=0;
 
int walk_room()
{
  int z=0,c=1,c1=1;
  int x1,y1;
  char om;
  char a=0;
  char tbuf[120];
  int r=-1,old_r=-22,fr=0;
 
  if(f==6) f=4;
 
  _init_predmet();
 
 
  while(!key[KEY_ESC]){
    if(info.tim!=info.otim){
      info.otim=info.tim;
 
      if(c1==1){
        draw_invent();
        c1=0;
      }
 
 
      if(c==1){
        if(z==0) info.m=0;
        draw_scene();
        c=0;
      }
 
      _upgrade_text();
 
      if(om==info.m&&info.m!=0){
        info.m=0;
        c=1;
      }
      om=info.m;
 
      if(a==0) r=_nejaky_predmet(mouse_x,mouse_y);
      if(r!=old_r){
        old_r=r;
        if(r>=0){
          blit(utils[1],bmp,0,0,0,400,640,20);
//          tdbox(bmp,0,400,640,19,6);
          text_mode(-1);
          if(f==0) sprintf(tbuf,"%s %s",funkcie[f],obj[r].pad2);
          if(f==1) sprintf(tbuf,"%s %s",funkcie[f],obj[r].pad4);
          if(f==2) sprintf(tbuf,"%s %s",funkcie[f],obj[r].pad4);
          if(f==3) sprintf(tbuf,"%s %s",funkcie[f],obj[r].pad4);
          if(f==4) sprintf(tbuf,"%s %s",funkcie[f],obj[r].pad4);
          if(f==5) sprintf(tbuf,"%s %s",funkcie[f],obj[r].pad6);
          if(f==6) sprintf(tbuf,"%s %s %s",funkcie[4],obj[fr].pad4,obj[r].pad6);
          textout_centre(bmp,datas[0].dat,tbuf,320,398,0);
        }
        else{
          text_mode(-1);
          blit(utils[1],bmp,0,0,0,400,640,20);
//          tdbox(bmp,0,400,640,19,6);
 
          if(r==-1){
            if(f!=6) textout_centre(bmp,datas[0].dat,funkcie[f],320,398,0);
            else{
              sprintf(tbuf,"%s %s",funkcie[4],obj[fr].pad4);
              textout_centre(bmp,datas[0].dat,tbuf,320,398,0);
            }
          }
          else{
            old_r=abs(r);
            old_r-=2;
            if(f==0) sprintf(tbuf,"%s",obj[old_r].name);
            if(f==1) sprintf(tbuf,"%s %s",funkcie[f],obj[old_r].pad4);
            if(f==2) sprintf(tbuf,"%s",obj[old_r].name);
            if(f==3) sprintf(tbuf,"%s %s",funkcie[f],obj[old_r].pad4);
            if(f==4) sprintf(tbuf,"%s %s",funkcie[f],obj[old_r].pad4);
            if(f==5) sprintf(tbuf,"%s",obj[old_r].name);
            if(f==6) sprintf(tbuf,"%s %s %s",funkcie[4],obj[fr].pad4,obj[old_r].pad6);
            textout_centre(bmp,datas[0].dat,tbuf,320,398,0);
          }
 
        }
      }
 
 
 
      if(mouse_b==1&&a==0)
      {
        while(mouse_b);
 
        if(mouse_x<240&&mouse_y>420){
          f=mouse_x/80;
          f*=2;
          if(mouse_y>450) f++;
          old_r=-22;
        }
 
 
        if(((f==0)||(r==-1))&&mouse_y<400){
          x1=mouse_x/20;
          y1=mouse_y/10;
          if(y1<1) y1=1;
 
          trajectory(info.x,info.y,x1,y1);
          info.t=0;
          z=1;
        }
 
        if(f==1&&r>=0){
          x1=mouse_x/20;
          y1=mouse_y/10;
          if(y1<1) y1=1;
 
          trajectory(info.x,info.y,x1,y1);
          info.t=0;
          z=1;
          a=5;
        }
        if(f==1&&r<-1){
          r=abs(r)-2;
          use_pouzi(r);
          c1=1;
          f=0;old_r=-22;
        }
 
        if(f==2&&r>=0){
          a=1;
          x1=mouse_x/20;
          y1=mouse_y/10;
          if(y1<1) y1=1;
 
          trajectory(info.x,info.y,x1,y1);
          info.t=0;
          z=1;
        }
 
 
        if(f==6&&r!=-1){
          if(r<-1) r=abs(r)-2;
          x1=mouse_x/20;
          y1=mouse_y/10;
          if(y1<1) y1=1;
 
          trajectory(info.x,info.y,x1,y1);
          info.t=0;
          z=1;
          a=2;
        }
 
        if(f==4&&r<-1){
          fr=abs(r)-2;
          f=6;
        }
 
        if(f==5&&r>=0){
          x1=mouse_x/20;
          y1=mouse_y/10;
          if(y1<1) y1=1;
 
          trajectory(info.x,info.y,x1,y1);
          info.t=0;
          z=1;
          a=3;
        }
 
        if(f==3&&r!=-1){
          if(r<-1){
            r=abs(r)-2;
            use_pozri(r);
          }
          else{
            x1=mouse_x/20;
            y1=mouse_y/10;
            if(y1<1) y1=1;
 
            trajectory(info.x,info.y,x1,y1);
            info.t=0;
            z=1;
            a=4;
          }
        }
 
      }
 
      if(z==1){
        z=_walk(x1,y1);
        if(z==0) if(_where_stand()==1){
          fx();
          return 1;
        }
        c=1;
      }
 
      if(a==1&&z==0){
        a=0;
        if(obj[r].get==1){
          add_to_invent(r);
          remove_from_room(r);
          _init_predmet();
          c1=1;
          f=0;old_r=-22;
        }
        else{
          sprintf(tbuf,"%s NECHCEM!",obj[r].pad4);
          sprava(tbuf,"","",0);
          c=1;
        }
      }
 
      if(a==2&&z==0){
        use_spoj(fr,r);
        c1=1;
        a=0;
        f=0;old_r=-22;
      }
 
      if(a==3&&z==0){
        use_hovor(r);
        c1=1;
        a=0;
        f=0;old_r=-22;
      }
 
      if(a==4&&z==0){
        use_pozri(r);
        a=0;
      }
 
      if(a==5&&z==0){
        r=abs(r)-2;
        use_pouzi(r);
        c1=1;
        f=0;old_r=-22;
        a=0;
      }
 
 
 
    }
 
    show_mouse(bmp);
    blit(bmp,screen,0,0,0,0,640,480);
    show_mouse(0);
 
 
  }
 
  return 0;
}