Mercurial > hg > early-roguelike
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xrogue/eat.c Tue Apr 21 08:55:20 2015 -0400 @@ -0,0 +1,166 @@ +/* + eat.c - Functions for dealing with digestion + + XRogue: Expeditions into the Dungeons of Doom + Copyright (C) 1991 Robert Pietkivitch + All rights reserved. + + Based on "Advanced Rogue" + Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka and AT&T + All rights reserved. + + Based on "Rogue: Exploring the Dungeons of Doom" + Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman + All rights reserved. + + See the file LICENSE.TXT for full copyright and licensing information. +*/ + +#include <curses.h> +#include "rogue.h" + +/* + * eat: + * He wants to eat something, so let him try + */ + +eat() +{ + register struct linked_list *item; + int which; + unsigned long temp; + + if (player.t_action != C_EAT) { + if ((item = get_item(pack, "eat", FOOD, FALSE, FALSE)) == NULL) + return; + + player.t_using = item; /* Remember what it is */ + player.t_action = C_EAT; /* We are eating */ + which = (OBJPTR(item))->o_which; + player.t_no_move = max(foods[which].mi_food/100, 1) * movement(&player); + return; + } + + /* We have waited our time, let's eat the food */ + item = player.t_using; + player.t_using = NULL; + player.t_action = A_NIL; + + which = (OBJPTR(item))->o_which; + if ((food_left += foods[which].mi_food) > STOMACHSIZE) + food_left = STOMACHSIZE; + del_pack(item); + if (hungry_state == F_SATIATED && food_left == STOMACHSIZE && rnd(4) == 1) { + pstats.s_hpt = -1; + msg ("Cough! Ack! You choke on all that food and die! --More--"); + wait_for(' '); + death(D_FOOD_CHOKE); + } + if (food_left >= STOMACHSIZE-MORETIME) { + hungry_state = F_SATIATED; + msg ("You have trouble getting that food down!"); + msg ("Your stomach feels like it's about to burst!"); + } + else if (which != E_SLIMEMOLD) { + hungry_state = F_OKAY; + switch (rnd(10)) { + case 0: msg("Yuck, what a foul tasting %s! ", foods[which].mi_name); + when 1: msg("Mmmm, what a tasty %s. ", foods[which].mi_name); + when 2: msg("Wow, what a scrumptious %s! ", foods[which].mi_name); + when 3: msg("Hmmm, %s heaven! ", foods[which].mi_name); + when 4: msg("You've eaten better %s. ", foods[which].mi_name); + when 5: msg("You smack your lips "); + when 6: msg("Yum-yum-yum "); + when 7: msg("Gulp! "); + when 8: msg("Your tongue flips out! "); + when 9: msg("You lick your chin "); + } + } + updpack(TRUE, &player); + switch(which) { + case E_WHORTLEBERRY: /* add 1 to intelligence */ + (*add_abil[A_INTELLIGENCE])(1); + when E_SWEETSOP: /* add 1 to strength */ + case E_SOURSOP: /* add 1 to strength */ + (*add_abil[A_STRENGTH])(1); + when E_SAPODILLA: /* add 1 to wisdom */ + (*add_abil[A_WISDOM])(1); + when E_APPLE: /* add 1 to dexterity */ + (*add_abil[A_DEXTERITY])(1); + when E_PRICKLEY: /* add 1 to constitution */ + (*add_abil[A_CONSTITUTION])(1); + when E_PEACH: /* add 1 to charisma */ + (*add_abil[A_CHARISMA])(1); + when E_PITANGA: /* add 1 hit point */ + max_stats.s_hpt++; + pstats.s_hpt = max_stats.s_hpt; + msg("You feel a bit tougher now. "); + when E_HAGBERRY: /* armor class */ + case E_JABOTICABA: /* armor class */ + pstats.s_arm--; + msg("Your skin feels more resilient now. "); + when E_STRAWBERRY: /* add 10% experience points */ + case E_RAMBUTAN: /* add 10% experience points */ + temp = pstats.s_exp/100 + 10; + pstats.s_exp += temp; + msg("You feel slightly more experienced now. "); + check_level(); + when E_DEWBERRY: /* encourage him to do more magic */ + if (chant_time > 0) { + chant_time -= 80; + if (chant_time < 0) + chant_time = 0; + msg("You feel you have more chant ability. "); + } + if (pray_time > 0) { + pray_time -= 80; + if (pray_time < 0) + pray_time = 0; + msg("You feel you have more prayer ability. "); + } + if (spell_power > 0) { + spell_power -= 80; + if (spell_power < 0) + spell_power = 0; + msg("You feel you have more spell casting ability. "); + } + when E_CANDLEBERRY: /* cure him */ + if (on(player, HASINFEST) || + on(player, HASDISEASE)|| + on(player, DOROT)) { + if (on(player, HASDISEASE)) { + extinguish(cure_disease); + cure_disease(); + } + if (on(player, HASINFEST)) { + msg("You feel yourself improving. "); + turn_off(player, HASINFEST); + infest_dam = 0; + } + if (on(player, DOROT)) { + msg("You feel your skin returning to normal. "); + turn_off(player, DOROT); + } + } + when E_SLIMEMOLD: /* monster food */ + msg("The slime-mold quivers around in your mouth. "); + player.t_no_move = 3*movement(&player); + if (off(player, HASDISEASE)) { + if (ISWEARING(R_HEALTH) || player.t_ctype == C_PALADIN || + player.t_ctype == C_RANGER) { + msg("You feel lousy. "); + } + else { + turn_on(player, HASDISEASE); + fuse(cure_disease, (VOID *)NULL, roll(HEALTIME,SICKTIME),AFTER); + msg("You become ill. "); + } + } + pstats.s_const -= rnd(2)+1; + if (pstats.s_const <= 3) pstats.s_const = 3; + + otherwise: /* not all the foods have to do something */ + break; + } +} +