-+-+-+-+-+-+-+-+ START OF PART 11 -+-+-+-+-+-+-+-+ X weapon`09:array`5B1..maxnaturalweapon`5D of integer; X attrib`09:array`5B1..at_max`5D of integer; X hands`09:boolean; X sound`09:string; X ex_str1`09:shortstring; X ex_str2`09:shortstring; X ex_int1`09:integer; X ex_int2`09:integer; X ex_int3`09:integer; X ex_int4`09:integer; X ex_boo1`09:boolean; X ex_boo2`09:boolean; X end; X X classrec = record X armor`09:array`5B1..el_max`5D of armortype; X proficiency`09:array`5B1..el_max`5D of integer; X attrib`09:array`5B1..at_max`5D of integer; X end; X X indexrec = record X valid`09:integer; X on`09`09:packed array`5B1..maxindex`5D of boolean; X top`09`09:integer; X inuse`09:integer; X end; X X namerec = record X valid`09:integer; X loctop`09:integer; X id`09`09:array`5B1..maxindex`5D of shortstring; X end; X X intrec = record; X valid`09:integer; X int`09`09:array`5B1..maxplayers`5D of integer; X end; X X objrec = record; X valid`09:integer; X icon`09:char; X rendition`09:integer; X wear`09:integer; X size`09:integer; X weight`09:integer; X worth`09:integer; X line_d`09:shortstring; X examine_d`09:shortstring; X get_d`09:shortstring; X use_d`09:shortstring; X howprint`09:integer; X spell`09:integer; X component`09:array `5B1..maxcomponent`5D of integer; X parm`09:array `5B1..maxparm`5D of integer; X mag`09`09:array `5B1..maxparm`5D of integer; X ex_str1`09:shortstring; X ex_str2`09:shortstring; X ex_int1`09:integer; X ex_int2`09:integer; X ex_int3`09:integer; X ex_int4`09:integer; X ex_boo1`09:boolean; X ex_boo2`09:boolean; X end; X X exitrec = record X toroom, X face`09:integer; X end; X X roomrec = record X valid`09:integer; X level`09:integer; X kind`09:integer; X size`09:xy; X mbx`09`09:shortstring; X background`09:packed array`5B1..maxhoriz,1..maxvert`5D of char; X exit`09:array `5B1..maxexit`5D of exitrec; X ex_str1`09:shortstring; X ex_str2`09:shortstring; X ex_int1`09:integer; X ex_int2`09:integer; X ex_int3`09:integer; X ex_int4`09:integer; X ex_boo1`09:boolean; X ex_boo2`09:boolean; X end; X X spellrec = record X valid`09:integer; X effect`09:integer; X element`09:integer; X caster`09:boolean; X prompt`09:boolean; X icon`09:char; X rendition`09:integer; X geometry`09:integer; X geo1`09:integer; X geo2`09:integer; X parm`09:array`5B1..4`5D of integer; X mana`09:integer; X difficulty`09:integer; X castingtime`09:integer; X duration`09:integer; X casterdesc`09:shortstring; X victimdesc`09:shortstring; X ex_str1`09:shortstring; X ex_str2`09:shortstring; X ex_int1`09:integer; X ex_int2`09:integer; X ex_int3`09:integer; X ex_int4`09:integer; X ex_boo1`09:boolean; X ex_boo2`09:boolean; X end; X Xvar X drag_char`09:`5Bvolatile`5D char := chr(0); X performance`09:`5Bvolatile`5D boolean := false; X brief`09`09:`5Bvolatile`5D boolean := false; X first_time`09:`5Bvolatile`5D boolean := false; X debug`09`09:`5Bvolatile`5D boolean := false; X all_done`09:`5Bvolatile`5D boolean := false; X human`09`09:`5Bvolatile`5D boolean := false; X spawned_out`09:`5Bvolatile`5D boolean := false; X interactive`09:boolean := false; X full_text`09:`5Bvolatile`5D boolean := false; X seed`09`09:`5Bvolatile`5D integer; X now`09`09:`5Bvolatile`5D integer; X other_lognum`09:`5Bvolatile`5D integer; X pos`09`09:`5Bvolatile`5D integer; X wpos`09`09:`5Bvolatile`5D integer := 0; X x_last`09:`5Bvolatile`5D integer; X x_start`09:`5Bvolatile`5D integer; X x_end`09`09:`5Bvolatile`5D integer; X myview`09:`5Bvolatile`5D integer := 99; X monsters_active:`5Bvolatile`5D integer := 0; X tickerquick`09:`5Bvolatile`5D integer; X tickernormal`09:`5Bvolatile`5D integer; X tickerslow`09:`5Bvolatile`5D integer; X fg_map`09:`5Bvolatile`5D integer := 0; X vdoffsetx`09:`5Bvolatile`5D integer;`09`7BOffset of the virtual display on V screen`7D X vdoffsety`09:`5Bvolatile`5D integer; X vpsizex`09:`5Bvolatile`5D integer;`09`7BCurrent size of viewport`7D X vpsizey`09:`5Bvolatile`5D integer; X vpoffsetx`09:`5Bvolatile`5D integer;`09`7BOffset of viewport in display`7D X vpoffsety`09:`5Bvolatile`5D integer; X scrollratio`09:`5Bvolatile`5D integer := 5; X myvpmaxx`09:`5Bvolatile`5D integer := 48;`7BDefined size of viewport`7D X myvpmaxy`09:`5Bvolatile`5D integer := 15; X vpmaxx`09:`5Bvolatile`5D integer := 48; X vpmaxy`09:`5Bvolatile`5D integer := 15; X privlevel`09:`5Bvolatile`5D integer; X mc`09`09:integer := 1; X pid`09`09:integer; X mywindowx`09:integer; X mywindowy`09:integer; X X mychannel`09:`5Bvolatile`5D $uword; X tt_chan`09:`5Bvolatile`5D $uword; X new_key`09:`5Bvolatile`5D $uword := 0; X X lasthitstring`09:`5Bvolatile`5D string := 'natural causes'; X qpqp`09`09:`5Bvolatile`5D string; X window_name`09:`5Bvolatile`5D string; X mymbx`09`09:`5Bvolatile`5D mpack; X old_prompt`09:`5Bvolatile`5D string; X oldcmd`09:string; X line`09`09:string; X command`09:string; X X timercontext`09:`5Bvolatile`5D unsigned := 0; X sysstatus`09:`5Bvolatile`5D unsigned; X pasteboard`09:`5Bvolatile`5D unsigned; X gwind`09`09:`5Bvolatile`5D unsigned; X twind`09`09:`5Bvolatile`5D unsigned; X xwind`09`09:`5Bvolatile`5D unsigned; X ywind`09`09:`5Bvolatile`5D unsigned; X keyboard`09:`5Bvolatile`5D unsigned; X save_dcl_ctrl`09:`5Bvolatile`5D unsigned; X X outfile`09:`5Bvolatile`5D text; X racefile`09:`5Bvolatile`5D file of racerec; X race`09`09:`5Bvolatile`5D racerec; X playerfile`09:`5Bvolatile`5D file of playerrec; X player`09:`5Bvolatile`5D playerrec; X namefile`09:`5Bvolatile`5D file of namerec; X name`09`09:`5Bvolatile`5D array`5B1..na_max`5D of namerec; X indexfile`09:`5Bvolatile`5D file of indexrec; X indx`09`09:`5Bvolatile`5D array`5B1..i_max`5D of indexrec; X intfile`09:`5Bvolatile`5D file of intrec; X an_int`09:`5Bvolatile`5D array`5B1..n_max`5D of intrec; X roomfile`09:`5Bvolatile`5D file of roomrec; X here`09`09:`5Bvolatile`5D roomrec; X fgfile`09:`5Bvolatile`5D file of fgrec; X fg`09`09:`5Bvolatile`5D fgrec; X objfile`09:`5Bvolatile`5D file of objrec; X obj`09`09:`5Bvolatile`5D objrec; X spellfile`09:`5Bvolatile`5D file of spellrec; X spell`09`09:`5Bvolatile`5D spellrec; X act`09`09:`5Bvolatile`5D actrec; X pl`09`09:`5Bvolatile`5D array`5B1..maxmonsters`5D of playerrec; X plr`09`09:`5Bvolatile`5D array`5B1..maxmonsters`5D of plrrec; X class`09`09:`5Bvolatile`5D array`5B1..maxclass`5D of classrec; X person`09:`5Bvolatile`5D array`5B1..maxplayers`5D of peoplerec; X event`09`09:`5Bvolatile`5D array`5B1..event_max`5D of actrec; X event_time`09:`5Bvolatile`5D array`5B1..event_max`5D of integer; X a_menu`09:array`5B1..maxmenu`5D of menu_type; X obj_map`09:`5Bvolatile`5D packed array`5B1..maxhoriz,1..maxvert,1..obj_lay Vers`5D of 1..maxobjs; X people_map`09:`5Bvolatile`5D packed array`5B1..maxhoriz,1..maxvert`5D of 1 V..maxplayers; X fg_printed`09:`5Bvolatile`5D array`5B1..maxfg`5D of boolean; X x_window`09:`5Bvolatile`5D array`5B1..x_max`5D of varying`5B30`5D of char; X X io_status`09:`5Bvolatile`5D iosb_type; X userident`09:`5Bglobal`5D ident; X user,uname`09:varying`5B31`5D of char; X`20 X dir`09`09:`5Bvolatile`5D array`5B1..6`5D of tinystring := X`09`09('north','south','east','west','up','down'); X X class_name:`5Bvolatile`5D array`5B1..maxclass`5D of shortstring; X X names: array`5B1..na_max+8`5D of shortstring := ( X`09'Room', X`09'Object', X`09'Player', X`09'User', X`09'Race', X`09'Spell', X`09'Foreground names', X`09'Foreground types', X`09'Weapon stat', X`09'Character attributes', X`09'Spell effects', X`09'Elements', X`09'Equipment wear', X`09'Classes'); X X player_status: array`5B1..ps_max`5D of shortstring := ( X`09'Dead', X`09'Poisoned', X`09'Invisible', X`09'Blind', X`09'Speed', X`09'Strength'); X X stat:`5Bvolatile`5D array`5B0..ef_max`5D of shortstring := ( X`09'None', X`09'Points', X`09'Health', X`09'Mana', X`09'Wealth', X`09'Move speed', X`09'Size', X`09'Heal speed', X`09'Mana speed', X`09'Noise', X`09'Perception', X`09'Force', X`09'Wind', X`09'Fire', X`09'Cold', X`09'Electric', X`09'Magic', X`09'Holy', X`09'Self', X`09'Weapon', X`09'Missile', X`09'Smallest fit', X`09'Largest fit', X`09'chance mod force', X`09'percent mod force', X`09'chance mod wind', X`09'percent mod wind', X`09'chance mod fire', X`09'percent mod fire', X`09'chance mod cold', X`09'percent mod cold', X`09'chance mod electric', X`09'percent mod electric', X`09'chance mod magic', X`09'percent mod magic', X`09'chance mod holy', X`09'percent mod holy', X`09'chance mod self', X`09'percent mod self', X`09'chance mod weapon', X`09'percent mod weapon', X`09'chance mod missile', X`09'percnet mod missile', X`09'% chance destroy' X`09); X Xattrib_name:`5Bvolatile`5D array`5B1..at_max`5D of shortstring := ( X`09'Points', X`09'Health', X`09'Mana', X`09'Wealth', X`09'Move delay', X`09'Size', X`09'Heal speed', X`09'Mana speed', X`09'Noise', X`09'Perception'); X X attrib_ex_name:`5Bvolatile`5D array`5B1..st_max`5D of shortstring := ( X`09'Base', X`09'Kills', X`09'Killed', X`09'Race', X`09'Class', X`09'Experience'); X X spell_effects:array`5B0..sp_max`5D of shortstring := ( X`09'None', X`09'Hurt', X`09'Freeze', X`09'Teleport', X`09'Invisible'); X X element:`5Bvolatile`5D array`5B0..el_max`5D of shortstring := ( X`09'Unknown', X`09'force', X`09'wind', X`09'fire', X`09'cold', X`09'electric', X`09'magic', X`09'holy', X`09'self', X`09'weapon', X`09'missile'); X X fg_type:`5Bvolatile`5D array`5B0..fg_max`5D of shortstring := ( X`09'Empty', X`09'Normal', X`09'Turn on', X`09'Turn off', X`09'Toggle', X`09'Sliding', X`09'Exit', X`09'Hurt', X`09'Delay', X`09'Poison', X`09'Race', X`09'Rebirth', X`09'No dead', X`09'Door', X`09'Class', X`09'Shop', X`09'View', X`09'College', X`09'no teleport'); X X equipment:array`5B0..ow_max`5D of shortstring := ( X`09'Not equippable', X`09'Sword hand', X`09'Shield hand', X`09'Arms', X`09'Hands', X`09'Head', X`09'Neck', X`09'Back', X`09'Chest', X`09'Legs', X`09'Feet', X`09'Ring', X`09'Body', X`09'Eyes', X`09'Wrist', X`09'Waist', X`09'Backpack', X`09'Pouch', X`09'Quiver', X`09'Wallet'); Xend. $ CALL UNPACK SRINIT.PAS;1 2122004588 $ create 'f' X`5Binherit('srinit','srsys','sys$library:starlet'), X environment('srio')`5D X Xmodule srio; X X`5Bhidden,external,asynchronous`5D Xprocedure remove_x(s:string; draw:boolean := false); Xexternal; X X`5Bhidden,external,asynchronous`5D Xprocedure unplot_player(theirlog:integer); Xexternal; X X`5Bhidden,external,asynchronous`5D Xprocedure equip_stats(save:boolean := true); Xexternal; X X`5Bhidden,external,asynchronous`5D Xprocedure unequip_stats(save:boolean := true); Xexternal; X X`5Basynchronous`5D Xprocedure perf(s:string); Xbegin X if performance then wl(s); Xend; X X`5Basynchronous`5D Xfunction valid_index(indexnum:integer; n:integer; echo:boolean := false):boo Vlean; Xbegin X if (n > 0) and (n <= indx`5Bindexnum`5D.top) then valid_index := true X else X begin X valid_index := false; X wl('Invalid index.',echo); X end; Xend; X X`5Basynchronous`5D Xprocedure collision_wait; Xvar X wait_time:real; Xbegin X wait_time := random / 5; X if wait_time < 0.001 then wait_time := 0.001; X wait(wait_time); Xend; X X`5Basynchronous`5D Xprocedure deadcheck(var err:integer; s:string); Xbegin X err := err + 1; X if err > maxerr then X begin X wl(s+' seems to be deadlocked.'); X if grab_yes('Halt (y/n) ') then halt; X err := 0; X end; Xend; X X`5Bglobal,asynchronous`5D Xprocedure getindex(n:integer); Xvar X err:integer; Xbegin X perf('getindex'); X indexfile`5E.valid := 0; X err := 0; X find(indexfile,n,error := continue); X while indexfile`5E.valid <> n do X begin `20 X deadcheck(err,'getindex'); X collision_wait; X find(indexfile,n,error := continue); X end; X indx`5Bn`5D := indexfile`5E; Xend; X X`5Bglobal,asynchronous`5D Xprocedure putindex(n:integer); Xbegin X perf('putindex'); X locate(indexfile,n); X indexfile`5E := indx`5Bn`5D; X put(indexfile); Xend; X X`5Bglobal,asynchronous`5D Xprocedure freeindex; Xbegin X perf('freeindex'); X unlock(indexfile); Xend; X X`5Basynchronous`5D Xprocedure getrace(n:integer); Xvar X err:integer; Xbegin X perf('getrace'); X if valid_index(i_race,n) then X begin X racefile`5E.valid := 0; X err := 0; X find(racefile,n,error := continue); X while racefile`5E.valid <> n do X begin `20 X deadcheck(err,'getrace'); X collision_wait; X find(racefile,n,error := continue); X end; X race := racefile`5E; X end; Xend; X Xprocedure putrace; Xbegin X perf('putrace'); X locate(racefile,race.valid); X racefile`5E := race; X put(racefile); Xend; X X`5Basynchronous`5D Xprocedure freerace; Xbegin X perf('freerace'); X unlock(racefile); Xend; X X`5Basynchronous`5D Xprocedure getint(n:integer); Xvar X err:integer; Xbegin X perf('getint'); X intfile`5E.valid := 0; X err := 0; X find(intfile,n,error := continue); X while intfile`5E.valid <> n do X begin X deadcheck(err,'getint'); X collision_wait; X find(intfile,n,error := continue); X end; X an_int`5Bn`5D := intfile`5E; Xend; X Xprocedure freeint; Xbegin X perf('freeint'); X unlock(intfile); Xend; X X`5Basynchronous`5D Xprocedure putint(n:integer); Xbegin X perf('putint'); X locate(intfile,n); X intfile`5E := an_int`5Bn`5D; X put(intfile); Xend; X X`5Basynchronous`5D Xprocedure getname(n:integer); Xvar X err: integer; Xbegin X perf('getname'); X namefile`5E.valid := 0; X err := 0; X find(namefile,n,error := continue); X while namefile`5E.valid <> n do X begin X deadcheck(err,'getnamefile'); X collision_wait; X find(namefile,n,error := continue); X end; X name`5Bn`5D := namefile`5E; Xend; X X`5Basynchronous`5D Xprocedure putname(n:integer); Xbegin X perf('putname'); X locate(namefile,n); X namefile`5E := name`5Bn`5D; X put(namefile); Xend; X X`5Basynchronous`5D +-+-+-+-+-+-+-+- END OF PART 11 +-+-+-+-+-+-+-+-