-+-+-+-+-+-+-+-+ START OF PART 22 -+-+-+-+-+-+-+-+ X`7BPoison Strength`7D 2 : out_val := out_val + 'lowering strength.'; X`7BConfusion attack`7D 3 : out_val := out_val + 'confusion.'; X`7BFear attack `7D 4 : out_val := out_val + 'fear.'; X`7BFire attack `7D 5 : out_val := out_val + 'fire damage.'; X`7BAcid attack `7D 6 : out_val := out_val + 'acid damage.'; X`7BCold attack `7D 7 : out_val := out_val + 'cold damage.'; X`7BLightning attack`7D 8 : out_val := out_val + 'lightning damage.'; X`7BCorrosion attack`7D 9 : out_val := out_val + 'corrosion damage.'; X`7BBlindness attack`7D 10 : out_val := out_val + 'blindness.'; X`7BParalysis attack`7D 11 : out_val := out_val + 'paralyzation.'; X`7BSteal Money `7D 12 : out_val := out_val + 'stealing money.'; X`7BSteal Object `7D 13 : out_val := out_val + 'stealing object.'; X`7BPoison `7D 14 : out_val := out_val + 'poison damage.'; X`7BLose Dex `7D 15 : out_val := out_val + 'lose dexterity.'; X`7BLose Con `7D 16 : out_val := out_val + 'lose constitution.'; X`7BLose Int `7D 17 : out_val := out_val + 'lose intelligence.'; X`7BLose Wis `7D 18 : out_val := out_val + 'lose wisdom.'; X`7BLose Exp `7D 19 : out_val := out_val + 'lose experience.'; X`7BAggravation `7D 20 : out_val := out_val + 'aggravates monsters.'; X`7BDisenchant `7D 21 : out_val := out_val + 'disenchants objects.'; X`7BEats food `7D 22 : out_val := out_val + 'eating food.'; X`7BEats light `7D 23 : out_val := out_val + 'eating light source.'; X`7BEats charges `7D 24 : out_val := out_val + 'absorbing charges.'; X`7BVampire Bite `7D 25 : out_val := out_val + X 'losing strength and experience'; X`7BTurn to Stone `7D 26 : out_val := out_val + 'turning to stone.'; X`7BMind Flayer `7D 27 : out_val := out_val + 'sucking your brain out. V'; X`7BHell Horse`09`7D 28 : out_val := out_val + 'NightMare blindness.'; X`7BVargouille`09`7D 29 : out_val := out_val + 'draining max hit points.' V; X`7B Special `7D 99 : out_val := out_val + 'blank message.'; X otherwise out_val := out_val + '**Unknown value**'; X END; X out_val := out_val + ' (' + damstr + ')'; X writeln(file1,out_val,error:=continue); X END; X for i2 := 1 to 2 do writeln(file1,' ',error:=continue); XEND; X`7B end writing to file `7D X close(file1,error:=continue); X prt('Completed.',1,1); X END; X END X END; X`20 X`20 X`7B Print the character to a file or device `7D X`5Bpsect(misc2$code)`5D procedure file_character; X var X i1,i2,xbth,xbthb,xfos,xsrh,xstl,xdis,xsave,xdev : integer; X xinfra : vtype; X file1 : text; X out_val,filename1,prt1,prt2,new_page : vtype; X out_str,out_int,out_wis,out_dex,out_con,out_chr : stat_type; X`20 X BEGIN X prt('File name: ',1,1); X if (get_string(filename1,1,12,64)) then X BEGIN X if (length(filename1) = 0) then filename1 := 'MORIACHR.DAT'; X open(file1,filename1,error:=continue); X if (status(file1) = 0) then X BEGIN X prt('Writing character sheet...',1,1); X put_qio; X rewrite(file1,error:=continue); X new_page := chr(12); X writeln(file1,new_page,error:=continue); X cnv_stat(py.stat.cstr,out_str); X cnv_stat(py.stat.cint,out_int); X cnv_stat(py.stat.cwis,out_wis); X cnv_stat(py.stat.cdex,out_dex); X cnv_stat(py.stat.ccon,out_con); X cnv_stat(py.stat.cchr,out_chr); X writeln(file1,' ',error:=continue); X writeln(file1,' ',error:=continue); X writeln(file1,' ',error:=continue); Xwrite(file1, ' Name :',pad(py.misc.name,' ',25),error:=continue); Xwrite(file1, ' Age :',py.misc.age:4,error:=continue); Xwriteln(file1,' Strength :',out_str:6,error:=continue); Xwrite(file1, ' Race :',pad(py.misc.race,' ',25),error:=continue); Xwrite(file1, ' Height :',py.misc.ht:4,error:=continue); Xwriteln(file1,' Intelligence :',out_int:6,error:=continue); Xwrite(file1, ' Sex :',pad(py.misc.sex,' ',25),error:=continue); Xwrite(file1, ' Weight :',py.misc.wt:4,error:=continue); Xwriteln(file1,' Wisdom :',out_wis:6,error:=continue); Xwrite(file1, ' Class :',pad(py.misc.tclass,' ',25),error:=continue); Xwrite(file1, ' Social Class:',py.misc.sc:4,error:=continue); Xwriteln(file1,' Dexterity :',out_dex:6,error:=continue); Xwrite(file1, ' Title :',pad(py.misc.title,' ',25),error:=continue); Xwrite(file1, ' ',' ',error:=continue); Xwriteln(file1,' Constitution :',out_con:6,error:=continue); Xwrite(file1, ' ',' ':30,error:=continue); Xwrite(file1, ' ',error:=continue); Xwriteln(file1,' Charisma :',out_chr:6,error:=continue); X writeln(file1,' ',error:=continue); X writeln(file1,' ',error:=continue); X writeln(file1,' ',error:=continue); X writeln(file1,' ',error:=continue); Xwrite(file1, ' + To Hit :',py.misc.dis_th:6,error:=continue); Xwrite(file1, ' Level :',py.misc.lev:6,error:=continue); Xwriteln(file1,' Max Hit Points :',py.misc.mhp:6,error:=continue); Xwrite(file1, ' + To Damage :',py.misc.dis_td:6,error:=continue); Xwrite(file1, ' Experience :',py.misc.exp:6,error:=continue); Xwriteln(file1,' Cur Hit Points :',trunc(py.misc.chp):6,error:=continue); Xwrite(file1, ' + To AC :',py.misc.dis_tac:6,error:=continue); Xwrite(file1, ' Gold :',py.misc.au:6,error:=continue); Xwriteln(file1,' Max Mana :',py.misc.mana:6,error:=continue); Xwrite(file1, ' Total AC :',py.misc.dis_ac:6,error:=continue); Xwrite(file1, ' ',error:=continue); Xwriteln(file1,' Current Mana :',py.misc.mana:6,error:=continue); X`20 X writeln(file1,' ',error:=continue); X writeln(file1,' ',error:=continue); 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; Xwriteln(file1,'(Miscellaneous Abilities)':40,error:=continue); Xwriteln(file1,' ',error:=continue); Xwrite(file1, ' Fighting : ',pad(likert(xbth ,12),' ',10),error:=continu Ve); Xwrite(file1, ' Stealth : ',pad(likert(xstl , 1),' ',10),error:=continu Ve); Xwriteln(file1,' Perception : ',pad(likert(xfos , 3),' ',10),error:=continu Ve); Xwrite(file1, ' Throw/Bows : ',pad(likert(xbthb,12),' ',10),error:=continu Ve); Xwrite(file1, ' Disarming : ',pad(likert(xdis , 8),' ',10),error:=continu Ve); Xwriteln(file1,' Searching : ',pad(likert(xsrh , 6),' ',10),error:=continu Ve); Xwrite(file1, ' Saving Throw: ',pad(likert(xsave, 6),' ',10),error:=continu Ve); Xwrite(file1, ' Magic Device: ',pad(likert(xdev , 7),' ',10),error:=continu Ve); Xwriteln(file1,' Infra-Vision: ',pad(xinfra,' ',10),error:=continue); X`7B Write out the character's history `7D Xwriteln(file1,' '); Xwriteln(file1,' '); Xwriteln(file1,'Character Background':45); Xfor i1 := 1 to 5 do writeln(file1,pad(py.misc.history`5Bi1`5D,' ',71):76); X`7B Write out the equipment list.`7D X i2 := 0; X writeln(file1,' ',error:=continue); X writeln(file1,' ',error:=continue); X writeln(file1,' `5BCharacter''s Equipment List`5D',error:=con Vtinue); X writeln(file1,' ',error:=continue); Xif (equip_ctr = 0) then X writeln(file1,' Character has no equipment in use.',error:=continue) Xelse X for i1 := 23 to inven_max-1 do X with inventory`5Bi1`5D do X if (tval > 0) then X BEGIN X CASE i1 of X 23 : prt1 := ') You are wielding : '; X 24 : prt1 := ') Worn on head : '; X 25 : prt1 := ') Worn around neck : '; X 26 : prt1 := ') Worn on body : '; X 27 : prt1 := ') Worn on shield arm : '; X 28 : prt1 := ') Worn on hands : '; X 29 : prt1 := ') Right ring finger : '; X 30 : prt1 := ') Left ring finger : '; X 31 : prt1 := ') Worn on feet : '; X 32 : prt1 := ') Worn about body : '; X 33 : prt1 := ') Light source is : '; X 34 : prt1 := ') Secondary weapon : '; X otherwise prt1 := ') *Unknown value* : '; X END; X i2 := i2 + 1; X objdes(prt2,i1,true); X writev(out_val,' ',chr(i2+96),prt1,prt2); X writeln(file1,out_val,error:=continue); X END; X`7B Write out the character's inventory.`7D X writeln(file1,new_page,error:=continue); X writeln(file1,' ',error:=continue); X writeln(file1,' ',error:=continue); X writeln(file1,' ',error:=continue); X writeln(file1,' `5BGeneral Inventory List`5D',error:=continue V); X writeln(file1,' ',error:=continue); Xif (inven_ctr = 0) then X writeln(file1,' Character has no objects in inventory.',error:=continue) Xelse X BEGIN X for i1 := 1 to inven_ctr do X BEGIN X objdes(prt1,i1,true); X writev(out_val,chr(i1+96),') ',prt1); X writeln(file1,out_val,error:=continue); X END X END; X writeln(file1,new_page,error:=continue); X close(file1,error:=continue); X prt('Completed.',1,1); X END; X END X END; $ CALL UNPACK [.SOURCE.INCLUDE]FILES.INC;1 2030814496 $ create 'f' X X`7B Generates a random dungeon level `7D X`5Bpsect(generate$code)`5D procedure generate_cave; X type X coords = record X y : integer; X x : integer; X END; X var X doorstk : array `5B1..100`5D of coords; X doorptr : integer; X`20 X`20 X`7B Always picks a correct direction `7D X procedure correct_dir(var rdir,cdir : integer; y1,x1,y2,x2 : integer); X var X test_dir : integer; X BEGIN X if (y1 < y2) then X rdir := 1 X else if (y1 = y2) then X rdir := 0 X else X rdir := -1; X if (x1 < x2) then X cdir := 1 X else if (x1 = x2) then X cdir := 0 X else X cdir := -1; X if ((rdir <> 0) and (cdir <> 0)) then X CASE randint(2) of X 1 : rdir := 0; X 2 : cdir := 0 X END X END; X`20 X`20 X`7B Chance of wandering direction `7D X procedure rand_dir(var rdir,cdir : integer; X y1,x1,y2,x2,chance : integer); X BEGIN X CASE randint(chance) of X 1 : BEGIN X rdir := -1; X cdir := 0 X END; X 2 : BEGIN X rdir := 1; X cdir := 0 X END; X 3 : BEGIN X rdir := 0; X cdir := -1 X END; X 4 : BEGIN X rdir := 0; X cdir := 1 X END; X otherwise correct_dir(rdir,cdir,y1,x1,y2,x2) X END X END; X`20 X `7B Fills in empty spots with desired rock`20 X Note: 9 is a temporary value. `7D X procedure fill_cave(fill : floor_type); X var X i1,i2 : integer; X BEGIN X for i1 := 2 to cur_height-1 do X for i2 := 2 to cur_width-1 do X with cave`5Bi1,i2`5D do X if (fval in `5B0,8,9`5D) then X BEGIN X fval := fill.ftval; X fopen := fill.ftopen; X END; X END; X`20 X`20 X`7B Places "streamers" of rock through dungeon `7D X procedure place_streamer(rock : floor_type; treas_chance : integer); X var X i1,y,x,dir,ty,tx,t1,t2 : integer; X flag : boolean; X BEGIN X`20 X`7B Choose starting point and direction `7D X y := trunc(cur_height/2.0) + 11 - randint(23); X x := trunc(cur_width/2.0) + 16 - randint(33); X`20 X dir := randint(8); `7B Number 1-4, 6-9 `7D X if (dir > 4) then dir := dir + 1; X`20 X`7B Place streamer into dungeon `7D X flag := false; `7B Set to true when y,x are out-of-bounds`7D X t1 := 2*dun_str_rng + 1; `7B Constants `7D X t2 := dun_str_rng + 1; X repeat X for i1 := 1 to dun_str_den do X BEGIN X ty := y + randint(t1) - t2; X tx := x + randint(t1) - t2; X if (in_bounds(ty,tx)) then X with cave`5Bty,tx`5D do X if (fval = rock_wall1.ftval) then X BEGIN X fval := rock.ftval; X fopen := rock.ftopen; X if (randint(treas_chance) = 1) then X place_gold(ty,tx); X END; X END; X if (not(move(dir,y,x))) then flag := true; X until(flag); `20 X END; X`20 X`20 X`7B Place a trap with a given displacement of point `7D X procedure vault_trap(y,x,yd,xd,num : integer); X var X count,y1,x1,i1 : integer; X flag : boolean; X BEGIN X for i1 := 1 to num do X BEGIN X flag := false; X count := 0; X repeat X y1 := y - yd - 1 + randint(2*yd+1); X x1 := x - xd - 1 + randint(2*xd+1); X with cave`5By1,x1`5D do X if (fval in floor_set) then X if (tptr = 0) then +-+-+-+-+-+-+-+- END OF PART 22 +-+-+-+-+-+-+-+-