/* * MAGIC8.C: * * Additional spell-casting routines. * (C) 1994, 1995 Brooke Paul, Brett Vickers */ #include "mstruct.h" #include "mextern.h" #ifdef DMALLOC #include "/usr/local/include/dmalloc.h" #endif /***********************************************************************/ /* room_vigor */ /***********************************************************************/ int room_vigor(ply_ptr, cmnd, how) creature *ply_ptr; cmd *cmnd; int how; { int c = 0, fd, heal; ctag *cp; ctag *cp_tmp; fd = ply_ptr->fd; if(how == POTION) { print(fd, "The spell fizzles.\n"); return(0); } if(!S_ISSET(ply_ptr, SRVIGO) && (how != WAND || how != SCROLL)) { print(fd, "You don't know that spell.\n"); return(0); } if(ply_ptr->class != CLERIC && ply_ptr->class < CARETAKER) { print(fd, "Only clerics may cast that spell.\n"); return(PROMPT); } if(ply_ptr->mpcur < 12 && (how != WAND || how != SCROLL)) { print(fd, "Not enough magic points.\n"); return(0); } if(how == CAST) ply_ptr->mpcur-=12; if(spell_fail(ply_ptr, how)) { return(0); } cp = ply_ptr->parent_rom->first_ply; print(fd,"\nYou cast vigor on everyone in the room.\n"); broadcast_rom(fd, ply_ptr->rom_num, "\n%M casts vigor on everyone in the room.\n", ply_ptr); heal = mrand(1,6) + bonus[ply_ptr->piety]; if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ heal += mrand(1,3); print(fd,"\nThe room's magical properties increase the power of your spell\n"); } while(cp){ cp_tmp = cp->next_tag; if(cp->crt->type != MONSTER) { if(cp->crt != ply_ptr) { print(cp->crt->fd,"\n%M casts vigor on you.\n",ply_ptr); } cp->crt->hpcur += heal; cp->crt->hpcur = MIN(cp->crt->hpmax, cp->crt->hpcur); } cp = cp_tmp; } return(0); } /**********************************************************************/ /* remove blindness */ /**********************************************************************/ int rm_blind(ply_ptr, cmnd, how) creature *ply_ptr; cmd *cmnd; int how; { room *rom_ptr; creature *crt_ptr; int fd; fd = ply_ptr->fd; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 12 && how == CAST) { print(fd, "Not enough magic points.\n"); return(0); } if(ply_ptr->class != CLERIC && ply_ptr->class != PALADIN && ply_ptr->class < CARETAKER && how == CAST) { print(fd, "Only clerics and paladins may cast that spell.\n"); return(0); } if(!S_ISSET(ply_ptr, SRMBLD) && how == CAST) { print(fd, "You don't know that spell.\n"); return(0); } if(spell_fail(ply_ptr, how)) { if(how==CAST) ply_ptr->mpcur -= 12; return(0); } if(cmnd->num == 2) { if(how == CAST) ply_ptr->mpcur -= 12; if(how == CAST || how == SCROLL || how == WAND) { print(fd, "Cure blindness spell cast on yourself.\n"); print(fd, "Your see the light!.\n"); broadcast_rom(fd, ply_ptr->rom_num, "%M casts cure blindness on %sself.", ply_ptr, F_ISSET(ply_ptr, PMALES) ? "him":"her"); } else if(how == POTION & F_ISSET(ply_ptr, PBLIND)) print(fd, "You feel a veil lifted from your eyes.\n"); else if(how == POTION) print(fd, "Nothing happens.\n"); F_CLR(ply_ptr, PBLIND); } else { if(how == POTION) { print(fd, "You can only use a potion on yourself.\n"); return(0); } cmnd->str[2][0] = up(cmnd->str[2][0]); crt_ptr = find_crt(ply_ptr, rom_ptr->first_ply, cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { cmnd->str[2][0] = low(cmnd->str[2][0]); crt_ptr = find_crt(ply_ptr, rom_ptr->first_mon, cmnd->str[2], cmnd->str[2]); if(!crt_ptr) { print(fd, "That's not here.\n"); return(0); } } if(how == CAST) ply_ptr->mpcur -= 12; F_CLR(crt_ptr, PBLIND); if(how == CAST || how == SCROLL || how == WAND) { print(fd, "You cast cure blindness on %m.\n", crt_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, "%M casts cure blindness on %m.", ply_ptr, crt_ptr); print(crt_ptr->fd, "%M casts cure blindness on you.\nYou feel a veil lifted from your eyes.\n", ply_ptr); } } return(1); } /**********************************************************************/ /* blind */ /**********************************************************************/ /* The blind spell prevents a player or monster from seeing. The spell * * results in a -5 penalty on attacks, and an inability look at objects * * players, rooms, or inventory. Also a player or monster cannot read. */ int blind(ply_ptr, cmnd, how) creature *ply_ptr; cmd *cmnd; int how; { creature *crt_ptr; room *rom_ptr; int fd; fd = ply_ptr->fd; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 15 && how == CAST) { print(fd, "Not enough magic points.\n"); return(0); } if(!S_ISSET(ply_ptr, SBLIND) && how == CAST) { print(fd, "You don't know that spell.\n"); return(0); } if(F_ISSET(ply_ptr, PINVIS)) { F_CLR(ply_ptr, PINVIS); print(fd, "Your invisibility fades.\n"); broadcast_rom(fd, ply_ptr->rom_num, "%M fades into view.", ply_ptr); } if(spell_fail(ply_ptr, how)) { if(how==CAST) ply_ptr->mpcur -= 15; return(0); } if(how == CAST) { ply_ptr->mpcur -= 15; } /* blind self */ if(cmnd->num == 2) { F_SET(ply_ptr,PBLIND); if(how == CAST || how == SCROLL || how == WAND) { print(fd, "You are blind and can no longer see.\n"); broadcast_rom(fd, ply_ptr->rom_num, "%M casts blindness on %sself.", ply_ptr, F_ISSET(ply_ptr, PMALES) ? "him":"her"); } else if(how == POTION) print(fd, "Everything goes dark.\n"); } /* blind a monster or player */ else { if(how == POTION) { print(fd, "You can only use a potion on yourself.\n"); return(0); } crt_ptr = find_crt(ply_ptr, rom_ptr->first_mon, cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { cmnd->str[2][0] = up(cmnd->str[2][0]); crt_ptr = find_crt(ply_ptr, rom_ptr->first_ply, cmnd->str[2], cmnd->val[2]); if(!crt_ptr || crt_ptr == ply_ptr || strlen(cmnd->str[2]) < 3) { print(fd, "That's not here.\n"); return(0); } } if(crt_ptr->type != PLAYER && F_ISSET(crt_ptr, MUNKIL)) { print(fd, "You cannot harm %s.\n", F_ISSET(crt_ptr, MMALES) ? "him":"her"); return(0); } if (crt_ptr->type == PLAYER) F_SET(crt_ptr,PBLIND); else F_SET(crt_ptr,MBLIND); if(how == CAST || how == SCROLL || how == WAND) { print(fd, "Blindness spell cast on %s.\n", crt_ptr->name); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, "%M casts a blindness spell on %m.", ply_ptr, crt_ptr); print(crt_ptr->fd, "%M casts a blindness spell on you.\n", ply_ptr); } if(crt_ptr->type != PLAYER){ add_enm_crt(ply_ptr->name, crt_ptr); } } return(1); } /**********************************************************************/ /* fear */ /**********************************************************************/ /* The fear spell causes the monster to have a high wimpy / flee * * percentage and a penality of -2 on all attacks */ int fear(ply_ptr, cmnd, how) creature *ply_ptr; cmd *cmnd; int how; { creature *crt_ptr; room *rom_ptr; int fd, dur; fd = ply_ptr->fd; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 15 && how == CAST) { print(fd, "Not enough magic points.\n"); return(0); } if(!S_ISSET(ply_ptr, SFEARS) && how == CAST) { print(fd, "You don't know that spell.\n"); return(0); } if(F_ISSET(ply_ptr, PINVIS)) { F_CLR(ply_ptr, PINVIS); print(fd, "Your invisibility fades.\n"); broadcast_rom(fd, ply_ptr->rom_num, "%M fades into view.", ply_ptr); } if(how == CAST) { dur = 600 + mrand(1,30)*10 + bonus[ply_ptr->intelligence]*150; ply_ptr->mpcur -= 15; } else if (how == SCROLL) dur = 600 + mrand(1,15)*10 + bonus[ply_ptr->intelligence]*50; else dur = 600 + mrand(1,30)*10; if(spell_fail(ply_ptr, how)) { return(0); } /* fear on self */ if(cmnd->num == 2) { if (F_ISSET(ply_ptr,PRMAGI)) dur /= 2; ply_ptr->lasttime[LT_FEARS].ltime = time(0); ply_ptr->lasttime[LT_FEARS].interval = dur; F_SET(ply_ptr,PFEARS); if(how == CAST || how == SCROLL || how == WAND) { print(fd, "You begin to shake in terror.\n"); broadcast_rom(fd, ply_ptr->rom_num, "%M casts fear on %sself.", ply_ptr, F_ISSET(ply_ptr, PMALES) ? "him":"her"); } else if(how == POTION) print(fd, "You begin to shake in terror.\n"); } /* fear a monster or player */ else { if(how == POTION) { print(fd, "You can only use a potion on yourself.\n"); return(0); } crt_ptr = find_crt(ply_ptr, rom_ptr->first_mon, cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { cmnd->str[2][0] = up(cmnd->str[2][0]); crt_ptr = find_crt(ply_ptr, rom_ptr->first_ply, cmnd->str[2], cmnd->val[2]); if(!crt_ptr || crt_ptr == ply_ptr || strlen(cmnd->str[2]) < 3) { print(fd, "That's not here.\n"); return(0); } } if(crt_ptr->type != PLAYER && F_ISSET(crt_ptr, MUNKIL)) { print(fd, "You cannot harm %s.\n", F_ISSET(crt_ptr, MMALES) ? "him":"her"); return(0); } if(crt_ptr->type != PLAYER && F_ISSET(crt_ptr, MPERMT)) { print(fd, "%M seems unaffected by fear.\n",crt_ptr); return(0); } if((crt_ptr->type == PLAYER && F_ISSET(crt_ptr, PRMAGI)) || (crt_ptr->type != PLAYER && F_ISSET(crt_ptr, MRMAGI))) dur /= 2; crt_ptr->lasttime[LT_FEARS].ltime = time(0); crt_ptr->lasttime[LT_FEARS].interval = dur; if (crt_ptr->type == PLAYER) F_SET(crt_ptr,PFEARS); else F_SET(crt_ptr,MFEARS); if(how == CAST || how == SCROLL || how == WAND) { print(fd, "Fear spell cast on %s.\n", crt_ptr->name); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, "%M casts fear on %m.", ply_ptr, crt_ptr); print(crt_ptr->fd, "%M casts a fear spell on you.\n", ply_ptr); } if(crt_ptr->type != PLAYER){ add_enm_crt(ply_ptr->name, crt_ptr); } } return(1); } /**********************************************************************/ /* silence */ /**********************************************************************/ /* Silence causes a player or monster to lose their voice, makin them */ /* unable to casts spells, use scrolls, speak, yell, or broadcast */ int silence(ply_ptr, cmnd, how) creature *ply_ptr; cmd *cmnd; int how; { creature *crt_ptr; room *rom_ptr; int fd, dur; fd = ply_ptr->fd; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 12 && how == CAST) { print(fd, "Not enough magic points.\n"); return(0); } if(!S_ISSET(ply_ptr, SSILNC) && how == CAST) { print(fd, "You don't know that spell.\n"); return(0); } if(F_ISSET(ply_ptr, PINVIS)) { F_CLR(ply_ptr, PINVIS); print(fd, "Your invisibility fades.\n"); broadcast_rom(fd, ply_ptr->rom_num, "%M fades into view.", ply_ptr); } if(how == CAST) { dur = 300 + mrand(1,30)*10 + bonus[ply_ptr->intelligence]*150; ply_ptr->mpcur -= 12; } else if (how == SCROLL) dur = 300 + mrand(1,15)*10 + bonus[ply_ptr->intelligence]*75; else dur = 300 + mrand(1,15)*10; if(spell_fail(ply_ptr, how)) { return(0); } /* silence on self */ if(cmnd->num == 2) { if (F_ISSET(ply_ptr,PRMAGI)) dur /= 2; ply_ptr->lasttime[LT_SILNC].ltime = time(0); ply_ptr->lasttime[LT_SILNC].interval = dur; F_SET(ply_ptr,PSILNC); if(how == CAST || how == SCROLL || how == WAND) { print(fd, "Your voice begins to fade.\n"); broadcast_rom(fd, ply_ptr->rom_num, "%M casts silence on %sself.", ply_ptr, F_ISSET(ply_ptr, PMALES) ? "him":"her"); } else if(how == POTION) print(fd, "Your throat goes dry and you cannot speak.\n"); } /* silence a monster or player */ else { if(how == POTION) { print(fd, "You can only use a potion on yourself.\n"); return(0); } crt_ptr = find_crt(ply_ptr, rom_ptr->first_mon, cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { cmnd->str[2][0] = up(cmnd->str[2][0]); crt_ptr = find_crt(ply_ptr, rom_ptr->first_ply, cmnd->str[2], cmnd->val[2]); if(!crt_ptr || crt_ptr == ply_ptr || strlen(cmnd->str[2]) < 3) { print(fd, "That's not here.\n"); return(0); } } if(crt_ptr->type != PLAYER && F_ISSET(crt_ptr, MUNKIL)) { print(fd, "You cannot harm %s.\n", F_ISSET(crt_ptr, MMALES) ? "him":"her"); return(0); } if((crt_ptr->type == PLAYER && F_ISSET(crt_ptr, PRMAGI)) || (crt_ptr->type != PLAYER && F_ISSET(crt_ptr, MRMAGI))) dur /= 2; crt_ptr->lasttime[LT_SILNC].ltime = time(0); crt_ptr->lasttime[LT_SILNC].interval = dur; if (crt_ptr->type == PLAYER) F_SET(crt_ptr,PSILNC); else F_SET(crt_ptr,MSILNC); if(how == CAST || how == SCROLL || how == WAND) { print(fd, "Silence casted on %s.\n", crt_ptr->name); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, "%M casts a silence spell on %m.", ply_ptr, crt_ptr); print(crt_ptr->fd, "%M casts a silence spell on you.\n", ply_ptr); } if(crt_ptr->type != PLAYER){ add_enm_crt(ply_ptr->name, crt_ptr); } } return(1); } /**********************************************************************/ /* remove blindness */ /**********************************************************************/ int rm_blindness(ply_ptr, cmnd, how) creature *ply_ptr; cmd *cmnd; int how; { room *rom_ptr; creature *crt_ptr; int fd; fd = ply_ptr->fd; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 12 && how == CAST) { print(fd, "Not enough magic points.\n"); return(0); } if(ply_ptr->class != CLERIC && ply_ptr->class != PALADIN && ply_ptr->class < CARETAKER && how == CAST) { print(fd, "Only clerics and paladins may cast that spell.\n"); return(0); } if(!S_ISSET(ply_ptr, SRMDIS) && how == CAST) { print(fd, "You don't know that spell.\n"); return(0); } if(spell_fail(ply_ptr, how)) { if(how==CAST) ply_ptr->mpcur -= 12; return(0); } if(cmnd->num == 2) { if(how == CAST) ply_ptr->mpcur -= 12; if(how == CAST || how == SCROLL || how == WAND) { print(fd, "Remove blindness spell cast on yourself.\n"); print(fd, "You can see.\n"); broadcast_rom(fd, ply_ptr->rom_num, "%M casts remove blindness on %sself.", ply_ptr, F_ISSET(ply_ptr, PMALES) ? "him":"her"); } else if(how == POTION & F_ISSET(ply_ptr, PBLIND)) print(fd, "You can see.\n"); else if(how == POTION) print(fd, "Nothing happens.\n"); F_CLR(ply_ptr, PBLIND); } else { if(how == POTION) { print(fd, "You can only use a potion on yourself.\n"); return(0); } cmnd->str[2][0] = up(cmnd->str[2][0]); crt_ptr = find_crt(ply_ptr, rom_ptr->first_ply, cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { cmnd->str[2][0] = low(cmnd->str[2][0]); crt_ptr = find_crt(ply_ptr, rom_ptr->first_mon, cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { print(fd, "That's not here.\n"); return(0); } } if(how == CAST) ply_ptr->mpcur -= 12; if (crt_ptr->type == PLAYER) F_CLR(crt_ptr,PBLIND); else F_CLR(crt_ptr,MBLIND); if(how == CAST || how == SCROLL || how == WAND) { print(fd, "You cast the remove blindness on %m.\n", crt_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, "%M casts remove blindness on %m.", ply_ptr, crt_ptr); print(crt_ptr->fd, "%M casts remove blindness on you.\nYou can see.\n", ply_ptr); } } return(1); } /****************************************************************************/ /* spell_fail */ /****************************************************************************/ /* This function returns 1 if the casting of a spell fails, and 0 if it is */ /* sucessful. */ int spell_fail(ply_ptr, how) creature *ply_ptr; int how; { int chance, fd, n; if(how == POTION) return(0); if(ply_ptr->type != PLAYER) return(0); fd=ply_ptr->fd; n = mrand(1,100); luck(ply_ptr); switch(ply_ptr->class) { case ASSASSIN: chance = ((ply_ptr->level+bonus[ply_ptr->intelligence])*5)+30; chance *= Ply[fd].extr->luck/50; if(n>chance) { print(fd,"Your spell fails.\n"); return(1); } else return(0); case BARBARIAN: chance = ((ply_ptr->level+bonus[ply_ptr->intelligence])*5); chance *= Ply[fd].extr->luck/50; if(n>chance) { print(fd,"Your spell fails.\n"); return(1); } else return(0); case BARD: chance = ((ply_ptr->level+bonus[ply_ptr->intelligence])*5)+60; chance *= Ply[fd].extr->luck/50; if(n>chance) { print(fd,"Your spell fails.\n"); return(1); } else return(0); case CLERIC: chance = ((ply_ptr->level+bonus[ply_ptr->intelligence])*5)+65; chance *= Ply[fd].extr->luck/50; if(n>chance) { print(fd,"Your spell fails.\n"); return(1); } else return(0); case FIGHTER: chance = ((ply_ptr->level+bonus[ply_ptr->intelligence])*5)+10; chance *= Ply[fd].extr->luck/50; if(n>chance) { print(fd,"Your spell fails.\n"); return(1); } else return(0); case MAGE: chance = ((ply_ptr->level+bonus[ply_ptr->intelligence])*5)+75; chance *= Ply[fd].extr->luck/50; if(n>chance) { print(fd,"Your spell fails.\n"); return(1); } else return(0); case MONK: chance = ((ply_ptr->level+bonus[ply_ptr->intelligence])*6)+25; chance *= Ply[fd].extr->luck/50; if(n>chance) { print(fd,"Your spell fails.\n"); return(1); } else return(0); case PALADIN: chance = ((ply_ptr->level+bonus[ply_ptr->intelligence])*5)+50; chance *= Ply[fd].extr->luck/50; if(n>chance) { print(fd,"Your spell fails.\n"); return(1); } else return(0); case RANGER: chance = ((ply_ptr->level+bonus[ply_ptr->intelligence])*4)+56; chance *= Ply[fd].extr->luck/50; if(n>chance) { print(fd,"Your spell fails.\n"); return(1); } else return(0); case THIEF: chance = ((ply_ptr->level+bonus[ply_ptr->intelligence])*6)+22; chance *= Ply[fd].extr->luck/50; if(n>chance) { print(fd,"Your spell fails.\n"); return(1); } else return(0); case DRUID: chance = ((ply_ptr->level+bonus[ply_ptr->intelligence])*5)+65; chance *= Ply[fd].extr->luck/50; if(n>chance) { print(fd,"Your spell fails.\n"); return(1); } else return(0); case ALCHEMIST: chance = ((ply_ptr->level+bonus[ply_ptr->intelligence])*5)+70; chance *= Ply[fd].extr->luck/50; if(n>chance) { print(fd,"Your spell fails.\n"); return(1); } else return(0); default: return(0); } } /****************************************************************************/ /* fortune */ /****************************************************************************/ /* This allows bards to tell the luck of a given player. */ int fortune(ply_ptr, cmnd, how) creature *ply_ptr; cmd *cmnd; int how; { int fd, luk; creature *crt_ptr; room *rom_ptr; fd = ply_ptr->fd; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->class != BARD && ply_ptr->class < CARETAKER) { print(fd, "Only bards may do that.\n"); return(0); } if(ply_ptr->mpcur < 12 && how == CAST) { print(fd, "Not enough magic points.\n"); return(0); } if(!S_ISSET(ply_ptr, SFORTU) && how == CAST) { print(fd, "You don't know that spell.\n"); return(0); } if(spell_fail(ply_ptr, how)) { if(how==CAST) ply_ptr->mpcur -= 12; return(0); } if(cmnd->num == 2) { if(how == CAST) ply_ptr->mpcur -= 12; if(how == CAST || how == SCROLL || how == WAND) { print(fd, "Fortune spell cast on yourself.\n"); luk = Ply[fd].extr->luck/10; MAX(luk, 1); switch(luk) { case 1: print(fd, "Your death will be tragic.\n."); break; case 2: print(fd, "A black cat must have crossed your path.\n"); break; case 3: print(fd, "If it weren't for bad luck you'd have no luck at all.\n"); break; case 4: print(fd, "Your karma is imbalanced.\n"); break; case 5: print(fd, "Your future is uncertain.\n"); break; case 6: print(fd, "Without intervention you may find yourself in a dire situation.\n"); break; case 7: print(fd, "Long range prospects look good.\n"); break; case 8: print(fd, "Count your blessings, for others are less fortunate.\n"); break; case 9: print(fd, "The fates have smiled upon you.\n"); break; case 10: print(fd, "Your death would be tragic.\n"); break; default: print (fd, "You can't tell right now.\n"); } broadcast_rom(fd, ply_ptr->rom_num, "%M reads %s aura.", ply_ptr, F_ISSET(ply_ptr, PMALES) ? "his":"her"); } else if(how == POTION) print(fd, "Nothing happens.\n"); } else { if(how == POTION) { print(fd, "You can only use a potion on yourself.\n"); return(0); } cmnd->str[2][0] = up(cmnd->str[2][0]); crt_ptr = find_crt(ply_ptr, rom_ptr->first_ply, cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { cmnd->str[2][0] = low(cmnd->str[2][0]); crt_ptr = find_crt(ply_ptr, rom_ptr->first_mon, cmnd->str[2], cmnd->str[2]); if(!crt_ptr) { print(fd, "That's not here.\n"); return(0); } } if(crt_ptr->type == MONSTER) luk = crt_ptr->alignment/10; else luk = Ply[crt_ptr->fd].extr->luck/10; MAX(luk, 1); print(fd, "Fortune spell cast on %s.\n", crt_ptr); switch(luk) { case 1: print(fd, "%M's death will be swift and certain.\n", crt_ptr); break; case 2: print(fd, "You sense %M's karma is imbalanced.\n", crt_ptr); break; case 3: print(fd, "A black cat must have crossed %M's path.\n", crt_ptr); break; case 4: print(fd, "%M's aura reeks of danger.\n", crt_ptr); break; case 5: print(fd, "Without intervention %M may end up in a dire situation.\n", crt_ptr); break; case 6: print(fd, "%M's future is uncertain.\n", crt_ptr); break; case 7: print(fd, "Long range prospects look good for %M.\n", crt_ptr); break; case 8: print(fd, "%M should count their blessings, as others are less fortunate.\n", crt_ptr); break; case 9: print(fd, "The fates smile upon %M.\n", crt_ptr); break; case 10: print(fd, "%M's death would be tragic and unexpected.\n", crt_ptr); break; default: print (fd, "You can't tell right now.\n"); } broadcast_rom(fd, ply_ptr->rom_num, "%M reads %s's aura.\n", ply_ptr, crt_ptr); return(0); } }