Mercurial > hg > early-roguelike
comparison urogue/armor.c @ 256:c495a4f288c6
Import UltraRogue from the Roguelike Restoration Project (r1490)
author | John "Elwin" Edwards |
---|---|
date | Tue, 31 Jan 2017 19:56:04 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
253:d9badb9c0179 | 256:c495a4f288c6 |
---|---|
1 /* | |
2 armor.c - functions for dealing with armor | |
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 "rogue.h" | |
20 | |
21 /* | |
22 wear() | |
23 The player wants to wear something, so let him/her put it on. | |
24 */ | |
25 | |
26 void | |
27 wear(void) | |
28 { | |
29 struct object *obj; | |
30 | |
31 if (cur_armor != NULL) | |
32 { | |
33 msg("You are already wearing some."); | |
34 | |
35 after = FALSE; | |
36 | |
37 return; | |
38 } | |
39 | |
40 /* What does player want to wear? */ | |
41 | |
42 if ((obj = get_object(pack, "wear", ARMOR, NULL)) == NULL) | |
43 return; | |
44 | |
45 wear_ok(&player, obj, MESSAGE); | |
46 waste_time(); | |
47 | |
48 cur_armor = obj; | |
49 obj->o_flags |= ISKNOW; | |
50 | |
51 msg("You are now wearing %s.", inv_name(obj, TRUE)); | |
52 | |
53 return; | |
54 } | |
55 | |
56 /* | |
57 take_off() | |
58 Get the armor off of the players back | |
59 */ | |
60 | |
61 void | |
62 take_off(void) | |
63 { | |
64 struct object *obj; | |
65 | |
66 if ((obj = cur_armor) == NULL) | |
67 { | |
68 msg("You aren't wearing armor!"); | |
69 return; | |
70 } | |
71 | |
72 if (!dropcheck(cur_armor)) | |
73 return; | |
74 | |
75 msg("You were wearing %c%c) %s.", ARMOR, print_letters[get_ident(obj)], | |
76 inv_name(obj, LOWERCASE)); | |
77 | |
78 cur_armor = NULL; | |
79 | |
80 if (on(player, STUMBLER)) | |
81 { | |
82 msg("Your foot feels a lot better now."); | |
83 turn_off(player, STUMBLER); | |
84 } | |
85 } | |
86 | |
87 /* | |
88 wear_ok() | |
89 enforce player class armor restrictions | |
90 */ | |
91 | |
92 int | |
93 wear_ok(struct thing *wearee, struct object *obj, int print_message) | |
94 { | |
95 int which = obj->o_which; | |
96 int ret_val = TRUE; | |
97 int class_type = wearee->t_ctype; | |
98 | |
99 if (obj->o_type != ARMOR) | |
100 return(FALSE); | |
101 else | |
102 switch (class_type) | |
103 { | |
104 case C_MAGICIAN: /* cannot wear metal */ | |
105 case C_ILLUSION: | |
106 switch (which) | |
107 { | |
108 case RING_MAIL: | |
109 case SCALE_MAIL: | |
110 case PADDED_ARMOR: | |
111 case CHAIN_MAIL: | |
112 case BRIGANDINE: | |
113 case SPLINT_MAIL: | |
114 case GOOD_CHAIN: | |
115 case PLATE_MAIL: | |
116 case PLATE_ARMOR: | |
117 ret_val = FALSE; | |
118 break; | |
119 default: | |
120 break; | |
121 } | |
122 | |
123 case C_THIEF: /* cannot clank around */ | |
124 case C_ASSASIN: | |
125 case C_NINJA: | |
126 switch (which) | |
127 { | |
128 case CHAIN_MAIL: | |
129 case BRIGANDINE: | |
130 case SPLINT_MAIL: | |
131 case GOOD_CHAIN: | |
132 case PLATE_MAIL: | |
133 case PLATE_ARMOR: | |
134 ret_val = FALSE; | |
135 break; | |
136 default: | |
137 break; | |
138 } | |
139 | |
140 case C_CLERIC: /* cannot wear plate */ | |
141 case C_DRUID: | |
142 switch (which) | |
143 { | |
144 case PLATE_MAIL: | |
145 case PLATE_ARMOR: | |
146 case MITHRIL: | |
147 ret_val = FALSE; | |
148 break; | |
149 default: | |
150 break; | |
151 } | |
152 | |
153 case C_FIGHTER: /* wear anything */ | |
154 case C_RANGER: | |
155 break; | |
156 | |
157 case C_PALADIN: /* cannot wear common stuff */ | |
158 switch (which) | |
159 { | |
160 case SOFT_LEATHER: | |
161 case CUIRBOLILLI: | |
162 case HEAVY_LEATHER: | |
163 case STUDDED_LEATHER: | |
164 case PADDED_ARMOR: | |
165 case BRIGANDINE: | |
166 ret_val = FALSE; | |
167 break; | |
168 default: | |
169 break; | |
170 } | |
171 | |
172 case C_MONSTER: | |
173 break; | |
174 | |
175 default: /* Unknown class */ | |
176 debug("Unknown class %d.", class_type); | |
177 break; | |
178 } | |
179 | |
180 if (ret_val == FALSE && print_message == MESSAGE) | |
181 switch (class_type) | |
182 { | |
183 case C_MAGICIAN: | |
184 case C_ILLUSION: | |
185 msg("You cannot regenerate spell points while wearing that!"); | |
186 break; | |
187 | |
188 case C_THIEF: | |
189 case C_ASSASIN: | |
190 case C_NINJA: | |
191 msg("Don't expect to be stealthy while wearing that!"); | |
192 break; | |
193 | |
194 case C_CLERIC: | |
195 case C_DRUID: | |
196 case C_PALADIN: | |
197 msg("Your god strongly disapproves of your wearing that!"); | |
198 break; | |
199 | |
200 case C_FIGHTER: | |
201 case C_RANGER: | |
202 case C_MONSTER: | |
203 break; | |
204 } | |
205 | |
206 return(ret_val); | |
207 } |