struct IntuiText DText= { GREENPEN,BLACKPEN, JAM2, 0,0, NULL, NULL, NULL }; struct IntuiMessage *mes; int screen1,screen2; int show1,show2; int showpla1,showpla2; int sort[STARNO],dis[STARNO],sortsta; human(pla) int pla; { int i; struct NCommand c; c.com=DUMMY; screen1=PLAYERSUMMARY; screen2=CLEAR; sortsta=-1; make_displ(pla); while((c.com=input_action(0,pla))>=0) { switch(c.com) { case POSSESS: c.par[0]=input_star(1,pla); c.par[1]=input_planet(2,pla); break; case LAND: c.par[0]=input_task(1,pla); c.par[1]=input_planet(2,pla); break; case CARRY: c.par[0]=input_task(1,pla); input_ships_task(2,pla,&c); break; case DESTINATION: c.par[0]=input_task(1,pla); c.par[1]=input_star(2,pla); break; case EMIGRATION: c.par[0]=input_star(1,pla); c.par[1]=input_planet(2,pla); c.par[2]=input_number(3,pla,star[c.par[0]].planet[c.par[1]].population); break; case JOIN: input_many_tasks(1,pla,&c); break; case KILL: c.par[0]=input_star(1,pla); c.par[1]=input_planet_or_ret(2,pla); break; case SPLIT: c.par[0]=input_task(1,pla); input_ships_task(2,pla,&c); break; case PRODUCE: c.par[0]=input_star(1,pla); c.par[1]=input_planet(2,pla); c.par[2]=input_product(3,pla,general.techlevel[pla]); break; case DECLARE: c.par[0]=input_player(1,pla); c.par[1]=input_status(2,pla,general.relation[pla][c.par[0]]); break; default:break;/*ERROR*/ } do_command(pla,&c); make_displ(pla); } } make_displ(pla) int pla; { mapdisplay(pla); if (screen1==STARSUMMARY) starsummary(pla,show1); if (screen2==TASKSUMMARY) tasksummary(pla,showpla2,show2); if (screen1==PLAYERSUMMARY) showstatus(pla); if (screen2==TASKOVERVIEW) showtasks(pla,showpla2,show2); if (screen2==SHIPOVERVIEW) tshipsummary(pla,showpla2,show2); if (screen1==STAROVERVIEW) showstars(pla); if (screen2==SHIPSUMMARY) shipsummary(pla,show2); if (screen2==PLANETSUMMARY) planetsummary(pla,show2,showpla2); } input_action(line,pla) int line; int pla; { int c,i,p; char *str; switch(cget(pla)) { case 'p': str="Possess planet"; c=POSSESS; break; case 'g': return(-1); case 'c': str="Carry ships"; c=CARRY; break; case 'h': str="Hyperspace Tf"; c=DESTINATION; break; case 'e': str="Emigration"; c=EMIGRATION; break; case 'l': str="Land on planet"; c=LAND; break; case 'j': str="Join taskforces"; c=JOIN; break; case 'k': str="Kill"; c=KILL; break; case 'n': str="New Taskforce from"; c=SPLIT; break; case 'b': str="Build"; c=PRODUCE; break; case 'd': str="Diplomacy"; c=DECLARE; break; case '?': showhelp(); return(DUMMY); case 's': SetAPen(ConPort,BLACKPEN); RectFill(ConPort,400L,0L,639L,39L); DText.FrontPen=GREENPEN; DText.IText=(UBYTE *) "SHOW >Starsummary"; PrintIText(ConPort,&DText,400L,8L*line); show1=input_star_or_ret(1,pla); if(show1==STARNO) screen1=STAROVERVIEW; showpla1=input_planet_or_ret(2,pla); if(showpla1==PLANETNO) screen1=STARSUMMARY; else screen1=PLANETSUMMARY; return(DUMMY); case 't': SetAPen(ConPort,BLACKPEN); RectFill(ConPort,400L,0L,639L,39L); DText.FrontPen=GREENPEN; DText.IText=(UBYTE *) "SHOW >Taskforcesummary"; PrintIText(ConPort,&DText,400L,8L*line); showpla2=input_player(1,pla); show2=input_task_or_ret(2,pla); if(show2==TASKNO) screen2=TASKOVERVIEW; else screen2=TASKSUMMARY; return(DUMMY); case 'z': SetAPen(ConPort,BLACKPEN); RectFill(ConPort,400L,0L,639L,39L); DText.FrontPen=GREENPEN; DText.IText=(UBYTE *) "SHOW >Status"; PrintIText(ConPort,&DText,400L,8L*line); screen1=PLAYERSUMMARY; return(DUMMY); case 'f': SetAPen(ConPort,BLACKPEN); RectFill(ConPort,400L,0L,639L,39L); DText.FrontPen=GREENPEN; DText.IText=(UBYTE *) "SHOW >Shipsummary"; PrintIText(ConPort,&DText,400L,8L*line); showpla2=input_player_or_ret(1,pla); show2=input_ship(2,pla); if(showpla2==PLAYERNO) screen2=SHIPSUMMARY; else screen2=SHIPOVERVIEW; return(DUMMY); default: str="Unknown command."; c=ERROR; break; } SetAPen(ConPort,BLACKPEN); RectFill(ConPort,400L,0L,639L,39L); DText.FrontPen=GREENPEN; DText.IText=(UBYTE *) "ACTION>"; PrintIText(ConPort,&DText,400L,8L*line); DText.IText=(UBYTE *)str; PrintIText(ConPort,&DText,456L,8L*line); return(c); } input_task(line,pla) int line; int pla; { int c,tas; DText.FrontPen=GREENPEN; DText.IText=(UBYTE *) "TF >"; PrintIText(ConPort,&DText,400L,8L*line); tas=TASKNO+1; while(tas>=TASKNO) { c=cget(pla); if(c>='a' && c<='z') tas=c-'a'; if(c>='A' && c<='Z') tas=c-'A'+SECSET; } DText.IText=(UBYTE *)" "; DText.IText[0]=(UBYTE) c; PrintIText(ConPort,&DText,456L,8L*line); return(tas); } input_task_or_ret(line,pla) int line; int pla; { int c,tas; DText.FrontPen=GREENPEN; DText.IText=(UBYTE *) "TF >"; PrintIText(ConPort,&DText,400L,8L*line); tas=TASKNO+1; while(tas>TASKNO) { c=cget(pla); if(c>='a' && c<='z') tas=c-'a'; if(c>='A' && c<='Z') tas=c-'A'+SECSET; if(c==0x0d) tas=TASKNO; } if(tas==TASKNO) return(TASKNO); DText.IText=(UBYTE *)" "; DText.IText[0]=(UBYTE) c; PrintIText(ConPort,&DText,456L,8L*line); return(tas); } input_ships_task(line,pla,co) int line; int pla; struct NCommand *co; { int i,tas; tas=co->par[0]; for(i=0;ipar[i+1]=0; if(INTASK(pla,tas,i)==0 || task[pla][tas].headed==-1) continue; SetAPen(ConPort,BLACKPEN); RectFill(ConPort,400L,line*8L,639L,line*8L+15); SetAPen(ConPort,GREENPEN); DText.IText=(UBYTE *)ship[i].name; PrintIText(ConPort,&DText,400L,line*8L); co->par[i+1]=input_number(line+1,pla,INTASK(pla,tas,i)); } return(); } input_many_tasks(line,pla,co) int line; int pla; struct NCommand *co; { int c,i; i=0; DText.FrontPen=GREENPEN; DText.IText=(UBYTE *) "TFS >"; PrintIText(ConPort,&DText,400L,8L*line); DText.IText=(UBYTE *)" "; while(1) { c=cget(pla); if(c==0x0d) { co->par[i]=TASKNO; break; } if(c>='a' && c<='z' && c-'a'par[i]=c-'a'; DText.IText[0]=(UBYTE) c; PrintIText(ConPort,&DText,456L+8L*i,8L*line); i++; } if(c>='A' && c<='Z' && c-'A'+SECSETpar[i]=c-'A'+SECSET; DText.IText[0]=(UBYTE) c; PrintIText(ConPort,&DText,456L+8L*i,8L*line); i++; } if(i>22) { co->par[i]=TASKNO; break; } } } input_star(line,pla) int line; int pla; { int sta; DText.FrontPen=GREENPEN; DText.IText=(UBYTE *) "STAR >"; PrintIText(ConPort,&DText,400L,8L*line); while( (sta=cget(pla)-'a') <0 || sta>=STARNO ); DText.IText=(UBYTE *)" "; DText.IText[0]=(UBYTE) sta+'A'; PrintIText(ConPort,&DText,456L,8L*line); return(sta); } input_star_or_ret(line,pla) int line; int pla; { int sta; DText.FrontPen=GREENPEN; DText.IText=(UBYTE *) "STAR >"; PrintIText(ConPort,&DText,400L,8L*line); while( ((sta=cget(pla)-'a') <0 || sta>=STARNO) && sta!=0x0d-'a' ); if(sta==0x0d-'a') return(STARNO); DText.IText=(UBYTE *)" "; DText.IText[0]=(UBYTE) sta+'A'; PrintIText(ConPort,&DText,456L,8L*line); return(sta); } input_player_or_ret(line,pla) int line; int pla; { int c,d=PLAYERNO; DText.FrontPen=GREENPEN; DText.IText=(UBYTE *) "POWER >None"; PrintIText(ConPort,&DText,400L,8L*line); while(1) { c=cget(pla); if(c>='a' && (c-'a')0) { d--; } if(c=='.' && d"; PrintIText(ConPort,&DText,400L,8L*line); while((c=cget(pla))<'0' || c>'9'); DText.IText=(UBYTE *)" "; DText.IText[0]=(UBYTE) c; PrintIText(ConPort,&DText,456L,8L*line); return(c-'0'); } input_planet_or_ret(line,pla) int line; int pla; { int c; DText.FrontPen=GREENPEN; DText.IText=(UBYTE *) "PLANET>"; PrintIText(ConPort,&DText,400L,8L*line); while(((c=cget(pla))<'0' || c>'9') && c!=0x0d); if(c==0x0d) return(PLANETNO); DText.IText=(UBYTE *)" "; DText.IText[0]=(UBYTE) c; PrintIText(ConPort,&DText,456L,8L*line); return(c-'0'); } input_ship_in_task(line,pla,tas) int line; int pla; int tas; { int c,d,e; DText.FrontPen=GREENPEN; for(d=0;d"; PrintIText(ConPort,&DText,400L,8L*line); if (d==SHIPNO) return(0); DText.IText=(UBYTE *)ship[d].name; PrintIText(ConPort,&DText,456L,8L*line); while(1) { c=cget(pla); if(c>='a' && (c-'a')=0;e--) if(INTASK(pla,tas,e)) break; if(e>=0) d=e; } if(c=='.') { e=d+1; for(;e"; PrintIText(ConPort,&DText,400L,8L*line); DText.IText=(UBYTE *)"Researching"; PrintIText(ConPort,&DText,456L,8L*line); while(1) { c=cget(pla); if(c>='a' && (c-'a')=0;e--) if(ship[e].techlevel<=tech&&!(ship[e].special&NOTPROD)) break; if(e>=0) d=e; } else d=e; } if(c=='.') { e=d+1; if(e>=SHIPNO) { if(e"; PrintIText(ConPort,&DText,400L,8L*line); DText.IText=(UBYTE *)ship[d].name; PrintIText(ConPort,&DText,456L,8L*line); while(1) { c=cget(pla); if(c>='a' && (c-'a')=0;e--) if(ship[e].name[0]!='\0') break; if(e>=0) d=e; } if(c=='.') { for(e=d+1;e"; PrintIText(ConPort,&DText,400L,8L*line); DText.IText=(UBYTE *) " "; pstr(status,DText.IText); PrintIText(ConPort,&DText,456L,8L*line); while(1) { c=cget(pla); if(c==',' && status>RELMIN) status--; if(c=='.' && status000(000)"; mstr(max,DText.IText+11); PrintIText(ConPort,&DText,400L,line*8L); if(max<=0) return(0); DText.IText=(UBYTE *)"000"; while(1) { c=coget(); if(c=='.' && d0) d--; if(c>='0' && c<='9' && (c-'a')<=max) { d=c-'0'; c=0x0d; } if(c=='>') d=max; if(c=='<') d=0; mstr(d,DText.IText); PrintIText(ConPort,&DText,456L,line*8L); if(c==0x0d) return(d); } } input_player(line,pla) int line; int pla; { int c,d=0; DText.FrontPen=GREENPEN; if(pla==0) d++; DText.IText=(UBYTE *) "POWER >"; PrintIText(ConPort,&DText,400L,8L*line); DText.FrontPen=PLAYERPEN(d); DText.IText=(UBYTE *)general.pname[d]; PrintIText(ConPort,&DText,456L,8L*line); while(1) { c=cget(pla); if(c>='a' && (c-'a')0) { d--; if(d==pla) { if(d==0) d=1; else d--; } } if(c=='.' && d+1UserPort); mes=(struct IntuiMessage *) GetMsg(ConWindow->UserPort); Class=mes->Class; Code=mes->Code; X=mes->MouseX; Y=mes->MouseY; ReplyMsg(mes); if(Class==VANILLAKEY) return(Code); if(Class==MOUSEBUTTONS && Code==SELECTDOWN) process_mouse(pla,(int) X/8,(int) Y/8); if(Class==MOUSEBUTTONS && Code==MENUDOWN) showstatus(pla); } } coget() { long Code,Class; while(1) { WaitPort(ConWindow->UserPort); mes=(struct IntuiMessage *) GetMsg(ConWindow->UserPort); Class=mes->Class; Code=mes->Code; ReplyMsg(mes); if(Class==VANILLAKEY) return(Code); } } wait_space(pla) { if(!display_check(pla)) return(); DText.FrontPen=GREENPEN; DText.IText=(UBYTE *) " PRESS SPACE TO CONTINUE "; DText.DrawMode=JAM2 | INVERSVID; PrintIText(ConPort,&DText,400L,32L); while(coget()!=' '); DText.DrawMode=JAM2; DText.IText=(UBYTE *) " "; PrintIText(ConPort,&DText,400L,32L); } cinput(str,line) char *str; int line; { int pos,c; DText.FrontPen=GREENPEN; DText.IText=(UBYTE *)"> "; PrintIText(ConPort,&DText,400L,line*8L); pos=0; *str='\0'; while(pos=0) DText.DrawMode |= INVERSVID; else DText.DrawMode &=~INVERSVID; PrintIText(ConPort,&DText,16L*star[sta].x,8L*star[sta].y); DText.IText=(UBYTE *)" "; DText.DrawMode=JAM2; PrintIText(ConPort,&DText,16L*star[sta].x+8L,8L*star[sta].y); if(!knowstar(pla,sta)) continue; DText.IText=(UBYTE *)" "; DText.DrawMode=JAM1; for(i=0;i=STARNO) return(); if(sta!=sortsta) sortstars(sta); pla2=CommData[pla].star[sta].ruler; if(pla2general.time) DText.DrawMode|= INVERSVID; else DText.DrawMode&=~INVERSVID; if((task[pla2][tas].arriving>general.time || !knowstar(pla,sta)) && pla2!=pla) continue; PrintIText(ConPort,&DText,424L+tas*8,80L+8*pla2); } } DText.IText=(UBYTE *) "% "; if(pla!=PLAYERNO) for(sta2=1;sta2<8;sta2++) { DText.IText[0]=(UBYTE) 'A'+sort[sta2]; tstr(dis[sta2],DText.IText+1); pla2=CommData[pla].star[sort[sta2]].ruler; if(pla2=0) DText.DrawMode|=INVERSVID; else DText.DrawMode&=~INVERSVID; PrintIText(ConPort,&DText,368L+sta2*32L,112L); } DText.FrontPen=GREENPEN; DText.DrawMode=JAM2; } tasksummary(pla1,pla,tas) int pla1; int pla; int tas; { int i,shi,line; if(!display_check(pla1)) return(); SetAPen(ConPort,BLACKPEN); RectFill(ConPort,400L,120L,639L,199L); if(task[pla][tas].headed==-1) return(); if(task[pla][tas].arriving>general.time||!knowstar(pla1,task[pla][tas].headed)) if(pla1!=pla) return(); screen2=TASKSUMMARY;showpla2=pla;show2=tas; DText.FrontPen=PLAYERPEN(pla); if(task[pla][tas].arriving<=general.time) { DText.IText=(UBYTE *)"Tf % at % C:%%% S:%%% R:%%%"; } else { DText.IText=(UBYTE *)"Tf % vs %/%% C:%%% S:%%% R:%%%"; *(DText.IText+10)=(UBYTE)'0'+((task[pla][tas].arriving-general.time)/10); *(DText.IText+11)=(UBYTE)'0'+((task[pla][tas].arriving-general.time)%10); } if(tasgeneral.techlevel[pla]) DText.DrawMode |= INVERSVID; DText.IText=(UBYTE *)"Techcost :000 Techlevel :000"; PrintIText(ConPort,&DText,400L,160L); DText.IText=(UBYTE *)" "; mstr(ship[shi].techcost,DText.IText); PrintIText(ConPort,&DText,488L,160L); mstr(ship[shi].techlevel,DText.IText); PrintIText(ConPort,&DText,608L,160L); DText.DrawMode &=~INVERSVID; } DText.IText =(UBYTE *)"Starkill "; if(ship[shi].special&STARKILLER) PrintIText(ConPort,&DText,400L,168L); DText.IText =(UBYTE *)"One-Shot "; if(ship[shi].special&KAMIKAZE) PrintIText(ConPort,&DText,480L,168L); DText.IText =(UBYTE *)"Invisible"; if(ship[shi].special&INVISIBLE) PrintIText(ConPort,&DText,560L,168L); DText.IText =(UBYTE *)"CataStart"; if(ship[shi].special&FASTEJECTABLE) PrintIText(ConPort,&DText,400L,176L); DText.IText =(UBYTE *)"Not build"; if(ship[shi].special&NOTPROD) PrintIText(ConPort,&DText,480L,176L); DText.IText =(UBYTE *)"Theft "; if(ship[shi].special&STEAL) PrintIText(ConPort,&DText,560L,176L); DText.IText =(UBYTE *)"Catapult "; if(ship[shi].special&FASTEJECTER) PrintIText(ConPort,&DText,400L,184L); DText.IText =(UBYTE *)" "; if(ship[shi].special&NULL) PrintIText(ConPort,&DText,480L,184L); DText.IText =(UBYTE *)" "; if(ship[shi].special&NULL) PrintIText(ConPort,&DText,560L,184L); DText.IText =(UBYTE *)" "; if(ship[shi].special&NULL) PrintIText(ConPort,&DText,400L,192L); DText.IText =(UBYTE *)" "; if(ship[shi].special&NULL) PrintIText(ConPort,&DText,480L,192L); DText.IText =(UBYTE *)" "; if(ship[shi].special&NULL) PrintIText(ConPort,&DText,560L,192L); DText.FrontPen=GREENPEN; } showstatus(pla) int pla; { int i,s,p; if(!display_check(pla)) return(); screen1=PLAYERSUMMARY;showpla1=pla; SetAPen(ConPort,BLACKPEN); RectFill(ConPort,400L,40L,639L,119L); DText.FrontPen=PLAYERPEN(pla); DText.DrawMode |= INVERSVID; DText.IText=(UBYTE *)" "; PrintIText(ConPort,&DText,400L,40L); DText.IText=(UBYTE *)"Year %%%%"; qstr(general.time,DText.IText+5); PrintIText(ConPort,&DText,520L-IntuiTextLength(&DText)/2,40L); DText.DrawMode &=~INVERSVID; DText.IText=(UBYTE *) general.pname[pla]; PrintIText(ConPort,&DText,520L-IntuiTextLength(&DText)/2,48L); DText.IText=(UBYTE *)"Pop:0000 Ind:0000 Tec:0000"; qstr(population_no(pla),DText.IText+4); qstr(industrie_no(pla),DText.IText+13); qstr(general.techlevel[pla],DText.IText+22); PrintIText(ConPort,&DText,520L-IntuiTextLength(&DText)/2,56L); for(i=0;igeneral.time) ) continue; DText.IText[3]=(UBYTE) TASKCHAR(i); DText.IText[5]=(UBYTE) 'A'+task[pla][i].headed; if(task[pla][i].arriving<=general.time) { DText.DrawMode&=~INVERSVID; DText.IText[6]=(UBYTE)' '; DText.IText[7]=(UBYTE)' '; DText.IText[8]=(UBYTE)' '; } else { DText.DrawMode|= INVERSVID; DText.IText[6]=(UBYTE)'/'; rstr(task[pla][i].arriving-general.time,DText.IText+7); } PrintIText(ConPort,&DText,400L+80*(i/9),8*(i%9)+128L); } DText.DrawMode=JAM2; DText.FrontPen=GREENPEN; } output_fight(pla,pla1,shi1,pla2,shi2,str) int pla; int pla1; int shi1; int pla2; int shi2; char *str; { long pos; if(!display_check(pla)) return(); if(fline==25) { fline=0; wait_space(pla); } if (fline==0) { SetAPen(ConPort,BLACKPEN); RectFill(ConPort,0L,0L,399L,199L); } pos=0; DText.FrontPen=PLAYERPEN(pla1); DText.IText=(UBYTE *)ship[shi1].name; PrintIText(ConPort,&DText,pos,fline*8L); pos+=IntuiTextLength(&DText); DText.FrontPen=WHITEPEN; DText.IText=(UBYTE *)" fires on "; PrintIText(ConPort,&DText,pos,fline*8L); pos+=IntuiTextLength(&DText); DText.FrontPen=PLAYERPEN(pla2); DText.IText=(UBYTE *)ship[shi2].name; PrintIText(ConPort,&DText,pos,fline*8L); pos+=IntuiTextLength(&DText); DText.FrontPen=WHITEPEN; DText.IText=(UBYTE *)":"; PrintIText(ConPort,&DText,pos,fline*8L); pos+=IntuiTextLength(&DText); DText.IText=(UBYTE *)str; PrintIText(ConPort,&DText,pos,fline*8L); pos+=IntuiTextLength(&DText); DText.FrontPen=GREENPEN; fline++; } tshipsummary(pla1,pla,shi) int pla1; int pla; int shi; { int i; char name[30]; if(!display_check(pla1)) return(); screen2=SHIPOVERVIEW;showpla2=pla;show2=shi; SetAPen(ConPort,BLACKPEN); RectFill(ConPort,400L,120L,639L,199L); DText.FrontPen=PLAYERPEN(pla); DText.DrawMode |= INVERSVID; SetAPen(ConPort,PLAYERPEN(pla)); RectFill(ConPort,400L,120L,639L,127L); strcpy(name,"Shipoverview:"); strcat(name,ship[shi].name); DText.IText=(UBYTE *)name; PrintIText(ConPort,&DText,520L-IntuiTextLength(&DText)/2,120L); DText.DrawMode &=~INVERSVID; DText.FrontPen=WHITEPEN; if(pla!=pla1) { DText.IText=(UBYTE *)"Tf % %%%"; for(i=0;i0) { if(task[pla][i].arriving>general.time) DText.DrawMode |= INVERSVID; else DText.DrawMode &=~INVERSVID; DText.IText[3]=(UBYTE)TASKCHAR(i); mstr(task[pla][i].ship_free[shi],DText.IText+6); PrintIText(ConPort,&DText,400L+80*(i/9),8*(i%9)+128L); } DText.FrontPen=GREENPEN; return(); } DText.IText=(UBYTE *)"Tf% %%/%%"; for(i=0;igeneral.time) DText.DrawMode |= INVERSVID; else DText.DrawMode &=~INVERSVID; DText.IText[2]=(UBYTE)TASKCHAR(i); rstr(task[pla][i].ship_free[shi],DText.IText+4); rstr(task[pla][i].ship_load[shi],DText.IText+7); PrintIText(ConPort,&DText,400L+80*(i/9),8*(i%9)+128L); } DText.DrawMode=JAM2; DText.FrontPen=GREENPEN; } showhelp(pla) int pla; { if(!display_check(pla)) return(); SetAPen(ConPort,BLACKPEN); RectFill(ConPort,400L,0L,639L,39L); DText.FrontPen=GREENPEN; DText.IText=(UBYTE *)"g=Go on c=Carry Ships "; PrintIText(ConPort,&DText,400L,0L); DText.IText=(UBYTE *)"h=Hyperspace b=Build Ship "; PrintIText(ConPort,&DText,400L,8L); DText.IText=(UBYTE *)"e=Emigrate p=Possess Plan."; PrintIText(ConPort,&DText,400L,16L); DText.IText=(UBYTE *)"k=Kill d=Declaration "; PrintIText(ConPort,&DText,400L,24L); DText.IText=(UBYTE *)"j=join Tf l=Land Tf n=Split Tf"; PrintIText(ConPort,&DText,400L,32L); } showstars(pla) int pla; { int i; if(!display_check(pla)) return(); screen1=STAROVERVIEW; SetAPen(ConPort,BLACKPEN); RectFill(ConPort,400L,40L,639L,119L); SetAPen(ConPort,PLAYERPEN(pla)); RectFill(ConPort,400L,40L,639L,47L); DText.FrontPen=PLAYERPEN(pla); DText.DrawMode |= INVERSVID; DText.IText=(UBYTE *)"Staroverview"; PrintIText(ConPort,&DText,520L-IntuiTextLength(&DText)/2,40L); DText.DrawMode &=~INVERSVID; DText.FrontPen=WHITEPEN; DText.IText=(UBYTE *)"% %%%/%%%/%%%"; for(i=0;i5 && y<10 && x>49) { p=(y-6)*2+(x>64); if(star[show1].planet[p].size>0) planetsummary(pla,show1,p); return(); } /* Check for taskforce in starsummary */ if(screen1==STARSUMMARY && x>52 && y>9 && y<14) { pla1=y-10; tas1=x-53; if(task[pla1][tas1].headed!=show1) return(); tasksummary(pla,pla1,tas1); return(); } /* Check for show all tasks in starsummary */ if(screen1==STARSUMMARY && x<52 && y>9 && y<14) { pla1=y-10; showtasks(pla,pla1); return(); } /* Check for star in starsummary */ if(screen1==STARSUMMARY && x>49 && y==14) { sta=(x-50)/4+1; if (sta<8) starsummary(pla,sort[sta]); return(); } /* Check for show shipsummary in tasksummary */ if(screen2==TASKSUMMARY && x<70 && y>15) { shi2=0; for(shi1=0;shi10 || (task[showpla2][show2].ship_load[shi1]>0 && pla==showpla2)) shi2++; shi3=((shi2-1)/10)*10+y-15; shi2=0; for(shi1=0;shi10 || (task[showpla2][show2].ship_load[shi1]>0 && pla==showpla2)) shi2++; if (shi3==shi2) break; } if(shi1==SHIPNO) return; shipsummary(pla,shi1); return(); } /* Check for shipoverview */ if(screen2==TASKSUMMARY && x>69 && y>15) { shi2=0; for(shi1=0;shi10 || (task[showpla2][show2].ship_load[shi1]>0 && pla==showpla2)) shi2++; shi3=((shi2-1)/10)*10+y-15; shi2=0; for(shi1=0;shi10 || (task[showpla2][show2].ship_load[shi1]>0 && pla==showpla2)) shi2++; if (shi3==shi2) break; } if(shi1==SHIPNO) return; tshipsummary(pla,showpla2,shi1); return(); } /* Check for click on shipname in planetsummary */ if(screen2==PLANETSUMMARY && y==19) { if(star[show2].planet[showpla2].producing15) { pla1=showpla2; tas1=((x-50)/10)*9+(y-16); tasksummary(pla,pla1,tas1); return(); } /* Check for click on Tf in Shipoverview */ if(screen2==SHIPOVERVIEW && y>15) { pla1=showpla2; tas1=((x-50)/10)*9+(y-16); if(task[pla1][tas1].ship_free[show2]==0 && pla1!=pla) return(); if(!INTASK(pla1,tas1,show2)) return(); tasksummary(pla,pla1,tas1); return(); } if(screen1==STAROVERVIEW && y>5 && y<14) { sta=((x-50)/15)*8+(y-6); starsummary(pla,sta); return(); } if(y<4) { showhelp(pla); return(); } } planetsummary(pla1,sta,p) int pla1; int sta; int p; { int pla2,cost; if(!display_check(pla1)) return(); screen2=PLANETSUMMARY; show2=sta; showpla2=p; SetAPen(ConPort,BLACKPEN); RectFill(ConPort,400L,120L,639L,199L); if(sta<0 || sta>=STARNO) return(); if(star[sta].planet[p].size<=0) return(); if(!knowstar(pla1,sta)) return(); pla2=star[sta].planet[p].ruler; if(pla2dis[i+1]) { flag=1; dis[i] ^=dis[i+1]; dis[i+1] ^=dis[i]; dis[i] ^=dis[i+1]; sort[i] ^=sort[i+1]; sort[i+1]^=sort[i]; sort[i] ^=sort[i+1]; /* Bet you didn't know that,did you ? */ /* Exchanges sort[i] and sort[i+1], and dis[i] and dis[i+1] */ /* Thanx for this algo,florian schwingenschloegel */ } } }