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