Mercurial > hg > early-roguelike
diff arogue7/eat.c @ 125:adfa37e67084
Import Advanced Rogue 7.7 from the Roguelike Restoration Project (r1490)
author | John "Elwin" Edwards |
---|---|
date | Fri, 08 May 2015 15:24:40 -0400 |
parents | |
children | f9ef86cf22b2 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/arogue7/eat.c Fri May 08 15:24:40 2015 -0400 @@ -0,0 +1,130 @@ +/* + * eat.c - Functions for dealing with digestion + * + * Advanced Rogue + * Copyright (C) 1984, 1985, 1986 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 = 0; + msg ("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 all that food down."); + msg ("Your stomach feels like its about to burst!"); + } + else { + hungry_state = F_OKAY; + switch (rnd(3)) { + case 0: msg("My, that was a yummy %s", foods[which].mi_name); + when 1: msg("Mmmm, that was a tasty %s", foods[which].mi_name); + when 2: msg("Wow, that was a scrumptious %s", foods[which].mi_name); + } + } + updpack(TRUE, &player); + switch(which) { + case E_WHORTLEBERRY: + add_abil[A_INTELLIGENCE](1); + + when E_SWEETSOP: + add_abil[A_DEXTERITY](1); + + when E_SOURSOP: + add_abil[A_STRENGTH](1); + + when E_SAPODILLA: + add_abil[A_WISDOM](1); + + when E_RAMBUTAN: + add_abil[A_CONSTITUTION](1); + + when E_PEACH: + add_abil[A_CHARISMA](1); + + when E_STRAWBERRY: + temp = pstats.s_exp/100; + pstats.s_exp += temp; + if (temp > 0) + msg("You feel slightly more experienced now"); + check_level(); + + when E_PITANGA: + max_stats.s_hpt++; + pstats.s_hpt++; + if (terse) + msg("You feel a bit tougher now"); + else + msg("You feel a bit tougher now. Go get 'em!"); + + when E_HAGBERRY: + pstats.s_arm--; + msg("Your skin feels more resilient now"); + + when E_DEWBERRY: + if (chant_time > 0) { + chant_time -= 50; + if (chant_time < 0) + chant_time = 0; + msg("You feel you have more chant ability"); + } + if (pray_time > 0) { + pray_time -= 50; + if (pray_time < 0) + pray_time = 0; + msg("You feel you have more prayer ability"); + } + if (spell_power > 0) { + spell_power -= 50; + if (spell_power < 0) + spell_power = 0; + msg("You feel you have more spell casting ability"); + } + + otherwise: /* all the foods don't have to do something */ + break; + } +}