-+-+-+-+-+-+-+-+ START OF PART 59 -+-+-+-+-+-+-+-+ X lose_con := true; X if (not(py.flags.sustain_con)) then X BEGIN X with py.stat do X ccon := de_statp(ccon); X msg_print('You feel very sick.'); X prt_constitution X END X else X msg_print('You feel sick for a moment, then it passes.') X END; X`20 X`7B Lose a charisma point.`7D X`5Bpsect(misc6$code)`5D function lose_chr : boolean; X BEGIN X lose_chr := true; X if (not(py.flags.sustain_chr)) then X BEGIN X with py.stat do X cchr := de_statp(cchr); X msg_print('Your skin starts to itch.'); X prt_charisma X END X else X msg_print('Your skin starts to itch, but feels better now.') X END; X`20 X`7B Lose experience `7D X`5Bpsect(misc6$code)`5D procedure lose_exp(amount : integer); X var X i1,i2,av_hp,lose_hp,av_mn,lose_mn : integer; X flag : boolean; X BEGIN X with py.misc do X BEGIN X if (amount > exp) then X exp := 0 X else X exp := exp - amount; X i1 := 1; X while (trunc(player_exp`5Bi1`5D*expfact) <= exp) do X i1 := i1 + 1; X i2 := lev - i1; X while (i2 > 0) do X BEGIN X av_hp := trunc(mhp/lev); X av_mn := trunc(mana/lev); X lev := lev - 1; X i2 := i2 - 1; X lose_hp := randint(av_hp*2-1); X lose_mn := randint(av_mn*2-1); X mhp := mhp - lose_hp; X mana := mana - lose_mn; X if (mhp < 1) then mhp := 1; X if (mana < 0) then mana := 0; X with class`5Bpclass`5D do X if ((mspell) or (pspell) or (espell)) then X BEGIN X i1 := 32; X flag := false; X repeat X i1 := i1 - 1; `20 X`09`09 if (class`5Bpclass`5D.mspell) then`20 X if (mage_spell`5Bpclass,i1`5D.learned) then X flag := true; X`09`09 if (class`5Bpclass`5D.pspell) then`20 X if (priest_spell`5Bpclass,i1`5D.learned) then X flag := true; X`09`09 if (class`5Bpclass`5D.espell) then`20 X if (extra_spell`5Bpclass,i1`5D.learned) then X flag := true; X until((flag) or (i1 < 2)); X if (flag) then X BEGIN X`09`09 if (class`5Bpclass`5D.mspell) then`20 X mage_spell`5Bpclass,i1`5D.learned := false; X`09`09 if (class`5Bpclass`5D.pspell) then`20 X priest_spell`5Bpclass,i1`5D.learned := false; X`09`09 if (class`5Bpclass`5D.espell) then`20 X extra_spell`5Bpclass,i1`5D.learned := false; X if (mspell) then X msg_print('You have forgotten a magic spell!') X else if (pspell) then X msg_print('You have forgotten a prayer!') X`09`09`09else X`09`09`09 msg_print ('You have forgotten an extra spell'); X X END X END X END; X if (chp > mhp) then chp := mhp; X if (cmana > mana) then cmana := mana; X title := player_title`5Bpclass,lev`5D; X prt_experience; X prt_mhp; X prt_chp; X prt_mana; X prt_level; X prt_title X END X END; X`20 X`7B Slow Poison `7D X`5Bpsect(misc6$code)`5D function slow_poison : boolean; X BEGIN X slow_poison := false; X with py.flags do X if (poisoned > 0) then X BEGIN X poisoned := trunc(poisoned/2.0); X if (poisoned < 1) then poisoned := 1; X slow_poison := true; X msg_print('The effects of the poison has been reduced.') X END X END; X`20 X`7B Bless`7D X`5Bpsect(misc6$code)`5D function bless(amount : integer) : boolean; X BEGIN X bless := true; X with py.flags do X blessed := blessed + amount X END; X`20 X`7B Detect Invisible for period of time `7D X`5Bpsect(misc6$code)`5D function detect_inv2(amount : integer) : boolean; X BEGIN X detect_inv2 := true; X with py.flags do X detect_inv := detect_inv + amount X END; X`20 X`7B The spell of destruction.`7D X`5Bpsect(misc6$code)`5D function destroy_area(y,x : integer) : boolean; X VAR X i1,i2,i3 : integer; X`20 X PROCEDURE replace_spot(y,x,typ : integer); X BEGIN X with cave`5By,x`5D do X BEGIN X CASE typ of X 1,2,3 : BEGIN X fval := corr_floor1.ftval; X fopen := corr_floor1.ftopen X END; X 4,7,10 : BEGIN X fval := rock_wall1.ftval; X fopen := rock_wall1.ftopen X END; X 5,8,11 : BEGIN X fval := rock_wall2.ftval; X fopen := rock_wall2.ftopen X END; X 6,9,12 : BEGIN X fval := rock_wall3.ftval; X fopen := rock_wall3.ftopen X END X END; X pl := false; X fm := false; X if (tptr > 0) then X delete_object(y,x); X if (cptr > 1) then X delete_monster(cptr) X END X END; X`20 X BEGIN X destroy_area := true; X if (dun_level > 0) then X BEGIN X for i1 := (y-15) to (y+15) do X for i2 := (x-15) to (x+15) do X if (in_bounds(i1,i2)) then X if (cave`5Bi1,i2`5D.fval <> 15) then X BEGIN X i3 := distance(i1,i2,y,x); X if (i3 < 13) then X replace_spot(i1,i2,randint(6)) X else if (i3 < 16) then X replace_spot(i1,i2,randint(9)) X END X END; X msg_print('There is a searing blast of light!'); X py.flags.blind := py.flags.blind + 10 + randint(10) X END; X`20 X`20 X`7B Enchants a plus onto an item.`7D X`5Bpsect(misc6$code)`5D function enchant(var pluses : worlint) : boolean; X VAR X chance : integer; X BEGIN X chance := 0; X enchant := false; X if (pluses > 0) then X CASE pluses of X 1 : chance := 040; X 2 : chance := 100; X 3 : chance := 200; X 4 : chance := 400; X 5 : chance := 600; X 6 : chance := 700; X 7 : chance := 800; X 8 : chance := 900; X 9 : chance := 950; X otherwise chance := 995 X END; X if (randint(1000) > chance) then X BEGIN X pluses := pluses + 1; X enchant := true X END X END; X`20 X`20 X`7B Removes curses from items in inventory`7D X`5Bpsect(misc6$code)`5D function remove_curse : boolean; X VAR X i1 : integer; X BEGIN X remove_curse := false; X for i1 := 23 to 32 do X with inventory`5Bi1`5D do X if (uand(%X'80000000',flags) <> 0) then X BEGIN X flags := uand(%X'7FFFFFFF',flags); X py_bonuses(blank_treasure,0); X remove_curse := true X END X END; X`20 X`20 X`7B Restores any drained experience `7D X`5Bpsect(misc6$code)`5D function restore_level : boolean; X BEGIN X restore_level := false; X with py.misc do X if (max_exp > exp) then X BEGIN X restore_level := true; X msg_print('You feel your life energies returning...'); X while (exp < max_exp) do X BEGIN X exp := max_exp; X prt_experience X END X END X END; $ CALL UNPACK [.SOURCE.INCLUDE]SPELLS.INC;1 86599158 $ create 'f' X `20 X `20 Xmage_spell := ( X( `7B Warrior `7D X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false)),`09 X`20 X ( `7B Mage `7D X ('Magic Missle' , `09`09 1,`09 1,`095,`09 22,`09false),`09 X ('Detect Monsters' ,`09`09 1,`09 1,`095,`09 27,`09false),`09 X ('Phase Door' , `09`09 1,`09 2,`094,`09 22,`09false),`09 X ('Light Area' ,`09`09 1,`09 2,`094,`09 25,`09false),`09 X ('Cure Light Wounds' ,`09`09 3,`09 3,`098,`09 25,`09false),`09 X ('Find Hidden Traps/Doors',`09 3,`09 3,`096,`09 45,`09false),`09 X ('Stinking Cloud' , `09`09 3,`09 4,`098,`09 27,`09false),`09 X ('Confusion' ,`09`09`09 3, `09 4,`096,`09 32,`09false),`09 X ('Lightning Bolt' , `09`09 5,`09 4,`09 25,`09 32,`09false),`09 X ('Trap/Door Destruction' ,`09 5,`09 5,`09 30,`09 37,`09false),`09 X ('Sleep I' , `09`09`09 5,`09 5,`09 20,`09 32,`09false),`09 X ('Cure Poison' , `09`09 5,`09 5,`09 25,`09 37,`09false),`09 X ('Teleport Self' ,`09`09 7,`09 6,`09 35,`09 37,`09false),`09 X ('Remove Curse' , `09`09 7,`09 6,`09 40,`09 50,`09false),`09 X ('Frost Bolt' ,`09`09 7,`09 6,`09 50,`09 40,`09false),`09 X ('Turn Stone to Mud' ,`09`09 9,`09 7,`09 75,`09 44,`09false),`09 X ('Identify' , `09`09 9,`09 7,`09 75,`09 95,`09false),`09 X ('Recharge Item I' , `09`09 9,`09 7,`09 90,`09 70,`09false),`09 X ('Sleep II' , `09 `09`09 9, `09 7,`09 75,`09 45,`09false),`09 X ('Polymorph Other' , `09`0911,`09 7,`09100,`09 45,`09false),`09 X ('Create Food' , `09`0911,`09 7,`09 75,`09 50,`09false),`09 X ('Sleep III' ,`09`09`0913,`09 7,`09 90,`09 50,`09false),`09 X ('Fire Bolt' ,`09`09`0915, 9,`09100,`09 50,`09false),`09 X ('Slow Monster' , `09`0917,`09 9,`09125,`09 50,`09false),`09 X ('Frost Ball' , `09`0919,`0912,`09150,`09 52,`09false),`09 X ('Recharge Item II' ,`09`0921,`0912,`09175,`09 85,`09false),`09 X ('Teleport Other' ,`09`0923,`0912,`09200,`09 60,`09false),`09 X ('Haste Self' ,`09`0925,`0912,`09250,`09 60,`09false),`09 X ('Fire Ball' ,`09`09`0929,`0918,`09350,`09 60,`09false),`09 X ('Word of Destruction' ,`0933,`0921,`09500,`09 75,`09false),`09 X ('Genocide' ,`09`09`0937,`0925,`09800,`09 95, `09false)), `20 X X ( `7B Priest `7D X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false)),`09 X `20 X`09 X ( `7B Rogue `7D X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false), X ('' ,`0999,`0999,`09 0,`09 0,`09false),`09 X ('' ,`0999,`0999,`09 0,`09 0,`09false)),`09 X`20 X X ( `7B Ranger `7D +-+-+-+-+-+-+-+- END OF PART 59 +-+-+-+-+-+-+-+-