-+-+-+-+-+-+-+-+ START OF PART 35 -+-+-+-+-+-+-+-+ X`5Bpsect(misc2$code)`5D function todam_adj : integer; X begin X with py.stat do X if (cstr < 4) then todam_adj := -2 X else if (cstr < 5) then todam_adj := -1 X else if (cstr < 16) then todam_adj := 0 X else if (cstr < 17) then todam_adj := 1 X else if (cstr < 18) then todam_adj := 2 X else if (cstr < 94) then todam_adj := 3 X else if (cstr < 109) then todam_adj := 4 X else if (cstr < 117) then todam_adj := 5 X else todam_adj := 6; X end; X`20 X`20 X`7B Pre-declaration of PRT_EXPERIENCE `7D X`5Bpsect(misc5$code)`5D procedure prt_experience; X forward; X `20 X X`7B Prints character-screen info `7D X`5Bpsect(misc5$code)`5D procedure prt_stat_block; X VAR X indx : integer; X mwkdiv : real; X begin X prt_field(py.misc.race, 3,stat_column); X prt_field(py.misc.tclass, 4,stat_column); X prt_field(py.misc.title, 5,stat_column); X prt_stat('STR : ',py.stat.cstr, 7,stat_column); X prt_stat('INT : ',py.stat.cint, 8,stat_column); X prt_stat('WIS : ',py.stat.cwis, 9,stat_column); X prt_stat('DEX : ',py.stat.cdex, 10,stat_column); X prt_stat('CON : ',py.stat.ccon, 11,stat_column); X prt_stat('CHR : ',py.stat.cchr, 12,stat_column); X prt_num( 'LEV : ',py.misc.lev, 14,stat_column); X prt_num( 'EXP : ',py.misc.exp, 15,stat_column); X prt_num( 'CHP : ',trunc(py.misc.chp), 16,stat_column); X prt_num( 'MHP : ',py.misc.mhp, 17,stat_column); X if ((py.misc.tclass <> 'Rogue') and (py.misc.tclass <> 'Warrior')) then`20 X BEGIN X mwkdiv:=py.misc.cmana/10; X if (mwkdiv < 1) then X indx:=2 X else `20 X if (mwkdiv < 10) then X indx:=3 X else X indx:=4; X prt_num( 'MANA: ',trunc(py.misc.cmana),18,stat_column); X prt_num( '/',py.misc.mana,18,stat_column+5+indx); X END; X prt_num( 'AC : ',py.misc.dis_ac, 19,stat_column); X prt_num( 'GOLD: ',py.misc.au, 20,stat_column); X prt_num( 'WGHT: ',inven_weight, 21,stat_column); X max_weight := weight_limit; X prt_num( 'MXWT: ',max_weight, 22,stat_column); X if (total_winner) then prt_winner; X if (uand(%X'000003',py.flags.status) <> 0) then X prt_hunger; X if (uand(%X'000004',py.flags.status) <> 0) then X prt_blind; X if (uand(%X'000008',py.flags.status) <> 0) then X prt_confused; X if (uand(%X'000010',py.flags.status) <> 0) then X prt_afraid; X if (uand(%X'000020',py.flags.status) <> 0) then X prt_poisoned; X if (uand(%X'000100',py.flags.status) <> 0) then X prt_search; X if (uand(%X'000200',py.flags.status) <> 0) then X prt_rest; X end; X`20 X X`7B Draws entire screen `7D X`5Bpsect(misc5$code)`5D procedure draw_cave; X begin `20 X clear(1,1); X prt_stat_block; X prt_map; X prt_depth; `20 X end; X`20 X`20 X`7B Prints the following information on the screen. `7D X`5Bpsect(create$code)`5D procedure put_character; X begin X clear(1,1); X with py.misc do X begin X prt('Name : ' + name,3,3); X prt('Race : ' + race,4,3); X prt('Sex : ' + sex,5,3); X prt('Class : ' + tclass,6,3) X end X end; X`20 X`20 X`7B Prints the following information on the screen. `7D X`5Bpsect(create$code)`5D procedure put_stats; X begin X with py do X begin X prt('Cur',2,62); X prt('Max',2,71); X prt_stat('STR : ',stat.cstr,3,56); X prt_stat('`7C ',stat.str,3,69); X prt_stat('INT : ',stat.cint,4,56); X prt_stat('`7C ',stat.int,4,69); X prt_stat('WIS : ',stat.cwis,5,56); X prt_stat('`7C ',stat.wis,5,69); X prt_stat('DEX : ',stat.cdex,6,56); X prt_stat('`7C ',stat.dex,6,69); X prt_stat('CON : ',stat.ccon,7,56); X prt_stat('`7C ',stat.con,7,69); X prt_stat('CHR : ',stat.cchr,8,56); X prt_stat('`7C ',stat.chr,8,69); X prt_num('+ To Hit : ',misc.dis_th,10,4); X prt_num('+ To Dam : ',misc.dis_td,11,4); X prt_num('+ To AC : ',misc.dis_tac,12,4); X prt_num('Total AC : ',misc.dis_ac,13,4); X end X end; X`20 X`20 X`7B Returns a rating of x depending on y `7D X`5Bpsect(create$code)`5D function likert(x,y : integer) : btype; X begin X case trunc(x/y) of X -3,-2,-1 : likert := 'Very Bad'; X 0,1 : likert := 'Bad'; X 2 : likert := 'Poor'; X 3,4 : likert := 'Fair'; X 5 : likert := 'Good'; X 6 : likert := 'Very Good'; X 7,8 : likert := 'Superb'; X otherwise likert := 'Excellent'; X end X end; X`20 X`20 X`7B Prints age, height, weight, and SC `7D X`5Bpsect(create$code)`5D procedure put_misc1; X begin X with py do X begin X prt_num('Age : ',misc.age,3,36); X prt_num('Height : ',misc.ht ,4,36); X prt_num('Weight : ',misc.wt ,5,36); X prt_num('Social Class : ',misc.sc ,6,36); X end; X end; X`20 X`20 X`7B Prints the following information on the screen. `7D X`5Bpsect(create$code)`5D procedure put_misc2; X begin X with py.misc do `20 X begin X prt_num('Level : ',lev ,10,27); X prt_num('Cur Experience : ',exp ,11,27); X prt_num('Max Experience : ',max_exp,12,27); X prt_num('Gold : ',au ,13,27); X prt_num('Max Hit Points : ',mhp ,10,54); X prt_num('Cur Hit Points : ',trunc(chp),11,54); X prt_num('Max Mana : ',mana ,12,54); X prt_num('Current Mana : ',trunc(cmana),13,54); X end X end; X`20 X`20 X`7B Prints ratings on certain abilities `7D X`5Bpsect(create$code)`5D procedure put_misc3; X var X xbth,xbthb,xfos,xsrh,xstl,xdis,xsave,xdev : integer; X xinfra : vtype; X begin X clear(14,1); X with py.misc do X begin X xbth := bth + lev*bth_lev_adj + ptohit*bth_plus_adj; X xbthb := bthb + lev*bth_lev_adj + ptohit*bth_plus_adj; X xfos := 27 - fos; X if (xfos < 0) then xfos := 0; X xsrh := srh + int_adj; X xstl := stl; X xdis := disarm + lev + 2*todis_adj + int_adj; X xsave := save + lev + wis_adj; X xdev := save + lev + int_adj; X writev(xinfra,py.flags.see_infra*10:1,' feet'); X end; X prt('(Miscellaneous Abilities)',16,24); X put_buffer('Fighting : '+likert(xbth ,12) ,17, 2); X put_buffer('Bows/Throw : '+likert(xbthb,12) ,18, 2); X put_buffer('Saving Throw: '+likert(xsave, 6) ,19, 2); X put_buffer('Stealth : '+likert(xstl , 1) ,17,27); X put_buffer('Disarming : '+likert(xdis , 8) ,18,27); X put_buffer('Magic Device: '+likert(xdev , 7) ,19,27); X put_buffer('Perception : '+likert(xfos , 3) ,17,52); X put_buffer('Searching : '+likert(xsrh , 6) ,18,52); X put_buffer('Infra-Vision: '+xinfra, 19,52); X end; X`20 X`20 X`7B Used to display the character on the screen. `7D X`5Bpsect(create$code)`5D procedure display_char; X var X dummy : char; X begin X put_character; X put_misc1; X put_stats; X put_misc2; X put_misc3; X end; X`20 X`20 X`7B Gets a name for the character `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,11,24); X clear(21,1); X end; X`20 X`20 X`7B Chances the name of the character `7D X`5Bpsect(create$code)`5D procedure change_name; X var X c : char; X flag : 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 99 : get_name; X 0,3,25,26,27 : flag := true; X otherwise; X end; X until (flag); X end; X X`20 X`7B Destroy an item in the inventory `7D X`5Bpsect(misc4$code)`5D procedure inven_destroy(item_val : integer); X var X i2 : integer; X begin X inventory`5Binven_max`5D := inventory`5Bitem_val`5D; X with inventory`5Bitem_val`5D do X begin X if ((number > 1) and (subval < 512)) then X begin X number := number - 1; X inven_weight := inven_weight - weight; X inventory`5Binven_max`5D.number := 1; X end X else X begin X inven_weight := inven_weight - weight*number; X for i2 := item_val to inven_ctr-1 do X inventory`5Bi2`5D := inventory`5Bi2+1`5D; X inventory`5Binven_ctr`5D := blank_treasure; X inven_ctr := inven_ctr - 1; X end; X end X end; X`20 X`20 X`7B Drops an item from inventory to given location `7D X`5Bpsect(misc4$code)`5D procedure inven_drop(item_val,y,x : integer); X var X i1 : integer; X begin X with cave`5By,x`5D do X begin X if (tptr > 0) then pusht(tptr); X inven_destroy(item_val); X popt(i1); X t_list`5Bi1`5D := inventory`5Binven_max`5D; X tptr := i1; X end; X end; X`20 X`20 X`7B Destroys a type of item on a given percent chance `7D X`5Bpsect(misc4$code)`5D function inven_damage( X typ : obj_set; X perc : integer X ) : integer; X var X i1,i2 : integer; X begin X i2 := 0; X for i1 := 1 to inven_ctr do X with inventory`5Bi1`5D do X if (tval in typ) then X if (randint(100) < perc) then X begin X inven_destroy(i1); X i2 := i2 + 1; X end; X inven_damage := i2; X end; X `20 X`20 X`7B Check inventory for too much weight `7D X`5Bpsect(misc4$code)`5D function inven_check_weight : boolean; X var X item_wgt : integer; X begin `20 X inven_check_weight := false; X max_weight := weight_limit; X with inventory`5Binven_max`5D do X item_wgt := number*weight; X`7B Now, check to see if player can carry object `7D X if ((inven_weight + item_wgt) <= max_weight) then X inven_check_weight := true; `7B Can carry weight `7D X end; X `20 X`20 X`7B Check to see if he will be carrying too many objects `7D X`5Bpsect(misc4$code)`5D function inven_check_num : boolean; X var X item_num,i1 : integer; X flag : boolean; X begin X inven_check_num := false; X if (inven_ctr < 22) then X inven_check_num := true X else if (inventory`5Binven_max`5D.subval > 255) then X for i1 := 1 to inven_ctr do X with inventory`5Bi1`5D do X if (tval = inventory`5Binven_max`5D.tval) then X if (subval = inventory`5Binven_max`5D.subval) then X inven_check_num := true; X end; X`20 X`20 X`7B Add the item in INVEN_MAX to players inventory. Return the X item position for a description if needed... `7D X`5Bpsect(misc4$code)`5D procedure inven_carry(var item_val : integer); X var X item_num,wgt,typ,subt : integer; X flag : boolean; X`20 X`7B Insert INVEN_MAX at given location `7D X procedure insert(pos,wgt : integer); X var X i1 : integer; X begin X for i1 := inven_ctr downto pos do X inventory`5Bi1+1`5D := inventory`5Bi1`5D; X inventory`5Bpos`5D := inventory`5Binven_max`5D; X inven_ctr := inven_ctr + 1; X inven_weight := inven_weight + wgt; X end; X`20 X`7B INVEN_CARRY routine `7D X begin X`7B Now, check to see if player can carry object `7D X item_val := 0; X flag := false; X with inventory`5Binven_max`5D do X begin X item_num := number; X typ := tval; X subt := subval; X wgt := number*weight; X end; X repeat X item_val := item_val + 1; X with inventory`5Bitem_val`5D do X if (typ = tval) then X begin X if (subt = subval) then `7B Adds to other item `7D X if (subt > 255) then X begin X number := number + item_num; X inven_weight := inven_weight + wgt; X flag := true; X end; X end X else if (typ > tval) then X begin `7B Insert into list `7D X insert(item_val,wgt); X flag := true; X end; X until ((item_val >= inven_ctr) or (flag)); X if (not(flag)) then `7B Becomes last item in list `7D X begin X insert(inven_ctr+1,wgt); X item_val := inven_ctr; X end; X end; X`20 X`20 X`7B Returns spell chance of failure for spell `7D X`5Bpsect(misc2$code)`5D procedure spell_chance(var spell : spl_rec); X begin `20 X if (class`5Bpy.misc.pclass`5D.mspell) then X with mage_spell`5Bpy.misc.pclass,spell.splnum`5D do X with spell do X begin X splchn := sfail - 3*(py.misc.lev-slevel); X if (class`5Bpy.misc.pclass`5D.mspell) then X splchn := splchn - 3*(int_adj-1) X else X splchn := splchn - 3*(wis_adj-1); X if (smana > py.misc.cmana) then +-+-+-+-+-+-+-+- END OF PART 35 +-+-+-+-+-+-+-+-