[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

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