Mercurial > hg > early-roguelike
annotate rogue4/sticks.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 | 1b73a8641b37 | 
| children | e52a8a7ad4c5 | 
| rev | line source | 
|---|---|
| 
12
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
1 /* | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
2 * Functions to implement the various sticks one might find | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
3 * while wandering around the dungeon. | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
4 * | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
5 * @(#)sticks.c 4.22 (Berkeley) 5/19/82 | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
6 * | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
7 * Rogue: Exploring the Dungeons of Doom | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
8 * Copyright (C) 1980, 1981, 1982 Michael Toy, Ken Arnold and Glenn Wichman | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
9 * All rights reserved. | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
10 * | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
11 * See the file LICENSE.TXT for full copyright and licensing information. | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
12 */ | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
13 | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
14 #include <curses.h> | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
15 #include <ctype.h> | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
16 #include <string.h> | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
17 #include "rogue.h" | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
18 | 
| 215 | 19 void drain(void); | 
| 20 | |
| 
12
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
21 /* | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
22 * fix_stick: | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
23 * Set up a new stick | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
24 */ | 
| 215 | 25 void | 
| 26 fix_stick(THING *cur) | |
| 
12
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
27 { | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
28 if (strcmp(ws_type[cur->o_which], "staff") == 0) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
29 strcpy(cur->o_damage,"2d3"); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
30 else | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
31 strcpy(cur->o_damage,"1d1"); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
32 strcpy(cur->o_hurldmg,"1d1"); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
33 | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
34 cur->o_charges = 3 + rnd(5); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
35 switch (cur->o_which) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
36 { | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
37 case WS_HIT: | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
38 cur->o_hplus = 100; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
39 cur->o_dplus = 3; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
40 strcpy(cur->o_damage,"1d8"); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
41 when WS_LIGHT: | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
42 cur->o_charges = 10 + rnd(10); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
43 } | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
44 } | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
45 | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
46 /* | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
47 * do_zap: | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
48 * Perform a zap with a wand | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
49 */ | 
| 215 | 50 void | 
| 51 do_zap(void) | |
| 
12
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
52 { | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
53 register THING *obj, *tp; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
54 register int y, x; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
55 register char *name; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
56 | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
57 if ((obj = get_item("zap with", STICK)) == NULL) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
58 return; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
59 if (obj->o_type != STICK) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
60 { | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
61 after = FALSE; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
62 msg("you can't zap with that!"); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
63 return; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
64 } | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
65 if (obj->o_charges == 0) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
66 { | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
67 msg("nothing happens"); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
68 return; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
69 } | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
70 switch (obj->o_which) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
71 { | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
72 case WS_LIGHT: | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
73 /* | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
74 * Reddy Kilowat wand. Light up the room | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
75 */ | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
76 ws_know[WS_LIGHT] = TRUE; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
77 if (proom->r_flags & ISGONE) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
78 msg("the corridor glows and then fades"); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
79 else | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
80 { | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
81 proom->r_flags &= ~ISDARK; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
82 /* | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
83 * Light the room and put the player back up | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
84 */ | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
85 enter_room(&hero); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
86 addmsg("the room is lit"); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
87 if (!terse) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
88 addmsg(" by a shimmering blue light"); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
89 endmsg(); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
90 } | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
91 when WS_DRAIN: | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
92 /* | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
93 * Take away 1/2 of hero's hit points, then take it away | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
94 * evenly from the monsters in the room (or next to hero | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
95 * if he is in a passage) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
96 */ | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
97 if (pstats.s_hpt < 2) | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
98 { | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
99 msg("you are too weak to use it"); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
100 return; | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
101 } | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
102 else | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
103 drain(); | 
| 
 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
104 when WS_POLYMORPH: | 
