-+-+-+-+-+-+-+-+ START OF PART 44 -+-+-+-+-+-+-+-+ X`09`09`09if (find_flag) then X`09`09`09 begin X`09`09`09 find_flag := false; X`09`09`09 move_char(5); X`09`09`09 end; X`09`09`09prt_hunger; X`09`09 end; X`09`09 if (food < player_food_faint) then X`09`09 if (randint(8) = 1) then X`09`09`09begin X`09`09`09 paralysis := paralysis + randint(5); X`09`09`09 msg_print('You faint from the lack of food.'); X`09`09`09 if (find_flag) then X`09`09`09 begin X`09`09`09 find_flag := false; X`09`09`09 move_char(5); X`09`09`09 end; X`09`09`09end; X`09`09 end X`09`09else X`09`09 begin X`09`09 if (uand(%X'00000001',status) = 0) then X`09`09 begin X`09`09`09status := uor(%X'00000001',status); X`09`09`09msg_print('You are getting hungry.'); X`09`09`09if (find_flag) then X`09`09`09 begin X`09`09`09 find_flag := false; X`09`09`09 move_char(5); X`09`09`09 end; X`09`09`09prt_hunger; X`09`09 end; X`09`09 end; X`09 end; X`09`7B Food consumtion `7D X`09`7B Note: Speeded up characters really burn up the food! `7D X`09 if (speed < 0) then X`09 food := food - (speed*speed) - food_digested X`09 else X`09 food := food - food_digested; X`09`7B Regenerate `7D X`09 with py.misc do X`09 begin X`09`09if (regenerate) then regen_amount := regen_amount*1.5; X`09`09if (rest > 0) then regen_amount := regen_amount*2; X`09`09if (py.flags.poisoned < 1) then X`09`09 if (chp < mhp) then X`09`09 regenhp(regen_amount); X`09`09if (cmana < mana) then X`09`09 regenmana(regen_amount); X`09 end; X`09`7B Blindness `7D X`09 if (blind > 0) then X`09 begin X`09`09if (uand(%X'00000004',status) = 0) then X`09`09 begin X`09`09 status := uor(%X'00000004',status); X`09`09 prt_map; X`09`09 prt_blind; X`09`09 if (search_flag) then X`09`09 search_off; X`09`09 end; X`09`09blind := blind - 1; X`09`09if (blind = 0) then X`09`09 begin X`09`09 status := uand(%X'FFFFFFFB',status); X`09`09 prt_blind; X`09`09 prt_map; X`09`09 msg_print('The veil of darkness lifts.'); X`09`09 if (find_flag) then X`09`09 begin X`09`09`09find_flag := false; X`09`09`09move_char(5); X`09`09 end; X`09`09 end; X`09 end; X`09`7B Confusion `7D X`09 if (confused > 0) then X`09 begin X`09`09if (uand(%X'00000008',status) = 0) then X`09`09 begin X`09`09 status := uor(%X'00000008',status); X`09`09 prt_confused; X`09`09 end; X`09`09confused := confused - 1; X`09`09if (confused = 0) then X`09`09 begin X`09`09 status := uand(%X'FFFFFFF7',status); X`09`09 prt_confused; X`09`09 msg_print('You feel less confused now.'); X`09`09 if (find_flag) then X`09`09 begin X`09`09`09find_flag := false; X`09`09`09move_char(5); X`09`09 end; X`09`09 end; X`09 end; X`09`7B Afraid `7D X`09 if (afraid > 0) then X`09 begin X`09`09if (uand(%X'00000010',status) = 0) then X`09`09 begin X`09`09 if ((shero+hero) > 0) then X`09`09 afraid := 0 X`09`09 else X`09`09 begin X`09`09`09status := uor(%X'00000010',status); X`09`09`09prt_afraid; X`09`09 end; X`09`09 end X`09`09else if ((shero+hero) > 0) then X`09`09 afraid := 1; X`09`09afraid := afraid - 1; X`09`09if (afraid = 0) then X`09`09 begin X`09`09 status := uand(%X'FFFFFFEF',status); X`09`09 prt_afraid; X`09`09 msg_print('You feel bolder now.'); X`09`09 if (find_flag) then X`09`09 begin X`09`09`09find_flag := false; X`09`09`09move_char(5); X`09`09 end; X`09`09 end; X`09 end; X`09`7B Poisoned `7D X`09 if (poisoned > 0) then X`09 begin X`09`09if (uand(%X'00000020',status) = 0) then X`09`09 begin X`09`09 status := uor(%X'00000020',status); X`09`09 prt_poisoned; X`09`09 end; X`09`09poisoned := poisoned - 1; X`09`09if (poisoned = 0) then X`09`09 begin X`09`09 status := uand(%X'FFFFFFDF',status); X`09`09 prt_poisoned; X`09`09 msg_print('You feel better.'); X`09`09 if (find_flag) then X`09`09 begin X`09`09`09find_flag := false; X`09`09`09move_char(5); X`09`09 end; X`09`09 end X`09`09else X`09`09 begin X`09`09 case con_adj of X`09`09`09-4 : take_hit(4,'poison.'); X`09`09`09-3,-2 : take_hit(3,'poison.'); X`09`09`09-1 : take_hit(2,'poison.'); X`09`09`090 : take_hit(1,'poison.'); X`09`09`091,2,3 : if ((turn mod 2) = 0) then X`09`09`09`09 take_hit(1,'poison.'); X`09`09`094,5 : if ((turn mod 3) = 0) then X`09`09`09`09 take_hit(1,'poison.'); X`09`09`096 : if ((turn mod 4) = 0) then X`09`09`09`09 take_hit(1,'poison.'); X`09`09 end; X`09`09 end; X`09 end; X`09`7B Fast `7D X`09 if (fast > 0) then X`09 begin X`09`09if (uand(%X'00000040',status) = 0) then X`09`09 begin X`09`09 status := uor(%X'00000040',status); X`09`09 msg_print('You feel yourself moving faster.'); X`09`09 change_speed(-1); X`09`09 if (find_flag) then X`09`09 begin X`09`09`09find_flag := false; X`09`09`09move_char(5); X`09`09 end; X`09`09 end; X`09`09fast := fast - 1; X`09`09if (fast = 0) then X`09`09 begin X`09`09 status := uand(%X'FFFFFFBF',status); X`09`09 msg_print('You feel yourself slow down.'); X`09`09 change_speed(+1); X`09`09 if (find_flag) then X`09`09 begin X`09`09`09find_flag := false; X`09`09`09move_char(5); X`09`09 end; X`09`09 end; X`09 end; X`09`7B Slow `7D X`09 if (slow > 0) then X`09 begin X`09`09if (uand(%X'00000080',status) = 0) then X`09`09 begin X`09`09 status := uor(%X'00000080',status); X`09`09 msg_print('You feel yourself moving slower.'); X`09`09 change_speed(+1); X`09`09 if (find_flag) then X`09`09 begin X`09`09`09find_flag := false; X`09`09`09move_char(5); X`09`09 end; X`09`09 end; X`09`09slow := slow - 1; X`09`09if (slow = 0) then X`09`09 begin X`09`09 status := uand(%X'FFFFFF7F',status); X`09`09 msg_print('You feel yourself speed up.'); X`09`09 change_speed(-1); X`09`09 if (find_flag) then X`09`09 begin X`09`09`09find_flag := false; X`09`09`09move_char(5); X`09`09 end; X`09`09 end; X`09 end; X`09`7B Resting is over? `7D X`09 if (rest > 0) then X`09 begin X`09`09 `7B Hibernate every 20 iterations so that process does `7D X`09`09 `7B not eat up system... `7D X`09`09 `7B NOTE: Remove comments for VMS version 4.0 or greater`7D X`09`09 `7B INKEY_DELAY takes care of hibernation for `7D X`09`09 `7B VMS 3.7 or less `7D X`09`09`7Bif ((rest mod 20) = 1) then sleep(1);`7D X`09`09rest := rest - 1; X`09`09 `7B Test for any key being hit to abort rest. Also, `7D X`09`09 `7B this will do a PUT_QIO which updates the screen... `7D X`09`09 `7B One more side benifit; since inkey_delay hibernates `7D X`09`09 `7B small amount before executing, this makes resting `7D X`09`09 `7B less CPU intensive... `7D X`09`09inkey_delay(command,0); X`09`09if (rest = 0) then `7B Resting over `7D X`09`09 rest_off X`09`09else if (command <> null) then `7B Resting aborted `7D X`09`09 rest_off; X`09 end; X`09`7B Halucinating? (Random characters appear!)`7D X`09 if (image > 0) then X`09 begin X`09`09image := image - 1; X`09`09if (image = 0) then X`09`09 draw_cave; X`09 end; X`09`7B Paralysis `7D X`09 if (paralysis > 0) then X`09 begin X`09`09paralysis := paralysis - 1; X`09`09if (rest > 0) then X`09`09 rest_off; X`09`09if (search_flag) then X`09`09 search_off; X`09 end; X`09`7B Protection from evil counter`7D X`09 if (protevil > 0) then protevil := protevil - 1; X`09`7B Inulnerability `7D X`09 if (invuln > 0) then X`09 begin X`09`09if (uand(%X'00001000',status) = 0) then X`09`09 begin X`09`09 status := uor(%X'00001000',status); X`09`09 if (find_flag) then X`09`09 begin X`09`09`09find_flag := false; X`09`09`09move_char(5); X`09`09 end; X`09`09 msg_print('Your skin turns into steel!'); X`09`09 py.misc.pac := py.misc.pac + 100; X`09`09 py.misc.dis_ac := py.misc.dis_ac + 100; X`09`09 prt_pac; X`09`09 end; X`09`09invuln := invuln - 1; X`09`09if (invuln = 0) then X`09`09 begin X`09`09 status := uand(%X'FFFFEFFF',status); X`09`09 if (find_flag) then X`09`09 begin X`09`09`09find_flag := false; X`09`09`09move_char(5); X`09`09 end; X`09`09 msg_print('Your skin returns to normal...'); X`09`09 py.misc.pac := py.misc.pac - 100; X`09`09 py.misc.dis_ac := py.misc.dis_ac - 100; X`09`09 prt_pac; X`09`09 end; X`09 end; X`09`7B Heroism `7D X`09 if (hero > 0) then X`09 begin X`09`09if (uand(%X'00002000',status) = 0) then X`09`09 begin X`09`09 status := uor(%X'00002000',status); X`09`09 if (find_flag) then X`09`09 begin X`09`09`09find_flag := false; X`09`09`09move_char(5); X`09`09 end; X`09`09 with py.misc do X`09`09 begin X`09`09`09mhp := mhp + 10; X`09`09`09chp := chp + 10; X`09`09`09bth := bth + 12; X`09`09`09bthb:= bthb+ 12; X`09`09 end; X`09`09 msg_print('You feel like a HERO!'); X`09`09 prt_mhp; X`09`09 end; X`09`09hero := hero - 1; X`09`09if (hero = 0) then X`09`09 begin X`09`09 status := uand(%X'FFFFDFFF',status); X`09`09 if (find_flag) then X`09`09 begin X`09`09`09find_flag := false; X`09`09`09move_char(5); X`09`09 end; X`09`09 with py.misc do X`09`09 begin X`09`09`09mhp := mhp - 10; X`09`09`09if (chp > mhp) then chp := mhp; X`09`09`09bth := bth - 12; X`09`09`09bthb:= bthb- 12; X`09`09 end; X`09`09 msg_print('The heroism wears off.'); X`09`09 prt_mhp; X`09`09 end; X`09 end; X`09`7B Super Heroism `7D X`09 if (shero > 0) then X`09 begin X`09`09if (uand(%X'00004000',status) = 0) then X`09`09 begin X`09`09 status := uor(%X'00004000',status); X`09`09 if (find_flag) then X`09`09 begin X`09`09`09find_flag := false; X`09`09`09move_char(5); X`09`09 end; X`09`09 with py.misc do X`09`09 begin X`09`09`09mhp := mhp + 20; X`09`09`09chp := chp + 20; X`09`09`09bth := bth + 24; X`09`09`09bthb:= bthb+ 24; X`09`09 end; X`09`09 msg_print('You feel like a SUPER HERO!'); X`09`09 prt_mhp; X`09`09 end; X`09`09shero := shero - 1; X`09`09if (shero = 0) then X`09`09 begin X`09`09 status := uand(%X'FFFFBFFF',status); X`09`09 if (find_flag) then X`09`09 begin X`09`09`09find_flag := false; X`09`09`09move_char(5); X`09`09 end; X`09`09 with py.misc do X`09`09 begin X`09`09`09mhp := mhp - 20; X`09`09`09if (chp > mhp) then chp := mhp; X`09`09`09bth := bth - 24; X`09`09`09bthb:= bthb- 24; X`09`09 end; X`09`09 msg_print('The super heroism wears off.'); X`09`09 prt_mhp; X`09`09 end; X`09 end; X`09`7B Blessed `7D X`09 if (blessed > 0) then X`09 begin X`09`09if (uand(%X'00008000',status) = 0) then X`09`09 begin X`09`09 status := uor(%X'00008000',status); X`09`09 if (find_flag) then X`09`09 begin X`09`09`09find_flag := false; X`09`09`09move_char(5); X`09`09 end; X`09`09 with py.misc do X`09`09 begin X`09`09`09bth := bth + 5; X`09`09`09bthb:= bthb+ 5; X`09`09`09pac := pac + 2; X`09`09`09dis_ac := dis_ac + 2; X`09`09 end; X`09`09 msg_print('You feel righteous!'); X`09`09 prt_mhp; X`09`09 prt_pac; X`09`09 end; X`09`09blessed := blessed - 1; X`09`09if (blessed = 0) then X`09`09 begin X`09`09 status := uand(%X'FFFF7FFF',status); X`09`09 if (find_flag) then X`09`09 begin X`09`09`09find_flag := false; X`09`09`09move_char(5); X`09`09 end; X`09`09 with py.misc do X`09`09 begin X`09`09`09bth := bth - 5; X`09`09`09bthb:= bthb- 5; X`09`09`09pac := pac - 2; X`09`09`09dis_ac := dis_ac - 2; X`09`09 end; X`09`09 msg_print('The prayer has expired.'); X`09`09 prt_mhp; X`09`09 prt_pac; X`09`09 end; X`09 end; X`09`7B Resist Heat `7D X`09 if (resist_heat > 0) then resist_heat := resist_heat - 1; X`09`7B Resist Cold `7D X`09 if (resist_cold > 0) then resist_cold := resist_cold - 1; X`09`7B Detect Invisible `7D X`09 if (detect_inv > 0) then X`09 begin X`09`09if (uand(%X'00010000',status) = 0) then X`09`09 begin X`09`09 status := uor(%X'00010000',status); X`09`09 see_inv := true; X`09`09 end; X`09`09detect_inv := detect_inv - 1; X`09`09if (detect_inv = 0) then X`09`09 begin X`09`09 status := uand(%X'FFFEFFFF',status); X`09`09 see_inv := false; X`09`09 py_bonuses(blank_treasure,0); X`09`09 end; X`09 end; X`09`7B Timed infra-vision `7D X`09 if (tim_infra > 0) then X`09 begin X`09`09if (uand(%X'00020000',status) = 0) then X`09`09 begin X`09`09 status := uor(%X'00020000',status); X`09`09 see_infra := see_infra + 1; X`09`09 end; X`09`09tim_infra := tim_infra - 1; X`09`09if (tim_infra = 0) then X`09`09 begin X`09`09 status := uand(%X'FFFDFFFF',status); X`09`09 see_infra := see_infra - 1; X`09`09 end; X`09 end; X`09`7B Word-of-Recall Note: Word-of-Recall is a delayed action `7D X`09 if (word_recall > 0) then X`09 if (word_recall = 1) then X`09`09begin X`09`09 if (dun_level > 0) then X`09`09 begin X`09`09 msg_print('You feel yourself yanked upwards!'); X`09`09 dun_level := 0; X`09`09 end X`09`09 else if (py.misc.max_lev > 0) then X`09`09 begin X`09`09 msg_print('You feel yourself yanked downwards!'); X`09`09 dun_level := py.misc.max_lev; X`09`09 end; X`09`09 moria_flag := true; X`09`09 paralysis := paralysis + 1; X`09`09 word_recall := 0; X`09`09end X`09 else X`09`09word_recall := word_recall - 1; X X`09`7B Check hit points for adjusting...`09`09`09`7D X`09 with py.misc do X`09`09if (not(find_flag)) then X`09`09 if (py.flags.rest < 1) then X`09`09 begin X`09`09 if (old_chp <> trunc(chp)) then X`09`09`09begin X`09`09`09 if (chp > mhp) then chp := mhp; X`09`09`09 prt_chp; X`09`09`09 old_chp := trunc(chp); X`09`09`09end; X`09`09 if (old_cmana <> trunc(cmana)) then X`09`09`09begin X`09`09`09 if (cmana > mana) then cmana := mana; X`09`09`09 prt_cmana; X`09`09`09 old_cmana := trunc(cmana); X`09`09`09end X`09`09 end; X`09 end; +-+-+-+-+-+-+-+- END OF PART 44 +-+-+-+-+-+-+-+-