-+-+-+-+-+-+-+-+ START OF PART 34 -+-+-+-+-+-+-+-+ X`09`7B Prints age, height, weight, and SC`09`09`09-JWT-`09`7D X`5Bpsect(create$code)`5D procedure put_misc1; X begin X with py do X`09begin X`09 prt_num('Age : ',misc.age,3,40); X`09 prt_num('Height : ',misc.ht ,4,40); X`09 prt_num('Weight : ',misc.wt ,5,40); X`09 prt_num('Social Class : ',misc.sc ,6,40); X`09end; X end; X X X`09`7B Prints the following information on the screen.`09-JWT-`09`7D X`5Bpsect(create$code)`5D procedure put_misc2; X begin X with py.misc do X`09begin X`09 prt_num('Level : ',lev ,10,31); X`09 prt_num('Experience : ',exp ,11,31); X`09 prt_num('Gold : ',au ,12,31); X`09 prt_num('Max Hit Points : ',mhp ,10,54); X`09 prt_num('Cur Hit Points : ',trunc(chp),11,54); X`09 prt_num('Max Mana : ',mana ,12,54); X`09 prt_num('Cur Mana : ',trunc(cmana),13,54); X`09end X end; X X X`09`7B Prints ratings on certain abilities`09`09`09-RAK-`09`7D X`5Bpsect(create$code)`5D procedure put_misc3; X var X`09xbth,xbthb,xfos,xsrh,xstl,xdis,xsave,xdev : integer; X`09xinfra : vtype; X begin X`09clear(14,1); X`09with py.misc do X`09 begin X`09 xbth := bth + lev*bth_lev_adj + ptohit*bth_plus_adj; X`09 xbthb := bthb + lev*bth_lev_adj + ptohit*bth_plus_adj; X`09 xfos := 27 - fos; X`09 if (xfos < 0) then xfos := 0; X`09 xsrh := srh + int_adj; X`09 xstl := stl; X`09 xdis := disarm + lev + 2*todis_adj + int_adj; X`09 xsave := save + lev + wis_adj; X`09 xdev := save + lev + int_adj; X`09 writev(xinfra,py.flags.see_infra*10:1,' feet'); X`09 end; X`09prt('(Miscellaneous Abilities)',16,24); X`09put_buffer('Fighting : '+likert(xbth ,12) ,17, 2); X`09put_buffer('Bows/Throw : '+likert(xbthb,12) ,18, 2); X`09put_buffer('Saving Throw: '+likert(xsave, 6) ,19, 2); X`09put_buffer('Stealth : '+likert(xstl , 1) ,17,27); X`09put_buffer('Disarming : '+likert(xdis , 8) ,18,27); X`09put_buffer('Magic Device: '+likert(xdev , 7) ,19,27); X`09put_buffer('Perception : '+likert(xfos , 3) ,17,52); X`09put_buffer('Searching : '+likert(xsrh , 6) ,18,52); X`09put_buffer('Infra-Vision: '+xinfra, 19,52); X end; X X X`09`7B Used to display the character on the screen.`09`09-RAK-`09`7D X`5Bpsect(create$code)`5D procedure display_char; X var X`09dummy : char; X begin X`09put_character; X`09put_misc1; X`09put_stats; X`09put_misc2; X`09put_misc3; X end; X X X`09`7B Gets a name for the character `09`09`09-JWT-`09`7D X`5Bpsect(create$code)`5D procedure get_name; X begin X prt('Enter your player''s name `5Bpress when finished`5D',22 V,3); X get_string(py.misc.name,3,15,24); X clear(21,1); X end; X X X`09`7B Chances the name of the character`09`09`09-JWT-`09`7D X`5Bpsect(create$code)`5D procedure change_name; X var X`09c : char; X`09flag : boolean; X begin X flag := false; X display_char; X repeat X`09prt('hange character name. to continue.',22,3); X`09inkey(c); X`09case ord(c) of X`09 99 : get_name; X`09 0,3,25,26,27 : flag := true; X`09 otherwise; X`09end; X until (flag); X end; X X X`09`7B Builds passwords`09`09`09`09`09-RAK-`09`7D X`5Bpsect(setup$code)`5D procedure bpswd; X var X`09`09i1 : integer; X begin X`09seed := wdata`5B1,0`5D; X`09for i1 := 1 to 12 do X`09 password1`5Bi1`5D := chr( uxor(wdata`5B1,i1`5D,randint(255)) ); X`09seed := wdata`5B2,0`5D; X`09for i1 := 1 to 12 do X`09 password2`5Bi1`5D := chr( uxor(wdata`5B2,i1`5D,randint(255)) ); X`09seed := get_seed; X end; X X X`09`7B Destroy an item in the inventory`09`09`09-RAK-`09`7D X`5Bpsect(misc4$code)`5D procedure inven_destroy(item_val : integer); X var X`09`09i2 : integer; X begin X`09inventory`5Binven_max`5D := inventory`5Bitem_val`5D; X`09with inventory`5Bitem_val`5D do X`09 begin X`09 if ((number > 1) and (subval < 512)) then X`09 begin X`09`09number := number - 1; X`09`09inven_weight := inven_weight - weight; X`09`09inventory`5Binven_max`5D.number := 1; X`09 end X`09 else X`09 begin X`09`09inven_weight := inven_weight - weight*number; X`09`09for i2 := item_val to inven_ctr-1 do X`09`09 inventory`5Bi2`5D := inventory`5Bi2+1`5D; X`09`09inventory`5Binven_ctr`5D := blank_treasure; X`09`09inven_ctr := inven_ctr - 1; X`09 end; X`09 end X end; X X X`09`7B Drops an item from inventory to given location`09-RAK-`09`7D X`5Bpsect(misc4$code)`5D procedure inven_drop(item_val,y,x : integer); X var X`09i1 : integer; X begin X`09with cave`5By,x`5D do X`09 begin X`09 if (tptr > 0) then pusht(tptr); X`09 inven_destroy(item_val); X`09 popt(i1); X`09 t_list`5Bi1`5D := inventory`5Binven_max`5D; X`09 tptr := i1; X`09 end; X end; X X X`09`7B Destroys a type of item on a given percent chance`09-RAK-`09`7D X`5Bpsect(misc4$code)`5D function inven_damage( X`09`09`09typ : obj_set; X`09`09`09perc : integer X`09`09`09`09`09) : integer; X var X`09`09i1,i2 : integer; X begin X`09i2 := 0; X`09for i1 := 1 to inven_ctr do X`09 with inventory`5Bi1`5D do X`09 if (tval in typ) then X`09 if (randint(100) < perc) then X`09`09begin X`09`09 inven_destroy(i1); X`09`09 i2 := i2 + 1; X`09`09end; X`09inven_damage := i2; X end; X X X`09`7B Computes current weight limit `09`09`09-RAK-`09`7D X`5Bpsect(misc4$code)`5D function weight_limit : integer; X var X`09weight_cap : integer; X begin X`09weight_cap := py.stat.cstr*player_weight_cap + py.misc.wt; X`09if (weight_cap > 3000) then weight_cap := 3000; X`09weight_limit := weight_cap; X end; X X X`09`7B Check inventory for too much weight`09`09`09-RAK-`09`7D X`5Bpsect(misc4$code)`5D function inven_check_weight : boolean; X var X`09item_wgt,max_weight : integer; X begin X`09inven_check_weight := false; X`09max_weight := weight_limit; X`09with inventory`5Binven_max`5D do X`09 item_wgt := number*weight; X`09`09`7B Now, check to see if player can carry object `7D X`09if ((inven_weight + item_wgt) <= max_weight) then X`09 inven_check_weight := true; `7B Can carry weight `7D X end; X X X`09`7B Check to see if he will be carrying too many objects`09-RAK-`09`7D X`5Bpsect(misc4$code)`5D function inven_check_num : boolean; X var X`09item_num,i1 : integer; X`09flag : boolean; X begin X`09inven_check_num := false; X`09if (inven_ctr < 22) then X`09 inven_check_num := true X`09else if (inventory`5Binven_max`5D.subval > 255) then X`09 for i1 := 1 to inven_ctr do X`09 with inventory`5Bi1`5D do X`09 if (tval = inventory`5Binven_max`5D.tval) then X`09`09if (subval = inventory`5Binven_max`5D.subval) then X`09`09 inven_check_num := true; X end; X X X`09`7B Add the item in INVEN_MAX to players inventory. Return the`09`7D X`09`7B item position for a description if needed... -RAK- `7D X`5Bpsect(misc4$code)`5D procedure inven_carry(var item_val : integer); X var X`09item_num,wgt : integer; X`09typ,subt : integer; X`09flag : boolean; X X`09`7B Insert INVEN_MAX at given location`09`7D X procedure insert(pos,wgt : integer); X`09var X`09`09i1 : integer; X`09begin X`09 for i1 := inven_ctr downto pos do X`09 inventory`5Bi1+1`5D := inventory`5Bi1`5D; X`09 inventory`5Bpos`5D := inventory`5Binven_max`5D; X`09 inven_ctr := inven_ctr + 1; X`09 inven_weight := inven_weight + wgt; X`09end; X X`09`7B INVEN_CARRY routine`09`09`09`7D X begin X`09`09`7B Now, check to see if player can carry object `7D X`09item_val := 0; X`09flag := false; X`09with inventory`5Binven_max`5D do X`09 begin X`09 item_num := number; X`09 typ := tval; X`09 subt := subval; X`09 wgt := number*weight; X`09 end; X`09repeat X`09 item_val := item_val + 1; X`09 with inventory`5Bitem_val`5D do X`09 if (typ = tval) then X`09 begin X`09`09if (subt = subval) then `7B Adds to other item `7D X`09`09 if (subt > 255) then X`09`09 begin X`09`09 number := number + item_num; X`09`09 inven_weight := inven_weight + wgt; X`09`09 flag := true; X`09`09 end; X`09 end X`09 else if (typ > tval) then X`09 begin `7B Insert into list `7D X`09`09insert(item_val,wgt); X`09`09flag := true; X`09 end; X`09until ((item_val >= inven_ctr) or (flag)); X`09if (not(flag)) then `7B Becomes last item in list `7D X`09 begin X`09 insert(inven_ctr+1,wgt); X`09 item_val := inven_ctr; X`09 end; X end; X X X`09`7B Returns spell chance of failure for spell`09`09-RAK-`09`7D X`5Bpsect(misc2$code)`5D procedure spell_chance(var spell : spl_rec); X begin X`09with magic_spell`5Bpy.misc.pclass,spell.splnum`5D do X`09 with spell do X`09 begin X`09 splchn := sfail - 3*(py.misc.lev-slevel); X`09 if (class`5Bpy.misc.pclass`5D.mspell) then X`09`09splchn := splchn - 3*(int_adj-1) X`09 else X`09`09splchn := splchn - 3*(wis_adj-1); X`09 if (smana > py.misc.cmana) then X`09`09splchn := splchn + 5*trunc(smana-py.misc.cmana); X`09 if (splchn > 95) then X`09`09splchn := 95 X`09 else if (splchn < 5) then X`09`09splchn := 5; X`09 end X end; X X X`09`7B Print list of spells`09`09`09`09`09-RAK-`09`7D X`5Bpsect(misc2$code)`5D procedure print_new_spells( X`09`09`09spell : spl_type; X`09`09`09num : integer; X`09`09`09var redraw : boolean X`09`09`09`09`09); X var X`09i1 : integer; X`09out_val : vtype; X begin X redraw := true; X clear(1,1); X prt(' Name Level Mana %Failure',2,1); X for i1 := 1 to num do X`09with magic_spell`5Bpy.misc.pclass,spell`5Bi1`5D.splnum`5D do X`09 begin X`09 spell_chance(spell`5Bi1`5D); X`09 writev(out_val,chr(96+i1),') ',pad(sname,' ',30), X`09`09slevel:3,' ',smana:3,' ',spell`5Bi1`5D.splchn:2); X`09 prt(out_val,2+i1,1); X`09 end; X end; X X X X`09`7B Returns spell pointer `09`09`09`09-RAK-`09`7D X`5Bpsect(misc2$code)`5D function get_spell(spell : spl_type; num : integer; X`09`09 var sn,sc : integer; prompt : vtype; X`09`09 var redraw : boolean) : boolean; X var X`09i1 : integer; X`09flag : boolean; X`09choice : char; X`09out_val1,out_val2 : vtype; X begin X sn := 0; X flag := true; X writev(out_val1,'(Spells a-',chr(num+96), X`09`09`09`09', *=List, =exit) ',prompt); X while (((sn < 1) or (sn > num)) and (flag)) do X`09begin X`09 prt(out_val1,1,1); X`09 inkey(choice); X`09 sn := ord(choice); X`09 case sn of X`09 0,3,25,26,27: begin X`09`09`09 flag := false; X`09`09`09 reset_flag := true; X`09`09`09end; X`09 42 : print_new_spells(spell,num,redraw); X`09 otherwise sn := sn - 96; X`09 end; X`09end; X msg_flag := false; X if (flag) then X`09begin X`09 spell_chance(spell`5Bsn`5D); X`09 sc := spell`5Bsn`5D.splchn; X`09 sn := spell`5Bsn`5D.splnum; X`09end; X get_spell := flag; X end; X X X`09`7B Learn some magic spells (Mage)`09`09`09-RAK-`09`7D X`5Bpsect(misc2$code)`5D function learn_spell(var redraw : boolean) : boolean V; X var X`09i2 : unsigned; X`09i1,i3,sn,sc : integer; X`09new_spells : integer; X`09spell_flag : unsigned; X`09spell : spl_type; X begin X`09learn_spell := false; X`09case int_adj of X`09 0 : new_spells := 0; X`09 1 : new_spells := 1; X`09 2 : new_spells := 1; X`09 3 : new_spells := 1; X`09 4 : new_spells := randint(2); X`09 5 : new_spells := randint(2); X`09 6 : new_spells := randint(3); X`09 7 : new_spells := randint(2)+1; X`09 otherwise new_spells := 0; X`09end; X`09i1 := 0; X`09spell_flag := 0; X`09repeat X`09 i1 := i1 + 1; X`09 if (inventory`5Bi1`5D.tval = 90) then X`09 spell_flag := uor(spell_flag,inventory`5Bi1`5D.flags); X`09until (i1 >= inven_ctr); X`09while ((new_spells > 0) and (spell_flag > 0)) do X`09 begin X`09 i1 := 0; X`09 i2 := spell_flag; X`09 repeat X`09 i3 := bit_pos(i2); X`09 with magic_spell`5Bpy.misc.pclass,i3`5D do X`09`09if (slevel <= py.misc.lev) then X`09`09 if (not(learned)) then X`09`09 begin X`09`09 i1 := i1 + 1; X`09`09 spell`5Bi1`5D.splnum := i3; X`09`09 end; X`09 until(i2 = 0); X`09 if (i1 > 0) then X`09 begin X`09`09print_new_spells(spell,i1,redraw); X`09`09if (get_spell(spell,i1,sn,sc,'Learn which spell?',redraw)) then X`09`09 begin X`09`09 magic_spell`5Bpy.misc.pclass,sn`5D.learned := true; X`09`09 learn_spell := true; X`09`09 if (py.misc.mana = 0) then X`09`09 begin X`09`09`09py.misc.mana := 1; X`09`09`09py.misc.cmana := 1; X`09`09 end; X`09`09 end X`09`09else X`09`09 new_spells := 0; X`09 end X`09 else X`09 new_spells := 0; X`09 new_spells := new_spells - 1; X`09 end; X end; X X X`09`7B Learn some prayers (Priest)`09`09`09`09-RAK-`09`7D X`5Bpsect(misc2$code)`5D function learn_prayer : boolean; X var X`09i1,i2,i3,i4,new_spell : integer; X`09test_array : array `5B1..32`5D of integer; X`09spell_flag : unsigned; X begin X`09i1 := 0; X`09spell_flag := 0; X`09repeat X`09 i1 := i1 + 1; X`09 if (inventory`5Bi1`5D.tval = 91) then X`09 spell_flag := uor(spell_flag,inventory`5Bi1`5D.flags); X`09until(i1 >= inven_ctr); X`09i1 := 0; X`09while (spell_flag > 0) do X`09 begin X`09 i2 := bit_pos(spell_flag); X`09 with magic_spell`5Bpy.misc.pclass,i2`5D do X`09 if (slevel <= py.misc.lev) then X`09`09if (not(learned)) then X`09`09 begin X`09`09 i1 := i1 + 1; X`09`09 test_array`5Bi1`5D := i2; X`09`09 end; X`09 end; X`09case wis_adj of X`09 0 : i2 := 0; X`09 1 : i2 := 1; X`09 2 : i2 := 1; X`09 3 : i2 := 1; X`09 4 : i2 := randint(2); +-+-+-+-+-+-+-+- END OF PART 34 +-+-+-+-+-+-+-+-