📄 global.c
字号:
subroutine to ask if the player really wants to quit */quit() { register int i; cursors(); strcpy(lastmonst,""); lprcat("\n\nDo you really want to quit?"); while (1) { i=getchar(); if (i == 'y') { died(300); return; } if ((i == 'n') || (i == '\33')) { lprcat(" no"); lflush(); return; } lprcat("\n"); setbold(); lprcat("Yes"); resetbold(); lprcat(" or "); setbold(); lprcat("No"); resetbold(); lprcat(" please? Do you want to quit? "); } }/* function to ask --more-- then the user must enter a space */more() { lprcat("\n --- press "); standout("space"); lprcat(" to continue --- "); while (getchar() != ' '); }/* function to put something in the players inventory returns 0 if success, 1 if a failure */take(itm,arg) int itm,arg; { register int i,limit;/* cursors(); */ if ((limit = 15+(c[LEVEL]>>1)) > 26) limit=26; for (i=0; i<limit; i++) if (iven[i]==0) { iven[i] = itm; ivenarg[i] = arg; limit=0; switch(itm) { case OPROTRING: case ODAMRING: case OBELT: limit=1; break; case ODEXRING: c[DEXTERITY] += ivenarg[i]+1; limit=1; break; case OSTRRING: c[STREXTRA] += ivenarg[i]+1; limit=1; break; case OCLEVERRING: c[INTELLIGENCE] += ivenarg[i]+1; limit=1; break; case OHAMMER: c[DEXTERITY] += 10; c[STREXTRA]+=10; c[INTELLIGENCE]-=10; limit=1; break; case OORBOFDRAGON: c[SLAYING]++; break; case OSPIRITSCARAB: c[NEGATESPIRIT]++; break; case OCUBEofUNDEAD: c[CUBEofUNDEAD]++; break; case ONOTHEFT: c[NOTHEFT]++; break; case OSWORDofSLASHING: c[DEXTERITY] +=5; limit=1; break; }; lprcat("\nYou pick up:"); srcount=0; show3(i); if (limit) bottomline(); return(0); } lprcat("\nYou can't carry anything else"); return(1); }/* subroutine to drop an object returns 1 if something there already else 0 */drop_object(k) int k; { int itm; if ((k<0) || (k>25)) return(0); itm = iven[k]; cursors(); if (itm==0) { lprintf("\nYou don't have item %c! ",k+'a'); return(1); } if (item[playerx][playery]) { beep(); lprcat("\nThere's something here already"); return(1); } if (playery==MAXY-1 && playerx==33) return(1); /* not in entrance */ item[playerx][playery] = itm; iarg[playerx][playery] = ivenarg[k]; srcount=0; lprcat("\n You drop:"); show3(k); /* show what item you dropped*/ know[playerx][playery] = 0; iven[k]=0; if (c[WIELD]==k) c[WIELD]= -1; if (c[WEAR]==k) c[WEAR] = -1; if (c[SHIELD]==k) c[SHIELD]= -1; adjustcvalues(itm,ivenarg[k]); dropflag=1; /* say dropped an item so wont ask to pick it up right away */ return(0); }/* function to enchant armor player is currently wearing */enchantarmor() { register int tmp; if (c[WEAR]<0) { if (c[SHIELD] < 0) { cursors(); beep(); lprcat("\nYou feel a sense of loss"); return; } else { tmp=iven[c[SHIELD]]; if (tmp != OSCROLL) if (tmp != OPOTION) { ivenarg[c[SHIELD]]++; bottomline(); } } } tmp = iven[c[WEAR]]; if (tmp!=OSCROLL) if (tmp!=OPOTION) { ivenarg[c[WEAR]]++; bottomline(); } }/* function to enchant a weapon presently being wielded */enchweapon() { register int tmp; if (c[WIELD]<0) { cursors(); beep(); lprcat("\nYou feel a sense of loss"); return; } tmp = iven[c[WIELD]]; if (tmp!=OSCROLL) if (tmp!=OPOTION) { ivenarg[c[WIELD]]++; if (tmp==OCLEVERRING) c[INTELLIGENCE]++; else if (tmp==OSTRRING) c[STREXTRA]++; else if (tmp==ODEXRING) c[DEXTERITY]++; bottomline(); } }/* routine to tell if player can carry one more thing returns 1 if pockets are full, else 0 */pocketfull() { register int i,limit; if ((limit = 15+(c[LEVEL]>>1)) > 26) limit=26; for (i=0; i<limit; i++) if (iven[i]==0) return(0); return(1); }/* function to return 1 if a monster is next to the player else returns 0 */nearbymonst() { register int tmp,tmp2; for (tmp=playerx-1; tmp<playerx+2; tmp++) for (tmp2=playery-1; tmp2<playery+2; tmp2++) if (mitem[tmp][tmp2]) return(1); /* if monster nearby */ return(0); }/* function to steal an item from the players pockets returns 1 if steals something else returns 0 */stealsomething() { register int i,j; j=100; while (1) { i=rund(26); if (iven[i]) if (c[WEAR]!=i) if (c[WIELD]!=i) if (c[SHIELD]!=i) { srcount=0; show3(i); adjustcvalues(iven[i],ivenarg[i]); iven[i]=0; return(1); } if (--j <= 0) return(0); } }/* function to return 1 is player carrys nothing else return 0 */emptyhanded() { register int i; for (i=0; i<26; i++) if (iven[i]) if (i!=c[WIELD]) if (i!=c[WEAR]) if (i!=c[SHIELD]) return(0); return(1); }/* function to create a gem on a square near the player */creategem() { register int i,j; switch(rnd(4)) { case 1: i=ODIAMOND; j=50; break; case 2: i=ORUBY; j=40; break; case 3: i=OEMERALD; j=30; break; default: i=OSAPPHIRE; j=20; break; }; createitem(i,rnd(j)+j/10); }/* function to change character levels as needed when dropping an object that affects these characteristics */adjustcvalues(itm,arg) int itm,arg; { register int flag; flag=0; switch(itm) { case ODEXRING: c[DEXTERITY] -= arg+1; flag=1; break; case OSTRRING: c[STREXTRA] -= arg+1; flag=1; break; case OCLEVERRING: c[INTELLIGENCE] -= arg+1; flag=1; break; case OHAMMER: c[DEXTERITY] -= 10; c[STREXTRA] -= 10; c[INTELLIGENCE] += 10; flag=1; break; case OSWORDofSLASHING: c[DEXTERITY] -= 5; flag=1; break; case OORBOFDRAGON: --c[SLAYING]; return; case OSPIRITSCARAB: --c[NEGATESPIRIT]; return; case OCUBEofUNDEAD: --c[CUBEofUNDEAD]; return; case ONOTHEFT: --c[NOTHEFT]; return; case OLANCE: c[LANCEDEATH]=0; return; case OPOTION: case OSCROLL: return; default: flag=1; }; if (flag) bottomline(); }/* function to read a string from token input "string" returns a pointer to the string */gettokstr(str) register char *str; { register int i,j; i=50; while ((getchar() != '"') && (--i > 0)); i=36; while (--i > 0) { if ((j=getchar()) != '"') *str++ = j; else i=0; } *str = 0; i=50; if (j != '"') while ((getchar() != '"') && (--i > 0)); /* if end due to too long, then find closing quote */ }/* function to ask user for a password (no echo) returns 1 if entered correctly, 0 if not */static char gpwbuf[33];getpassword() { register int i,j; register char *gpwp; extern char *password; scbr(); /* system("stty -echo cbreak"); */ gpwp = gpwbuf; lprcat("\nEnter Password: "); lflush(); i = strlen(password); for (j=0; j<i; j++) read(0,gpwp++,1); gpwbuf[i]=0; sncbr(); /* system("stty echo -cbreak"); */ if (strcmp(gpwbuf,password) != 0) { lprcat("\nSorry\n"); lflush(); return(0); } else return(1); }/* subroutine to get a yes or no response from the user returns y or n */getyn() { register int i; i=0; while (i!='y' && i!='n' && i!='\33') i=getchar(); return(i); }/* function to calculate the pack weight of the player returns the number of pounds the player is carrying */packweight() { register int i,j,k; k=c[GOLD]/1000; j=25; while ((iven[j]==0) && (j>0)) --j; for (i=0; i<=j; i++) switch(iven[i]) { case 0: break; case OSSPLATE: case OPLATEARMOR: k += 40; break; case OPLATE: k += 35; break; case OHAMMER: k += 30; break; case OSPLINT: k += 26; break; case OSWORDofSLASHING: case OCHAIN: case OBATTLEAXE: case O2SWORD: k += 23; break; case OLONGSWORD: case OSWORD: case ORING: case OFLAIL: k += 20; break; case OLANCE: case OSTUDLEATHER: k += 15; break; case OLEATHER: case OSPEAR: k += 8; break; case OORBOFDRAGON: case OBELT: k += 4; break; case OSHIELD: k += 7; break; case OCHEST: k += 30 + ivenarg[i]; break; default: k++; }; return(k); }#ifndef MACRORND /* macros to generate random numbers 1<=rnd(N)<=N 0<=rund(N)<=N-1 */rnd(x) int x; { return((((randx=randx*1103515245+12345)>>7)%(x))+1); }rund(x) int x; { return((((randx=randx*1103515245+12345)>>7)%(x)) ); }#endif MACRORND
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -