Mercurial > hg > early-roguelike
annotate 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 | 
| rev | line source | 
|---|---|
| 
63
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
1 /* | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
2 * This file contains misc functions for dealing with armor | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
3 * | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
4 * Advanced Rogue | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
5 * Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka and AT&T | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
6 * All rights reserved. | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
7 * | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
8 * Based on "Rogue: Exploring the Dungeons of Doom" | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
9 * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
10 * All rights reserved. | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
11 * | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
12 * See the file LICENSE.TXT for full copyright and licensing information. | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
13 */ | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
14 | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
15 #include "curses.h" | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
16 #include "rogue.h" | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
17 | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
18 | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
19 /* | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
20 * take_off: | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
21 * Get the armor off of the players back | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
22 */ | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
23 | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
24 take_off() | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
25 { | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
26 register struct object *obj; | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
27 register struct linked_list *item; | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
28 | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
29 /* What does player want to take off? */ | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
30 if ((item = get_item(pack, "take off", REMOVABLE)) == NULL) | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
31 return; | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
32 | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
33 obj = OBJPTR(item); | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
34 if (!is_current(obj)) { | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
35 sprintf(outstring,"Not wearing %c) %s", pack_char(pack, obj),inv_name(obj, TRUE)); | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
36 msg(outstring); | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
37 return; | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
38 } | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
39 | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
40 /* Can the player remove the item? */ | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
41 if (!dropcheck(obj)) return; | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
42 updpack(TRUE); | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
43 | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
44 sprintf(outstring,"Was wearing %c) %s", pack_char(pack, obj),inv_name(obj,TRUE)); | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
45 msg(outstring); | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
46 } | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
47 | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
48 /* | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
49 * wear: | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
50 * The player wants to wear something, so let him/her put it on. | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
51 */ | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
52 | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
53 wear() | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
54 { | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
55 register struct linked_list *item; | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
56 register struct object *obj; | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
57 register int i; | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
58 char buf[LINELEN]; | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
59 | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
60 | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
61 /* What does player want to wear? */ | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
62 if ((item = get_item(pack, "wear", WEARABLE)) == NULL) | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
63 return; | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
64 | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
65 obj = OBJPTR(item); | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
66 | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
67 switch (obj->o_type) { | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
68 case ARMOR: | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
69 if (cur_armor != NULL) { | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
70 addmsg("You are already wearing armor"); | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
71 if (!terse) addmsg(". You'll have to take it off first."); | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
72 endmsg(); | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
73 after = FALSE; | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
74 return; | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
75 } | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
76 if (cur_misc[WEAR_BRACERS] != NULL) { | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
77 msg("You can't wear armor with bracers of defense."); | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
78 return; | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
79 } | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
80 if (cur_misc[WEAR_CLOAK] != NULL || cur_relic[EMORI_CLOAK]) { | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
81 msg("You can't wear armor with a cloak."); | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
82 return; | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
83 } | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
84 if (player.t_ctype == C_THIEF && | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
85 (obj->o_which != LEATHER && obj->o_which != STUDDED_LEATHER)) { | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
86 if (terse) msg("Thieves can't wear that type of armor"); | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
87 else | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
88 msg("Thieves can only wear leather or studded leather armor"); | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
89 return; | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
90 } | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
91 waste_time(); | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
92 obj->o_flags |= ISKNOW; | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
93 cur_armor = obj; | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
94 addmsg(terse ? "W" : "You are now w"); | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
95 msg("earing %s.", armors[obj->o_which].a_name); | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
96 | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
97 when MM: | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
98 switch (obj->o_which) { | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
99 /* | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
100 * when wearing the boots of elvenkind the player will not | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
101 * set off any traps | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
102 */ | 
| 
 
0ed67132cf10
Import Advanced Rogue 5.8 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
103 case MM_ELF_BOOTS: | 
