-+-+-+-+-+-+-+-+ START OF PART 70 -+-+-+-+-+-+-+-+ X`09`09var c`09: game_time_type); extern; X`5Bexternal`5D procedure add_days( X`09`09var ti`09: game_time_type; X`09`09d`09: integer); extern; X`5Bexternal`5D function full_date_string(time : game_time_type) : string; ex Vtern; X`5Bexternal`5D procedure adv_time(flag : boolean); extern; X`5Bexternal`5D function play_time(t : time_type) : string; extern; X`5Bexternal`5D procedure add_play_time( X`09`09var res`09: time_type; X`09`09add`09: time_type); extern; X`5Bexternal`5D function show_char_age : string; extern; X`5Bexternal`5D function show_current_time : string; extern; X`5Bexternal`5D function show_play_time : string; extern; X`5Bexternal`5D function bag_descrip(bag : treas_ptr) : string; extern; X`5Bexternal`5D function squish_stat(this : integer) : byteint; extern; X`5Bexternal`5D function in_statp(stat : byteint) : byteint; extern; X`5Bexternal`5D function de_statp(stat : byteint) : byteint; extern; X`5Bexternal`5D function tohit_adj : integer; extern; X`5Bexternal`5D function toac_adj : integer; extern; X`5Bexternal`5D function todis_adj : integer; extern; X`5Bexternal`5D function todam_adj : integer; extern; X`5Bexternal`5D function likert(x,y : integer) : btype; extern; X`5Bexternal`5D procedure bpswd; extern; X`5Bexternal`5D function characters_sex : byteint ; extern; X`5Bexternal`5D function max_allowable_weight : wordint ; extern; X`5Bexternal`5D function min_allowable_weight : wordint ; extern; X`5Bexternal`5D function weight_limit : integer; extern; X`5Bexternal`5D function money_carry : treas_ptr; extern; X`5Bexternal`5D function cost_str(amount : integer) : string; extern; X`5Bexternal`5D procedure reset_total_cash; extern; X`5Bexternal`5D procedure add_money(amount : integer); extern; X`5Bexternal`5D procedure subtract_money( X`09`09amount`09`09: integer; X`09`09make_change`09: boolean); extern; X`5Bexternal`5D function send_page(to_bank : integer) : boolean; extern; X`5Bexternal`5D procedure spell_chance(var spell : spl_rec); extern; X`5Bexternal`5D procedure print_new_spells( X`09`09spell`09`09: spl_type; X`09`09num`09`09: integer; X`09`09var redraw`09: boolean); extern; X`5Bexternal`5D function get_spell(spell : spl_type; num : integer; X`09`09var sn,sc`09: integer; prompt : vtype; X`09`09var redraw`09: boolean) : boolean; extern; X`5Bexternal`5D function num_new_spells(smarts : integer) : integer; extern; X`5Bexternal`5D function learn_spell(var redraw : boolean) : boolean; extern; X`5Bexternal`5D function learn_prayer : boolean; extern; X`5Bexternal`5D function learn_song(var redraw : boolean) : boolean; extern; X`5Bexternal`5D function learn_druid : boolean; extern; X`5Bexternal`5D procedure gain_mana(amount : integer); extern; X`5Bexternal`5D procedure gain_level; extern; X`5Bexternal`5D procedure insert_num( X`09`09var object_str`09: varying`5Ba`5D of char; X`09`09mtc_str`09`09: varying`5Bb`5D of char; X`09`09number`09`09: integer; X`09`09show_sign`09: boolean); extern; X`5Bexternal`5D function check_pswd( X`09`09passw`09: string; X`09`09present`09: boolean) : boolean; extern; X`5Bexternal`5D function attack_blows( X`09`09weight`09`09: integer; X`09`09var wtohit`09: integer) : integer; extern; X`5Bexternal`5D function critical_blow( X`09`09weight,plus : integer; X`09`09cs_sharp,is_fired`09: boolean) : integer; extern; X`5Bexternal`5D function move(dir : integer; var y,x : integer) : boolean; ex Vtern; X`5Bexternal`5D function player_saves(adjust : integer) : boolean; extern; X`5Bexternal`5D function player_spell_saves : boolean; extern; X`5Bexternal`5D procedure char_inven_init; extern; X`5Bexternal`5D procedure move_char(dir : integer); extern; X`5Bexternal`5D procedure quaff; extern; X`5Bexternal`5D procedure pray; extern; X`5Bexternal`5D procedure play; extern; X`5Bexternal`5D procedure read_scroll; extern; X`5Bexternal`5D function mon_resists(a_cptr : byteint) : boolean; extern; X`5Bexternal`5D function mon_save(a_cptr,bonus, X`09`09`09`09spell_class : integer) : boolean; extern; X`5Bexternal`5D function sleep_monsters1(y,x : integer) : boolean; extern; X`5Bexternal`5D function detect_item(typ : integer) : boolean; extern; X`5Bexternal`5D function detect_trap : boolean; extern; X`5Bexternal`5D function detect_sdoor : boolean; extern; X`5Bexternal`5D function light_area(y,x : integer) : boolean; extern; X`5Bexternal`5D function unlight_area(y,x : integer) : boolean; extern; X`5Bexternal`5D function map_area : boolean; extern; X`5Bexternal`5D function ident_spell : boolean; extern; X`5Bexternal`5D function aggravate_monster(dis_affect : integer) : boolean; e Vxtern; X`5Bexternal`5D function trap_creation : boolean; extern; X`5Bexternal`5D function door_creation : boolean; extern; X`5Bexternal`5D function td_destroy : boolean; extern; X`5Bexternal`5D function light_line(dir,y,x,power : integer) : boolean; exter Vn; X`5Bexternal`5D function starlite(y,x : integer) : boolean; extern; X`5Bexternal`5D function disarm_all(dir,y,x : integer) : boolean; extern; X`5Bexternal`5D function detect_curse : boolean; extern; X`5Bexternal`5D procedure get_flags ( X`09`09typ`09`09`09`09: integer; X`09`09var weapon_type,harm_type`09: integer; X`09`09var destroy`09`09`09: obj_set); extern; X`5Bexternal`5D function detect_magic : boolean; extern; X`5Bexternal`5D function purify : boolean; extern; X`5Bexternal`5D function lore_spell : boolean; extern; X`5Bexternal`5D function fire_bolt( X`09`09typ,dir,y,x,dam : integer; X`09`09bolt_typ`09: ctype) : boolean; extern; X`5Bexternal`5D function fire_ball( X`09`09typ,dir,y,x,dam_hp`09: integer; X`09`09descrip`09`09`09: ctype) : boolean; extern; X`5Bexternal`5D function creeping_doom( X`09`09dir,y,x,dam_hp,range`09: integer; X`09`09ddesc`09`09`09: ctype) : boolean; extern; X`5Bexternal`5D function fire_line( X`09`09typ,dir,y,x,dam_hp`09: integer; X`09`09descrip`09`09`09: ctype) : boolean; extern; X`5Bexternal`5D function breath( X`09`09typ,y,x,dam_hp`09: integer; X`09`09ddesc`09`09: vtype) : boolean; extern; X`5Bexternal`5D function recharge(num : integer) : boolean; extern; X`5Bexternal`5D function zap_monster(dir,y,x,aux,zaptype : integer):boolean;e Vxtern; X`5Bexternal`5D function wall_to_mud(dir,y,x : integer) : boolean; extern; X`5Bexternal`5D function td_destroy2(dir,y,x : integer) : boolean; extern; X`5Bexternal`5D function poly_monster(dir,y,x : integer) : boolean; extern; X`5Bexternal`5D function build_wall(dir,y,x : integer) : boolean; extern; X`5Bexternal`5D function clone_monster(dir,y,x : integer) : boolean; extern; X`5Bexternal`5D function teleport_away(monptr,dis : integer) : boolean; exter Vn; X`5Bexternal`5D function teleport_to(ny,nx : integer) : boolean; extern; X`5Bexternal`5D function teleport_monster(dir,y,x : integer) : boolean; exter Vn; X`5Bexternal`5D function mass_genocide : boolean; extern; X`5Bexternal`5D function genocide : boolean; extern; X`5Bexternal`5D function mass_poly : boolean; extern; X`5Bexternal`5D function detect_creatures(typ : integer) : boolean; extern; X`5Bexternal`5D function hp_player(num : integer; kind : vtype) : boolean; ex Vtern; X`5Bexternal`5D function cure_me(var what_flag : integer) : boolean; extern; X`5Bexternal`5D function earthquake : boolean; extern; X`5Bexternal`5D function protect_evil : boolean; extern; X`5Bexternal`5D function create_food(t0,t1,t2,t3,t4 : integer) : boolean; ext Vern; X`5Bexternal`5D function zap_area(cflag,dmge,typ : integer) : boolean; extern V; X`5Bexternal`5D function warding_glyph : boolean; extern; X`5Bexternal`5D procedure lower_stat(tstat : stat_set; msg1 : vtype); extern; X`5Bexternal`5D function lose_stat(tstat : stat_set; X`09`09msg1,msg2`09: vtype) : boolean; extern; X`5Bexternal`5D function restore_stat(tstat : stat_set; X`09`09msg1`09: vtype) : boolean; extern; X`5Bexternal`5D function gain_stat(tstat : stat_set; X`09`09msg1`09: vtype) : boolean; extern; X`5Bexternal`5D procedure lose_exp(amount : integer); extern; X`5Bexternal`5D function slow_poison : boolean; extern; X`5Bexternal`5D function bless(amount : integer) : boolean; extern; X`5Bexternal`5D function detect_inv2(amount : integer) : boolean; extern; X`5Bexternal`5D function destroy_area(y,x : integer) : boolean; extern; X`5Bexternal`5D function enchant(var pluses : worlint) : boolean; extern; X`5Bexternal`5D function remove_curse : boolean; extern; X`5Bexternal`5D function restore_level : boolean; extern; X`5Bexternal`5D procedure use; extern; X`5Bexternal`5D procedure check_kickout_time(num,check : integer); extern; X`5Bexternal`5D procedure aim; extern; X`5Bexternal`5D procedure put_buffer( X`09`09%ref`09out_str`09: varying `5Ba`5D of char; X`09`09%immed`09row`09: integer; X`09`09%immed`09col`09: integer); external; X`5Bexternal`5D procedure put_qio; external; X`5Bexternal`5D function randint(%immed maxval : integer) : integer; external V; X`5Bexternal`5D function rand_rep( X`09`09%immed num`09: integer; X`09`09%immed die`09: integer) : integer; external; X`5Bexternal`5D function maxmin( X`09`09%immed`09x`09: integer; X`09`09%immed`09y`09: integer; X`09`09%immed`09z`09: integer) : integer; external; X`5Bexternal`5D function minmax( X`09`09%immed`09x`09: integer; X`09`09%immed`09y`09: integer; X`09`09%immed`09z`09: integer) : integer; external; X`5Bexternal`5D function bit_pos(%ref test : unsigned) : integer; external; X`5Bexternal`5D function bit_pos64( X`09`09%ref`09high`09: unsigned; X`09`09%ref`09low`09: unsigned) : integer; external; X`5Bexternal`5D function distance( X`09`09%immed y1`09: integer; X`09`09%immed x1`09: integer; X`09`09%immed y2`09: integer; X`09`09%immed x2`09: integer) : integer; external; X`5Bexternal`5D procedure insert_str( X`09`09%ref object_str : varying`5Ba`5D of char; X`09`09%ref mtc_str`09: varying`5Bb`5D of char; X`09`09%ref insert_str : varying`5Bc`5D of char); external; X`5Bexternal(LIB$SPAWN)`5D function shell_out( X`09`09command_str`09: integer := %immed 0; X`09`09input_file`09: integer := %immed 0; X`09`09output_file`09: integer := %immed 0; X`09`09flags`09`09: integer := %immed 0; X`09`09process_name`09: integer := %immed 0; X`09`09process_id`09: integer := %immed 0; X`09`09comp_status`09: integer := %immed 0; X`09`09comp_efn`09: integer := %immed 0; X`09`09comp_astadr`09: integer := %immed 0; X`09`09comp_astprm`09: integer := %immed 0 ) : integer; external; X`5Bexternal`5D function users : integer; external; X`5Bexternal`5D function max_users : integer; external; X`5Bexternal`5D function uw_id : boolean; external; X`5Bexternal`5D function net_trade : boolean; external; X`5Bexternal`5D procedure get_account (account : `5Breference`5D packed array V `5B$l1..$u1:integer`5D of char ); external; X`5Bexternal`5D procedure enter_trading_post; extern; X`5Bexternal`5D function already_playing : boolean; external; X`5Bexternal`5D procedure find_monster_name( X`09`09var m_name`09: vtype; X`09`09ptr`09`09: integer; X`09`09begin_sentence`09: boolean); external; X`5Bexternal`5D procedure sys$gettim(bin_time : `5Breference`5D quad_type); e Vxternal; X`5Bexternal`5D procedure sys$numtim( X`09`09weird_num`09: `5Breference`5D time_type; X`09`09bin_time`09: `5Breference`5D quad_type); external; X`5Bexternal`5D procedure sys$asctim( X`09`09timlin`09`09: `5Breference`5D wordint := %immed 0; X`09`09timbuf`09`09: `5Bclass_s`5D packed array `5B$l1..$u1:integer`5D of cha Vr; X`09`09timadr`09`09: `5Breference`5D quad_type := %immed 0; X`09`09cvtflg`09`09: `5Breference`5D integer := %immed 0); external; $ CALL UNPACK ROUTINES.INC;1 661822766 $ create 'f' X`5BInherit('Moria.Env')`5D Module Save; X X`5Bexternal`5D procedure sub_quadtime(a,b,c : `5Breference`5D quad_type); ex Vtern; X X`09`7B This save package was brought to by`09`09`09-JWT- X`09 and -RAK- `7D X X`09`7B Data Corruption means character is dead, or save file was -RAK- X`09 screwed with. Keep them guessing as to what is actually wrong.`7D X`5Bglobal,psect(save$code)`5D procedure data_exception; X begin X`09clear(1,1); X`09prt('Data Corruption Error.',1,1); X`09prt('',2,1); X`09exit; X end; X X X`09`7B Uses XOR function to encode data`09`09`09-RAK-`09`7D X`5Bglobal,psect(save$code)`5D procedure coder(var line : ntype); X var X`09`09i1 : integer; X`09`09i2,i3,i4 : unsigned; X begin X`09for i1 := 1 to length(line) do X`09 begin X`09 i2 := uint(ord(line`5Bi1`5D)); X`09 i3 := uint(randint(256)-1); X`09 i4 := uxor(i2,i3); X`09 line`5Bi1`5D := chr(i4); X`09 end; X end; X X X`09`7B Encrypts a line of text, complete with a data-check sum-RAK-`09`7D X`09`7B (original by JWT) `7D X`5Bglobal,psect(save$code)`5D procedure encrypt(var line : ntype); X var X`09i1,i2 : integer; X`09temp : ntype; X X begin X`09i2 := 0; X`09for i1 := 1 to length(line) do X`09 i2 := i2 + ord(line`5Bi1`5D) + i1; X`09temp := line; X`09writev(line,i2:1,' ',temp); X`09coder(line); X end; X X X`09`7B Decrypts a line of text, complete with a data-check sum-RAK-`09`7D X`09`7B (original by JWT) `7D X X`09`7B 87/05/11`09Modified to continue on readv error.`09-KC-`09`7D X X`5Bglobal,psect(save$code)`5D procedure decrypt(var line : ntype); X var X`09i1,i2,i3 : integer; X`09temp : ntype; X`09tmp : char; X`09original`09: ntype; X X begin X`09i2 := 0; X`09original := line; X`09coder(line); X`09temp := line; X`09readv(temp,i3,tmp,line,error:=continue); X`09for i1 := 1 to length(line) do X`09 i2 := i2 + ord(line`5Bi1`5D) + i1; X`09if (i2 <> i3) then data_exception; X end; X X X`09`7B Actual save procedure `09`09`09-RAK- & -JWT-`09`7D X`5Bglobal,psect(save$code)`5D function save_char(quick : boolean) : boolean; X X var X`09tot_monsters,tot_treasure`09`09: integer; X`09i1,i2,trys,spot`09`09`09`09: integer; X`09xfloor`09`09`09`09`09: unsigned; X`09save_seed`09`09`09`09: unsigned; X`09fnam`09`09`09`09`09: vtype; X`09out_rec,title1,title2`09`09`09: ntype; X`09f1`09`09`09`09`09: text; X`09f2`09`09`09`09`09: file of key_type; X`09flag,file_flag`09`09`09`09: boolean; X`09tstat`09`09`09`09`09: stat_set; X`09curse`09`09`09`09`09: treas_ptr; X`09current_time,delta_time`09`09`09: quad_type; X`09tim`09`09`09`09`09: time_type; X X procedure encrypt_write (var line : ntype); X begin X`09encrypt(line); X writeln(f1,line,error:=continue) X end; X X begin X`09if py.flags.dead or quick then X`09 begin +-+-+-+-+-+-+-+- END OF PART 70 +-+-+-+-+-+-+-+-