billr@saab.CNA.TEK.COM (Bill Randle) (02/02/90)
Submitted-by: Adam Bryant <adb@cs.bu.edu>
Posting-number: Volume 8, Issue 84
Archive-name: conquer4/Patch8
Patch-To: conquer4: Volume 6, Issue 83-96
[[Well, remember when I said I wouldn't be sending out any
more patches for conquer version 4? Guess, what? I lied!
This one is short, though, and is used to fix any a few
bugs. [Although two of them were major, thus the need to
fix them]
The patch fixes:
- memory leak in move_people() at end of update.c
- redrawing/recentering of screen when at edge of map
- troop combination problems
- unique monster/leader names. [woppidy doo!]
- and a few other tidbits.
Hopefully, this should fix those major bugs that I was
told about and keep people happy until version 5.0 comes
out. [I estimate a month or so before I begin beta testing
and then a couple of months after that for the official
5.0 posting to comp.sources.games. So, hopefully it will
be released by/during this summer]
Enjoy,
adam]]
#! /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 shell archive."
# Contents: patches08
# Wrapped by billr@saab on Thu Feb 1 09:24:55 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patches08' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'patches08'\"
else
echo shar: Extracting \"'patches08'\" \(30045 characters\)
sed "s/^X//" >'patches08' <<'END_OF_FILE'
X*** opatchlevel.h Wed Jan 31 20:58:16 1990
X--- patchlevel.h Wed Jan 31 20:58:24 1990
X***************
X*** 1 ****
X! #define PATCHLEVEL 7
X--- 1 ----
X! #define PATCHLEVEL 8
X*** onotes.v4 Wed Jan 31 20:58:16 1990
X--- notes.v4 Wed Jan 31 20:58:25 1990
X***************
X*** 283,294 ****
X 227. misc.c[498]: fixed overflow on gold scoring [Kenneth J Dalka]
X 228. adjusted inflation calculation in update.c and reports.c.
X 229. added the inflation estimation to the budget report.
X! 230. fixed bug with division of charity by population. [Dave F.]
X 231. prevent passage of fleets through hostile cities.
X 232. added some checks in npc.c for ownership in drafting in some sectors.
X 233. removed destruction of troops on peaks, now that flight is possible.
X 234. changed to min zero in attractiveness, now drift will no longer occur
X for sectors with "zero" attractiveness. [Dave F.]
X
X -------------------------------------------------------------------------
X | 2.0 POSSIBLE SHORT-TERM ENHANCEMENTS/FIXES FOR CONQUER V5 |
X--- 283,319 ----
X 227. misc.c[498]: fixed overflow on gold scoring [Kenneth J Dalka]
X 228. adjusted inflation calculation in update.c and reports.c.
X 229. added the inflation estimation to the budget report.
X! 230. fixed bug with division of charity by population. [Charles C. Fu]
X 231. prevent passage of fleets through hostile cities.
X 232. added some checks in npc.c for ownership in drafting in some sectors.
X 233. removed destruction of troops on peaks, now that flight is possible.
X 234. changed to min zero in attractiveness, now drift will no longer occur
X for sectors with "zero" attractiveness. [Dave F.]
X+ ===4.0 patch number seven released => 4.7 ===============================
X+ 235. update.c[1327]: "ispc(country)" => "ispc(curntn->active)"
X+ 236. added a note to README and fixed credit in notes.v4 file.
X+ 237. made sure npcs do not change scout status.
X+ 238. fixed bug with include files in check.c. [J. Bayer]
X+ 239. update.c[1073]: declare items as unsigned char [Rodney Orr]
X+ 240. update.c[1541]: rewrote move_people() routine to avoid memory leak
X+ and to use only 5 / MAPX as much memory.
X+ 241. adjusted casting in propuction screen for food consumption.
X+ 242. trade.c: added check for unexpected end of file in trade [R. Orr]
X+ 243. newlogin.c: removed the check() in the routine.
X+ 244. added news notification during update if npc/pc mode is changed.
X+ 245. removed useless ifdef REMAKE statement in admin.c.
X+ 246. added check for edge of screen unnecessarily redrawing.
X+ 247. added check for motion beyond edge of screen.
X+ 248. added stoppage for going beyond map edges.
X+ 249. checked for invalid reads of commerce file in trade.c.
X+ 250. changed float casting back to longs at line 1052 of update.c.
X+ 251. did the same for the calculations in function budget() of report.c.
X+ 252. fixed display.c designation to show tofood(sctptr, country).
X+ 253. made Dragyn the nation leader name and Dragon the monster name.
X+ 254. restricted marching troops from being grouped. (could get into
X+ defend mode this way; even when they had marched too far).
X+ 255. allow recombination of troops with same status and same type
X+ unless the type is TRADED or ON_BOARD.
X
X -------------------------------------------------------------------------
X | 2.0 POSSIBLE SHORT-TERM ENHANCEMENTS/FIXES FOR CONQUER V5 |
X*** oadmin.c Wed Jan 31 20:58:14 1990
X--- admin.c Wed Jan 31 20:58:26 1990
X***************
X*** 204,212 ****
X printf(".\n");
X exit(FAIL);
X }
X- #ifdef REMAKE
X remake=TRUE;
X- #endif /*REMAKE*/
X printf("************* WARNING!!!! *******************\n\n");
X printf(" There is already a game in progress.\n\n");
X printf("*********************************************\n\n");
X--- 204,210 ----
X***************
X*** 227,233 ****
X }
X #else
X /* check for god permissions */
X! if(realuser!=(getpwnam(LOGIN)->pw_uid)) {
X printf("Sorry -- you can not create a world\n");
X printf("you need to be logged in as %s.\n",LOGIN);
X exit(FAIL);
X--- 225,231 ----
X }
X #else
X /* check for god permissions */
X! if(realuser!=(getpwnam(LOGIN))->pw_uid) {
X printf("Sorry -- you can not create a world\n");
X printf("you need to be logged in as %s.\n",LOGIN);
X exit(FAIL);
X*** oextcmds.c Wed Jan 31 20:58:14 1990
X--- extcmds.c Wed Jan 31 20:58:26 1990
X***************
X*** 113,122 ****
X {
X int nocomb_stat();
X
X! if (armynum < 0 || armynum >= MAXARM ||
X! army2 < 0 || army2 >= MAXARM ||
X! armynum == army2 ||
X! (nocomb_stat(P_ASTAT) == TRUE) ||
X (nocomb_stat(curntn->arm[army2].stat) == TRUE) ||
X curntn->arm[army2].stat == SIEGE || /* may not jump out */
X curntn->arm[army2].stat == SORTIE || /* of these statuses */
X--- 113,129 ----
X {
X int nocomb_stat();
X
X! if (armynum < 0 || armynum >= MAXARM
X! || army2 < 0 || army2 >= MAXARM || P_ASOLD == 0
X! || curntn->arm[army2].sold == 0) {
X! errormsg("Selected unit doesn't exist");
X! return;
X! }
X! if (P_ASTAT != curntn->arm[army2].stat
X! || P_ATYPE != curntn->arm[army2].unittyp
X! || P_ATYPE >= MINLEADER
X! || P_ASTAT == ONBOARD || P_ASTAT == TRADED) {
X! if ((nocomb_stat(P_ASTAT) == TRUE) ||
X (nocomb_stat(curntn->arm[army2].stat) == TRUE) ||
X curntn->arm[army2].stat == SIEGE || /* may not jump out */
X curntn->arm[army2].stat == SORTIE || /* of these statuses */
X***************
X*** 124,129 ****
X--- 131,137 ----
X P_ATYPE!=curntn->arm[army2].unittyp) {
X errormsg("Selected armies not legal");
X return;
X+ }
X }
X if((curntn->arm[army2].xloc!=P_AXLOC)
X ||(curntn->arm[army2].yloc!=P_AYLOC)) {
X***************
X*** 348,353 ****
X--- 356,365 ----
X }
X if(P_ATYPE==A_ZOMBIE) {
X errormsg("Your Zombies just don't seem inspired");
X+ return;
X+ }
X+ if(P_ASTAT==MARCH) {
X+ errormsg("Your troops must stop marching before they can be lead");
X return;
X }
X if(armynum<0 || armynum >= MAXARM || P_ASTAT==SCOUT ||
X*** orandeven.c Wed Jan 31 20:58:16 1990
X--- randeven.c Wed Jan 31 20:58:27 1990
X***************
X*** 627,636 ****
X break;
X }
X }
X- break;
X /* decrement to contain proper value */
X xpos--;
X ypos--;
X case 27:
X /*plague -- 40% of populace in cities dies*/
X strcpy(eventstr,"40% of populace & armies in towns die");
X--- 627,636 ----
X break;
X }
X }
X /* decrement to contain proper value */
X xpos--;
X ypos--;
X+ break;
X case 27:
X /*plague -- 40% of populace in cities dies*/
X strcpy(eventstr,"40% of populace & armies in towns die");
X*** ocexecute.c Wed Jan 31 20:58:14 1990
X--- cexecute.c Wed Jan 31 20:58:28 1990
X***************
X*** 15,21 ****
X #include "data.h"
X extern long startgold;
X extern short country;
X! extern FILE *fexe;
X extern char fison[];
X
X #ifdef CONQUER
X--- 15,21 ----
X #include "data.h"
X extern long startgold;
X extern short country;
X! extern FILE *fexe, *fnews;
X extern char fison[];
X
X #ifdef CONQUER
X***************
X*** 161,166 ****
X--- 161,174 ----
X curntn->reputation = y;
X break;
X case NTAX: /* set nations tax rate */
X+ #ifdef ADMIN
X+ if (ispc(curntn->active) && !ispc(x)) {
X+ fprintf(fnews, "1.\tNation %s is now being run by the computer.\n", curntn->name);
X+ }
X+ if (ispc(x) && !ispc(curntn->active)) {
X+ fprintf(fnews, "1.\tNation %s is no longer being run by the computer.\n", curntn->name);
X+ }
X+ #endif /*ADMIN*/
X curntn->tax_rate = armynum;
X curntn->active = x;
X curntn->charity = y;
X*** oforms.c Wed Jan 31 20:58:14 1990
X--- forms.c Wed Jan 31 20:58:28 1990
X***************
X*** 413,422 ****
X mvprintw(5,0,"active is %d",curntn->active);
X mvprintw(6,0,"tax_rate...... %2d%%",curntn->tax_rate);
X mvprintw(7,0,"inflation..... %2d%%",curntn->inflation);
X! i=10*curntn->tax_rate-curntn->popularity-curntn->terror-3*curntn->charity;
X if( i<0 ) i=0;
X mvprintw(8,0,"peasant revolt %2d%%",(i*PREVOLT)/100);
X! i=5*curntn->tax_rate - curntn->prestige;
X if( i<0 ) i=0;
X mvprintw(9,0,"other revolt.. %2d%%",(i*PREVOLT)/100);
X standend();
X--- 413,422 ----
X mvprintw(5,0,"active is %d",curntn->active);
X mvprintw(6,0,"tax_rate...... %2d%%",curntn->tax_rate);
X mvprintw(7,0,"inflation..... %2d%%",curntn->inflation);
X! i=(int)10*curntn->tax_rate-curntn->popularity-curntn->terror-3*curntn->charity;
X if( i<0 ) i=0;
X mvprintw(8,0,"peasant revolt %2d%%",(i*PREVOLT)/100);
X! i=(int)5*curntn->tax_rate - curntn->prestige;
X if( i<0 ) i=0;
X mvprintw(9,0,"other revolt.. %2d%%",(i*PREVOLT)/100);
X standend();
X***************
X*** 441,447 ****
X temp = P_EATRATE;
X mvprintw(7,COLS/2-12, "eatrate.......%3.2f",temp);
X mvprintw(8,COLS/2-12, "wealth........ %3d",curntn->wealth);
X! mvprintw(9,COLS/2-12,"charity....... %2d%%",curntn->charity);
X mvprintw(10,COLS/2-12,"communication.%3.2f",(float) P_NTNCOM);
X mvprintw(11,COLS/2-12,"reputation.... %3d",curntn->reputation);
X mvprintw(12,COLS/2-12,"spoilrate.....%3d%%",curntn->spoilrate);
X--- 441,447 ----
X temp = P_EATRATE;
X mvprintw(7,COLS/2-12, "eatrate.......%3.2f",temp);
X mvprintw(8,COLS/2-12, "wealth........ %3d",curntn->wealth);
X! mvprintw(9,COLS/2-12, "charity....... %2d%%",curntn->charity);
X mvprintw(10,COLS/2-12,"communication.%3.2f",(float) P_NTNCOM);
X mvprintw(11,COLS/2-12,"reputation.... %3d",curntn->reputation);
X mvprintw(12,COLS/2-12,"spoilrate.....%3d%%",curntn->spoilrate);
X*** oreports.c Wed Jan 31 20:58:16 1990
X--- reports.c Wed Jan 31 20:58:29 1990
X***************
X*** 361,372 ****
X chty = max((money*(long)curntn->charity)/100L,0L);
X mvprintw(15,COLS-50,"CHARITY.......................%8ld",chty);
X mvprintw(16,COLS-50,"NET INCOME....................%8ld",money);
X infmoney = startgold + money - chty;
X if (infmoney > 1000000L) {
X! infmoney = (long)(infmoney / (100.0+(float)curntn->inflation/4.0)) * 100L;
X } else {
X! infmoney= (long) (infmoney * 100L) / (100.0 + (float) curntn->inflation/4.0);
X }
X mvprintw(17,COLS-50,"LOSS DUE TO INFLATION.........%8ld",(startgold + money-chty)-infmoney);
X standout();
X mvprintw(18,COLS-50,"NEXT SEASON'S TREASURY........%8ld",infmoney);
X--- 361,374 ----
X chty = max((money*(long)curntn->charity)/100L,0L);
X mvprintw(15,COLS-50,"CHARITY.......................%8ld",chty);
X mvprintw(16,COLS-50,"NET INCOME....................%8ld",money);
X+
X infmoney = startgold + money - chty;
X if (infmoney > 1000000L) {
X! infmoney = (infmoney / (400L + curntn->inflation)) * 400L;
X } else {
X! infmoney = (infmoney * 400L) / (400L + curntn->inflation);
X }
X+
X mvprintw(17,COLS-50,"LOSS DUE TO INFLATION.........%8ld",(startgold + money-chty)-infmoney);
X standout();
X mvprintw(18,COLS-50,"NEXT SEASON'S TREASURY........%8ld",infmoney);
X***************
X*** 425,433 ****
X mvprintw(9,0, "granary now holds.........%8ld tons",curntn->tfood);
X mvprintw(10,0, "%8ld people in farms..%8ld tons",spread.infarm,spread.food - curntn->tfood);
X fprintf(fp,"LINE %d FILE %s\n",__LINE__,__FILE__);
X! mvprintw(12,0, "%8ld people @ %3.1f eat.%8.0f tons",spread.civilians,P_EATRATE,P_EATRATE*(float)spread.civilians);
X fprintf(fp,"LINE %d FILE %s\n",__LINE__,__FILE__);
X! mvprintw(13,0, "%8ld soldiers eat.....%8.0f tons",military,military*2*P_EATRATE);
X military+= military+spread.civilians; /* military is amount eaten */
X fprintf(fp,"LINE %d FILE %s\n",__LINE__,__FILE__);
X standout();
X--- 427,435 ----
X mvprintw(9,0, "granary now holds.........%8ld tons",curntn->tfood);
X mvprintw(10,0, "%8ld people in farms..%8ld tons",spread.infarm,spread.food - curntn->tfood);
X fprintf(fp,"LINE %d FILE %s\n",__LINE__,__FILE__);
X! mvprintw(12,0, "%8ld people @ %3.1f eat.%8.0ld tons",spread.civilians,P_EATRATE,(long)(P_EATRATE*(float)spread.civilians));
X fprintf(fp,"LINE %d FILE %s\n",__LINE__,__FILE__);
X! mvprintw(13,0, "%8ld soldiers eat.....%8.0ld tons",military,(long)(military*2*P_EATRATE));
X military+= military+spread.civilians; /* military is amount eaten */
X fprintf(fp,"LINE %d FILE %s\n",__LINE__,__FILE__);
X standout();
X*** oupdate.c Wed Jan 31 20:58:17 1990
X--- update.c Wed Jan 31 20:58:30 1990
X***************
X*** 25,30 ****
X--- 25,31 ----
X extern short country;
X int disarray; /* TRUE if nation in disarray */
X int **attr; /* sector attractiveness */
X+ long **newpop; /* storage for old population */
X
X /****************************************************************/
X /* UPDATE() - updates the whole world */
X***************
X*** 523,534 ****
X updexecs()
X {
X register struct s_sector *sptr;
X! register int i, j, x, y;
X #ifdef XENIX
X register int z;
X #endif /*XENIX*/
X int armynum;
X! int moved,done,loop=0,number=0;
X void move_people();
X int execed[NTOTAL];
X
X--- 524,535 ----
X updexecs()
X {
X register struct s_sector *sptr;
X! register int x, y;
X #ifdef XENIX
X register int z;
X #endif /*XENIX*/
X int armynum;
X! int done, loop=0, number=0;
X void move_people();
X int execed[NTOTAL];
X
X***************
X*** 535,540 ****
X--- 536,544 ----
X check();
X attr = (int **) m2alloc(MAPX,MAPY,sizeof(int));
X check();
X+ newpop = (long **) m2alloc(5,MAPY,sizeof(long));
X+ check();
X+
X for(country=0;country<NTOTAL;country++)
X if( isntn(ntn[country].active) ) execed[country]=FALSE;
X else {
X***************
X*** 700,705 ****
X--- 704,710 ----
X &&( rand()%2==0)) ntn[country].spellpts+=1;
X }
X free(attr);
X+ free(newpop);
X }
X
X /****************************************************************/
X***************
X*** 1044,1054 ****
X
X /* now find new total gold talons in nations*/
X if (curntn->tgold > 1000000L) {
X! curntn->tgold = (long)(curntn->tgold /
X! (100.0+(float)curntn->inflation/4.0)) * 100L;
X } else {
X! curntn->tgold = (long) (curntn->tgold * 100L) /
X! (100.0 + (float) curntn->inflation/4.0);
X }
X
X /* provide goods production */
X--- 1049,1059 ----
X
X /* now find new total gold talons in nations*/
X if (curntn->tgold > 1000000L) {
X! curntn->tgold = (curntn->tgold /
X! (400L + curntn->inflation)) * 400L;
X } else {
X! curntn->tgold = (curntn->tgold * 400L) /
X! (400L + curntn->inflation);
X }
X
X /* provide goods production */
X***************
X*** 1070,1076 ****
X int AX, AY, AT; /* armies x,y locations, type : for speed */
X int armynum,nvynum,flag,dfltunit;
X int army2,asmen,dsmen,nation,sieges=0;
X! char siegex[MAXSIEGE],siegey[MAXSIEGE],siegok[MAXSIEGE];
X
X fprintf(stderr,"updating armies and navies\n");
X for(country=1;country<NTOTAL;country++)
X--- 1075,1081 ----
X int AX, AY, AT; /* armies x,y locations, type : for speed */
X int armynum,nvynum,flag,dfltunit;
X int army2,asmen,dsmen,nation,sieges=0;
X! unsigned char siegex[MAXSIEGE],siegey[MAXSIEGE],siegok[MAXSIEGE];
X
X fprintf(stderr,"updating armies and navies\n");
X for(country=1;country<NTOTAL;country++)
X***************
X*** 1409,1415 ****
X if(curntn->tgold > GOLDTHRESH*curntn->jewels){
X /* buy jewels off commodities board */
X xx=curntn->tgold-GOLDTHRESH*curntn->jewels;
X! if (ispc(country)) {
X if (mailopen(country)!=(-1)) {
X fprintf(fm,"Message from Conquer\n\n");
X fprintf(fm,"Gold imbalance forced your treasury to purchase\n");
X--- 1414,1420 ----
X if(curntn->tgold > GOLDTHRESH*curntn->jewels){
X /* buy jewels off commodities board */
X xx=curntn->tgold-GOLDTHRESH*curntn->jewels;
X! if (ispc(curntn->active)) {
X if (mailopen(country)!=(-1)) {
X fprintf(fm,"Message from Conquer\n\n");
X fprintf(fm,"Gold imbalance forced your treasury to purchase\n");
X***************
X*** 1536,1582 ****
X void
X move_people()
X {
X register struct s_sector *sptr;
X! register int i, j, x, y;
X! int moved, t_attr;
X! long **newpop, *curpop;
X
X! newpop = (long **) m2alloc(MAPX, MAPY, sizeof(long));
X
X! for (x = 0; x < MAPX; x++)
X! for (y = 0; y < MAPY; y++)
X! if (sct[x][y].owner == country)
X! newpop[x][y] = sct[x][y].people;
X! else newpop[x][y] = 0;
X
X! for (x = 0; x < MAPX; x++)
X! for (y = 0; y < MAPY; y++) {
X! sptr = &sct[x][y];
X! if ((sptr->owner == country) && (sptr->people != 0)) {
X!
X! for (t_attr = 0, i = x - 2; i < x + 3; i++)
X! for (j = y - 2; j < y + 3; j++)
X! if ((ONMAP(i, j)) && (sct[i][j].owner == country))
X! t_attr += attr[i][j];
X!
X! if (t_attr > 0) {
X! t_attr *= 5;
X! curpop = &newpop[x][y];
X! for (i = x - 2; i < x + 3; i++)
X for (j = y - 2; j < y + 3; j++)
X! if ((ONMAP(i, j)) && (sct[i][j].owner == country)) {
X! moved = sptr->people * attr[i][j];
X! if (moved > 0) {
X! moved /= t_attr;
X! *curpop -= moved;
X! newpop[i][j] += moved;
X }
X }
X }
X }
X }
X! for (x = 0; x < MAPX; x++)
X! for (y = 0; y < MAPY; y++)
X! if (sct[x][y].owner == country)
X! sct[x][y].people = newpop[x][y];
X }
X--- 1541,1606 ----
X void
X move_people()
X {
X+ register int x, y, i, j;
X register struct s_sector *sptr;
X! int t_attr;
X! long *curpop, moved;
X
X! /* store the first two rows for computation */
X! for (x = 0; x < 3; x++) {
X! for (y = 0; y < MAPY; y++) {
X! if (sct[x][y].owner == country)
X! newpop[x][y] = sct[x][y].people;
X! else newpop[x][y] = 0L;
X! }
X! }
X
X! /* go through entire map to move civilians */
X! for (x = 0; x < MAPX; x++) {
X! for (y = 0; y < MAPY; y++) {
X! sptr = &sct[x][y];
X! if ((sptr->owner == country) && (sptr->people != 0)) {
X
X! for (t_attr = 0, i = x - 2; i < x + 3; i++)
X for (j = y - 2; j < y + 3; j++)
X! if (ONMAP(i, j))
X! t_attr += attr[i][j];
X!
X! if (t_attr > 0) {
X! t_attr *= 5;
X! curpop = &newpop[x%5][y];
X! for (i = x - 2; i < x + 3; i++)
X! for (j = y - 2; j < y + 3; j++)
X! if (ONMAP(i, j)) {
X! moved = sptr->people * attr[i][j];
X! if (moved > 0) {
X! moved /= t_attr;
X! *curpop -= moved;
X! newpop[i%5][j] += moved;
X! }
X }
X }
X }
X }
X+ /* store old row, and read in new */
X+ for (y = 0; y < MAPY; y++) {
X+ if (x > 1) {
X+ if (sct[x-2][y].owner == country)
X+ sct[x-2][y].people = newpop[(x-2)%5][y];
X+ }
X+ if (x < MAPX - 3) {
X+ if (sct[x+3][y].owner == country)
X+ newpop[(x+3)%5][y] = sct[x+3][y].people;
X+ else newpop[(x+3)%5][y] = 0L;
X+ }
X+ }
X }
X!
X! /* assign values for final rows */
X! for (x = MAPX - 2; x < MAPX; x++) {
X! for (y = 0; y < MAPY; y++) {
X! if (sct[x][y].owner == country)
X! sct[x][y].people = newpop[x%5][y];
X! }
X! }
X }
X*** odata.c Wed Jan 31 20:58:14 1990
X--- data.c Wed Jan 31 20:58:31 1990
X***************
X*** 62,71 ****
X "Knights", "Gryfins","Elephants","Zombies","Spy","Scout",
X "King","Baron","Emperor","Prince","Wizard","Mage",
X "Pope","Bishop","Admiral","Captain","Warlord","Lord",
X! "Demon","Devil","Dragon","Wyrm","Shadow","Nazgul",
X "Spirit", "Assasin", "Efreet", "Gargoyl", "Wraith",
X "Hero", "Centaur", "Giant", "Suphero", "Mummy",
X! "Elmentl", "Mintaur", "Demon", "Balrog", "Dragon"
X };
X
X #ifdef CONQUER
X--- 62,71 ----
X "Knights", "Gryfins","Elephants","Zombies","Spy","Scout",
X "King","Baron","Emperor","Prince","Wizard","Mage",
X "Pope","Bishop","Admiral","Captain","Warlord","Lord",
X! "Demon","Devil","Dragyn","Wyrm","Shadow","Nazgul",
X "Spirit", "Assasin", "Efreet", "Gargoyl", "Wraith",
X "Hero", "Centaur", "Giant", "Suphero", "Mummy",
X! "Elmentl", "Mintaur", "Daemon", "Balrog", "Dragon"
X };
X
X #ifdef CONQUER
X***************
X*** 80,86 ****
X "Demn","Devl","Drag","Wyrm","Shad","Nazg",
X "spir", "Assn", "efr", "Garg", "Wra",
X "Hero", "Cent", "gt", "Shro", "Mumm",
X! "Elem", "mino", "dem", "Bal", "Drag"
X };
X #endif CONQUER
X int unitminsth[]= /* min strength of a unit */
X--- 80,86 ----
X "Demn","Devl","Drag","Wyrm","Shad","Nazg",
X "spir", "Assn", "efr", "Garg", "Wra",
X "Hero", "Cent", "gt", "Shro", "Mumm",
X! "Elem", "mino", "daem", "Bal", "Drgn"
X };
X #endif CONQUER
X int unitminsth[]= /* min strength of a unit */
X*** onewlogin.c Wed Jan 31 20:58:15 1990
X--- newlogin.c Wed Jan 31 20:58:32 1990
X***************
X*** 849,855 ****
X break;
X }
X }
X- check();
X
X /* check for save */
X newmsg("Save this nation? [ny]");
X--- 849,854 ----
X*** odisplay.c Wed Jan 31 20:58:14 1990
X--- display.c Wed Jan 31 20:58:32 1990
X***************
X*** 220,226 ****
X break;
X case DI_DESI: /*designation*/
X if(sct[x+xoffset][y+yoffset].owner==0){
X! if(tofood( &sct[x+xoffset][y+yoffset],sct[x+xoffset][y+yoffset].owner)!=0)
X ch=sct[x+xoffset][y+yoffset].altitude;
X else ch=sct[x+xoffset][y+yoffset].vegetation;
X }
X--- 220,226 ----
X break;
X case DI_DESI: /*designation*/
X if(sct[x+xoffset][y+yoffset].owner==0){
X! if(tofood( &sct[x+xoffset][y+yoffset],country)!=0)
X ch=sct[x+xoffset][y+yoffset].altitude;
X else ch=sct[x+xoffset][y+yoffset].vegetation;
X }
X***************
X*** 408,418 ****
X void
X coffmap()
X {
X! if((xcurs<=0)||(ycurs<=0)||(xcurs>=SCREEN_X_SIZE-1)
X! ||((ycurs>=SCREEN_Y_SIZE-1))||((XREAL)>=MAPX)
X! ||((YREAL)>=MAPY)) {
X! centermap();
X! redraw=PART;
X }
X
X if(redraw!=DONE) {
X--- 408,418 ----
X void
X coffmap()
X {
X! if( xcurs<0 || (XREAL!=0 && xcurs==0) || (ycurs<0) ||
X! (YREAL!=0 && ycurs==0) || xcurs>=SCREEN_X_SIZE-1 ||
X! ycurs>=SCREEN_Y_SIZE-1 || XREAL>=MAPX || YREAL>=MAPY) {
X! centermap();
X! redraw=PART;
X }
X
X if(redraw!=DONE) {
X*** omain.c Wed Jan 31 20:58:15 1990
X--- main.c Wed Jan 31 20:58:33 1990
X***************
X*** 574,581 ****
X case 'b': /*move south west*/
X pager=0;
X selector=0;
X! xcurs--;
X! ycurs++;
X break;
X case 'B': /*budget*/
X redraw=FULL;
X--- 574,581 ----
X case 'b': /*move south west*/
X pager=0;
X selector=0;
X! if (XREAL > 0) xcurs--;
X! if (YREAL < MAPY - 1) ycurs++;
X break;
X case 'B': /*budget*/
X redraw=FULL;
X***************
X*** 620,632 ****
X case 'H': /*scroll west*/
X pager=0;
X selector=0;
X! xcurs-=((COLS-22)/4);
X break;
X case '4':
X case 'h': /*move west*/
X pager=0;
X selector=0;
X! xcurs--;
X break;
X case 'I': /*campaign information*/
X camp_info();
X--- 620,633 ----
X case 'H': /*scroll west*/
X pager=0;
X selector=0;
X! if (XREAL > (COLS-22)/4) xcurs-=((COLS-22)/4);
X! else xcurs = -xoffset;
X break;
X case '4':
X case 'h': /*move west*/
X pager=0;
X selector=0;
X! if (XREAL > 0) xcurs--;
X break;
X case 'I': /*campaign information*/
X camp_info();
X***************
X*** 635,669 ****
X case 'J': /*scroll down*/
X pager=0;
X selector=0;
X! ycurs+=((SCREEN_Y_SIZE)/2);
X break;
X case '2':
X case 'j': /*move down*/
X pager=0;
X selector=0;
X! ycurs++;
X break;
X case '8':
X case 'k': /*move up*/
X pager=0;
X selector=0;
X! ycurs--;
X break;
X case 'K': /*scroll up*/
X pager=0;
X selector=0;
X! ycurs-=((SCREEN_Y_SIZE)/2);
X break;
X case '6':
X case 'l': /*move east*/
X pager=0;
X selector=0;
X! xcurs++;
X break;
X case 'L': /*scroll east*/
X pager=0;
X selector=0;
X! xcurs+=((COLS-22)/4);
X break;
X case 'm': /*move selected item to new x,y */
X mymove();
X--- 636,674 ----
X case 'J': /*scroll down*/
X pager=0;
X selector=0;
X! if (YREAL + (SCREEN_Y_SIZE)/2 < MAPY)
X! ycurs+=((SCREEN_Y_SIZE)/2);
X! else ycurs = MAPY - yoffset - 1;
X break;
X case '2':
X case 'j': /*move down*/
X pager=0;
X selector=0;
X! if (YREAL < MAPY - 1) ycurs++;
X break;
X case '8':
X case 'k': /*move up*/
X pager=0;
X selector=0;
X! if (YREAL > 0) ycurs--;
X break;
X case 'K': /*scroll up*/
X pager=0;
X selector=0;
X! if (YREAL > (SCREEN_Y_SIZE)/2) ycurs-=((SCREEN_Y_SIZE)/2);
X! else ycurs = -yoffset;
X break;
X case '6':
X case 'l': /*move east*/
X pager=0;
X selector=0;
X! if (XREAL < MAPX - 1) xcurs++;
X break;
X case 'L': /*scroll east*/
X pager=0;
X selector=0;
X! if (XREAL + (COLS-22)/4 < MAPX) xcurs+=((COLS-22)/4);
X! else xcurs = MAPX - xoffset - 1;
X break;
X case 'm': /*move selected item to new x,y */
X mymove();
X***************
X*** 680,687 ****
X case 'n': /*move south-east*/
X pager=0;
X selector=0;
X! ycurs++;
X! xcurs++;
X break;
X case 'N': /*read newspaper */
X redraw=PART;
X--- 685,692 ----
X case 'n': /*move south-east*/
X pager=0;
X selector=0;
X! if (YREAL < MAPY - 1) ycurs++;
X! if (XREAL < MAPX - 1) xcurs++;
X break;
X case 'N': /*read newspaper */
X redraw=PART;
X***************
X*** 762,775 ****
X case 'u': /*move north-east*/
X pager=0;
X selector=0;
X! ycurs--;
X! xcurs++;
X break;
X case 'U': /* scroll north-east */
X pager=0;
X selector=0;
X! xcurs+=((COLS-22)/4);
X! ycurs-=((SCREEN_Y_SIZE)/2);
X break;
X case 'v': /* version credits */
X credits();
X--- 767,782 ----
X case 'u': /*move north-east*/
X pager=0;
X selector=0;
X! if (YREAL > 0) ycurs--;
X! if (XREAL < MAPX - 1) xcurs++;
X break;
X case 'U': /* scroll north-east */
X pager=0;
X selector=0;
X! if (XREAL + (COLS-22)/4 < MAPX) xcurs+=((COLS-22)/4);
X! else xcurs = MAPX - xoffset - 1;
X! if (YREAL > (SCREEN_Y_SIZE)/2) ycurs-=((SCREEN_Y_SIZE)/2);
X! else ycurs = -yoffset;
X break;
X case 'v': /* version credits */
X credits();
X***************
X*** 801,814 ****
X case 'y': /*move north-west*/
X pager=0;
X selector=0;
X! ycurs--;
X! xcurs--;
X break;
X case 'Y': /* scroll north-west */
X pager=0;
X selector=0;
X! xcurs-=((COLS-22)/4);
X! ycurs-=((SCREEN_Y_SIZE)/2);
X break;
X case 'Z': /*move civilians up to 2 spaces*/
X moveciv();
X--- 808,823 ----
X case 'y': /*move north-west*/
X pager=0;
X selector=0;
X! if (YREAL > 0) ycurs--;
X! if (XREAL > 0) xcurs--;
X break;
X case 'Y': /* scroll north-west */
X pager=0;
X selector=0;
X! if (XREAL < (COLS-22)/4) xcurs = -xoffset;
X! else xcurs-=((COLS-22)/4);
X! if (YREAL < (SCREEN_Y_SIZE)/2) ycurs = -yoffset;
X! else ycurs-=((SCREEN_Y_SIZE)/2);
X break;
X case 'Z': /*move civilians up to 2 spaces*/
X moveciv();
X*** onpc.c Wed Jan 31 20:58:16 1990
X--- npc.c Wed Jan 31 20:58:33 1990
X***************
X*** 522,527 ****
X--- 522,528 ----
X case TRADED:
X case ONBOARD:
X case GENERAL:
X+ case SCOUT:
X break;
X default:
X P_ASTAT=DEFEND;
X*** otrade.c Wed Jan 31 20:58:17 1990
X--- trade.c Wed Jan 31 20:58:34 1990
X***************
X*** 81,93 ****
X }
X /* read in all of the data */
X while (notopen==FALSE && !feof(tfile)) {
X! fscanf(tfile,"%d %d %d %d %ld %ld %d\n",&deal[itemnum],
X! &natn[itemnum],&type1[itemnum],&type2[itemnum],&lvar1[itemnum],&lvar2[itemnum],&extra[itemnum]);
X! if (deal[itemnum]==NOSALE) {
X! /* remove item from sales list */
X! deal[type1[itemnum]]=NOSALE;
X! } else if (deal[itemnum]==SELL) {
X! itemnum++;
X }
X }
X if (notopen==FALSE) fclose(tfile);
X--- 81,97 ----
X }
X /* read in all of the data */
X while (notopen==FALSE && !feof(tfile)) {
X! holdint = fscanf(tfile,"%d %d %d %d %ld %ld %d\n",
X! &deal[itemnum],&natn[itemnum],&type1[itemnum],
X! &type2[itemnum],&lvar1[itemnum],
X! &lvar2[itemnum],&extra[itemnum]);
X! if (holdint == 7) {
X! if (deal[itemnum]==NOSALE) {
X! /* remove item from sales list */
X! deal[type1[itemnum]]=NOSALE;
X! } else if (deal[itemnum]==SELL) {
X! itemnum++;
X! }
X }
X }
X if (notopen==FALSE) fclose(tfile);
X***************
X*** 899,906 ****
X }
X /* read in all of the transactions */
X while(!feof(tfile)) {
X! fscanf(tfile,"%d %d %d %d %ld %ld %d\n",&deal[itemnum],
X! &natn[itemnum],&type1[itemnum],&type2[itemnum],&lvar1[itemnum],&lvar2[itemnum],&extra[itemnum]);
X if (deal[itemnum]==NOSALE) {
X if (natn[itemnum]==country)
X takeback(country,type1[type1[itemnum]],lvar1[type1[itemnum]],extra[type1[itemnum]],TRUE);
X--- 903,910 ----
X }
X /* read in all of the transactions */
X while(!feof(tfile)) {
X! if (7 != fscanf(tfile,"%d %d %d %d %ld %ld %d\n",&deal[itemnum],
X! &natn[itemnum],&type1[itemnum],&type2[itemnum],&lvar1[itemnum],&lvar2[itemnum],&extra[itemnum])) break;
X if (deal[itemnum]==NOSALE) {
X if (natn[itemnum]==country)
X takeback(country,type1[type1[itemnum]],lvar1[type1[itemnum]],extra[type1[itemnum]],TRUE);
X***************
X*** 946,953 ****
X }
X /* read in all of the transactions */
X while(!feof(tfile)) {
X! fscanf(tfile,"%d %d %d %d %ld %ld %d\n",&deal[itemnum],
X! &natn[itemnum],&type1[itemnum],&type2[itemnum],&lvar1[itemnum],&lvar2[itemnum],&extra[itemnum]);
X if (deal[itemnum]==NOSALE) {
X /* remove item from sales list */
X deal[type1[itemnum]]=NOSALE;
X--- 950,957 ----
X }
X /* read in all of the transactions */
X while(!feof(tfile)) {
X! if (7 != fscanf(tfile,"%d %d %d %d %ld %ld %d\n",&deal[itemnum],
X! &natn[itemnum],&type1[itemnum],&type2[itemnum],&lvar1[itemnum],&lvar2[itemnum],&extra[itemnum])) break;
X if (deal[itemnum]==NOSALE) {
X /* remove item from sales list */
X deal[type1[itemnum]]=NOSALE;
X***************
X*** 979,984 ****
X--- 983,989 ----
X }
X }
X unlink(tradefile);
X+ if (itemnum == 0) return;
X /* reopen the file for unsold commodities */
X if ((tfile=fopen(tradefile,"w")) == NULL) {
X /* error on opening file */
X*** ocheck.c Wed Jan 31 20:58:14 1990
X--- check.c Wed Jan 31 20:58:34 1990
X***************
X*** 3,8 ****
X--- 3,12 ----
X
X #include <ctype.h>
X #include <stdio.h>
X+ #ifndef FILELOCK
X+ #include <sys/types.h>
X+ #include <sys/stat.h>
X+ #endif
X #include "header.h"
X #include "data.h"
X
X***************
X*** 55,61 ****
X __file__,__line__,country,i,a->xloc,a->yloc,a->sold);
X a->sold = 0;
X }
X! if( a->stat == ONBOARD && a->smove > 0) {
X /* don't echo since this is still getting */
X /* set some place someplace I can't find yet */
X a->smove = 0;
X--- 59,65 ----
X __file__,__line__,country,i,a->xloc,a->yloc,a->sold);
X a->sold = 0;
X }
X! if( a->stat == ONBOARD && a->smove != 0) {
X /* don't echo since this is still getting */
X /* set some place someplace I can't find yet */
X a->smove = 0;
X
END_OF_FILE
if test 30045 -ne `wc -c <'patches08'`; then
echo shar: \"'patches08'\" unpacked with wrong size!
fi
# end of 'patches08'
fi
echo shar: End of shell archive.
exit 0