Mercurial > hg > early-roguelike
annotate xrogue/scrolls.c @ 295:1e1c81fbb533
Rogue V5: fix elemental wands.
Bolts often failed to hit, due to some struct members not being
initialized.
Reported by 'LazyCat' from RogueTemple.
| author | John "Elwin" Edwards | 
|---|---|
| date | Fri, 12 Jan 2018 18:02:39 -0500 | 
| parents | f54901b9c39b | 
| children | e52a8a7ad4c5 | 
| rev | line source | 
|---|---|
| 133 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 1 /* | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 2 scrolls.c - Functions for dealing with scrolls | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 3 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 4 XRogue: Expeditions into the Dungeons of Doom | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 5 Copyright (C) 1991 Robert Pietkivitch | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 6 All rights reserved. | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 7 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 8 Based on "Advanced Rogue" | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 9 Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka and AT&T | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 10 All rights reserved. | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 11 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 12 Based on "Rogue: Exploring the Dungeons of Doom" | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 13 Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 14 All rights reserved. | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 15 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 16 See the file LICENSE.TXT for full copyright and licensing information. | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 17 */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 18 | 
| 135 | 19 #include <stdlib.h> | 
| 220 
f54901b9c39b
XRogue: convert to ANSI-style function declarations.
 John "Elwin" Edwards parents: 
170diff
changeset | 20 #include <string.h> | 
| 133 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 21 #include <curses.h> | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 22 #include <ctype.h> | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 23 #include "rogue.h" | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 24 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 25 /* | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 26 * let the hero get rid of some type of monster | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 27 */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 28 | 
| 220 
f54901b9c39b
XRogue: convert to ANSI-style function declarations.
 John "Elwin" Edwards parents: 
170diff
changeset | 29 void | 
| 
f54901b9c39b
XRogue: convert to ANSI-style function declarations.
 John "Elwin" Edwards parents: 
170diff
changeset | 30 genocide(void) | 
| 133 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 31 { | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 32 register struct linked_list *ip; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 33 register struct thing *mp; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 34 register struct linked_list *nip; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 35 /* cannot genocide any uniques */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 36 register int num_monst = NUMMONST-NUMUNIQUE-NUMDINOS; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 37 register int which_monst; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 38 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 39 which_monst = makemonster(FALSE, "wipe out"); | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 40 if (which_monst <= 0 || which_monst >= num_monst) { | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 41 msg(""); | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 42 return; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 43 } | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 44 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 45 /* Remove this monster from the present level */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 46 for (ip = mlist; ip; ip = nip) { | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 47 mp = THINGPTR(ip); | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 48 nip = next(ip); | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 49 if (mp->t_index == which_monst) { | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 50 killed(ip, FALSE, FALSE, TRUE); | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 51 } | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 52 } | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 53 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 54 /* Remove from available monsters */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 55 monsters[which_monst].m_normal = FALSE; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 56 monsters[which_monst].m_wander = FALSE; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 57 mpos = 0; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 58 msg("You have wiped out the %s.", monsters[which_monst].m_name); | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 59 } | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 60 | 
| 220 
f54901b9c39b
XRogue: convert to ANSI-style function declarations.
 John "Elwin" Edwards parents: 
170diff
changeset | 61 void | 
| 
f54901b9c39b
XRogue: convert to ANSI-style function declarations.
 John "Elwin" Edwards parents: 
170diff
changeset | 62 read_scroll(int which, int flag, bool is_scroll) | 
| 133 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 63 { | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 64 register struct object *obj = NULL, *nobj; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 65 register struct linked_list *item, *nitem; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 66 register int i,j; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 67 register unsigned char ch, nch; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 68 bool cursed, blessed; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 69 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 70 blessed = FALSE; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 71 cursed = FALSE; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 72 item = NULL; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 73 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 74 if (which < 0) { | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 75 if (on(player, ISBLIND)) { | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 76 msg("You can't see to read anything!"); | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 77 return; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 78 } | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 79 if (on(player, ISINWALL)) { | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 80 msg("You can't see the scroll while inside rock!"); | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 81 return; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 82 } | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 83 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 84 /* This is a scroll or book. */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 85 if (player.t_action != C_READ) { | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 86 int units; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 87 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 88 item = get_item(pack, "read", READABLE, FALSE, FALSE); | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 89 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 90 /* | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 91 * Make certain that it is somethings that we want to read | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards | 
