-+-+-+-+-+-+-+-+ START OF PART 71 -+-+-+-+-+-+-+-+ X`09 flag := true; X`09 if (is_from_file) then X`09 open(f1,file_name:=finam,record_length:=1024,history:=old, X`09`09 error:=continue) X`09 else X`09 open(f1,file_name:=finam,record_length:=1024,history:=new, X`09`09 error:=continue); X`09 end X`09else X`09 begin X`09 prt('Enter Filename:',1,1); X`09 flag := false; X`09 `7B Open the user's save file -JWT- `7D X`09 if (get_string(fnam,1,17,60)) then X`09 begin X`09 if (length(fnam) = 0) then fnam := finam; X`09 if (is_from_file) and (fnam = finam) then X`09`09 open (f1,FILE_NAME:=fnam,record_length:=1024,history:=old, X`09`09`09`09ERROR:=continue) X`09`09else X`09`09 open (f1,FILE_NAME:=fnam,record_length:=1024,history:=new, X`09`09`09`09ERROR:=continue); X`09 if (status(f1) <> 0) then X`09 msg_print('Error creating> ' + fnam) X`09 else X`09 flag := true; X`09 end; X`09 end; X`09delete_file(fnam); X`09`7B Make an attempt to open the MASTER file -JWT- `7D X`09if (flag) then X`09 begin X`09 rewrite(f1,error:=continue); X`09 priv_switch(1); X`09 open (f2,file_name:=moria_mas, X`09`09 error:=continue,access_method:=keyed,organization:=indexed, X`09`09 history:=old,sharing:=readwrite); X`09 if (status(f2) <> 0) then X`09 begin X`09`09priv_switch(0); X`09`09open (f2,file_name:=moria_mas, X`09`09`09error:=continue,access_method:=keyed, X`09`09`09organization:=indexed,history:=new,sharing:=readwrite); X`09 end; X`09 if (status(f2) <> 0) then X`09`09begin X`09`09 msg_print('Error saving character, contact MORIA Wizard.'); X`09`09 close(f1,error:=continue); X`09`09 flag := false; X`09`09end; X`09 end; X`09`7B Write social security number to MASTER`09`09-KRC-`09`7D X`09if (flag) then X`09 begin X`09 spot := ord(py.misc.ssn`5B70`5D); X`09 trys := 1; X`09 file_flag := false; X`09 repeat X`09 if (spot < 32) or (spot > 116) then spot := 32; X`09 py.misc.ssn`5B70`5D := chr(spot+trys); X`09 title1 := py.misc.ssn; X`09 seed := encrypt_seed1; X`09 coder(title1); X`09 for i1 := 1 to 70 do X`09`09key_rec.file_id`5Bi1`5D := title1`5Bi1`5D; X`09 f2`5E := key_rec; X`09 put(f2,error:=continue); X`09 if (status(f2) <> 0) then X`09`09begin X`09`09 trys := trys + 1; X`09`09 if (trys > 10) then X`09`09 begin X`09`09 file_flag := true; X`09`09 flag := false; X`09`09 msg_print('Error in writing to MASTER.'); X`09`09 end; X`09`09end X`09 else X`09`09file_flag := true; X`09 until(file_flag); X`09 close(f2,error:=continue); X`09 priv_switch(0); X`09 end; X`09`7B If ID was written to MASTER, continue saving -RAK- `7D X`09if (flag) then X`09 begin X`09 save_seed := get_seed; X`09 writev(title2,save_seed:12,' ',py.misc.ssn); X`09 seed := encrypt_seed2; X`09 encrypt_write(title2); X`09 seed := save_seed; X`09`09`7B Message to player on what is happening`7D X`09 if not py.flags.dead then X`09 begin X`09`09clear(1,1); X`09 if not(quick) then put_qio X`09`09 else fnam := finam; X`09`09prt('Saving character in '+fnam+'...',1,1); X`09 end; X`09`09`7B Version number of Moria `7D X`09 writev(out_rec,cur_version); X`09 encrypt_write(out_rec); X`09`09`7B Write out the player record.`09`7D X`09 with py.misc do `20 X`09 begin X`09`09writev(out_rec,xtr_wgt:1,' ',account:1,' ',money`5B0`5D:1,' ', Xmoney`5B6`5D:1,' ',money`5B5`5D:1,' ',money`5B4`5D:1,' ',money`5B3`5D:1,' ', Vmoney`5B2`5D:1,' ', Xmoney`5B1`5D:1,' ',diffic:1); X`09`09encrypt_write(out_rec); X X`09`09with py.misc.birth do X`09`09 writev(out_rec,year:1,' ',month:1,' ',day:1,' ',hour:1,' ', X`09`09`09`09 secs:1); X`09`09encrypt_write(out_rec); X X`09`09with py.misc.cur_age do X`09`09 writev(out_rec,year:1,' ',month:1,' ',day:1,' ',hour:1,' ', X`09`09`09`09 secs:1); X`09`09encrypt_write(out_rec); X X`7BFUBAR modification for quests`7D X`09`09writev(out_rec,py.flags.quested,' ',py.misc.cur_quest:1,' ', Xpy.misc.quests:1); X`09`09encrypt_write(out_rec); X X`09`09sys$gettim(current_time); X`09`09sub_quadtime(current_time,start_time,delta_time); X`09`09sys$numtim(tim,delta_time); X`09`09add_play_time(tim,py.misc.play_tm); X`09`09with tim do X`09`09 writev(out_rec,years:1,' ',months:1,' ',days:1,' ',hours:1, X`09`09`09`09 ' ',minutes:1,' ',seconds:1,' ',hundredths:1); X`09`09encrypt_write(out_rec); X X`09`09writev(out_rec,name); X`09`09encrypt_write(out_rec); X X`09`09writev(out_rec,race); X`09`09encrypt_write(out_rec); X X`09`09writev(out_rec,sex); X`09`09encrypt_write(out_rec); X X`09`09writev(out_rec,tclass); X`09`09encrypt_write(out_rec); X X`09`09writev(out_rec,title); X`09`09encrypt_write(out_rec); X X`09`09for i1 := 1 to 5 do X`09`09 begin X`09`09 out_rec := history`5Bi1`5D; X`09`09 encrypt_write(out_rec); X`09`09 end; X X`09`09writev(out_rec,cheated); X`09`09encrypt_write(out_rec); X X`09`09writev(out_rec,char_row:1,' ',char_col:1,' ', X`09`09 pclass:1,' ',prace:1,' ', X`09`09 age:1,' ',ht:1,' ',wt:1,' ',sc:1,' ',max_exp:1,' ', X`09`09 exp:1,' ',rep:1,' ',deaths:1,' ',premium:1,' ',lev:1,' ', X`09`09 max_lev:1,' ',expfact:2:1); X`09`09encrypt_write(out_rec); X X`09`09writev(out_rec,srh:1,' ',fos:1,' ',stl:1,' ',bth:1,' ', X`09`09 bthb:1,' ', X`09`09 mana:1,' ',cmana:1,' ',mhp:1,' ',chp:1:1,' ', X`09`09 ptohit:1,' ',ptodam:1,' ',pac:1,' ',ptoac:1,' ', X`09`09 dis_th:1,' ',dis_td:1,' ',dis_ac:1,' ',dis_tac:1,' ', X`09`09 disarm:1,' ',save:1,' ',hitdie:1); X`09`09encrypt_write(out_rec); X X `7Bchange by Dean--inven_ctr calculated from scratch to X (hopefully) solve some of the get-after-EOF save bugs`7D X`09`09inven_ctr:=0; X`09`09curse:=inventory_list; X`09`09while (curse<>nil) do X`09`09 begin X`09`09 curse := curse`5E.next; X`09`09 inven_ctr := inven_ctr + 1; X`09`09 end; X`09`09writev(out_rec,inven_ctr:1,' ', X`09`09 inven_weight:1,' ',equip_ctr:1,' ',dun_level:1,' ', X`09`09 missle_ctr:1,' ',mon_tot_mult:1,' ',uand(%X'F',turn):1, X`09`09 ' ',randes_seed:12); X`09`09encrypt_write(out_rec); X`09 end; X X`09 with py.flags do X`09 begin X`09`09writev(out_rec,insured:1,' ',dead:1); X`09`09encrypt_write(out_rec); X`09 end; X X`09`09`7B Write out the inventory records.`09`7D X`09 curse := inventory_list; X`09 while (curse <> nil) do X`09 begin X`09`09writev(out_rec,curse`5E.data.tchar,curse`5E.data.name); X`09`09encrypt_write(out_rec); X X`09`09writev(out_rec,curse`5E.is_in:1,curse`5E.insides:1); X`09`09encrypt_write(out_rec); X X`09`09writev(out_rec,curse`5E.data.damage); X`09`09encrypt_write(out_rec); X X`09`09with curse`5E.data do X`09`09 writev(out_rec,tval:1,' ',subval:1,' ',weight:1,' ', X`09`09`09number:1,' ',tohit:1,' ',todam:1,' ',ac:1,' ', X`09`09`09toac:1,' ',p1:1,' ',flags:1,' ',flags2:1,' ', X`09`09`09level:1,' ',cost:1); X`09`09encrypt_write(out_rec); X`09`09curse := curse`5E.next; X`09 end; X X`09`09`7B Write out the equipment records.`09`7D X`09 for i1 := Equipment_min to equip_max-1 do X`09 begin X`09`09writev(out_rec,equipment`5Bi1`5D.tchar,equipment`5Bi1`5D.name); X`09`09encrypt_write(out_rec); X X`09`09writev(out_rec,equipment`5Bi1`5D.damage); X`09`09encrypt_write(out_rec); X`09`09with equipment`5Bi1`5D do X`09`09 writev(out_rec,tval:1,' ',subval:1,' ',weight:1,' ', X`09`09`09number:1,' ',tohit:1,' ',todam:1,' ',ac:1,' ', X`09`09`09toac:1,' ',p1:1,' ',flags:1,' ',flags2:1,' ', X`09`09`09level:1,' ',cost:1); X`09`09encrypt_write(out_rec); X`09 end; X`09 X`09 with py.stat do X`09`09begin X X`09`09 writev(out_rec,p`5Bsr`5D:1,' ',c`5Bsr`5D:1,' ',m`5Bsr`5D:1,' ',l`5Bs Vr`5D:1, X`09`09`09' ',p`5Biq`5D:1,' ',c`5Biq`5D:1,' ',m`5Biq`5D:1,' ',l`5Biq`5D:1, X`09`09`09' ',p`5Bws`5D:1,' ',c`5Bws`5D:1,' ',m`5Bws`5D:1,' ',l`5Bws`5D:1, X`09`09`09' ',p`5Bdx`5D:1,' ',c`5Bdx`5D:1,' ',m`5Bdx`5D:1,' ',l`5Bdx`5D:1, X`09`09`09' ',p`5Bcn`5D:1,' ',c`5Bcn`5D:1,' ',m`5Bcn`5D:1,' ',l`5Bcn`5D:1, X`09`09`09' ',p`5Bca`5D:1,' ',c`5Bca`5D:1,' ',m`5Bca`5D:1,' ',l`5Bca`5D:1); X`09`09encrypt_write(out_rec); X`09 end; X X`09 with py.flags do X`09 begin X`09`09writev(out_rec,status:1,' ',blind:1,' ',confused:1,' ', X`09`09`09food:1,' ',food_digested:1,' ',protection:1,' ', X`09`09`09speed:1,' ',afraid:1,' ', X`09`09`09poisoned:1,' ',see_inv:1); X`09`09encrypt_write(out_rec); X X`09`09writev(out_rec,fast:1,' ',slow:1,' ',protevil:1,' ', X`09`09`09teleport:1,' ',free_act:1,' ',slow_digest:1,' ', X`09`09`09petrification:1); X`09`09encrypt_write(out_rec); X X`09`09writev(out_rec,aggravate:1,' ',sustain`5Bsr`5D:1,' ', X`09`09`09sustain`5Biq`5D:1,' ',sustain`5Bws`5D:1,' ',sustain`5Bcn`5D:1, X`09`09`09' ',sustain`5Bdx`5D:1,' ',sustain`5Bca`5D:1); X`09`09encrypt_write(out_rec); X X`09`09writev(out_rec,fire_resist:1,' ',cold_resist:1,' ', X`09`09`09acid_resist:1,' ',regenerate:1,' ',lght_resist:1,' ', X`09`09`09ffall:1,' ',confuse_monster:1); X`09`09encrypt_write(out_rec); X X`09`09writev(out_rec,image:1,' ',invuln:1,' ',hero:1,' ', X`09`09`09shero:1,' ',blessed:1,' ', X`09`09`09resist_heat:1,' ',resist_cold:1,' ',detect_inv:1,' ', X`09`09`09word_recall:1,' ',see_infra:1,' ',tim_infra:1); X`09`09encrypt_write(out_rec); X X`09`09writev(out_rec,resist_lght:1,' ',free_time:1,' ',ring_fire:1, X`09`09`09' ',protmon:1,' ',hoarse:1,' ',magic_prot:1,' ', X`09`09`09ring_ice:1,' ',temp_stealth:1,' ',resist_petri:1,' ', X`09`09`09blade_ring:1); X`09`09encrypt_write(out_rec); X`09 end; X X`09 for i1 := 1 to max_spells do X`09 with magic_spell`5Bpy.misc.pclass,i1`5D do X`09`09begin X`09`09 writev(out_rec,learned:5,' ',sexp:5); X`09`09 encrypt_write(out_rec); X`09`09end; X X`09`09`7B Write the important dungeon info and floor`09-RAK-`09`7D X`09 begin X`09 writev(out_rec,cur_height:1,' ',cur_width:1,' ', X`09`09max_panel_rows:1,' ',max_panel_cols:1); X`09 encrypt_write(out_rec); X X`09`09`7B Save the floor`09`7D X`09 tot_treasure := 0; X`09 for i1 := 1 to cur_height do X`09`09begin X`09`09 out_rec := pad(' ',' ',cur_width); X`09`09 for i2 := 1 to cur_width do X`09`09 begin X`09`09 with cave`5Bi1,i2`5D do X`09`09`09begin X`09`09`09 xfloor := fval; X`09`09`09 if (fopen) then X`09`09`09 xfloor := uor(xfloor,%X'20'); X`09`09`09 if (pl) then X`09`09`09 xfloor := uor(xfloor,%X'40'); X`09`09`09 if (fm) then X`09`09`09 xfloor := uor(xfloor,%X'80'); X`09`09`09 out_rec`5Bi2`5D := chr(xfloor); X`09`09`09 if (tptr > 0) then X`09`09`09 tot_treasure := tot_treasure + 1; X`09`09`09end; X`09`09 end; X`09`09 encrypt_write(out_rec); X`09`09end; X X`09`09`7B Save the Treasure List`09`09`7D X`09 writev(out_rec,tot_treasure:1); X`09 encrypt_write(out_rec); X`09 for i1 := 1 to cur_height do X`09`09for i2 := 1 to cur_width do X`09`09 if (cave`5Bi1,i2`5D.tptr > 0) then X`09`09 with t_list`5Bcave`5Bi1,i2`5D.tptr`5D do X`09`09 begin X`09`09`09writev(out_rec,i1:1,' ',i2:1); X`09`09`09encrypt_write(out_rec); X X`09`09`09writev(out_rec,tchar,name); X`09`09`09encrypt_write(out_rec); X X`09`09`09writev(out_rec,damage); X`09`09`09encrypt_write(out_rec); X X`09`09`09writev(out_rec,tval:1,' ',subval:1,' ',weight:1,' ', X`09`09`09 number:1,' ',tohit:1,' ',todam:1,' ',ac:1,' ', X`09`09`09 toac:1,' ',p1:1,' ',flags:1,' ',flags2:1,' ', X`09`09`09 level:1,' ',cost:1); X`09`09`09encrypt_write(out_rec); X`09`09 end; X X`09`09`7B Save identified list`09`09`09`7D X`09 out_rec := ''; X`09 for i1 := 1 to max_objects do X`09`09begin X`09`09 if (object_ident`5Bi1`5D) then X`09`09 out_rec := out_rec + 'T' X`09`09 else X`09`09 out_rec := out_rec + 'F'; X`09`09end; X`09 encrypt_write(out_rec); X X`09`09`7B Save the Monster List `09`09`7D X`09 i1 := muptr; X`09 tot_monsters := 0; X`09 if (i1 > 0) then X`09`09repeat X`09`09 tot_monsters := tot_monsters + 1; X`09`09 with m_list`5Bi1`5D do X`09`09 i1 := nptr; X`09`09until (i1 = 0); X`09 writev(out_rec,tot_monsters:1); X`09 encrypt_write(out_rec); X`09 i1 := muptr; X`09 if (i1 > 0) then X`09`09repeat X`09`09 with m_list`5Bi1`5D do X`09`09 begin X`09`09 writev(out_rec,fy:1,' ',fx:1,' ',mptr:1,' ',hp:1, X`09`09`09' ',cspeed:1,' ',csleep:1,' ',cdis:1,' ',ml:1, X`09`09`09' ',confused:1); X`09`09 encrypt_write(out_rec); X`09`09 i1 := nptr; X`09`09 end; X`09`09until (i1 = 0); X X`09`09`7B Save the town level stores`09`09`7D X`09 writev(out_rec,town_seed:12); X`09 encrypt_write(out_rec); X`09 writev(out_rec,bank`5B0`5D:1,' ',bank`5B6`5D:1,' ',bank`5B5`5D:1,' V ', X`09`09bank`5B4`5D:1,' ',bank`5B3`5D:1,' ',bank`5B2`5D:1,' ',bank`5B1`5D:1); X`09 encrypt_write(out_rec); X`09 for i1 := 1 to max_stores do X`09`09with store`5Bi1`5D do X`09`09 begin X`09`09`7B Save items... `7D X`09`09 writev(out_rec,store_ctr:1); X`09`09 encrypt_write(out_rec); `20 X`09`09 for i2 := 1 to store_ctr do X`09`09 with store_inven`5Bi2`5D.sitem do X`09`09`09begin X`09`09`09 writev(out_rec,store_inven`5Bi2`5D.scost); X`09`09`09 encrypt_write(out_rec); X`09`09`09 writev(out_rec,tchar,name); X`09`09`09 encrypt_write(out_rec); X`09`09`09 writev(out_rec,damage); X`09`09`09 encrypt_write(out_rec); X X`09`09`09 writev(out_rec,tval:1,' ',subval:1,' ',weight:1, X`09`09`09`09' ',number:1,' ',tohit:1,' ',todam:1,' ', X`09`09`09`09ac:1,' ',toac:1,' ',p1:1,' ',flags:1,' ', X`09`09`09`09flags2:1,' ',level:1,' ',cost:1); X`09`09`09 encrypt_write(out_rec); X`09`09`09end; X`09`09 with store_open do X`09`09 with py.misc do X`09`09`09if ((cur_age.year > year) or X`09`09`09 ((cur_age.year = year) and X`09`09`09 ((cur_age.month > month) or X`09`09`09 ((cur_age.month = month) and X`09`09`09 ((cur_age.day > day) or X`09`09`09`09((cur_age.day = day) and X`09`09`09`09 ((cur_age.hour > hour) or X`09`09`09`09 ((cur_age.hour = hour) and X`09`09`09`09 ((cur_age.secs > secs)))))))))) then X`09`09`09 begin X`09`09`09 year := 0; X`09`09`09 month := 0; X`09`09`09 day := 0; X`09`09`09 secs := 0; X`09`09`09 end; X`09`09 with store_open do X`09`09 writev(out_rec,owner:1,' ',insult_cur:1,' ',year:1,' ', +-+-+-+-+-+-+-+- END OF PART 71 +-+-+-+-+-+-+-+-