games-request@tekred.TEK.COM (10/26/87)
Submitted by: ihnp4!mhuxd!smile (E.BARLOW) Comp.sources.games: Volume 2, Issue 62 Archive-name: conquest/Part05 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 5 (of 5)." # Contents: .nations DIST-NOTE forms.c header.h io.c # Wrapped by billr@tekred on Mon Oct 26 10:33:09 1987 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f .nations -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \".nations\" else echo shar: Extracting \".nations\" \(2950 characters\) sed "s/^X//" >.nations <<'END_OF_.nations' X# GAME MASTERS FILE ON NPC NATIONS: COMPILE TIME ONLY X# comments are offset by a # sign in the first column X# X# THERE IS A LIMIT OF "MAXNTN" NATIONS TOTAL; Be sure this is ok X# X# name :nations name X# :examples include Darboth Ummaya Rugar Jute Atlantis Iberia X# :Kuybyshev Avar Grodor Bantanya Fung Codor Delph Macitania X# leader : permitted leaders are "dwarfking","elfking","elfdruid", X# "elfwizard","demon","dragon","wizard","priest", X# "shadow","king","priestking","wizard","demigod" X# race :Character, ORC='O',ELF='E',DWARF='D',LZARD='L',HUMAN='H' X# :BRIGAND='P' BARBARIAN='B' X# mark :unique mark for race (ie & or ! or 1 or H...) X# loc :G,F,R location (good,fair,random) X# aplus :attack percentage plus (multiples of 10 (ie 10,20,30)) X# dplus :defence percentage plus (multiples of 10 (ie 10,20,30)) X# maxmove :movement rate (4 to 8) X# gold :total gold at start X# mil :total military at start X# civilians :total civilians at start X# repro-rate :reproduction rate of nation (percentage) X# aggr :aggressiveness (1--always peaceful) to (10 -- always hostile) X# X#EXAMPLE NATIONS PTS X# Sporf demon O S R 0 0 6 1000 2500 4000 10 9 9 X# Athens king H A R 10 10 9 10000 500 5000 5 4 9 X# Fung king E F F 20 30 8 20000 200 3000 3 2 6 X# X dwarfking D X R 20 20 6 20000 1500 4000 4 4 6 X# ADD PTS IN VALUE TO THE ABOVE FORE RACIAL BASES TO GET BALANCE X# X# THE NATIONS LISTED BELOW ARE CALIBRATED AS FOLLOWS X# ELVES: fung (27), lint (28), anorian (29), roos (22) =>106 points X# ORCS : sporf (24), etland (24), woolos (36), darboth (20) =>106 points X# HUMAN: argos(24), taelos(20), cordoba(21), zaos(21), tokus(20) =>106 X# DWARF: Goldor (22), Muldor (38), Sodor (25)points, Valar(20) =>106 points X# X# format: (note that offset by a space) X# X# name leader race mark location aplus dplus maxmove gold mil civ repro aggr X######################################################################### Xanorian elfwizard E A F 30 40 8 30000 1500 8500 8 2 Xargos king H a R 10 10 9 10000 1500 11000 7 4 Xbobland dragon O b F 20 0 6 1000 1500 8000 10 9 Xcordoba wizard H c R 10 10 2 10000 1500 8000 8 4 Xdarboth balrog O d R 0 0 7 30000 1500 9500 8 9 Xedland dragon O e R 20 0 8 1000 1500 8500 10 9 Xfarmland warking H F R 10 10 9 20000 1000 6150 8 4 Xfung elfking E f F 10 40 8 20000 1000 9500 8 2 Xgelos dwarfduke D g F 15 10 9 20000 1000 7900 7 8 Xlint elfwizard E l F 20 30 8 20000 1500 7900 10 2 XMuldor dwarfking D m F 10 30 6 60000 5000 18000 7 4 Xmoria dwarfduke D M R 10 30 6 20000 1000 10000 8 4 Xroos elfpriest E r R 20 0 6 3000 2000 6500 10 9 Xtokus king H T R 10 10 8 10000 1000 7500 8 4 Xwoolos shadow O w F 10 10 10 10000 3500 17000 10 9 XValar dwarf D v R 10 15 8 10000 1000 7000 8 4 Xzaos king H z R 10 15 12 10000 1000 7000 8 4 END_OF_.nations if test 2950 -ne `wc -c <.nations`; then echo shar: \".nations\" unpacked with wrong size! fi # end of overwriting check fi if test -f DIST-NOTE -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"DIST-NOTE\" else echo shar: Extracting \"DIST-NOTE\" \(446 characters\) sed "s/^X//" >DIST-NOTE <<'END_OF_DIST-NOTE' X October 26, 1987 X X XBill Randle XModerator Xcomp.sources.games X XBill, X XThe reason I want to limit re-distribution is to assure source code Xintegrity when I get modification requests... This version has been Xplayed by myself about a dozen times, but there will still be many Xmany bugs and changes... I do want as wide a distribution as possible, Xso, you have permission to distribute this as widely Xas desired. X XThanks! XEd Xihnp4!mhuxd!smile END_OF_DIST-NOTE if test 446 -ne `wc -c <DIST-NOTE`; then echo shar: \"DIST-NOTE\" unpacked with wrong size! fi # end of overwriting check fi if test -f forms.c -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"forms.c\" else echo shar: Extracting \"forms.c\" \(12808 characters\) sed "s/^X//" >forms.c <<'END_OF_forms.c' X/*conquest is copyrighted 1986 by Ed Barlow. X * I spent a long time writing this code & I hope that you respect this. X * I give permission to alter the code, but not to copy or redistribute X * it without my explicit permission. If you alter the code, X * please document changes and send me a copy, so all can have it. X * This code, to the best of my knowledge works well, but it is my first X * 'C' program and should be treated as such. I disclaim any X * responsibility for the codes actions (use at your own risk). I guess X * I am saying "Happy gaming", and am trying not to get sued in the process. X * Ed X */ X X X/* screen subroutines */ X X/*include files*/ X#include <ctype.h> X#include "header.h" X Xextern FILE *fexe; Xextern short country; X Xshowscore() X{ X int i; X int done=0; X int position; X int count; /*number of time through the loop on this screen*/ X int nationid; /*current nation id */ X X nationid=1; X while((done==0)&&(nationid<MAXNTN)) { X clear(); X standout(); X mvaddstr(0,(COLS/2)-10,"NATION SCORE SCREEN"); X standend(); X mvaddstr(3,0,"nationid is:"); X mvaddstr(4,0,"name is:"); X mvaddstr(5,0,"leader:"); X mvaddstr(6,0,"race:"); X mvaddstr(7,0,"class:"); X mvaddstr(8,0,"score:"); X mvaddstr(9,0,"gold:"); X mvaddstr(10,0,"military:"); X mvaddstr(11,0,"civilians:"); X mvaddstr(12,0,"sectors:"); X mvaddstr(13,0,"ships:"); X X count=0; X position=2; X while((nationid<MAXNTN)&&(count<5)){ X if((nationid<MAXNTN)&&(ntn[nationid].active!=0)) { X position+=13; X mvprintw(3,position,"%d",nationid); X standout(); X mvprintw(4,position,"%s",ntn[nationid].name); X standend(); X mvprintw(5,position,"%s",ntn[nationid].leader); X for(i=1;i<8;i++) X if(ntn[nationid].race==*(races+i)[0]) X mvprintw(6,position,"%s",*(races+i)); X if(ntn[nationid].active>=2) mvprintw(7,position,"NPC"); X else mvprintw(7,position,"%s",*(Class+ntn[nationid].class)); X mvprintw(8,position,"%d",ntn[nationid].score); X mvprintw(9,position,"%d",ntn[nationid].tgold); X mvprintw(10,position,"%d",ntn[nationid].tmil); X mvprintw(11,position,"%d",ntn[nationid].tciv); X mvprintw(12,position,"%d",ntn[nationid].tsctrs); X mvprintw(13,position,"%d",ntn[nationid].tships); X count++; X } X nationid++; X } X standout(); X mvaddstr(18,(COLS/2)-12,"HIT ANY KEY TO CONTINUE"); X mvaddstr(19,(COLS/2)-9,"HIT SPACE IF DONE"); X standend(); X refresh(); X if (getch()==' ') done=1; X } X} X Xdiploscrn() X{ X int i; X char k; X short nation, offset, count, olddip, oldnat, temp; X FILE *fp, *fopen(); X short isgod=0; X if(country==0) { X isgod=1; X clear(); X mvaddstr(0,0,"WHAT NATION NUMBER:"); X refresh(); X echo(); X scanw("%hd",&country); X noecho(); X } X while(1){ X count=1; X offset=0; X clear(); X standout(); X mvaddstr(0,(COLS/2)-10,"NATION DIPLOMACY SUMMARY"); X standend(); X mvaddstr(2,0," BY YOU, TO YOU"); X for(i=1;i<MAXNTN+4;i++) if((ntn[i].active>0)&&(i!=country)) { X if(count%14==0) { X offset+=40; X mvaddstr(2,40," BY YOU, TO YOU"); X count++; X } X mvprintw(count%14+2,offset, "%d. %s",i,ntn[i].name); X mvprintw(count%14+2,offset+14, "=> %s",*(diploname+ntn[country].dstatus[i])); X mvprintw(count%14+2,offset+28, "=> %s",*(diploname+ntn[i].dstatus[country])); X count++; X } X standout(); X mvaddstr(17,0,"HIT RETURN KEY TO CHANGE STATUS"); X mvprintw(18,0,"HIT 'B' KEY TO BRIBE WARING NPC NATION (%d GOLD/level)",BRIBE); X mvaddstr(19,0,"ANY OTHER KEY TO CONTINUE:"); X standend(); X refresh(); X k=getch(); X if((k!='\n')&&(k!='B')) { X if(isgod==1) country=0; X return; X } X if(k=='B'){ X if(ntn[country].tgold<=BRIBE){ X mvaddstr(21,0,"NOT ENOUGH GOLD"); X refresh(); X getch(); X return; X } X mvaddstr(20,0,"BRIBES WORK 50% (only the update will show)"); X mvaddstr(21,0,"WHAT NATION NUMBER:"); X refresh(); X echo(); X scanw("%hd",&nation); X noecho(); X if(ntn[country].active>=2){ X mvaddstr(22,0,"NOT NON PLAYER COUNTRY"); X refresh(); X getch(); X return; X } X if((nation<=0)||(nation>MAXNTN)){ X if(isgod==1) country=0; X return; X } X if((isgod!=1)&&((ntn[nation].dstatus[country]==ALLIED)||(ntn[nation].dstatus[country]==JIHAD)||(ntn[nation].dstatus[country]==CONFEDERACY))){ X mvaddstr(22,0,"CANT CHANGE THEIR STATUS"); X refresh(); X getch(); X return; X } X ntn[nation].dstatus[country]--; X ntn[country].tgold-=BRIBE; X ntn[nation].tgold+=BRIBE; X EADJDIP; X oldnat=country; X country=nation; X nation=oldnat; X fprintf(fexe,"NGOLD\t%hd \t%d \t%d \t0 \t0 \t%s\n",XNAGOLD ,country,ntn[country].tgold,"null"); X EADJDIP; X country=oldnat; X return; X } X mvaddstr(21,0,"WHAT NATION NUMBER:"); X refresh(); X echo(); X scanw("%hd",&nation); X if((nation<=0)||(nation>MAXNTN)){ X noecho(); X if(isgod==1) country=0; X return; X } X noecho(); X if((isgod==0)&&(((ntn[country].dstatus[nation]==CONFEDERACY)&&(ntn[nation].dstatus[country]<WAR))||(ntn[country].dstatus[nation]==JIHAD))) { X mvprintw(23,0,"SORRY, Can't change status on ntn %s -- hit return",ntn[nation].name); X refresh(); X getch(); X return; X } X else{ X clear(); X mvaddstr(0,0,"WHAT NEW STATUS"); X mvaddstr(2,0,"1) CONFEDERACY (irrevocable)"); X mvaddstr(3,0,"2) ALLIED"); X mvaddstr(4,0,"3) FRIENDLY"); X mvaddstr(5,0,"4) NEUTRAL"); X mvaddstr(6,0,"5) HOSTILE"); X mvaddstr(7,0,"6) WAR"); X mvaddstr(8,0,"7) JIHAD (irrevocable):"); X mvaddstr(12,0,"INPUT:"); X refresh(); X scanw("%hd",&temp); X if((temp<1)||(temp>7)){ X mvprintw(23,0,"SORRY, Invalid inputs -- hit return"); X refresh(); X getch(); X return; X } X ntn[country].dstatus[nation]=temp; X EADJDIP; X X /*prevent ron from being sneaky*/ X if((temp>HOSTILE)&&(ntn[nation].active>2)&&(ntn[nation].dstatus[country]<WAR)) { X olddip=ntn[nation].dstatus[country]; X oldnat=country; X country=nation; X nation=oldnat; X ntn[country].dstatus[nation]=WAR; X EADJDIP; X ntn[country].dstatus[nation]=olddip; X oldnat=country; X country=nation; X nation=oldnat; X } X else if((temp>HOSTILE)&&(ntn[nation].active==1)&&(ntn[nation].dstatus[country]<WAR)) { X if ((fp=fopen(MSGFILE,"a+"))==NULL) { X mvprintw(4,0,"error opening %s",MSGFILE); X refresh(); X getch(); X return; X } X fprintf(fp,"%s %s Declared war on you\n",ntn[nation].name,ntn[country].name); X fputs("END\n",fp); X fclose(fp); X } X } X } X} X Xchange() X{ X char string[10]; X int i; X short armynum; X char passwd[8]; X short isgod=0; X X if(country==0) { X isgod=1; X clear(); X mvaddstr(0,0,"SUPER USER; FOR WHAT NATION NUMBER:"); X refresh(); X echo(); X scanw("%hd",&country); X noecho(); X } X clear(); X mvaddstr(0,(COLS/2)-10,"NATION STATS SUMMARY"); X mvprintw(5,0,"1. nation name is %s ",ntn[country].name); X mvprintw(6,0,"2. password is XXXXXXXX"); X mvprintw(12,0,"capital loc: x is %d",ntn[country].capx); X mvprintw(13,0," y is %d",ntn[country].capy); X mvprintw(14,0,"leader is %s",ntn[country].leader); X mvprintw(15,0,"class is %s",*(Class+ntn[country].class)); X mvprintw(16,0,"nations mark is...%c ",ntn[country].mark); X for(i=1;i<8;i++) if(ntn[country].race==*(races+i)[0]) X mvprintw(17,0, "nation race is....%s ",*(races+i)); X mvprintw(18,0,"score currently...%d",ntn[country].score); X X mvprintw(4,(COLS/2), "attack bonus...........+%2d",ntn[country].aplus); X mvprintw(5,(COLS/2), "defense bonus..........+%2d",ntn[country].dplus); X mvprintw(6,(COLS/2), "maximum move rate.......%2d",ntn[country].maxmove); X mvprintw(7,(COLS/2), "reproduction rate......%2d%%",ntn[country].repro); X mvprintw(9,(COLS/2), "gold talons........$%5ld",ntn[country].tgold); X mvprintw(10,(COLS/2),"jewels ............$%5ld",ntn[country].jewels); X mvprintw(11,(COLS/2),"iron & minerals......%5ld",ntn[country].tiron); X if(ntn[country].tfood<2*ntn[country].tciv) standout(); X mvprintw(12,(COLS/2),"food in granary......%5ld",ntn[country].tfood); X standend(); X X mvprintw(13,(COLS/2),"total soldiers.......%5ld",ntn[country].tmil); X mvprintw(14,(COLS/2),"total civilians......%5ld",ntn[country].tciv); X mvprintw(15,(COLS/2),"total ships..........%5d",ntn[country].tships); X mvprintw(16,(COLS/2),"total sectors........%5d",ntn[country].tsctrs); X X standout(); X mvaddstr(19,(COLS/2)-9, "HIT ANY KEY TO CONTINUE"); X mvaddstr(20,(COLS/2)-15,"HIT 1 or 2 TO CHANGE NAME or PASSWD"); X mvaddstr(21,(COLS/2)-15,"HIT 3 TO CHANGE ADD TO COMBAT BONUS"); X if(isgod==1) mvaddstr(21,(COLS/2)-9,"HIT 4 TO DESTROY NATION"); X X standend(); X refresh(); X switch(getch()){ X case '1': /*get name*/ X clear(); X echo(); X mvaddstr(0,0,"what name would you like:"); X clrtoeol(); X refresh(); X scanw("%s",string); X if((strlen(string)<=1)||(strlen(string)>=10)){ X beep(); X mvaddstr(2,0,"invalid name--hit return"); X noecho(); X refresh(); X getch(); X if(isgod==1) country=0; X return; X } X /*check if already used*/ X else for(i=1;i<(country-1);i++){ X if((strcmp(ntn[i].name,string)==0)&&(i!=country)) { X mvaddstr(2,0,"name already used--hit return"); X beep(); X noecho(); X refresh(); X getch(); X if(isgod==1) country=0; X return; X } X } X strcpy(ntn[country].name,string); X noecho(); X ECHGNAME; X break; X case '2': /*change password */ X clear(); X if(isgod!=1){ X mvaddstr(0,0,"what is your current password:"); X refresh(); X scanw("%s",string); X strcpy(passwd,crypt(string,SALT)); X if((strncmp(passwd,ntn[0].passwd,PASSLTH)!=0)&&(strncmp(passwd,ntn[country].passwd,PASSLTH)!=0)){ X beep(); X mvaddstr(2,0,"invalid password--hit return"); X refresh(); X getch(); X if(isgod==1) country=0; X return; X } X } X mvaddstr(2,0,"what is your new password:"); X refresh(); X scanw("%s",string); X if((strlen(string)>8)||(strlen(string)<2)) { X beep(); X mvaddstr(2,0,"invalid new password--hit return"); X refresh(); X getch(); X if(isgod==1) country=0; X return; X } X mvaddstr(4,0,"reenter your new password:"); X refresh(); X scanw("%s",passwd); X if(strcmp(passwd,string)!=0) { X if(isgod==1) country=0; X return; X } X ECHGPAS; X strncpy(ntn[country].passwd,crypt(string,SALT),PASSLTH); X break; X case '3': X for(armynum=0;armynum<MAXARM;armynum++) if(ASOLD>0) i+=ASOLD; X if(i<1500) i=1500; X mvprintw(0,0,"DO YOU WISH SPEND %d IRON ON ATTACK (enter y or n):",IRONORE*i); X refresh(); X if(getch()=='y'){ X if(ntn[country].tiron>IRONORE*i){ X ntn[country].aplus+=1; X I_APLUS; X ntn[country].tiron-=IRONORE*i; X } X } X mvprintw(0,0,"DO YOU WISH SPEND %d IRON ON DEFENSE (enter y or n):",IRONORE*i); X refresh(); X if(getch()=='y'){ X if(ntn[country].tiron>IRONORE*i){ X ntn[country].dplus+=1; X I_DPLUS; X ntn[country].tiron-=IRONORE*i; X } X } X break; X case '4': X if(isgod==1){ X clear(); X mvaddstr(0,0,"DO YOU WANT TO DESTROY THIS NATION (y or n)"); X refresh(); X if(getch()=='y') destroy(); X } X break; X default: X if(isgod==1) country=0; X return; X } X if(isgod==1) country=0; X} X Xhelp() X{ X int lineno; X FILE *fp, *fopen(); X int done=0; X char line[80]; X X /*open .help file*/ X if ((fp=fopen(HELPFILE,"r"))==NULL) { X mvaddstr(0,0,"\nerror on read \n"); X refresh(); X getch(); X return; X } X X while(done==0){ X /*read in screen (until DONE statement)*/ X fgets(line,80,fp); X if(strncmp(line,"DONE",4)==0) done=1; X else { X clear(); X lineno=0; X while(strncmp(line,"END",3)!=0) { X mvaddstr(lineno,0,line); X lineno++; X if(lineno>LINES-3) strcpy(line,"END"); X else fgets(line,80,fp); X } X standout(); X mvaddstr(LINES-2,(COLS/2)-14,"HIT SPACE TO CONTINUE HELP SCREENS"); X mvaddstr(LINES-1,(COLS/2)-12,"TO END HELP HIT ANY OTHER KEY"); X standend(); X refresh(); X if(getch()!=' ') done=1; X } X } X fclose(fp); X} X Xnewspaper() X{ X int lineno; X FILE *fp, *fopen(); X int newpage,done; X short pagenum=1; X char line[80]; X char title[80]; X X clear(); X if ((fp=fopen(NEWSFILE,"r"))==NULL) { X mvaddstr(0,0,"error on read "); X refresh(); X getch(); X return; X } X X /*open and read one page */ X done=0; X newpage=0; X if(fgets(title,80,fp)==NULL) done=1; X while(done==0){ X if(newpage==0){ X clear(); X lineno=5; X newpage=1; X standout(); X mvprintw(0,20,"CONQUEST NEWS REPORT page %d",pagenum); X mvaddstr(1,23,"ALL THE NEWS THAT FITS"); X mvprintw(3,20,"%s",title+2); X standend(); X } X X if(fgets(line,80,fp)==NULL) done=1; X else { X if(line[1]!='.') { X strcpy(title,line); X newpage=0; X pagenum++; X } X else { X mvaddstr(lineno++,0,line+2); X if(todigit(line[0])!=pagenum) { X newpage=0; X pagenum=todigit(line[0]); X } X else if(lineno>LINES-3) newpage=0; X } X } X X if(newpage==0||done==1){ X standout(); X mvaddstr(LINES-2,(COLS/2)-13,"HIT ANY KEY TO CONTINUE"); X mvaddstr(LINES-1,(COLS/2)-12,"TO END NEWS HIT SPACE"); X standend(); X refresh(); X if(getch()==' ') done=1; X } X } X fclose(fp); X} END_OF_forms.c if test 12808 -ne `wc -c <forms.c`; then echo shar: \"forms.c\" unpacked with wrong size! fi # end of overwriting check fi if test -f header.h -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"header.h\" else echo shar: Extracting \"header.h\" \(12852 characters\) sed "s/^X//" >header.h <<'END_OF_header.h' X/*conquest is copyrighted 1986 by Ed Barlow.*/ X/* MODIFICATION OF THIS FILE IMPLIES THAT THE MODIFIER WILL ACCEPT X A LIMITED USE COPYRIGHT AS FOLLOWS: X X 1) This software is copyrighted and protected by law. The X sole owner of this software, which hereafter is known as X "conquest" is Edward M. Barlow, who hereby grants you a X personal, non-exclusive right to use this software. X 2) conquest may not be redistributed in any form. Any X requests for new software shall, for now, be the perogative X of the author. X 3) loss or damage caused by this software shall not be X the responsibility of the author. X 4) Ed Barlow shall be notified of modifications to this X software via electronic mail (mhuxd!smile) and, if there X is no response, via US mail to: X X Ed Barlow X 974 Delchester Rd X Newtown Sq. PA, 19073 X X 5) you agree to use your best efforts to see that any user X of conquest complies with the terms and conditions stated above. X*/ X X/*MODIFICATION IS REQUIRED OF THE FOLLOWING DEFINE STATEMENTS*/ X X/*file name definitions */ X#define EXEFILE "/c03/smile/private/mygame/lib/.execute" X#define DATAFILE "/c03/smile/private/mygame/lib/.data" X#define MSGFILE "/c03/smile/private/mygame/lib/.messages" X#define NPCSFILE "/c03/smile/private/mygame/lib/.nations" X#define HELPFILE "/c03/smile/private/mygame/lib/.help" X#define NEWSFILE "/c03/smile/private/mygame/lib/.news" X X#define OWNER "Ed Barlow" /*administrators name*/ X X/*MODIFICATION IS OPTIONAL ON THE FOLLOWING*/ X#define PWATER 55 /*percentage of water in the world*/ X X#define MAPX 48 /*Number of X Sectors on Map (divisible by 8 prefered)*/ X /* if you change see MAXX and MAXY*/ X#define MAPY 48 /*Number of Y Sectors on Map (divisible by 8 prefered)*/ X /* if you change see MAXX and MAXY*/ X/*the below three variables *must* be based on the above two*/ X/*MAXX=MAPX/8, MAXY=MAPY/8, NUMAREAS=MAXX*MAXY*/ X#define MAXX 6 /*Number of X areas on map*/ X#define MAXY 6 /*Number of Y areas on map*/ X#define NUMAREAS 36 /*total # areas, MAXX*MAXY*/ X X/*ALL THESE MUST BE COMMENTED OUT IF YOU WANT TO EXCLUDE THE C CODE*/ X#define LZARD 1 /*defined if lizard npc's exist at beginning*/ X#define MONSTER 1 /*defined if pirates/barbarians/nomads exist*/ X#define NPC 1 /*defined if non player country exists at beginning*/ X#define CMOVE 1 /*Comment this line out if you do not wish the computer X to move Player nations if they forget to move*/ X#define SYS5 1 /*comment this line out if on a BSD system*/ X /*--not that it does anything at the moment*/ X X#define MAXNTN 28 /*number of nations (including unowned & npc ntns)*/ X /*but not including pirates...*/ X#define NTOTAL 32 /*MAXNTN+4*/ X#define NLIZARD 28 /*MAXNTN+0*/ X#define NNOMAD 29 /*MAXNTN+1*/ X#define NBARBARIAN 30 /*MAXNTN+2*/ X#define NPIRATE 31 /*MAXNTN+3*/ X X#define LANDSEE 2 /*how far you can see on land, by armies, by navies*/ X#define NAVYSEE 1 /*making these numbers large takes CPU time*/ X#define ARMYSEE 2 X X/*Below taxation rates are in thousand dollars (US 1985) per 100 humans per X *point of whatever -- ie 1 person in veg of 9 means produce $70x9=630K X *thousand dollars */ X X#define TAXDEFAULT 5555 /*percent taxes*/ X#define TAXFOOD 100 X#define TAXIRON 100 X#define TAXGOLD 100 X/*city and capital tax rates based on people only (no multipleier)*/ X#define TAXCAP 1000 X#define TAXCITY 750 X X#define SHIPMAINT 1000 /*ship mainatinance cost*/ X#define SOLDMAINT 40 /*soldier mainatinance cost*/ X X#define DESCOST 300 /*cost to redesignatie*/ X /*this is also the iron cost for cities*/ X#define FORTCOST 1000 /*cost to build a fort point*/ X#define ENLISTCOST 90 /*cost to enlist one troop*/ X#define WARSHPCOST 3000 /*cost to build one warship*/ X#define MERSHPCOST 2000 /*cost to build one merchant*/ X X#define SHIPHOLD 300 /*number of humans a ship can hold*/ X X#define MAXPTS 30 /*points to buy stuff with*/ X#define SECTSCORE 1 /*SECTSCORE points per sector*/ X#define CITYLIMIT 8 /*% of ntns people in sector before => city*/ X X#define MAXARM 32 /*maximum number of armies per nation*/ X#define MAXNAVY 16 /*maximum number of fleets per nation*/ X#define MILRATIO 5 /*ratio mil:civ for non player countries*/ X#define MILINCAP 5 /*ratio (mil in cap):mil for NPCs*/ X X#define JWL_MGK 100000L /*jewels needed to use magic*/ X#define BRIBE 100000L /*amount of gold to bribe one level*/ X#define IRONORE 7 /*iron per soldier needed for +1% weapons%/ X X X/*-----------------DO NOT ALTER BELOW THIS LINE-------------------*/ X X#include <curses.h> X#define VERSION 1 /*version number of the game*/ X#define FLAT 1 /*1 if world is flat 0 if round*/ X X/*simple contour map definitions*/ X#define WATER '~' X#define PEAK '#' X#define MOUNTAIN '^' X#define HILL '%' X#define CLEAR '-' X X/*racial types*/ X#define GOD '-' X#define ORC 'O' X#define ELF 'E' X#define DWARF 'D' X#define LIZARD 'L' X#define HUMAN 'H' X#define PIRATE 'P' X#define BARBARIAN 'B' X#define NOMAD 'N' X#define UNKNOWN '?' X X/*designations*/ X#define DCITY 'c' X#define DCAPITOL 'C' X#define DMINE 'm' X#define DFARM 'f' X#define DDEVASTATED 'x' X#define DGOLDMINE '$' X#define DCASTLE '!' X#define DNODESIG '-' X X#define GREAT 'G' X#define FAIR 'F' X#define RANDOM 'R' X#define OOPS 'X' X X/*vegitation types -- these are legal in designations too*/ X#define VOLCANO 'V' X#define DESERT 'D' X#define WASTE 'W' X#define BARREN '4' X#define LT_VEG '6' X#define GOOD '9' X#define WOOD '7' X#define FORREST '3' X#define JUNGLE 'J' X#define SWAMP 'S' X#define ICE 'I' X#define NONE '~' X X/*Diplomacy Variables*/ X#define JIHAD 7 X#define WAR 6 X#define HOSTILE 5 X#define NEUTRAL 4 X#define FRIENDLY 3 X#define ALLIED 2 X#define CONFEDERACY 1 X#define UNMET 0 X X/*army status*/ X# define MARCH 1 /*March */ X# define SCOUT 2 /*Scouting--will not engage enemy if possible*/ X# define ATTACK 3 /*Attack anybody (Hostile+) within 2 sectors*/ X# define DEFEND 4 /*Defend */ X# define GARRISON 5 /*Garrison--for a city or Capital*/ X X Xstruct s_sector X{ X char designation;/*designation of sector*/ X char altitude; /*sector altitude */ X char vegitation; /*sector vegitation */ X short owner; /*nation id of owner, MAXNTN+? is SPECIAL*/ X int people; /*civilians in sector*/ X short gold; /*gold production ability*/ X short fortress; /*fortification level (0 to 9)*/ X short iron; /*amount of iron produced by sector*/ X}; X#define XREAL xcurs+xoffset X#define YREAL ycurs+yoffset X#define SOWN sct[xcurs+xoffset][ycurs+yoffset].owner X Xstruct navy X{ X short warships; X short merchant; X short xloc; X short yloc; X short smove; X}; X Xstruct army X{ X short xloc; X short yloc; X short smove; X short sold; X short stat; X}; X Xstruct nation /* player nation stats */ X { X char name[10];/* name */ X char passwd[8];/* password */ X char leader[10];/* leader title */ X char race; /* national race (integer--see header.h)*/ X short class; /* national class*/ X/*location could be easily changed out*/ X char location;/* location variable gfr */ X char mark; /* unique mark for nation*/ X short capx; /* capital x coord */ X short capy; /* capital y coord */ X short active; /* activity level of nation, but I am not sure if X i have used this variable consistently: X 1 if PC NATION, X 2+Aggressiveness if NPC, X 0 if inactive, X 999 to represents MONSTER (pirate...)*/ X short aplus; /* attack plus of all soldiers*/ X short dplus; /* attack plus of all soldiers*/ X short maxmove; /* maximum movement of soldiers*/ X short repro; /* reproduction rate of nation*/ X short score; /* score */ X int tgold; /* gold in treasury */ X int jewels; /* raw amount of gold in treasury */ X int tmil; /* total military */ X int tciv; /* total civilians */ X int tiron; /* total real iron in nation*/ X int tfood; /* total food in nation*/ X long powers; X short tsctrs; /* total number sectors */ X short tships; /* number warships */ X struct army arm[MAXARM]; X struct navy nvy[MAXNAVY]; X short dstatus[MAXNTN+4]; /*diplomatic status*/ X}; X X#define AXLOC ntn[country].arm[armynum].xloc X#define AYLOC ntn[country].arm[armynum].yloc X#define AMOVE ntn[country].arm[armynum].smove X#define ASOLD ntn[country].arm[armynum].sold X#define ASTAT ntn[country].arm[armynum].stat X#define NWAR ntn[country].nvy[nvynum].warships X#define NMER ntn[country].nvy[nvynum].merchant X#define NXLOC ntn[country].nvy[nvynum].xloc X#define NYLOC ntn[country].nvy[nvynum].yloc X#define NMOVE ntn[country].nvy[nvynum].smove X Xextern struct s_sector sct[MAPX][MAPY]; Xextern struct nation ntn[MAXNTN+4]; Xextern short movecost[MAPX][MAPY]; X X/*Movement costs*/ Xextern char *ele; Xextern char *veg; Xextern char *numbers; Xextern char *races[]; Xextern char *Class[]; Xextern char *vegname[]; Xextern char *diploname[]; Xextern char *soldname[]; X X#define AORN 0 X#define ARMY 1 X#define NAVY 2 X X#define XASTAT 1 X#define XAMEN 2 X#define XALOC 4 X#define XNLOC 5 X#define XNASHP 6 X#define XECNAME 8 X#define XECPAS 9 X#define XECMARK 10 X#define XSADES 11 X#define XSACIV 12 X#define XSIFORT 13 X#define XNAGOLD 14 X#define XAMOV 15 X#define XNMOV 16 X#define XSAOWN 17 X#define EDADJ 18 X#define XNARGOLD 19 X#define XNAIRON 20 X#define INCAPLUS 22 X#define INCDPLUS 23 X#define CHG_MGK 24 X X#define CHGMGK fprintf(fexe,"MAGIC \t%d \t%hd \t%d \t%d \t0 \t%s\n",CHG_MGK,country,ntn[country].powers,x,"null") X#define I_APLUS fprintf(fexe,"INC_APLUS \t%d \t%hd \t0 \t0 \t0 \t%s\n",INCAPLUS,country,"null") X#define I_DPLUS fprintf(fexe,"INC_DPLUS \t%d \t%hd \t0 \t0 \t0 \t%s\n",INCDPLUS,country,"null") X#define AADJSTAT fprintf(fexe,"A_STAT \t%d \t%hd \t%d \t%d \t0 \t%s\n",XASTAT,country,armynum,ntn[country].arm[armynum].stat,"null") X#define AADJMEN fprintf(fexe,"A_MEN \t%d \t%hd \t%d \t%d \t0 \t%s\n",XAMEN ,country,armynum,ntn[country].arm[armynum].sold,"null") X#define NADJSHP fprintf(fexe,"N_ASHP \t%d \t%hd \t%d \t%d \t%d \t%s\n",XNASHP ,country,nvynum,ntn[country].nvy[nvynum].merchant,ntn[country].nvy[nvynum].warships,"null" ) X#define AADJLOC fprintf(fexe,"A_LOC \t%d \t%hd \t%d \t%d \t%d \t%s\n",XALOC ,country,armynum,ntn[country].arm[armynum].xloc,ntn[country].arm[armynum].yloc,"null") X#define NADJLOC fprintf(fexe,"N_LOC \t%d \t%hd \t%d \t%d \t%d \t%s\n",XNLOC ,country,nvynum,ntn[country].nvy[nvynum].xloc,ntn[country].nvy[nvynum].yloc ,"null") X#define AADJMOV fprintf(fexe,"A_MOV \t%d \t%hd \t%d \t%d \t0 \t%s\n",XAMOV ,country,armynum,ntn[country].arm[armynum].smove,"null") X#define NADJMOV fprintf(fexe,"N_MOV \t%d \t%hd \t%d \t%d \t0 \t%s\n",XNMOV ,country,nvynum,ntn[country].nvy[nvynum].smove,"null") X#define ECHGNAME fprintf(fexe,"E_CNAME \t%d \t%hd \t0 \t0 \t0 \t%s\n",XECNAME ,country,ntn[country].name) X#define ECHGPAS fprintf(fexe,"E_CPAS \t%d \t%hd \t0 \t0 \t0 \t%s\n",XECPAS ,country,crypt(string,SALT)) X#define SADJDES fprintf(fexe,"S_ADES \t%d \t%hd \t0 \t%d \t%d \t%c\n",XSADES ,country,xcurs+xoffset,ycurs+yoffset,sct[xcurs+xoffset][ycurs+yoffset].designation) X#define SADJDES2 fprintf(fexe,"S_ADES \t%d \t%hd \t0 \t%d \t%d \t%c\n",XSADES ,country,x,y,sct[x][y].designation) X#define SADJCIV2 fprintf(fexe,"S_ACIV \t%d \t%hd \t%d \t%d \t%d \t%s\n",XSACIV ,country,sct[i][j].people,i,j,"null") X#define SADJCIV fprintf(fexe,"S_ACIV \t%d \t%hd \t%d \t%d \t%d \t%s\n",XSACIV ,country,sct[xcurs+xoffset][ycurs+yoffset].people,xcurs+xoffset,ycurs+yoffset,"null") X#define INCFORT fprintf(fexe,"SIFORT \t%d \t%hd \t0 \t%d \t%d \t%s\n",XSIFORT ,country,xcurs+xoffset,ycurs+yoffset,"null") X#define SADJOWN fprintf(fexe,"S_AOWN \t%d \t%hd \t0 \t%d \t%d \t%s\n",XSAOWN ,country,xcurs+xoffset,ycurs+yoffset,"null") X#define EADJDIP fprintf(fexe,"E_ADJ \t%d \t%hd \t%d \t%d \t0 \t%s\n",EDADJ,country,nation,ntn[country].dstatus[nation],"null") X X#define WARRIOR 2 X#define CAPTAIN 3 X#define WARLORD 5 X#define MI_MONST 7 X#define AV_MONST 11 X#define MA_MONST 13 X#define SPY 17 X#define KNOWALL 19 X#define DERVISH 23 X/*I CAN CHANGE DESTROYER TO NON PRIME NUMBER IN NEXT GAME*/ X#define DESTROYER 29 X#define HIDDEN 31 X#define THE_VOID 37 X#define ARCHITECT 41 X#define VAMPIRE 43 X#define HEALER 47 X#define MINER 53 X#define URBAN 59 X#define STEEL 61 X#define ARCHER 67 X#define CAVALRY 71 X#define BREEDER 73 X#define MAXPOWER 73 /*maximum power*/ X X#define NPCPOWERS 9 /*maximum number of powers for NPC*/ X#define PCPOWERS 5 /*maximum number of powers for PC */ X X/*my first macro: which will return 1 if the nation has that power*/ X#define magic(NATION,POWER) !(ntn[NATION].powers%(POWER)) X X#define beep() putchar('') X X#define FOODTHRESH 3 X#define GOLDTHRESH 10 X#define JEWELTHRESH 10 X X#define SALT "aa" X#define PASSLTH 7 X X/*intialize subroutine types*/ Xchar *crypt(); Xvoid exit(); Xint rand(); X Xextern char *strcpy(), *strncpy(), *strcat(), *strncat(); X END_OF_header.h if test 12852 -ne `wc -c <header.h`; then echo shar: \"header.h\" unpacked with wrong size! fi # end of overwriting check fi if test -f io.c -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"io.c\" else echo shar: Extracting \"io.c\" \(10550 characters\) sed "s/^X//" >io.c <<'END_OF_io.c' X/*io.c*/ X/*Print and io subroutines for game*/ X X/*conquest is copyrighted 1986 by Ed Barlow. X * I spent a long time writing this code & I hope that you respect this. X * I give permission to alter the code, but not to copy or redistribute X * it without my explicit permission. If you alter the code, X * please document changes and send me a copy, so all can have it. X * This code, to the best of my knowledge works well, but it is my first X * 'C' program and should be treated as such. I disclaim any X * responsibility for the codes actions (use at your own risk). I guess X * I am saying "Happy gaming", and am trying not to get sued in the process. X * Ed X */ X X/*include files*/ X#include <ctype.h> X#include "header.h" X X/*Declarations*/ Xextern struct s_sector sct[MAPX][MAPY]; Xextern struct nation ntn[NTOTAL]; /* player nation stats */ X/*is sector occupied by an army?*/ Xextern short occ[MAPX][MAPY]; X X/*offset of upper left hand corner*/ Xextern short xoffset; Xextern short yoffset; X/*current cursor postion (relative to 00 in upper corner)*/ X/* position is 2*x,y*/ Xextern short xcurs; Xextern short ycurs; X/*redraw map in this turn if redraw is a 1*/ Xextern short redraw; X/*display state*/ Xextern short hilmode; /*highlight modes: 0=owned sectors, 1= armies, 2=none*/ Xextern short dismode; /*display mode: 1=vegitation, 2=desig, 3=contour*/ X/* 4=armies/navies, 5=commodities, 6=fertility, 7=movement*/ X/* nation id of owner*/ Xextern short country; X X/*print a sector.altitude map subroutine*/ Xprintele() X{ X register int X, Y; X printf("doing print of altitude\n"); X for(Y=0;Y<MAPY;Y++) { X for(X=0;X<MAPX;X++) putc(sct[X][Y].altitude,stdout); X putc('\n',stdout); X } X} X Xpr_ntns() X{ X register int X, Y; X printf("doing print of nations\n"); X for(Y=0;Y<MAPY;Y++) { X for(X=0;X<MAPX;X++) { X if(sct[X][Y].owner==0) X putc(sct[X][Y].altitude,stdout); X else putc(ntn[sct[X][Y].owner].mark,stdout); X } X putc('\n',stdout); X } X} X X/*print all data--trashes/creates datafile in the process*/ Xwritedata() X{ X int fd; X printf("\ndoing write of data\n"); X if((fd = creat(DATAFILE,0666))==-1) { X printf("cant open data. check permissions\n"); X return; X } X write(fd,sct,sizeof(sct)); X write(fd,ntn,sizeof(ntn)); X close(fd); X} X Xreaddata() X{ X int fd; X int n_read; X /*read in existing nation army and navy data*/ X /*check if file openable*/ X printf("reading data file\n"); X fd=open(DATAFILE,0); X if((n_read=read(fd,sct,sizeof(sct)))==0) printf("EOF\n"); X else if(n_read==-1) printf("error reading sector data (sct)\n"); X if(n_read!=sizeof(sct)) { X printf("wrong data format\n"); X exit(1); X } X if((n_read=read(fd,ntn,sizeof(ntn)))==0) printf("EOF\n"); X else if(n_read==-1) printf("error reading nation data (ntn)\n"); X if(n_read!=sizeof(ntn)) { X printf("wrong data format\n"); X exit(1); X } X close(fd); X} X X/*print a map subroutine*/ Xprintveg() X{ X register int X, Y; X printf("doing print of vegitation\n"); X for(Y=0;Y<MAPY;Y++) { X for(X=0;X<MAPX;X++) putc(sct[X][Y].vegitation,stdout); X putc('\n',stdout); X } X} X X/*make a map*/ Xmakemap() X{ X register int x,y; X register int i,j; X short armynum,nvynum; X X /*can you see all?*/ X if((magic(country,KNOWALL)==1)||(country==0)) { X for(x=0;x<(COLS-21)/2;x++) { X for(y=0;y<(LINES-4);y++) { X highlight(x,y); X see(x,y); X } X } X if((hilmode==1)||(hilmode==4)||(hilmode==3)) { X for(armynum=0;armynum<MAXARM;armynum++) X if((ASOLD>0)&&((AMOVE>0)||(hilmode!=4))){ X standout(); X see(AXLOC-xoffset,AYLOC-yoffset); X } X } X } X /*see as appropriate?*/ X else { X for(x=0;x<(COLS-21)/2;x++) for(y=0;y<(LINES-4);y++) { X if(sct[x+xoffset][y+yoffset].owner==country){ X for(i=x-LANDSEE;i<=x+LANDSEE;i++){ X for(j=y-LANDSEE;j<=y+LANDSEE;j++) { X highlight(i,j); X see(i,j); X } X } X } X } X for(nvynum=0;nvynum<MAXNAVY;nvynum++) if(NMER+NWAR>0){ X for(i=NXLOC-xoffset-NAVYSEE;i<=NXLOC-xoffset+NAVYSEE;i++) for(j=NYLOC-yoffset-NAVYSEE;j<=NYLOC-yoffset+NAVYSEE;j++){ X highlight(i,j); X see(i,j); X } X } X for(armynum=0;armynum<MAXARM;armynum++) if(ASOLD>0){ X for(i=AXLOC-xoffset-ARMYSEE;i<=AXLOC-xoffset+ARMYSEE;i++) for(j=AYLOC-yoffset-ARMYSEE;j<=AYLOC-yoffset+ARMYSEE;j++) { X highlight(i,j); X see(i,j); X } X } X /*optimal method of highlighting your armies*/ X if((hilmode==3)||(hilmode==4)) { X for(armynum=0;armynum<MAXARM;armynum++) X if((ASOLD>0)&&((AMOVE>0)||(hilmode==3))){ X standout(); X see(AXLOC-xoffset,AYLOC-yoffset); X } X for(nvynum=0;nvynum<MAXNAVY;nvynum++) X if((NWAR+NMER>0)&&((NMOVE>0)||(hilmode==3))){ X standout(); X see(NXLOC-xoffset,NYLOC-yoffset); X } X } X } X move(ycurs,2*xcurs); X} X Xnewdisplay() X{ X mvaddstr(LINES-4,0,"viewing options: (d)esignation, (r)ace, (m)ove cost, (p)eople, (D)efense"); X clrtoeol(); X mvaddstr(LINES-3,0," (c)ontour, (v)egitation, (i)ron, (n)ation mark, (g)old"); X clrtoeol(); X mvaddstr(LINES-2,0,"highlight option: (o)wners, (a)rmy, (y)our Army, (M)ove left, (x)=none"); X clrtoeol(); X standout(); X mvaddstr(LINES-1,0,"what display?:"); X clrtoeol(); X move(LINES-1,16); X standend(); X refresh(); X redraw=TRUE; X switch(getch()) { X case 'v': /* vegetation map*/ X dismode=1; X break; X case 'd': /* designations map*/ X dismode=2; X break; X case 'c': /* contour map of world */ X dismode=3; X break; X case 'n': /* nations map*/ X dismode=4; X break; X case 'r': /* race map*/ X dismode=5; X break; X case 'm': /* move cost map*/ X dismode=7; X break; X case 'D': X dismode=8; X break; X case 'p': X dismode=9; X break; X case 'g': X dismode=10; X break; X case 'i': X dismode=11; X break; X case 'a': /* armies hilighted map*/ X prep(); X hilmode=1; X break; X case 'o': /* owners hilighted map*/ X hilmode=0; X break; X case 'x': /*no highlighting*/ X hilmode=2; X break; X case 'y': /* your armies hilighted map*/ X prep(); X hilmode=3; X break; X case 'M': /* your armies with moves left hilighted map*/ X prep(); X hilmode=4; X break; X default: X beep(); X redraw=FALSE; X } X makebottom(); X} X X/*see what is in xy as per display mode*/ Xsee(x,y) X{ X int armbonus; X if((x<0)||(y<0)||(x>COLS-21)||(y>=LINES-4)) return; X if(((y+yoffset)<MAPY)&&((x+xoffset)<MAPX)) { X X if((dismode>7)&&(country!=sct[x+xoffset][y+yoffset].owner)&&(magic(sct[x+xoffset][y+yoffset].owner,THE_VOID)==1)&&(country!=0)) { X standout(); X mvaddch(y,2*x,' '); X standend(); X } X else { X switch(dismode){ X case 1: /*vegitation*/ X mvaddch(y,2*x,sct[x+xoffset][y+yoffset].vegitation); X break; X case 2: /*designation*/ X if(sct[x+xoffset][y+yoffset].owner==0){ X if(isdigit(sct[x+xoffset][y+yoffset].vegitation)!=0) mvaddch(y,2*x,sct[x+xoffset][y+yoffset].altitude); X else mvaddch(y,2*x,sct[x+xoffset][y+yoffset].vegitation); X } X else if((country==0)||(sct[x+xoffset][y+yoffset].owner==country)) mvaddch(y,2*x,sct[x+xoffset][y+yoffset].designation); X else mvaddch(y,2*x,ntn[sct[x+xoffset][y+yoffset].owner].mark); X break; X case 3: /*contour*/ X mvaddch(y,2*x,sct[x+xoffset][y+yoffset].altitude); X break; X case 4: /*ownership*/ X if(sct[x+xoffset][y+yoffset].owner==0) X mvaddch(y,2*x,sct[x+xoffset][y+yoffset].altitude); X else mvaddch(y,2*x,ntn[sct[x+xoffset][y+yoffset].owner].mark); X break; X case 5: /*race*/ X if(sct[x+xoffset][y+yoffset].owner==0) X mvaddch(y,2*x,sct[x+xoffset][y+yoffset].altitude); X else mvaddch(y,2*x,ntn[sct[x+xoffset][y+yoffset].owner].race); X break; X case 7: /*movement cost map*/ X if(movecost[x+xoffset][y+yoffset]>=0) mvprintw(y,2*x,"%d",movecost[x+xoffset][y+yoffset]); X else if(sct[x+xoffset][y+yoffset].altitude==WATER) X mvaddch(y,2*x,'~'); X else X mvaddch(y,2*x,'X'); X break; X case 8: /*Defence*/ X if (sct[x+xoffset][y+yoffset].altitude==WATER) X mvaddch(y,2*x,'~'); X else if (movecost[x+xoffset][y+yoffset]<0) X mvaddch(y,2*x,'*'); X else { X X /*Racial combat bonus due to terrain (the faster you move the better)*/ X armbonus=0; X armbonus+=5*(9-movecost[x+xoffset][y+yoffset]); X X if(sct[x+xoffset][y+yoffset].altitude==MOUNTAIN) armbonus+=40; X else if(sct[x+xoffset][y+yoffset].altitude==HILL) armbonus+=20; X X if(sct[x+xoffset][y+yoffset].vegitation==JUNGLE) X armbonus+=30; X else if(sct[x+xoffset][y+yoffset].vegitation==FORREST) X armbonus+=20; X else if(sct[x+xoffset][y+yoffset].vegitation==WOOD) X armbonus+=10; X X if((sct[x+xoffset][y+yoffset].designation==DCASTLE)||(sct[x+xoffset][y+yoffset].designation==DCITY)||(sct[x+xoffset][y+yoffset].designation==DCAPITOL)) X armbonus+=8*sct[x+xoffset][y+yoffset].fortress; X X mvprintw(y,2*x,"%d",armbonus/20); X } X break; X case 9: /*People*/ X if (sct[x+xoffset][y+yoffset].altitude==WATER) X mvaddch(y,2*x,'~'); X else if (sct[x+xoffset][y+yoffset].people>=1000) X mvaddch(y,2*x,'+'); X else if (sct[x+xoffset][y+yoffset].people>=450) X mvaddch(y,2*x,'>'); X else if (sct[x+xoffset][y+yoffset].people==0) X mvaddch(y,2*x,'0'); X else X mvprintw(y,2*x,"%d",1+sct[x+xoffset][y+yoffset].people/50); X break; X case 10: /*Gold*/ X if (sct[x+xoffset][y+yoffset].altitude==WATER) X mvaddch(y,2*x,'~'); X else if(isdigit(sct[x+xoffset][y+yoffset].vegitation)==0) X mvaddch(y,2*x,'X'); X else if((sct[x+xoffset][y+yoffset].owner!=0)&&(sct[x+xoffset][y+yoffset].owner!=country)) X mvaddch(y,2*x,'?'); X else if(sct[x+xoffset][y+yoffset].gold>=10) X mvaddch(y,2*x,'+'); X else X mvprintw(y,2*x,"%d",sct[x+xoffset][y+yoffset].gold); X break; X case 11: /*Iron*/ X if (sct[x+xoffset][y+yoffset].altitude==WATER) X mvaddch(y,2*x,'~'); X else if(isdigit(sct[x+xoffset][y+yoffset].vegitation)==0) X mvaddch(y,2*x,'X'); X else if((sct[x+xoffset][y+yoffset].owner!=0)&&(sct[x+xoffset][y+yoffset].owner!=country)) X mvaddch(y,2*x,'?'); X else if (sct[x+xoffset][y+yoffset].iron>=10) X mvaddch(y,2*x,'+'); X else X mvprintw(y,2*x,"%d",sct[x+xoffset][y+yoffset].iron); X break; X default: X break; X } X } X } X else mvaddch(y,2*x,' '); X standend(); X} X X/*highlight what is in xy as per highlight mode*/ Xhighlight(x,y) X{ X if((x<0)||(y<0)||(x>COLS-21)||(y>=LINES-4)) return; X if(((y+yoffset)<MAPY)&&((x+xoffset)<MAPX)) { X switch(hilmode){ X case 0: /*ownership*/ X if(country==0) { X if(sct[x+xoffset][y+yoffset].owner>0) X standout(); X } X else if(sct[x+xoffset][y+yoffset].owner==country) X standout(); X break; X case 1: /*army map*/ X if(occ[x+xoffset][y+yoffset]!=0) standout(); X break; X default: X break; X } X } X} END_OF_io.c if test 10550 -ne `wc -c <io.c`; then echo shar: \"io.c\" unpacked with wrong size! fi # end of overwriting check fi echo shar: End of archive 5 \(of 5\). cp /dev/null ark5isdone MISSING="" for I in 1 2 3 4 5 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 5 archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0