[comp.sources.games] v09i032: conquer4 - middle earth multi-player game

billr@saab.CNA.TEK.COM (Bill Randle) (03/06/90)

Submitted-by: Adam Bryant <adb@cs.bu.edu>
Posting-number: Volume 9, Issue 32
Archive-name: conquer4/Patch9
Patch-To: conquer4: Volume 6, Issue 83-96


[[Here is the latest and hopefully last patch to conquer version 4.
[But, hey, didn't I say that with patch number 8?]  Now, I hope
I can finally get all my effort into version 5.

Anyway, don't have to much time to say much about it, but in summary:

  - this patch enhances god powers and fixes a number of errors
    in god routines.
  - this patch takes care of a number of bug fixes, most especially
    the grouped troops bug.
  - this patch fixes a number of bugs with the trading code thanks
    to Charles C. Fu.
  - I believe that this is a much cleaner version than any of the
    proceeding ones... and the feel seems a bit better as well.

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:  patches09
# Wrapped by billr@saab on Mon Mar  5 08:47:55 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patches09' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'patches09'\"
else
echo shar: Extracting \"'patches09'\" \(62540 characters\)
sed "s/^X//" >'patches09' <<'END_OF_FILE'
X*** opatchlevel.h	Sat Mar  3 15:27:42 1990
X--- patchlevel.h	Sat Mar  3 15:27:52 1990
X***************
X*** 1 ****
X! #define PATCHLEVEL	8
X--- 1 ----
X! #define PATCHLEVEL	9
X*** onotes.v4	Sat Mar  3 15:27:42 1990
X--- notes.v4	Sat Mar  3 15:27:52 1990
X***************
X*** 314,319 ****
X--- 314,383 ----
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+ ===4.0 patch number eight released => 4.8 ===============================
X+ 256. made sure that minor leaders lived before becoming major leaders.
X+ 257. fixed major bug on not resetting status of moved grouped unit.
X+ 258. set a grouped movement to be equal to the movement of the leader.
X+ 259. added missing return to commands.c (1341) [Paul Waterman]
X+ 260. made sure only to ask for splitting warships when warships are there.
X+ 261. no longer ask to split ships that are not in fleet.
X+ 262. allow god to manipulate a fleet up for trade.
X+ 263. fixed bug that -1 population may accidently be set by god.
X+ 264. fixed bug that caused missetting of gold/jewel value by god.
X+ 265. allow god to manipulate an army that is up for trade.
X+ 266. added check to assure that navies do not carry invalid troops.
X+ 267. added check for onboard armies to be sure they were actually on fleets.
X+ 268. reformated the bottom of the display on the read message display.
X+ 269. made sure that stones had the designation of '?' to allow them to work.
X+ 270. increased reduction on movement in desert for DERVISH to avoid confusion.
X+ 271. made sure that blank input would not be taken on redesignate owner.
X+ 272. fiddled and diddled (sorry Johnny!) with the charity change check.
X+ 273. fixed bug with providing movement to unmovable when having ROADS power.
X+ 274. added ifdef's around srand declarations for ANSI compilers. [C. Fu]
X+ 275. removed error message for people relocation.  too common an occurance.
X+ 276. allow naval battles along shore. [Charles C. Fu]
X+ 277. prevent sailors or marines from retreating. [Charles C. Fu]
X+ 278. redid the retreat code... made the test much simpler.
X+ 279. slight adjustment to ONMAP macro [Charles C. Fu]
X+ 280. keep random value of army sizes the same for when seen. [Charles C. Fu]
X+ 281. keep random value of ship sizes the same when seen. [Charles C. Fu]
X+ 282. keep random value of people in sector the same. [Charles C. Fu]
X+ 283. do not allow navies to pass into impassible land [partial fix: C. Fu]
X+ 284. make it harder to unload armies in enemy cities [Charles C. Fu]
X+ 285. make it harder to load armies in enemy cities [Charles C. Fu]
X+ 286. fixed mistype "P_ASOLD" => "P_ATYPE" npc.c [Charles C. Fu]
X+ 287. check for division by zero with metals cost for troops
X+ 288. make NPC pay metal for troops. [Charles C. Fu]
X+ 289. have NPC nations adjust tax rates as appropriate. [Charles C. Fu]
X+ 290. give rebel nations a tax rate of 10. [Charles C. Fu]
X+ 291. extend view of tradeing list for long screens [Charles C. Fu]
X+ 292. refresh() added to end of trade input routine  [Charles C. Fu]
X+ 293. do not process invalid country is takeback [Charles C. Fu]
X+ 294. cause trade to fail for destroyed army or fleet. [Charles C. Fu]
X+ 295. fixed mistype which prevented sale of land. [Charles C. Fu]
X+ 	{Darn!, My sabotage was caught! :-) adam}
X+ 296. fixed missetting of curntn which blocked ship trades [Charles C. Fu]
X+ 	{Foiled Again! :-) Actually that code predated curntn use, so
X+ 	we were bound to miss some in the conversion, adam}
X+ 297. fixed bug with returning bids to losing nations [Charles C. Fu]
X+ 298. let land trades fail during trade, not before [Charles C. Fu] (whatever)
X+ 299. convert to doubles for calculation of treasury overflow. [C. Fu]
X+ 300. relocated adjustment to MARCHer movment when changing statuses.
X+ 301. added in a routine to give the items up for trade to a nation if
X+ 	it captures a nations capitol.  [David Soleno]
X+ 302. fixed error messages generated by the orc takeover routine.
X+ 303. made the rules file be read in from the default directory.
X+ 304. made spell point gain for MONST powers additive.
X+ 305. put a 25% cap on user defined charity.
X+ 306. adjusted the combat routine to separate naval and army combat checks.
X+ 307. added in a check to assure that combining overlarge fleets is checked.
X+ 308. verified input checks in various locations in report.c.
X+ 309. made god adjustment of ships to allow keeping of previous values on '\n'.
X+ 310. gave god the ability to adjust army unit types.
X+ 311. gave god the ability to adjust army move values.
X+ 312. gave god the ability to adjust navy move values.
X+ 313. fixed bug in reporting side during newspaper for naval battles.
X+ 314. gave god the ability to adjust an army status.
X  
X  -------------------------------------------------------------------------
X  | 2.0 POSSIBLE SHORT-TERM ENHANCEMENTS/FIXES FOR CONQUER V5             |
X*** oREADME	Sat Mar  3 15:27:38 1990
X--- README	Sat Mar  3 15:27:53 1990
X***************
X*** 94,99 ****
X--- 94,106 ----
X  	unreferenced symbol errors occur,  try adding "-ltermcap" after
X  	the "-lcurses" line in the makefile.
X  
X+ Note2: With some versions of 'make' the SHELL environment variable is
X+ 	read to determine under what shell jobs should be spawned.  The
X+ 	Makefile for conquer was written with '/bin/sh' in mind, so if
X+ 	any "command not found" errors appear, doing a:
X+ 		setenv SHELL /bin/sh
X+ 	before typing 'make', might alleviate the problem.
X+ 
X  -----------------------------------------------------------
X  V   administration instructions
X  -----------------------------------------------------------
X***************
X*** 109,115 ****
X  		-a          add new player
X  		-x          execute program
X  		-d DIR      to use play different game
X- 		-p          print a map
X  		-r SCENARIO read map while making a new world
X  			    uses SCENARIO.ele, SCENARIO.veg, &  SCENARIO.nat
X  
X--- 116,121 ----
X*** odata.h	Sat Mar  3 15:27:39 1990
X--- data.h	Sat Mar  3 15:27:53 1990
X***************
X*** 581,587 ****
X  
X  /* magic macro: returns TRUE if the nation has that power*/
X  #define	magic(NATION,POWER)	((ntn[NATION].powers&(POWER))!=0)
X! #define	ONMAP(x,y)	(x>=0 && y>=0 && x<MAPX && y<MAPY)
X  
X  #ifndef HILIGHT
X  #define	standout()
X--- 581,587 ----
X  
X  /* magic macro: returns TRUE if the nation has that power*/
X  #define	magic(NATION,POWER)	((ntn[NATION].powers&(POWER))!=0)
X! #define	ONMAP(x,y)	((x)>=0 && (y)>=0 && (x)<MAPX && (y)<MAPY)
X  
X  #ifndef HILIGHT
X  #define	standout()
X***************
X*** 610,616 ****
X  #define	check()	checkout(__FILE__,__LINE__)
X  #endif DEBUG
X  
X! #define	GOLDTHRESH	10	/* min ratio of gold:jewels */
X  
X  #define	SALT "aa"		/* seed for crypt() encryption	*/
X  
X--- 610,616 ----
X  #define	check()	checkout(__FILE__,__LINE__)
X  #endif DEBUG
X  
X! #define	GOLDTHRESH	10L	/* min ratio of gold:jewels */
X  
X  #define	SALT "aa"		/* seed for crypt() encryption	*/
X  
X*** oadmin.c	Sat Mar  3 15:27:39 1990
X--- admin.c	Sat Mar  3 15:27:53 1990
X***************
X*** 53,59 ****
X--- 53,61 ----
X  	int geteuid(), getuid(), setuid(), realuser, l;
X  	register int i,j;
X  	char *name;
X+ #ifndef __STDC__
X  	void srand();
X+ #endif
X  	int getopt();
X  	long time();
X  	/* mflag = make world, a=add player, x=execute, p=print */
X*** oextcmds.c	Sat Mar  3 15:27:40 1990
X--- extcmds.c	Sat Mar  3 15:27:54 1990
X***************
X*** 178,192 ****
X  		errormsg("Uh, sir.  Aren't we doing that already?");
X  		return;
X  	}
X- 	/* eliminate half starting movement if start out on march */
X- 	if( P_ASTAT==MARCH && new_stat!=MARCH ) {
X- 		if(P_AMOVE<(curntn->maxmove * *(unitmove+(P_ATYPE%UTYPE)))/50){
X- 			errormsg("That troop has gone too far to stop marching");
X- 			return;
X- 		}
X- 		P_AMOVE-=(curntn->maxmove * *(unitmove+(P_ATYPE%UTYPE)))/50;
X- 		AADJMOV;
X- 	}
X  	if(new_stat == SCOUT) {
X  		if(( P_ATYPE != A_SCOUT )&&( P_ASOLD >= 25)) {
X  			errormsg("Need less than 25 men to scout");
X--- 178,183 ----
X***************
X*** 232,237 ****
X--- 223,238 ----
X  			errormsg("Sorry, but you can't rule in that sector");
X  			return;
X  		}
X+ 	}
X+ 
X+ 	/* eliminate half starting movement if start out on march */
X+ 	if( P_ASTAT==MARCH && new_stat!=MARCH ) {
X+ 		if(P_AMOVE<(curntn->maxmove * *(unitmove+(P_ATYPE%UTYPE)))/50){
X+ 			errormsg("That troop has gone too far to stop marching");
X+ 			return;
X+ 		}
X+ 		P_AMOVE-=(curntn->maxmove * *(unitmove+(P_ATYPE%UTYPE)))/50;
X+ 		AADJMOV;
X  	}
X  
X  	/* location dependent statuses make armies stay in place */
X*** orandeven.c	Sat Mar  3 15:27:43 1990
X--- randeven.c	Sat Mar  3 15:27:54 1990
X***************
X*** 207,212 ****
X--- 207,213 ----
X  	ntn[new].powers= ntn[target].powers;
X  	ntn[new].tships= 0;
X  	ntn[new].tsctrs = split;
X+ 	ntn[new].tax_rate = 10;
X  
X  	/* first check first letter of name */
X  	if( markok(toupper(ntn[new].name[0]),FALSE) )
X*** ocexecute.c	Sat Mar  3 15:27:39 1990
X--- cexecute.c	Sat Mar  3 15:27:55 1990
X***************
X*** 197,203 ****
X  			back into your capitol */
X  			if((sct[x][y].owner!=country)&&(country!=0)) {
X  				sct[curntn->capx][curntn->capy].people+=armynum;
X- 				fprintf(stderr,"ERROR: <%s> told to put %d civilians in sector %d,%d not owned - placed in capitol\n",curntn->name,armynum,x,y);
X  				break;
X  			}
X  			sct[x][y].people=armynum;
X--- 197,202 ----
X***************
X*** 206,212 ****
X  			/* if you dont own it, put people in your capitol */
X  			if((sct[x][y].owner!=country)&&(country!=0)) {
X  				sct[curntn->capx][curntn->capy].people+=armynum;
X- 				fprintf(stderr,"SACIV3: <%s> told to put %d civilians in sector %d,%d not owned - placed in capitol\n",curntn->name,armynum,x,y);
X  			}
X  			else
X  			{
X--- 205,210 ----
X***************
X*** 258,264 ****
X  		case DESTRY:
X  			sct[ntn[armynum].capx][ntn[armynum].capy].owner=savectry;
X  			country=armynum;
X! 			destroy(country);
X  			country=savectry;
X  			break;
X  		case CHG_MGK:
X--- 256,262 ----
X  		case DESTRY:
X  			sct[ntn[armynum].capx][ntn[armynum].capy].owner=savectry;
X  			country=armynum;
X! 			if (isupdate) destroy(country);
X  			country=savectry;
X  			break;
X  		case CHG_MGK:
X*** oforms.c	Sat Mar  3 15:27:40 1990
X--- forms.c	Sat Mar  3 15:27:55 1990
X***************
X*** 579,595 ****
X  		intval = get_number();
X  		if (intval < 0) {
X  			break;
X! 		} else if( intval > 100 )
X  			errormsg("ERROR - invalid charity rate");
X  		/* this will protect from both underflow and overflow */
X! 		else if((int)curntn->popularity + 2*(intval - (int)curntn->charity)>100)
X! 			errormsg("ERROR - you may not increase charity that much");
X! 		else if((int)curntn->popularity + 2*(intval - (int)curntn->charity)<0)
X! 			errormsg("ERROR - you may not decrease charity that much");
X! 		else {
X! 			curntn->popularity += (unsigned char) 2*(intval - (int) curntn->charity);
X! 			curntn->charity = intval;
X! 			NADJNTN;
X  		}
X  		break;
X  	case '5':	/* terror */
X--- 579,607 ----
X  		intval = get_number();
X  		if (intval < 0) {
X  			break;
X! 		} else if( intval > 100 ) {
X  			errormsg("ERROR - invalid charity rate");
X+ 		} else if (intval > 25) {
X+ 			errormsg("You are kidding, right?");
X  		/* this will protect from both underflow and overflow */
X! 		} else if(intval > curntn->charity) {
X! 			if (2 * (intval - (int)curntn->charity) + (int) curntn->popularity > 100) {
X! 				errormsg("ERROR - you may not increase charity that much");
X! 			} else {
X! 				curntn->popularity += (unsigned char) 2*(intval - (int) curntn->charity);
X! 				curntn->charity = intval;
X! 				NADJNTN;
X! 				NADJNTN2;
X! 			}
X! 		} else {
X! 			if (2 * (intval - (int)curntn->charity) < - (int) curntn->popularity) {
X! 				errormsg("ERROR - you may not decrease charity that much");
X! 			} else {
X! 				curntn->popularity += (unsigned char) 2*(intval - (int) curntn->charity);
X! 				curntn->charity = intval;
X! 				NADJNTN;
X! 				NADJNTN2;
X! 			}
X  		}
X  		break;
X  	case '5':	/* terror */
X*** omisc.c	Sat Mar  3 15:27:41 1990
X--- misc.c	Sat Mar  3 15:27:55 1990
X***************
X*** 886,891 ****
X--- 886,894 ----
X  	/* advertise */
X  	fprintf(fnews,"1.\tCapitol of %s sacked by %s\n",ntn[cntry].name,ntn[nation].name);
X  
X+         /* Remove goods from trade board */
X+ 	fixtrade(cntry);
X+ 
X  	/* first give all prizes to the conquerer */
X  	if(curntn->tgold > 0) {			/* all gold */
X  		ntn[nation].tgold += curntn->tgold;
X***************
X*** 1088,1096 ****
X  		} /* switch */
X  	} /* for */
X  
X! 	if((magic(cntry,DERVISH)==1) ||(magic(cntry,DESTROYER)==1)) {
X! 		veg_cost[ ICE ] = 1;
X! 		veg_cost[ DESERT ] = 1;
X  	}
X  
X  	for( j = 0; ele[j] != '0'; j++ ) {
X--- 1091,1099 ----
X  		} /* switch */
X  	} /* for */
X  
X! 	if(magic(cntry,DERVISH) || magic(cntry,DESTROYER)) {
X! 		veg_cost[ ICE ] = 0;
X! 		veg_cost[ DESERT ] = 0;
X  	}
X  
X  	for( j = 0; ele[j] != '0'; j++ ) {
X*** oreports.c	Sat Mar  3 15:27:43 1990
X--- reports.c	Sat Mar  3 15:27:55 1990
X***************
X*** 143,149 ****
X  				continue;
X  			}
X  #ifdef TRADE
X! 			if(P_ASTAT==TRADED) {
X  				errormsg("May not change traded army");
X  				continue;
X  			}
X--- 143,149 ----
X  				continue;
X  			}
X  #ifdef TRADE
X! 			if(isgod==FALSE && P_ASTAT==TRADED) {
X  				errormsg("May not change traded army");
X  				continue;
X  			}
X***************
X*** 154,160 ****
X  			ypos++;
X  			clrtoeol();
X  #ifdef OGOD
X! 			if(isgod==TRUE) mvaddstr(ypos++,0,"GOD OPTIONS: 6) LOCATION 7) SOLDIERS");
X  			clrtoeol();
X  #endif OGOD
X  			ypos++;
X--- 154,160 ----
X  			ypos++;
X  			clrtoeol();
X  #ifdef OGOD
X! 			if(isgod==TRUE) mvaddstr(ypos++,0,"GOD OPTIONS: 6) LOCATION 7) SOLDIERS 8) MOVE 9) UNITTYPE 0) STATUS ");
X  			clrtoeol();
X  #endif OGOD
X  			ypos++;
X***************
X*** 272,283 ****
X  					mvaddstr(ypos++,0,"What is the New Total Soldiers: ");
X  					refresh();
X  					men = get_number();
X! 					if (men>0) {
X  						P_ASOLD=men;
X  						AADJMEN;
X  					}
X  				}
X  				break;
X  #endif OGOD
X  			default:
X  				errormsg("Invalid Input");
X--- 272,328 ----
X  					mvaddstr(ypos++,0,"What is the New Total Soldiers: ");
X  					refresh();
X  					men = get_number();
X! 					if (men>=0) {
X  						P_ASOLD=men;
X  						AADJMEN;
X  					}
X  				}
X  				break;
X+ 			case '8':
X+ 				if (isgod == TRUE) {
X+ 					mvaddstr(ypos, 0, "What is the new movement value?");
X+ 					refresh();
X+ 					men = get_number();
X+ 
X+ 					if (men >=0 && men <= 100) {
X+ 						P_AMOVE = men;
X+ 					}
X+ 				}
X+ 				break;
X+ 			case '9':
X+ 				if (isgod == TRUE) {
X+ 					mvaddstr(ypos++, 0, "Change unit type; Normal 0-26, Leader 27-44, Monster 45-59");
X+ 					mvaddstr(ypos++, 0, "[MajorHackEH?] New Type is? ");
X+ 					refresh();
X+ 					men = get_number();
X+ 
X+ 					if (men < 0 || men > MAXMONSTER) break;
X+ 					if (men > 44) men += TWOUTYPE;
X+ 					else if (men > NOUNITTYPES) men += UTYPE;
X+ 					
X+ 					P_ATYPE = men;
X+ 				}
X+ 				break;
X+ 			case '0':
X+ 				if (isgod == TRUE) {
X+ 					mvprintw(ypos++, 0, "1) Mar 2) Sct 3) Garr 4) Trade 5) Mil 6) Fly 7) Def 8) MDef 9) Att 10) MAtt");
X+ 					mvprintw(ypos++, 0, "11) Genrl 12) Sort 13) Sieg 14) Sgd 15) Onb 16) Rule 17+) Group (leader-=17)");
X+ 					mvaddstr(ypos++, 0, "Set what status? ");
X+ 					refresh();
X+ 					men = get_number();
X+ 
X+ 					if (men < 0 || men > NUMSTATUS+MAXARM)
X+ 					  break;
X+ 					if (men >= NUMSTATUS) {
X+ 					  i = curntn->arm[men-NUMSTATUS].unittyp;
X+ 					  if (i < MINLEADER || i >= MINMONSTER) {
X+ 					    errormsg("There is no such leader to group under");
X+ 					    break;
X+ 					  }
X+ 					}
X+ 					P_ASTAT = men;
X+ 				}
X+ 				break;
X  #endif OGOD
X  			default:
X  				errormsg("Invalid Input");
X***************
X*** 585,593 ****
X  			clrtoeol();
X  			refresh();
X  			nvynum = get_number();
X! 			if(nvynum<0) break;
X  #ifdef TRADE
X! 			if (curntn->nvy[nvynum].commodity==TRADED) {
X  				errormsg("Sorry - That Navy is up for trade");
X  				continue;
X  			}
X--- 630,638 ----
X  			clrtoeol();
X  			refresh();
X  			nvynum = get_number();
X! 			if(nvynum<0) continue;
X  #ifdef TRADE
X! 			if (isgod == FALSE && curntn->nvy[nvynum].commodity==TRADED) {
X  				errormsg("Sorry - That Navy is up for trade");
X  				continue;
X  			}
X***************
X*** 599,605 ****
X  			mvaddstr(ypos++,0,"OPTIONS: 1) TRANSFER / MERGE, 2) SPLIT NAVY, 3) DISBAND NAVY");
X    			clrtoeol();
X  #ifdef OGOD
X! 			if(isgod==TRUE) mvaddstr(ypos++,0,"GOD OPTIONS:  4) ADJUST SHIPS, 5) LOCATION, 6) CREW");
X  			ypos++;
X  			clrtoeol();
X  #endif OGOD
X--- 644,650 ----
X  			mvaddstr(ypos++,0,"OPTIONS: 1) TRANSFER / MERGE, 2) SPLIT NAVY, 3) DISBAND NAVY");
X    			clrtoeol();
X  #ifdef OGOD
X! 			if(isgod==TRUE) mvaddstr(ypos++,0,"GOD OPTIONS:  4) ADJUST SHIPS, 5) LOCATION, 6) CREW 7) MOVE");
X  			ypos++;
X  			clrtoeol();
X  #endif OGOD
X***************
X*** 630,635 ****
X--- 675,699 ----
X  					errormsg("Sorry -- One of the two Armies must be unloaded");
X  				}
X  				else if((newx==P_NXLOC)&&(newy==P_NYLOC)) {
X+ 					/* first check sizes */
X+ 					for(i=N_LIGHT;i<=N_HEAVY;i++) {
X+ 						if (P_NGAL(i) + SHIPS(curntn->nvy[newnavy].galleys,i) > N_MASK) {
X+ 							i = (-1);
X+ 							break;
X+ 						}
X+ 						if (P_NMER(i) + SHIPS(curntn->nvy[newnavy].merchant,i) > N_MASK) {
X+ 							i = (-1);
X+ 							break;
X+ 						}
X+ 						if (P_NWAR(i) + SHIPS(curntn->nvy[newnavy].warships,i) > N_MASK) {
X+ 							i = (-1);
X+ 							break;
X+ 						}
X+ 					}
X+ 					if (i == (-1)) {
X+ 					  errormsg("That would cause you to have too many ships of one type");
X+ 					  break;
X+ 					}
X  					crew = flthold(nvynum)*P_NCREW;
X  					people = fltmhold(nvynum)*P_NPEOP;
X  					crew += flthold(newnavy)*curntn->nvy[newnavy].crew;
X***************
X*** 691,699 ****
X  				curntn->nvy[navy].people=P_NPEOP;
X  				curntn->nvy[navy].smove=P_NMOVE;
X  					
X  				mvaddstr(LINES-2,0,"Do you wish to separate warships from remainder of fleet?");
X  				refresh();
X! 				if(getch()=='y') {
X  					curntn->nvy[navy].warships=P_NWSHP;
X  					P_NWSHP=0;
X  					NADJWAR;
X--- 755,764 ----
X  				curntn->nvy[navy].people=P_NPEOP;
X  				curntn->nvy[navy].smove=P_NMOVE;
X  					
X+ 				if (P_NWSHP != 0)
X  				mvaddstr(LINES-2,0,"Do you wish to separate warships from remainder of fleet?");
X  				refresh();
X! 				if(P_NWSHP!=0 && getch()=='y') {
X  					curntn->nvy[navy].warships=P_NWSHP;
X  					P_NWSHP=0;
X  					NADJWAR;
X***************
X*** 715,720 ****
X--- 780,786 ----
X  					break;
X  				}
X  				for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) {
X+ 					if (P_NWAR(shipsize) == 0) continue;
X  					mvprintw(ypos,0,"How Many %s Warships To Split?",fltstr[shipsize]);
X  					clrtoeol();
X  					refresh();
X***************
X*** 724,729 ****
X--- 790,796 ----
X  					(void) addwships(navy,shipsize,newnavy);
X  				}
X  				for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) {
X+ 					if (P_NMER(shipsize) == 0) continue;
X  					mvprintw(ypos,0,"How Many %s Merchants To Split?",fltstr[shipsize]);
X  					clrtoeol();
X  					refresh();
X***************
X*** 733,738 ****
X--- 800,806 ----
X  					(void) addmships(navy,shipsize,newnavy);
X  				}
X  				for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) {
X+ 					if (P_NGAL(shipsize) == 0) continue;
X  					mvprintw(ypos,0,"How Many %s Galleys To Split?",fltstr[shipsize]);
X  					clrtoeol();
X  					refresh();
X***************
X*** 791,822 ****
X  			case '4':
X  				if (isgod==TRUE) {
X  					/* ADJUST SHIPS */
X- 					P_NWSHP=0;
X- 					P_NMSHP=0;
X- 					P_NGSHP=0;
X  					for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) {
X! 						mvprintw(ypos,0,"How Many %s Warships?",fltstr[shipsize]);
X  						clrtoeol();
X  						refresh();
X  						newnavy = get_number();
X! 						if(newnavy>N_MASK||newnavy<0) newnavy=0;
X! 						(void) NADD_WAR(newnavy);
X  					}
X  					for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) {
X! 						mvprintw(ypos,0,"How Many %s Merchants?",fltstr[shipsize]);
X  						clrtoeol();
X  						refresh();
X  						newnavy = get_number();
X! 						if(newnavy>N_MASK||newnavy<0) newnavy=0;
X! 						(void) NADD_MER(newnavy);
X  					}
X  					for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) {
X! 						mvprintw(ypos,0,"How Many %s Galleys?",fltstr[shipsize]);
X  						clrtoeol();
X  						refresh();
X  						newnavy = get_number();
X! 						if(newnavy>N_MASK||newnavy<0) newnavy=0;
X! 						(void) NADD_GAL(newnavy);
X  					}
X  					NADJWAR;
X  					NADJMER;
X--- 859,908 ----
X  			case '4':
X  				if (isgod==TRUE) {
X  					/* ADJUST SHIPS */
X  					for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) {
X! 						mvprintw(ypos,0,"How Many %s Warships? [%d] ",
X! 							 fltstr[shipsize],P_NWAR(shipsize));
X  						clrtoeol();
X  						refresh();
X  						newnavy = get_number();
X! 						if (newnavy < 0 || newnavy > N_MASK) continue;
X! 						newnavy -= P_NWAR(shipsize);
X! 						if (newnavy > 0) {
X! 							(void) NADD_WAR(newnavy);
X! 						} else if (newnavy < 0) {
X! 							newnavy = -newnavy;
X! 							(void) NSUB_WAR(newnavy);
X! 						}
X  					}
X  					for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) {
X! 						mvprintw(ypos,0,"How Many %s Merchants? [%d] ",
X! 							 fltstr[shipsize], P_NMER(shipsize));
X  						clrtoeol();
X  						refresh();
X  						newnavy = get_number();
X! 						if(newnavy>N_MASK||newnavy<0) continue;
X! 						newnavy -= P_NMER(shipsize);
X! 						if (newnavy > 0) {
X! 						  (void) NADD_MER(newnavy);
X! 						} else if (newnavy < 0) {
X! 						  newnavy = -newnavy;
X! 						  (void) NSUB_MER(newnavy);
X! 						}
X  					}
X  					for(shipsize=N_LIGHT;shipsize<=N_HEAVY;shipsize++) {
X! 						mvprintw(ypos,0,"How Many %s Galleys? [%d]",
X! 							 fltstr[shipsize], P_NGAL(shipsize));
X  						clrtoeol();
X  						refresh();
X  						newnavy = get_number();
X! 						if(newnavy>N_MASK||newnavy<0) continue;
X! 						newnavy -= P_NGAL(shipsize);
X! 						if (newnavy > 0) {
X! 						  (void) NADD_GAL(newnavy);
X! 						} else if (newnavy < 0) {
X! 						  newnavy = -newnavy;
X! 						  (void) NSUB_GAL(newnavy);
X! 						}
X  					}
X  					NADJWAR;
X  					NADJMER;
X***************
X*** 850,855 ****
X--- 936,951 ----
X  					if (crew>=0 && crew<=SHIPCREW) {
X  						P_NCREW = crew;
X  						NADJCRW;
X+ 					}
X+ 				}
X+ 				break;
X+ 			case '7':
X+ 				if (isgod == TRUE) {
X+ 					mvaddstr(ypos, 0, "Set what move value? ");
X+ 					refresh();
X+ 					newnavy = get_number();
X+ 					if (newnavy <= 100 && newnavy >= 0) {
X+ 						P_NMOVE = newnavy;
X  					}
X  				}
X  				break;
X*** ocombat.c	Sat Mar  3 15:27:39 1990
X--- combat.c	Sat Mar  3 15:27:56 1990
X***************
X*** 37,42 ****
X--- 37,47 ----
X  int	dnation;		/*one nation defending in this fight*/
X  int	count=0;                /*number of armies or navies in sector*/
X  
X+ /* indicators of naval or army combat */
X+ #define COMBAT_X	0
X+ #define COMBAT_A	1
X+ #define COMBAT_N	2
X+ 
X  /************************************************************************/
X  /*	COMBAT()	run all combat on the map			*/
X  /*  	for each sector, determine if armies in with attack mode	*/
X***************
X*** 45,51 ****
X  combat()
X  {
X  	register int i,j;
X! 	char	**fought; 		/* TRUE if already fought in sctr */
X  	int	temp,ctry;
X  	int	initialized=FALSE;	/* TRUE if arrays initialized */
X  	short	armynum,nvynum;
X--- 50,56 ----
X  combat()
X  {
X  	register int i,j;
X! 	char	**fought; 		/* SET: if already fought in sctr */
X  	int	temp,ctry;
X  	int	initialized=FALSE;	/* TRUE if arrays initialized */
X  	short	armynum,nvynum;
X***************
X*** 60,66 ****
X  	/*for each nation, if in attack mode run a check*/
X  
X  	/* no sectors have been fought in yet */
X! 	for(i=0;i<MAPX;i++) for(j=0;j<MAPY;j++) fought[i][j]=FALSE;
X  
X  	for(ctry=NTOTAL-1;ctry>0;ctry--) if(isactive(ntn[ctry].active)) {
X  
X--- 65,71 ----
X  	/*for each nation, if in attack mode run a check*/
X  
X  	/* no sectors have been fought in yet */
X! 	for(i=0;i<MAPX;i++) for(j=0;j<MAPY;j++) fought[i][j]=COMBAT_X;
X  
X  	for(ctry=NTOTAL-1;ctry>0;ctry--) if(isactive(ntn[ctry].active)) {
X  
X***************
X*** 72,83 ****
X  			if((aptr->sold>0)
X  			&&(aptr->stat>=ATTACK)
X  			&&(aptr->stat<=SORTIE||aptr->stat>=NUMSTATUS)
X! 			&&(!fought[aptr->xloc][aptr->yloc])){
X  
X  			/* someone can initiate combat in xspot,yspot */
X  			xspot=aptr->xloc;
X  			yspot=aptr->yloc;
X! 			fought[xspot][yspot]=TRUE;
X  
X  			/*initialize matrix*/
X  			if( !initialized ) {
X--- 77,88 ----
X  			if((aptr->sold>0)
X  			&&(aptr->stat>=ATTACK)
X  			&&(aptr->stat<=SORTIE||aptr->stat>=NUMSTATUS)
X! 			&&(!(fought[aptr->xloc][aptr->yloc]&COMBAT_A))){
X  
X  			/* someone can initiate combat in xspot,yspot */
X  			xspot=aptr->xloc;
X  			yspot=aptr->yloc;
X! 			fought[xspot][yspot]|=COMBAT_A;
X  
X  			/*initialize matrix*/
X  			if( !initialized ) {
X***************
X*** 131,142 ****
X  		/*navy combat*/
X  		for(j=0;j<MAXNAVY;j++)
X  		if((nptr->nvy[j].warships!=0)
X! 		&&(fought[nptr->nvy[j].xloc][nptr->nvy[j].yloc]==0)
X! 		&&(sct[nptr->nvy[j].xloc][nptr->nvy[j].yloc].altitude==WATER)){
X  
X  			xspot=nptr->nvy[j].xloc;
X  			yspot=nptr->nvy[j].yloc;
X! 			fought[xspot][yspot]=1;
X  
X  			/*initialize matrix*/
X  			if( !initialized ){
X--- 136,146 ----
X  		/*navy combat*/
X  		for(j=0;j<MAXNAVY;j++)
X  		if((nptr->nvy[j].warships!=0)
X! 		&&(!(fought[nptr->nvy[j].xloc][nptr->nvy[j].yloc]&COMBAT_N))) {
X  
X  			xspot=nptr->nvy[j].xloc;
X  			yspot=nptr->nvy[j].yloc;
X! 			fought[xspot][yspot]|=COMBAT_N;
X  
X  			/*initialize matrix*/
X  			if( !initialized ){
X***************
X*** 156,166 ****
X  			if(isactive(ntn[country].active))
X  			for(nvynum=0;nvynum<MAXNAVY;nvynum++)
X  			if((NWSHP+NMSHP+NGSHP!=0)
X! 			&&(abs(NXLOC-xspot)<=2)
X! 			&&(abs(NYLOC-yspot)<=2)
X! 			&&(sct[NXLOC][NYLOC].altitude==WATER)
X  			&&(count<MGKNUM)) {
X! 				fought[NXLOC][NYLOC]=1;
X  				if((country!=ctry)
X  				&&(nptr->dstatus[country]>HOSTILE)){
X  					valid=TRUE;
X--- 160,171 ----
X  			if(isactive(ntn[country].active))
X  			for(nvynum=0;nvynum<MAXNAVY;nvynum++)
X  			if((NWSHP+NMSHP+NGSHP!=0)
X! 			&&(((NXLOC==xspot) && (NYLOC==yspot)) ||
X! 			   (sct[NXLOC][NYLOC].altitude==WATER
X! 			    &&(abs(NXLOC-xspot)<=2)
X! 			    &&(abs(NYLOC-yspot)<=2)))
X  			&&(count<MGKNUM)) {
X! 				fought[NXLOC][NYLOC]|=COMBAT_N;
X  				if((country!=ctry)
X  				&&(nptr->dstatus[country]>HOSTILE)){
X  					valid=TRUE;
X***************
X*** 804,817 ****
X  
X  	for(cnum=0;cnum<count;cnum++) if(owner[cnum]>(-1)){
X  		if( unitnum != (-1) ) cnum=unitnum;
X! 		if((side[cnum]==ATKR)&&(retreatside==ATKR)){
X! 			ntn[owner[cnum]].arm[unit[cnum]].xloc = retreatx;
X! 			ntn[owner[cnum]].arm[unit[cnum]].yloc = retreaty;
X  		}
X- 		else if((side[cnum]==DFND)&&(retreatside==DFND)){
X- 			ntn[owner[cnum]].arm[unit[cnum]].xloc = retreatx;
X- 			ntn[owner[cnum]].arm[unit[cnum]].yloc = retreaty;
X- 		}
X  		if( unitnum != (-1) ) return;
X  	}
X  }
X--- 809,824 ----
X  
X  	for(cnum=0;cnum<count;cnum++) if(owner[cnum]>(-1)){
X  		if( unitnum != (-1) ) cnum=unitnum;
X! 		if(side[cnum] == retreatside){
X! 			if ((ntn[owner[cnum]].arm[unit[cnum]].unittyp==A_MARINES)||
X! 			    (ntn[owner[cnum]].arm[unit[cnum]].unittyp==A_SAILOR)){
X! 				ntn[owner[cnum]].arm[unit[cnum]].sold *= 85;
X! 				ntn[owner[cnum]].arm[unit[cnum]].sold /= 100;
X! 			} else {
X! 				ntn[owner[cnum]].arm[unit[cnum]].xloc = retreatx;
X! 				ntn[owner[cnum]].arm[unit[cnum]].yloc = retreaty;
X! 			}
X  		}
X  		if( unitnum != (-1) ) return;
X  	}
X  }
X***************
X*** 868,875 ****
X  	 *     galley crew                      2
X  	 *     merchant crew                    4
X  	 * soldiers onboard:
X!       *     SAILOR/ARCHER                   3/4
X!       *     MARINE                          1/3
X  	 *     others                          4/3
X  	 */
X  	for(j=0;j<count;j++) if(owner[j]!=(-1)){
X--- 875,882 ----
X  	 *     galley crew                      2
X  	 *     merchant crew                    4
X  	 * soldiers onboard:
X!          *     SAILOR/ARCHER                   3/4
X!          *     MARINE                          1/3
X  	 *     others                          4/3
X  	 */
X  	for(j=0;j<count;j++) if(owner[j]!=(-1)){
X***************
X*** 959,967 ****
X  	/* calculate capture percentages */
X  	/*
X  	 *  This formula produces:
X!       *        0% capture for   1:100  odds
X  	 *        2% capture for   1:10   odds
X!       *       15% capture for   1:1    odds
X  	 *       60% capture for  10:1    odds
X  	 *      100% capture for >60:1    odds
X  	 *      with linear progression between each.
X--- 966,974 ----
X  	/* calculate capture percentages */
X  	/*
X  	 *  This formula produces:
X!          *        0% capture for   1:100  odds
X  	 *        2% capture for   1:10   odds
X!          *       15% capture for   1:1    odds
X  	 *       60% capture for  10:1    odds
X  	 *      100% capture for >60:1    odds
X  	 *      with linear progression between each.
X***************
X*** 1240,1249 ****
X  		k=0;
X  		for(i=0;i<j;i++) if(owner[j]==owner[i]) k=1;
X  		if(k==0) {
X! 		if(side[i]==DFND)
X  			fprintf(fnews,", attacker %s",ntn[owner[j]].name);
X! 		else if(side[i]==ATKR)
X  			fprintf(fnews,", defender %s",ntn[owner[j]].name);
X  		}
X  	}
X  	fprintf(fnews,"\n");
X--- 1247,1257 ----
X  		k=0;
X  		for(i=0;i<j;i++) if(owner[j]==owner[i]) k=1;
X  		if(k==0) {
X! 		if(side[j]==ATKR)
X  			fprintf(fnews,", attacker %s",ntn[owner[j]].name);
X! 		else if(side[j]==DFND)
X  			fprintf(fnews,", defender %s",ntn[owner[j]].name);
X+ 		else fprintf(fnews,", neutral %s",ntn[owner[j]].name);
X  		}
X  	}
X  	fprintf(fnews,"\n");
X*** omove.c	Sat Mar  3 15:27:41 1990
X--- move.c	Sat Mar  3 15:27:56 1990
X***************
X*** 63,68 ****
X--- 63,72 ----
X  	} else {	/*army*/
X  		mvprintw(LINES-4,0,"ARMY %d: ",armynum);
X  		clrtoeol();
X+ 		if (P_ASTAT>=NUMSTATUS) {
X+ 			groupmen = P_ASTAT - NUMSTATUS;
X+ 			P_AMOVE = curntn->arm[groupmen].smove;
X+ 		}
X  		if(P_AMOVE==0){
X  			errormsg("That Unit is Not Able to Move");
X  			redraw=DONE;
X***************
X*** 74,81 ****
X  		if(P_ASTAT>=NUMSTATUS) {
X  			mvprintw(LINES-4,10,"Member of Army Group %d!! Continue? ",P_ASTAT-NUMSTATUS);
X  			refresh();
X! 			if( getch() == 'y' )  P_ASTAT=ATTACK;
X! 			else {
X  				redraw=DONE;
X  				armornvy=AORN;
X  				return;
X--- 78,87 ----
X  		if(P_ASTAT>=NUMSTATUS) {
X  			mvprintw(LINES-4,10,"Member of Army Group %d!! Continue? ",P_ASTAT-NUMSTATUS);
X  			refresh();
X! 			if( getch() == 'y' )  {
X! 				P_ASTAT=ATTACK;
X! 				AADJSTAT;
X! 			} else {
X  				redraw=DONE;
X  				armornvy=AORN;
X  				return;
X***************
X*** 261,267 ****
X  				valid=FALSE;
X  				xcurs=oldxcurs;
X  				ycurs=oldycurs;
X! 			} else if(movecost[XREAL][YREAL] >= 0){
X  				/* LAND OF SOME TYPE */
X  				valid=FALSE;
X  				/* check for nearby water */
X--- 267,274 ----
X  				valid=FALSE;
X  				xcurs=oldxcurs;
X  				ycurs=oldycurs;
X! 			} else if(movecost[XREAL][YREAL] >= 0
X! 				  || movecost[XREAL][YREAL] == -2){
X  				/* LAND OF SOME TYPE */
X  				valid=FALSE;
X  				/* check for nearby water */
X*** oupdate.c	Sat Mar  3 15:27:45 1990
X--- update.c	Sat Mar  3 15:27:59 1990
X***************
X*** 27,32 ****
X--- 27,42 ----
X  int	**attr;			/* sector attractiveness */
X  long	**newpop;		/* storage for old population */
X  
X+ long
X+ dtol(d) double d;
X+ {
X+ 	char tempstr[BIGLTH];
X+ 	long l;
X+ 	sprintf(tempstr,"%-60.0lf",d);
X+ 	sscanf(tempstr,"%ld",&l);
X+ 	return(l);
X+ }
X+ 
X  /****************************************************************/
X  /*	UPDATE() - updates the whole world			*/
X  /****************************************************************/
X***************
X*** 625,631 ****
X  			if(rand()%100 < 30) {	/* new leader takes over */
X  				x++;
X  				for(armynum=0;armynum<MAXARM;armynum++)
X! 					if(P_ATYPE == x) break;
X  				if( armynum<MAXARM) {
X  					P_ATYPE=x-1;
X  					P_ASOLD= *(unitminsth+(x-1)%UTYPE);
X--- 635,641 ----
X  			if(rand()%100 < 30) {	/* new leader takes over */
X  				x++;
X  				for(armynum=0;armynum<MAXARM;armynum++)
X! 					if(P_ATYPE == x && P_ASOLD > 0) break;
X  				if( armynum<MAXARM) {
X  					P_ATYPE=x-1;
X  					P_ASOLD= *(unitminsth+(x-1)%UTYPE);
X***************
X*** 699,706 ****
X  				ntn[country].spellpts+=3;
X  		}
X  		if(magic(country,MA_MONST)==TRUE) ntn[country].spellpts+=2;
X! 		else if(magic(country,AV_MONST)==TRUE) ntn[country].spellpts+=1;
X! 		else if((magic(country,MI_MONST)==TRUE)
X  			&&( rand()%2==0)) ntn[country].spellpts+=1;
X  	}
X  	free(attr);
X--- 709,716 ----
X  				ntn[country].spellpts+=3;
X  		}
X  		if(magic(country,MA_MONST)==TRUE) ntn[country].spellpts+=2;
X! 		if(magic(country,AV_MONST)==TRUE) ntn[country].spellpts+=1;
X! 		if((magic(country,MI_MONST)==TRUE)
X  			&&( rand()%2==0)) ntn[country].spellpts+=1;
X  	}
X  	free(attr);
X***************
X*** 1212,1221 ****
X  			&&( A->stat<NUMSTATUS ))
X  				A->stat=FLIGHT;
X  
X! 			if((magic(country,ROADS)==1)
X  			&&(sct[AX][AY].owner!=country)){
X  				if(A->smove>7) A->smove-=4;
X! 				else A->smove=4;
X  			}
X  
X  			if((magic(country,SAPPER)==1)
X--- 1222,1231 ----
X  			&&( A->stat<NUMSTATUS ))
X  				A->stat=FLIGHT;
X  
X! 			if((magic(country,ROADS)==TRUE)
X  			&&(sct[AX][AY].owner!=country)){
X  				if(A->smove>7) A->smove-=4;
X! 				else if (A->smove>4) A->smove=4;
X  			}
X  
X  			if((magic(country,SAPPER)==1)
X***************
X*** 1411,1417 ****
X  		tempflt = (float) curntn->tfood * (100-curntn->spoilrate);
X  		curntn->tfood = (long) (tempflt / 100.0);
X  
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--- 1421,1427 ----
X  		tempflt = (float) curntn->tfood * (100-curntn->spoilrate);
X  		curntn->tfood = (long) (tempflt / 100.0);
X  
X! 		if((0.0+curntn->tgold) - GOLDTHRESH*(0.0+curntn->jewels) > 0.0){
X  			/* buy jewels off commodities board */
X  			xx=curntn->tgold-GOLDTHRESH*curntn->jewels;
X  			if (ispc(curntn->active)) {
X***************
X*** 1419,1429 ****
X  					fprintf(fm,"Message from Conquer\n\n");
X  					fprintf(fm,"Gold imbalance forced your treasury to purchase\n");
X  					fprintf(fm,"%ld jewels for %ld gold talons to compensate.\n",
X! 						xx/GODPRICE*GODJEWL,xx);
X  					mailclose(country);
X  				}
X  			}
X! 			curntn->jewels += (xx/GODPRICE*GODJEWL);
X  			curntn->tgold  -= xx;
X  		}
X  
X--- 1429,1440 ----
X  					fprintf(fm,"Message from Conquer\n\n");
X  					fprintf(fm,"Gold imbalance forced your treasury to purchase\n");
X  					fprintf(fm,"%ld jewels for %ld gold talons to compensate.\n",
X! 						dtol((double)xx*GODJEWL/GODPRICE)
X! 						,xx);
X  					mailclose(country);
X  				}
X  			}
X! 			curntn->jewels += dtol((double)xx*GODJEWL/GODPRICE);
X  			curntn->tgold  -= xx;
X  		}
X  
X*** ocommands.c	Sat Mar  3 15:27:39 1990
X--- commands.c	Sat Mar  3 15:28:00 1990
X***************
X*** 189,195 ****
X  			mvaddstr(LINES-3,7,"What nation owner:");
X  			refresh();
X  			x = get_country();
X! 			if (x<NTOTAL) sptr->owner=x;
X  			reset_god();
X  			return;
X  		case 'p':
X--- 189,195 ----
X  			mvaddstr(LINES-3,7,"What nation owner:");
X  			refresh();
X  			x = get_country();
X! 			if (x>0 && x<NTOTAL) sptr->owner=x;
X  			reset_god();
X  			return;
X  		case 'p':
X***************
X*** 200,206 ****
X  			}
X  			mvaddstr(LINES-3,7,"new population for sector: ");
X  			refresh();
X! 			sptr->people = (long) get_number();
X  			reset_god();
X  			return;
X  		case 't':
X--- 200,208 ----
X  			}
X  			mvaddstr(LINES-3,7,"new population for sector: ");
X  			refresh();
X! 			metal = get_number();
X! 			if (metal <= (-1)) return;
X! 			sptr->people = metal;
X  			reset_god();
X  			return;
X  		case 't':
X***************
X*** 222,228 ****
X  				mvaddstr(LINES-1,7,"new sector value: ");
X  				refresh();
X  				x = get_number();
X! 				if(x<100 && x>=0)
X  				if(y>END_MINE) {
X  					sptr->jewels = (char)x;
X  					sptr->metal = 0;
X--- 224,230 ----
X  				mvaddstr(LINES-1,7,"new sector value: ");
X  				refresh();
X  				x = get_number();
X! 				if(x<100 && x>0) {
X  				if(y>END_MINE) {
X  					sptr->jewels = (char)x;
X  					sptr->metal = 0;
X***************
X*** 230,235 ****
X--- 232,241 ----
X  					sptr->metal  = (char)x;
X  					sptr->jewels = 0;
X  				}
X+ 				} else {
X+ 					sptr->jewels = 0;
X+ 					sptr->metal = 0;
X+ 				}
X  			} else {
X  				sptr->jewels=0;
X  				sptr->metal=0;
X***************
X*** 1119,1126 ****
X  			if(strncmp(line,"END",3)==0) contd=TRUE;
X  		}
X  		standout();
X! 		mvaddstr(LINES-3,(COLS/2)-22,"HIT ANY KEY TO CONTINUE");
X! 		mvaddstr(LINES-2,(COLS/2)-22,"HIT RETURN TO DELETE MESSAGE");
X  		standend();
X  		refresh();
X  		inpch=getch();
X--- 1125,1132 ----
X  			if(strncmp(line,"END",3)==0) contd=TRUE;
X  		}
X  		standout();
X! 		mvaddstr(LINES-3,(COLS/2)-13,"HIT ANY KEY TO CONTINUE");
X! 		mvaddstr(LINES-2,(COLS/2)-16,"HIT RETURN TO DELETE MESSAGE");
X  		standend();
X  		refresh();
X  		inpch=getch();
X*** odata.c	Sat Mar  3 15:27:39 1990
X--- data.c	Sat Mar  3 15:28:01 1990
X***************
X*** 93,99 ****
X  100,50,100,50,250,125,
X  250,50,500,100,250,125,
X  50, 50, 50, 75, 75,
X! 100, 50, 150, 150, 150,
X  175, 150, 500, 500, 1000
X  };
X  
X--- 93,99 ----
X  100,50,100,50,250,125,
X  250,50,500,100,250,125,
X  50, 50, 50, 75, 75,
X! 75, 50, 150, 150, 150,
X  175, 150, 500, 500, 1000
X  };
X  
X***************
X*** 262,268 ****
X  /*              0         0         0         0         0         0 */
X  /* a value of x means any designation is possible */
X  /*              fwbcwmhpgcfshfrwdpbcpstgponpmldpllpiopshmtpbcltismasspdsgridp*/
X! char *tg_stype="xffffttttffffffffffftxlxllttuuctcccfffxxtccmmmmmmmm$$$$$$$$$$0";
X  char *tg_value="13335157911433442331131135734567789123937571111111111111111110";
X  
X  char	*tg_name[] = {
X--- 262,268 ----
X  /*              0         0         0         0         0         0 */
X  /* a value of x means any designation is possible */
X  /*              fwbcwmhpgcfshfrwdpbcpstgponpmldpllpiopshmtpbcltismasspdsgridp*/
X! char *tg_stype="xffffttttffffffffffftxlxllttuuctcccfff?xtccmmmmmmmm$$$$$$$$$$0";
X  char *tg_value="13335157911433442331131135734567789123937571111111111111111110";
X  
X  char	*tg_name[] = {
X*** omagic.c	Sat Mar  3 15:27:40 1990
X--- magic.c	Sat Mar  3 15:28:01 1990
X***************
X*** 628,636 ****
X  			}
X  		} else {
X  			if (ntn[i].race==ORC) 
X! 				mvaddstr((*count)++,0,"  Wrong Race");
X! 			else mvaddstr((*count)++,0,"  That Nation is Outside Your Influence");
X  		}
X  	}
X  	return(done);
X  }
X--- 628,638 ----
X  			}
X  		} else {
X  			if (ntn[i].race==ORC) 
X! 				mvaddstr((*count)++,0,"  That Nation is Outside Your Influence");
X! 			else mvaddstr((*count)++,0,"  Wrong Race");
X  		}
X+ 		refresh();
X+ 		sleep(2);
X  	}
X  	return(done);
X  }
X*** omain.c	Sat Mar  3 15:27:41 1990
X--- main.c	Sat Mar  3 15:28:02 1990
X***************
X*** 61,67 ****
X  	int geteuid(), getuid(), setuid();
X  	register int i,j;
X  	char name[NAMELTH+1],filename[FILELTH];
X! 	void srand(),init_hasseen(),mapprep();
X  	int getopt();
X  	char passwd[PASSLTH+1];
X  	long time();
X--- 61,70 ----
X  	int geteuid(), getuid(), setuid();
X  	register int i,j;
X  	char name[NAMELTH+1],filename[FILELTH];
X! #ifdef __STDC__
X! 	void srand();
X! #endif
X! 	void init_hasseen(),mapprep();
X  	int getopt();
X  	char passwd[PASSLTH+1];
X  	long time();
X***************
X*** 1119,1125 ****
X  					mvprintw(nfound2*2+count,COLS-20,"%s: %d men  ",ntn[i].name,enemy);
X  				else if(magic(i,THE_VOID)==TRUE)
X  				mvprintw(nfound2*2+count,COLS-20,"%s: ?? men  ",ntn[i].name);
X! 				else mvprintw(nfound2*2+count,COLS-20,"%s: %ld men  ",ntn[i].name,(enemy*(rand()%60+70)/100));
X  				count++;
X  			}
X  			enemy=0;
X--- 1122,1132 ----
X  					mvprintw(nfound2*2+count,COLS-20,"%s: %d men  ",ntn[i].name,enemy);
X  				else if(magic(i,THE_VOID)==TRUE)
X  				mvprintw(nfound2*2+count,COLS-20,"%s: ?? men  ",ntn[i].name);
X! 				else {
X! 					srand(i*17+enemy+TURN*3);
X! 					mvprintw(nfound2*2+count,COLS-20,"%s: %ld men  ",ntn[i].name,(enemy*(rand()%60+70)/100));
X! 					srand((unsigned) time((long *) 0));
X! 				}
X  				count++;
X  			}
X  			enemy=0;
X***************
X*** 1137,1143 ****
X  					mvprintw(nfound2*2+count,COLS-20,"%s: %d ships",ntn[i].name,enemy);
X  				else if(magic(i,THE_VOID)==TRUE)
X  				mvprintw(nfound2*2+count,COLS-20,"%s: ?? ships",ntn[i].name);
X! 				else mvprintw(nfound2*2+count,COLS-20,"%s: %ld ships",ntn[i].name,(enemy*(rand()%60+70)/100));
X  				count++;
X  			}
X  		}
X--- 1144,1154 ----
X  					mvprintw(nfound2*2+count,COLS-20,"%s: %d ships",ntn[i].name,enemy);
X  				else if(magic(i,THE_VOID)==TRUE)
X  				mvprintw(nfound2*2+count,COLS-20,"%s: ?? ships",ntn[i].name);
X! 				else {
X! 					srand(i*17+enemy+TURN*3);
X! 					mvprintw(nfound2*2+count,COLS-20,"%s: %ld ships",ntn[i].name,(enemy*(rand()%60+70)/100));
X! 					srand((unsigned) time((long *) 0));
X! 				}
X  				count++;
X  			}
X  		}
X***************
X*** 1177,1184 ****
X  
X  		if((sptr->owner==country)||(country==0)||(magic(country,NINJA)==TRUE))
X  		mvprintw(LINES-9,COLS-20,"people: %6d",sptr->people);
X! 		else
X! 		mvprintw(LINES-9,COLS-20,"people: %6d",sptr->people*(rand()%60+70)/100);
X  		clrtoeol();
X  		if((sptr->owner==country)
X  		||(sptr->owner==0)
X--- 1188,1198 ----
X  
X  		if((sptr->owner==country)||(country==0)||(magic(country,NINJA)==TRUE))
X  		mvprintw(LINES-9,COLS-20,"people: %6d",sptr->people);
X! 		else {
X! 			srand(country*17+TURN*3+sptr->people);
X! 			mvprintw(LINES-9,COLS-20,"people: %6d",sptr->people*(rand()%60+70)/100);
X! 			srand((unsigned) time((long *) 0));
X! 		}
X  		clrtoeol();
X  		if((sptr->owner==country)
X  		||(sptr->owner==0)
X*** onpc.c	Sat Mar  3 15:27:42 1990
X--- npc.c	Sat Mar  3 15:28:02 1990
X***************
X*** 487,493 ****
X  	for(armynum=1;armynum<MAXARM;armynum++) if(P_ASOLD>0){
X  		/* move army back if too far out */
X  		ok = 0;
X! 		if (P_ASOLD < MINLEADER && P_ASOLD!=A_MILITIA) {
X  			curntn->tmil += P_ASOLD;
X  		}
X  		for(x=(int)P_AXLOC-3;x<=(int)P_AXLOC+3;x++)
X--- 487,493 ----
X  	for(armynum=1;armynum<MAXARM;armynum++) if(P_ASOLD>0){
X  		/* move army back if too far out */
X  		ok = 0;
X! 		if (P_ATYPE < MINLEADER && P_ASOLD!=A_MILITIA) {
X  			curntn->tmil += P_ASOLD;
X  		}
X  		for(x=(int)P_AXLOC-3;x<=(int)P_AXLOC+3;x++)
X***************
X*** 562,567 ****
X--- 562,568 ----
X  
X  	/*too few soldiers on garrison*/
X  	/*diff is number to change mil in cap (>0)*/
X+ 	if (*(u_enmetal + (P_ATYPE%UTYPE)) > 0)
X  	diff = (long) min(ideal-P_ASOLD,(int) (curntn->metals / *(u_enmetal + (P_ATYPE%UTYPE))));
X  
X  	diff=(long) min((int) diff, sct[curntn->capx][curntn->capy].people/2L);
X***************
X*** 636,641 ****
X--- 637,643 ----
X  	&&( P_ATYPE<MINLEADER )
X  	&&( P_ASOLD < TAKESECTOR )
X  	&&( curntn->tgold > 0 )
X+ 	&&(curntn->metals >= (TAKESECTOR+20-P_ASOLD)* *(u_enmetal + (P_ATYPE%UTYPE)))
X  	&&( fort_val(&sct[P_AXLOC][P_AYLOC]) > 0)
X  	&&( sct[P_AXLOC][P_AYLOC].owner == country )) {
X  #ifdef DEBUG
X***************
X*** 647,652 ****
X--- 649,655 ----
X  		else curntn->tgold-=(TAKESECTOR+20-P_ASOLD)*
X  			*(u_encost + (P_ATYPE%UTYPE));
X  		curntn->tmil += TAKESECTOR+20-P_ASOLD;
X+ 		curntn->metals -= ((TAKESECTOR+20-P_ASOLD)* *(u_enmetal + (P_ATYPE%UTYPE)));
X  		P_ASOLD = TAKESECTOR+20;
X  	}
X  
X***************
X*** 1160,1165 ****
X--- 1163,1177 ----
X  
X  	if( curntn->tgold > curntn->tciv ) curntn->charity=10;
X  	else curntn->charity=0;
X+ 	if( (curntn->tsctrs < 20) || (curntn->score < 20) ) {
X+ 		if( curntn->tax_rate < 10 )
X+ 			curntn->tax_rate = 10;
X+ 	} else {
X+ 		curntn->tax_rate = (int)min((int)(curntn->prestige/5),(int)((curntn->popularity+curntn->terror+3*curntn->charity)/10));
X+ 		curntn->tax_rate = (int)min(curntn->tax_rate,20);
X+ 		if(curntn->tax_rate < 4)
X+ 			curntn->tax_rate = 4;
X+ 	}
X  
X  	/* INTELLIGENT SECTOR REDESIGNATION */
X  	/* note that only redesignate pc's if not designated yet */
X*** otrade.c	Sat Mar  3 15:27:44 1990
X--- trade.c	Sat Mar  3 15:28:03 1990
X***************
X*** 51,57 ****
X  #ifdef ADMIN
X  char *tradefail[NUMPRODUCTS] = { "lack of gold", "lack of food",
X  	"lack of metal", "lack of jewels", "land not owned",
X! 	"no available armies", "no available navies"};
X  #endif ADMIN
X  #ifdef CONQUER
X  /* Use this when you wish to bid something */
X--- 51,58 ----
X  #ifdef ADMIN
X  char *tradefail[NUMPRODUCTS] = { "lack of gold", "lack of food",
X  	"lack of metal", "lack of jewels", "land not owned",
X! 	"unavailable or destroyed armies",
X! 	"unavailable or destoryed navies"};
X  #endif ADMIN
X  #ifdef CONQUER
X  /* Use this when you wish to bid something */
X***************
X*** 145,151 ****
X  					lvar2[holdint],
X  					commodities[type2[holdint]]);
X  				}
X! 				if (count>16) {
X  					standout();
X  					mvaddstr(LINES-2,30,"Hit Any Key to Continue");
X  					standend();
X--- 146,152 ----
X  					lvar2[holdint],
X  					commodities[type2[holdint]]);
X  				}
X! 				if (count>LINES-8) {
X  					standout();
X  					mvaddstr(LINES-2,30,"Hit Any Key to Continue");
X  					standend();
X***************
X*** 571,576 ****
X--- 572,578 ----
X  		}
X  	}
X  	mvprintw((*count)++,0," JUST ENTERED %c so food value is %d", entered,temp);
X+ 	refresh();
X  	return(temp);
X  }
X  
X***************
X*** 659,664 ****
X--- 661,667 ----
X  int cntry,item,isup,extint;
X  long longval;
X  {
X+ 	if (cntry == -1) return;
X  	switch(item)
X  	{
X  	case TDGOLD:
X***************
X*** 722,727 ****
X--- 725,731 ----
X  	case TDARMY:
X  		/* find army number for cntry2 */
X  		/* give army to cntry2 */
X+ 		if(ntn[cntry1].arm[extra].sold <= 0) return -1;
X  		while(unitnum==(-1)&&unitcount<MAXARM) {
X  			if (ntn[cntry2].arm[unitcount].sold<=0) {
X  				/* give army to cntry2 */
X***************
X*** 743,748 ****
X--- 747,755 ----
X  		break;
X  	case TDSHIP:
X  		/* give navy to cntry1 */
X+ 		if(!(ntn[cntry1].nvy[extra].merchant!=0
X+ 		   && ntn[cntry1].nvy[extra].warships!=0
X+ 		   && ntn[cntry1].nvy[extra].galleys!=0) ) return -1;
X  		while(unitnum==(-1)&&unitcount<MAXARM){
X  			if ((int)ntn[cntry2].nvy[unitcount].merchant+ntn[cntry2].nvy[unitcount].warships+ntn[cntry2].nvy[unitcount].galleys == 0) {
X  				/* give navy to cntry2 */
X***************
X*** 787,793 ****
X  		returnval=longval;
X  		break;
X  	case TDLAND:
X! 		if (cntry2!=sct[(int)longval][extint].owner)
X  		returnval=(long)tofood( &sct[(int)longval][extint],cntry1);
X  		break;
X  	case TDARMY:
X--- 794,800 ----
X  		returnval=longval;
X  		break;
X  	case TDLAND:
X! 		if (cntry2 == sct[(int)longval][extint].owner)
X  		returnval=(long)tofood( &sct[(int)longval][extint],cntry1);
X  		break;
X  	case TDARMY:
X***************
X*** 795,800 ****
X--- 802,808 ----
X  		returnval=armyvalue(cntry2,extint);
X  		break;
X  	case TDSHIP:
X+ 		curntn = &ntn[cntry2];
X  		if (flthold(extint)>0)
X  		returnval = (long)flthold(extint);
X  		break;
X***************
X*** 976,982 ****
X  				whobuy[type1[itemnum]]=natn[itemnum];
X  			} else {
X  				/* return bid */
X! 				takeback(whobuy[itemnum],
X  					type2[type1[itemnum]],
X  					lvar1[itemnum],(int)lvar2[itemnum],FALSE);
X  			}
X--- 984,990 ----
X  				whobuy[type1[itemnum]]=natn[itemnum];
X  			} else {
X  				/* return bid */
X! 				takeback(natn[itemnum],
X  					type2[type1[itemnum]],
X  					lvar1[itemnum],(int)lvar2[itemnum],FALSE);
X  			}
X***************
X*** 995,1000 ****
X--- 1003,1009 ----
X  	for (count=0;count<itemnum;count++) {
X  		if (deal[count]==SELL) {
X  			/* adjust the displayed value */
X+ 			if (type1[count] != TDLAND)
X  			lvar1[count]=gettval(0,natn[count],type1[count],lvar1[count],extra[count]);
X  			/* keep unsold items up for sale */
X  			if(lvar1[count]>=0) fprintf(tfile,"%d %d %d %d %ld %ld %d\n", deal[count], natn[count],type1[count],type2[count],lvar1[count],lvar2[count],extra[count]);
X***************
X*** 1013,1018 ****
X--- 1022,1029 ----
X  					ntn[whobuy[count]].name,ntn[natn[count]].name,tradefail[type2[count]]);
X  				/* place it on the list for next turn */
X  				/* adjust the displayed value */
X+ 				/* let land fail during trade */
X+ 				if (type1[count] != TDLAND)
X  				lvar1[count]=gettval(0,natn[count],type1[count],lvar1[count],extra[count]);
X  				if(lvar1[count]>=0) fprintf(tfile,"%d %d %d %d %ld %ld %d\n", SELL, natn[count],type1[count],type2[count],lvar1[count],lvar2[count],extra[count]);
X  			} else {
X***************
X*** 1026,1031 ****
X--- 1037,1108 ----
X  		}
X  	}
X  	fclose(tfile);
X+ }
X+ 
X+ /* remove a nations items from the trading board */
X+ void 
X+ fixtrade (cntry)
X+ int cntry;
X+ {
X+ 	FILE *tfile;
X+ 	int holdint, notopen=FALSE;
X+ 	int type1[MAXITM], type2[MAXITM], deal[MAXITM], extra[MAXITM];
X+ 	int natn[MAXITM], itemnum, getland(), gettrade(), checkland();
X+ 	long lvar1[MAXITM], lvar2[MAXITM], armyvalue();
X+ 	void  setaside(), takeback();
X+ 
X+ 	/* open trading file */
X+ 	if ((tfile=fopen(tradefile,"r")) == NULL ) {
X+ 		notopen=TRUE;
X+ 	}
X+ 	itemnum = 0;
X+ 
X+ 	/* read in all of the data */
X+ 	while (notopen==FALSE && !feof(tfile)) 
X+ 	{
X+ 		if (fscanf(tfile,"%d %d %d %d %ld %ld %d\n",&deal[itemnum],
X+ 			&natn[itemnum],&type1[itemnum],&type2[itemnum],
X+ 			&lvar1[itemnum],&lvar2[itemnum],&extra[itemnum]) == 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+ 	/* go through list of commodities */
X+ 
X+ 	for ( holdint=0; holdint<itemnum; holdint++) 
X+ 	{
X+ 		if ( deal[holdint]==SELL ) 
X+ 		{
X+ 
X+ 			if ( natn[holdint] == cntry )
X+ 			{
X+ 				/* remove it from market */
X+ 
X+ 				if ( (tfile = fopen(tradefile,"a+"))==NULL)
X+ 				{
X+ 					printf("Error opening file for trading");
X+ 					abrt();
X+ 				}
X+ 
X+ 				fprintf(tfile, "%d %d %d %d %ld %ld %d\n", 
X+ 				 NOSALE, natn[holdint], holdint, 0, 0L, 0L, 0);
X+ 
X+ 				fclose(tfile);
X+ 
X+ 				takeback( natn[holdint], type1[holdint], lvar1[holdint],
X+ 					extra[holdint], FALSE);
X+ 
X+ 			}  /* natn == cntry */
X+ 
X+ 		} /* SELL order */
X+ 
X+ 	} /* loop through commodities */
X  }
X  #endif ADMIN
X  #endif TRADE
X*** ocheck.c	Sat Mar  3 15:27:39 1990
X--- check.c	Sat Mar  3 15:28:03 1990
X***************
X*** 18,29 ****
X  	register struct s_nation	*nptr;
X  	register int	i;
X  	register int	country;
X  	struct army	*a;
X  
X  	for( country = 0; country < NTOTAL; country++ ) {
X  		nptr = &ntn[country];
X  
X! 		if(nptr->active == 0) continue;
X  		if( nptr->metals < 0.0 ) {
X  			fprintf( stderr, "file %s: line %d: nation[%d] metal = %ld\n",
X  				__file__, __line__, country, nptr->metals );
X--- 18,30 ----
X  	register struct s_nation	*nptr;
X  	register int	i;
X  	register int	country;
X+ 	int j, k;
X  	struct army	*a;
X  
X  	for( country = 0; country < NTOTAL; country++ ) {
X  		nptr = &ntn[country];
X  
X! 		if(country !=0 && nptr->active == 0) continue;
X  		if( nptr->metals < 0.0 ) {
X  			fprintf( stderr, "file %s: line %d: nation[%d] metal = %ld\n",
X  				__file__, __line__, country, nptr->metals );
X***************
X*** 54,68 ****
X  					__file__, __line__, country, i, a->yloc );
X  				a->yloc = 0;
X  			}
X  			if( a->stat != ONBOARD && sct[a->xloc][a->yloc].altitude==WATER ) {
X  				fprintf( stderr, "file %s: line %d: nation[%d] army[%d] loc=%d,%d (water) men=%d\n",
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  			}
X  		} /* for */
X  
X--- 55,101 ----
X  					__file__, __line__, country, i, a->yloc );
X  				a->yloc = 0;
X  			}
X+ 			if( a->stat == ONBOARD) {
X+ 				if (a->smove != 0) {
X+ 					fprintf( stderr, "file %s: line %d: nation[%d] army[%d] onboard move = %d\n",
X+ 						__file__, __line__, country, i, a->smove );
X+ 					a->smove = 0;
X+ 				}
X+ 				k = 0;
X+ 				for (j = 0; j < MAXNAVY; j++) {
X+ 					if (nptr->nvy[j].warships == 0
X+ 					  && nptr->nvy[j].merchant == 0
X+ 					  && nptr->nvy[j].galleys == 0)
X+ 						continue;
X+ 					if (nptr->nvy[j].armynum == i) {
X+ 						k = 1;
X+ 					}
X+ 				}
X+ 				if (k == 0) {
X+ 					fprintf(stderr, "files %s: line %d: nation[%d] army[%d] onboard nothing\n",
X+ 						__file__,__line__,country,i);
X+ 					a->stat = DEFEND;
X+ 				}
X+ 			}
X  			if( a->stat != ONBOARD && sct[a->xloc][a->yloc].altitude==WATER ) {
X  				fprintf( stderr, "file %s: line %d: nation[%d] army[%d] loc=%d,%d (water) men=%d\n",
X  				__file__,__line__,country,i,a->xloc,a->yloc,a->sold);
X  				a->sold = 0;
X  			}
X! 		} /* for */
X! 
X! 		for( i = 0; i < MAXNAVY; i++ ) {
X! 			if (nptr->nvy[i].warships == 0
X! 			  && nptr->nvy[i].merchant == 0
X! 			  && nptr->nvy[i].galleys == 0)
X! 				continue;
X! 			if (nptr->nvy[i].armynum != MAXARM) {
X! 				a = &(nptr->arm[nptr->nvy[i].armynum]);
X! 				if (a->sold == 0 || a->stat != ONBOARD) {
X! 					fprintf(stderr, "file %s: line %d: nation[%d] navy[%d] carrying invalid troop\n",
X! 					       __file__,__line__,country,i);
X! 					nptr->nvy[i].armynum = MAXARM;
X! 				}
X  			}
X  		} /* for */
X  
X*** onavy.c	Sat Mar  3 15:27:42 1990
X--- navy.c	Sat Mar  3 15:28:03 1990
X***************
X*** 423,430 ****
X  			}
X  			P_ASTAT=DEFEND;
X  			P_NARMY=MAXARM;
X! 			if ((sct[XREAL][YREAL].designation!=DCITY
X! 			&& sct[XREAL][YREAL].designation!=DCAPITOL)
X  			|| P_NMOVE < N_CITYCOST) {
X  				P_NMOVE=0;
X  			} else {
X--- 423,433 ----
X  			}
X  			P_ASTAT=DEFEND;
X  			P_NARMY=MAXARM;
X! 			if (!((sct[XREAL][YREAL].designation==DCITY
X! 			|| sct[XREAL][YREAL].designation==DCAPITOL)
X! 			&& (sct[XREAL][YREAL].owner==country
X! 			|| (!ntn[sct[XREAL][YREAL].owner].dstatus[country]!=UNMET
X! 			&& ntn[sct[XREAL][YREAL].owner].dstatus[country]<=NEUTRAL)))
X  			|| P_NMOVE < N_CITYCOST) {
X  				P_NMOVE=0;
X  			} else {
X***************
X*** 495,502 ****
X  				P_ASTAT=ONBOARD;
X  				P_AMOVE=0;
X  				P_NARMY=armynum;
X! 				if ((sct[XREAL][YREAL].designation!=DCITY
X! 				&& sct[XREAL][YREAL].designation!=DCAPITOL)
X  				|| P_NMOVE < N_CITYCOST) {
X  					P_NMOVE=0;
X  				} else {
X--- 498,508 ----
X  				P_ASTAT=ONBOARD;
X  				P_AMOVE=0;
X  				P_NARMY=armynum;
X! 				if (!((sct[XREAL][YREAL].designation==DCITY
X! 				|| sct[XREAL][YREAL].designation==DCAPITOL)
X! 				&& (sct[XREAL][YREAL].owner==country
X! 				|| (!ntn[sct[XREAL][YREAL].owner].dstatus[country]!=UNMET
X! 				&& ntn[sct[XREAL][YREAL].owner].dstatus[country]<=NEUTRAL)))
X  				|| P_NMOVE < N_CITYCOST) {
X  					P_NMOVE=0;
X  				} else {
X*** otxt3	Sat Mar  3 15:27:44 1990
X--- txt3	Sat Mar  3 15:28:04 1990
X***************
X*** 1,25 ****
X!                               MAGIC POWERS
X  
X! Magic powers differentiate your nation from all the other nations in the
X! world.  There are three types of powers - truly MAGICAL powers, which
X! usually involve summoning or spell use, CIVILIAN powers, which are related
X! to civilization and trade, and MILITARY powers, which measure your ability
X! to make war.  
X  
X! All nations start with at least one power (based on race or class) and can 
X! purchase additional powers by expending jewels.  On the Magic Screen ('M'), 
X! if you have enough jewels, you will be asked if you wish to buy a magic
X  power.
X!  
X! The magic screen also permits you to see what powers you have, and to
X! takeover ORC nations if you are an ORC nation with the appropriate powers.
X  END
X!                             HOW TO GET MAGIC
X  
X! Magic powers cost jewels to obtain; the chance to obtain a power is based on 
X! your nations magic ability.  The formulae for this is to take two to the 
X! power of the sum of the number of powers you have from that type and half 
X! the number of other powers times your base value:
X  
X  jewel cost for civilian power = Base * 2**( #mgk/2 + #civ + #mil/2 )
X  
X--- 1,25 ----
X!                                 MAGIC POWERS
X  
X! Magic powers differentiate your nation from all  the  other  nations  in  the
X! world.  There are three types of powers - truly MAGICAL powers, which usually
X! involve summoning or spell use, CIVILIAN powers, which are related to civili-
X! zation  and  trade,  and  MILITARY powers, which measure your ability to make
X! war.
X  
X! All nations start with at least one power (based on race or  class)  and  can
X! purchase  additional  powers by expending jewels.  On the Magic Screen ('M'),
X! if you have enough jewels, you will be asked if  you  wish  to  buy  a  magic
X  power.
X! 
X! The magic screen also permits you to see what powers you have, and  to  take-
X! over ORC nations if you are an ORC nation with the appropriate powers.
X  END
X!                               HOW TO GET MAGIC
X  
X! Magic powers cost jewels to obtain; the cost to obtain a power  is  based  on
X! your  nations  magic  ability.   The  formulae for this is to take two to the
X! power of the sum of the number of powers you have from that type and half the
X! number of other powers times your base value:
X  
X  jewel cost for civilian power = Base * 2**( #mgk/2 + #civ + #mil/2 )
X  
X***************
X*** 102,145 ****
X  Enhance Attack  -- 30% increase in attack at a cost of 1 spell pt / 300 men
X  Enhance Defense -- 30% increase in defense at a cost of 1 spell pt / 300 men
X  
X!    All of the above spells except summoning have an effect area of one army
X! unit and a duration of one turn.  Flight and the Combat Enhancements each
X! cause the unit to lose one movement point due to the change in status.
X  END
X!                         SUMMONED MONSTERS
X  
X! A monster unit represents one monster, but is the equivalent in combat of an
X  army of the given number of men.  When summoned, they appear in your Capitol,
X! and are yours to command until you disband them or can not afford to pay
X! their per/turn jewel cost *and* 5x that cost in gold.  Monsters may be
X! wounded in combat as can normal army units.  Wounded monsters have a percent
X  chance of dying based on the percent damage taken (a dragon (1000 men) taking
X! 200 equivalent men of damage has a 20% chance of dying).  Next turn, however
X! its strength will be fully restored (1000 men again).  A number of the
X! monsters will also have the ability of flight.
X  
X! Spell points can accumulate from turn to turn, but there is a 25% chance
X! that half your unused spell points disappear each turn... this gives you
X! some incentive to use them.
X  END
X                          SUMMONED MONSTER TYPES
X  
X             spell    combat                 jewels      power
X             points   bonus    move    men    turn       prerequisites
X! SPIRIT        2       +0      x1      50     1000
X! ASSASSIN      2      +20      x1      50      400      NINJA
X! EFREET        2      +10      x1.5    50      400      DERVISH
X! GARGOYLE      2      +10      x1      75      450      MI_MONST
X! WRAITH        2      +10      x1      75      450      VAMPIRE
X! HERO          2       +0      x1     100      200      WARRIOR
X! CENTAUR       2      +10      x1.5    50      200      CAVALRY
X! GIANT         5       +0      x1     150     2100
X! SUPERHERO     5      +15      x1     150      450      WARLORD
X! MUMMY         5      +15      x1     150     1000      VAMPIRE
X! ELEMENTAL     5       +5      x1.5   175     1900      SORCERER
X! MINOTAUR      5      +20      x1     150     2100      DESTROYER
X! DEMON         10     +50      x1     500     6000      DESTROYER
X! BALROG        10     +40      x1.5   500     6000      WIZARD & VAMPIRE
X! DRAGON        15     +50      x2    1000    10000      MA_MONST & WIZARD
X  END
X  DONE
X--- 102,162 ----
X  Enhance Attack  -- 30% increase in attack at a cost of 1 spell pt / 300 men
X  Enhance Defense -- 30% increase in defense at a cost of 1 spell pt / 300 men
X  
X! All of the above spells except summoning have an effect area of one army unit
X! and  a  duration  of one turn.  Flight and the Combat Enhancements each cause
X! the unit to lose one movement point due to the change in status.
X  END
X!                               SUMMONED MONSTERS
X  
X! A monster unit represents one monster, but is the equivalent in combat of  an
X  army of the given number of men.  When summoned, they appear in your Capitol,
X! and are yours to command until you disband them or  can  not  afford  to  pay
X! their  per/turn  jewel  cost  *and*  5x  that  cost in gold.  Monsters may be
X! wounded in combat as can normal army units.  Wounded monsters have a  percent
X  chance of dying based on the percent damage taken (a dragon (1000 men) taking
X! 200 equivalent men of damage has a 20% chance of dying).  Next turn,  however
X! its  strength  will be fully restored (1000 men again).  A number of the mon-
X! sters will also have the ability of flight.
X  
X! Spell points can accumulate from turn to turn, but there is a 25% chance that
X! half  your  unused  spell points disappear each turn....  This gives you some
X! incentive to use them.
X  END
X                          SUMMONED MONSTER TYPES
X  
X             spell    combat                 jewels      power
X             points   bonus    move    men    turn       prerequisites
X! Spirit        2       +0      x1      50     1000
X! Assasin       2      +20      x1      50      400      NINJA
X! Efreet        2      +10      x1.5    50      400      DERVISH
X! Gargoyl       2      +10      x1      75      450      MI_MONST
X! Wraith        2      +10      x1      75      450      VAMPIRE
X! Hero          2       +0      x1      75      200      WARLORD
X! Centaur       2      +10      x1.5    50      200      CAVALRY
X! Giant         5       +0      x1     150     2100
X! Suphero       5      +15      x1     150      450      WARRIOR
X! Mummy         5      +15      x1     150     1000      VAMPIRE
X! Elmentl       5       +5      x1.5   175     1900      SORCERER
X! Mintaur       5      +20      x1     150     2100      DESTROYER
X! Daemon        10     +50      x1     500     6000      DESTROYER
X! Balrog        10     +40      x1.5   500     6000      WIZARD & VAMPIRE
X! Dragon        15     +50      x2    1000    10000      MA_MONST & WIZARD
X! END
X!                    FURTHER RESTRICTIONS ON ACQUIRING MAGIC
X! 
X! Note: This applies only to powers acquired during the course of the game  and
X! not  to innate powers of nations.  Further, extra random powers bought by new
X! nations are considered to be bought  on  their  first  turn  as  their  first
X! action.
X! 
X! God only:              KNOWALL
X! Orc only:              MI_MONST, AV_MONST, MA_MONST, BREEDER
X! PC only:               ARMOR, AVIAN, SAPPER,
X!                        DEMOCRACY, NINJA, ROADS, SAILOR, SLAVER,
X!                        SUMMON, WYZARD, SORCEROR
X! Forbidden to Dwarves:  SUMMON, WYZARD, SORCEROR
X! Forbidden to Elves:    DESTROYER, VAMPIRE, MINER
X! Forbidden to Orcs:     RELIGION, CAVALRY
X! Forbidden to NPC's:    CAVALRY
X  END
X  DONE
X*** ospew.c	Sat Mar  3 15:27:43 1990
X--- spew.c	Sat Mar  3 15:28:05 1990
X***************
X*** 95,106 ****
X  int n;
X  FILE *fp;
X  {
X! 	char *fname;
X  	char main_class[20];
X  	int i;
X  	HowMany = n;
X  
X! 	fname = DEFFILE;
X  	InFile = fopen( fname, "r" );
X  	if( InFile == NULL ){
X  		fprintf( stderr, "Can\'t open: %s\n", fname );
X--- 95,107 ----
X  int n;
X  FILE *fp;
X  {
X! 	char fname[BIGLTH];
X  	char main_class[20];
X  	int i;
X  	HowMany = n;
X  
X! 	/* read in only the rules file in defaultdir */
X! 	sprintf(fname, "%s/%s", DEFAULTDIR, DEFFILE);
X  	InFile = fopen( fname, "r" );
X  	if( InFile == NULL ){
X  		fprintf( stderr, "Can\'t open: %s\n", fname );
X
END_OF_FILE
if test 62540 -ne `wc -c <'patches09'`; then
    echo shar: \"'patches09'\" unpacked with wrong size!
fi
# end of 'patches09'
fi
echo shar: End of shell archive.
exit 0