comparison arogue5/wear.c @ 63:0ed67132cf10

Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
author elwin
date Thu, 09 Aug 2012 22:58:48 +0000
parents
children c49f7927b0fa
comparison
equal deleted inserted replaced
62:0ef99244acb8 63:0ed67132cf10
1 /*
2 * This file contains misc functions for dealing with armor
3 *
4 * Advanced Rogue
5 * Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka and AT&T
6 * All rights reserved.
7 *
8 * Based on "Rogue: Exploring the Dungeons of Doom"
9 * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
10 * All rights reserved.
11 *
12 * See the file LICENSE.TXT for full copyright and licensing information.
13 */
14
15 #include "curses.h"
16 #include "rogue.h"
17
18
19 /*
20 * take_off:
21 * Get the armor off of the players back
22 */
23
24 take_off()
25 {
26 register struct object *obj;
27 register struct linked_list *item;
28
29 /* What does player want to take off? */
30 if ((item = get_item(pack, "take off", REMOVABLE)) == NULL)
31 return;
32
33 obj = OBJPTR(item);
34 if (!is_current(obj)) {
35 sprintf(outstring,"Not wearing %c) %s", pack_char(pack, obj),inv_name(obj, TRUE));
36 msg(outstring);
37 return;
38 }
39
40 /* Can the player remove the item? */
41 if (!dropcheck(obj)) return;
42 updpack(TRUE);
43
44 sprintf(outstring,"Was wearing %c) %s", pack_char(pack, obj),inv_name(obj,TRUE));
45 msg(outstring);
46 }
47
48 /*
49 * wear:
50 * The player wants to wear something, so let him/her put it on.
51 */
52
53 wear()
54 {
55 register struct linked_list *item;
56 register struct object *obj;
57 register int i;
58 char buf[LINELEN];
59
60
61 /* What does player want to wear? */
62 if ((item = get_item(pack, "wear", WEARABLE)) == NULL)
63 return;
64
65 obj = OBJPTR(item);
66
67 switch (obj->o_type) {
68 case ARMOR:
69 if (cur_armor != NULL) {
70 addmsg("You are already wearing armor");
71 if (!terse) addmsg(". You'll have to take it off first.");
72 endmsg();
73 after = FALSE;
74 return;
75 }
76 if (cur_misc[WEAR_BRACERS] != NULL) {
77 msg("You can't wear armor with bracers of defense.");
78 return;
79 }
80 if (cur_misc[WEAR_CLOAK] != NULL || cur_relic[EMORI_CLOAK]) {
81 msg("You can't wear armor with a cloak.");
82 return;
83 }
84 if (player.t_ctype == C_THIEF &&
85 (obj->o_which != LEATHER && obj->o_which != STUDDED_LEATHER)) {
86 if (terse) msg("Thieves can't wear that type of armor");
87 else
88 msg("Thieves can only wear leather or studded leather armor");
89 return;
90 }
91 waste_time();
92 obj->o_flags |= ISKNOW;
93 cur_armor = obj;
94 addmsg(terse ? "W" : "You are now w");
95 msg("earing %s.", armors[obj->o_which].a_name);
96
97 when MM:
98 switch (obj->o_which) {
99 /*
100 * when wearing the boots of elvenkind the player will not
101 * set off any traps
102 */
103 case MM_ELF_BOOTS:
104 if (cur_misc[WEAR_BOOTS] != NULL)
105 msg("already wearing a pair of boots");
106 else {
107 msg("wearing %s",inv_name(obj,TRUE));
108 cur_misc[WEAR_BOOTS] = obj;
109 }
110 /*
111 * when wearing the boots of dancing the player will dance
112 * uncontrollably
113 */
114 when MM_DANCE:
115 if (cur_misc[WEAR_BOOTS] != NULL)
116 msg("already wearing a pair of boots");
117 else {
118 msg("wearing %s",inv_name(obj,TRUE));
119 cur_misc[WEAR_BOOTS] = obj;
120 msg("You begin to dance uncontrollably!");
121 turn_on(player, ISDANCE);
122 }
123 /*
124 * bracers give the hero protection in he same way armor does.
125 * they cannot be used with armor but can be used with cloaks
126 */
127 when MM_BRACERS:
128 if (cur_misc[WEAR_BRACERS] != NULL)
129 msg("already wearing bracers");
130 else {
131 if (cur_armor != NULL) {
132 msg("You can't wear bracers of defense with armor.");
133 }
134 else {
135 msg("wearing %s",inv_name(obj,TRUE));
136 cur_misc[WEAR_BRACERS] = obj;
137 }
138 }
139
140 /*
141 * The robe (cloak) of powerlessness disallows any spell casting
142 */
143 when MM_R_POWERLESS:
144 /*
145 * the cloak of displacement gives the hero an extra +2 on AC
146 * and saving throws. Cloaks cannot be used with armor.
147 */
148 case MM_DISP:
149 /*
150 * the cloak of protection gives the hero +n on AC and saving
151 * throws with a max of +3 on saves
152 */
153 case MM_PROTECT:
154 if (cur_misc[WEAR_CLOAK] != NULL || cur_relic[EMORI_CLOAK])
155 msg("%slready wearing a cloak.", terse ? "A"
156 : "You are a");
157 else {
158 if (cur_armor != NULL) {
159 msg("You can't wear a cloak with armor.");
160 }
161 else {
162 msg("wearing %s",inv_name(obj,TRUE));
163 cur_misc[WEAR_CLOAK] = obj;
164 }
165 }
166 /*
167 * the gauntlets of dexterity give the hero a dexterity of 18
168 * the gauntlets of ogre power give the hero a strength of 18
169 * the gauntlets of fumbling cause the hero to drop his weapon
170 */
171 when MM_G_DEXTERITY:
172 case MM_G_OGRE:
173 case MM_FUMBLE:
174 if (cur_misc[WEAR_GAUNTLET] != NULL)
175 msg("Already wearing a pair of gauntlets.");
176 else {
177 msg("wearing %s",inv_name(obj,TRUE));
178 cur_misc[WEAR_GAUNTLET] = obj;
179 if (obj->o_which == MM_FUMBLE)
180 daemon(fumble, 0, AFTER);
181 }
182 /*
183 * the jewel of attacks does an aggavate monster
184 */
185 when MM_JEWEL:
186 if (cur_misc[WEAR_JEWEL] != NULL || cur_relic[YENDOR_AMULET])
187 msg("Already wearing an amulet.");
188 else {
189 msg("wearing %s",inv_name(obj,TRUE));
190 cur_misc[WEAR_JEWEL] = obj;
191 aggravate();
192 }
193 /*
194 * the necklace of adaption makes the hero immune to
195 * chlorine gas
196 */
197 when MM_ADAPTION:
198 if (cur_misc[WEAR_NECKLACE] != NULL)
199 msg("already wearing a necklace");
200 else {
201 msg("wearing %s",inv_name(obj,TRUE));
202 cur_misc[WEAR_NECKLACE] = obj;
203 turn_on(player, NOGAS);
204 }
205 /*
206 * the necklace of stragulation will try to strangle the
207 * hero to death
208 */
209 when MM_STRANGLE:
210 if (cur_misc[WEAR_NECKLACE] != NULL)
211 msg("already wearing a necklace");
212 else {
213 msg("wearing %s",inv_name(obj,TRUE));
214 cur_misc[WEAR_NECKLACE] = obj;
215 msg("The necklace is beginning to strangle you!");
216 daemon(strangle, 0, AFTER);
217 }
218 otherwise:
219 msg("what a strange item you have!");
220 }
221 status(FALSE);
222 if (m_know[obj->o_which] && m_guess[obj->o_which]) {
223 free(m_guess[obj->o_which]);
224 m_guess[obj->o_which] = NULL;
225 }
226 else if (!m_know[obj->o_which] &&
227 askme &&
228 (obj->o_flags & ISKNOW) == 0 &&
229 m_guess[obj->o_which] == NULL) {
230 msg(terse ? "Call it: " : "What do you want to call it? ");
231 if (get_str(buf, cw) == NORM) {
232 m_guess[obj->o_which] = new((unsigned int) strlen(buf) + 1);
233 strcpy(m_guess[obj->o_which], buf);
234 }
235 }
236
237 when RING:
238 if (cur_misc[WEAR_GAUNTLET] != NULL) {
239 msg ("You have to remove your gauntlets first!");
240 return;
241 }
242
243 /* If there is room, put on the ring */
244 for (i=0; i<NUM_FINGERS; i++)
245 if (cur_ring[i] == NULL) {
246 cur_ring[i] = obj;
247 break;
248 }
249 if (i == NUM_FINGERS) { /* No room */
250 if (terse) msg("Wearing enough rings");
251 else msg("You already have on eight rings");
252 return;
253 }
254
255 /* Calculate the effect of the ring */
256 ring_on(obj);
257 }
258 updpack(TRUE);
259 }