|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T r
Length: 23697 (0x5c91) Types: TextFile Names: »reports.c.orig«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Conquer/reports.c.orig«
/* Conquer: Copyright (c) 1988 by Edward M Barlow * I spent a long time writing this code & I hope that you respect this. * I give permission to alter the code, but not to copy or redistribute * it without my explicit permission. If you alter the code, * please document changes and send me a copy, so all can have it. * This code, to the best of my knowledge works well, but it is my first * 'C' program and should be treated as such. I disclaim any * responsibility for the codes actions (use at your own risk). I guess * I am saying "Happy gaming", and am trying not to get sued in the process. * Ed */ /* screen subroutines */ /*include files*/ #include <ctype.h> #include "header.h" #include "data.h" extern FILE *fexe; extern short country; extern long startgold; extern short xcurs,ycurs; extern short xoffset,yoffset; extern short redraw; #define RPT_LINES 11 #define RPT_COLS 10 #define BUF_LINES 10 #define BUF_COLS 15 #define MAXINROW ((COLS-BUF_COLS)/RPT_COLS) #define MAXINSCR (((LINES-BUF_LINES)/RPT_LINES)*MAXINROW) /*report on armies and allow changes*/ void armyrpt(repnum) int repnum; /* 0 is for full report 'a' and 1 is for group report 'g' */ { int i,j; char inpkey; int men,attset,defset,bemerc; short oldarmy; int done=FALSE; int xpos,ypos; int isgod=FALSE; int count,count2; /*number of armies on current screen */ short armynum=0; if(country==0) { isgod=TRUE; if (get_god()) return; } else { /* if not god, check there are armies to display */ men=FALSE; for(armynum=0;men==FALSE && armynum<MAXARM;armynum++) if(P_ASOLD>0 && (!repnum || (P_AXLOC==XREAL && P_AYLOC==YREAL))) men=TRUE; if (!men) { redraw=FALSE; clear_bottom(0); errormsg("no armies to display"); makebottom(); return; } } count2=0; /*new army screen*/ while(done==FALSE) { clear(); armynum=count2; xpos=BUF_COLS; ypos=2; count=0; while((armynum<MAXARM)&&(count<MAXINSCR)){ if(P_ASOLD>0 && (!repnum || (P_AXLOC==XREAL && P_AYLOC==YREAL))) { if (count%MAXINROW==0) { /* diplay header information */ mvaddstr(ypos+1,0,"soldiers :"); mvaddstr(ypos+2,0,"movement :"); mvaddstr(ypos+3,0,"x location:"); mvaddstr(ypos+4,0,"y location:"); mvaddstr(ypos+5,0,"status :"); mvaddstr(ypos+6,0,"unit type :"); mvaddstr(ypos+7,0,"cost/turn :"); mvaddstr(ypos+8,0,"enlist :"); } standout(); mvprintw(ypos,xpos,"%d:",armynum); standend(); mvprintw(ypos+1,xpos,"%ld",P_ASOLD); mvprintw(ypos+2,xpos,"%d",P_AMOVE); mvprintw(ypos+3,xpos,"%d",P_AXLOC); mvprintw(ypos+4,xpos,"%d",P_AYLOC); if(P_ASTAT>=NUMSTATUS) mvprintw(ypos+5,xpos,"group %d",P_ASTAT-NUMSTATUS); else mvprintw(ypos+5,xpos,"%s",*(soldname+P_ASTAT)); mvprintw(ypos+6,xpos,"%s",*(unittype+(P_ATYPE%UTYPE))); if (P_ATYPE<MINMONSTER) mvprintw(ypos+7,xpos,"$%ld",P_ASOLD * *(unitmaint+(P_ATYPE%UTYPE))); else mvprintw(ypos+7,xpos,"$%ld", 5L * *(unitmaint+(P_ATYPE%UTYPE))); if (P_ATYPE<MINMONSTER) mvprintw(ypos+8,xpos,"$%ld",P_ASOLD * *(u_encost+(P_ATYPE%UTYPE))); else mvprintw(ypos+8,xpos,"%d pts", (int)*(u_encost+(P_ATYPE%UTYPE))); count++; if(count<MAXINSCR && count%MAXINROW==0) { ypos+=RPT_LINES; xpos=BUF_COLS; } else { xpos+=RPT_COLS; } } armynum++; } /*Operate on any armies that you wish*/ standout(); mvprintw(0,(COLS/2)-15-strlen(curntn->name)/2,"ARMY STATS SUMMARY FOR %s",curntn->name); ypos+=10; mvaddstr(ypos++,(COLS/2)-14,"HIT SPACE KEY IF DONE"); mvaddstr(ypos++,(COLS/2)-25,"HIT RETURN TO CHANGE ANY ARMY STATISTICS"); mvaddstr(ypos++,(COLS/2)-17,"HIT ANY OTHER KEY FOR MORE"); standend(); refresh(); ypos++; if ((inpkey = getch())==' ') done=TRUE; else if((inpkey=='\n')||(inpkey=='\r')) { done=0; mvaddstr(ypos++,0,"WHAT ARMY DO YOU WANT TO CHANGE:"); ypos++; clrtoeol(); refresh(); armynum = get_number(); if((armynum<0)||(armynum>MAXARM)) { continue; } #ifdef TRADE if(P_ASTAT==TRADED) { errormsg("May not change traded army"); continue; } #endif TRADE mvaddstr(ypos,0,"OPTIONS: 1) COMMAND 2) DISBAND 3) CHANGE GROUP"); if(P_ATYPE<MINLEADER) mvaddstr(ypos,47,"4) MERGE 5) SPLIT ARMY"); ypos++; clrtoeol(); #ifdef OGOD if(isgod==TRUE) mvaddstr(ypos++,0,"GOD OPTIONS: 6) LOCATION 7) SOLDIERS"); clrtoeol(); #endif OGOD ypos++; refresh(); switch(getch()){ case '1': ext_cmd(armynum); break; case '4': clear_bottom(0); if(P_ATYPE>=MINLEADER){ errormsg("SORRY -- army is monster"); break; } oldarmy=armynum; mvaddstr(ypos++,0,"TO WHAT ARMY: "); refresh(); armynum = get_number(); combinearmies(armynum,oldarmy); break; case '5': splitarmy(armynum); break; case '2': /* disband army */ clear_bottom(0); if(P_ATYPE<MINLEADER) mvprintw(ypos++,0,"Disband your %s army %d?",*(unittype+(P_ATYPE%UTYPE)),armynum); else mvprintw(ypos++,0,"Disband your %s %d?",*(unittype+(P_ATYPE%UTYPE)),armynum); refresh(); if(getch()!='y') break; if(sct[P_AXLOC][P_AYLOC].owner!=country && P_ATYPE!=A_SPY){ errormsg("You don't own the sector"); break; } else if(P_ASTAT==ONBOARD) { errormsg("That unit must be first be unloaded"); break; } else if(P_ATYPE==A_SPY) { /*spys are given a shut up fee */ mvprintw(LINES-4,0,"Your spy demands %ld talons to remain quiet", *(u_encost+(P_ATYPE%UTYPE)) * 2); mvprintw(LINES-3,0,"Pay him off? (y or n)"); clrtoeol(); refresh(); if(getch()=='y'){ /* spys do not add to population */ curntn->tgold -= *(u_encost+(P_ATYPE%UTYPE)) * 2; P_ASOLD=0; AADJMEN; } } else if(P_ATYPE==A_MERCENARY){ /*mercs must be payed off*/ mvprintw(LINES-4,0,"Your mercenaries demand %ld talons to disband", *(u_encost+(P_ATYPE%UTYPE)) * P_ASOLD); mvprintw(LINES-3,0,"Give them severance pay? (y or n)"); clrtoeol(); refresh(); if(getch()=='y'){ curntn->tgold -= *(u_encost+(P_ATYPE%UTYPE)) * P_ASOLD; /*mercs do not add to local populace*/ attset = MERCATT; defset = MERCDEF; bemerc = P_ASOLD; P_ASOLD=0; AADJMEN; AADJDISB; } } else if(P_ATYPE==A_ZOMBIE){ errormsg("Zombie units cannot disband"); break; } else { if (P_ATYPE < MINLEADER) { bemerc = (P_ASOLD*15)/100; /*15% become mercs*/ attset = curntn->aplus + *(unitattack+(P_ATYPE%UTYPE)); defset = curntn->dplus + *(unitdefend+(P_ATYPE%UTYPE)); P_ASOLD -= bemerc; sct[P_AXLOC][P_AYLOC].people+=P_ASOLD; AADJDISB; } P_ASOLD=0; AADJMEN; i=P_AXLOC; j=P_AYLOC; SADJCIV2; } break; case '3': addgroup(armynum); break; #ifdef OGOD case '6': if(isgod==TRUE){ /*X LOCATION*/ mvaddstr(ypos++,0,"What is the New X Loc: "); refresh(); men = get_number(); if (men>=0 && men<MAPX) P_AXLOC=men; /*Y LOCATION*/ mvaddstr(ypos++,0,"What is the New Y Loc: "); refresh(); men = get_number(); if (men>=0 && men<MAPY) P_AYLOC=men; AADJLOC; } break; case '7': if(isgod==TRUE){ /*SOLDIERS*/ mvaddstr(ypos++,0,"What is the New Total Soldiers: "); refresh(); men = get_number(); P_ASOLD=men; AADJMEN; } break; #endif OGOD default: errormsg("Invalid Input"); } armynum=0; } else { /* go to start of next page in army list */ while(armynum<MAXARM && (P_ASOLD==0 || !(!repnum || (P_AXLOC==XREAL && P_AYLOC==YREAL)))) armynum++; if(armynum==MAXARM) count2=0; else count2=armynum; } } if(isgod==TRUE) reset_god(); } void budget() { short armynum,nvynum; long numship=0L,costsold=0L,numsold=0L; long nummonst=0L,costmonst=0L,money; int isgod=FALSE; if(country==0) { isgod=TRUE; if (get_god()) return; /* make budget report work for god */ startgold=curntn->tgold; } clear(); standout(); mvaddstr(0,(COLS/2)-15,"NEXT SEASON'S BUDGET ESTIMATES"); standend(); spreadsheet(country); for(armynum=0;armynum<MAXARM;armynum++) if(P_ASOLD>0) { if(P_ATYPE<MINLEADER) { numsold += P_ASOLD; costsold += P_ASOLD * ((long) *(unitmaint+(P_ATYPE%UTYPE))); } else if (P_ATYPE>=MINMONSTER) { nummonst++; costmonst += 5L * ((long) *(unitmaint+(P_ATYPE%UTYPE))); } } for(nvynum=0;nvynum<MAXNAVY;nvynum++) if(P_NWSHP!=0||P_NMSHP!=0||P_NGSHP!=0) numship+=flthold(nvynum); standout(); mvprintw(3,0, "nation name is......%s",curntn->name); standend(); mvprintw(4,0, "talons in treasury.$%ld",startgold); mvprintw(5,0, "number of sectors...%d",spread.sectors); if(curntn->tfood<2*curntn->tciv) standout(); mvprintw(7,0, "granary holds.....%8ld",curntn->tfood); standend(); mvprintw(8,0, "jewels owned......%8ld",curntn->jewels); mvprintw(9,0, "metal ore owned...%8ld",curntn->metals); mvprintw(3,COLS-50, "%8ld people in gold mines.%8ld",spread.ingold,spread.revjewels); mvprintw(4,COLS-50, "%8ld people in mines......%8ld",spread.inmetal,spread.revmetal); mvprintw(5,COLS-50, "%8ld people in farms......%8ld",spread.infarm,spread.revfood); mvprintw(6,COLS-50,"%8ld people in cities.....%8ld",spread.incap,spread.revcap); mvprintw(7,COLS-50,"%8ld people in towns......%8ld",spread.incity,spread.revcity); mvprintw(8,COLS-50, "%8ld people elsewhere.....%8ld",spread.inothr,spread.revothr); standout(); mvprintw(9,COLS-50,"%8ld people INCOME........%8ld",spread.civilians,spread.gold - curntn->tgold); standend(); mvprintw(11,COLS-50,"%8ld troops...............%8ld",numsold,costsold); mvprintw(12,COLS-50,"%8ld monsters.............%8ld",nummonst,costmonst); mvprintw(13,COLS-50,"%8ld ship holds @ %4d....%8ld",numship,SHIPMAINT,numship*SHIPMAINT); mvprintw(14,COLS-50,"other expenses this turn......%8ld",startgold-curntn->tgold); standout(); money=costmonst+costsold+(numship*SHIPMAINT)+startgold-curntn->tgold; mvprintw(15,COLS-50,"TOTAL EXPENSES................%8ld",money); money=spread.gold - curntn->tgold - money; /* net income */ standend(); mvprintw(17,COLS-50,"NET INCOME....................%8ld",money); mvprintw(16,COLS-50,"CHARITY.......................%8ld",max((money*curntn->charity)/100,0)); standout(); mvprintw(18,COLS-50,"NEXT SEASON'S TREASURY........%8ld",(startgold + money)*(100-curntn->charity)/100); mvaddstr(LINES-3,(COLS/2)-15,"HIT 'P' TO SEE PRODUCTION SCREEN"); mvaddstr(LINES-2,(COLS/2)-15,"HIT 'C' FOR CHANGE NATION SCREEN"); mvaddstr(LINES-1,(COLS/2)-14,"HIT ANY OTHER KEY TO CONTINUE"); standend(); refresh(); switch( getch() ) { case 'p': case 'P': produce(); break; case 'c': case 'C': change(); break; } if(isgod==TRUE) reset_god(); } void produce() { FILE *fp; short armynum; long military=0; long nummonst=0L,costmonst=0L; int isgod=FALSE; if(country==0) { isgod=TRUE; if (get_god()) return; } fp=fopen("temp","w"); clear(); standout(); mvaddstr(0,(COLS/2)-17,"NEXT SEASON'S PRODUCTION ESTIMATES"); standend(); spreadsheet(country); fprintf(fp,"LINE %d FILE %s\n",__LINE__,__FILE__); for(armynum=0;armynum<MAXARM;armynum++) if(P_ASOLD>0) { if (P_ATYPE<MINLEADER) { military+=P_ASOLD; } else if (P_ATYPE>=MINMONSTER) { nummonst++; costmonst += (long) *(unitmaint+(P_ATYPE%UTYPE)); } } standout(); mvprintw(4,0, "nation name is....%s",curntn->name); standend(); mvprintw(5,0, "talons in treasury..$%ld",startgold); mvaddstr(7,0, "FOOD PRODUCTION"); mvprintw(9,0, "granary now holds.........%8ld tons",curntn->tfood); mvprintw(10,0, "%8ld people in farms..%8ld tons",spread.infarm,spread.food - curntn->tfood); fprintf(fp,"LINE %d FILE %s\n",__LINE__,__FILE__); mvprintw(12,0, "%8ld people @ %3.1f eat.%8.0f tons",spread.civilians,P_EATRATE,P_EATRATE*(float)spread.civilians); fprintf(fp,"LINE %d FILE %s\n",__LINE__,__FILE__); mvprintw(13,0, "%8ld soldiers eat.....%8.0f tons",military,military*2*P_EATRATE); military+= military+spread.civilians; /* military is amount eaten */ fprintf(fp,"LINE %d FILE %s\n",__LINE__,__FILE__); standout(); mvprintw(15,0, "ESTIMATE NET FOOD.........%8.0f tons",spread.food-curntn->tfood-P_EATRATE*military); mvprintw(16,0, "ESTIMATE FOOD SUPPLY......%8.0f tons",spread.food-P_EATRATE*military); standend(); fprintf(fp,"LINE %d FILE %s\n",__LINE__,__FILE__); mvaddstr(7,COLS/2+1, "OTHER PRODUCTION"); mvprintw(9,COLS/2+1, "jewels owned is...............%8ld",curntn->jewels); mvprintw(10,COLS/2+1, "%8ld people in goldmines..%8ld",spread.ingold,spread.jewels-curntn->jewels); mvprintw(11,COLS/2+1, "%8ld monsters.............%8ld",nummonst,-costmonst); standout(); mvprintw(12,COLS/2+1, "ESTIMATE JEWEL SUPPLY.........%8ld",spread.jewels-costmonst); standend(); mvprintw(14,COLS/2+1, "metal ore owned is............%8ld",curntn->metals); mvprintw(15,COLS/2+1, "%8ld people in mines......%8ld",spread.inmetal,spread.metal-curntn->metals); standout(); mvprintw(16,COLS/2+1, "ESTIMATE METAL SUPPLY.........%8ld",spread.metal); standend(); standout(); mvaddstr(LINES-3,(COLS/2)-15,"HIT 'B' TO SEE BUDGET SCREEN"); mvaddstr(LINES-2,(COLS/2)-17,"HIT 'C' FOR CHANGE NATION SCREEN"); mvaddstr(LINES-1,(COLS/2)-15,"HIT ANY OTHER KEY TO CONTINUE"); standend(); refresh(); switch( getch() ) { case 'b': case 'B': budget(); break; case 'c': case 'C': change(); break; } if(isgod==TRUE) reset_god(); fclose(fp); } #undef RPT_LINES #undef RPT_COLS #undef BUF_LINES #undef BUF_COLS #define RPT_LINES 13 #define RPT_COLS 11 #define BUF_LINES 10 #define BUF_COLS 15 char *fltstr[]= {"Light", "Medium", "Heavy"}; /*report on ships and allow changes */ void fleetrpt() { short navy,armynum; short newx,newy,newnavy; short done=FALSE; int i,j; int xpos,ypos,crew,people; int count,count2; /*screen number */ short nvynum=0; /*current ship id */ short shipsize; int isgod=FALSE; if(country==0) { isgod=TRUE; if (get_god()) return; } else { /* if not god, check if there are navies to display */ for(count=nvynum=0;count==0 && nvynum<MAXNAVY;nvynum++) if (P_NWSHP!=0||P_NMSHP!=0||P_NGSHP!=0) count=1; if(count==0){ clear_bottom(0); errormsg("no navies"); redraw=FALSE; makebottom(); return; } } count2=0; while(done==FALSE) { clear(); ypos=2; xpos=BUF_COLS; count=0; nvynum=count2; while((nvynum<MAXNAVY)&&(count<MAXINSCR)){ if((P_NWSHP!=0)||(P_NMSHP!=0)||(P_NGSHP!=0)) { /* give a navy report */ if (count%MAXINROW==0) { mvaddstr(ypos+2,0, "warships :"); mvaddstr(ypos+3,0, "merchants :"); mvaddstr(ypos+4,0, "galleys :"); mvaddstr(ypos+5,0, "x location:"); mvaddstr(ypos+6,0, "y location:"); mvaddstr(ypos+7,0, "crew/unit :"); mvaddstr(ypos+8,0, "move left :"); mvaddstr(ypos+9,0, "carrying :"); mvaddstr(ypos+10,0, "civilians :"); } /* give naval information */ standout(); mvprintw(ypos,xpos,"%d:",nvynum); standend(); mvprintw(ypos+1,xpos,"lt/md/hv"); mvprintw(ypos+2,xpos,"%2hd/%2hd/%2hd",P_NWAR(N_LIGHT),P_NWAR(N_MEDIUM),P_NWAR(N_HEAVY)); mvprintw(ypos+3,xpos,"%2hd/%2hd/%2hd",P_NMER(N_LIGHT),P_NMER(N_MEDIUM),P_NMER(N_HEAVY)); mvprintw(ypos+4,xpos,"%2hd/%2hd/%2hd",P_NGAL(N_LIGHT),P_NGAL(N_MEDIUM),P_NGAL(N_HEAVY)); mvprintw(ypos+5,xpos,"%d",(int)P_NXLOC); mvprintw(ypos+6,xpos,"%d",(int)P_NYLOC); mvprintw(ypos+7,xpos,"%d",(int)P_NCREW); mvprintw(ypos+8,xpos,"%d",(int)P_NMOVE); if(P_NARMY==MAXARM) mvaddstr(ypos+9,xpos,"(none)"); else { armynum=P_NARMY; if(P_ATYPE<MINLEADER) mvprintw(ypos+9,xpos,"army %d",armynum); else mvprintw(ypos+9,xpos,"%s %d",*(unittype+(P_ATYPE%UTYPE)),armynum); } mvprintw(ypos+10,xpos,"%d",P_NPEOP*fltmhold(nvynum)); count++; if(count<MAXINSCR && count%MAXINROW==0) { ypos+=RPT_LINES; xpos=BUF_COLS; } else { xpos+=RPT_COLS; } } nvynum++; } /*Operate on any navies that you wish*/ standout(); mvprintw(0,(COLS/2)-15-strlen(curntn->name)/2,"NAVY STATS SUMMARY FOR %s",curntn->name); ypos+=12; mvaddstr(ypos++,(COLS/2)-14,"HIT SPACE KEY IF DONE"); mvaddstr(ypos++,(COLS/2)-18,"HIT RETURN TO CHANGE A NAVY"); mvaddstr(ypos++,(COLS/2)-17,"HIT ANY OTHER KEY FOR MORE"); ypos++; standend(); refresh(); if ((navy=getch())==' ') done=TRUE; else if ((navy=='\n')||(navy=='\r')){ mvaddstr(ypos++,0,"WHAT NAVY DO YOU WANT TO CHANGE:"); clrtoeol(); refresh(); nvynum = get_number(); #ifdef TRADE if (curntn->nvy[nvynum].commodity==TRADED) { errormsg("Sorry - That Navy is up for trade"); continue; } #endif TRADE if((nvynum<0)||(nvynum>=MAXNAVY)) { errormsg("Invalid Naval unit"); continue; } mvaddstr(ypos++,0,"OPTIONS: 1) TRANSFER / MERGE, 2) SPLIT NAVY, 3) DISBAND NAVY"); clrtoeol(); #ifdef OGOD if(isgod==TRUE) mvaddstr(ypos++,0,"GOD OPTIONS: 4) ADJUST SHIPS, 5) LOCATION, 6) CREW"); ypos++; clrtoeol(); #endif OGOD refresh(); switch(getch()){ case '1': mvaddstr(ypos++,0,"TO WHAT NAVY: "); clrtoeol(); refresh(); newnavy = get_number(); if(newnavy<0 || newnavy>=MAXNAVY) { errormsg("Sorry - Invalid Navy unit"); break; } newx = curntn->nvy[newnavy].xloc; newy = curntn->nvy[newnavy].yloc; #ifdef TRADE if (curntn->nvy[newnavy].commodity==TRADED) { errormsg("Sorry - That Navy is up for trade"); } else #endif TRADE if(nvynum==newnavy) { errormsg("Sorry -- That is the same Navy"); } else if((P_NARMY!=MAXARM) &&(curntn->nvy[newnavy].armynum!=MAXARM)) { errormsg("Sorry -- One of the two Armies must be unloaded"); } else if((newx==P_NXLOC)&&(newy==P_NYLOC)) { crew = flthold(nvynum)*P_NCREW; people = fltmhold(nvynum)*P_NPEOP; crew += flthold(newnavy)*curntn->nvy[newnavy].crew; people += flthold(newnavy)*curntn->nvy[newnavy].people; for(i=N_LIGHT;i<=N_HEAVY;i++) { (void) addwships(newnavy,i,P_NWAR(i)); (void) addmships(newnavy,i,P_NMER(i)); (void) addgships(newnavy,i,P_NGAL(i)); } P_NCREW=0; P_NWSHP=0; P_NMSHP=0; P_NGSHP=0; if (P_NARMY!=MAXARM) { curntn->nvy[newnavy].armynum=P_NARMY; P_NARMY=MAXARM; } P_NPEOP=0; NADJWAR; NADJMER; NADJGAL; NADJCRW; NADJHLD; if(P_NMOVE>curntn->nvy[newnavy].smove) curntn->nvy[newnavy].smove=P_NMOVE; P_NMOVE=0; NADJMOV; nvynum=newnavy; if (flthold(nvynum)>0) P_NCREW=(unsigned char)(crew/flthold(nvynum)); if (fltmhold(nvynum)>0) P_NPEOP=(unsigned char)(people/fltmhold(nvynum)); NADJMOV; NADJWAR; NADJMER; NADJGAL; NADJCRW; NADJHLD; } else { errormsg("Navies not together"); } break; case '2': newnavy=nvynum; navy=(-1); for(nvynum=0;nvynum<MAXNAVY;nvynum++) if(((P_NWSHP==0)&&(P_NMSHP==0)&&(P_NGSHP==0)) &&(navy==(-1))) navy=nvynum; if(navy==(-1)) { errormsg("Too many Navies"); break; } nvynum=newnavy; curntn->nvy[navy].xloc=P_NXLOC; curntn->nvy[navy].yloc=P_NYLOC; curntn->nvy[navy].crew=P_NCREW; curntn->nvy[navy].people=P_NPEOP; curntn->nvy[navy].smove=P_NMOVE; mvaddstr(LINES-2,0,"Do you wish to separate warships from remainder of fleet?"); refresh(); if(getch()=='y') { curntn->nvy[navy].warships=P_NWSHP; P_NWSHP=0; NADJWAR; nvynum=navy; P_NMSHP=0; P_NGSHP=0; P_NARMY=MAXARM; P_NPEOP=0; NADJMOV; NADJCRW; NADJWAR; NADJMER; NADJGAL; NADJHLD; break; } else if(P_NARMY!=MAXARM) { errormsg("Army must be unloaded before Navy is divided"); break; } for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) { mvprintw(ypos,0,"How Many %s Warships To Split?",fltstr[shipsize]); clrtoeol(); refresh(); newnavy = get_number(); if(newnavy>P_NWAR(shipsize)) newnavy=0; NSUB_WAR(newnavy); (void) addwships(navy,shipsize,newnavy); } for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) { mvprintw(ypos,0,"How Many %s Merchants To Split?",fltstr[shipsize]); clrtoeol(); refresh(); newnavy = get_number(); if(newnavy>P_NMER(shipsize)) newnavy=0; NSUB_MER(newnavy); (void) addmships(navy,shipsize,newnavy); } for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) { mvprintw(ypos,0,"How Many %s Galleys To Split?",fltstr[shipsize]); clrtoeol(); refresh(); newnavy = get_number(); if(newnavy>P_NGAL(shipsize)) newnavy=0; NSUB_GAL(newnavy); (void) addgships(navy,shipsize,newnavy); } NADJWAR; NADJMER; NADJGAL; nvynum=navy; P_NARMY=MAXARM; NADJMOV; NADJCRW; NADJWAR; NADJMER; NADJGAL; NADJHLD; break; case '3': /* DISBAND NAVY */ i=P_NXLOC; j=P_NYLOC; if(sct[i][j].altitude == WATER && isgod==FALSE) { errormsg("Ships need to be on land or in harbor"); break; } if(sct[i][j].owner != country && isgod==FALSE) { errormsg("You don't own the land"); break; } sct[i][j].people+=P_NCREW*flthold(nvynum); sct[i][j].people+=P_NPEOP*fltmhold(nvynum); if(P_NARMY!=MAXARM) { armynum=P_NARMY; P_NARMY=MAXARM; P_ASTAT=DEFEND; AADJSTAT; } P_NWSHP=0; P_NMSHP=0; P_NGSHP=0; P_NCREW=0; P_NPEOP=0; SADJCIV2; NADJCRW; NADJWAR; NADJGAL; NADJMER; NADJHLD; break; #ifdef OGOD case '4': if (isgod==TRUE) { /* ADJUST SHIPS */ P_NWSHP=0; P_NMSHP=0; P_NGSHP=0; for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) { mvprintw(ypos,0,"How Many %s Warships?",fltstr[shipsize]); clrtoeol(); refresh(); newnavy = get_number(); if(newnavy>N_MASK) newnavy=0; (void) NADD_WAR(newnavy); } for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) { mvprintw(ypos,0,"How Many %s Merchants?",fltstr[shipsize]); clrtoeol(); refresh(); newnavy = get_number(); if(newnavy>N_MASK) newnavy=0; (void) NADD_MER(newnavy); } for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) { mvprintw(ypos,0,"How Many %s Galleys?",fltstr[shipsize]); clrtoeol(); refresh(); newnavy = get_number(); if(newnavy>N_MASK) newnavy=0; (void) NADD_GAL(newnavy); } NADJWAR; NADJMER; NADJGAL; } break; case '5': if (isgod==TRUE) { /*X LOCATION*/ mvaddstr(ypos++,0,"What Is The New X Loc: "); refresh(); crew = get_number(); if (crew>=0 && crew<MAPX) P_NXLOC=crew; /*Y LOCATION*/ mvaddstr(ypos,0,"What Is The New Y Loc: "); clrtoeol(); refresh(); crew = get_number(); if (crew>=0 && crew<MAPY) P_NYLOC=crew; NADJLOC; } break; case '6': if (isgod==TRUE) { /* ADJUST CREWSIZE */ mvaddstr(ypos,0,"What value for crew/ship unit: "); refresh(); crew = get_number(); if (crew>=0 && crew<=SHIPCREW) P_NCREW = crew; NADJCRW; } break; #endif OGOD default: errormsg("Invalid Input"); } noecho(); nvynum=0; } else { /* go to start of next page in navy list */ while((nvynum<MAXNAVY) &&((P_NWSHP==0)&&(P_NMSHP==0)&&(P_NGSHP==0))) nvynum++; if(nvynum==MAXNAVY) count2=0; else count2=nvynum; } } if(isgod==TRUE) reset_god(); }