Annotation of early-roguelike/xrogue/wear.c, Revision 1.1.1.1
1.1 rubenllo 1: /*
2: wear.c - functions for dealing with armor
3:
4: XRogue: Expeditions into the Dungeons of Doom
5: Copyright (C) 1991 Robert Pietkivitch
6: All rights reserved.
7:
8: Based on "Advanced Rogue"
9: Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka and AT&T
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 <stdlib.h>
20: #include <curses.h>
21: #include "rogue.h"
22:
23: int dress_units(struct linked_list *item);
24:
25: /*
26: * take_off:
27: * Get the armor off of the players back
28: */
29:
30: void
31: take_off(void)
32: {
33: register struct object *obj;
34: register struct linked_list *item;
35:
36: /* It takes time to take things off */
37: if (player.t_action != C_TAKEOFF) {
38: /* What does player want to take off? */
39: if ((item = get_item(pack, "take off", REMOVABLE, FALSE, FALSE))==NULL)
40: return;
41:
42: obj = OBJPTR(item);
43: if (!is_current(obj)) {
44: msg("Not wearing %c) %s", pack_char(pack, obj),inv_name(obj, TRUE));
45: return;
46: }
47:
48: player.t_using = item; /* Remember what it is */
49: player.t_action = C_TAKEOFF; /* We are taking something off */
50:
51: /* Cursed items take almost no time */
52: if (obj->o_flags & ISCURSED) player.t_no_move = movement(&player);
53: else player.t_no_move = dress_units(item) * movement(&player);
54: return;
55: }
56:
57: /* We have waited our time, let's take off our item */
58: item = player.t_using;
59: player.t_using = NULL;
60: player.t_action = A_NIL;
61:
62: obj = OBJPTR(item);
63: if (!is_current(obj)) { /* Just to be on the safe side */
64: msg("Not wearing %c) %s", pack_char(pack, obj),inv_name(obj, TRUE));
65: return;
66: }
67:
68: /* Can the player remove the item? */
69: if (!dropcheck(obj)) return;
70: updpack(TRUE, &player);
71:
72: msg("Was wearing %c) %s", pack_char(pack, obj),inv_name(obj,TRUE));
73: }
74:
75: /*
76: * wear:
77: * The player wants to wear something, so let him/her put it on.
78: */
79:
80: void
81: wear(void)
82: {
83: register struct linked_list *item;
84: register struct object *obj;
85: register int i;
86:
87: /* It takes time to put things on */
88: if (player.t_action != C_WEAR) {
89: /* What does player want to wear? */
90: if ((item = get_item(pack, "wear", WEARABLE, FALSE, FALSE)) == NULL)
91: return;
92:
93: obj = OBJPTR(item);
94:
95: switch (obj->o_type) {
96: case ARMOR:
97: if (cur_armor != NULL) {
98: addmsg("You are already wearing armor");
99: if (!terse) addmsg(". You'll have to take it off first.");
100: endmsg();
101: after = FALSE;
102: return;
103: }
104: if (player.t_ctype == C_MONK) {
105: msg("Monks can't wear armor!");
106: return;
107: }
108: if (cur_misc[WEAR_BRACERS] != NULL) {
109: msg("You can't wear armor with bracers of defense.");
110: return;
111: }
112: if (cur_misc[WEAR_CLOAK] != NULL || cur_relic[EMORI_CLOAK]) {
113: msg("You can't wear armor with a cloak.");
114: return;
115: }
116: if (player.t_ctype == C_THIEF &&
117: (obj->o_which != LEATHER &&
118: obj->o_which != STUDDED_LEATHER)) {
119: if (terse) msg("Thieves can't wear that type of armor.");
120: else
121: msg("Thieves can wear leather and studded leather armor.");
122: return;
123: }
124: if (player.t_ctype == C_ASSASSIN &&
125: (obj->o_which != LEATHER &&
126: obj->o_which != STUDDED_LEATHER)) {
127: if (terse) msg("Assassins can't wear that type of armor.");
128: else
129: msg("Assassins can wear leather and studded leather armor.");
130: return;
131: }
132:
133: when MM:
134: switch (obj->o_which) {
135: /*
136: * when wearing the boots of elvenkind the player will not
137: * set off any traps
138: */
139: case MM_ELF_BOOTS:
140: if (cur_misc[WEAR_BOOTS] != NULL) {
141: msg("Already wearing a pair of boots. ");
142: return;
143: }
144: /*
145: * when wearing the boots of dancing the player will dance
146: * uncontrollably
147: */
148: when MM_DANCE:
149: if (cur_misc[WEAR_BOOTS] != NULL) {
150: msg("Already wearing a pair of boots.");
151: return;
152: }
153: /*
154: * bracers give the hero protection in he same way armor does.
155: * they cannot be used with armor but can be used with cloaks
156: */
157: when MM_BRACERS:
158: if (cur_misc[WEAR_BRACERS] != NULL) {
159: msg("Already wearing bracers.");
160: return;
161: }
162: else {
163: if (cur_armor != NULL) {
164: msg("You can't wear bracers of defense with armor.");
165: return;
166: }
167: }
168:
169: /*
170: * The robe (cloak) of powerlessness disallows any spell casting
171: */
172: when MM_R_POWERLESS:
173: /*
174: * the cloak of displacement gives the hero an extra +2 on AC
175: * and saving throws. Cloaks cannot be used with armor.
176: */
177: case MM_DISP:
178: /*
179: * the cloak of protection gives the hero +n on AC and saving
180: * throws with a max of +3 on saves
181: */
182: case MM_PROTECT:
183: if (cur_misc[WEAR_CLOAK] != NULL ||
184: cur_relic[EMORI_CLOAK]) {
185: msg("%slready wearing a cloak.", terse ? "A"
186: : "You are a");
187: return;
188: }
189: else {
190: if (cur_armor != NULL) {
191: msg("You can't wear a cloak with armor.");
192: return;
193: }
194: }
195: /*
196: * the gauntlets of dexterity and ogre power give the hero
197: * a dexterity of 21, the gauntlets of fumbling cause the
198: * hero to drop his weapon.
199: */
200: when MM_G_DEXTERITY:
201: case MM_G_OGRE:
202: case MM_FUMBLE:
203: if (cur_misc[WEAR_GAUNTLET] != NULL) {
204: msg("Already wearing a pair of gauntlets.");
205: return;
206: }
207: /*
208: * the jewel of attacks does an aggavate monster
209: */
210: when MM_JEWEL:
211: if (cur_misc[WEAR_JEWEL] != NULL ||
212: cur_relic[YENDOR_AMULET] ||
213: cur_relic[STONEBONES_AMULET]) {
214: msg("Already wearing an amulet.");
215: return;
216: }
217: /*
218: * the necklace of adaption makes the hero immune to
219: * chlorine gas and acid breath.
220: */
221: when MM_ADAPTION:
222: if (cur_misc[WEAR_NECKLACE] != NULL) {
223: msg("Already wearing a necklace.");
224: return;
225: }
226: /*
227: * the necklace of stragulation will try to strangle the
228: * hero to death
229: */
230: when MM_STRANGLE:
231: if (cur_misc[WEAR_NECKLACE] != NULL) {
232: msg("Already wearing a necklace.");
233: return;
234: }
235: otherwise:
236: msg("What a strange item you have!");
237: return;
238: }
239:
240: when RING:
241: if (cur_misc[WEAR_GAUNTLET] != NULL) {
242: msg ("You have to remove your gauntlets first!");
243: return;
244: }
245:
246: /* Is there room to put the ring on */
247: for (i=0; i<NUM_FINGERS; i++)
248: if (cur_ring[i] == NULL) {
249: break;
250: }
251: if (i == NUM_FINGERS) { /* Not enough fingers */
252: if (terse) msg("Wearing enough rings.");
253: else msg("You are already wearing eight rings.");
254: return;
255: }
256: }
257:
258: player.t_using = item; /* Remember what it is */
259: player.t_action = C_WEAR; /* We are taking something off */
260: player.t_no_move = dress_units(item) * movement(&player);
261: return;
262: }
263:
264: /* We have waited our time, let's put on our item */
265: item = player.t_using;
266: player.t_using = NULL;
267: player.t_action = A_NIL;
268:
269: obj = OBJPTR(item);
270:
271: switch (obj->o_type) {
272: case ARMOR:
273: obj->o_flags |= ISKNOW;
274: cur_armor = obj;
275: addmsg(terse ? "W" : "You are now w");
276: msg("earing %s.", armors[obj->o_which].a_name);
277:
278: when MM:
279: switch (obj->o_which) {
280: /*
281: * when wearing the boots of elvenkind the player will not
282: * set off any traps
283: */
284: case MM_ELF_BOOTS:
285: msg("Wearing %s",inv_name(obj,TRUE));
286: cur_misc[WEAR_BOOTS] = obj;
287: /*
288: * when wearing the boots of dancing the player will dance
289: * uncontrollably
290: */
291: when MM_DANCE:
292: msg("Wearing %s",inv_name(obj,TRUE));
293: cur_misc[WEAR_BOOTS] = obj;
294: msg("You begin to dance uncontrollably!");
295: turn_on(player, ISDANCE);
296: /*
297: * bracers give the hero protection in he same way armor does.
298: * they cannot be used with armor but can be used with cloaks
299: */
300: when MM_BRACERS:
301: msg("wearing %s",inv_name(obj,TRUE));
302: cur_misc[WEAR_BRACERS] = obj;
303:
304: /*
305: * The robe (cloak) of powerlessness disallows any spell casting
306: */
307: when MM_R_POWERLESS:
308: /*
309: * the cloak of displacement gives the hero an extra +2 on AC
310: * and saving throws. Cloaks cannot be used with armor.
311: */
312: case MM_DISP:
313: /*
314: * the cloak of protection gives the hero +n on AC and saving
315: * throws with a max of +3 on saves
316: */
317: case MM_PROTECT:
318: msg("wearing %s",inv_name(obj,TRUE));
319: cur_misc[WEAR_CLOAK] = obj;
320: /*
321: * the gauntlets of dexterity and ogre power give the hero
322: * a dexterity of 21, the gauntlets of fumbling cause the
323: * hero to drop his weapon.
324: */
325: when MM_G_DEXTERITY:
326: case MM_G_OGRE:
327: case MM_FUMBLE:
328: msg("Wearing %s", inv_name(obj,TRUE));
329: cur_misc[WEAR_GAUNTLET] = obj;
330: if (obj->o_which == MM_FUMBLE)
331: start_daemon(fumble, NULL, AFTER);
332: /*
333: * the jewel of attacks does an aggavate monster
334: */
335: when MM_JEWEL:
336: msg("Wearing %s",inv_name(obj,TRUE));
337: cur_misc[WEAR_JEWEL] = obj;
338: aggravate(TRUE, TRUE); /* affect all charactors */
339: if (player.t_ctype == C_PALADIN ||
340: player.t_ctype == C_RANGER || player.t_ctype == C_MONK)
341: msg("A chill runs down your spine! ");
342:
343: /*
344: * the necklace of adaption makes the hero immune to
345: * chlorine gas and acid
346: */
347: when MM_ADAPTION:
348: msg("Wearing %s",inv_name(obj,TRUE));
349: cur_misc[WEAR_NECKLACE] = obj;
350: turn_on(player, NOGAS);
351: turn_on(player, NOACID);
352:
353: /*
354: * the necklace of stragulation will try to strangle the
355: * hero to death
356: */
357: when MM_STRANGLE:
358: msg("Wearing %s",inv_name(obj,TRUE));
359: cur_misc[WEAR_NECKLACE] = obj;
360: msg("The necklace is beginning to strangle you!");
361: start_daemon(strangle, NULL, AFTER);
362: otherwise:
363: msg("What a strange item you have!");
364: }
365: status(FALSE);
366: if (m_know[obj->o_which] && m_guess[obj->o_which]) {
367: free(m_guess[obj->o_which]);
368: m_guess[obj->o_which] = NULL;
369: }
370: else if (!m_know[obj->o_which] &&
371: askme &&
372: (obj->o_flags & ISKNOW) == 0 &&
373: m_guess[obj->o_which] == NULL) {
374: nameitem(item, FALSE);
375: }
376:
377: when RING:
378: /* If there is room, put on the ring */
379: for (i=0; i<NUM_FINGERS; i++)
380: if (cur_ring[i] == NULL) {
381: cur_ring[i] = obj;
382: break;
383: }
384: if (i == NUM_FINGERS) { /* Not enough fingers */
385: if (terse) msg("Wearing enough rings.");
386: else msg("You are already wearing eight rings.");
387: return;
388: }
389:
390: /* Calculate the effect of the ring */
391: ring_on(item);
392: }
393: updpack(TRUE, &player);
394: }
395:
396: /*
397: * dress_units:
398: * How many movements periods does it take to put on or remove the
399: * given item of "clothing"?
400: */
401:
402: int
403: dress_units(struct linked_list *item)
404: {
405: register struct object *obj;
406:
407: obj = OBJPTR(item);
408:
409: switch (obj->o_type) {
410: case ARMOR:
411: return(10-armors[obj->o_which].a_class);
412: when RING:
413: return(2);
414: when MM:
415: switch (obj->o_which) {
416: case MM_ELF_BOOTS:
417: case MM_DANCE:
418: /* Boots */
419: return(5);
420: when MM_R_POWERLESS:
421: case MM_DISP:
422: case MM_PROTECT:
423: /* Robes */
424: return(4);
425: when MM_BRACERS:
426: case MM_G_DEXTERITY:
427: case MM_G_OGRE:
428: case MM_FUMBLE:
429: /* Hand garments */
430: return(3);
431: when MM_JEWEL:
432: case MM_ADAPTION:
433: case MM_STRANGLE:
434: /* Jewelry */
435: return(2);
436: otherwise:
437: return(1); /* What is it? */
438: }
439: otherwise:
440: return(1); /* What is it? */
441: }
442: }
443:
CVSweb