-+-+-+-+-+-+-+-+ START OF PART 34 -+-+-+-+-+-+-+-+ X`09`7B Prints the following information on the screen.`09-JWT-`09`7D X`5Bpsect(create$code)`5D procedure put_character; X begin X clear(1,1); X with py.misc do X`09begin X`09 prt('Name : ' + name,3,3); X`09 prt('Race : ' + race,4,3); X`09 prt('Sex : ' + sex,5,3); X`09 prt('Class : ' + tclass,6,3) 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_stats; X begin X with py do X`09begin X`09 prt_stat('STR : ',stat.cstr,3,65); X`09 prt_stat('INT : ',stat.cint,4,65); X`09 prt_stat('WIS : ',stat.cwis,5,65); X`09 prt_stat('DEX : ',stat.cdex,6,65); X`09 prt_stat('CON : ',stat.ccon,7,65); X`09 prt_stat('CHR : ',stat.cchr,8,65); X`09 prt_num('+ To Hit : ',misc.dis_th,10,4); X`09 prt_num('+ To Damage: ',misc.dis_td,11,4); X`09 prt_num('+ To AC : ',misc.dis_tac,12,4); X`09 prt_num(' Total AC : ',misc.dis_ac,13,4); X`09end X end; X X X`09`7B Returns a rating of x depending on y`09`09`09-JWT-`09`7D X`5Bpsect(create$code)`5D function likert(x,y : integer) : btype; X begin X`09case trunc(x/y) of X`09 -3,-2,-1`09: likert := 'Very Bad'; X `09 0,1`09`09: likert := 'Bad'; X`09 2 `09`09: likert := 'Poor'; X`09 3,4`09`09: likert := 'Fair'; X`09 5`09`09: likert := 'Good'; X`09 6`09`09: likert := 'Very Good'; X`09 7,8`09`09: likert := 'Superb'; X`09 otherwise `09 likert := 'Excellent'; X`09end X end; X X 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`09: integer; X`09xinfra`09`09`09`09`09`09: 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`09: 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`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`09: char; X`09flag`09: boolean; X begin X flag := false; X display_char; X repeat X prt('hange character name. to continue.',22,3); X inkey(c); X case ord(c) of X`09 99`09`09: get_name; X`09 0,3,25,26,27`09: flag := true; X`09 otherwise; X end; 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`09`09: 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 `09: 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 number := 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 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`09`09`09`09: 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`09`09:`09obj_set; X`09`09`09perc`09`09:`09integer X`09`09`09`09`09) : integer; X var X`09`09i1,i2`09`09: 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 inven_damage := i2; X end; X X X`09`7B Computes current weight limit`09`09`09`09-RAK-`09`7D X`5Bpsect(misc4$code)`5D function weight_limit : integer; X var X`09weight_cap`09: 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`09`09: 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`09`7D X`09if ((inven_weight + item_wgt) <= max_weight) then X`09 inven_check_weight := true;`09`7B Can carry weight`09`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`09`09`09: integer; X`09flag`09`09`09`09: 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...`09`09-RAK-`09`7D X`5Bpsect(misc4$code)`5D procedure inven_carry(var item_val : integer); X var X`09item_num,wgt`09`09`09: integer; X`09typ,subt`09`09`09: integer; X`09flag`09`09`09`09: boolean; X X`09`7B Insert INVEN_MAX at given location`09`7D X procedure insert(pos,wgt : integer); X var X`09`09i1`09: integer; X begin 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`09`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`09`7B Adds to other item`09`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`09`09`7B Insert into list`09`09`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`09`7B Becomes last item in list`09`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 splchn := splchn + 5*trunc(smana-py.misc.cmana); X`09 if (splchn > 95) then X`09 splchn := 95 X`09 else if (splchn < 5) then X`09 splchn := 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`09`09:`09spl_type; X`09`09`09num`09`09:`09integer;`20 X`09`09`09var redraw`09:`09boolean X`09`09`09`09`09); X var X`09i1`09`09`09`09: integer; X`09out_val`09`09`09`09: 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`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`09`09`09`09: integer; X`09flag`09`09`09`09: boolean; X`09choice`09`09`09`09: char; X`09out_val1,out_val2`09`09: 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:`09begin X`09`09`09 flag := false; X`09`09`09 reset_flag := true; X`09`09`09end; X`09 42`09 :`09print_new_spells(spell,num,redraw); X`09 otherwise `09sn := 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`09`09`09`09: unsigned; X`09i1,i3,sn,sc`09`09`09: integer; X`09new_spells`09`09`09: integer; X`09spell_flag`09`09`09: unsigned; X`09spell`09`09`09`09: 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 if (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 +-+-+-+-+-+-+-+- END OF PART 34 +-+-+-+-+-+-+-+-