home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fish 'n' More 2
/
fishmore-publicdomainlibraryvol.ii1991xetec.iso
/
fish
/
fun&games
/
adventure
/
mechfight
/
editor
/
mf.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-08-31
|
36KB
|
1,734 lines
#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();
}