[BACK]Return to wizard.c CVS log [TXT][DIR] Up to [contributed] / early-roguelike / urogue

Annotation of early-roguelike/urogue/wizard.c, Revision 1.1

1.1     ! rubenllo    1: /*
        !             2:     wizard.c - Special wizard commands
        !             3:
        !             4:     UltraRogue: The Ultimate Adventure in the Dungeons of Doom
        !             5:     Copyright (C) 1985, 1986, 1992, 1993, 1995 Herb Chong
        !             6:     All rights reserved.
        !             7:
        !             8:     Based on "Advanced Rogue"
        !             9:     Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka
        !            10:     All rights reserved.
        !            11:
        !            12:     Based on "Rogue: Exploring the Dungeons of Doom"
        !            13:     Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
        !            14:     All rights reserved.
        !            15:
        !            16:     See the file LICENSE.TXT for full copyright and licensing information.
        !            17: */
        !            18:
        !            19: #include <string.h>
        !            20: #include <stdlib.h>
        !            21: #include "rogue.h"
        !            22:
        !            23: /*
        !            24:     whatis()
        !            25:         What a certain object is
        !            26: */
        !            27:
        !            28: void
        !            29: whatis(struct linked_list *what)
        !            30: {
        !            31:     struct object *obj;
        !            32:     int kludge;
        !            33:     int print_message = FALSE;
        !            34:
        !            35:     if (what == NULL)
        !            36:     {
        !            37:         print_message = TRUE;
        !            38:
        !            39:         while ((what = get_item("identify", 0)) == NULL)
        !            40:             ;
        !            41:     }
        !            42:
        !            43:     obj = OBJPTR(what);
        !            44:     obj->o_flags |= ISKNOW;
        !            45:
        !            46:     switch (obj->o_type)
        !            47:     {
        !            48:         case SCROLL: kludge = TYP_SCROLL; break;
        !            49:         case POTION: kludge = TYP_POTION; break;
        !            50:         case STICK:  kludge = TYP_STICK;  break;
        !            51:         case RING:   kludge = TYP_RING;   break;
        !            52:         case WEAPON:
        !            53:         case ARMOR:
        !            54:         default:     kludge = -1;         break;
        !            55:     }
        !            56:
        !            57:     if (kludge != -1)
        !            58:     {
        !            59:         know_items[kludge][obj->o_which] = TRUE;
        !            60:
        !            61:         if (guess_items[kludge][obj->o_which])
        !            62:         {
        !            63:             ur_free(guess_items[kludge][obj->o_which]);
        !            64:             guess_items[kludge][obj->o_which] = NULL;
        !            65:         }
        !            66:     }
        !            67:
        !            68:     if (print_message)
        !            69:         msg(inv_name(obj, UPPERCASE));
        !            70: }
        !            71:
        !            72: /*
        !            73:     teleport()
        !            74:         Bamf the hero someplace else
        !            75: */
        !            76:
        !            77: void
        !            78: teleport(void)
        !            79: {
        !            80:     struct room *new_rp = NULL, *old_rp = roomin(hero);
        !            81:
        !            82:     int rm, which;
        !            83:     coord c;
        !            84:     int is_lit = FALSE; /* For saving room light state */
        !            85:     int rand_position = TRUE;
        !            86:
        !            87:     c = hero;
        !            88:
        !            89:     mvwaddch(cw, hero.y, hero.x, mvwinch(stdscr, hero.y, hero.x));
        !            90:
        !            91:     if (is_wearing(R_TELCONTROL))
        !            92:     {
        !            93:         msg("Where do you wish to teleport to? (* for help)");
        !            94:         wmove(cw, hero.y, hero.x);
        !            95:         wrefresh(cw);
        !            96:
        !            97:         which = (short) (readchar() & 0177);
        !            98:
        !            99:         while (which != (short) ESCAPE && which != (short) LINEFEED
        !           100:             && which != (short) CARRIAGE_RETURN)
        !           101:         {
        !           102:             switch(which)
        !           103:             {
        !           104:                 case 'h':   c.x--; break;
        !           105:                 case 'j':   c.y++; break;
        !           106:                 case 'k':   c.y--; break;
        !           107:                 case 'l':   c.x++; break;
        !           108:                 case 'y':   c.x--;
        !           109:                             c.y--; break;
        !           110:                 case 'u':   c.x++;
        !           111:                             c.y--; break;
        !           112:                 case 'b':   c.x--;
        !           113:                             c.y++; break;
        !           114:                 case 'n':   c.x++;
        !           115:                             c.y++; break;
        !           116:                 case '*':
        !           117:                     msg("Use h,j,k,l,y,u,b,n to position cursor, then hit"
        !           118:                         "return.");
        !           119:             }
        !           120:
        !           121:             c.y = max(c.y, 1);
        !           122:             c.y = min(c.y, LINES - 3);
        !           123:             c.x = max(c.x, 1);
        !           124:             c.x = min(c.x, COLS - 1);
        !           125:             wmove(cw, c.y, c.x);
        !           126:             wrefresh(cw);
        !           127:             which = (short) (readchar() & 0177);
        !           128:         }
        !           129:
        !           130:         which = winat(c.y, c.x);
        !           131:
        !           132:         if ((which == FLOOR || which == PASSAGE || which == DOOR) &&
        !           133:             ((ring_value(R_TELCONTROL) == 0 && rnd(10) < 6)
        !           134:              || (ring_value(R_TELCONTROL) > 0 && rnd(10) < 9)))
        !           135:         {
        !           136:             rand_position = FALSE;
        !           137:             msg("You attempt succeeds.");
        !           138:             hero = c;
        !           139:             new_rp = roomin(hero);
        !           140:         }
        !           141:         else
        !           142:             msg("Your attempt fails.");
        !           143:     }
        !           144:
        !           145:     if (rand_position)
        !           146:     {
        !           147:         do
        !           148:         {
        !           149:             rm = rnd_room();
        !           150:             rnd_pos(&rooms[rm], &hero);
        !           151:         }
        !           152:         while (winat(hero.y, hero.x) != FLOOR);
        !           153:
        !           154:         new_rp = &rooms[rm];
        !           155:     }
        !           156:
        !           157:     /* If hero gets moved, darken old room */
        !           158:
        !           159:     if (old_rp && old_rp != new_rp)
        !           160:     {
        !           161:         if (!(old_rp->r_flags & ISDARK))
        !           162:             is_lit = TRUE;
        !           163:
        !           164:         old_rp->r_flags |= ISDARK;  /* Fake darkness */
        !           165:         light(&c);
        !           166:
        !           167:         if (is_lit)
        !           168:             old_rp->r_flags &= ~ISDARK; /* Restore light state */
        !           169:     }
        !           170:
        !           171:     light(&hero);
        !           172:     mvwaddch(cw, hero.y, hero.x, PLAYER);
        !           173:
        !           174:     /* turn off ISHELD in case teleportation was done while fighting */
        !           175:
        !           176:     if (on(player, ISHELD))
        !           177:     {
        !           178:         struct linked_list  *ip, *nip;
        !           179:         struct thing    *mp;
        !           180:
        !           181:         turn_off(player, ISHELD);
        !           182:         hold_count = 0;
        !           183:
        !           184:         for (ip = mlist; ip; ip = nip)
        !           185:         {
        !           186:             mp = THINGPTR(ip);
        !           187:             nip = next(ip);
        !           188:
        !           189:             if (on(*mp, DIDHOLD))
        !           190:             {
        !           191:                 turn_off(*mp, DIDHOLD);
        !           192:                 turn_on(*mp, CANHOLD);
        !           193:             }
        !           194:
        !           195:             turn_off(*mp, DIDSUFFOCATE);
        !           196:         }
        !           197:     }
        !           198:
        !           199:     extinguish_fuse(FUSE_SUFFOCATE);
        !           200:     player.t_no_move = 0;   /* not trapped anymore */
        !           201:     count = 0;
        !           202:     running = FALSE;
        !           203:
        !           204:     return;
        !           205: }
        !           206:
        !           207: /*
        !           208:     passwd()
        !           209:         see if user knows password
        !           210: */
        !           211:
        !           212: int
        !           213: passwd(void)
        !           214: {
        !           215:     char *sp, c;
        !           216:     char buf[2 * LINELEN];
        !           217:
        !           218:     msg("Wizard's Password:");
        !           219:     mpos = 0;
        !           220:     sp = buf;
        !           221:
        !           222:     while ((c = (readchar() & 0177)) != '\n' && c != '\r' && c != '\033')
        !           223:     {
        !           224:         if (c == '\0')
        !           225:             sp = buf;
        !           226:         else if (c == '\b' && sp > buf)
        !           227:             sp--;
        !           228:         else
        !           229:             *sp++ = c;
        !           230:     }
        !           231:
        !           232:     if (sp == buf)
        !           233:         return(FALSE);
        !           234:
        !           235:     *sp = '\0';
        !           236:
        !           237:     return(TRUE);
        !           238: }

CVSweb