comparison xrogue/eat.c @ 133:e6179860cb76

Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
author John "Elwin" Edwards
date Tue, 21 Apr 2015 08:55:20 -0400
parents
children f54901b9c39b
comparison
equal deleted inserted replaced
124:d10fc4a065ac 133:e6179860cb76
1 /*
2 eat.c - Functions for dealing with digestion
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 <curses.h>
20 #include "rogue.h"
21
22 /*
23 * eat:
24 * He wants to eat something, so let him try
25 */
26
27 eat()
28 {
29 register struct linked_list *item;
30 int which;
31 unsigned long temp;
32
33 if (player.t_action != C_EAT) {
34 if ((item = get_item(pack, "eat", FOOD, FALSE, FALSE)) == NULL)
35 return;
36
37 player.t_using = item; /* Remember what it is */
38 player.t_action = C_EAT; /* We are eating */
39 which = (OBJPTR(item))->o_which;
40 player.t_no_move = max(foods[which].mi_food/100, 1) * movement(&player);
41 return;
42 }
43
44 /* We have waited our time, let's eat the food */
45 item = player.t_using;
46 player.t_using = NULL;
47 player.t_action = A_NIL;
48
49 which = (OBJPTR(item))->o_which;
50 if ((food_left += foods[which].mi_food) > STOMACHSIZE)
51 food_left = STOMACHSIZE;
52 del_pack(item);
53 if (hungry_state == F_SATIATED && food_left == STOMACHSIZE && rnd(4) == 1) {
54 pstats.s_hpt = -1;
55 msg ("Cough! Ack! You choke on all that food and die! --More--");
56 wait_for(' ');
57 death(D_FOOD_CHOKE);
58 }
59 if (food_left >= STOMACHSIZE-MORETIME) {
60 hungry_state = F_SATIATED;
61 msg ("You have trouble getting that food down!");
62 msg ("Your stomach feels like it's about to burst!");
63 }
64 else if (which != E_SLIMEMOLD) {
65 hungry_state = F_OKAY;
66 switch (rnd(10)) {
67 case 0: msg("Yuck, what a foul tasting %s! ", foods[which].mi_name);
68 when 1: msg("Mmmm, what a tasty %s. ", foods[which].mi_name);
69 when 2: msg("Wow, what a scrumptious %s! ", foods[which].mi_name);
70 when 3: msg("Hmmm, %s heaven! ", foods[which].mi_name);
71 when 4: msg("You've eaten better %s. ", foods[which].mi_name);
72 when 5: msg("You smack your lips ");
73 when 6: msg("Yum-yum-yum ");
74 when 7: msg("Gulp! ");
75 when 8: msg("Your tongue flips out! ");
76 when 9: msg("You lick your chin ");
77 }
78 }
79 updpack(TRUE, &player);
80 switch(which) {
81 case E_WHORTLEBERRY: /* add 1 to intelligence */
82 (*add_abil[A_INTELLIGENCE])(1);
83 when E_SWEETSOP: /* add 1 to strength */
84 case E_SOURSOP: /* add 1 to strength */
85 (*add_abil[A_STRENGTH])(1);
86 when E_SAPODILLA: /* add 1 to wisdom */
87 (*add_abil[A_WISDOM])(1);
88 when E_APPLE: /* add 1 to dexterity */
89 (*add_abil[A_DEXTERITY])(1);
90 when E_PRICKLEY: /* add 1 to constitution */
91 (*add_abil[A_CONSTITUTION])(1);
92 when E_PEACH: /* add 1 to charisma */
93 (*add_abil[A_CHARISMA])(1);
94 when E_PITANGA: /* add 1 hit point */
95 max_stats.s_hpt++;
96 pstats.s_hpt = max_stats.s_hpt;
97 msg("You feel a bit tougher now. ");
98 when E_HAGBERRY: /* armor class */
99 case E_JABOTICABA: /* armor class */
100 pstats.s_arm--;
101 msg("Your skin feels more resilient now. ");
102 when E_STRAWBERRY: /* add 10% experience points */
103 case E_RAMBUTAN: /* add 10% experience points */
104 temp = pstats.s_exp/100 + 10;
105 pstats.s_exp += temp;
106 msg("You feel slightly more experienced now. ");
107 check_level();
108 when E_DEWBERRY: /* encourage him to do more magic */
109 if (chant_time > 0) {
110 chant_time -= 80;
111 if (chant_time < 0)
112 chant_time = 0;
113 msg("You feel you have more chant ability. ");
114 }
115 if (pray_time > 0) {
116 pray_time -= 80;
117 if (pray_time < 0)
118 pray_time = 0;
119 msg("You feel you have more prayer ability. ");
120 }
121 if (spell_power > 0) {
122 spell_power -= 80;
123 if (spell_power < 0)
124 spell_power = 0;
125 msg("You feel you have more spell casting ability. ");
126 }
127 when E_CANDLEBERRY: /* cure him */
128 if (on(player, HASINFEST) ||
129 on(player, HASDISEASE)||
130 on(player, DOROT)) {
131 if (on(player, HASDISEASE)) {
132 extinguish(cure_disease);
133 cure_disease();
134 }
135 if (on(player, HASINFEST)) {
136 msg("You feel yourself improving. ");
137 turn_off(player, HASINFEST);
138 infest_dam = 0;
139 }
140 if (on(player, DOROT)) {
141 msg("You feel your skin returning to normal. ");
142 turn_off(player, DOROT);
143 }
144 }
145 when E_SLIMEMOLD: /* monster food */
146 msg("The slime-mold quivers around in your mouth. ");
147 player.t_no_move = 3*movement(&player);
148 if (off(player, HASDISEASE)) {
149 if (ISWEARING(R_HEALTH) || player.t_ctype == C_PALADIN ||
150 player.t_ctype == C_RANGER) {
151 msg("You feel lousy. ");
152 }
153 else {
154 turn_on(player, HASDISEASE);
155 fuse(cure_disease, (VOID *)NULL, roll(HEALTIME,SICKTIME),AFTER);
156 msg("You become ill. ");
157 }
158 }
159 pstats.s_const -= rnd(2)+1;
160 if (pstats.s_const <= 3) pstats.s_const = 3;
161
162 otherwise: /* not all the foods have to do something */
163 break;
164 }
165 }
166