klingon(pla) int pla; { struct NCommand c; int i,j,k,shi,shival,sta,sta2,tas,p,dis; /*Join all tasks at all stars*/ c.com=JOIN; for(sta=0;sta1) do_command(pla,&c); } /* Uncarry all ships*/ c.com=CARRY; for(shi=0;shigeneral.time) continue; sta=task[pla][tas].headed; for(i=0;i0 && star[sta].planet[p].ruler!=pla) { c.com=POSSESS; c.par[0]=sta; c.par[1]=p; do_command(pla,&c); } } /* Declare War on invaders */ c.com=DECLARE; c.par[1]=WAR; for(sta=0;stageneral.time) continue; sta=task[pla][tas].headed; c.par[0]=tas; for(p=0;p0) continue; if(star[sta].planet[p].size==0) continue; if(star[sta].planet[p].size<=star[sta].planet[p].industrie) continue; c.par[1]=p; do_command(pla,&c); } } /* Set production on all planets*/ c.com=PRODUCE; for(sta=0;stafi_pres(pla,sta)) { c.par[2]=best_fi(pla,sta); if(star[sta].planet[p].producing!=c.par[2]) do_command(pla,&c); continue; } if(tr_need(pla,sta)>tr_pres(pla,sta)) { c.par[2]=best_tr(pla,sta); if(star[sta].planet[p].producing!=c.par[2]) do_command(pla,&c); continue; } if(star[sta].planet[p].industrie+star[sta].planet[p].industrie/ICOSTfi_need(pla,sta)) { sta2=fi_star(pla,sta); if(sta2==-1) break; dis=distance(sta,sta2); i=fi_pres(pla,sta )-fi_need(pla,sta ); j=fi_need(pla,sta2)-fi_send(pla,sta2); k=fi_pres(pla,sta )-fi_need(pla,sta ); i=MIN(i,j); j=0; c.com=SPLIT; c.par[0]=tas; for(shi=0;shic.par[shi+1] && ship[shi].hyprange>=dis && fi_value(shi)<=k && fi_value(shi)!=0) { c.par[shi+1]++; j+= fi_value(shi); k-= fi_value(shi); break; } for(shi=0;shipop_need(pla,sta)) { sta2=pop_star(pla,sta); if(sta2==-1) break; dis=distance(sta,sta2); i=pop_pres(pla,sta )-pop_need(pla,sta ); j=pop_need(pla,sta2)-pop_send(pla,sta2); i=MIN(i,j); j=0; k=fi_pres(pla,sta)-fi_need(pla,sta); c.com=SPLIT; c.par[0]=tas; for(shi=0;shij && shi!=SHIPNO) for(shi=0;shic.par[shi+1] && ship[shi].hyprange>=dis && (k>=fi_value(shi)||fi_value(shi)<=0) && ship[shi].capacity>0) { c.par[shi+1]++; j+= ship[shi].capacity; k-= fi_value(shi); break; } for(shi=0;shiore_need(pla,sta)) { sta2=ore_star(pla,sta); if(sta2==-1) break; dis=distance(sta,sta2); i=ore_pres(pla,sta )-ore_need(pla,sta ); j=ore_need(pla,sta2)-ore_send(pla,sta2); i=MIN(i,j); j=0; k=fi_pres(pla,sta)-fi_need(pla,sta); c.com=SPLIT; c.par[0]=tas; for(shi=0;shij && shi!=SHIPNO) for(shi=0;shic.par[shi+1] && ship[shi].hyprange>=dis && (k>=fi_value(shi)||fi_value(shi)<=0) && ship[shi].capacity>0) { c.par[shi+1]++; j+= ship[shi].capacity; k-= fi_value(shi); break; } for(shi=0;shitr_need(pla,sta)) { sta2=tr_star(pla,sta); if(sta2==-1) break; dis=distance(sta,sta2); i=tr_pres(pla,sta )-tr_need(pla,sta ); j=tr_need(pla,sta2)-tr_send(pla,sta2); i=MIN(i,j); j=0; k=fi_pres(pla,sta)-fi_need(pla,sta); c.com=SPLIT; c.par[0]=tas; for(shi=0;shij && shi!=SHIPNO) for(shi=0;shic.par[shi+1] && ship[shi].hyprange>=dis && (k>=fi_value(shi)||fi_value(shi)<=0)) { c.par[shi+1]++; j+= ship[shi].capacity; k-= fi_value(shi); break; } for(shi=0;shifi_send(pla,st)) { b_sta=st; b_dist=distance(st,sta); } return(b_sta); } tr_star(pla,sta) int pla; int sta; { int st,b_sta,b_dist; b_sta=-1; b_dist=1000; for(st=0;sttr_send(pla,st)) { b_sta=st; b_dist=distance(st,sta); } return(b_sta); } fi_need(pla,sta) int pla; int sta; { int p,pl,need; need=1; if(!knowstar(pla,sta)) return(need); for(p=0;p=dis && ship[shi].techlevel<=general.techlevel[pla] && (20*fi_value(shi))/ship[shi].techcost>b_val) { b_shi=shi; b_val=20*fi_value(shi)/ship[shi].techcost; } return(b_shi); } tr_need(pla,sta) int pla; int sta; { int shi,tas,p,pl,need,dis; need=0; dis=distance(sta,nearstar(sta)); if(!knowstar(pla,sta)) return(0); for(tas=0;tas=dis && ship[shi].techlevel<=general.techlevel[pla] && (20*tr_value(shi))/ship[shi].techcost>b_val) { b_shi=shi; b_val=20*tr_value(shi)/ship[shi].techcost; } return(b_shi); } pop_pres(pla,sta) int pla; int sta; { int pres,tas; pres=0; for(tas=0;taspop_send(pla,st)) { b_sta=st; b_dist=distance(st,sta); } return(b_sta); } ore_pres(pla,sta) int pla; int sta; { int pres,tas; pres=0; for(tas=0;tasore_send(pla,st)) { b_sta=st; b_dist=distance(st,sta); } return(b_sta); }