home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Source Code 1994 March
/
Source_Code_CD-ROM_Walnut_Creek_March_1994.iso
/
compsrcs
/
games
/
vmsnet
/
monhl10b
/
delta7
< prev
next >
Wrap
Internet Message Format
|
1992-08-02
|
28KB
Path: uunet!mcsun!news.funet.fi!hydra!klaava!hurtta
From: Kari.Hurtta@Helsinki.FI (Kari. E. Hurtta)
Newsgroups: vmsnet.sources.games
Subject: Monster Helsinki, Delta from 1.04 to 1.05 - part 7/7
Message-ID: <1992Jun30.225324.14026@klaava.Helsinki.FI>
Date: 30 Jun 92 22:53:24 GMT
Sender: hurtta@klaava.Helsinki.FI (Kari Hurtta)
Followup-To: vmsnet.sources.d
Organization: University of Helsinki
Lines: 827
Archive-name: monster_helsinki_104_to_105/delta7
Environment: VMS, Pascal
Author: Kari.Hurtta@Helsinki.FI
-+-+-+-+-+-+-+-+ START OF PART 7 -+-+-+-+-+-+-+-+
X writeln ('Reallocation descriptions...');
X getindex(I_LINE);
X freeindex;
X ln := indx;
X
X ln.inuse := 0;
X for i := 1 to maxindex do ln.free`091i`093 := true;
X
X getindex(I_BLOCK);
X freeindex;
X bl := indx;
X
X bl.inuse := 0;
X for i := 1 to maxindex do bl.free`091i`093 := true;
X `032
X
X getindex (I_PLAYER);
X freeindex;
X pe := indx;
X
X getindex(I_ROOM);
X freeindex;
X ro := indx;
X
X getindex(I_OBJECT);
X freeindex;
X ob := indx;
X
X writeln ('Scan self descriptions');
X getint(N_SELF);
X freeint;
X for i := 1 to pe.top do if not pe.free`091i`093 then alloc (anint.int`091i
V`093);
X
X writeln('Scan object file');
X for i := 1 to ob.top do if not ob.free`091i`093 then begin
X getobj(i);
X freeobj;
X with obj do begin
X alloc (-linedesc);
X alloc (homedesc);
X alloc (examine);
X alloc (getfail);
X alloc (getsuccess);`032
X alloc (usefail);
X alloc (usesuccess);
X alloc (d1);
X alloc (d2);
X end
X end;
X `032
X writeln ('Scan room file');
X for i := 1 to ro.top do if not ro.free`091i`093 then begin
X getroom(i);
X freeroom;
X with here do begin
X for j := 1 to maxexit do with exits`091j`093 do begin
X alloc(-exitdesc);
X `123 alloc(-closed); This isn't use yet `125
X alloc(fail);
X alloc(success);`032
X alloc(goin);
X alloc(comeout); `032
X alloc(hidden); `123 is this in use ? `125
X end; `032
X for j := 1 to maxdetail do alloc(here.detaildesc`091j`093);
X alloc(primary);
X alloc(secondary);
X alloc(-objdesc); `032
X alloc(-objdest);
X alloc(-rndmsg); `032
X alloc(xmsg2);
X alloc(exitfail);
X alloc(ofail);
X end
X end; `032
X
X writeln('Scan global codes');
X getglobal;
X freeglobal;
X for i := 1 to GF_MAX do if GF_Types`091i`093 = G_Text then alloc(global.in
Vt`091i`093);
X`032
X locate(indexfile,I_LINE);
X indexfile`094 := ln;
X put(indexfile);
X
X locate(indexfile,I_BLOCK);
X indexfile`094 := bl;
X put(indexfile);
X `032
X writeln ('Ready.');
Xend;
X
Xprocedure fix_clear_privileges (batch: boolean);
Xvar i,mm: integer;
Xbegin
X if fix_sure('Do you want clear privileges database ? ',batch) then begin
X if not exact_user(mm,MM_userid) then mm := 0;
X int_in_use(N_PRIVILEGES);
X getint(N_PRIVILEGES);
X for i := 1 to maxplayers do anint.int`091i`093 := 0;
X if mm > 0 then anint.int`091mm`093 := all_privileges;`032
X`009`123 more privilege for Monster Manager `125
X putint;
X writeln ('Ready.');
X end;
Xend; `123 fix_clear_privileges `125
X
Xprocedure fix_clear_experience (batch: boolean);
Xvar i,mm: integer;
Xbegin
X if fix_sure('Do you want clear experience database ? ',batch) then begin
X if not exact_user(mm,MM_userid) then mm := 0;
X int_in_use(N_EXPERIENCE);
X getint(N_EXPERIENCE);
X for i := 1 to maxplayers do anint.int`091i`093 := 0;
X if mm > 0 then anint.int`091mm`093 := MaxInt;`032
X `123 Monster Manager is Archwizard `125
X putint;
X writeln ('Ready.');
X end;
Xend; `123 fix_clear_privileges `125
X
Xprocedure fix_clear_health (batch: boolean);
Xvar i: integer;
X exp: intrec;
Xbegin
X if fix_sure('Do you want clear health database ? ',batch) then begin
X getint(N_EXPERIENCE);
X freeint;
X exp := anint;
X int_in_use(N_HEALTH);
X getint(N_HEALTH);
X for i := 1 to maxplayers do anint.int`091i`093 :=`032
X leveltable`091level(exp.int`091i`093)`093.health * goodhealth div 1
V0;
X putint;
X writeln ('Ready.');
X end;
Xend; `123 fix_clear_health `125
X
X
Xprocedure fix_clear_password (batch: boolean);
Xvar password: shortstring;
X i: integer;
Xbegin
X if fix_sure('Want you really clear password database ? ',batch) then be
Vgin
X
X writeln('Intializing password record...');
X locate(namfile,T_PASSWD);
X namfile`094.validate := T_PASSWD;
X namfile`094.loctop := 0;
X for i := 1 to maxroom do namfile`094.idents`091i`093 := '';
X`009put(namfile);
X
X writeln('Initializing real name record ...');
X locate(namfile,T_REAL_USER);
X namfile`094.validate := T_REAL_USER;
X namfile`094.loctop := 0;
X for i := 1 to maxroom do namfile`094.idents`091i`093 := '';
X`009put(namfile);
X
X`009getuser;
X`009freeuser;
X
X`009writeln ('Making pseudo passowords... (same as virtual userid)');
X for i := 1 to maxplayers do begin
X password := user.idents`091i`093;
X if password > '' then if password`0911`093 = '"' then begin
X encrypt(password,i);
X getpasswd;
X passwd.idents`091i`093 := password;
X putpasswd;
X getreal_user;
X real_user.idents`091i`093 := '';
X putreal_user;
X end;
X end;
X writeln ('Ready.');
X end
Xend; `123 fix_clear_password `125
X
Xprocedure fix_clear_quotas(batch: boolean);
Xvar numrooms,allow,accept: intrec;
X room,exit,player,acp,i: integer;`032
X roomindx: indexrec;
Xbegin
X writeln('Scanning rooms....');
X for i := 1 to maxplayers do numrooms.int`091i`093 := 0;
X numrooms.intnum := N_NUMROOMS;
X for i := 1 to maxplayers do allow.int`091i`093 := default_allow;
X allow.intnum := N_ALLOW;
X for i := 1 to maxplayers do accept.int`091i`093 := 0;
X accept.intnum := N_ACCEPT;
X getindex(I_ROOM);
X freeindex;
X roomindx := indx;
X for room := 1 to roomindx.top do if not roomindx.free`091room`093 then b
Vegin
X`009gethere(room);
X`009if exact_user(player,here.owner) then begin
X`009 acp := 0;
X`009 for exit := 1 to maxexit do`032
X`009`009if here.exits`091exit`093.kind = 5 then acp := acp +1;
X`009 numrooms.int`091player`093 := numrooms.int`091player`093 +1;
X`009 accept.int`091player`093 := accept.int`091player`093 +acp;
X`009end;
X end;
X writeln('Clearing quota database and writing results to it...');
X int_in_use(N_NUMROOMS);
X int_in_use(N_ALLOW);
X int_in_use(N_ACCEPT);
X
X getint(N_NUMROOMS);
X anint := numrooms;
X putint;
X
X getint(N_ALLOW);
X anint := allow;
X putint;
X
X getint(N_ACCEPT);
X anint := accept;
X putint;
X
X writeln('OK.');
Xend;
X
X
Xprocedure fix_repair_location(batch: boolean);
Xvar id,loc,slot,code,room,true_loc,found_counter: integer;
Xvar ex_indx,sleep_indx,room_indx,header_indx: indexrec;
X locs: intrec;
X temp: namrec;
Xbegin
X writeln('Scanning monsters...');
X getpers;
X freepers;
X getuser;
X freeuser;
X getindex(I_PLAYER);
X freeindex;
X ex_indx := indx;
X getindex(I_ASLEEP);
X freeindex;
X sleep_indx := indx;
X getindex(I_ROOM);
X freeindex;
X room_indx := indx;
X getindex(I_HEADER);
X freeindex;
X header_indx := indx;
X getint(N_LOCATION);
X freeint;
X locs := anint;
X for id := 1 to ex_indx.top do if not ex_indx.free`091id`093 then`032
X`009if user.idents`091id`093 = '' then begin
X`009 writeln('Bad player username record #',id:1);
X`009 writeln(' player name: ',pers.idents`091id`093);
X`009end else if user.idents`091id`093`0911`093 = ':' then begin`032
X`009 found_counter := 0;
X`009 true_loc := 0;
X`009 loc := locs.int`091id`093;
X`009 for room := 1 to room_indx.top do if not room_indx.free`091room`093
V then begin
X`009`009gethere(room);
X`009`009for slot := 1 to maxpeople do begin
X`009`009 if (here.people`091slot`093.username = user.idents`091id`093) an
Vd`032
X`009`009`009(here.people`091slot`093.kind = P_MONSTER) then begin
X`009`009`009found_counter := found_counter +1;
X`009`009`009true_loc := room;
X`009`009 end;
X`009`009end;
X`009 end;
X`009 if (found_counter = 1) and (true_loc = loc) then
X`009`009writeln(pers.idents`091id`093,': ok')
X`009 else if found_counter = 0 then begin
X`009`009writeln(pers.idents`091id`093,': not found from any room - deleted '
V,
X`009`009 '- can''t update code database.');
X`009`009ex_indx.free`091id`093 := true;
X`009`009ex_indx.inuse := ex_indx.inuse - 1;
X`009`009if not sleep_indx.free`091id`093 then begin
X`009`009 sleep_indx.free`091id`093 := true;
X`009`009 sleep_indx.inuse := sleep_indx.inuse - 1;`032
X`009`009`009`123 onkohan tarpeelista ? `125
X`009`009end;
X`009`009pers.idents`091id`093 := '';
X`009`009user.idents`091id`093 := '';
X`009`009getint(N_SELF);`009`009`123 destroy self description `125
X`009`009delete_block(anint.int`091id`093);
X`009`009putint;
X`009 end else if (found_counter = 1) and ( loc <> true_loc) then begin
X`009`009writeln(pers.idents`091id`093,': found from wrong location - updated
V.');
X`009`009locs.int`091id`093 := true_loc;
X`009 end else if (found_counter > 1) then begin
X`009`009writeln(pers.idents`091id`093,': duplicated monster - deleted.');
X`009`009for room := 1 to room_indx.top do if not room_indx.free`091room`093
V then begin
X`009`009 code := 0;
X`009`009 getroom(room); `123 locking `125
X`009`009 for slot := 1 to maxpeople do begin
X`009`009`009if (here.people`091slot`093.username = user.idents`091id`093) an
Vd`032
X`009`009`009(here.people`091slot`093.kind = P_MONSTER) then begin
X`009`009`009 code := here.people`091slot`093.parm;
X`009`009`009 here.people`091slot`093.username := '';
X`009`009`009 here.people`091slot`093.kind := 0;
X`009`009`009 here.people`091slot`093.parm := 0;
X`009`009`009end;
X`009`009 end;
X`009`009 putroom;`009 `123 unlocking `125
X`009`009 if code > 0 then begin
X`009`009`009if not header_indx.free`091code`093 then begin
X`009`009`009 header_indx.free`091code`093 := true;
X`009`009`009 header_indx.inuse := sleep_indx.inuse - 1;`032
X`009`009`009 delete_program(code);`009`009`009
X`009`009`009end;
X`009`009 end;
X`009`009end; `123 end of room loop `125
X`009`009ex_indx.free`091id`093 := true;
X`009`009ex_indx.inuse := ex_indx.inuse - 1;
X`009`009if not sleep_indx.free`091id`093 then begin
X`009`009 sleep_indx.free`091id`093 := true;
X`009`009 sleep_indx.inuse := sleep_indx.inuse - 1;`032
X`009`009`009`123 onkohan tarpeelista ? `125
X`009`009end;
X`009`009pers.idents`091id`093 := '';
X`009`009user.idents`091id`093 := '';
X`009`009getint(N_SELF);`009`009`123 destroy self description `125
X`009`009delete_block(anint.int`091id`093);
X`009`009putint;
X `009 end else writeln('%',pers.idents`091id`093,': bad software error
V.');
X`009end;
X writeln('Updating database...');
X
X temp := pers;
X getpers;
X pers := temp;
X putpers;
X `032
X temp := user;
X getuser;
X user := temp;
X putuser;
X `032
X getindex(I_PLAYER);
X indx := ex_indx;
X putindex;
X getindex(I_ASLEEP);
X indx := sleep_indx;
X putindex;
X getindex(I_ROOM);
X indx := room_indx;
X putindex;
X getindex(I_HEADER);
X indx := header_indx;
X freeindex;
X getint(N_LOCATION);
X anint := locs;
X putint;
X writeln('Ready.');
Xend; `123 fix_repair_location `125
X
Xprocedure fix_calculate_existence(batch: boolean);
Xvar table: array `0911 .. maxroom `093 of integer;
X i,room,slot,object,old_value,pslot,inv: integer;
Xbegin
X writeln ('Calculate objects'' number in existence');
X for i := 1 to maxroom do table`091i`093 := 0;
X getindex(I_ROOM);
X freeindex;
X writeln ('Scan room file');
X for room := 1 to indx.top do if not indx.free`091room`093 then begin
X`009gethere (room);
X`009for slot := 1 to maxobjs do begin
X`009 i := here.objs`091slot`093;
X`009 if (i < 0) or (i > maxroom) then
X`009`009writeln('Invalid object #',i:1,' entry #',slot:1,
X`009`009 ' at room ',here.nicename)
X`009 else if i > 0 then table`091i`093 := table`091i`093 +1;
X`009end;
X`009for pslot := 1 to maxpeople do begin
X`009 if here.people`091pslot`093.kind > 0 then begin
X`009`009for inv := 1 to maxhold do begin
X`009`009 i := here.people`091pslot`093.holding`091inv`093;
X`009`009 if (i < 0) or (i > maxroom) then
X`009`009`009writeln('Invalid object #',i:1,' entry #',inv:1,
X`009`009`009 ' at monster ',here.people`091pslot`093.name)
X`009`009 else if i > 0 then table`091i`093 := table`091i`093 +1;
X`009`009end;
X`009 end;
X`009end;
X end;
X writeln('Write result to object file');
X getindex(I_OBJECT);
X freeindex;
X for object := 1 to maxroom do begin
X`009if (object > indx.top) or indx.free`091object`093 then begin
X`009 if table`091object`093 > 0 then begin
X`009`009writeln('Object #',object:1,' not exist but here is');
X`009`009writeln(' ',table`091object`093,' entries in room file.');
X`009 end;
X`009end else begin
X`009 getobj(object);
X`009 old_value := obj.numexist;
X`009 obj.numexist := table`091object`093;
X`009 putobj;
X`009 if old_value <> table`091object`093 then writeln(obj.oname,' fixed.'
V);
X`009end;
X end;
X writeln ('Ready.');
Xend;`009`123 fix_calculate_existence `125
X
X
Xprocedure fix_repair_paths(batch: boolean);
Xvar room,exit,room_to,second_exit,exit2: integer;
X
X procedure delete_exit(room,exit: integer);
X begin
X`009getroom(room);
X`009writeln(' Removing exit from ',here.nicename,
X`009 ' to ',direct`091exit`093,'.');
X`009here.exits`091exit`093.kind := 0;
X`009here.exits`091exit`093.toloc := 0;
X`009here.exits`091exit`093.slot := 0;
X`009putroom;
X end; `123 delete_exit `125
X`009
Xbegin
X writeln('Repairing paths...');
X `032
X getindex(I_ROOM);
X freeindex;
X for room := 1 to indx.top do if not indx.free`091room`093 then begin
X`009for exit := 1 to maxexit do begin
X
X`009 gethere(room);`009`123 reread here `125
X`009 if not (here.exits`091exit`093.kind in `0910,5`093) then begin
X`009`009room_to := here.exits`091exit`093.toloc;
X`009`009second_exit := here.exits`091exit`093.slot;
X
X`009`009if (second_exit < 0) or (second_exit > maxexit) then begin
X`009`009 writeln('Exit from ',here.nicename,' to ',direct`091exit`093,
X`009`009`009' is bad: target slot is out of range');
X`009`009 delete_exit(room,exit);
X`009`009
X`009`009end else if room_to = 0 then begin
X`009`009 writeln('Exit from ',here.nicename,' to ',direct`091exit`093,
X`009`009`009' is nowhere.');
X
X`009`009end else if (room_to < 1) or (room_to > indx.top) then begin
X`009`009 writeln('Exit from ',here.nicename,' to ',direct`091exit`093,
X`009`009`009' is bad: target room is out of range.');
X`009`009 delete_exit(room,exit);
X
X`009`009end else if indx.free`091room_to`093 then begin
X`009`009 writeln('Exit from ',here.nicename,' to ',direct`091exit`093,
X`009`009`009' is bad: target room isn''t in use');
X`009`009 delete_exit(room,exit);
X
X`009`009end else begin
X`009`009 if room = room_to then
X`009`009`009writeln('Exit from ',here.nicename,' to ',direct`091exit`093,
X`009`009`009 ' is loop.');
X`009`009 if second_exit = 0 then begin
X`009`009`009writeln('Exit from ',here.nicename,' to ',direct`091exit`093,
X`009`009`009 ' is bad: no target slot');
X`009`009`009delete_exit(room,exit);
X`009`009 end else begin
X`009`009`009gethere(room_to);
X`009`009`009if (here.exits`091second_exit`093.toloc <> room) or
X`009`009`009 (here.exits`091second_exit`093.slot <> exit) then begin
X`009`009`009 writeln('Exits from ',here.nicename,' to ',
X`009`009`009`009direct`091second_exit`093,
X`009`009`009`009' and');
X`009`009`009 gethere(room);
X`009`009`009 writeln(' from ',here.nicename,' to ',direct`091exit`093,
X`009`009`009`009' are bad: bad link');
X`009`009`009 delete_exit(room,exit);
X`009`009`009end;
X`009`009 end;
X`009`009end;
X`009 end else if here.exits`091exit`093.toloc <> 0 then begin
X`009`009writeln('Exit from ',here.nicename,' to ',direct`091exit`093,
X`009`009 ' isn''t exit.');
X`009 end;`032
X`009end;`009`123 exit `125
X end; `123 room `125
X writeln ('Ready.');
Xend;
X
X`123 fix_view_global_flags moved to DATABASE.PAS `125
X
X`091global`093
Xfunction fix
X`009(batch: string := ''): `123 in this procedure you not have logged in `1
V25
X`009`009`009`009`123 system ! `125
X`009boolean;
Xvar s: string;
X done: boolean;
X batch_mode: boolean;
Xbegin `009
X done := batch > '';
X fix := true;
X repeat
X if batch > '' then begin
X`009 s := batch;
X`009 `123 writeln('Batch mode: ',s); `125
X`009 batch_mode := true;
X end else begin
X`009 write ('fix> '); readln (s); writeln;
X`009 batch_mode := false;
X end;
X s := lowcase(s);
X if s = '' then writeln ('Enter h for help.')
X else case s`0911`093 of `032
X`009'a'`009: fix_clear_privileges`009 (batch_mode);
X`009'b'`009: fix_clear_health`009 (batch_mode);
X 'c'`009: fix_initialize_event`009 (batch_mode);
X 'd' : fix_descriptions`009 (batch_mode);
X 'f' : fix_clear_experience`009 (batch_mode);
X`009'g'`009:`032
X`009begin
X`009`009if s = 'g' then`009`009fix_calculate_existence`009(batch_mode)
X`009`009else if s = 'gl' then`009fix_clear_global`009(batch_mode)
X`009`009else if s = 'gs' then`009set_global_flag(GF_ACTIVE,FALSE)
X`009`009else if s = 'gu' then set_global_flag(GF_ACTIVE,TRUE)
X`009`009else if s = 'g-' then`009set_global_flag(GF_VALID,FALSE)
X`009`009else if s = 'g+' then set_global_flag(GF_VALID,TRUE)
X`009`009else if s = 'gv' then fix_view_global_flags
X`009`009else writeln ('Enter ? for help.');
X`009end;
X 'i' : fix_repair_index`009 (batch_mode);
X`009'j'`009: fix_repair_paths`009 (batch_mode);
X`009'k'`009: fix_codes`009`009 (batch_mode);
X`009'l'`009: fix_repair_location`009 (batch_mode);
X 'm' : fix_clear_monster`009 (batch_mode);
X`009'n'`009: fix_clear_quotas`009 (batch_mode);
X 'o' :`032
X`009begin
X`009 if s = 'o' then fix_clear_object(batch_mode)
X`009 else if s = 'ow' then fix_owner (batch_mode)
X`009 else writeln('Enter ? for help.');
X`009end;
X 'p' : fix_clear_player`009 (batch_mode);
X 'r' : fix_clear_room`009 (batch_mode);
X 's' :`032
X`009begin
X`009 if s = 's' then fix_clear_password`009 (batch_mode)
X`009 else if s = 'sp' then fix_clear_spell (batch_mode)
X`009 else writeln('Enter ? for help.');
X`009end;
X 'v' : system_view;
X 'h','?' : fix_help;
X 'e' : done := true;
X 'q' : begin
X`009`009`009fix := false;
X`009`009`009done := true;
X`009`009end;
X otherwise writeln ('Use ? for help');
X end; `123 case `125
X until done
Xend;
X
Xfunction batch (file_name: string): boolean;
Xvar line: string;
X pos,errorcode: integer;
X batch_file: text;
X quit: boolean;
Xbegin
X batch := true;
X open(batch_file,file_name,history := readonly, error := continue);
X quit := false;
X errorcode := status(batch_file);
X if errorcode <> 0 then begin
X`009case errorcode of
X`009 -1: `123 PAS$K_EOF `125 writeln('Batch file is empty.');
X`009 3: `123 PAS$K_FILNOTFOU `125 writeln('Batch file not foud.');
X`009 4: `123 PAS$K_INVFILSYN `125 writeln('Illegal name of batch file.')
V;
X`009 otherwise writeln('Can''t open batch file, error code (status): ',
X`009`009errorcode:1);
X`009end; `123 case `125
X`009quit := true;
X end else begin
X`009reset(batch_file);
X`009while not quit and not eof(batch_file) do begin
X`009 readln(batch_file,line);
X`009 writeln(line);
X`009 if line > '' then begin
X`009`009pos := index(line,'!');
X`009`009if pos > 0 then line := substr(line,1,pos-1);
X`009 end;
X`009 if line > '' then quit := not fix (line);
X`009end;
X end;
X batch := not quit;
Xend; `123 batch `125
X
XBEGIN
X Get_Environment;
X
X if not lookup_class(system_id,'system') then
X`009writeln('%error in main program: system');
X if not lookup_class(public_id,'public') then
X`009writeln('%error in main program: public');
X if not lookup_class(disowned_id,'disowned') then
X`009writeln('%error in main program: disowned');
X
X rebuild_system := false;
X fix_system := false;
X
X Setup_Guts;
X userid := lowcase(get_userid);
X wizard := userid = MM_userid;
X Params;
X
X if open_database(false) then begin
X
X`009if rebuild_system then rebuild;
X
X`009if batch_system then batch(name);
X
X`009if fix_system then fix;
X
X`009close_database;
X end else writeln ('Can''t open database. Maybe someone is playing Monste
Vr.');
X
X Finish_Guts;
XEND.
X
$ CALL UNPACK MONSTER_REBUILD.PAS;14 1309722618
$ create/nolog 'f'
X/
$ CALL UNPACK MONSTER_WHO.DIF;1 47
$ create/nolog 'f'
X- 268, 278
X`123 write_debug moved to DATABASE.PAS `125
X/
$ CALL UNPACK PARSER.DIF;1 892696612
$ create/nolog 'f'
X/
$ CALL UNPACK PRIVUSERS.DIF;1 47
$ create/nolog 'f'
X/
$ CALL UNPACK QUEUE.DIF;1 47
$ create/nolog 'f'
X MONSTER Helsinki V 1.05
X -----------------------
X
X Monster, a multiplayer adventure game where the players create the
X world and make the rules.
X
X Derived from Rich Skrenta's Monster (from version 1).
X
X Includes programmable non-player characters (NPC) with own programming
X language - MDL (Monster Defination Language). Also rooms and objects
X can program with it (via so called hooks). NPCs are called to 'monster',
X all other MDL-objects are called to 'hook'.
X
XEnvironment: VMS V4.x (MONSTER_INSTALL.COM requires V5.x)
X PASCAL`032
X
XTHIS IS DELTA POSTING AGAIST VERSION 1.04
XVersion 1.04 is posted 14.6.1992
X
XNew to version 1.04:
X - MONSTER /BUILD and /DUMP commands now correct handle passwords
X of virual userids created by MONSTER/USER (you can't do
X text dump of database and build new database where password
X of virtual userids have saved in available)
X - MDL function 'or' accept now any number of parameters
X - MDL function 'and' accept now more than two parameters
X - New modules: VERSION.PAS (version number of monster)
X ALLOC.PAS
X - New image MONSTER_REBUILD.EXE - here is now commands:
X`009`009MONSTER/REBUILD
X`009`009MONSTER/FIX
X`009`009MONSTER/BATCH
X - Document have updated little
X
XNew in version 1.04 to version 1.03 (posted 24.11.1990):
X - Several bugfixes (of course)
X - New commands MONSTER/DUMP and MONSTER/BUILD (via MONSTER_DUMP.EXE)
X - Reading of keyboard and database polling starategy have rewrote -
X should cause smaller IO-load to system (new GUTS.PAS).
X - MDL -parser now writes offending line and points error position when`032
X it detects error in MDL-program.
X
XRunning delta:
X Get MONSTER Version 1.04 distribution
X Put logical name MONSTER104 to point that directory
X Create directory for sources of version 1.05`032
X Put logical name MONSTER105 to point that directory
X Go to directory where is this delta distribution
X execute UPDATE.COM:
X $ @UPDATE
X
X Go directory MONSTER105
X
X Compilation and installation - three possibility:
X1) Compile MONSTER_E.HLP
X $ LIBRARIAN/HELP/CREATE MONSTER_E MONSTER_E
X Read installation help
X $ HELP/LIBRARY=SYS$DISK:<>MONSTER_E Installation
X and follow help.
X2) Run installation-script
X $ @MONSTER_INSTALL
X and answer to questions.
X
X3) Compile with MMS (there if file MAKEFILE.)
X $ MMS ALL
X Install manually
X
X Send notice to me (Kari.Hurtta@Helsinki.Fi) if you get this
X working or if you have problems.
X
X- K E H
X( Kari.Hurtta@Helsinki.FI,
X hurtta@cc.Helsinki.FI,
X hurtta@cs.Helsinki.FI,
X HURTTA@FINUH.BITNET
X)
$ CALL UNPACK READ.ME;1 620791259
$ create/nolog 'f'
X/
$ CALL UNPACK RECEPTIONIST.DIF;1 47
$ create/nolog 'f'
X$ IF F$TRNLNm("MONSTER104") .eqs. "" .or. F$TRNLNM("MONSTER105") .eqs. ""
X$ THEN
X$ write sys$OUTPUT "Define MONSTER104 to point Monster Version 1.04"
X$ write sys$OUTPUT " distribution directory"
X$ write sys$OUTPUT "Create directory for Monster Version 1.05 and
X$ write SYS$OUTPUT " MONSTER105 to point that directory"
X$ ENDIF
X$ EDIT/SUM MONSTER104:BONE.MDL /UPDATE=SYS$DISK:<>BONE.DIF /OUTPUT=MO
VNSTER105:
X$ EDIT/SUM MONSTER104:CASTLE.DMP /UPDATE=SYS$DISK:<>CASTLE.DIF /OUTPUT=
VMONSTER105:
X$ EDIT/SUM MONSTER104:CLD.PROTO /UPDATE=SYS$DISK:<>CLD.DIF /OUTPUT=MON
VSTER105:
X$ EDIT/SUM MONSTER104:CLI.PAS /UPDATE=SYS$DISK:<>CLI.DIF /OUTPUT=MON
VSTER105:
X$ EDIT/SUM MONSTER104:COMMANDS.PAPER /UPDATE=SYS$DISK:<>COMMANDS.DIF /OUTPU
VT=MONSTER105:
X$ EDIT/SUM MONSTER104:CONVERT.BATCH /UPDATE=SYS$DISK:<>CONVERT.DIF /OUTPUT
V=MONSTER105:
X$ EDIT/SUM MONSTER104:CUSTOM.PAS /UPDATE=SYS$DISK:<>CUSTOM.DIF /OUTPUT=
VMONSTER105:
X$ EDIT/SUM MONSTER104:DATABASE.PAS /UPDATE=SYS$DISK:<>DATABASE.DIF /OUTPU
VT=MONSTER105:
X$ EDIT/SUM MONSTER104:DOG.MDL /UPDATE=SYS$DISK:<>DOG.DIF /OUTPUT=MON
VSTER105:
X$ EDIT/SUM MONSTER104:FIX.BATCH /UPDATE=SYS$DISK:<>FIX.DIF /OUTPUT=MON
VSTER105:
X$ EDIT/SUM MONSTER104:GLOBAL.PAS /UPDATE=SYS$DISK:<>GLOBAL.DIF /OUTPUT=
VMONSTER105:
X$ EDIT/SUM MONSTER104:GREAT_HALL.MDL /UPDATE=SYS$DISK:<>GREAT_HALL.DIF /OUT
VPUT=MONSTER105:
X$ EDIT/SUM MONSTER104:GUTS.PAS /UPDATE=SYS$DISK:<>GUTS.DIF /OUTPUT=MO
VNSTER105:
X$ EDIT/SUM MONSTER104:ILMOITUS.TXT /UPDATE=SYS$DISK:<>ILMOITUS.DIF /OUTPU
VT=MONSTER105:
X$ EDIT/SUM MONSTER104:INIT.PROTO /UPDATE=SYS$DISK:<>INIT.DIF /OUTPUT=MO
VNSTER105:
X$ EDIT/SUM MONSTER104:INTERPRETER.PAS /UPDATE=SYS$DISK:<>INTERPRETER.DIF /OU
VTPUT=MONSTER105:
X$ EDIT/SUM MONSTER104:KEYS.PAS /UPDATE=SYS$DISK:<>KEYS.DIF /OUTPUT=MO
VNSTER105:
X$ EDIT/SUM MONSTER104:MON.PAS /UPDATE=SYS$DISK:<>MON.DIF /OUTPUT=MON
VSTER105:
X$ EDIT/SUM MONSTER104:MONSTER.CLD /UPDATE=SYS$DISK:<>MONSTER.DI
VF /OUTPUT=MONSTER105:
X$ EDIT/SUM MONSTER104:MONSTER.HELP /UPDATE=SYS$DISK:<>MONSTER.DI
VF /OUTPUT=MONSTER105:
X$ EDIT/SUM MONSTER104:MONSTER.INIT /UPDATE=SYS$DISK:<>MONSTER.DI
VF /OUTPUT=MONSTER105:
X$ EDIT/SUM MONSTER104:MONSTER_DUMP.PAS /UPDATE=SYS$DISK:<>MONSTER_DU
VMP.DIF /OUTPUT=MONSTER105:
X$ EDIT/SUM MONSTER104:MONSTER_E.HLP /UPDATE=SYS$DISK:<>MONSTER_E.
VDIF /OUTPUT=MONSTER105:
X$ EDIT/SUM MONSTER104:MONSTER_INSTALL.COM /UPDATE=SYS$DISK:<>MONSTER_IN
VSTALL.DIF /OUTPUT=MONSTER105:
X$ EDIT/SUM MONSTER104:MONSTER_WHO.PAS /UPDATE=SYS$DISK:<>MONSTER_WH
VO.DIF /OUTPUT=MONSTER105:
X$ EDIT/SUM MONSTER104:PARSER.PAS /UPDATE=SYS$DISK:<>PARSER.DIF
V /OUTPUT=MONSTER105:
X$ EDIT/SUM MONSTER104:PRIVUSERS.PAS /UPDATE=SYS$DISK:<>PRIVUSERS.
VDIF /OUTPUT=MONSTER105:
X$ EDIT/SUM MONSTER104:QUEUE.PAS /UPDATE=SYS$DISK:<>QUEUE.DIF
V /OUTPUT=MONSTER105:
X$ EDIT/SUM MONSTER104:RECEPTIONIST.MDL /UPDATE=SYS$DISK:<>RECEPTIONI
VST.DIF /OUTPUT=MONSTER105:
X$ COPY/LOG ALLOC.PAS`009`009 MONSTER105:
X$ COPY/LOG VERSION.PAS MONSTER105:
X$ COPY/LOG MONSTER_REBUILD.PAS MONSTER105:
X$ COPY/LOG MAKEFILE. MONSTER105:
$ CALL UNPACK UPDATE.COM;3 660238337
$ create/nolog 'f'
X`091inherit ('GlobaL') `093
XMODULE Global;
X
XVAR
X `123 externally definated of this have in GLOBAL.PAS `125
X
X VERSION : `091global`093 string
X`009:= 'Monster Helsinki 1.05';
X DISTRIBUTED : `091global`093 string
X`009:= '1.7.1992';
X
XEND.
$ CALL UNPACK VERSION.PAS;8 1075601448
$ EXIT