Mercurial > hg > early-roguelike
annotate srogue/weapons.c @ 201:6fb21004a981
Fix some preprocessor directives.
Include process.h in the right place, and use the correct definition of
PATH_MAX, when compiling on Windows.
| author | John "Elwin" Edwards | 
|---|---|
| date | Wed, 12 Aug 2015 16:56:19 -0400 | 
| parents | 2128c7dc8a40 | 
| children | 94a0d9dd5ce1 | 
| rev | line source | 
|---|---|
| 
36
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
1 /* | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
2 * Functions for dealing with weapons | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
3 * | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
4 * @(#)weapons.c 9.0 (rdk) 7/17/84 | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
5 * | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
6 * Super-Rogue | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
7 * Copyright (C) 1984 Robert D. Kindelberger | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
8 * All rights reserved. | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
9 * | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
10 * Based on "Rogue: Exploring the Dungeons of Doom" | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
11 * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
12 * All rights reserved. | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
13 * | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
14 * See the file LICENSE.TXT for full copyright and licensing information. | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
15 */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
16 | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
17 #include <ctype.h> | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
18 #include "rogue.h" | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
19 #include "rogue.ext" | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
20 | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
21 /* | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
22 * missile: | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
23 * Fire a missile in a given direction | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
24 */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
25 missile(ydelta, xdelta) | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
26 int ydelta, xdelta; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
27 { | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
28 reg struct object *obj, *nowwield; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
29 reg struct linked_list *item, *nitem; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
30 | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
31 /* | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
32 * Get which thing we are hurling | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
33 */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
34 nowwield = cur_weapon; /* must save current weap */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
35 if ((item = get_item("throw", WEAPON)) == NULL) | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
36 return; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
37 obj = OBJPTR(item); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
38 if (!dropcheck(obj) || is_current(obj)) | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
39 return; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
40 if (obj == nowwield || obj->o_type != WEAPON) { | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
41 reg int c; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
42 | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
43 msg("Do you want to throw that %s? (y or n)",obj->o_typname); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
44 do { | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
45 c = readchar(); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
46 if (isupper(c)) | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
47 c = tolower(c); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
48 if (c == ESCAPE || c == 'n') { | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
49 msg(""); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
50 cur_weapon = nowwield; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
51 after = FALSE; /* ooops, a mistake */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
52 return; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
53 } | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
54 } while (c != 'y'); /* keep looking for good ans */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
55 } | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
56 /* | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
57 * Get rid of the thing. If it is a non-multiple item object, or | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
58 * if it is the last thing, just drop it. Otherwise, create a new | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
59 * item with a count of one. | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
60 */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
61 if (obj->o_count < 2) { | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
62 detach(pack, item); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
63 } | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
64 else { | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
65 obj->o_count--; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
66 obj->o_vol = itemvol(obj); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
67 nitem = new_item(sizeof *obj); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
68 obj = OBJPTR(nitem); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
69 *obj = *(OBJPTR(item)); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
70 obj->o_count = 1; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
71 obj->o_vol = itemvol(obj); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
72 item = nitem; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
73 } | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
74 updpack(); /* new pack weight */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
75 do_motion(obj, ydelta, xdelta); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
76 if (!isalpha(mvwinch(mw, obj->o_pos.y, obj->o_pos.x)) | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
77 || !hit_monster(&obj->o_pos, obj)) | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
78 fall(item, TRUE); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
79 mvwaddch(cw, hero.y, hero.x, PLAYER); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
80 } | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
81 | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
82 /* | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
83 * do the actual motion on the screen done by an object traveling | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
84 * across the room | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
85 */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
86 do_motion(obj, ydelta, xdelta) | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
87 struct object *obj; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
88 int ydelta, xdelta; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
89 { | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
90 reg int ch, y, x; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
91 | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
92 obj->o_pos = hero; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
93 while (1) { | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
94 y = obj->o_pos.y; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
95 x = obj->o_pos.x; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
96 if (!ce(obj->o_pos, hero) && cansee(unc(obj->o_pos)) && | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
97 mvwinch(cw, y, x) != ' ') | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
98 mvwaddch(cw, y, x, show(y, x)); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
99 /* | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
100 * Get the new position | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
101 */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
102 obj->o_pos.y += ydelta; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
103 obj->o_pos.x += xdelta; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
104 y = obj->o_pos.y; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
105 x = obj->o_pos.x; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
106 ch = winat(y, x); | 
