-+-+-+-+-+-+-+-+ START OF PART 50 -+-+-+-+-+-+-+-+ X status := uor(%X'00000003',status); X msg_print('You are getting weak from hunger.'); X if (find_flag) then X BEGIN X find_flag := false; X move_char(5); X END; X END; X if (food < player_food_faint) then X if (randint(8) = 1) then X BEGIN X paralysis := paralysis + randint(5); X msg_print('You faint from the lack of food.'); X if (find_flag) then X BEGIN X find_flag := false; X move_char(5); X END; X END; X END X else X BEGIN X if (uand(%X'00000001',status) = 0) then X BEGIN X status := uor(%X'00000001',status); X msg_print('You are getting hungry.'); X if (find_flag) then X BEGIN X find_flag := false; X move_char(5); X END; X END; X END; X END; X prt_hunger; X`7B Food consumtion X Note: Speeded up characters really burn up the food!`7D X if (speed < 0) then X food := food + (speed*food_digested) `7B used to be harsher th Van `7D X else `7B this. --j Veb `7D X food := food - food_digested; X`7B Regenerate `7D X with py.misc do X BEGIN X if (regenerate) then regen_amount := regen_amount*2; X if (rest > 0) then regen_amount := regen_amount*2; X if (py.flags.poisoned < 1) then X if (chp < mhp) then X regenhp(regen_amount); X if (cmana < mana) then X regenmana(regen_amount); X END; X X`7B petrification `7D X`09 if (petrified > 0) then`20 X`09 petrified := petrified - 1; X X`7B Special Abilities `7D X`09 if (special > 0) then X`09 special := special - 1; X X`7B Blindness `7D X if (blind > 0) then X BEGIN X if (uand(%X'00000004',status) = 0) then X BEGIN X status := uor(%X'00000004',status); X prt_map; X prt_blind; X if (search_flag) then X search_off; X END; X blind := blind - 1; X if (blind = 0) then X BEGIN X status := uand(%X'FFFFFFFB',status); X prt_blind; X`09`09 draw_cave; X msg_print('Your eyes once again function normally.'); X if (find_flag) then X BEGIN X find_flag := false; X move_char(5); X END; X END; X END; X`7B Confusion `7D X if (confused > 0) then X BEGIN X if (uand(%X'00000008',status) = 0) then X BEGIN X status := uor(%X'00000008',status); X prt_confused; X END; X confused := confused - 1; X if (confused = 0) then X BEGIN X status := uand(%X'FFFFFFF7',status); X prt_confused; X msg_print('You once again know what''s going on.'); X if (find_flag) then X BEGIN X find_flag := false; X move_char(5); X END; X END; X END; X`7B Afraid `7D X if (afraid > 0) then X BEGIN X if (uand(%X'00000010',status) = 0) then X BEGIN X if ((shero+hero) > 0) then X afraid := 0 X else X BEGIN X status := uor(%X'00000010',status); X prt_afraid; X END; X END X else if ((shero+hero) > 0) then X afraid := 1; X afraid := afraid - 1; X if (afraid = 0) then X BEGIN X status := uand(%X'FFFFFFEF',status); X prt_afraid; X msg_print('You''re not such a coward anymore.'); X if (find_flag) then X BEGIN X find_flag := false; X move_char(5); X END; X END; X END; X`7B Poisoned `7D X if (poisoned > 0) then X BEGIN X if (uand(%X'00000020',status) = 0) then X BEGIN X status := uor(%X'00000020',status); X prt_poisoned; X END; X poisoned := poisoned - 1; X if (poisoned = 0) then X BEGIN X status := uand(%X'FFFFFFDF',status); X prt_poisoned; X msg_print('You feel better.'); X if (find_flag) then X BEGIN X find_flag := false; X move_char(5); X END; X END X else X BEGIN X CASE con_adj of X -4: take_hit(4,'poison.'); X -3,-2: take_hit(3,'poison.'); X -1: take_hit(2,'poison.'); X 0 : take_hit(1,'poison.'); X 1,2,3: if ((turn mod 2) = 0) then X take_hit(1,'poison.'); X 4,5 : if ((turn mod 3) = 0) then X take_hit(1,'poison.'); X 6 : if ((turn mod 4) = 0) then X take_hit(1,'poison.'); X END; X END; X END; X`7B Fast `7D X if (fast > 0) then X BEGIN X if (uand(%X'00000040',status) = 0) then X BEGIN X status := uor(%X'00000040',status); X msg_print('You feel yourself speed up.'); X change_speed(-1); X if (find_flag) then X BEGIN X find_flag := false; X move_char(5); X END; X END; X fast := fast - 1; X if (fast = 0) then X END; X`7B Afraid `7D X if (afraid > 0) then X BEGIN X if (uand(%X'00000010',status) = 0) then X BEGIN X if ((shero+hero) > 0) then X afraid := 0 X else X BEGIN X status := uor(%X'00000010',status); X prt_afraid; X END; X END X else if ((shero+hero) > 0) then X afraid := 1; X afraid := afraid - 1; X if (afraid = 0) then X BEGIN X status := uand(%X'FFFFFFEF',status); X prt_afraid; X msg_print('You''re not such a coward anymore.'); X if (find_flag) then X BEGIN X find_flag := false; X move_char(5); X END; X END; X END; X`7B Poisoned `7D X if (poisoned > 0) then X BEGIN X if (uand(%X'00000020',status) = 0) then X BEGIN X status := uor(%X'00000020',status); X prt_poisoned; X END; X poisoned := poisoned - 1; X if (poisoned = 0) then X BEGIN X status := uand(%X'FFFFFFDF',status); X prt_poisoned; X msg_print('You feel better.'); X if (find_flag) then X BEGIN X find_flag := false; X move_char(5); X END; X END X else X BEGIN X CASE con_adj of X -4: take_hit(4,'poison.'); X -3,-2: take_hit(3,'poison.'); X -1: take_hit(2,'poison.'); X 0 : take_hit(1,'poison.'); X 1,2,3: if ((turn mod 2) = 0) then X take_hit(1,'poison.'); X 4,5 : if ((turn mod 3) = 0) then X take_hit(1,'poison.'); X 6 : if ((turn mod 4) = 0) then X take_hit(1,'poison.'); X END; X END; X END; X`7B Fast `7D X if (fast > 0) then X BEGIN X if (uand(%X'00000040',status) = 0) then X BEGIN X status := uor(%X'00000040',status); X msg_print('You feel yourself speed up.'); X change_speed(-1); X if (find_flag) then X BEGIN X find_flag := false; X move_char(5); X END; X END; X fast := fast - 1; X if (fast = 0) then X BEGIN X status := uand(%X'FFFFFFBF',status); X msg_print('Your fastness slows down.'); X change_speed(+1); X if (find_flag) then X BEGIN X find_flag := false; X move_char(5); X END; X END; X END; X`7B Slow `7D if (slow > 0) then X BEGIN X if (uand(%X'00000080',status) = 0) then X BEGIN X status := uor(%X'00000080',status); X msg_print('You feel like molassas in January.'); X change_speed(+1); X if (find_flag) then X BEGIN X find_flag := false; X move_char(5); X END; X END; X slow := slow - 1; X if (slow = 0) then X BEGIN X status := uand(%X'FFFFFF7F',status); X msg_print('You feel yourself speed up.'); X change_speed(-1); X if (find_flag) then X BEGIN X find_flag := false; X move_char(5); X END; X END; X END; X`7B Resting is over? `7D X if (rest > 0) then X BEGIN X`7B Hibernate every 20 iterations so that process does not eat up system. X NOTE: Remove comments for VMS version 4.0 or greater X INKEY_DELAY takes care of hibernation for VMS 3.7 or less `7D X if ((rest mod 20) = 1) then tiny_sleep(20); X rest := rest - 1; X`7B Test for any key being hit to abort rest. Also, X this will do a PUT_QIO which updates the screen. X One more side benifit; since inkey_delay hibernates X small amount before executing, this makes resting less CPU intensive. `7D X inkey_delay(command,0); X if (rest = 0) then `7B Resting over `7D X rest_off X else if (command <> null) then `7B Resting aborted `7D X rest_off; X END; X`7B Hallucinating? (Random characters appear!)`7D X if (image > 0) then X BEGIN X image := image - 1; X if (image = 0) then X draw_cave; X END; X`7B Paralysis `7D X if (paralysis > 0) then X BEGIN X paralysis := paralysis - 1; X if (rest > 0) then X rest_off; X if (search_flag) then X search_off; X END; X`7B Protection from evil counter`7D X if (protevil > 0) then protevil := protevil - 1; X`7B Inulnerability `7D X if (invuln > 0) then X BEGIN X if (uand(%X'00001000',status) = 0) then X BEGIN X status := uor(%X'00001000',status); X if (find_flag) then X BEGIN X find_flag := false; X move_char(5); X END; X END; X invuln := invuln - 1; X py.misc.pac := py.misc.pac - 2; X py.misc.dis_ac := py.misc.dis_ac -2; X prt_pac; X if (invuln = 0) then X BEGIN X status := uand(%X'FFFFEFFF',status); X if (find_flag) then X BEGIN X find_flag := false; X move_char(5); X END; X msg_print('The polymerized laminate material flakes off. V'); X END; X END; X`7B Heroism `7D X if (hero > 0) then X BEGIN X if (uand(%X'00002000',status) = 0) then X BEGIN X status := uor(%X'00002000',status); X if (find_flag) then X BEGIN X find_flag := false; +-+-+-+-+-+-+-+- END OF PART 50 +-+-+-+-+-+-+-+-