Annotation of early-roguelike/urogue/armor.c, Revision 1.1.1.1
1.1 rubenllo 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: }
CVSweb