home *** CD-ROM | disk | FTP | other *** search
- #include "devices/audio.h"
- extern char *LoadSound();
- extern int FreeSound();
- extern struct IOAudio *StartSound();
- extern int StopSound();
- extern int rand();
- #include "obj.h"
-
- #define COMM 20 /* Anzahl der möglichen "fighters" (number of fighters) */
- #define MTEXT 300 /* Anzahl der Inschriften */
- #define IMAX 70
- #define ITM 200
-
- unsigned char ox[200]; /* X-Koordinaten der bewegten Objekte */
- unsigned char oy[200]; /* Y-Koordinaten der bewegten Objekte */
- unsigned char oh[200]; /* Hintergrund der bewegten Objekte */
- unsigned char oz[200]; /* Wann kommen die Objekte immer dran?*/
- unsigned char oj[200]; /* Worüber kommen die Objekte ? */
- unsigned char oa[200]; /* Zeichen für das Objekt */
- unsigned char ou[200]; /* Grundzeichen =0,bei Objekten, die nicht "richten" */
- unsigned int heat[200];/* Energie der einzelnen Objekte (früher mal heat) */
- unsigned int aheat[200];/* Alte Energie der einzelnen Objekte */
- char dx[200]; /* Richtung, in die die Objekte zeigen */
- char dy[200]; /* ebenfalls, hier: Y-Richtung -1,1 */
- char rx[200]; /* X-Richtung bei Rechtsdrehung */
- char ry[200]; /* Y-Richtung bei Rechtsdrehung */
- unsigned char nd; /* =-1 fürs Neuzeichnen */
- unsigned int zeit; /* Zeit (in "Tics") */
- unsigned char wlk; /* =-1, wenn wirklich ge"walkt" */
- unsigned char all[256];/* Gehen über dieses Pic erlaubt? */
- unsigned char oll[200];/* Nummern der Objekte */
- long score=0L; /* Inzwischen: Credits (Geld) */
- char *snd1;
- char *snd2;
- struct IOAudio *ia;
- char *texts;
- #define TEXTBUF 20000L
- unsigned char ix[MTEXT];
- unsigned char iy[MTEXT];
- unsigned int it[MTEXT];
- char com[COMM][500];
- char coname[COMM][10];
- unsigned char con[COMM];
- char *coa[COMM];
- unsigned char cow[COMM];
- int coh[COMM];
- int coz[COMM];
- unsigned char ak_com;
- char com_attack[COMM][10];
- unsigned int mx_energy=100;
- unsigned char sst[200]; /* Shoot-Strength */
- unsigned char hst[200]; /* Hit-Strength */
- unsigned char ac[200]; /* Armor-Class */
-
- #define JUMP_COM while(*(++coa[fn])!='"')
-
- struct Objekt
- {
- char *name;
- unsigned char interval;
- unsigned char oj;
- unsigned char oa;
- unsigned char ou;
- unsigned int heat;
- };
-
- struct Objekt obb[]=
- {
- { "COBRA-MECH" ,1,10,6,6,60000 },
- { "STANDARD-LASER",1,5 ,10,0,500 },
- { "GRANATE" ,3,5 ,11,0,13 },
- { "FIGHTER" ,13,10,18,18,9000 },
- { "DRONE" ,15,10,23,0,5000 },
- { "EXPLOSION" ,3,20,14,0,4 },
- { "BOMBE T1" ,3,20,14,0,11 },
- { "DOOR" ,1,105,67,0,2100 }
- };
-
- struct Item
- {
- char name[18];
- char art;
- unsigned int prize;
- int level;
- };
-
- struct Item item[IMAX];
- unsigned char itx[ITM];
- unsigned char ity[ITM];
- unsigned char itw[ITM];
- unsigned char itp[9];
- unsigned char itc[9];
- unsigned char srwp; /* short-range weapon */
- unsigned char lrwp; /* long-range weapon */
- unsigned char sh; /* Shield */
-
- int insc=0;
-
- char *
- com_arg(wohin,woher)
- char *wohin,*woher;
- {
- register char *p1,*p2;
-
- p1=wohin; p2=woher+1;
- while((*(p1++)=*(p2++))!='"');
- *(p1-1)=0;
- return(p2-1);
- }
-
- void
- show_items()
- {
- int tok;
- int itok;
- int itok4;
-
- tok=-1;
- while(++tok<4)
- {
- itok=itp[tok]; itok4=itp[tok+4];
- sprintf(jj,"%1d %-12s %c#%02d %1d %-12s %c#%02d",
- tok+1,
- item[itok].name,
- item[itok].art,
- itc[tok],
- tok+5,
- item[itok4].name,
- item[itok4].art,
- itc[tok+4]);
- cprint(jj);
- }
- }
-
- void
- get_item(nr)
- int nr;
- {
- int tok;
-
- tok=0;
- while(itp[tok]!=0 && tok<8 && itp[tok]!=itw[nr]) tok++;
- if(tok>=8)
- {
- cprint("Sorry, you are already carrying 8 items.");
- return();
- }
- if(itp[tok]==itw[nr])
- itc[tok]++;
- else
- {
- itp[tok]=itw[nr];
- itc[tok]=1;
- }
- itw[nr]=255;
- switch(item[itp[tok]].art)
- {
- case 'E':
- mx_energy+=item[itp[tok]].level;
- break;
- }
- cprint("OK.");
- }
-
-
- void
- take_item(xi,yi)
- int xi,yi;
- {
- register int tl;
- char tost;
- int anyth=0;
-
- tost=0;
- tl=0;
- agaiggi:
- while((itw[tl]==255 || itx[tl]!=xi || ity[tl]!=yi) && tl<ITM) tl++;
- if(tl>=ITM)
- {
- if(tost==0)
- cprint("There is nothing.");
- if(anyth==0 && oh[0]==54)
- oh[0]=0;
- return();
- }
- sprintf(jj,"You find: %s",item[itw[tl]].name);
- cprint(jj);
- cprint("Do you want to take it? (y/n)");
- kwait:
- while(((tost=*((char *)0xbfec01))&1)!=1);
- if(tost==-99 || tost==-43)
- {
- get_item(tl);
- tl++;
- goto agaiggi;
- }
- if(tost==-109)
- {
- tl++;
- cprint("Not taken.");
- anyth=1;
- goto agaiggi;
- }
- goto kwait;
- }
-
- char *
- find_label(fn,lbl)
- unsigned char fn;
- char *lbl;
- {
- register char *sok;
-
- sok=com[fn]-1;
- weiter_suchen:
- while(*(++sok)!='_');
- sok=com_arg(jj,sok+1);
- if(strcmp(jj,lbl)!=0)
- goto weiter_suchen;
- return(sok);
- }
-
- void
- show_heat()
- {
- SetAPen(pm.dbr[dbz],2L);
- RectFill(pm.dbr[dbz],114L,(long)(43+(0xFFFF-heat[0])/1000),118L,108L);
- SetAPen(pm.dbr[1-dbz],2L);
- RectFill(pm.dbr[1-dbz],114L,(long)(43+(0xFFFF-heat[0])/1000),118L,108L);
- SetAPen(pm.dbr[dbz],0L);
- RectFill(pm.dbr[dbz],114L,43L,118L,(long)(43+(0xFFFF-heat[0])/1000));
- SetAPen(pm.dbr[1-dbz],0L);
- RectFill(pm.dbr[1-dbz],114L,43L,118L,(long)(43+(0xFFFF-heat[0])/1000));
- }
-
- void
- Save_items(nmm)
- char *nmm;
- {
- int fc;
-
- if((fc=open(nmm,O_WRONLY|O_CREAT))==-1)
- return();
- write(fc,&item[0],(int)sizeof(struct Item)*IMAX);
- write(fc,&itx[0],(int)sizeof(unsigned char)*ITM);
- write(fc,&ity[0],(int)sizeof(unsigned char)*ITM);
- write(fc,&itw[0],(int)sizeof(unsigned char)*ITM);
- close(fc);
- }
-
- void
- Load_items(nmm)
- char *nmm;
- {
- int fc;
-
- if((fc=open(nmm,O_RDONLY))==-1)
- return();
- read(fc,&item[0],(int)sizeof(struct Item)*IMAX);
- read(fc,&itx[0],(int)sizeof(unsigned char)*ITM);
- read(fc,&ity[0],(int)sizeof(unsigned char)*ITM);
- read(fc,&itw[0],(int)sizeof(unsigned char)*ITM);
- close(fc);
- }
-
- void
- LadeText(name)
- char *name;
- {
- int fd;
- long lai;
-
- if((fd=open(name,O_RDONLY))==-1)
- {
- sprintf(jj,"[Couldn't open %s]",name);
- cprint(jj);
- return();
- }
- lai=lseek(fd,0L,2);
- lseek(fd,0L,0);
- read(fd,texts,(int)lai);
- close(fd);
-
- sprintf(jj,"%s.l",name);
- if((fd=open(jj,O_RDONLY))==-1)
- {
- sprintf(jj,"[Couldn't open %s.l]",name);
- cprint(jj);
- return();
- }
- read(fd,&ix[0],(int)(sizeof(unsigned char)*MTEXT));
- read(fd,&iy[0],(int)(sizeof(unsigned char)*MTEXT));
- read(fd,&it[0],(int)(sizeof(unsigned int)*MTEXT));
- close(fd);
- }
-
- void
- Save_objs(nmm)
- char *nmm;
- {
- int fc;
-
- if((fc=open(nmm,O_WRONLY|O_CREAT))==-1)
- return();
-
- write(fc,&ox[0],(int)sizeof(unsigned char)*200);
- write(fc,&oy[0],(int)sizeof(unsigned char)*200);
- write(fc,&oh[0],(int)sizeof(unsigned char)*200);
- write(fc,&oz[0],(int)sizeof(unsigned char)*200);
- write(fc,&oj[0],(int)sizeof(unsigned char)*200);
- write(fc,&oa[0],(int)sizeof(unsigned char)*200);
- write(fc,&ou[0],(int)sizeof(unsigned char)*200);
- write(fc,&heat[0],(int)sizeof(unsigned int)*200);
- write(fc,&aheat[0],(int)sizeof(unsigned int)*200);
- write(fc,&oll[0],(int)sizeof(unsigned char)*200);
- write(fc,&dx[0],(int)sizeof(char)*200);
- write(fc,&dy[0],(int)sizeof(char)*200);
- write(fc,&rx[0],(int)sizeof(char)*200);
- write(fc,&ry[0],(int)sizeof(char)*200);
- write(fc,&sst[0],(int)sizeof(unsigned char)*200);
- write(fc,&hst[0],(int)sizeof(unsigned char)*200);
- write(fc,&ac[0],(int)sizeof(unsigned char)*200);
-
- close(fc);
- }
-
- void
- Load_objs(nmm)
- char *nmm;
- {
- int fc;
-
- if((fc=open(nmm,O_RDONLY))==-1)
- return();
- read(fc,&ox[0],(int)sizeof(unsigned char)*200);
- read(fc,&oy[0],(int)sizeof(unsigned char)*200);
- read(fc,&oh[0],(int)sizeof(unsigned char)*200);
- read(fc,&oz[0],(int)sizeof(unsigned char)*200);
- read(fc,&oj[0],(int)sizeof(unsigned char)*200);
- read(fc,&oa[0],(int)sizeof(unsigned char)*200);
- read(fc,&ou[0],(int)sizeof(unsigned char)*200);
- read(fc,&heat[0],(int)sizeof(unsigned int)*200);
- read(fc,&aheat[0],(int)sizeof(unsigned int)*200);
- read(fc,&oll[0],(int)sizeof(unsigned char)*200);
- read(fc,&dx[0],(int)sizeof(char)*200);
- read(fc,&dy[0],(int)sizeof(char)*200);
- read(fc,&rx[0],(int)sizeof(char)*200);
- read(fc,&ry[0],(int)sizeof(char)*200);
- read(fc,&sst[0],(int)sizeof(unsigned char)*200);
- read(fc,&hst[0],(int)sizeof(unsigned char)*200);
- read(fc,&ac[0],(int)sizeof(unsigned char)*200);
-
- close(fc);
- }
-
- void
- LadeAlles(nmm)
- char *nmm;
- {
- char kkl[30];
- sprintf(kkl,"%s.pm",nmm);
- LoadPlay(kkl);
- sprintf(kkl,"%s.it",nmm);
- Load_items(kkl);
- sprintf(kkl,"%s.texts",nmm);
- LadeText(kkl);
- sprintf(kkl,"%s.objs",nmm);
- Load_objs(kkl);
- }
-
- void
- addscore(addy)
- int addy;
- {
- score+=(long)addy;
- sprintf(jj,"%06ld",score);
- SetAPen(pm.dbr[dbz],2L);
- SetBPen(pm.dbr[dbz],0L);
- SetAPen(pm.dbr[1-dbz],2L);
- SetBPen(pm.dbr[1-dbz],0L);
- Move(pm.dbr[dbz],47L,62L);
- Text(pm.dbr[dbz],jj,(long)strlen(jj));
- Move(pm.dbr[1-dbz],47L,62L);
- Text(pm.dbr[1-dbz],jj,(long)strlen(jj));
- }
-
- void
- death()
- {
- cprint("You are really lucky - As this is only version 0.5 of MF, you can't die... Normally, your mech would have been blown to pieces just now.");
- heat[0]=60000L; show_heat();
- }
-
- void
- explosion(nr)
- register unsigned char nr;
- {
- pic(ox[nr],oy[nr],(unsigned char)14);
- oa[nr]=14;
- oll[nr]=5;
- heat[nr]=obb[5].heat;
- oz[nr]=obb[5].interval;
- StopSound(ia);
- ia=StartSound(snd2,64,15000,1);
- }
-
-
-
- unsigned char
- walk(nx,ny,nr)
- register unsigned char nx,ny;
- register unsigned char nr;
- {
- register unsigned char haha;
-
- wlk=0;
- haha=(*(pm.playbeg+ny*pm.b+nx))&127;
- if(all[haha]>oj[nr])
- return(haha);
- pic(ox[nr],oy[nr],oh[nr]);
- if(ou[nr]!=0)
- {
- switch((int)(nx-ox[nr]))
- {
- case 1:
- oa[nr]=ou[nr]; dx[nr]=1; dy[nr]=0; break;
- case -1:
- oa[nr]=ou[nr]+2; dx[nr]=-1; dy[nr]=0; break;
- case 0:
- oa[nr]= (ny<oy[nr]) ? ou[nr]+1:ou[nr]+3;
- dx[nr]=0;
- dy[nr]= (ny<oy[nr]) ? -1:1;
- }
- rx[nr]=(dx[nr]*dx[nr]-1)*dy[nr];
- ry[nr]=-(dy[nr]*dy[nr]-1)*dx[nr];
- }
- oh[nr]=haha; ox[nr]=nx; oy[nr]=ny;
- pic(nx,ny,oa[nr]);
- nd=-1;
- wlk=-1;
- return(haha);
- }
-
- void
- add(ax,ay,nx,ny,nr)
- unsigned char ax,ay,nx,ny,nr;
- {
- register int ser;
-
- ser=-1;
- while(++ser<200 && oa[ser]!=0);
- ox[ser]=ax; oy[ser]=ay; oh[ser]=(*(pm.playbeg+ay*pm.b+ax))&127;
- oz[ser]=obb[nr].interval;
- oj[ser]=obb[nr].oj; oa[ser]=obb[nr].oa; ou[ser]=obb[nr].ou;
- heat[ser]=obb[nr].heat; aheat[ser]=heat[ser]; oll[ser]=nr;
- if(nx!=ax)
- dx[ser]= (nx<ax) ? -1:1;
- else
- dx[ser]=0;
- if(ny!=ay)
- dy[ser]= (ny<ay) ? -1:1;
- else
- dy[ser]=0;
-
- walk(nx,ny,ser);
- if(wlk==0)
- { oa[ser]=0; return(); }
- }
-
- void
- message(ms)
- char *ms;
- {
- char *anf;
- register char *pos;
- int answer=0;
-
- pos=ms-1;
- anf=ms;
-
- msloop:
- while(*(++pos)!='&' && *pos!=0);
- if(*pos==0)
- {
- if(pos>anf)
- cprint(anf);
- return();
- }
- if(pos>anf)
- {
- *pos=0;
- cprint(anf);
- }
- *(pos++)='&';
- anf=pos+1;
- switch(*pos)
- {
- case 'T': /* Teleport: "&T23/45&dnjcndv&Pgold.iff&You see...&W&&p& */
- {
- int tx,ty;
-
- while(*(++pos)!='/');
- *pos=0;
- tx=atoi(anf);
- *pos='/';
- anf=pos+1;
- while(*(++pos)!='&');
- *pos=0;
- ty=atoi(anf);
- *pos='&';
- walk(tx,ty,0);
- nd=-1;
- }
- break;
- case 'P':
- {
- struct BitMap bbit;
-
- while(*(++pos)!='&');
- *pos=0;
- strcpy(jj,anf);
- *pos='&';
- openbit(&bbit,96,90,5);
- read_iff(jj,&bbit,0L,0L);
- SetAPen(pm.dbr[1-dbz],0L);
- RectFill(pm.dbr[1-dbz],131L,18L,233L,109L);
- BltBitMap(&bbit,0L,0L,pm.sb[1-dbz],134L,18L,96L,90L,0xC0L,0xFFL,0L);
- WaitBlit();
- closebit(&bbit);
- }
- break;
- case 'p':
- pos++;
- SetAPen(pm.dbr[1-dbz],0L);
- RectFill(pm.dbr[1-dbz],131L,18L,233L,109L);
- gn=1;
- ShowPlay(ox[0]-5,oy[0]-4);
- turn();
- break;
- case 'W':
- pos++;
- while(!LMB_DRUCK);
- break;
- case 'Q':
- /* Question: "&Qbanana&Yes, that was the password.&E&&q&That was wrong!" */
- {
- char inni[50];
-
- while(*(++pos)!='&');
- *pos=0;
- strcpy(jj,anf);
- *pos='&';
- Inline(inni);
- if(strcmp(jj,inni)!=0)
- {
- pos++;
- while(*pos!='&' || *(pos+1)!='q') pos++;
- pos=pos+2;
- }
- }
- break;
- case 'E':
- return();
- break;
- case 'D':
- {
- int del;
-
- while(*(++pos)!='&');
- *pos=0;
- del=atoi(anf);
- *pos='&';
- Delay((long)del);
- }
- break;
- case 'S': /* Set "&S23/77=109&" */
- {
- unsigned char wx,wy,wd;
-
- while(*(++pos)!='/');
- *pos=0;
- wx=(unsigned char)atoi(anf);
- *pos='/';
- anf=pos+1;
- while(*(++pos)!='=');
- *pos=0;
- wy=(unsigned char)atoi(anf);
- *pos='=';
- anf=pos+1;
- while(*(++pos)!='&');
- *pos=0;
- wd=(unsigned char)atoi(anf);
- *pos='&';
- pic(wx,wy,wd);
- }
- break;
- default:
- while(*(++pos)!='&');
- }
- anf=pos+1;
- goto msloop;
- }
-
- unsigned int hvorher;
-
- int
- sub(x,y,wieviel)
- register unsigned char x,y;
- unsigned int wieviel;
- {
- register unsigned char simoka,nm;
-
- if((*(pm.playbeg+y*pm.b+x))&127==0)
- return(-1);
- simoka=0;
- while(simoka<200 && (oa[simoka]==0 || ox[simoka]!=x || oy[simoka]!=y)) simoka++;
- if(simoka>=200)
- {
- if((*(pm.playbeg+y*pm.b+x)&127)==27)
- {
- *(pm.playbeg+y*pm.b+x)&=128;
- add(x,y,x,y,6);
- StopSound(ia);
- ia=StartSound(snd2,50,17000,1);
- }
- return(-1);
- }
- nm=oll[simoka];
- if(nm==1 || nm==2 || (nm>=5 && nm<=7))
- return(-1);
- wieviel=((rand()/1000)*wieviel*ac[simoka])/3500;
- hvorher=heat[simoka];
- heat[simoka]-=wieviel;
- if(nm==0)
- {
- sprintf(jj,"You have been hit for %d damage points.",wieviel);
- cprint(jj);
- show_heat();
- }
- if(heat[simoka]>hvorher)
- {
- oa[simoka]=0;
- /* ______EXPLOSION !!!!!!!! */
- switch(nm)
- {
- case 0:
- death(); break;
- case 3:
- addscore(100); explosion(simoka);
- nm=-1; while(con[++nm]!=simoka);
- coa[nm]=0L;
- cprint("Hostile FIGHTER exploded."); break;
- case 4:
- addscore(50); explosion(simoka); cprint("Hostile DRONE exploded."); break;
- case 8:
- addscore(150); explosion(simoka); cprint("Hostile fighter exploded."); break;
- }
- return(-2);
- }
- return(wieviel);
- }
-
- void
- lade_com(xc,yc)
- unsigned char xc,yc;
- {
- char com_name[50];
- int fc;
- long lai;
-
- sprintf(com_name,"%d-%d.com",(int)xc,(int)yc);
- if((fc=open(com_name,O_RDONLY))==-1)
- return();
- lai=lseek(fc,0L,2);
- lseek(fc,0L,0);
- read(fc,com[ak_com],(int)lai);
- close(fc);
-
- fc=0;
- while(ox[fc]!=xc || oy[fc]!=yc)
- fc++;
- con[ak_com]=fc;
- coa[ak_com]=com[ak_com];
- cow[ak_com]=0;
- ak_com++;
- /* Nummer des entsprechenden Fighters suchen und eintragen */
- }
-
- void
- Game()
- {
- register int si;
- register unsigned char xx,yy;
- register unsigned char zz;
- unsigned char weapon=1;
- int tafel=0;
- int fnumber=0;
- char *mesg=0L;
-
- ak_com=0;
- cw.rp=pm.dbr[1-dbz];
- cprint("This program was created with the PlayMap-Routines by Florian Marquardt.");
-
- hst[0]=10; ac[0]=200; sst[0]=10; srwp=8; lrwp=8; sh=8;
- si=-1; while(++si<256) all[si]=100;
- si=-1; while(++si<9) itp[si]=0;
- /* ___Jetzt muß alles, worüber man gehen kann auf <10 gesetzt werden. */
- all[0]=1; all[4]=2; all[12]=3; all[13]=4; all[24]=1; all[26]=6;
- all[32]=1; all[33]=1; all[34]=1; all[35]=1; all[48]=1;
- all[49]=1; all[50]=1; all[51]=1; all[100]=1; all[54]=1; all[55]=1; all[56]=7;
- all[44]=1; all[45]=1; all[46]=1; all[47]=1;
- /* ___Bewegliche Objekte aufsuchen */
- xx=0;
- oa[0]=2;
- while(++xx<200)
- {
- yy=0;
- while(++yy<100)
- {
- switch((*(pm.playbeg+yy*pm.b+xx))&127)
- {
- case 6:
- printf("MECH-COBRA bei %d,%d!\n",xx,yy);
- (*(pm.playbeg+yy*pm.b+xx))&=128; oa[0]=0;
- add(xx-1,yy,xx,yy,0); break;
- }
- }
- }
- nd=-1;
-
- #asm
- move.b #0,$bfea01
- move.b #0,$bfe901
- move.b #0,$bfe801
- #endasm
-
- blopp:
- #asm
- move.l d0,-(a7)
- _nochnicht:
- clr.l d0
- move.b $bfea01,d0
- lsl.l #8,d0
- lsl.l #8,d0
- move.b $bfe901,d0
- lsl.l #8,d0
- move.b $bfe801,d0
- cmp.w #3,d0
- bls _nochnicht
- move.b #0,$bfea01
- move.b #0,$bfe901
- move.b #0,$bfe801
- move.l (a7)+,d0
- #endasm
- if(nd)
- {
- ShowPlay(ox[0]-5,oy[0]-4);
- turn();
- nd=0;
- }
- zeit++;
- if(zeit%1000==0 && heat[0]<65000)
- {
- heat[0]++;
- show_heat();
- }
- if(mesg!=0L)
- { message(mesg); mesg=0L; }
- si=-1;
- while(++si<200)
- {
- if(oa[si]!=0 && zeit%oz[si]==0)
- {
- switch(oll[si])
- {
- case 0: break;
- case 1:
- zz=walk(ox[si]+dx[si],oy[si]+dy[si],si);
- if(wlk==0)
- {
- oa[si]=0;
- pic(ox[si],oy[si],oh[si]);
- if(zz>=6 && zz<=9)
- sub(ox[si]+dx[si],oy[si]+dy[si],heat[si]);
- if(zz==23)
- sub(ox[si]+dx[si],oy[si]+dy[si],heat[si]);
- if(zz>=18 && zz<=21)
- sub(ox[si]+dx[si],oy[si]+dy[si],heat[si]);
- if(zz==27)
- sub(ox[si]+dx[si],oy[si]+dy[si],heat[si]);
- nd=-1;
- }
- break;
- case 2:
- heat[si]--;
- nd=-1;
- if(heat[si]>=10)
- {
- zz=walk(ox[si]+dx[si],oy[si]+dy[si],si);
- break;
- }
- if(heat[si]==0)
- {
- pic(ox[si],oy[si],13);
- oa[si]=0;
- break;
- }
- xx=(unsigned char)(ox[si]-rand()%5+2);
- yy=(unsigned char)(oy[si]-rand()%5+2);
- sub(xx,yy,3000);
- if((*(pm.playbeg+yy*pm.b+xx))&127==0)
- pic(xx,yy,12);
- pic(ox[si],oy[si],(unsigned char)(zeit%2+14));
- break;
- case 4:
- dx[si]=((unsigned char)rand()%3)-1;
- dy[si]=((unsigned char)rand()%3)-1;
- zz=walk(ox[si]+dx[si],
- oy[si]+dy[si],si);
- if(wlk==0)
- if(dx[si]!=0 || dy[si]!=0)
- sub(ox[si]+dx[si],oy[si]+dy[si],10000);
- break;
- case 5:
- heat[si]--;
- nd=-1;
- if(heat[si]>0)
- pic(ox[si],oy[si],(unsigned char)(zeit%2+14));
- else
- {
- pic(ox[si],oy[si],(unsigned char)13);
- oa[si]=0;
- }
- break;
- case 6:
- heat[si]--;
- nd=-1;
- if(heat[si]==9)
- {
- sub(ox[si]-1,oy[si],10000); pic(ox[si]-1,oy[si],14);
- sub(ox[si]+1,oy[si],10000); pic(ox[si]+1,oy[si],14);
- sub(ox[si],oy[si]+1,10000); pic(ox[si],oy[si]+1,14);
- sub(ox[si],oy[si]-1,10000); pic(ox[si],oy[si]-1,14);
- break;
- }
- if(heat[si]<=7)
- {
- pic(ox[si]-1,oy[si],0);
- pic(ox[si]+1,oy[si],0);
- pic(ox[si],oy[si]+1,0);
- pic(ox[si],oy[si]-1,0);
- pic(ox[si],oy[si],0);
- oa[si]=0;
- break;
- }
- break;
- case 7:
- heat[si]--;
- if(heat[si]>2049 && heat[si]<2089)
- break;
- if(heat[si]>=2090)
- { nd=-1; pic(ox[si],oy[si],(unsigned char)(heat[si]-2033)); break; }
- if(heat[si]==2089)
- { nd=-1; pic(ox[si],oy[si],0); break; }
- if(heat[si]==2049)
- if((*(pm.playbeg+ox[si]+oy[si]*pm.b))&127!=0)
- { heat[si]++; break; }
- else
- { StopSound(ia); ia=StartSound(snd2,15,20000,1); }
- if(heat[si]>=2039)
- { nd=-1; pic(ox[si],oy[si],(unsigned char)(2106-heat[si])); break; }
- oa[si]=0;
- break;
- case 8:
- if((ox[0]==ox[si] || oy[0]==oy[si]) && zeit%5==0)
- {
- if(ox[si]==ox[0])
- {
- if(oy[si]>oy[0] && oy[si]-oy[0]<5)
- {
- obb[1].heat=(unsigned int)sst[si]*5;
- add(ox[si],oy[si],ox[si],oy[si]-1,(unsigned char)1);
- if(wlk==0)
- sub(ox[si],oy[si]-1,(unsigned int)hst[si]*5);
- break;
- }
- if(oy[si]<oy[0] && oy[0]-oy[si]<5)
- {
- obb[1].heat=(unsigned int)sst[si]*5;
- add(ox[si],oy[si],ox[si],oy[si]+1,(unsigned char)1);
- if(wlk==0)
- sub(ox[si],oy[si]+1,(unsigned int)hst[si]*5);
- break;
- }
- }
- if(oy[si]==oy[0])
- {
- if(ox[si]>ox[0] && ox[si]-ox[0]<5)
- {
- obb[1].heat=(unsigned int)sst[si]*5;
- add(ox[si],oy[si],ox[si]-1,oy[si],(unsigned char)1);
- if(wlk==0)
- sub(ox[si]-1,oy[si],(unsigned int)hst[si]*5);
- break;
- }
- if(ox[si]<ox[0] && ox[0]-ox[si]<5)
- {
- obb[1].heat=(unsigned int)sst[si]*5;
- add(ox[si],oy[si],ox[si]+1,oy[si],(unsigned char)1);
- if(wlk==0)
- sub(ox[si]+1,oy[si],(unsigned int)hst[si]*5);
- break;
- }
- }
- }
- if(ox[0]<ox[si])
- {
- walk(ox[si]-1,oy[si],si);
- if(wlk!=0)
- break;
- }
- if(ox[0]>ox[si])
- {
- walk(ox[si]+1,oy[si],si);
- if(wlk!=0)
- break;
- }
- if(oy[0]<oy[si])
- walk(ox[si],oy[si]-1,si);
- else
- if(oy[0]>oy[si])
- walk(ox[si],oy[si]+1,si);
- break;
- }
- }
- }
-
- /* Steuerung der "Fighter": */
- /*
-
- fnumber++;
- if(fnumber>=ak_com) fnumber=0;
- if(coa[fnumber]!=0L)
- {
- register unsigned char fn;
- register unsigned char conni;
-
- fn=(unsigned char)fnumber;
- conni=con[fn];
- nochmal_com:
- if(heat[conni]<aheat[conni])
- { coa[fn]=find_label(fn,com_attack); aheat[conni]=heat[conni]; }
- switch(*coa[fn])
- {
- case 'N':
- coa[fn]=com_arg(coname[fn],coa[fn]+1);
- break;
- case 'S':
- coa[fn]=com_arg(jj,coa[fn]+1);
- if(ox[0]==ox[conni]+dx[conni] && oy[0]==oy[conni]+dy[conni])
- cprint(jj);
- break;
- case 'n':
- walk(ox[conni],oy[conni]-1,conni);
- if(wlk==0) cow[fn]&=4; else BITCLEAR(cow[fn],4);
- break;
- case 'w':
- walk(ox[conni]+1,oy[conni],conni);
- if(wlk==0) cow[fn]&=4; else BITCLEAR(cow[fn],4);
- break;
- case 'e':
- walk(ox[conni]-1,oy[conni],conni);
- if(wlk==0) cow[fn]&=4; else BITCLEAR(cow[fn],4);
- break;
- case 's':
- walk(ox[conni],oy[conni]-1,conni);
- if(wlk==0) cow[fn]&=4; else BITCLEAR(cow[fn],4);
- break;
- case 'f':
- wlk=0;
- if((*(pm.playbeg+ox[conni]+dx[conni]+(oy[conni]+dy[conni])*pm.b))&127==100)
- {
- walk(ox[conni]+dx[conni],oy[conni]+dy[conni],conni);
- BITCLEAR(cow[fn],4);
- break;
- }
- if((*(pm.playbeg+ox[conni]+rx[conni]+(oy[conni]+ry[conni])*pm.b))&127==100)
- {
- walk(ox[conni]+rx[conni],oy[conni]+ry[conni],conni);
- BITCLEAR(cow[fn],4);
- break;
- }
- if((*(pm.playbeg+ox[conni]-rx[conni]+(oy[conni]-ry[conni])*pm.b))&127==100)
- {
- walk(ox[conni]-rx[conni],oy[conni]-ry[conni],conni);
- BITCLEAR(cow[fn],4);
- break;
- }
- if((*(pm.playbeg+ox[conni]-dx[conni]+(oy[conni]-dy[conni])*pm.b))&127==100)
- {
- walk(ox[conni]-dx[conni],oy[conni]-dy[conni],conni);
- BITCLEAR(cow[fn],4);
- break;
- }
- BITSET(cow[fn],4);
- break;
- case 'd':
- coa[fn]=com_arg(jj,coa[fn]+1);
- si=(unsigned char)atoi(jj);
- coa[fn]=com_arg(jj,coa[fn]+1);
- if((*(pm.playbeg+ox[conni]+dx[conni]+(oy[conni]+dy[conni])*pm.b))&127==si)
- coa[fn]=find_label(fn,jj);
- break;
- case 'g':
- coa[fn]=find_label(fn,jj);
- break;
- case '_':
- coa[fn]=com_arg(jj,coa[fn]+1);
- break;
- case 'b':
- if(BITNTEST(cow[fn],4) && BITNTEST(cow[fn],1) && ++coz[fn]<coh[fn])
- {
- coa[fn]--;
- goto nochmal_com;
- }
- else
- coz[fn]=0;
- break;
- case 'A':
- coa[fn]=com_arg(com_attack[fn],coa[fn]+1);
- break;
- case 'i':
- coa[fn]=com_arg(jj,coa[fn]+1);
- if(heat[conni]<atoi(jj))
- {
- com_arg(jj,coa[fn]+1);
- coa[fn]=find_label(fn,jj);
- }
- else
- coa[fn]=com_arg(jj,coa[fn]+1);
- break;
- case '!':
- dx[conni]=-dx[conni]; dy[conni]=-dy[conni];
- rx[conni]=-rx[conni]; ry[conni]=-ry[conni];
- oa[conni]=ou[conni]-dx[conni]+1+(dy[conni]+1)*dy[conni];
- pic(ox[conni],oy[conni],oa[conni]);
- nd=-1;
- break;
- case '<':
- dx[conni]=-rx[conni];
- dy[conni]=-ry[conni];
- rx[conni]=(dx[conni]*dx[conni]-1)*dy[conni];
- ry[conni]=-(dy[conni]*dy[conni]-1)*dx[conni];
- oa[conni]=ou[conni]-dx[conni]+1+(dy[conni]+1)*dy[conni];
- pic(ox[conni],oy[conni],oa[conni]);
- nd=-1;
- break;
- case '>':
- dx[conni]=rx[conni];
- dy[conni]=ry[conni];
- rx[conni]=(dx[conni]*dx[conni]-1)*dy[conni];
- ry[conni]=-(dy[conni]*dy[conni]-1)*dx[conni];
- oa[conni]=ou[conni]-dx[conni]+1+(dy[conni]+1)*dy[conni];
- pic(ox[conni],oy[conni],oa[conni]);
- nd=-1;
- break;
- case '-':
- walk(ox[conni]+dx[conni],oy[conni]+dy[conni],conni);
- if(wlk==0) cow[fn]|=4; else BITCLEAR(cow[fn],4);
- break;
- case 'y':
- si=0;
- coa[fn]=com_arg(jj,coa[fn]+1);
- while(++si<=20 && all[(*(pm.playbeg+ox[conni]+dx[conni]*si+(oy[conni]+dy[conni]*si)*pm.b))&127]<=10);
- if(ox[0]==ox[conni]+dx[conni]*si && oy[0]==oy[conni]+dy[conni]+si)
- coa[fn]=find_label(fn,jj);
- break;
- case 'l':
- add(
- ox[conni],
- oy[conni],
- ox[conni]+dx[conni],
- oy[conni]+dy[conni],
- (unsigned char)1);
- break;
- case 'a':
- add(
- ox[conni],
- oy[conni],
- ox[conni]+dx[conni],
- oy[conni]+dy[conni],
- (unsigned char)6);
- break;
- case 'C':
- coa[fn]=com_arg(jj,coa[fn]+1);
- coh[fn]=atoi(jj);
- coz[fn]=0;
- break;
- case 'R':
- if((cow[fn]&8)!=8 && all[(*(pm.playbeg+ox[conni]+rx[conni]+(oy[conni]+ry[conni])*pm.b))&127]<=10)
- {
- dx[conni]=rx[conni];
- dy[conni]=ry[conni];
- rx[conni]=(dx[conni]*dx[conni]-1)*dy[conni];
- ry[conni]=-(dy[conni]*dy[conni]-1)*dx[conni];
- oa[conni]=ou[conni]-dx[conni]+1+(dy[conni]+1)*dy[conni];
- pic(ox[conni],oy[conni],oa[conni]);
- nd=-1;
- BITSET(cow[fn],8);
- }
- else
- {
- BITCLEAR(cow[fn],8);
- walk(ox[conni]+dx[conni],oy[conni]+dy[conni],conni);
- if(wlk==0)
- {
- dx[conni]=-rx[conni];
- dy[conni]=-ry[conni];
- rx[conni]=(dx[conni]*dx[conni]-1)*dy[conni];
- ry[conni]=-(dy[conni]*dy[conni]-1)*dx[conni];
- oa[conni]=ou[conni]-dx[conni]+1+(dy[conni]+1)*dy[conni];
- pic(ox[conni],oy[conni],oa[conni]);
- nd=-1;
- BITSET(cow[fn],8);
- }
- else BITCLEAR(cow[fn],4);
- }
- break;
- case 'L':
- if((cow[fn]&8)!=8 && all[(*(pm.playbeg+ox[conni]-rx[conni]+(oy[conni]-ry[conni])*pm.b))&127]<=10)
- {
- dx[conni]=-rx[conni];
- dy[conni]=-ry[conni];
- rx[conni]=(dx[conni]*dx[conni]-1)*dy[conni];
- ry[conni]=-(dy[conni]*dy[conni]-1)*dx[conni];
- oa[conni]=ou[conni]-dx[conni]+1+(dy[conni]+1)*dy[conni];
- pic(ox[conni],oy[conni],oa[conni]);
- nd=-1;
- BITSET(cow[fn],8);
- }
- else
- {
- BITCLEAR(cow[fn],8);
- walk(ox[conni]+dx[conni],oy[conni]+dy[conni],conni);
- if(wlk==0)
- {
- dx[conni]=rx[conni];
- dy[conni]=ry[conni];
- rx[conni]=(dx[conni]*dx[conni]-1)*dy[conni];
- ry[conni]=-(dy[conni]*dy[conni]-1)*dx[conni];
- oa[conni]=ou[conni]-dx[conni]+1+(dy[conni]+1)*dy[conni];
- pic(ox[conni],oy[conni],oa[conni]);
- nd=-1;
- BITSET(cow[fn],8);
- }
- else BITCLEAR(cow[fn],4);
- }
- break;
-
-
- }
- coa[fn]++;
- }
- */
- /* Ende der Steuerung der "Fighter" */
-
- if(RMB_DRUCK)
- {
- int choice;
-
- choice=menu(pm.dbs[1-dbz],pm.dbr[1-dbz],(int)pm.dbs[1-dbz]->MouseX,
- (int)pm.dbs[1-dbz]->MouseY,10,4,"Menu:|Actions|Game|Cancel||");
- switch(choice)
- {
- case 2:
- choice=menu(pm.dbs[1-dbz],pm.dbr[1-dbz],(int)pm.dbs[1-dbz]->MouseX,
- (int)pm.dbs[1-dbz]->MouseY,10,5,"Game:|Quit|Debug|Coords|Cancel||");
- switch(choice)
- {
- case 1:
- return();
- case 2:
- {
- cprint("Nr. of object to debug ?");
- Inline(jj);
- choice=atoi(jj);
- sprintf(jj,"%d: ID:%d x:%d y:%d h:%d dx:%d dy:%d oa:%d ou:%d sst:%d hst:%d ac:%d",
- choice,(int)oll[choice],(int)ox[choice],(int)oy[choice],(int)heat[choice],(int)dx[choice],(int)dy[choice],
- (int)oa[choice],(int)ou[choice],(int)sst[choice],(int)hst[choice],(int)ac[choice]);
- cprint(jj);
- }
- break;
- case 3:
- sprintf(jj,"Current location: X:%d Y:%d",ox[0],oy[0]);
- cprint(jj);
- break;
- }
- break;
- case 1:
- choice=menu(pm.dbs[1-dbz],pm.dbr[1-dbz],(int)pm.dbs[1-dbz]->MouseX,
- (int)pm.dbs[1-dbz]->MouseY,10,8,"Actions:|Inventory|Take|Drop|SRWeapon|LRWeapon|Shield|Cancel||");
- switch(choice)
- {
- case 1:
- show_items();
- break;
- case 2:
- take_item(ox[0],oy[0]);
- break;
- case 3:
- show_items();
- cprint("Which item do you want to drop?");
- while(!LMB_DRUCK);
- choice=(pm.dbs[1-dbz]->MouseX/160)*4+
- (pm.dbs[1-dbz]->MouseY-cw.yo)/cw.rp->TxHeight-cw.zh+5;
- if(choice<0 || choice>7 || itp[choice]=='.')
- cprint("Nothing dropped.");
- else
- {
- register int such;
-
- if(srwp==choice)
- hst[0]-=item[itp[choice]].level;
- if(lrwp==choice)
- sst[0]-=item[itp[choice]].level;
- if(sh==choice)
- ac[0]+=item[itp[choice]].level;
- such=-1;
- while(itw[++such]!=255);
- itw[such]=itp[choice];
- itx[such]=ox[0];
- ity[such]=oy[0];
- sprintf(jj,"%s dropped.",item[itp[choice]].name);
- cprint(jj);
- if((--itc[choice])<=0)
- itp[choice]=0;
- if(oh[0]==0)
- oh[0]=54;
- }
- break;
- case 4:
- show_items();
- cprint("Select short-range weapon.");
- while(!LMB_DRUCK);
- choice=(pm.dbs[1-dbz]->MouseX/160)*4+
- (pm.dbs[1-dbz]->MouseY-cw.yo)/cw.rp->TxHeight-cw.zh+6;
- if(choice<1 || choice>8 || item[itp[choice-1]].art!='R')
- cprint("Nothing selected.");
- else
- {
- choice--;
- if(srwp!=8)
- hst[0]=hst[0]-item[itp[srwp]].level+item[itp[choice]].level;
- else
- hst[0]+=item[itp[choice]].level;
- srwp=(unsigned char)choice;
- sprintf(jj,"OK. '%s' selected as short-range weapon.",item[itp[srwp]].name);
- cprint(jj);
- }
- break;
- case 5:
- show_items();
- cprint("Select long-range weapon.");
- while(!LMB_DRUCK);
- choice=(pm.dbs[1-dbz]->MouseX/160)*4+
- (pm.dbs[1-dbz]->MouseY-cw.yo)/cw.rp->TxHeight-cw.zh+6;
- if(choice<1 || choice>8 || item[itp[choice-1]].art>'L' || item[itp[choice]].art<'F')
- cprint("Nothing selected.");
- else
- {
- choice--;
- if(lrwp!=8)
- hst[0]=hst[0]-item[itp[lrwp]].level+item[itp[choice]].level;
- else
- hst[0]+=item[itp[choice]].level;
- lrwp=(unsigned char)choice;
- sprintf(jj,"OK. '%s' selected as long-range weapon.",item[itp[lrwp]].name);
- cprint(jj);
- }
- break;
- case 6:
- show_items();
- cprint("Select shield.");
- while(!LMB_DRUCK);
- choice=(pm.dbs[1-dbz]->MouseX/160)*4+
- (pm.dbs[1-dbz]->MouseY-cw.yo)/cw.rp->TxHeight-cw.zh+6;
- if(choice<1 || choice>8 || item[itp[choice-1]].art!='S')
- cprint("Nothing selected.");
- else
- {
- choice--;
- if(sh!=8)
- ac[0]=ac[0]+item[itp[sh]].level-item[itp[choice]].level;
- else
- ac[0]-=item[itp[choice]].level;
- sh=(unsigned char)choice;
- sprintf(jj,"OK. '%s' selected as shield.",item[itp[sh]].name);
- cprint(jj);
- }
- break;
- }
- break;
- }
- }
-
- if(!LMB_DRUCK && (*taste)&1!=1)
- goto blopp;
-
- /* >>> Jetzt folgt die Reaktion auf das Klicken der Maus: */
-
- {
- int x,y,dxx,dyy;
-
- dxx=0; dyy=0;
- if(!LMB_DRUCK)
- {
- switch((char)*taste)
- {
- case 53:
- obb[1].heat=(unsigned int)sst[0]*5;
- add(ox[0],oy[0],ox[0]+dx[0],oy[0]+dy[0],weapon);
- if(wlk==0)
- {
- x=sub(ox[0]+dx[0],oy[0]+dy[0],(unsigned int)hst[0]*5);
- StopSound(ia);
- ia=StartSound(snd1,40,4000,1);
- if(x==0)
- cprint("You miss.");
- else
- {
- if(x>0)
- {
- sprintf(jj,"You hit for %d damage points.",x);
- cprint(jj);
- }
- }
- }
- else
- {
- StopSound(ia);
- ia=StartSound(snd1,64,6000,1);
- }
- goto blopp;
- case 103:
- dyy=-1;
- goto go_;
- case 97:
- dxx=-1;
- goto go_;
- case 99:
- dxx=1;
- goto go_;
- case 101:
- dyy=1;
- goto go_;
- case -47:
- show_items();
- goto blopp;
- case -41:
- take_item(ox[0],oy[0]);
- goto blopp;
- }
- goto blopp;
- }
-
- x=(int)pm.dbs[1-dbz]->MouseX;
- y=(int)pm.dbs[1-dbz]->MouseY;
-
- if(x>253 && x<273 && y>18 && y<36) /* Richtungspfeil */
- {
- dyy=-1;
- goto go_;
- }
-
- if(x>273 && x<289 && y>36 && y<56) /* Richtungspfeil */
- {
- dxx=1;
- goto go_;
- }
-
- if(x>253 && x<273 && y>58 && y<76) /* Richtungspfeil */
- {
- dyy=1;
- goto go_;
- }
-
- if(x>236 && x<256 && y>38 && y<56) /* Richtungspfeil */
- {
- dxx=-1;
- goto go_;
- }
-
- if(x>258 && x<267 && y>38 && y<56)
- {
- obb[1].heat=(unsigned int)sst[0]*5;
- add(ox[0],oy[0],ox[0]+dx[0],oy[0]+dy[0],weapon);
- if(wlk==0)
- {
- x=sub(ox[0]+dx[0],oy[0]+dy[0],(unsigned int)hst[0]*5);
- StopSound(ia);
- ia=StartSound(snd1,40,4000,1);
- if(x==0)
- cprint("You miss.");
- else
- {
- if(x>0)
- {
- sprintf(jj,"You hit for %d damage points.",x);
- cprint(jj);
- }
- }
- }
- else
- {
- StopSound(ia);
- ia=StartSound(snd1,64,6000,1);
- }
- goto blopp;
- }
-
- if(x>238 && x<258 && y>92 && y<110)
- {
- /* _____Weapon-Auswahl */
- if(weapon==1)
- {
- weapon=2;
- cprint("GRANATE activated.");
- goto blopp;
- }
- if(weapon==2)
- {
- weapon=1;
- cprint("STANDARD-LASER activated.");
- goto blopp;
- }
- goto blopp;
- }
-
- if(x>260 && x<280 && y>92 && y<110)
- {
- /* Computer-Befehlseingabe: ____weitere Befehle dazu! */
- cprint("Neuro-II active - COMMAND?");
- Inline(jj);
- if(strcmp(jj,"ende")==0)
- return();
- if(strcmp(jj,"dbg")==0)
- {
- cprint("Which number?");
- Inline(jj);
- x=atoi(jj);
- sprintf(jj,"%d: Z:%d I:%d O:%d H:%d",x,(int)oa[x],(int)oz[x],(int)oll[x],
- (int)oh[x]);
- cprint(jj);
- sprintf(jj,"NAME: %s",obb[oll[x]].name);
- cprint(jj);
- goto blopp;
- }
- goto blopp;
- }
-
- if(x>282 && x<302 && y>92 && y<110)
- {
- cprint("STATUS:");
- sprintf(jj,"ENERGY:%ld SST:%d HST:%d AC:%d CREDITS:%ld",(long)heat[0],(int)sst[0],
- (int)hst[0],(int)ac[0],(long)score);
- cprint(jj);
- sprintf(jj,"SRWP: %s",item[itp[srwp]].name);
- cprint(jj);
- sprintf(jj,"LRWP: %s",item[itp[lrwp]].name);
- cprint(jj);
- sprintf(jj,"SHLD: %s",item[itp[sh]].name);
- cprint(jj);
- goto blopp;
- }
-
- go_:
- if(zeit%oz[0]==0)
- {
- zz=walk(ox[0]+dxx,oy[0]+dyy,0);
- if(wlk!=0)
- {
- switch(zz)
- {
- case 24:
- {
- register int tafo;
- tafo=0;
- while(it[tafo]!=30000)
- {
- if(ix[tafo]==ox[0] && iy[tafo]==oy[0])
- {
- mesg=&texts[it[tafo]];
- break;
- }
- tafo++;
- }
- }
- break;
- case 26:
- {
- cprint("You collect a piece of iridium.");
- oh[0]=0;
- addscore(20);
- }
- break;
- case 44:
- if(dy[0]==-1)
- {
- register int tafo;
- tafo=0;
- while(it[tafo]!=30000)
- {
- if(ix[tafo]==ox[0] && iy[tafo]==oy[0])
- {
- mesg=&texts[it[tafo]];
- break;
- }
- tafo++;
- }
- }
- break;
- case 45:
- if(dy[0]==1)
- {
- register int tafo;
- tafo=0;
- while(it[tafo]!=30000)
- {
- if(ix[tafo]==ox[0] && iy[tafo]==oy[0])
- {
- mesg=&texts[it[tafo]];
- break;
- }
- tafo++;
- }
- }
- break;
- case 46:
- if(dx[0]==1)
- {
- register int tafo;
- tafo=0;
- while(it[tafo]!=30000)
- {
- if(ix[tafo]==ox[0] && iy[tafo]==oy[0])
- {
- mesg=&texts[it[tafo]];
- break;
- }
- tafo++;
- }
- }
- break;
- case 47:
- if(dx[0]==-1)
- {
- register int tafo;
- tafo=0;
- while(it[tafo]!=30000)
- {
- if(ix[tafo]==ox[0] && iy[tafo]==oy[0])
- {
- mesg=&texts[it[tafo]];
- break;
- }
- tafo++;
- }
- }
- break;
- default:
- insc=0;
- }
- }
- else
- {
- dx[0]=dxx;
- dy[0]=dyy;
- rx[0]=(dx[0]*dx[0]-1)*dy[0];
- ry[0]=-(dy[0]*dy[0]-1)*dx[0];
- oa[0]=ou[0]-dx[0]+1+(dy[0]+1)*dy[0];
- pic(ox[0],oy[0],oa[0]);
- nd=-1;
-
- switch(zz)
- {
- case 5:
- if(heat[0]<60000)
- {
- heat[0]+=5000;
- show_heat();
- cprint("Heat sinks as you walk in the cool water.");
- }
- break;
- case 25:
- {
- register int tafo;
- tafo=0;
- if(insc==0)
- {
- while(tafo<tafel)
- {
- if(ix[tafo]==ox[0]+dxx && iy[tafo]==oy[0]+dyy)
- {
- mesg=&texts[it[tafo]];
- break;
- }
- tafo++;
- }
- if(tafo>=tafel)
- cprint("You feel that once there must have been an inscription right here!");
- insc=1;
- }
- else
- insc=1;
- }
- break;
- case 28:
- if((*(pm.playbeg+ox[0]+(dxx*2)+(oy[0]+(dyy*2))*pm.b))&127==0)
- {
- pic(ox[0]+dxx*2,oy[0]+dyy*2,28);
- pic(ox[0]+dxx,oy[0]+dyy,0);
- walk(ox[0]+dxx,oy[0]+dyy,0);
- }
- else
- {
- if((*(pm.playbeg+ox[0]+(dxx*2)+(oy[0]+(dyy*2))*pm.b))&127==29)
- {
- pic(ox[0]+dxx*2,oy[0]+dyy*2,30);
- pic(ox[0]+dxx,oy[0]+dyy,0);
- walk(ox[0]+dxx,oy[0]+dyy,0);
- addscore(200);
- cprint("BONK - you have pushed the crate into the hole.");
- }
- }
- break;
- case 38:
- {
- int x11,y11,x22,y22;
- register int xxx,yyy;
- int ccount=0;
-
- cprint("A robot voice declares: 'Just checking if you have really delivered all the crates...'");
- xxx=ox[0]+dxx; yyy=oy[0]+dyy;
- while((*(pm.playbeg+xxx+yyy*pm.b))&127!=31) xxx++;
- x22=xxx; y22=yyy; yyy--;
- while((*(pm.playbeg+xxx+yyy*pm.b))&127!=31) yyy--;
- y11=yyy; xxx--;
- while((*(pm.playbeg+xxx+yyy*pm.b))&127!=31) xxx--;
- x11=xxx;
- for(xxx=x11;xxx<=x22;xxx++)
- for(yyy=y11;yyy<=y22;yyy++)
- {
- if((*(pm.playbeg+xxx+yyy*pm.b))&127==29) ccount++;
- }
- if(ccount==0)
- {
- cprint("'Congratulations. Your way to the next level won't be blocked any more...'");
- pic(ox[0]+dxx,oy[0]+dyy,0);
- cprint("With a flash of lightning, the 'checkport' vanishes and leaves +5000 credits behind.");
- addscore(5000);
- }
- else
- {
- sprintf(jj,"'Sorry, there are still %d holes left.'",ccount);
- cprint(jj);
- }
- }
- break;
- case 67:
- cprint("The laser-door opens...");
- add(ox[0],oy[0],ox[0]+dx[0],oy[0]+dy[0],7);
- StopSound(ia);
- ia=StartSound(snd2,30,20000,1);
- break;
- }
- }
- }
- }
-
- goto blopp;
- }
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- int fd;
-
- InitFuncs();
- palette(0,0,0,0,0);
- /* palette(0,1,0,0,0); */
- palette(0,2,0,0,0);
- palette(0,3,0,0,0);
- scropen(2," ",4,320,200,6);
- ScreenToFront(scr[0]);
- readiff("presents.ham",2);
- ScreenToFront(scr[2]);
- Delay(250L);
- ScreenToFront(scr[0]);
- readiff("sunset.ham",2);
- ScreenToFront(scr[2]);
- Delay(300L);
- /* Hier käme auch noch der andere Titel */
- scrclose(2);
- InitPlay("MF.iff","FPM.iff",10,200,100,160,160);
- loadfont(2,"flow.font",8);
- SetFont(pm.dbr[1-dbz],ff[2]);
- SetFont(pm.dbr[dbz],ff[2]);
- cw.rp=pm.dbr[1-dbz];
- cprint(" >>> MechFight ");
- cprint("1990 by Florian Marquardt");
- cprint(" Jagdschloss Hirschbrunn");
- cprint(" 8861 Dornstadt-Auhausen D");
- cprint(" ");
- snd1=LoadSound("laser.snd");
- snd2=LoadSound("expl.snd");
- ia=StartSound(snd1,0,6000,1);
- texts=gme(TEXTBUF,(long)MEMF_CLEAR);
- LadeAlles("MF");
-
- Game();
-
- fme(texts,TEXTBUF);
- StopSound(ia);
- FreeSound(snd1);
- FreeSound(snd2);
- ClosePlay();
- palette(0,0,5,5,5);
- palette(0,1,15,15,15);
- palette(0,2,0,0,0);
- palette(0,3,10,0,0);
- CloseFuncs();
- }
-