diff options
author | markm <markm@FreeBSD.org> | 2002-10-21 07:40:27 +0000 |
---|---|---|
committer | markm <markm@FreeBSD.org> | 2002-10-21 07:40:27 +0000 |
commit | e41bd31debce476e2f6ae864651c7380bea2cdbb (patch) | |
tree | b90261e8ce260fee190d0f359aa2884ddf2510de /games/rogue/pack.c | |
parent | 1cdc4d3dd3997f7f78a4a0ff9c52006837b0b5c4 (diff) | |
download | FreeBSD-src-e41bd31debce476e2f6ae864651c7380bea2cdbb.zip FreeBSD-src-e41bd31debce476e2f6ae864651c7380bea2cdbb.tar.gz |
Deorbit complete. We dont build these anymore, so into the attic they go.
Diffstat (limited to 'games/rogue/pack.c')
-rw-r--r-- | games/rogue/pack.c | 579 |
1 files changed, 0 insertions, 579 deletions
diff --git a/games/rogue/pack.c b/games/rogue/pack.c deleted file mode 100644 index 5ce3520..0000000 --- a/games/rogue/pack.c +++ /dev/null @@ -1,579 +0,0 @@ -/* - * Copyright (c) 1988, 1993 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * Timothy C. Stoehr. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)pack.c 8.1 (Berkeley) 5/31/93"; -#endif -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -/* - * pack.c - * - * This source herein may be modified and/or distributed by anybody who - * so desires, with the following restrictions: - * 1.) No portion of this notice shall be removed. - * 2.) Credit shall not be taken for the creation of this source. - * 3.) This code is not to be traded, sold, or used for personal - * gain or profit. - * - */ - -#include "rogue.h" - -const char *curse_message = "you can't, it appears to be cursed"; - -extern short levitate; - -object * -add_to_pack(obj, pack, condense) -object *obj, *pack; -int condense; -{ - object *op; - - if (condense) { - if (op = check_duplicate(obj, pack)) { - free_object(obj); - return(op); - } else { - obj->ichar = next_avail_ichar(); - } - } - if (pack->next_object == 0) { - pack->next_object = obj; - } else { - op = pack->next_object; - - while (op->next_object) { - op = op->next_object; - } - op->next_object = obj; - } - obj->next_object = 0; - return(obj); -} - -take_from_pack(obj, pack) -object *obj, *pack; -{ - while (pack->next_object != obj) { - pack = pack->next_object; - } - pack->next_object = pack->next_object->next_object; -} - -/* Note: *status is set to 0 if the rogue attempts to pick up a scroll - * of scare-monster and it turns to dust. *status is otherwise set to 1. - */ - -object * -pick_up(row, col, status) -int row, col; -short *status; -{ - object *obj; - - *status = 1; - - if (levitate) { - message("you're floating in the air!", 0); - return((object *) 0); - } - obj = object_at(&level_objects, row, col); - if (!obj) { - message("pick_up(): inconsistent", 1); - return(obj); - } - if ( (obj->what_is == SCROL) && - (obj->which_kind == SCARE_MONSTER) && - obj->picked_up) { - message("the scroll turns to dust as you pick it up", 0); - dungeon[row][col] &= (~OBJECT); - vanish(obj, 0, &level_objects); - *status = 0; - if (id_scrolls[SCARE_MONSTER].id_status == UNIDENTIFIED) { - id_scrolls[SCARE_MONSTER].id_status = IDENTIFIED; - } - return((object *) 0); - } - if (obj->what_is == GOLD) { - rogue.gold += obj->quantity; - dungeon[row][col] &= ~(OBJECT); - take_from_pack(obj, &level_objects); - print_stats(STAT_GOLD); - return(obj); /* obj will be free_object()ed in caller */ - } - if (pack_count(obj) >= MAX_PACK_COUNT) { - message("pack too full", 1); - return((object *) 0); - } - dungeon[row][col] &= ~(OBJECT); - take_from_pack(obj, &level_objects); - obj = add_to_pack(obj, &rogue.pack, 1); - obj->picked_up = 1; - return(obj); -} - -drop() -{ - object *obj, *new; - short ch; - char desc[DCOLS]; - - if (dungeon[rogue.row][rogue.col] & (OBJECT | STAIRS | TRAP)) { - message("there's already something there", 0); - return; - } - if (!rogue.pack.next_object) { - message("you have nothing to drop", 0); - return; - } - if ((ch = pack_letter("drop what?", ALL_OBJECTS)) == CANCEL) { - return; - } - if (!(obj = get_letter_object(ch))) { - message("no such item.", 0); - return; - } - if (obj->in_use_flags & BEING_WIELDED) { - if (obj->is_cursed) { - message(curse_message, 0); - return; - } - unwield(rogue.weapon); - } else if (obj->in_use_flags & BEING_WORN) { - if (obj->is_cursed) { - message(curse_message, 0); - return; - } - mv_aquatars(); - unwear(rogue.armor); - print_stats(STAT_ARMOR); - } else if (obj->in_use_flags & ON_EITHER_HAND) { - if (obj->is_cursed) { - message(curse_message, 0); - return; - } - un_put_on(obj); - } - obj->row = rogue.row; - obj->col = rogue.col; - - if ((obj->quantity > 1) && (obj->what_is != WEAPON)) { - obj->quantity--; - new = alloc_object(); - *new = *obj; - new->quantity = 1; - obj = new; - } else { - obj->ichar = 'L'; - take_from_pack(obj, &rogue.pack); - } - place_at(obj, rogue.row, rogue.col); - (void) strcpy(desc, "dropped "); - get_desc(obj, desc+8); - message(desc, 0); - (void) reg_move(); -} - -object * -check_duplicate(obj, pack) -object *obj, *pack; -{ - object *op; - - if (!(obj->what_is & (WEAPON | FOOD | SCROL | POTION))) { - return(0); - } - if ((obj->what_is == FOOD) && (obj->which_kind == FRUIT)) { - return(0); - } - op = pack->next_object; - - while (op) { - if ((op->what_is == obj->what_is) && - (op->which_kind == obj->which_kind)) { - - if ((obj->what_is != WEAPON) || - ((obj->what_is == WEAPON) && - ((obj->which_kind == ARROW) || - (obj->which_kind == DAGGER) || - (obj->which_kind == DART) || - (obj->which_kind == SHURIKEN)) && - (obj->quiver == op->quiver))) { - op->quantity += obj->quantity; - return(op); - } - } - op = op->next_object; - } - return(0); -} - -next_avail_ichar() -{ - object *obj; - int i; - boolean ichars[26]; - - for (i = 0; i < 26; i++) { - ichars[i] = 0; - } - obj = rogue.pack.next_object; - while (obj) { - ichars[(obj->ichar - 'a')] = 1; - obj = obj->next_object; - } - for (i = 0; i < 26; i++) { - if (!ichars[i]) { - return(i + 'a'); - } - } - return('?'); -} - -wait_for_ack() -{ - if (!isatty(0) || !isatty(1)) - return; - while (rgetchar() != ' ') ; -} - -pack_letter(prompt, mask) -const char *prompt; -unsigned short mask; -{ - short ch; - unsigned short tmask = mask; - - if (!mask_pack(&rogue.pack, mask)) { - message("nothing appropriate", 0); - return(CANCEL); - } - for (;;) { - - message(prompt, 0); - - for (;;) { - ch = rgetchar(); - if (!is_pack_letter(&ch, &mask)) { - sound_bell(); - } else { - break; - } - } - - if (ch == LIST) { - check_message(); - mask = tmask; - inventory(&rogue.pack, mask); - } else { - break; - } - mask = tmask; - } - check_message(); - return(ch); -} - -take_off() -{ - char desc[DCOLS]; - object *obj; - - if (rogue.armor) { - if (rogue.armor->is_cursed) { - message(curse_message, 0); - } else { - mv_aquatars(); - obj = rogue.armor; - unwear(rogue.armor); - (void) strcpy(desc, "was wearing "); - get_desc(obj, desc+12); - message(desc, 0); - print_stats(STAT_ARMOR); - (void) reg_move(); - } - } else { - message("not wearing any", 0); - } -} - -wear() -{ - short ch; - object *obj; - char desc[DCOLS]; - - if (rogue.armor) { - message("your already wearing some", 0); - return; - } - ch = pack_letter("wear what?", ARMOR); - - if (ch == CANCEL) { - return; - } - if (!(obj = get_letter_object(ch))) { - message("no such item.", 0); - return; - } - if (obj->what_is != ARMOR) { - message("you can't wear that", 0); - return; - } - obj->identified = 1; - (void) strcpy(desc, "wearing "); - get_desc(obj, desc + 8); - message(desc, 0); - do_wear(obj); - print_stats(STAT_ARMOR); - (void) reg_move(); -} - -unwear(obj) -object *obj; -{ - if (obj) { - obj->in_use_flags &= (~BEING_WORN); - } - rogue.armor = (object *) 0; -} - -do_wear(obj) -object *obj; -{ - rogue.armor = obj; - obj->in_use_flags |= BEING_WORN; - obj->identified = 1; -} - -wield() -{ - short ch; - object *obj; - char desc[DCOLS]; - - if (rogue.weapon && rogue.weapon->is_cursed) { - message(curse_message, 0); - return; - } - ch = pack_letter("wield what?", WEAPON); - - if (ch == CANCEL) { - return; - } - if (!(obj = get_letter_object(ch))) { - message("No such item.", 0); - return; - } - if (obj->what_is & (ARMOR | RING)) { - sprintf(desc, "you can't wield %s", - ((obj->what_is == ARMOR) ? "armor" : "rings")); - message(desc, 0); - return; - } - if (obj->in_use_flags & BEING_WIELDED) { - message("in use", 0); - } else { - unwield(rogue.weapon); - (void) strcpy(desc, "wielding "); - get_desc(obj, desc + 9); - message(desc, 0); - do_wield(obj); - (void) reg_move(); - } -} - -do_wield(obj) -object *obj; -{ - rogue.weapon = obj; - obj->in_use_flags |= BEING_WIELDED; -} - -unwield(obj) -object *obj; -{ - if (obj) { - obj->in_use_flags &= (~BEING_WIELDED); - } - rogue.weapon = (object *) 0; -} - -call_it() -{ - short ch; - object *obj; - struct id *id_table; - char buf[MAX_TITLE_LENGTH+2]; - - ch = pack_letter("call what?", (SCROL | POTION | WAND | RING)); - - if (ch == CANCEL) { - return; - } - if (!(obj = get_letter_object(ch))) { - message("no such item.", 0); - return; - } - if (!(obj->what_is & (SCROL | POTION | WAND | RING))) { - message("surely you already know what that's called", 0); - return; - } - id_table = get_id_table(obj); - - if (get_input_line("call it:","",buf,id_table[obj->which_kind].title,1,1)) { - id_table[obj->which_kind].id_status = CALLED; - (void) strcpy(id_table[obj->which_kind].title, buf); - } -} - -pack_count(new_obj) -const object *new_obj; -{ - object *obj; - short count = 0; - - obj = rogue.pack.next_object; - - while (obj) { - if (obj->what_is != WEAPON) { - count += obj->quantity; - } else if (!new_obj) { - count++; - } else if ((new_obj->what_is != WEAPON) || - ((obj->which_kind != ARROW) && - (obj->which_kind != DAGGER) && - (obj->which_kind != DART) && - (obj->which_kind != SHURIKEN)) || - (new_obj->which_kind != obj->which_kind) || - (obj->quiver != new_obj->quiver)) { - count++; - } - obj = obj->next_object; - } - return(count); -} - -boolean -mask_pack(pack, mask) -const object *pack; -unsigned short mask; -{ - while (pack->next_object) { - pack = pack->next_object; - if (pack->what_is & mask) { - return(1); - } - } - return(0); -} - -is_pack_letter(c, mask) -short *c; -unsigned short *mask; -{ - if (((*c == '?') || (*c == '!') || (*c == ':') || (*c == '=') || - (*c == ')') || (*c == ']') || (*c == '/') || (*c == ','))) { - switch(*c) { - case '?': - *mask = SCROL; - break; - case '!': - *mask = POTION; - break; - case ':': - *mask = FOOD; - break; - case ')': - *mask = WEAPON; - break; - case ']': - *mask = ARMOR; - break; - case '/': - *mask = WAND; - break; - case '=': - *mask = RING; - break; - case ',': - *mask = AMULET; - break; - } - *c = LIST; - return(1); - } - return(((*c >= 'a') && (*c <= 'z')) || (*c == CANCEL) || (*c == LIST)); -} - -has_amulet() -{ - return(mask_pack(&rogue.pack, AMULET)); -} - -kick_into_pack() -{ - object *obj; - char desc[DCOLS]; - short n, stat; - - if (!(dungeon[rogue.row][rogue.col] & OBJECT)) { - message("nothing here", 0); - } else { - if (obj = pick_up(rogue.row, rogue.col, &stat)) { - get_desc(obj, desc); - if (obj->what_is == GOLD) { - message(desc, 0); - free_object(obj); - } else { - n = strlen(desc); - desc[n] = '('; - desc[n+1] = obj->ichar; - desc[n+2] = ')'; - desc[n+3] = 0; - message(desc, 0); - } - } - if (obj || (!stat)) { - (void) reg_move(); - } - } -} |