billr@saab.CNA.TEK.COM (Bill Randle) (12/22/89)
Submitted-by: Adam Bryant <adb@cs.bu.edu>
Posting-number: Volume 8, Issue 77
Archive-name: conquer4/Patch7b
Patch-To: conquer4: Volume 6, Issue 83-96
#!/bin/sh
# this is part 2 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patchV4.7 continued
#
CurArch=2
if test ! -r s2_seq_.tmp
then echo "Please unpack part 1 first!"
exit 1; fi
( read Scheck
if test "$Scheck" != $CurArch
then echo "Please unpack part $Scheck next!"
exit 1;
else exit 0; fi
) < s2_seq_.tmp || exit 1
echo "x - Continuing file patchV4.7"
sed 's/^X//' << 'SHAR_EOF' >> patchV4.7
X! if (stat(tmp_mail_name,&fst)==0) {
X! long now;
X! now = time(0);
X! if (now - fst.st_mtime < TIME_DEAD) {
X! if (to>=0 && to<NTOTAL) {
X! sprintf(line,"Someone is already mailing Nation %s... try again later.", ntn[to].name);
X! errormsg(line);
X! }
X! return(-1);
X! } else {
X! /* remove useless file */
X! unlink(tmp_mail_name);
X! }
X }
X #endif /*CONQUER*/
X #ifdef ADMIN
X***************
X*** 1504,1516 ****
X return(-1);
X }
X mailok=to;
X }
X
X void
X mailclose(to)
X {
X- char line[BIGLTH];
X-
X if(mailok==DONEMAIL) return;
X
X if(to >= 0) {
X--- 1531,1542 ----
X return(-1);
X }
X mailok=to;
X+ return(0);
X }
X
X void
X mailclose(to)
X {
X if(mailok==DONEMAIL) return;
X
X if(to >= 0) {
X***************
X*** 1520,1525 ****
X--- 1546,1552 ----
X
X #ifdef CONQUER
X if((to!=ABORTMAIL)&&(to==mailok)) {
X+ char line[BIGLTH];
X if (to==NEWSMAIL) {
X /* send to the current newspaper */
X sprintf(line,"cat %s >> news%d",tmp_mail_name,TURN-1);
X***************
X*** 1788,1795 ****
X }
X
X #ifdef CONQUER
X- #include <sys/types.h>
X- #include <sys/stat.h>
X extern short xcurs;
X extern short ycurs;
X off_t conq_mail_size=0;
X--- 1815,1820 ----
X*** oreports.c Tue Dec 12 21:19:37 1989
X--- reports.c Tue Dec 12 21:20:07 1989
X***************
X*** 299,305 ****
X {
X short armynum,nvynum;
X long numship=0L,costsold=0L,numsold=0L;
X! long nummonst=0L,costmonst=0L,money,chty;
X int isgod=FALSE;
X
X if(country==0) {
X--- 299,305 ----
X {
X short armynum,nvynum;
X long numship=0L,costsold=0L,numsold=0L;
X! long nummonst=0L,costmonst=0L,money,chty,infmoney;
X int isgod=FALSE;
X
X if(country==0) {
X***************
X*** 330,368 ****
X numship+=flthold(nvynum);
X
X standout();
X! mvprintw(3,0, "nation name is......%s",curntn->name);
X standend();
X! mvprintw(4,0, "starting treasury..$%ld",startgold);
X! mvprintw(5,0, "number of sectors...%d",spread.sectors);
X if(curntn->tfood<2*curntn->tciv) standout();
X! mvprintw(7,0, "granary holds.....%8ld",curntn->tfood);
X standend();
X! mvprintw(8,0, "jewels owned......%8ld",curntn->jewels);
X! mvprintw(9,0, "metal ore owned...%8ld",curntn->metals);
X! mvprintw(3,COLS-50, "%8ld people in gold mines.%8ld",spread.ingold,spread.revjewels);
X! mvprintw(4,COLS-50, "%8ld people in mines......%8ld",spread.inmetal,spread.revmetal);
X! mvprintw(5,COLS-50, "%8ld people in farms......%8ld",spread.infarm,spread.revfood);
X! mvprintw(6,COLS-50,"%8ld people in cities.....%8ld",spread.incap,spread.revcap);
X! mvprintw(7,COLS-50,"%8ld people in towns......%8ld",spread.incity,spread.revcity);
X! mvprintw(8,COLS-50, "%8ld people elsewhere.....%8ld",spread.inothr,spread.revothr);
X standout();
X! mvprintw(9,COLS-50,"%8ld people INCOME........%8ld",spread.civilians,spread.gold - curntn->tgold);
X standend();
X! mvprintw(11,COLS-50,"%8ld troops...............%8ld",numsold,costsold);
X! mvprintw(12,COLS-50,"%8ld monsters.............%8ld",nummonst,costmonst);
X
X! mvprintw(13,COLS-50,"%8ld ship holds @ %4d....%8ld",numship,SHIPMAINT,numship*SHIPMAINT);
X! mvprintw(14,COLS-50,"other expenses this turn......%8ld",startgold-curntn->tgold);
X standout();
X money=costmonst+costsold+(numship*SHIPMAINT)+startgold-curntn->tgold;
X! mvprintw(15,COLS-50,"TOTAL EXPENSES................%8ld",money);
X! money=spread.gold - curntn->tgold - money; /* net income */
X standend();
X! mvprintw(17,COLS-50,"NET INCOME....................%8ld",money);
X chty = max((money*(long)curntn->charity)/100L,0L);
X! mvprintw(16,COLS-50,"CHARITY.......................%8ld",chty);
X standout();
X! mvprintw(18,COLS-50,"NEXT SEASON'S TREASURY........%8ld",(startgold + money-chty));
X
X mvaddstr(LINES-3,(COLS/2)-15,"HIT 'P' TO SEE PRODUCTION SCREEN");
X mvaddstr(LINES-2,(COLS/2)-15,"HIT 'C' FOR CHANGE NATION SCREEN");
X--- 330,375 ----
X numship+=flthold(nvynum);
X
X standout();
X! mvprintw(2,0, "nation name is......%s",curntn->name);
X standend();
X! mvprintw(3,0, "starting treasury..$%ld",startgold);
X! mvprintw(4,0, "number of sectors...%d",spread.sectors);
X if(curntn->tfood<2*curntn->tciv) standout();
X! mvprintw(6,0, "granary holds.....%8ld",curntn->tfood);
X standend();
X! mvprintw(7,0, "jewels owned......%8ld",curntn->jewels);
X! mvprintw(8,0, "metal ore owned...%8ld",curntn->metals);
X! mvprintw(2,COLS-50, "%8ld people in gold mines.%8ld",spread.ingold,spread.revjewels);
X! mvprintw(3,COLS-50, "%8ld people in mines......%8ld",spread.inmetal,spread.revmetal);
X! mvprintw(4,COLS-50, "%8ld people in farms......%8ld",spread.infarm,spread.revfood);
X! mvprintw(5,COLS-50,"%8ld people in cities.....%8ld",spread.incap,spread.revcap);
X! mvprintw(6,COLS-50,"%8ld people in towns......%8ld",spread.incity,spread.revcity);
X! mvprintw(7,COLS-50, "%8ld people elsewhere.....%8ld",spread.inothr,spread.revothr);
X standout();
X! mvprintw(8,COLS-50,"%8ld people INCOME........%8ld",spread.civilians,spread.gold - curntn->tgold);
X standend();
X! mvprintw(10,COLS-50,"%8ld troops...............%8ld",numsold,costsold);
X! mvprintw(11,COLS-50,"%8ld monsters.............%8ld",nummonst,costmonst);
X
X! mvprintw(12,COLS-50,"%8ld ship holds @ %4d....%8ld",numship,SHIPMAINT,numship*SHIPMAINT);
X! mvprintw(13,COLS-50,"other expenses this turn......%8ld",startgold-curntn->tgold);
X standout();
X money=costmonst+costsold+(numship*SHIPMAINT)+startgold-curntn->tgold;
X! mvprintw(14,COLS-50,"TOTAL EXPENSES................%8ld",money);
X standend();
X! money=spread.gold - curntn->tgold - money; /* net income */
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
X mvaddstr(LINES-3,(COLS/2)-15,"HIT 'P' TO SEE PRODUCTION SCREEN");
X mvaddstr(LINES-2,(COLS/2)-15,"HIT 'C' FOR CHANGE NATION SCREEN");
X***************
X*** 644,650 ****
X NADJGAL;
X NADJCRW;
X NADJHLD;
X! if(P_NMOVE>curntn->nvy[newnavy].smove)
X curntn->nvy[newnavy].smove=P_NMOVE;
X P_NMOVE=0;
X NADJMOV;
X--- 651,657 ----
X NADJGAL;
X NADJCRW;
X NADJHLD;
X! if(P_NMOVE<curntn->nvy[newnavy].smove)
X curntn->nvy[newnavy].smove=P_NMOVE;
X P_NMOVE=0;
X NADJMOV;
X*** ocombat.c Tue Dec 12 21:19:34 1989
X--- combat.c Tue Dec 12 21:20:08 1989
X***************
X*** 633,640 ****
X if((ntn[UOWNER(k)].arm[unit[k]].unittyp >= MINLEADER)
X &&( ntn[UOWNER(k)].arm[unit[k]].sold == 0))
X fprintf(fm," (killed)\n");
X! else if((ntn[owner[k]].arm[unit[k]].unittyp == A_MILITIA)
X! &&( ntn[owner[k]].arm[unit[k]].sold == 0))
X fprintf(fm," (disbanded)\n");
X else fputc('\n',fm);
X }
X--- 633,640 ----
X if((ntn[UOWNER(k)].arm[unit[k]].unittyp >= MINLEADER)
X &&( ntn[UOWNER(k)].arm[unit[k]].sold == 0))
X fprintf(fm," (killed)\n");
X! else if((ntn[UOWNER(k)].arm[unit[k]].unittyp == A_MILITIA)
X! &&( ntn[UOWNER(k)].arm[unit[k]].sold == 0))
X fprintf(fm," (disbanded)\n");
X else fputc('\n',fm);
X }
X*** omove.c Tue Dec 12 21:19:36 1989
X--- move.c Tue Dec 12 21:20:08 1989
X***************
X*** 276,286 ****
X } else
X if(((sct[XREAL][YREAL].designation==DTOWN)
X ||(sct[XREAL][YREAL].designation==DCAPITOL)
X! ||(sct[XREAL][YREAL].designation==DCITY))){
X /* harbor */
X! if(P_NMOVE>=4) P_NMOVE-=4;
X else {
X! errormsg("You need 4 move points for that");
X valid=FALSE;
X xcurs=oldxcurs;
X ycurs=oldycurs;
X--- 276,289 ----
X } else
X if(((sct[XREAL][YREAL].designation==DTOWN)
X ||(sct[XREAL][YREAL].designation==DCAPITOL)
X! ||(sct[XREAL][YREAL].designation==DCITY))
X! &&(sct[XREAL][YREAL].owner==country
X! ||(ntn[SOWN].dstatus[country]!=UNMET&&
X! ntn[SOWN].dstatus[country]<=NEUTRAL))) {
X /* harbor */
X! if(P_NMOVE>=3) P_NMOVE-=3;
X else {
X! errormsg("You need 3 move points for that");
X valid=FALSE;
X xcurs=oldxcurs;
X ycurs=oldycurs;
X***************
X*** 326,333 ****
X P_NMOVE -= abs( movecost[XREAL][YREAL] );
X }
X
X! if(P_NMOVE==0)
X! done=TRUE;
X
X } else if(armornvy==AORN){
X errormsg("ERROR - NOT ARMY OR NAVY");
X--- 329,335 ----
X P_NMOVE -= abs( movecost[XREAL][YREAL] );
X }
X
X! if(P_NMOVE==0) done=TRUE;
X
X } else if(armornvy==AORN){
X errormsg("ERROR - NOT ARMY OR NAVY");
X***************
X*** 474,479 ****
X--- 476,494 ----
X /* if (other owner and unoccupied) or (no owner) you take*/
X if(((P_ATYPE<MINLEADER)||(P_ASTAT==GENERAL))
X &&(P_ASOLD>0)){
X+ /*calc enemy soldiers */
X+ total=0;
X+ for(Tnation=0;Tnation<NTOTAL;Tnation++)
X+ if(Tnation!=country)
X+ for(Tarmynum=0;Tarmynum<MAXARM;Tarmynum++)
X+ if((ntn[Tnation].arm[Tarmynum].sold>0)
X+ &&(ntn[Tnation].arm[Tarmynum].xloc==XREAL)
X+ &&(ntn[Tnation].arm[Tarmynum].yloc==YREAL)
X+ &&((curntn->dstatus[Tnation]>=HOSTILE)
X+ ||(ntn[Tnation].dstatus[country]>=HOSTILE))
X+ &&(ntn[Tnation].arm[Tarmynum].stat!=SCOUT)
X+ &&(ntn[Tnation].arm[Tarmynum].unittyp!=A_NINJA))
X+ total+=ntn[Tnation].arm[Tarmynum].sold;
X if((groupmen>=TAKESECTOR)&&(SOWN==0 )){
X mvaddstr(LINES-2,0,"Taking Unowned Sector");
X clrtoeol();
X***************
X*** 573,581 ****
X refresh();
X getch();
X }
X- whatcansee();
X redraw=DONE;
X prep(country,FALSE);
X makemap();
X armornvy=AORN;
X pager=0;
X--- 588,598 ----
X refresh();
X getch();
X }
X redraw=DONE;
X prep(country,FALSE);
X+ whatcansee();
X+ move(0,0);
X+ clrtobot();
X makemap();
X armornvy=AORN;
X pager=0;
X*** oupdate.c Tue Dec 12 21:19:38 1989
X--- update.c Tue Dec 12 21:20:09 1989
X***************
X*** 12,20 ****
X
X #include <ctype.h>
X #ifndef XENIX
X #include <sys/file.h>
X #else
X! #include <unistd.h>
X #endif
X #include "header.h"
X #include "data.h"
X--- 12,21 ----
X
X #include <ctype.h>
X #ifndef XENIX
X+ #include <sys/types.h>
X #include <sys/file.h>
X #else
X! #include <unistd.h>
X #endif
X #include "header.h"
X #include "data.h"
X***************
X*** 120,126 ****
X {
X register struct s_sector *sptr = &sct[x][y];
X int designation;
X! int Attr = 1;
X
X designation=sptr->designation;
X if(sptr->tradegood != TG_none
X--- 121,127 ----
X {
X register struct s_sector *sptr = &sct[x][y];
X int designation;
X! int Attr = 0;
X
X designation=sptr->designation;
X if(sptr->tradegood != TG_none
X***************
X*** 134,140 ****
X if(sptr->jewels>=6) Attr+=GOLDATTR*sptr->jewels*2;
X else Attr+=GOLDATTR*sptr->jewels;
X } else if(designation==DFARM){
X! if(ntn[sptr->owner].tfood <= ntn[sptr->owner].eatrate*(ntn[sptr->owner].tciv*11)/250)
X Attr+=50*FARMATTR;
X else Attr+=tofood(sptr,sptr->owner)*FARMATTR;
X }
X--- 135,141 ----
X if(sptr->jewels>=6) Attr+=GOLDATTR*sptr->jewels*2;
X else Attr+=GOLDATTR*sptr->jewels;
X } else if(designation==DFARM){
X! if(ntn[sptr->owner].tfood*250 <= ntn[sptr->owner].eatrate*(ntn[sptr->owner].tciv*11))
X Attr+=50*FARMATTR;
X else Attr+=tofood(sptr,sptr->owner)*FARMATTR;
X }
X***************
X*** 149,157 ****
X
X switch(race){
X case DWARF:
X! if((designation==DGOLDMINE)&&(sptr->jewels>=4))
X Attr += DGOLDATTR;
X! else if((designation==DMINE)&&(sptr->metal>=4))
X Attr += DMINEATTR;
X else if(designation==DTOWN) Attr += DTOWNATTR;
X else if(designation==DCITY) Attr += DCITYATTR;
X--- 150,158 ----
X
X switch(race){
X case DWARF:
X! if((designation==DGOLDMINE)&&(sptr->jewels>3))
X Attr += DGOLDATTR;
X! else if((designation==DMINE)&&(sptr->metal>3))
X Attr += DMINEATTR;
X else if(designation==DTOWN) Attr += DTOWNATTR;
X else if(designation==DCITY) Attr += DCITYATTR;
X***************
X*** 166,174 ****
X else Attr=0;
X break;
X case ELF:
X! if((designation==DGOLDMINE)&&(sptr->jewels>=4))
X Attr += EGOLDATTR;
X! else if((designation==DMINE)&&(sptr->metal>=4))
X Attr += EMINEATTR;
X else if(designation==DTOWN) Attr += ECITYATTR;
X else if(designation==DCITY) Attr += ECITYATTR;
X--- 167,175 ----
X else Attr=0;
X break;
X case ELF:
X! if((designation==DGOLDMINE)&&(sptr->jewels>3))
X Attr += EGOLDATTR;
X! else if((designation==DMINE)&&(sptr->metal>3))
X Attr += EMINEATTR;
X else if(designation==DTOWN) Attr += ECITYATTR;
X else if(designation==DCITY) Attr += ECITYATTR;
X***************
X*** 183,191 ****
X else Attr=0;
X break;
X case HUMAN:
X! if((designation==DGOLDMINE)&&(sptr->jewels>=4))
X Attr += HGOLDATTR;
X! else if((designation==DMINE)&&(sptr->metal>=4))
X Attr += HMINEATTR;
X else if(designation==DTOWN) Attr += HCITYATTR;
X else if(designation==DCITY) Attr += HCITYATTR;
X--- 184,192 ----
X else Attr=0;
X break;
X case HUMAN:
X! if((designation==DGOLDMINE)&&(sptr->jewels>3))
X Attr += HGOLDATTR;
X! else if((designation==DMINE)&&(sptr->metal>3))
X Attr += HMINEATTR;
X else if(designation==DTOWN) Attr += HCITYATTR;
X else if(designation==DCITY) Attr += HCITYATTR;
X***************
X*** 200,208 ****
X else Attr=0;
X break;
X case ORC:
X! if((designation==DGOLDMINE)&&(sptr->jewels>=4))
X Attr += OGOLDATTR;
X! else if((designation==DMINE)&&(sptr->metal>=4))
X Attr += OMINEATTR;
X else if(designation==DTOWN) Attr += OCITYATTR;
X else if(designation==DCITY) Attr += OCITYATTR;
X--- 201,209 ----
X else Attr=0;
X break;
X case ORC:
X! if((designation==DGOLDMINE)&&(sptr->jewels>3))
X Attr += OGOLDATTR;
X! else if((designation==DMINE)&&(sptr->metal>3))
X Attr += OMINEATTR;
X else if(designation==DTOWN) Attr += OCITYATTR;
X else if(designation==DCITY) Attr += OCITYATTR;
X***************
X*** 240,247 ****
X int leadflag=FALSE; /* leader w/o group */
X int takesctr=FALSE; /* takesctr is # unowned sctrs*/
X
X! if(P_ASTAT>=NUMSTATUS) return(takesctr);
X! if(P_AMOVE==0) return(takesctr);
X
X /* if leader w/o a group, set leadflag */
X if((P_ATYPE>=MINLEADER)&&(P_ATYPE<MINMONSTER)&&(P_ASTAT!=GENERAL)) {
X--- 241,247 ----
X int leadflag=FALSE; /* leader w/o group */
X int takesctr=FALSE; /* takesctr is # unowned sctrs*/
X
X! if(P_ASTAT>=NUMSTATUS || P_AMOVE==0) return(takesctr);
X
X /* if leader w/o a group, set leadflag */
X if((P_ATYPE>=MINLEADER)&&(P_ATYPE<MINMONSTER)&&(P_ASTAT!=GENERAL)) {
X***************
X*** 264,270 ****
X &&( curntn->arm[i].stat!=GARRISON )
X &&( curntn->arm[i].stat!=TRADED )
X &&( curntn->arm[i].stat<NUMSTATUS ))
X! sum+=curntn->arm[i].sold;
X } else { /* not leader w/o group */
X /* use menok as a temp vbl now == men in army */
X menok=0;
X--- 264,270 ----
X &&( curntn->arm[i].stat!=GARRISON )
X &&( curntn->arm[i].stat!=TRADED )
X &&( curntn->arm[i].stat<NUMSTATUS ))
X! sum += curntn->arm[i].sold;
X } else { /* not leader w/o group */
X /* use menok as a temp vbl now == men in army */
X menok=0;
X***************
X*** 302,312 ****
X &&( curntn->arm[x].stat!=ONBOARD )
X &&( curntn->arm[x].stat!=TRADED )
X &&( curntn->arm[x].stat<NUMSTATUS )){
X! where-=curntn->arm[x].sold;
X! if(where > 0) continue;
X! P_AXLOC=curntn->arm[x].xloc;
X! P_AYLOC=curntn->arm[x].yloc;
X! break;
X }
X if(x!=MAXARM) for(x=0;x<MAXARM;x++) {
X if((curntn->arm[x].unittyp<MINLEADER )
X--- 302,312 ----
X &&( curntn->arm[x].stat!=ONBOARD )
X &&( curntn->arm[x].stat!=TRADED )
X &&( curntn->arm[x].stat<NUMSTATUS )){
X! if ((where-=curntn->arm[x].sold) <= 0) {
X! P_AXLOC=curntn->arm[x].xloc;
X! P_AYLOC=curntn->arm[x].yloc;
X! break;
X! }
X }
X if(x!=MAXARM) for(x=0;x<MAXARM;x++) {
X if((curntn->arm[x].unittyp<MINLEADER )
X***************
X*** 425,431 ****
X score()
X {
X int x;
X! printf("\nupdating nations scores\n");
X for(x=1;x<NTOTAL;x++) if(isntn(ntn[x].active))
X ntn[x].score += score_one(x);
X }
X--- 425,431 ----
X score()
X {
X int x;
X! printf("\nUpdating nation's scores\n");
X for(x=1;x<NTOTAL;x++) if(isntn(ntn[x].active))
X ntn[x].score += score_one(x);
X }
X***************
X*** 435,443 ****
X /* CHEAT() */
X /* this routine cheats in favor of npc nations */
X /* */
X! /* I pride this code... it needs not to cheat to play a good */
X! /* game. This routine is the only cheating that it will do, */
X! /* and it is fairly minor. */
X /****************************************************************/
X void
X cheat()
X--- 435,443 ----
X /* CHEAT() */
X /* this routine cheats in favor of npc nations */
X /* */
X! /* I take pride in this code... it needs not to cheat to play a */
X! /* good game. This routine is the only cheating that it will */
X! /* do, and it is fairly minor. */
X /****************************************************************/
X void
X cheat()
X***************
X*** 529,535 ****
X #endif /*XENIX*/
X int armynum;
X int moved,done,loop=0,number=0;
X!
X int execed[NTOTAL];
X
X check();
X--- 529,535 ----
X #endif /*XENIX*/
X int armynum;
X int moved,done,loop=0,number=0;
X! void move_people();
X int execed[NTOTAL];
X
X check();
X***************
X*** 576,582 ****
X fprintf(fnews,"1.\tthe computer will move for %s\n",curntn->name);
X if (mailopen( country )!=(-1)) {
X fprintf(fm,"Message to %s from CONQUER\n\n",curntn->name);
X! fprintf(fm,"The computer moved for you in the %s of Year %d\n",curntn->name,PSEASON(TURN),YEAR(TURN));
X mailclose(country);
X }
X check();
X--- 576,582 ----
X fprintf(fnews,"1.\tthe computer will move for %s\n",curntn->name);
X if (mailopen( country )!=(-1)) {
X fprintf(fm,"Message to %s from CONQUER\n\n",curntn->name);
X! fprintf(fm,"The computer moved for you in the %s of Year %d\n",PSEASON(TURN),YEAR(TURN));
X mailclose(country);
X }
X check();
X***************
X*** 670,704 ****
X for(x=(int)curntn->capx-2;x<=(int)curntn->capx+2;x++)
X for(y=(int)curntn->capy-2;y<=(int)curntn->capy+2;y++)
X if((ONMAP(x,y))&&(attr[x][y]>0)) attr[x][y]+=20;
X
X- /*MOVE CIVILIANS based on the ratio of attractivenesses
X- *
X- * EQUILIBRIUM(1) = A1/(A1+A2) * (P1+P2)
X- * EQUILIBRIUM(2) = A2/(A1+A2) * (P1+P2)
X- * MOVE 1/5 of way to equilibrium each turn
X- * DELTA(1) = (EQUILIBRIUM(1)-P1)/5 = (A1P2-P1A2)/5(A1+A2)
X- * DELTA(2) = (EQUILIBRIUM(2)-P2)/5 = (A2P1-P2A1)/5(A1+A2) = -DELTA(1)
X- * ij is refered to as 1, xy as 2
X- * NOTE AM ADDING 1 to divisor to prevent floating exception errors
X- */
X- for(x=0; x<MAPX; x++ ) for(y=0; y<MAPY; y++) {
X-
X- sptr = &sct[x][y];
X- if( sptr->owner != country ) continue;
X- if( sptr->people == 0 ) continue;
X-
X- for(i=x-2;i<=x+2;i++) for(j=y-2;j<=y+2;j++)
X- if(ONMAP(i,j)){
X- if( sct[i][j].owner != country)
X- continue;
X- moved=(sptr->people*attr[i][j]-sct[i][j].people*attr[x][y]);
X- moved /= (1+5*(attr[i][j]+attr[x][y]));
X- if( moved <= 0 ) continue;
X-
X- sct[i][j].people += moved;
X- sptr->people -= moved;
X- } /* for */
X- } /* for */
X } /* for */
X
X /*zero out all recalculated values; do not clear god */
X--- 670,677 ----
X for(x=(int)curntn->capx-2;x<=(int)curntn->capx+2;x++)
X for(y=(int)curntn->capy-2;y<=(int)curntn->capy+2;y++)
X if((ONMAP(x,y))&&(attr[x][y]>0)) attr[x][y]+=20;
X+ move_people();
X
X } /* for */
X
X /*zero out all recalculated values; do not clear god */
X***************
X*** 810,816 ****
X printf("distributing captured sectors\n");
X
X /*look for any areas where armies alone in sector*/
X! prep(0,FALSE);
X
X for(country=1;country<NTOTAL;country++)
X if(ntn[country].active!=INACTIVE){
X--- 783,789 ----
X printf("distributing captured sectors\n");
X
X /*look for any areas where armies alone in sector*/
X! prep(0,-1);
X
X for(country=1;country<NTOTAL;country++)
X if(ntn[country].active!=INACTIVE){
X***************
X*** 818,824 ****
X for(armynum=0;armynum<MAXARM;armynum++)
X /* cheat in favor of npcs as the create army routines assume 75 man armies */
X if(P_ATYPE<MINLEADER) {
X! if((ispc(curntn->active)&&(P_ASOLD>TAKESECTOR))
X ||((isnotpc(curntn->active))&&(P_ASOLD>75))){
X /* may not capture land while on a fleet */
X if(P_ASTAT==ONBOARD) continue;
X--- 791,797 ----
X for(armynum=0;armynum<MAXARM;armynum++)
X /* cheat in favor of npcs as the create army routines assume 75 man armies */
X if(P_ATYPE<MINLEADER) {
X! if((ispc(curntn->active)&&(P_ASOLD>=TAKESECTOR))
X ||((isnotpc(curntn->active))&&(P_ASOLD>75))){
X /* may not capture land while on a fleet */
X if(P_ASTAT==ONBOARD) continue;
X***************
X*** 873,879 ****
X if (ispc(curntn->active)) {
X if(mailopen(country)!=(-1)) {
X fprintf(fm,"Message from Conquer\n\n");
X! fprintf(fm,"\tYour Scouting Unit %d was captured\n");
X fprintf(fm,"\t by %s military in sector %d,%d\n",
X ntn[occval].name,(int)P_AXLOC,(int)P_AYLOC);
X mailclose(country);
X--- 846,852 ----
X if (ispc(curntn->active)) {
X if(mailopen(country)!=(-1)) {
X fprintf(fm,"Message from Conquer\n\n");
X! fprintf(fm,"\tYour Scouting Unit %d was captured\n",armynum);
X fprintf(fm,"\t by %s military in sector %d,%d\n",
X ntn[occval].name,(int)P_AXLOC,(int)P_AYLOC);
X mailclose(country);
X***************
X*** 1009,1020 ****
X
X printf("depleting nation %s\n",curntn->name);
X deplete(country);
X- printf("TEMP: done depleting\n");
X }
X
X spreadsheet(country);
X if ((int)curntn->popularity-2*curntn->inflation < (int)MAXTGVAL) {
X! curntn->popularity = min(0,(int)(curntn->popularity-2*curntn->inflation));
X } else curntn->popularity = (char) MAXTGVAL;
X curntn->tsctrs = spread.sectors;
X curntn->tciv=spread.civilians;
X--- 982,992 ----
X
X printf("depleting nation %s\n",curntn->name);
X deplete(country);
X }
X
X spreadsheet(country);
X if ((int)curntn->popularity-2*curntn->inflation < (int)MAXTGVAL) {
X! curntn->popularity = max(0,(int)(curntn->popularity-2*curntn->inflation));
X } else curntn->popularity = (char) MAXTGVAL;
X curntn->tsctrs = spread.sectors;
X curntn->tciv=spread.civilians;
X***************
X*** 1024,1034 ****
X charity=((spread.gold-curntn->tgold)*curntn->charity)/100;
X
X if(charity < 0) charity = 0;
X if(curntn->tciv > 0) charity /= curntn->tciv;
X else charity = 0;
X
X- curntn->tgold = spread.gold - charity;
X-
X /* calculate poverty base */
X if (curntn->tgold < 0L) {
X curntn->poverty = 95;
X--- 996,1006 ----
X charity=((spread.gold-curntn->tgold)*curntn->charity)/100;
X
X if(charity < 0) charity = 0;
X+ curntn->tgold = spread.gold - charity;
X+
X if(curntn->tciv > 0) charity /= curntn->tciv;
X else charity = 0;
X
X /* calculate poverty base */
X if (curntn->tgold < 0L) {
X curntn->poverty = 95;
X***************
X*** 1070,1078 ****
X /* plus maybe an adjustment for jewel production as a ratio */
X /* for whatever is produced by the country. */
X
X! /* use charity here for gold lost to inflation */
X! charity = (curntn->tgold * curntn->inflation )/100;
X! curntn->tgold -= charity;
X curntn->metals=spread.metal;
X curntn->jewels=spread.jewels;
X }
X--- 1042,1057 ----
X /* plus maybe an adjustment for jewel production as a ratio */
X /* for whatever is produced by the country. */
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 curntn->metals=spread.metal;
X curntn->jewels=spread.jewels;
X }
X***************
X*** 1375,1380 ****
X--- 1354,1360 ----
X register struct s_sector *sptr;
X register int x,y;
X long xx;
X+ float tempflt;
X long dead;
X
X fprintf(fnews,"2\tWORLD ECONOMY & DECLARATIONS OF WAR\n");
X***************
X*** 1423,1451 ****
X }
X /*this state can occur if few people live in cities*/
X if(curntn->tfood<0) curntn->tfood=0L;
X! #ifdef XENIX
X! xx = curntn->tfood;
X! xx *= (100-curntn->spoilrate);
X! xx /= 100;
X! curntn->tfood = xx;
X! #else
X! curntn->tfood *= (100-curntn->spoilrate);
X! curntn->tfood /= 100;
X! #endif /*XENIX*/
X
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");
X! fprintf(fm,"%ld jewels for %ld gold talons to compensate\n",
X! xx*GODJEWL/GODPRICE,xx);
X mailclose(country);
X }
X }
X! curntn->jewels += (xx*GODJEWL/GODPRICE);
X curntn->tgold -= xx;
X }
X
X--- 1403,1424 ----
X }
X /*this state can occur if few people live in cities*/
X if(curntn->tfood<0) curntn->tfood=0L;
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(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! 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***************
X*** 1549,1552 ****
X--- 1522,1582 ----
X break;
X }
X }
X+ }
X+
X+ /* MOVE CIVILIANS based on the ratio of attractivenesses
X+ *
X+ * EQUILIBRIUM(1) = A1 / (A1 + A2) * (P1 + P2)
X+ * EQUILIBRIUM(2) = A2 / (A1 + A2) * (P1 + P2)
X+ * MOVE 1/5 of way to equilibrium each turn
X+ * DELTA(1) = (EQUILIBRIUM(1) - P1) / 5 =(A1P2 - P1A2) / 5(A1 + A2)
X+ * DELTA(2) = (EQUILIBRIUM(2) - P2) / 5 =(A2P1 - P2A1) / 5(A1 + A2) = -DELTA(1)
X+ * (i, j) is refered to as 1, (x, y) as 2
X+ */
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*** ocommands.c Tue Dec 12 21:19:34 1989
X--- commands.c Tue Dec 12 21:20:09 1989
X***************
X*** 13,22 ****
X #include "header.h"
X #include "data.h"
X #include <ctype.h>
X!
X! #ifdef SYSMAIL
X #include <sys/types.h>
X! #endif SYSMAIL
X extern long conq_mail_size;
X
X extern FILE *fexe; /*execute file pointer*/
X--- 13,23 ----
X #include "header.h"
X #include "data.h"
X #include <ctype.h>
X! #ifdef CONQUER
X #include <sys/types.h>
X! #include <sys/stat.h>
X! #endif /*CONQUER*/
X!
X extern long conq_mail_size;
X
X extern FILE *fexe; /*execute file pointer*/
X***************
X*** 93,108 ****
X }
X }
X
X- /* have this for now... may be too harsh */
X- if (desg==DMILL || desg==DGRANARY) {
X- if((sptr->tradegood != TG_none)
X- &&(*(tg_stype + sptr->tradegood) != DFARM)
X- &&(*(tg_stype + sptr->tradegood) != 'x')) {
X- if(prtflag) errormsg("You can't have one of those here!");
X- return(FALSE);
X- }
X- }
X-
X if (desg==DUNIVERSITY || desg==DLUMBERYD) {
X if((sptr->tradegood != TG_none)
X &&(*(tg_stype + sptr->tradegood) != desg)
X--- 94,99 ----
X***************
X*** 149,155 ****
X curntn= &ntn[country];
X
X clear_bottom(0);
X! mvaddstr(LINES-4,0,"SUPER USER: CHANGE (v)egetation, (e)levation, (d)esig, (o)wner, (t)radegood");
X refresh();
X switch(getch()){
X case 'd':
X--- 140,146 ----
X curntn= &ntn[country];
X
X clear_bottom(0);
X! mvaddstr(LINES-4,0,"SUPER USER: CHANGE (v)eg, (e)lev, (d)esig, (o)wner, (p)op, (t)radegood");
X refresh();
X switch(getch()){
X case 'd':
X***************
X*** 190,197 ****
X }
X sptr->vegetation=newdes;
X if( tofood(sptr,0) < DESFOOD )
X! sptr->designation=DNODESIG;
X! else sptr->designation=newdes;
X reset_god();
X return;
X case 'o':
X--- 181,188 ----
X }
X sptr->vegetation=newdes;
X if( tofood(sptr,0) < DESFOOD )
X! sptr->designation=newdes;
X! else sptr->designation=DNODESIG;
X reset_god();
X return;
X case 'o':
X***************
X*** 201,206 ****
X--- 192,208 ----
X if (x<NTOTAL) sptr->owner=x;
X reset_god();
X return;
X+ case 'p':
X+ if (sptr->altitude == WATER) {
X+ errormsg("Trying to build a colony of mermen?");
X+ reset_god();
X+ return;
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 x=TRUE;
X while(x==TRUE) {
X***************
X*** 635,641 ****
X return;
X }
X
X! if( sct[XREAL][YREAL].people < amount * SHIPCREW ){
X errormsg("NOT ENOUGH CIVILIANS IN SECTOR");
X if(isgod==TRUE) reset_god();
X return;
X--- 637,643 ----
X return;
X }
X
X! if( sct[XREAL][YREAL].people < amount * (shipsize+1) * SHIPCREW ){
X errormsg("NOT ENOUGH CIVILIANS IN SECTOR");
X if(isgod==TRUE) reset_god();
X return;
X***************
X*** 699,711 ****
X /* construct fortification points*/
X else if(type=='f'){
X /* can only go into debt as much as the nation has jewels */
X! if ((curntn->tgold - cost) >= ((-1)*10*curntn->jewels)) {
X mvprintw(LINES-2,5,"you build +%d%% fort points for %ld gold",armbonus,cost);
X curntn->tgold-=cost;
X sct[XREAL][YREAL].fortress++;
X INCFORT;
X errormsg("");
X! } else errormsg("you are broke");
X }
X else errormsg("invalid input error");
X
X--- 701,715 ----
X /* construct fortification points*/
X else if(type=='f'){
X /* can only go into debt as much as the nation has jewels */
X! if (sct[XREAL][YREAL].fortress>11) {
X! errormsg("That sector is as impregnable as you can make it");
X! } else if ((curntn->tgold - cost) >= ((-1)*10*curntn->jewels)) {
X mvprintw(LINES-2,5,"you build +%d%% fort points for %ld gold",armbonus,cost);
X curntn->tgold-=cost;
X sct[XREAL][YREAL].fortress++;
X INCFORT;
X errormsg("");
X! } else errormsg("you may not spend that much");
X }
X else errormsg("invalid input error");
X
X***************
X*** 1038,1043 ****
X--- 1042,1048 ----
X char mesgfile[FILELTH];
X char line[LINELTH+1], inpch;
X char save[LINELTH][LINELTH+1];
X+ struct stat fst;
X
X /*open file; used in mailopen() as well */
X sprintf(tempfile,"%s%hd.tmp",msgfile,country);
X***************
X*** 1062,1075 ****
X
X /* check for people sending mail */
X sprintf(line,"send.%s%hd",msgfile,country);
X! if (access(line,00)==0) {
X! /* someone is sending mail to the country */
X! (void) unlink (tempfile) ;
X! clear_bottom(0);
X! errormsg("Someone is sending you mail... please wait.");
X! makebottom();
X! redraw=DONE;
X! return;
X }
X
X /*read in file a line at at time*/
X--- 1067,1087 ----
X
X /* check for people sending mail */
X sprintf(line,"send.%s%hd",msgfile,country);
X! if (stat(line,&fst)==0) {
X! long now;
X! now = time(0);
X! if (now - fst.st_mtime < TIME_DEAD) {
X! /* someone is sending mail to the country */
X! (void) unlink (tempfile) ;
X! clear_bottom(0);
X! errormsg("Someone is sending you mail... please wait.");
X! makebottom();
X! redraw=DONE;
X! return;
X! } else {
X! /* remove useless file */
X! (void) unlink(line);
X! }
X }
X
X /*read in file a line at at time*/
X***************
X*** 1142,1151 ****
X char line[BIGLTH];
X
X /*what nation to send to*/
X! clear();
X! mvaddstr(0,0,"To send a message to the administrator, send to 'god';");
X! mvaddstr(1,0,"To post to the news, send to 'news':");
X! mvaddstr(2,0,"Enter the name of the country to send to: ");
X refresh();
X temp=get_country();
X
X--- 1154,1162 ----
X char line[BIGLTH];
X
X /*what nation to send to*/
X! clear_bottom(0);
X! mvaddstr(LINES-4,0,"The Conquer Administrator is 'god'; To send to the News use 'news';");
X! mvaddstr(LINES-3,0,"Send mail to what nation? ");
X refresh();
X temp=get_country();
X
X***************
X*** 1153,1168 ****
X strcpy(name,"news");
X } else {
X /* quick return on bad input */
X! if(temp==(-1) || temp>=NTOTAL
X! || (!isntn(ntn[temp].active) && temp!=0))
X! return;
X strcpy(name,ntn[temp].name); /* find nation name */
X }
X
X if(mailopen( temp )==(-1)) {
X return;
X }
X!
X
X if(temp != -2) {
X if (country==0)
X--- 1164,1182 ----
X strcpy(name,"news");
X } else {
X /* quick return on bad input */
X! if(temp==(-1) || temp>=NTOTAL
X! || (!isntn(ntn[temp].active) && temp!=0)) {
X! makebottom();
X! return;
X! }
X strcpy(name,ntn[temp].name); /* find nation name */
X }
X
X if(mailopen( temp )==(-1)) {
X+ makebottom();
X return;
X }
X! redraw=FULL;
X
X if(temp != -2) {
X if (country==0)
X*** oio.c Tue Dec 12 21:19:35 1989
X--- io.c Tue Dec 12 21:20:09 1989
X***************
X*** 306,311 ****
X--- 306,312 ----
X } /* readdata() */
X
X #ifdef CONQUER
X+ #ifdef XYZZY
X /************************************************************************/
X /* OFFMAP() deal if cursor is off the map */
X /************************************************************************/
X***************
X*** 324,330 ****
X xcurs+=15;
X }
X }
X! else if(xcurs >= (COLS-23)/2){
X if(XREAL<MAPX) {
X redraw=PART;
X xoffset+=15;
X--- 325,331 ----
X xcurs+=15;
X }
X }
X! else if(xcurs >= SCREEN_X_SIZE-1){
X if(XREAL<MAPX) {
X redraw=PART;
X xoffset+=15;
X***************
X*** 340,346 ****
X xoffset += xcurs;
X xcurs=0;
X }
X! else if(xcurs >= (COLS-23)/2) {
X redraw=PART;
X xoffset+=15;
X xcurs-=15;
X--- 341,347 ----
X xoffset += xcurs;
X xcurs=0;
X }
X! else if(xcurs >= SCREEN_X_SIZE-1) {
X redraw=PART;
X xoffset+=15;
X xcurs-=15;
X***************
X*** 380,385 ****
X--- 381,387 ----
X }
X whatcansee();
X }
X+ #endif /* XYZZY */
X
X /************************************************************************/
X /* CENTERMAP() - redraws screen so that cursor is centered */
X*** omagic.c Tue Dec 12 21:19:35 1989
X--- magic.c Tue Dec 12 21:20:10 1989
X***************
X*** 591,609 ****
X clear();
X }
X if(magic(country,MA_MONST)==TRUE) {
X! mvprintw((*count)++,0," You have a 10 percent chance for %ld Jewels take over other orcs",ORCTAKE);
X chance=10;
X } else if(magic(country,AV_MONST)==TRUE) {
X! mvprintw((*count)++,0," You have a 6 percent chance for %ld Jewels take over other orcs",ORCTAKE);
X chance=6;
X } else if(magic(country,MI_MONST)==TRUE){
X! mvprintw((*count)++,0," You have a 3 percent chance for %ld Jewels to take over other orcs",ORCTAKE);
X chance=3;
X }
X if(chance==0) return(TRUE);
X
X! mvaddstr((*count)++,0,"DO YOU WISH TO TAKE OVER AN ORC NPC NATION");
X! mvaddstr((*count)++,0,"target cant be unmet, hostile, war, or jihad (enter y or n):");
X refresh();
X if(getch()=='y'){
X done=FALSE;
X--- 591,609 ----
X clear();
X }
X if(magic(country,MA_MONST)==TRUE) {
X! mvprintw((*count)++,0,"You have a 10 percent chance for %ld Jewels take over other orcs",ORCTAKE);
X chance=10;
X } else if(magic(country,AV_MONST)==TRUE) {
X! mvprintw((*count)++,0,"You have a 6 percent chance for %ld Jewels take over other orcs",ORCTAKE);
X chance=6;
X } else if(magic(country,MI_MONST)==TRUE){
X! mvprintw((*count)++,0,"You have a 3 percent chance for %ld Jewels to take over other orcs",ORCTAKE);
X chance=3;
X }
X if(chance==0) return(TRUE);
X
X! mvaddstr((*count)++,0," Target can't be Unmet, Hostile, War, or Jihad");
X! mvaddstr((*count)++,0,"DO YOU WISH TO TAKE OVER AN ORC NPC NATION: [ny]");
X refresh();
X if(getch()=='y'){
X done=FALSE;
X***************
X*** 620,633 ****
X curntn->spellpts-=s_cost;
X EDECSPL;
X if(( takeover(chance,i)) !=0 )
X! mvprintw((*count)++,0," Successful: %d",i);
X else {
X! mvaddstr((*count)++,0," Failed: Nation becomes more hostile");
X curntn->dstatus[i]++;
X EADJDIP(country,i);
X }
X }
X- else mvaddstr((*count)++,0," Wrong Race");
X }
X return(done);
X }
X--- 620,636 ----
X curntn->spellpts-=s_cost;
X EDECSPL;
X if(( takeover(chance,i)) !=0 )
X! mvprintw((*count)++,0," Successful: %d",i);
X else {
X! mvaddstr((*count)++,0," Failed: Nation becomes more hostile");
X curntn->dstatus[i]++;
X EADJDIP(country,i);
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***************
X*** 828,834 ****
X county=3;
X countx=0;
X standout();
X! mvaddstr(0,0,"Do you wish to (A)dd or (R)emove a power? ");
X refresh();
X while (done==FALSE) {
X done=TRUE;
X--- 831,838 ----
X county=3;
X countx=0;
X standout();
X! mvaddstr(0,0,"Do you wish to (A)dd or (R)emove a power?");
X! clrtoeol();
X refresh();
X while (done==FALSE) {
X done=TRUE;
X***************
X*** 870,878 ****
X }
X else county++;
X standout();
X! if (remove) mvaddstr(county++,0,"Which power to remove? ");
X! else mvaddstr(county++,0,"Which power to add? ");
X standend();
X refresh();
X choice=get_number();
X if(choice > 0 && choice <= MAXPOWER) {
X--- 874,883 ----
X }
X else county++;
X standout();
X! if (remove) mvaddstr(county++,0,"Which power to remove?");
X! else mvaddstr(county++,0,"Which power to add?");
X standend();
X+ addch(' ');
X refresh();
X choice=get_number();
X if(choice > 0 && choice <= MAXPOWER) {
X***************
X*** 888,895 ****
X else exenewmgk(powers[choice-1]);
X }
X } else {
X! if (remove) mvaddstr(county++,0," The nation doesn't have that power.");
X! else mvaddstr(county++,0," The nation already has that power.");
X }
X }
X mvaddstr(county++,0,"Do you wish to add or remove another power?");
X--- 893,900 ----
X else exenewmgk(powers[choice-1]);
X }
X } else {
X! if (remove) mvaddstr(county++,0,"The nation doesn't have that power.");
X! else mvaddstr(county++,0,"The nation already has that power.");
X }
X }
X mvaddstr(county++,0,"Do you wish to add or remove another power?");
X*** odisplay.c Tue Dec 12 21:19:34 1989
X--- display.c Tue Dec 12 21:20:10 1989
X***************
X*** 3,15 ****
X /*conquer : Copyright (c) 1988 by Ed Barlow.
X * I spent a long time writing this code & I hope that you respect this.
X * I give permission to alter the code, but not to copy or redistribute
X! * it without my explicit permission. If you alter the code,
X * please document changes and send me a copy, so all can have it.
X! * This code, to the best of my knowledge works well, but it is my first
X * 'C' program and should be treated as such. I disclaim any
X! * responsibility for the codes actions (use at your own risk). I guess
X * I am saying "Happy gaming", and am trying not to get sued in the process.
X! * Ed
X */
X
X /*include files*/
X--- 3,15 ----
X /*conquer : Copyright (c) 1988 by Ed Barlow.
X * I spent a long time writing this code & I hope that you respect this.
X * I give permission to alter the code, but not to copy or redistribute
X! * it without my explicit permission. If you alter the code,
X * please document changes and send me a copy, so all can have it.
X! * This code, to the best of my knowledge works well, but it is my first
X * 'C' program and should be treated as such. I disclaim any
X! * responsibility for the codes actions (use at your own risk). I guess
X * I am saying "Happy gaming", and am trying not to get sued in the process.
X! * Ed
X */
X
X /*include files*/
X***************
X*** 410,416 ****
X {
X if((xcurs<=0)||(ycurs<=0)||(xcurs>=SCREEN_X_SIZE-1)
X ||((ycurs>=SCREEN_Y_SIZE-1))||((XREAL)>=MAPX)
X! ||((YREAL)>=MAPY)) offmap();
X
X if(redraw!=DONE) {
X if (redraw==FULL) {
X--- 410,419 ----
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 if (redraw==FULL) {
X*** omain.c Tue Dec 12 21:19:35 1989
X--- main.c Tue Dec 12 21:20:11 1989
X***************
X*** 282,288 ****
X #endif OGOD
X country=(-1);
X for(i=0;i<NTOTAL;i++)
X! if(strcmp(name,ntn[i].name)==0) country=i;
X
X if(country==(-1)) {
X fprintf(stderr,"Sorry, name <%s> not found\n",name);
X--- 282,291 ----
X #endif OGOD
X country=(-1);
X for(i=0;i<NTOTAL;i++)
X! if(strcmp(name,ntn[i].name)==0) {
X! country=i;
X! break;
X! }
X
X if(country==(-1)) {
X fprintf(stderr,"Sorry, name <%s> not found\n",name);
X***************
X*** 778,784 ****
X return(TRUE);
X break;
X case 'W': /*message*/
X- redraw=FULL;
X curntn->tgold -= MOVECOST;
X wmessage();
X break;
X--- 781,786 ----
X***************
X*** 818,825 ****
X if ((owneruid != (getpwnam(LOGIN))->pw_uid ) &&
X ((pwent=getpwnam(ntn[0].leader))==NULL || owneruid != pwent->pw_uid )) break;
X #endif
X! clear();
X! redraw=FULL;
X if(country != 0) {
X fprintf(fexe,"L_NGOLD\t%d \t%d \t%ld \t0 \t0 \t%s\n",
X XNAGOLD ,country,curntn->tgold,"null");
X--- 820,826 ----
X if ((owneruid != (getpwnam(LOGIN))->pw_uid ) &&
X ((pwent=getpwnam(ntn[0].leader))==NULL || owneruid != pwent->pw_uid )) break;
X #endif
X! clear_bottom(0);
X if(country != 0) {
X fprintf(fexe,"L_NGOLD\t%d \t%d \t%ld \t0 \t0 \t%s\n",
X XNAGOLD ,country,curntn->tgold,"null");
X***************
X*** 828,837 ****
X fprintf(fexe,"L_NJWLS\t%d \t%d \t%ld \t0 \t0 \t%s\n",
X XNARGOLD ,country,curntn->jewels,"null");
X } else
X! mvaddstr(0,0,"SUPER-USER: YOUR CHANGES WILL NOT BE SAVED IF YOU DO THIS!!!");
X standout();
X! mvaddstr(2,0,"change login to: ");
X standend();
X refresh();
X
X ocountry=country;
X--- 829,839 ----
X fprintf(fexe,"L_NJWLS\t%d \t%d \t%ld \t0 \t0 \t%s\n",
X XNARGOLD ,country,curntn->jewels,"null");
X } else
X! mvaddstr(LINES-4,0,"SUPER-USER: YOUR CHANGES WILL NOT BE SAVED IF YOU DO THIS!!!");
X standout();
X! mvaddstr(LINES-3,0,"Change login to:");
X standend();
X+ addch(' ');
X refresh();
X
X ocountry=country;
X***************
X*** 841,869 ****
X if( country==(-1) || country>=NTOTAL
X || ( !isactive(ntn[country].active) && country!=0 )) {
X country=ocountry;
X! errormsg("invalid country");
X break;
X }
X if(country==ocountry){
X! errormsg("same country");
X break;
X }
X
X /*get password*/
X! mvaddstr(2,0,"what is your nations password:");
X refresh();
X! getstr(passwd);
X strcpy(name,crypt(passwd,SALT));
X! if((strncmp(name,curntn->passwd,PASSLTH)!=0)
X &&(strncmp(name,ntn[0].passwd,PASSLTH)!=0)){
X! errormsg("sorry: password invalid");
X country=ocountry;
X break;
X }
X if(aretheyon()==TRUE) {
X! errormsg("sorry: country is already logged in.");
X! refresh();
X country=ocountry;
X break;
X }
X
X--- 843,875 ----
X if( country==(-1) || country>=NTOTAL
X || ( !isactive(ntn[country].active) && country!=0 )) {
X country=ocountry;
X! makebottom();
X break;
X }
X if(country==ocountry){
X! errormsg("What? You are already logged into that nation.");
X! makebottom();
X break;
X }
X
X /*get password*/
X! clear_bottom(0);
X! mvaddstr(LINES-4,0,"What is your Nation's Password: ");
X refresh();
X! (void) get_pass(passwd);
X strcpy(name,crypt(passwd,SALT));
X!
X! if((strncmp(name,ntn[country].passwd,PASSLTH)!=0)
X &&(strncmp(name,ntn[0].passwd,PASSLTH)!=0)){
X! errormsg("Sorry, Password Invalid.");
X country=ocountry;
X+ makebottom();
X break;
X }
X if(aretheyon()==TRUE) {
X! errormsg("Sorry, that Nation is already logged in.");
X country=ocountry;
X+ makebottom();
X break;
X }
X
X***************
X*** 886,891 ****
X--- 892,898 ----
X fprintf(stderr,"\n");
X roads_this_turn=0;
X terror_adj=0;
X+ move(LINES-3,0);
X readdata();
X execute(FALSE);
X
X***************
X*** 901,907 ****
X }
X xoffset = yoffset = 0;
X centermap();
X! redraw=PART;
X break;
X case '?': /*display help screen*/
X redraw=PART;
X--- 908,914 ----
X }
X xoffset = yoffset = 0;
X centermap();
X! redraw=FULL;
X break;
X case '?': /*display help screen*/
X redraw=PART;
X*** onpc.c Tue Dec 12 21:19:36 1989
X--- npc.c Tue Dec 12 21:20:11 1989
X***************
X*** 129,134 ****
X--- 129,250 ----
X else if( curntn->active==NPC_SAVAGE ) do_savage();
X else if( curntn->active==NPC_LIZARD ) do_lizard(); /* update.c */
X }
X+ #ifdef MORE_MONST
X+ {
X+ int neededtroops;
X+ int actualtroops;
X+ int savages,nomads;
X+ int i,x,y;
X+ int nomad_space=1, savage_space=1;
X+
X+ for(i=1;i<NTOTAL;i++)
X+ switch(ntn[i].active)
X+ {
X+ case NPC_SAVAGE:
X+ savages=i;
X+ break;
X+ case NPC_NOMAD:
X+ nomads=i;
X+ break;
X+ }
X+
X+ /* neededarmies is an estimete of
X+ * the desired military strength of savages
X+ * and nomads. The proportions are based on
X+ * npc.c routines. yeuch.
X+ */
X+
X+ neededtroops= ((NUMSECTS)/MONSTER)*( /* number of armies */
X+ (5.0/12)*450 + /* nomads */
X+ (1.0/4)*250 ); /* savages */
X+
X+
X+ actualtroops=0;
X+ for(i=0;i<MAXARM;i++)
X+ {
X+ if (ntn[nomads].arm[i].sold > 0)
X+ actualtroops += ntn[nomads].arm[i].sold;
X+ if (ntn[savages].arm[i].sold > 0)
X+ actualtroops += ntn[savages].arm[i].sold;
X+ }
X+
X+ #ifdef DEBUG
X+ printf("monsters: need %d have %d\n",neededtroops,actualtroops);
X+ #endif DEBUG
X+
X+ neededtroops= neededtroops-actualtroops;
X+
X+ while(neededtroops>0&& (nomad_space||savage_space))
SHAR_EOF
echo "End of part 2"
echo "File patchV4.7 is continued in part 3"
echo "3" > s2_seq_.tmp
exit 0