-+-+-+-+-+-+-+-+ START OF PART 64 -+-+-+-+-+-+-+-+ X with inventory`5Bi1`5D do X readv(in_rec,tval,subval,weight,number,tohit,todam,ac, X toac,p1,flags,level,cost); X end; X`20 X `7B Read in the equipment records. `7D X for i1 := 23 to equip_max do X begin X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,equipment`5Bi1`5D.tchar,equipment`5Bi1`5D.name); X`20 X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,equipment`5Bi1`5D.damage); X`20 X readln(f1,in_rec); X decrypt(in_rec); X with equipment`5Bi1`5D do X readv(in_rec,tval,subval,weight,number,tohit,todam,ac, X toac,p1,flags,level,cost); X end; X`20 X readln(f1,in_rec); X decrypt(in_rec); X with py.stat do X readv(in_rec,str,cstr,dex,cdex,con,ccon,int,cint,wis,cwis,chr,cchr V); X`20 X`09if (save_version < 2.00) then `7BNew stat conversion.`7D X`09 with py.stat do X`09 begin X`09 str := new_stat( str); X`09 cstr := new_stat(cstr); X`09 int := new_stat( int); X`09 cint := new_stat(cint); X `09 wis := new_stat( wis); X`09 cwis := new_stat(cwis); X`09 dex := new_stat( dex); X`09 cdex := new_stat(cdex); X`09 con := new_stat( con); X`09 ccon := new_stat(ccon); X`09 chr := new_stat( chr); X`09 cchr := new_stat(cchr); X `09 end; X`20 X with py.flags do X begin X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,status,blind,confused,food,food_digested,protection V, X speed,afraid,poisoned,see_inv); X`20 X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,fast,slow,protevil,teleport,free_act,slow_digest); X`20 X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,aggravate,sustain_str,sustain_int,sustain_wis, X sustain_con,sustain_dex,sustain_chr); X`20 X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,fire_resist,cold_resist,acid_resist,regenerate, X lght_resist,ffall,confuse_monster); X`20 X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,image,invuln,hero,shero,blessed,resist_heat, X resist_cold,ring_blast,special,petrified,diseased, X`09 `09`09 detect_inv,word_recall,see_infra,tim_infra); X end; X`20 X `09 if (save_version < 2.40) then `7B grumble, grumble... `7D X`09 with py.misc do X`09 begin X`09 writeln('about to get skill data'); X`09 get_skill_data(pskill); `7B loc. datafiles.inc `7D X`09 writeln('part one'); X for i1 := 1 to 33 do X begin X readln(f1,in_rec); X `09 `09 if (pskill in `5B1,2,7`5D) then X`09`09 with skill_list`5Bi1`5D do X`09`09 begin X decrypt(in_rec); X readv(in_rec,learned,sexp); X`09`09`09 writeln(sexp); X`09`09 end; X end; X`09 writeln('part two'); X for i1 := 1 to 32 do X begin X readln(f1,in_rec); X`09`09 if (pskill in `5B3,4`5D) then X`09`09 with skill_list`5Bi1`5D do X`09`09 begin X decrypt(in_rec); X readv(in_rec,learned,sexp); X`09`09`09 writeln(sexp); X`09`09 end; X end; X`09 writeln('part three'); X for i1 := 1 to 31 do X begin X readln(f1,in_rec); X`09`09 if (pskill in `5B5,6`5D) then X`09`09 with skill_list`5Bi1`5D do X`09`09 begin X decrypt(in_rec); X readv(in_rec,learned,sexp); X`09`09 end; X end; X`09 writeln('all done...'); X`09 end X else X`09 for i1 := 1 to max_skills do X`09 with skill_list`5Bi1`5D do X`09 begin X`09 readln(f1,in_rec); X`09 decrypt(in_rec); X`09 readv(in_rec,sname); X`09`09readln(f1,in_rec); X`09`09decrypt(in_rec); X`09`09readv(in_rec, slevel,smana,sexp,sfail,learned);`20 X`09 end; X X X `7B Read the important dungeon info and floor `7D X`09 writeln('dung info'); X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,cur_height,cur_width,max_panel_rows,max_panel_cols) V; X`20 X `7B Restore the floor `7D X`09 writeln('floor part'); X for i1 := 1 to cur_height do X begin X readln(f1,in_rec); X decrypt(in_rec); X for i2 := 1 to cur_width do X begin X xfloor := ord(in_rec`5Bi2`5D); X with cave`5Bi1,i2`5D do X begin X fval := int(uand(%X'0F',xfloor)); X if (uand(%X'10',xfloor) <> 0) then X fopen := true; X if (uand(%X'20',xfloor) <> 0) then X pl := true; X if (uand(%X'40',xfloor) <> 0) then X fm := true; X tl := false; X tptr := 0; X cptr := 0; X end; X end; X end; X`20 X `7B Restore the Treasure List `7D X tlink; X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,tot_treasures); X for i1 := 1 to tot_treasures do X begin X popt(i2); X with t_list`5Bi2`5D do X begin X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,i3,i4); X cave`5Bi3,i4`5D.tptr := i2; X`20 X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,tchar,name); X`20 X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,damage); X`20 X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,tval,subval,weight,number,tohit,todam,ac,to Vac, X p1,flags,level,cost); X end; X end; X`20 X `7B Re-identify objects `7D X readln(f1,in_rec); X decrypt(in_rec); X for i1 := 1 to max_objects do X if (in_rec`5Bi1`5D = 'T') then X identify(object_list`5Bi1`5D) X else X object_ident`5Bi1`5D := false; X`20 X `7B Restore the Monster List `7D X mlink; X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,tot_monsters); X i3 := 0; X for i1 := 1 to tot_monsters do X begin X readln(f1,in_rec); X decrypt(in_rec); X popm(i2); X with m_list`5Bi2`5D do X begin X`09`09 if (save_version < 2.20) then X`09`09 begin X readv(in_rec,fy,fx,mptr,hp,cspeed, X`09 `09 `09`09 csleep,cdis,ml,confused); X`09 if(uand(%X'00200000',c_list`5Bmptr`5D.cmove) <> 0) then X`09`09`09 cur_reprod := 10; X`09`09 end X`09`09 else X readv(in_rec,fy,fx,mptr,hp,cspeed, X`09`09 `09 `09 csleep,cdis,ml,confused,cur_reprod); X cave`5Bfy,fx`5D.cptr := i2; X if (muptr = 0) then X muptr := i2 X else X m_list`5Bi3`5D.nptr := i2; X nptr := 0; X i3 := i2; X end; X end; X`20 X `7B Restore the town level stores `7D X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,town_seed); X for i1 := 1 to max_stores do X with store`5Bi1`5D do X begin X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,i2); X store_ctr := i2; X for i3 := 1 to i2 do X with store_inven`5Bi3`5D.sitem do X begin X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,store_inven`5Bi3`5D.scost); X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,tchar,name); X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,damage); X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,tval,subval,weight,number,tohit,todam, X ac,toac,p1,flags,level,cost); X end; X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,owner,insult_cur,store_open); X end; X close(f1,error:=continue); X X `7BShould the save file be deleted when the character is restored?`7D X `7Bopen (f1,file_name:=fnam, X record_length:=1024,history:=old,disposition:=delete, X error:=continue); X close(f1,error:=continue);`7D X X seed := get_seed; X get_char:=dun_flag; `7BIf get_char is true, then moria_flag is set V true`7D X`09if (dun_flag) then X`09 begin X`09 store_init; X`09 store_maint; X`09 end; X`09if (day >= day_limit) then`20 X`09 out_of_time := true; X END; X`20 X`20 X `7B Wizard command for restoring character -RAK- `7 VD X`5Bpsect(save$code)`5D procedure restore_char; X var X i1 : integer; X fnam : vtype; X in_rec,temp : ntype; X temp_id : packed array `5B1..70`5D o Vf char; X f1 : text; X f2 : file of key_type; X flag : boolean; X`20 X BEGIN X prt('Name of file to be restored: ',1,1); X if (get_string(fnam,1,30,48)) then X begin X priv_switch(1); X open (f1,file_name:=fnam, X record_length:=1024,history:=old,error:=continue); X if (status(f1) <> 0) then X msg_print('Error Opening> '+fnam) X else X begin X flag := true; X open (f2,file_name:=boss_mas, X access_method:=keyed,organization:=indexed, X history:=old,sharing:=readwrite,error:=continue); X if (status(f2) <> 0) then X begin X open (f2,file_name:=boss_mas, X access_method:=keyed,organization:=indexed, X history:=new,sharing:=readwrite,error:=continue); X if (status(f2) <> 0) then X begin X msg_print('MASTER could not be opened.'); X flag := false; X end; X end; X if (flag) then X begin X reset(f1,error:=continue); X readln(f1,in_rec,error:=continue); X seed := encrypt_seed2; X decrypt(in_rec); X temp := substr(in_rec,14,70); X seed := encrypt_seed1; X encrypt(temp); X for i1 := 1 to 70 do X key_rec.file_id`5Bi1`5D := temp`5Bi1`5D; X temp_id := ' '; X findk(f2,0,temp_id,eql,error:=continue); X delete(f2,error:=continue); X f2`5E := key_rec; X put(f2,error:=continue); X if (status(f2) = 0) then X msg_print('Character restored...') X else X msg_print('Could not write ID in MASTER.'); X end; X close(f1,error:=continue); X close(f2,error:=continue); X end; X seed := get_seed; X priv_switch(0); X end; X END; $ CALL UNPACK [.INC]SAVE.INC;1 673919835 $ create 'f' X `7BFollowing are skill procedure/functions X These routines are commonly used in the scroll, potion, wands, and X staves routines, and are occassionly called from other areas. X Now included are creature spells also. X`20 X Sleep creatures within radius from player, X combining sleep II and sleep III spells - mwk,opusii 6/28/87`7D X`5Bpsect(misc6$code)`5D function sleep_monsters2_3(y,x,rad : integer) : bool Vean; X VAR X i1,i2,mk1,mk2,mk3,mk4: integer; X BEGIN X sleep_monsters2_3 := false; X mk1:=y-rad; mk2:=y+rad; mk3:=x-rad; mk4:=x+rad; X if (mk1 < 1) then mk1:=1; X if (mk2 > max_height) then mk2:= max_height; X if (mk3 < 1) then mk3:=1; X if (mk4 > max_width) then mk4:=max_width; `7Bstay inbounds`7D X for i1 := mk1 to mk2 do `7Blast statement of procedure`7D X for i2 := mk3 to mk4 do X with cave`5Bi1,i2`5D do `20 X if (cptr > 1) then X`09 with m_list`5Bcptr`5D, c_list`5Bmptr`5D do X if (ml) then `7Bvisible`7D X`7Bcan(will) be slept`7D if (uand(%X'1000',cdefense) = 0) then X BEGIN X if ( rad > 5 ) then X prt('',1,1) `7Blet them guess for sleep III`7D X else X msg_print('The ' + name + ' snoozes for a while. V'); X sleep_monsters2_3 := true; +-+-+-+-+-+-+-+- END OF PART 64 +-+-+-+-+-+-+-+-