-+-+-+-+-+-+-+-+ START OF PART 63 -+-+-+-+-+-+-+-+ X writeln(f1,out_rec,error:=continue); X`20 X writev(out_rec,fast:1,' ',slow:1,' ',protevil:1,' ', X teleport:1,' ',free_act:1,' ',slow_digest:1); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X`20 X writev(out_rec,aggravate:1,' ',sustain_str:1,' ', X sustain_int:1,' ',sustain_wis:1,' ',sustain_con:1,' V ', X sustain_dex:1,' ',sustain_chr:1); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X`20 X writev(out_rec,fire_resist:1,' ',cold_resist:1,' ', X acid_resist:1,' ',regenerate:1,' ',lght_resist:1,' ' V, X ffall:1,' ',confuse_monster:1); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X`20 X writev(out_rec,image:1,' ',invuln:1,' ',hero:1,' ', X shero:1,' ',blessed:1,' ',resist_heat:1,' ', X`09`09`09resist_cold:1,' ',ring_blast:1,' ',special:1,' ', X`09`09`09petrified:1,' ',diseased:1,' ',detect_inv:1,' ', X`09`09`09word_recall:1,' ',see_infra:1,' ',tim_infra:1); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X end; X`20 X for i1 := 1 to max_skills do X`09 with skill_list`5Bi1`5D do X begin X writev(out_rec,sname); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X X writev(out_rec,slevel:2,' ',smana:2,' ', X`09`09 sexp:3,' ',sfail:2,' ',learned:5); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X end; X X `7B Write the important dungeon info and floor -RAK- `7D X begin X writev(out_rec,cur_height:1,' ',cur_width:1,' ', X max_panel_rows:1,' ',max_panel_cols:1); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X`20 X `7B Save the floor `7D X tot_treasure := 0; X for i1 := 1 to cur_height do X begin X out_rec := pad(' ',' ',cur_width); X for i2 := 1 to cur_width do X begin X with cave`5Bi1,i2`5D do X begin X xfloor := fval; X if (fopen) then X xfloor := uor(xfloor,%X'10'); X if (pl) then X xfloor := uor(xfloor,%X'20'); X if (fm) then X xfloor := uor(xfloor,%X'40'); X out_rec`5Bi2`5D := chr(xfloor); X if (tptr > 0) then X tot_treasure := tot_treasure + 1; X end; X end; X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X end; X`20 X `7B Save the Treasure List `7D X writev(out_rec,tot_treasure:1); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X for i1 := 1 to cur_height do X for i2 := 1 to cur_width do X if (cave`5Bi1,i2`5D.tptr > 0) then X with t_list`5Bcave`5Bi1,i2`5D.tptr`5D do X begin X writev(out_rec,i1:1,' ',i2:1); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X`20 X writev(out_rec,tchar,name); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X`20 X writev(out_rec,damage); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X`20 X writev(out_rec,tval:1,' ',subval:1,' ',weight:1,' ', X number:1,' ',tohit:1,' ',todam:1,' ',ac:1,' ', X toac:1,' ',p1:1,' ',flags:1,' ',level:1,' ',cost:1 V); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X end; X`20 X `7B Save identified list `7D X out_rec := ''; X for i1 := 1 to max_objects do X begin X if (object_ident`5Bi1`5D) then X out_rec := out_rec + 'T' X else X out_rec := out_rec + 'F'; X end; X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X`20 X `7B Save the Monster List `7D X i1 := muptr; X tot_monsters := 0; X if (i1 > 0) then X repeat X tot_monsters := tot_monsters + 1; X with m_list`5Bi1`5D do X i1 := nptr; X until (i1 = 0); X writev(out_rec,tot_monsters:1); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X i1 := muptr; X if (i1 > 0) then X repeat X with m_list`5Bi1`5D do X begin X writev(out_rec,fy:1,' ',fx:1,' ',mptr:1,' ',hp:1, X ' ',cspeed:1,' ',csleep:1,' ',cdis:1,' ',ml:1, X ' ',confused:1,' ',cur_reprod:1); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X i1 := nptr; X end; X until (i1 = 0); X`20 X `7B Save the town level stores `7D X writev(out_rec,town_seed:12); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X for i1 := 1 to max_stores do X with store`5Bi1`5D do X begin X `7B Save items... `7D X writev(out_rec,store_ctr:1); `20 X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X for i2 := 1 to store_ctr do X with store_inven`5Bi2`5D.sitem do X begin X writev(out_rec,store_inven`5Bi2`5D.scost); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X writev(out_rec,tchar,name); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X writev(out_rec,damage); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X writev(out_rec,tval:1,' ',subval:1,' ',weight:1, X ' ',number:1,' ',tohit:1,' ',todam:1,' ', X ac:1,' ',toac:1,' ',p1:1,' ',flags:1,' ', X level:1,' ',cost:1); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X end; X X writev(out_rec,owner:1,' ',insult_cur:1,' ',store_open:1 V); X encrypt(out_rec); X writeln(f1,out_rec,error:=continue); X end; X end; X close(f1,error:=continue) X end; X if (flag) then X begin X writev(out_rec,'Character saved. `5BSave Version ', X cur_version:5:2,'`5D'); X prt(out_rec,1,1); X exit; X end; X save_char := flag; `20 X seed := get_seed; X end; X`20 X`20 X `7B Restore a saved game -RAK- & -JWT- `7 VD X`5Bpsect(save$code)`5D function get_char(fnam : vtype) : boolean; X var X tot_treasures,tot_monsters : integer; X i1,i2,i3,i4,dummy,mwk`09 : integer; X xfloor,save_seed`09 : unsigned; X save_version`09`09 : real; X in_rec,temp`09`09 : ntype; X temp_id`09`09`09 : packed array `5B1..70`5D of char; X f1`09`09`09 : text; X f2`09`09`09 : file of key_type; X dun_flag`09`09 : boolean; X`20 X X `7BStat conversion from 18(200) system to integer system. -RLG`7D X `7BKinda like converting Farenheit to Celsius`7D X function new_stat(statnum : integer) : integer; X begin X`09 if (statnum < 19) then X`09 new_stat := statnum X`09 else if (statnum < 68) then X`09 new_stat := 19 X`09 else if (statnum < 93) then X`09 new_stat := (statnum+32) div 5 X`09 else if (statnum < 108) then X`09 new_stat := (statnum-18) div 3 X`09 else if (statnum < 118) then X`09 new_stat := (statnum-48) div 2 X`09 else if (statnum < 218) then X`09 new_stat := (statnum+127) div 7 X`09 else X`09 new_stat := 50; X`09end; X X X BEGIN X dun_flag := false; X clear(1,1); X open (f1,FILE_NAME:=fnam,record_length:=1024,ERROR:=continue, X HISTORY:=OLD); X if (status(f1) <> 0) then X begin X prt('Error Opening> '+fnam,1,1); X prt('',2,1); X exit; X end; X reset(f1,ERROR:=continue); X readln(f1,in_rec); X seed := encrypt_seed2; X decrypt(in_rec); X temp := substr(in_rec,1,12); X readv(temp,save_seed); X temp := substr(in_rec,14,70); X seed := encrypt_seed1; X encrypt(temp); X for mwk := 1 to 70 do `7B-Opusii+MWK 6/27/87`7D X temp_id`5Bmwk`5D := temp`5Bmwk`5D; X priv_switch(1); 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 prt('ERROR opening file MASTER.',1,1); X exit; X end; X findk(f2,0,temp_id,eql,error:=continue); X delete(f2,error:=continue); X if (status(f2) <> 0) then `20 X data_exception; `20 X close(f2); X priv_switch(0); X seed := save_seed; X prt('Restoring Character...',1,1); X put_qio; X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,save_version); X if (save_version <> cur_version) then X begin X prt('Save file is incompatable with this version.',2,1); X writev(in_rec,' `5BSave file version ',save_version:5:2,'`5D'); X prt(in_rec,3,1); X writev(in_rec,' `5BNew Save file version ',cur_version:5:2,'`5D V'); X prt(in_rec,4,1); X if (save_version > 1.90) then X begin X prt('Attempting to update character for newer version...',5, V1); X dun_flag := true; X end X else X exit; X pause(24); X end; X`20 X readln(f1,in_rec); X decrypt(in_rec); X with py.misc do X readv(in_rec,name); X`20 X readln(f1,in_rec); X decrypt(in_rec); X with py.misc do X readv(in_rec,race); X`20 X readln(f1,in_rec); X decrypt(in_rec); X with py.misc do X readv(in_rec,sex); X`20 X readln(f1,in_rec); X decrypt(in_rec); X with py.misc do X readv(in_rec,tclass); X`20 X readln(f1,in_rec); X decrypt(in_rec); X with py.misc do X readv(in_rec,title); X`20 X for i1 := 1 to 5 do X begin X readln(f1,in_rec); X decrypt(in_rec); X py.misc.history`5Bi1`5D := in_rec; X end; X`20 X readln(f1,in_rec); X decrypt(in_rec); X with py.misc do X`09 if (save_version < 2.40) then `7B urghgh! blegga! `7D X`09 begin X`09 writeln('processing the pclass'); X readv(in_rec,char_row,char_col,pclass,prace,age,ht,wt,sc, X max_exp,exp,lev,max_lev,expfact); X`09 case pclass of X`09 2: pskill := 1; X`09 3: pskill := 3; X`09 5: pskill := 2; X`09 6: pskill := 4; X`09 7: pskill := 5; X`09 8: pskill := 6; X`09 9: pskill := 7; X`09 otherwise pskill := 0; X`09 end; X`09 end X`09 else X`09 readv(in_rec,char_row,char_col,pclass,prace,pskill,age,ht,wt,sc, X max_exp,exp,lev,max_lev,expfact); X X`09readln(f1,in_rec); X decrypt(in_rec); X with py.misc do X readv(in_rec,srh,perc,stl,bth,bthb,mana,cmana,mhp,chp,au, X ptohit,ptodam,pac,ptoac,dis_th,dis_td,dis_ac,dis_tac, X disarm,wierd,save,hitdie);`20 X X if (save_version < 2.10) then X`09 with py.misc do X`09 perc := (27 - perc)*3; X X readln(f1,in_rec); X decrypt(in_rec); X`09if (save_version < 2.30) then X readv(in_rec,inven_ctr,inven_weight,equip_ctr,dun_level, X missle_ctr,mon_tot_mult,turn,day,town_num,randes_seed) X`09else X readv(in_rec,inven_ctr,inven_weight,equip_ctr,dun_level,missle_ctr V, X`09 `09 mon_tot_mult,turn,day,town_num,defeated_badguy,randes_seed); X X`09for i1 := 1 to 400 do X`09 begin X`09 readln(f1,in_rec); X`09 decrypt(in_rec); X`09 readv(in_rec,kill_list`5Bi1`5D);`09 `20 X`09 end; X X`09 `7BRead in Bank Variables`7D X readln(f1,in_rec); X decrypt(in_rec); X`09readv(in_rec,act_bal,principal,payment_count,iod_val,iol_val, X`09`09danny_cut); X X `7B Read in the inventory records. `7D X for i1 := 1 to inven_ctr do X begin X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,inventory`5Bi1`5D.tchar,inventory`5Bi1`5D.name); X`20 X readln(f1,in_rec); X decrypt(in_rec); X readv(in_rec,inventory`5Bi1`5D.damage); X`20 X readln(f1,in_rec); X decrypt(in_rec); +-+-+-+-+-+-+-+- END OF PART 63 +-+-+-+-+-+-+-+-