-+-+-+-+-+-+-+-+ START OF PART 12 -+-+-+-+-+-+-+-+ X ivensort`5Bi`5D = END_SENTINEL ; X `7D X ivensort`5BMAXINVEN`5D = END_SENTINEL; X X /* For zero difficulty games, start the player out with armor and weapon V. X We can sort the inventory right away because a dagger is 'later' than X leather armor. X */ X if (c`5BHARDGAME`5D <= 0) X `7B X iven`5B0`5D = OLEATHER; X iven`5B1`5D = ODAGGER; X ivenarg`5B0`5D = ivenarg`5B1`5D = c`5BWEAR`5D = ivensort`5B0`5D = 0; X ivensort`5B1`5D = c`5BWIELD`5D = 1; X `7D X `7D X X/* X show character's inventory X*/ Xshowstr(select_allowed) Xchar select_allowed; X `7B X register int i,number, item_select; X X for (number=3, i=0; i=0; k--) X if (iven`5Bk`5D) X `7B X for (i=22; i<84; i++) X for (j=0; j<=k; j++) X if (i==iven`5Bj`5D) X `7B X itemselect = show2(j); X if (itemselect && select_allowed) X goto quitit; X `7D X k=0; X `7D X X lprintf("\nElapsed time is %d. You have %d mobuls left",(long)((gtime+9 V9)/100+1),(long)((TIMELIMIT-gtime)/100)); X itemselect = more(select_allowed); `20 Xquitit: X nosignal=sigsav; X if (select_allowed) X return( (itemselect > 0) ? itemselect : 0 ); X else X return( 0 ); X `7D X X/* X subroutine to clear screen depending on # lines to display X X*/ Xstatic void t_setup(count) Xregister int count; X `7B X if (count<20) /* how do we clear the screen? */ X `7B X cl_up(79,count); X cursor(1,1); X `7D X else X `7B X resetscroll(); X clear(); X `7D X `7D X X/* X subroutine to restore normal display screen depending on t_setup() X X*/ Xstatic void t_endup(count) Xregister int count; X `7B X if (count<18) /* how did we clear the screen? */ X draws(0,MAXX,0,(count>MAXY) ? MAXY : count); X else X `7B X drawscreen();`20 X setscroll(); X `7D X `7D X X/* X function to show the things player is wearing only X */ Xshowwear() X `7B X register int i,j,sigsav,count,itemselect=0; X X sigsav=nosignal; nosignal=1; /* don't allow `5Ec etc */ X srcount=0; X X for (count=2,j=0; j< MAXINVEN; j++) /* count number of items we will d Visplay */ X if (i=iven`5Bj`5D) X switch(i) X `7B X case OLEATHER: case OPLATE: case OCHAIN: X case ORING: case OSTUDLEATHER: case OSPLINT: X case OPLATEARMOR: case OSSPLATE: case OSHIELD: X count++; X `7D; X X t_setup(count); X X for (i=22; i<84; i++) X for (j=0; j< MAXINVEN; j++) X if (i==iven`5Bj`5D) X switch(i) X `7B X case OLEATHER: case OPLATE: case OCHAIN: X case ORING: case OSTUDLEATHER: case OSPLINT: X case OPLATEARMOR: case OSSPLATE: case OSHIELD: X if (itemselect = show2(j)) X goto quitit; X `7D; X itemselect = more(TRUE); `20 Xquitit: X nosignal=sigsav; `20 X t_endup(count); X return( (itemselect > 1) ? itemselect : 0 ); X `7D X X/* X function to show the things player can wield only X */ Xshowwield() X `7B X register int i,j,sigsav,count,itemselect=0; X sigsav=nosignal; nosignal=1; /* don't allow `5Ec etc */ X srcount=0; X X for (count=2,j=0; j< MAXINVEN; j++) /* count how many items */ X if (i=iven`5Bj`5D) X switch(i) X `7B X case ODIAMOND: case ORUBY: case OEMERALD: case OSAPPHIRE: X case OBOOK: case OCHEST: case OLARNEYE: case ONOTHEFT: X case OSPIRITSCARAB: case OCUBEofUNDEAD: X case OPOTION: case OSCROLL: break; X default: count++; X `7D; X X t_setup(count); X X for (i=22; i<84; i++) X for (j=0; j< MAXINVEN; j++) X if (i==iven`5Bj`5D) X switch(i) X `7B X case ODIAMOND: case ORUBY: case OEMERALD: case OSAPPHIRE: X case OBOOK: case OCHEST: case OLARNEYE: case ONOTHEFT: X case OSPIRITSCARAB: case OCUBEofUNDEAD: X case OPOTION: case OSCROLL: `20 X break; X default: `20 X if (itemselect = show2(j)) X goto quitit; X `7D; X itemselect = more(TRUE); `20 Xquitit: X nosignal=sigsav; `20 X t_endup(count); X return( (itemselect > 1) ? itemselect : 0 ); X `7D X X/* X * function to show the things player can read only X */ Xshowread() X `7B X register int i,j,sigsav,count,itemselect = 0; X sigsav=nosignal; nosignal=1; /* don't allow `5Ec etc */ X srcount=0; X X for (count=2,j=0; j< MAXINVEN; j++) X switch(iven`5Bj`5D) X `7B X case OBOOK: case OSCROLL: count++; X `7D; X t_setup(count); X X for (i=22; i<84; i++) X for (j=0; j< MAXINVEN; j++) X if (i==iven`5Bj`5D) X switch(i) X `7B X case OBOOK: case OSCROLL: X if (itemselect = show2(j)) X goto quitit; X `7D; X itemselect = more(TRUE); Xquitit: X nosignal=sigsav; X t_endup(count); X return((itemselect > 1) ? itemselect : 0 ); X `7D X X/* X * function to show the things player can eat only X */ Xshoweat() X `7B X register int i,j,sigsav,count,itemselect=0; X sigsav=nosignal; nosignal=1; /* don't allow `5Ec etc */ X srcount=0; X X for (count=2,j=0; j< MAXINVEN; j++) X switch(iven`5Bj`5D) X `7B X case OCOOKIE: count++; X `7D; X t_setup(count); X X for (i=22; i<84; i++) X for (j=0; j< MAXINVEN; j++) X if (i==iven`5Bj`5D) X switch(i) X `7B X case OCOOKIE: `20 X if (itemselect=show2(j)) X goto quitit; X `7D; X itemselect = more(TRUE); `20 Xquitit: X nosignal=sigsav; `20 X t_endup(count); X return( (itemselect > 1) ? itemselect : 0 ); X `7D X X/* X function to show the things player can quaff only X */ Xshowquaff() X `7B X register int i,j,sigsav,count,itemselect=0; X sigsav=nosignal; nosignal=1; /* don't allow `5Ec etc */ X srcount=0; X X for (count=2,j=0; j< MAXINVEN; j++) X switch(iven`5Bj`5D) X `7B X case OPOTION: count++; X `7D; X t_setup(count); X X for (i=22; i<84; i++) X for (j=0; j< MAXINVEN; j++) X if (i==iven`5Bj`5D) X switch(i) X `7B X case OPOTION: X if (itemselect=show2(j)) X goto quitit; X `7D; X itemselect = more(TRUE); Xquitit: X nosignal=sigsav; X t_endup(count); X return( (itemselect > 1 ) ? itemselect : 0 ); X `7D X Xshow1(idx,str2) X register int idx; X register char *str2`5B`5D; X `7B X lprc('\n'); X cltoeoln(); X if (str2==0) X lprintf("%c) %s",idx+'a',objectname`5Biven`5Bidx`5D`5D); X else if (*str2`5Bivenarg`5Bidx`5D`5D==0) X lprintf("%c) %s",idx+'a',objectname`5Biven`5Bidx`5D`5D); X else X lprintf("%c) %s of%s",idx+'a',objectname`5Biven`5Bidx`5D`5D,str2`5 VBivenarg`5Bidx`5D`5D); X `7D X Xshow3(index) Xregister int index ; X `7B X srcount=0; X return( show2(index) ); X `7D X Xstatic int show2(index) Xregister int index; X `7B X register int itemselect = 0; X X switch(iven`5Bindex`5D) X `7B X case OPOTION: show1(index,potionname); break; X case OSCROLL: show1(index,scrollname); break; X X case OLARNEYE: case OBOOK: case OSPIRITSCARAB: X case ODIAMOND: case ORUBY: case OCUBEofUNDEAD: X case OEMERALD: case OCHEST: case OCOOKIE: X case OSAPPHIRE: case ONOTHEFT: show1(index,(char **)0); br Veak; X X default: X lprc('\n'); X cltoeoln(); X lprintf("%c) %s",index+'a',objectname`5Biven`5Bindex`5D`5D); X if (ivenarg`5Bindex`5D>0) X lprintf(" + %d",(long)ivenarg`5Bindex`5D); X else if (ivenarg`5Bindex`5D<0) X lprintf(" %d",(long)ivenarg`5Bindex`5D); X break; X `7D X if (c`5BWIELD`5D==index) lprcat(" (weapon in hand)"); X if ((c`5BWEAR`5D==index) `7C`7C (c`5BSHIELD`5D==index)) lprcat(" (being V worn)"); X if (++srcount>=22)`20 X `7B`20 X srcount=0;`20 X itemselect = more(TRUE);`20 X clear();`20 X `7D X return( itemselect ); X `7D X X/* X function to put something in the players inventory X returns 0 if success, 1 if a failure X*/ Xtake(itm,arg) X int itm,arg; X `7B X register int i,limit; X/* cursors(); */ X if ((limit = 15+(c`5BLEVEL`5D>>1)) > MAXINVEN) X limit=MAXINVEN; X for (i=0; i=MAXINVEN))`20 X return(0); X itm = iven`5Bk`5D; cursors(); X if (itm==0) `7B lprintf("\nYou don't have item %c! ",k+'a'); return(1); V `7D X if (item`5Bplayerx`5D`5Bplayery`5D) X `7B beep(); lprcat("\nThere's something here already"); return(1); ` V7D X if (playery==MAXY-1 && playerx==33) return(1); /* not in entrance */ X item`5Bplayerx`5D`5Bplayery`5D = itm; X iarg`5Bplayerx`5D`5Bplayery`5D = ivenarg`5Bk`5D; X lprcat("\n You drop:"); show3(k); /* show what item you dropped*/ X know`5Bplayerx`5D`5Bplayery`5D = 0; iven`5Bk`5D=0;`20 X if (c`5BWIELD`5D==k) c`5BWIELD`5D= -1; if (c`5BWEAR`5D==k) c`5BWEA VR`5D = -1; X if (c`5BSHIELD`5D==k) c`5BSHIELD`5D= -1; X adjustcvalues(itm,ivenarg`5Bk`5D); X dropflag=1; /* say dropped an item so wont ask to pick it up right away V */ X return(0); X `7D X X/* X routine to tell if player can carry one more thing X returns 1 if pockets are full, else 0 X*/ Xpocketfull() X `7B X register int i,limit;`20 X if ((limit = MIN_LIMIT + (c`5BLEVEL`5D>>1) ) > MAXINVEN ) `20 X limit = MAXINVEN; X for (i=0; i