home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / vmsnet / monhl104 / part07 < prev    next >
Text File  |  1992-08-02  |  44KB  |  1,387 lines

  1. Path: uunet!mcsun!news.funet.fi!hydra!klaava!hurtta
  2. From: Kari.Hurtta@Helsinki.FI (Kari E. Hurtta)
  3. Newsgroups: vmsnet.sources.games
  4. Subject: Monster Helsinki V 1.04 - part 07/32
  5. Keywords: Monster, a multiplayer adventure game
  6. Message-ID: <1992Jun13.231819.3342@klaava.Helsinki.FI>
  7. Date: 13 Jun 92 23:18:19 GMT
  8. Sender: hurtta@klaava.Helsinki.FI (Kari Hurtta)
  9. Followup-To: vmsnet.sources.d
  10. Organization: University of Helsinki
  11. Lines: 1374
  12.  
  13. Archieve-name: monster_helsinki_104/part07
  14. Author: Kari.Hurtta@Helsinki.FI
  15. Product: Monster Helsinki V 1.04
  16. Environment: VMS, Pascal
  17. Part: 07/32
  18.  
  19. -+-+-+-+-+-+-+-+ START OF PART 7 -+-+-+-+-+-+-+-+
  20. XEXITFROM%room of sentries
  21. XSLOT%4
  22. XTO%%%NULL%%
  23. XKIND%0
  24. XTOSLOT%0
  25. XDEFAULT*DESCLINE!
  26. XDEFAULT*BLOCK!
  27. XNULL*BLOCK!
  28. XDEFAULT*BLOCK!
  29. XDEFAULT*BLOCK!
  30. XNULL*BLOCK!
  31. XOBJREQ%%%NULL%%
  32. XALIAS%
  33. XREQVERB%F
  34. XREQALIAS%F
  35. XAUTOLOOK%T
  36. XEXITFROM%room of sentries
  37. XSLOT%5
  38. XTO%%%NULL%%
  39. XKIND%0
  40. XTOSLOT%0
  41. XDEFAULT*DESCLINE!
  42. XDEFAULT*BLOCK!
  43. XNULL*BLOCK!
  44. XDEFAULT*BLOCK!
  45. XDEFAULT*BLOCK!
  46. XNULL*BLOCK!
  47. XOBJREQ%%%NULL%%
  48. XALIAS%
  49. XREQVERB%F
  50. XREQALIAS%F
  51. XAUTOLOOK%T
  52. XEXITFROM%room of sentries
  53. XSLOT%6
  54. XTO%%%NULL%%
  55. XKIND%0
  56. XTOSLOT%0
  57. XDEFAULT*DESCLINE!
  58. XDEFAULT*BLOCK!
  59. XNULL*BLOCK!
  60. XDEFAULT*BLOCK!
  61. XDEFAULT*BLOCK!
  62. XNULL*BLOCK!
  63. XOBJREQ%%%NULL%%
  64. XALIAS%
  65. XREQVERB%F
  66. XREQALIAS%F
  67. XAUTOLOOK%T
  68. XOBJDROP%%%NULL%%
  69. XGRPLOC1%%%NULL%%
  70. XGRPLOC2%%%NULL%%
  71. XROOM2%under water 1
  72. XEXITFROM%under water 1
  73. XSLOT%1
  74. XTO%%%NULL%%
  75. XKIND%0
  76. XTOSLOT%0
  77. XDEFAULT*DESCLINE!
  78. XDEFAULT*BLOCK!
  79. XNULL*BLOCK!
  80. XDEFAULT*BLOCK!
  81. XDEFAULT*BLOCK!
  82. XNULL*BLOCK!
  83. XOBJREQ%%%NULL%%
  84. XALIAS%
  85. XREQVERB%F
  86. XREQALIAS%F
  87. XAUTOLOOK%T
  88. XEXITFROM%under water 1
  89. XSLOT%2
  90. XTO%under water 2
  91. XKIND%1
  92. XTOSLOT%1
  93. XDESCLINE%The tunnel continues both up and to the south.
  94. XDEFAULT*BLOCK!
  95. XNULL*BLOCK!
  96. XDESCLINE%# dived southwards.
  97. XDESCLINE%# arrived.
  98. XNULL*BLOCK!
  99. XOBJREQ%%%NULL%%
  100. XALIAS%
  101. XREQVERB%F
  102. XREQALIAS%F
  103. XAUTOLOOK%T
  104. XEXITFROM%under water 1
  105. XSLOT%3
  106. XTO%%%NULL%%
  107. XKIND%0
  108. XTOSLOT%0
  109. XDEFAULT*DESCLINE!
  110. XDEFAULT*BLOCK!
  111. XNULL*BLOCK!
  112. XDEFAULT*BLOCK!
  113. XDEFAULT*BLOCK!
  114. XNULL*BLOCK!
  115. XOBJREQ%%%NULL%%
  116. XALIAS%
  117. XREQVERB%F
  118. XREQALIAS%F
  119. XAUTOLOOK%T
  120. XEXITFROM%under water 1
  121. XSLOT%4
  122. XTO%%%NULL%%
  123. XKIND%0
  124. XTOSLOT%0
  125. XDEFAULT*DESCLINE!
  126. XDEFAULT*BLOCK!
  127. XNULL*BLOCK!
  128. XDEFAULT*BLOCK!
  129. XDEFAULT*BLOCK!
  130. XNULL*BLOCK!
  131. XOBJREQ%%%NULL%%
  132. XALIAS%
  133. XREQVERB%F
  134. XREQALIAS%F
  135. XAUTOLOOK%T
  136. XEXITFROM%under water 1
  137. XSLOT%5
  138. XTO%1st
  139. XKIND%1
  140. XTOSLOT%6
  141. XNULL*DESCLINE!
  142. XDEFAULT*BLOCK!
  143. XNULL*BLOCK!
  144. XDESCLINE%# dived up.
  145. XDESCLINE%# arrived.
  146. XNULL*BLOCK!
  147. XOBJREQ%%%NULL%%
  148. XALIAS%
  149. XREQVERB%F
  150. XREQALIAS%F
  151. XAUTOLOOK%T
  152. XEXITFROM%under water 1
  153. XSLOT%6
  154. XTO%%%NULL%%
  155. XKIND%0
  156. XTOSLOT%0
  157. XDEFAULT*DESCLINE!
  158. XDEFAULT*BLOCK!
  159. XNULL*BLOCK!
  160. XDEFAULT*BLOCK!
  161. XDEFAULT*BLOCK!
  162. XNULL*BLOCK!
  163. XOBJREQ%%%NULL%%
  164. XALIAS%
  165. XREQVERB%F
  166. XREQALIAS%F
  167. XAUTOLOOK%T
  168. XOBJDROP%%%NULL%%
  169. XGRPLOC1%%%NULL%%
  170. XGRPLOC2%%%NULL%%
  171. XROOM2%under water 2
  172. XEXITFROM%under water 2
  173. XSLOT%1
  174. XTO%under water 1
  175. XKIND%1
  176. XTOSLOT%2
  177. XNULL*DESCLINE!
  178. XDEFAULT*BLOCK!
  179. XNULL*BLOCK!
  180. XDESCLINE%# dived further to the north.
  181. XDESCLINE%# arrived.
  182. XNULL*BLOCK!
  183. XOBJREQ%%%NULL%%
  184. XALIAS%
  185. XREQVERB%F
  186. XREQALIAS%F
  187. XAUTOLOOK%T
  188. XEXITFROM%under water 2
  189. XSLOT%2
  190. XTO%under water 3
  191. XKIND%1
  192. XTOSLOT%1
  193. XDESCLINE%The tunnel continues both to the north and to the south.
  194. XDEFAULT*BLOCK!
  195. XNULL*BLOCK!
  196. XDESCLINE%# dived further southwards.
  197. XDESCLINE%# arrived.
  198. XNULL*BLOCK!
  199. XOBJREQ%%%NULL%%
  200. XALIAS%
  201. XREQVERB%F
  202. XREQALIAS%F
  203. XAUTOLOOK%T
  204. XEXITFROM%under water 2
  205. XSLOT%3
  206. XTO%%%NULL%%
  207. XKIND%0
  208. XTOSLOT%0
  209. XDEFAULT*DESCLINE!
  210. XDEFAULT*BLOCK!
  211. XNULL*BLOCK!
  212. XDEFAULT*BLOCK!
  213. XDEFAULT*BLOCK!
  214. XNULL*BLOCK!
  215. XOBJREQ%%%NULL%%
  216. XALIAS%
  217. XREQVERB%F
  218. XREQALIAS%F
  219. XAUTOLOOK%T
  220. XEXITFROM%under water 2
  221. XSLOT%4
  222. XTO%%%NULL%%
  223. XKIND%0
  224. XTOSLOT%0
  225. XDEFAULT*DESCLINE!
  226. XDEFAULT*BLOCK!
  227. XNULL*BLOCK!
  228. XDEFAULT*BLOCK!
  229. XDEFAULT*BLOCK!
  230. XNULL*BLOCK!
  231. XOBJREQ%%%NULL%%
  232. XALIAS%
  233. XREQVERB%F
  234. XREQALIAS%F
  235. XAUTOLOOK%T
  236. XEXITFROM%under water 2
  237. XSLOT%5
  238. XTO%%%NULL%%
  239. XKIND%0
  240. XTOSLOT%0
  241. XDEFAULT*DESCLINE!
  242. XDEFAULT*BLOCK!
  243. XNULL*BLOCK!
  244. XDEFAULT*BLOCK!
  245. XDEFAULT*BLOCK!
  246. XNULL*BLOCK!
  247. XOBJREQ%%%NULL%%
  248. XALIAS%
  249. XREQVERB%F
  250. XREQALIAS%F
  251. XAUTOLOOK%T
  252. XEXITFROM%under water 2
  253. XSLOT%6
  254. XTO%%%NULL%%
  255. XKIND%0
  256. XTOSLOT%0
  257. XDEFAULT*DESCLINE!
  258. XDEFAULT*BLOCK!
  259. XNULL*BLOCK!
  260. XDEFAULT*BLOCK!
  261. XDEFAULT*BLOCK!
  262. XNULL*BLOCK!
  263. XOBJREQ%%%NULL%%
  264. XALIAS%
  265. XREQVERB%F
  266. XREQALIAS%F
  267. XAUTOLOOK%T
  268. XOBJDROP%%%NULL%%
  269. XGRPLOC1%%%NULL%%
  270. XGRPLOC2%%%NULL%%
  271. XROOM2%under water 3
  272. XEXITFROM%under water 3
  273. XSLOT%1
  274. XTO%under water 2
  275. XKIND%1
  276. XTOSLOT%2
  277. XDESCLINE%The tunnel continues to the north.
  278. XDEFAULT*BLOCK!
  279. XNULL*BLOCK!
  280. XDESCLINE%# dived further.
  281. XDESCLINE%# arrived.
  282. XNULL*BLOCK!
  283. XOBJREQ%%%NULL%%
  284. XALIAS%
  285. XREQVERB%F
  286. XREQALIAS%F
  287. XAUTOLOOK%T
  288. XEXITFROM%under water 3
  289. XSLOT%2
  290. XTO%%%NULL%%
  291. XKIND%0
  292. XTOSLOT%0
  293. XDEFAULT*DESCLINE!
  294. XDEFAULT*BLOCK!
  295. XNULL*BLOCK!
  296. XDEFAULT*BLOCK!
  297. XDEFAULT*BLOCK!
  298. XNULL*BLOCK!
  299. XOBJREQ%%%NULL%%
  300. XALIAS%
  301. XREQVERB%F
  302. XREQALIAS%F
  303. XAUTOLOOK%T
  304. XEXITFROM%under water 3
  305. XSLOT%3
  306. XTO%%%NULL%%
  307. XKIND%0
  308. XTOSLOT%0
  309. XDEFAULT*DESCLINE!
  310. XDEFAULT*BLOCK!
  311. XNULL*BLOCK!
  312. XDEFAULT*BLOCK!
  313. XDEFAULT*BLOCK!
  314. XNULL*BLOCK!
  315. XOBJREQ%%%NULL%%
  316. XALIAS%
  317. XREQVERB%F
  318. XREQALIAS%F
  319. XAUTOLOOK%T
  320. XEXITFROM%under water 3
  321. XSLOT%4
  322. XTO%%%NULL%%
  323. XKIND%0
  324. XTOSLOT%0
  325. XDEFAULT*DESCLINE!
  326. XDEFAULT*BLOCK!
  327. XNULL*BLOCK!
  328. XDEFAULT*BLOCK!
  329. XDEFAULT*BLOCK!
  330. XNULL*BLOCK!
  331. XOBJREQ%%%NULL%%
  332. XALIAS%
  333. XREQVERB%F
  334. XREQALIAS%F
  335. XAUTOLOOK%T
  336. XEXITFROM%under water 3
  337. XSLOT%5
  338. XTO%bottom of well
  339. XKIND%1
  340. XTOSLOT%6
  341. XDESCLINE%A dim beam of light comes from the ceiling.
  342. XDEFAULT*BLOCK!
  343. XNULL*BLOCK!
  344. XDESCLINE%# swimmed up.
  345. XDESCLINE%# arrived.
  346. XNULL*BLOCK!
  347. XOBJREQ%%%NULL%%
  348. XALIAS%
  349. XREQVERB%F
  350. XREQALIAS%F
  351. XAUTOLOOK%T
  352. XEXITFROM%under water 3
  353. XSLOT%6
  354. XTO%%%NULL%%
  355. XKIND%0
  356. XTOSLOT%0
  357. XDEFAULT*DESCLINE!
  358. XDEFAULT*BLOCK!
  359. XNULL*BLOCK!
  360. XDEFAULT*BLOCK!
  361. XDEFAULT*BLOCK!
  362. XNULL*BLOCK!
  363. XOBJREQ%%%NULL%%
  364. XALIAS%
  365. XREQVERB%F
  366. XREQALIAS%F
  367. XAUTOLOOK%T
  368. XOBJDROP%%%NULL%%
  369. XGRPLOC1%%%NULL%%
  370. XGRPLOC2%%%NULL%%
  371. XGLOBAL%1
  372. XGBOOL%T
  373. XGLOBAL%2
  374. XGBOOL%T
  375. XGLOBAL%3
  376. XGBOOL%T
  377. XGLOBAL%4
  378. XSTART*BLOCK!
  379. XBLOCK%Welcome to Monster (multi user dungeon)
  380. XBLOCK%
  381. XBLOCK%        to the starter's CASTLE
  382. XBLOCK%
  383. XGLOBAL%5
  384. XSTART*BLOCK!
  385. XBLOCK%Welcome to Monster (multi user dungeon)
  386. XBLOCK%
  387. XBLOCK%        to the starter's CASTLE
  388. XBLOCK%
  389. XGLOBAL%6
  390. XNULL*MDL!
  391. $ CALL UNPACK CASTLE.DMP;3 2006464661
  392. $ create/nolog 'f'
  393. X!*************************************MONSTER*******************************
  394. V*******
  395. Xdefine syntax MONSTER_WHO
  396. X   image %image_dir%monster_who
  397. X   noqualifiers
  398. Xdefine syntax MONSTER_DUMP
  399. X   image %image_dir%monster_dump
  400. X   parameter P1
  401. X`009label = DUMP_FILE
  402. X`009prompt = "Dump file"
  403. X`009value(type=$file,required)
  404. Xdefine verb MONSTER
  405. X   image %image_dir%mon
  406. X   qualifier WHO
  407. X      nonnegatable
  408. X      syntax = MONSTER_WHO
  409. X   qualifier REBUILD
  410. X   qualifier FIX
  411. X   qualifier VERSION
  412. X   qualifier DEBUG
  413. X   qualifier REAL_USERID
  414. X      value(required)
  415. X   qualifier USERID
  416. X      value(required)
  417. X   qualifier BATCH
  418. X      value(required,type=$infile)
  419. X   qualifier START
  420. X   qualifier OUTPUT
  421. X      value(default="SYS$OUTPUT",type=$outfile)
  422. X   qualifier DUMP
  423. X      nonnegatable
  424. X      syntax = MONSTER_DUMP
  425. X   qualifier BUILD
  426. X      nonnegatable
  427. X      syntax = MONSTER_DUMP
  428. X   disallow any2 (REBUILD, FIX, REAL_USERID, USERID, BATCH, DUMP, BUILD)
  429. X   disallow ((OUTPUT or neg OUTPUT) and FIX)`032
  430. X   disallow (START and (BUILD or DUMP))
  431. $ CALL UNPACK CLD.PROTO;2 1732842641
  432. $ create/nolog 'f'
  433. X`091environment,inherit ('Global','Guts','Database')`093
  434. Xmodule cli (input, output);
  435. X
  436. Xconst
  437. X`009cli$_present`009= 261401;
  438. X`009cli$_absent`009= 229872;
  439. X`009cli$_negated`009= 229880;
  440. X`009cli$_defaulted`009= 261409;
  441. X`009ss$_normal`009= 1;
  442. X
  443. Xtype
  444. X`009word_unsigned`009= `091word`093 0..65535;
  445. X`009cond_value`009= `091long`093 unsigned;
  446. X
  447. Xvar
  448. X`009done`009`009: `091external`093 boolean;
  449. X`009userid`009`009: `091external`093 veryshortstring;
  450. X`009myname`009`009: `091external`093 shortstring;
  451. X`009wizard`009`009: `091external`093 boolean;
  452. X
  453. X`009output_file`009: `091global`093 string := 'SYS$OUTPUT';
  454. X
  455. Xfunction cli$get_value (%descr entity_desc: string;`032
  456. X`009`009`009%descr retdesc: string;
  457. X`009`009`009%ref retlength: word_unsigned): cond_value;
  458. X`009external;
  459. X
  460. Xfunction cli$present (%descr entity_desc: string): cond_value;
  461. X`009external;
  462. X
  463. Xprocedure rebuild_system;
  464. X`009external;
  465. X
  466. Xfunction fix_system (batch: string := ''): boolean;
  467. X`009external;
  468. X
  469. Xfunction lowcase (s: string): string;
  470. X`009external;
  471. X
  472. X`091global`093 procedure monster_version;
  473. Xbegin
  474. X`009`123 Don't take this out please... `125
  475. X`009writeln('Monster, a multiplayer adventure game where the players create
  476. V the world');
  477. X`009writeln('and make the rules.');
  478. X`009writeln;
  479. X`009writeln('VERSION:     Monster Helsinki 1.04');
  480. X`009writeln('DISTRIBUTED: 13.6.1992');
  481. X`009writeln;
  482. X`009writeln('Originally written by Rich Skrenta at Northwestern University,
  483. V 1988.');
  484. X        writeln;
  485. X`009writeln('         modified by Juha Laiho   at University of Helsinki,  1
  486. V988--89,');
  487. X`009writeln('                     Antti Leino  at University of Helsinki,  1
  488. V989,');
  489. X        writeln('                     Kari Hurtta  at University of Helsinki
  490. V,  1989--92.');
  491. X        writeln;
  492. X`009writeln('Monster''s programming language by Kari Hurtta.');
  493. Xend;
  494. X
  495. X
  496. Xfunction batch_system (file_name: string): boolean;
  497. Xvar line: string;
  498. X    pos,errorcode: integer;
  499. X    batch: text;
  500. X    quit: boolean;
  501. Xbegin
  502. X    batch_system := true;
  503. X    open(batch,file_name,history := readonly, error := continue);
  504. X    quit := false;
  505. X    errorcode := status(batch);
  506. X    if errorcode <> 0 then begin
  507. X`009case errorcode of
  508. X`009    -1: `123 PAS$K_EOF `125 writeln('Batch file is empty.');
  509. X`009    3:  `123 PAS$K_FILNOTFOU `125 writeln('Batch file not foud.');
  510. X`009    4:  `123 PAS$K_INVFILSYN `125 writeln('Illegal name of batch file.')
  511. V;
  512. X`009    otherwise writeln('Can''t open batch file, error code (status): ',
  513. X`009`009errorcode:1);
  514. X`009end; `123 case `125
  515. X`009quit := true;
  516. X    end else begin
  517. X`009reset(batch);
  518. X`009while not quit and not eof(batch) do begin
  519. X`009    readln(batch,line);
  520. X`009    writeln(line);
  521. X`009    if line > '' then begin
  522. X`009`009pos := index(line,'!');
  523. X`009`009if pos > 0 then line := substr(line,1,pos-1);
  524. X`009    end;
  525. X`009    if line > '' then quit := not fix_system(line);
  526. X`009end;
  527. X    end;
  528. X    batch_system := not quit;
  529. Xend; `123 batch system `125
  530. X
  531. X`091global`093 procedure very_prestart; `123 before procedure init `125
  532. Xvar
  533. X`009qualifier,
  534. X`009value,
  535. X`009s,file_name`009: string;
  536. X`009value_length`009: word_unsigned;
  537. X`009status1,
  538. X`009status2`009`009: cond_value;
  539. X
  540. X`009do_rebuild, do_fix, do_batch : boolean;
  541. Xbegin
  542. X    do_rebuild := false;
  543. X    do_fix := false;
  544. X    do_batch := false;
  545. X    file_name := '';
  546. X
  547. X`009qualifier := 'OUTPUT';
  548. X`009status1 := cli$present (qualifier);
  549. X`009if status1 = cli$_present then begin
  550. X`009    status2 := cli$get_value (qualifier, value, value_length);
  551. X`009    if status2 = ss$_normal then output_file := value
  552. X`009    else begin
  553. X`009`009writeln ('Something is wrong with /OUTPUT.');
  554. X`009`009done := true;
  555. X`009    end;
  556. X`009end else if status1 = cli$_negated then output_file := 'NLA0:';
  557. X
  558. X`009`123 for /OUTPUT and big terminal lines `125
  559. X`009if output_file > '' then begin
  560. X`009    close(output);
  561. X`009    open(output,output_file,new,terminal_line_len+80,DEFAULT := '.LOG');
  562. X`009    rewrite(output);
  563. X`009end;`032
  564. X
  565. X`009qualifier := 'REBUILD';
  566. X`009status1 := cli$present (qualifier);
  567. X`009if status1 = cli$_present then begin
  568. X`009`009if wizard then begin
  569. X`009`009`009`123 Must use 'wizard' here, because at this spot
  570. X`009`009`009  the priv'd users always have privd:=false, but
  571. X`009`009`009  wizard:=true`009`009`009`009`009 `125
  572. X`009`009`009`123 Nowadays even that is incorrect. 'Wizard'
  573. X`009`009`009  denotes rebuilding rights. `009leino@finuha`009`125
  574. X`009`009`009if REBUILD_OK then begin
  575. X`009`009`009`009writeln('Do you really want to destroy the entire universe?'
  576. V);
  577. X`009`009`009`009readln(s);
  578. X`009`009`009`009if length(s) > 0 then
  579. X`009`009`009`009`009if substr(lowcase(s),1,1) = 'y' then
  580. X`009`009`009`009`009`009do_rebuild := true;
  581. X`009`009`009end else
  582. X`009`009`009`009writeln('REBUILD is disabled.');
  583. X`009`009`009`009done := true;
  584. X`009`009end else
  585. X`009`009`009writeln ('Only the Monster Manager may REBUILD.');
  586. X`009end;
  587. X
  588. X`009qualifier := 'FIX';
  589. X`009status1 := cli$present (qualifier);
  590. X`009if status1 = cli$_present then begin
  591. X`009`009if wizard then do_fix := true`009`123 hurtta@finuh `125
  592. X`009`009else writeln ('Only the Monster Manager may fix database.');
  593. X`009end;
  594. X
  595. X`009qualifier := 'BATCH';
  596. X`009status1 := cli$present (qualifier);
  597. X`009if status1 = cli$_present then begin
  598. X`009    if userid = MM_userid then begin
  599. X`009`009status2 := cli$get_value (qualifier, value, value_length);
  600. X`009`009if status2 = ss$_normal then begin
  601. X`009`009    file_name := value;
  602. X`009`009    do_batch := true `123 hurtta@finuh `125
  603. X`009`009end else begin
  604. X`009`009    writeln ('Something is wrong with BATCH.');
  605. X`009`009    done := true;
  606. X`009`009end;
  607. X`009    end else begin
  608. X`009`009writeln ('You may not batch database.');
  609. X`009`009done := true;
  610. X`009    end;
  611. X`009end;
  612. X
  613. X`009qualifier := 'DEBUG';
  614. X`009status1 := cli$present (qualifier);
  615. X`009if status1 = cli$_present then begin
  616. X`009    if gen_debug then debug := true
  617. X`009    else if userid = MM_userid then debug := true
  618. X`009    else begin
  619. X`009`009writeln ('You may not use /DEBUG.');
  620. X`009`009debug := false
  621. X`009    end
  622. X`009end else debug := false;
  623. X   `032
  624. X    if do_rebuild or do_fix or do_batch then begin   `032
  625. X`009if open_database(playing := false) then begin
  626. X`009    writeln('Database locked (file level lock).');
  627. X`009    if do_rebuild then rebuild_system;
  628. X`009    if do_fix then done := not fix_system;
  629. X`009    if do_batch then done := not batch_system(file_name);
  630. X`009    close_database;
  631. X`009    writeln('Database freed (file level lock).');
  632. X`009end else begin
  633. X`009    writeln('Can''t lock database. Someone is playing Monster.');
  634. X`009    done := true;
  635. X`009end;
  636. X    end;
  637. X
  638. Xend;
  639. X
  640. X  `032
  641. X`091global`093 procedure prestart;
  642. Xvar
  643. X`009qualifier,
  644. X`009value,
  645. X`009s`009`009: string;
  646. X`009value_length`009: word_unsigned;
  647. X`009status1,
  648. X`009status2`009`009: cond_value;
  649. X
  650. Xbegin
  651. X
  652. X`009qualifier := 'VERSION';
  653. X`009status1 := cli$present (qualifier);
  654. X`009if status1 = cli$_present then monster_version;
  655. X
  656. X`009qualifier := 'REAL_USERID';
  657. X`009status1 := cli$present (qualifier);
  658. X`009if status1 = cli$_present then begin
  659. X`009`009status2 := cli$get_value (qualifier, value, value_length);
  660. X`009`009if status2 = ss$_normal then begin
  661. X`009`009`009if (userid <> lowcase(value)) then begin
  662. X`009`009 `009`009if (userid = MM_userid) then begin
  663. X`009`009`009`009`009userid := lowcase(value);   `123 hurtta@finuh `125
  664. X`009`009`009`009`009wizard := false;
  665. X`009 `009`009`009end else begin
  666. X`009`009`009`009`009writeln ('You may not pose as another player.');
  667. X `009`009`009`009`009done := true;
  668. X`009`009`009`009end;
  669. X`009`009`009end else begin
  670. X`009`009`009`009writeln('Do you find it interesting to pose as yourself?');
  671. X`009`009`009end;
  672. X`009`009end else begin
  673. X`009`009`009writeln ('Something is wrong with /REAL_USERID.');
  674. X`009`009`009done := true;
  675. X`009`009end;
  676. X`009end;
  677. X
  678. X`009qualifier := 'USERID';
  679. X`009status1 := cli$present (qualifier);
  680. X`009if status1 = cli$_present then begin
  681. X`009`009status2 := cli$get_value (qualifier, value, value_length);
  682. X`009`009if status2 = ss$_normal then begin
  683. X`009`009`009s := lowcase(value);`009     `123 hurtta@finuh `125
  684. X`009`009`009if s.length > veryshortlen-4 then begin
  685. X`009`009`009`009s := substr (s, 1, veryshortlen-4);
  686. X`009`009`009`009writeln ('Userid truncated to ', s, ', sorry.');
  687. X`009`009`009end;
  688. X`009`009`009userid := '"' + s + '"';
  689. X`009`009`009myname := s;
  690. X`009`009`009if (myname`0911`093 >= 'a') and (myname`0911`093 <= 'z') then be
  691. Vgin
  692. X`009`009`009    myname`0911`093 :=`032
  693. X`009`009`009`009chr (ord ('A') +`032
  694. X`009`009`009`009ord (myname`0911`093) - ord ('a'));
  695. X`009`009`009end;
  696. X`009`009end else begin
  697. X`009`009`009writeln ('Something is wrong with /USERID.');
  698. X`009`009`009done := true;
  699. X`009`009end;
  700. X`009end;
  701. X
  702. X`009qualifier := 'START';
  703. X`009status1 := cli$present (qualifier);
  704. X`009if status1 = cli$_present then done := false
  705. X`009else if status1 = cli$_negated then done := true;
  706. X
  707. Xend;
  708. X
  709. X
  710. Xend.
  711. $ CALL UNPACK CLI.PAS;74 1750232940
  712. $ create/nolog 'f'
  713. XSYNTAX:`009function`009->`009name (p) / name (p,p) / name (p,p,p) /
  714. X`009`009`009`009name (p,...)
  715. X
  716. X`009name `009`009->`009fname /
  717. X`009`009`009`009GOSUB label /`032
  718. X`009`009`009`009DEFINE variable /`032
  719. X`009`009`009`009SET variable /`032
  720. X`009`009`009`009LABEL label /
  721. X`009`009`009`009SUBMIT label /
  722. X`009`009`009`009FOR variable
  723. X
  724. X`009label`009`009->`009list of words
  725. X
  726. X`009p`009`009->`009function / const / variable
  727. X
  728. X`009const`009`009->`009"some text" /
  729. X`009`009`009`009"some text"&
  730. X`009`009`009`009const
  731. X
  732. X`009fname`009`009->`009+ / = / == / === / inv / pinv / players /
  733. X`009`009`009`009objects / get / pget / drop / pdrop /
  734. X`009`009`009`009and / or / move / pmove / pprint /
  735. X`009`009`009`009print / oprint / if / where / null /
  736. X`009`009`009`009attack / not / random / strip /
  737. X                                experience / set experience / pluss /
  738. X`009`009`009`009difference / times / quotient /
  739. X`009`009`009`009set state / get state / less / number /
  740. X`009`009`009`009health / all objects / all players /`032
  741. X`009`009`009`009all rooms / control / include / exclude /
  742. X`009`009`009`009get remote state / set remote state /
  743. X`009`009`009`009remote objects / remote players / heal /
  744. X`009`009`009`009duplicate / pduplicate / destroy / pdestroy /
  745. X`009`009`009`009string head / string tail / head / tail /
  746. X`009`009`009`009lookup object / lookup player / lookup room /
  747. X`009`009`009`009parse object / parse player / parse room /
  748. X`009`009`009`009privilege / userid / pprint raw / print raw /
  749. X`009`009`009`009oprint raw / print null / mheal / mattack /
  750. X`009`009`009`009list / lookup direction / get global flag /
  751. X                                spell level / set spell level
  752. X
  753. X`009program`009`009->`009sentence +
  754. X
  755. X
  756. X`009sentence`009->`009function /
  757. X`009`009`009`009- function
  758. X
  759. XComments start with ! and end to end of line. ! isn't comment character insi
  760. Vde
  761. Xconst.
  762. X
  763. XSummary:`009+`009concatenate all parameters
  764. X`009`009=`009compare two parameters
  765. X`009`009==`009compare two parameters with spaces padding
  766. X`009`009===`009compare two parameyers with spaces compressing`032
  767. X`009`009`009`009and characters turning lowcase
  768. X`009`009inv`009inventory of monster
  769. X`009`009pinv`009inventory of player
  770. X`009`009players`009list players in room
  771. X`009`009objects`009list items in room
  772. X`009`009get`009monster get items (defined by parameter) from ground
  773. X`009`009pget`009player get items (defined by parameter) from ground
  774. X`009`009drop`009monster drop (defined by parameter) items to ground
  775. X`009`009pdrop`009player drop items (defined by parameter) items to ground
  776. X`009`009and`009select the common elements of two parameters
  777. X`009`009or `009select all elements from two parameters
  778. X`009`009move`009monster jump to some room (defined by parameter)
  779. X`009`009pmove`009player jump to some room (defined by parameter)
  780. X`009`009pprint`009print message to players`032
  781. X`009`009pprint raw`009(same)
  782. X`009`009print`009print message to all players in the same room
  783. X`009`009`009`009as monster
  784. X`009`009print raw`009(same)
  785. X`009`009oprint`009the same as print, but do not print to the
  786. X                                original player (victim)
  787. X`009`009oprint raw`009(same)
  788. X`009`009print null`009run text through print -formatter
  789. X`009`009if`009eval second or third parameter according to
  790. X`009`009`009`009first parameter
  791. X`009`009where`009room of any player or monster
  792. X`009`009null`009eval all parameters, but do not return anything
  793. X`009`009attack`009decrease player's force
  794. X`009`009heal`009increase player's force
  795. X`009`009mattack`009decrease monster's force
  796. X`009`009mheal`009increase monster's force
  797. X`009`009not`009return nothing, if parameter is empty, else return
  798. X`009`009`009`009text TRUE
  799. X`009`009random`009select one item (object) from item's (object's) list
  800. X`009`009strip`009remove all other characters except letters a - z and`032
  801. X`009`009`009`009A - Z and numbers from parameter `032
  802. X`009`009`009`009and return result, upper case converted to`032
  803. X`009`009`009`009lower
  804. X`009`009experience`009return experience of any player
  805. X`009`009set experience`009set player experience
  806. X`009`009plus`009calculate integer value`032
  807. X`009`009`009`009first parameter + second parameter
  808. X`009`009difference`009calculate integer value
  809. X`009`009`009`009first parameter - second parameter
  810. X`009`009times`009calculate integer value
  811. X`009`009`009`009first parameter * second parameter
  812. X
  813. X`009`009quotient`009calculate integer value
  814. X`009`009`009`009first parameter div second parameter
  815. X`009`009get state`009get value of permanent code variable
  816. X`009`009set state`009set value of permanent code variable
  817. X`009`009get global flag`009read value of given flags
  818. X`009`009less`009return TRUE if first value is lower than second value
  819. X`009`009number`009return value of parameter if parameter is integer
  820. X`009`009health  return health of any player
  821. X`009`009set experience`009set players's experience
  822. X`009`009all players`009list players and monsters of universe
  823. X`009`009all objects`009list objects of universe
  824. X`009`009all rooms`009list rooms of universe
  825. X`009`009control`009shift control to monster named in first`032
  826. X`009`009`009parameter during evaluating second parameter
  827. X`009`009include`009return second parameter if first parameter
  828. X`009`009`009includes second parameter
  829. X`009`009exclude`009return the atoms of first parameter, excluding
  830. X`009`009`009those in second parameter
  831. X`009`009get remote state`009get value of permanent code
  832. X`009`009`009`009`009variable of certain monster, specified
  833. X`009`009`009`009`009by first parameter
  834. X`009`009set remote state`009set value of permanent code
  835. X`009`009`009`009`009variable of certain monster, specified
  836. X`009`009`009`009`009by first parameter
  837. X`009`009remote objects`009list items in certain room, specified by first
  838. X`009`009`009`009parameter
  839. X`009`009remote players`009list players in certain room, specified by`032
  840. X`009`009`009`009first parameter
  841. X`009`009duplicate`009monster make items to monster's inventory
  842. X`009`009`009`009(order by parameter)
  843. X`009`009pduplicate `009monster make items to player's inventory
  844. X`009`009`009`009(order by parameter)
  845. X`009`009destroy`009`009monster destroy items from monster's inventory
  846. X`009`009`009`009(order by parameter)
  847. X`009`009pdestroy`009monster destroy items from player's inventory
  848. X`009`009`009`009(order by parameter)
  849. X`009`009string head`009return first word of parameter
  850. X`009`009string tail`009return parameter excluding first word
  851. X`009`009head`009`009return first item of parameter
  852. X`009`009tail`009`009return parameter excluding first item
  853. X`009`009lookup player`009fill parameter's player names
  854. X`009`009lookup room`009fill parameter's room names
  855. X`009`009lookup object`009fill parameter's object names
  856. X`009`009lookup direction`009fill parameter's direction names
  857. X`009`009parse player`009parsing player name (with joker)
  858. X`009`009parse room`009parsing room name (with joker)
  859. X`009`009parse object`009parsing object name (with joker)
  860. X`009`009privilege`009check given privileges (second parameter)
  861. X`009`009`009`009`009of any player (first parameter)
  862. X`009`009userid`009`009give userid of players
  863. X`009`009list`009        concentenate list of parameters
  864. X`009`009spell level`009return spell level of summoner`032
  865. X`009`009`009`009`009of current spell
  866. X`009`009set spell level`009set spell level of summoner (or learner)
  867. X`009`009`009`009`009of current spell
  868. X
  869. XThe commands do not print anything except:
  870. X`009pdrop`009`009may print unwear or unwield meassage
  871. X`009pdestroy`009may print unwear or unwield meassage
  872. X`009print`009`009message to players
  873. X`009print raw`009message to players
  874. X`009pprint`009`009message to victim
  875. X`009pprint raw`009message to victim
  876. X`009oprint`009`009message to players except victim
  877. X`009oprint raw`009message to players except victim
  878. X
  879. XThe following commands require that monster is in privileged mode:
  880. X`009pget`009`009all cases
  881. X`009pdrop`009`009all cases
  882. X`009pmove`009`009all cases
  883. X`009
  884. X`009`009`009pmove requires that monster has poof privilege
  885. X`009`009`009(or requires that code is spell mode)
  886. X`009`009`009if target isn't by monster's owner or public.
  887. X
  888. X`009`009`009move requires that monster has poof privilege
  889. X`009`009`009(or requires that code is spell mode)
  890. X`009`009`009if target isn't by monster's owner or public.
  891. X
  892. X`009heal`009`009all cases
  893. X
  894. X`009set experience  requires that monster has experience privilege,
  895. X`009`009`009experience of owner cannot be set
  896. X
  897. X`009control`009`009can't shift control from one owner's monster to`032
  898. X`009`009`009other owner's monster
  899. X
  900. X`009get remote state`009requires that monster's owner is owner
  901. X`009`009`009`009of current code, or that monster is public
  902. X`009`009`009`009and current monster has owner privilege
  903. X
  904. X`009set remote state`009requires that monster's owner is owner
  905. X`009`009`009`009of current code, or that monster is public
  906. X`009`009`009`009and current monster has owner privilege
  907. X
  908. X`009pduplicate`009all cases
  909. X`009`009`009requires that monster has owner privilege`032
  910. X`009`009`009(or requires that code is spell mode)
  911. X`009`009`009if object not owned by owner of current code
  912. X`009`009`009
  913. X`009`009`009duplicate requires that monster has owner privilege`032
  914. X`009`009`009(or requires that code is spell mode)
  915. X`009`009`009if object not owned by owner of current code
  916. X
  917. X`009pdestroy`009all cases
  918. X`009`009`009requires that monster has owner privilege`032
  919. X`009`009`009(or requires that code is spell mode)
  920. X`009`009`009if object not owned by owner of current code
  921. X`009
  922. X`009`009`009destroy requires that monster has owner privilege`032
  923. X`009`009`009(or requires that code is spell mode)
  924. X`009`009`009if object not owned by owner of current code
  925. X
  926. X`009`009`009userid requires that monster has experience privilege
  927. X
  928. X`009mattack `009all cases
  929. X`009`009`009mattack requires that the monster has manager`032
  930. X`009`009`009privilege if the controlled monster or the`032
  931. X`009`009`009player isn't in the same room as the target monster
  932. X
  933. X`009mheal `009`009all cases
  934. X`009`009`009mheal requires that monster has also manager privilege
  935. X`009`009`009for self healing
  936. X`009`009`009mattack requires that the monster has manager`032
  937. X`009`009`009privilege if the controlled monster or the`032
  938. X`009`009`009player isn't in the same room as the target monster
  939. X
  940. X`009`009`009attack: monster's level limit attack power
  941. X
  942. XThe parameters of the following commands are object's (or other) list:
  943. X`009and,or,get,pget,drop,pdrop,exclude,duplicate,pduplicate,
  944. X`009destroy,pdestroy,head,tail,lookup room,lookup object,
  945. X`009lookup object,lookup direction, privilege(only second parameter),
  946. X`009userid, list, get global flag
  947. X
  948. XThe following commands return object's (or other) list:
  949. X`009and,or,get,pget,drop,pdrop,inv,pinv,players,objects,all objects,
  950. X`009all players,all rooms,exclude,remote players,remote objects,
  951. X`009duplicate,pduplicate,destroy,pdestroy,lookup room,
  952. X`009lookup object,lookup player,lookup direction,
  953. X`009parse object,parse room,parse player,
  954. X`009experience,userid,list, get global flag
  955. X
  956. XThe following commands return a numeric value:
  957. X`009attack,experience,set experience,plus,difference,times,quotient,
  958. X`009health,number,heal,mattack,mheal, spell level,
  959. X`009set spell level
  960. X
  961. XThe following commands return TRUE or null string:
  962. X`009not, less, get global flag (if parameter isn't list)
  963. X
  964. XExample of object's list:
  965. X`009shovel, hat, ruby, note
  966. X
  967. XReturn:`009`009+`009concatenated parameters
  968. X`009`009=`009"" or parameter
  969. X`009`009==`009"" or parameter
  970. X`009`009===`009"" or parameter (in lowcase)
  971. X`009`009inv`009monster's inventory list`009`009> item list
  972. X`009`009pinv`009player's inventory list`009`009`009> item list
  973. X`009`009players`009list of players in room`009`009`009> item list
  974. X`009`009objects`009list of objects in room`009`009`009> item list
  975. X`009`009get`009succesfully taken objects`009`009> item list
  976. X`009`009pget`009succesfully taken objects`009`009> item list
  977. X`009`009drop`009succesfully dropped objects`009`009> item list
  978. X`009`009pdrop`009succesfully dropped objects`009`009> item list
  979. X`009`009and`009`009`009`009`009`009> item list
  980. X`009`009or`009union of parameters`009`009`009> item list
  981. X`009`009move`009room name if succesfully, else ""
  982. X`009`009pmove`009room name if succesfully, else ""
  983. X`009`009pprint`009message (parameters)
  984. X`009`009print`009message (parameters)
  985. X`009`009oprint`009message (parameters)
  986. X`009`009pprint raw`009message(parameters)
  987. X`009`009print raw`009message(parameters)
  988. X`009`009oprint raw`009message(parameters)
  989. X`009`009print null`009'message'(parameters)
  990. X`009`009if`009second or third parameter
  991. X`009`009where`009room name
  992. X`009`009not`009"" or "TRUE"
  993. X`009`009random`009item from item list
  994. X`009`009strip`009stripped parameter
  995. X`009`009attack`009used attack power, will be lower than
  996. X`009`009`009`009parameter's value`009> numeric value
  997. X`009`009heal`009parameter's value`009`009> numeric value
  998. X`009`009mattack`009second parameter's value`009> numeric value
  999. X`009`009mheal`009second parameter's value`009> numeric value
  1000. X`009`009set experience`009parameter's value`009> numeric value
  1001. X`009`009experience `009experience of given player > numeric value
  1002. X`009`009plus`009`009first + second`009`009> numeric value
  1003. X`009`009difference`009first - second`009`009> numeric value
  1004. X`009`009quotient`009first div second`009> numeric value
  1005. X`009`009get state`009permanent variable
  1006. X`009`009set state`009parameter's value
  1007. X`009`009get global flag`009List of TRUEs`009`009`009> item list
  1008. X`009`009less`009"" or "TRUE"
  1009. X`009`009number`009"" or parameter's value`009`009> numeric value
  1010. X`009`009health`009health of given player`009`009> numeric value
  1011. X`009`009set experience`009parameter's value`009> numeric value
  1012. X`009`009all players`009list of players`009`009`009> item list`032
  1013. X`009`009all rooms`009list of rooms`009`009`009> item list
  1014. X`009`009all objects`009list of objects`009`009`009> item list`032
  1015. X`009`009control`009second parameter
  1016. X`009`009include`009second parameter  or ""`032
  1017. X`009`009exclude`009unmatched items from first parameter`009> item list
  1018. X`009`009get remote state`009permanent variable
  1019. X`009`009set remote state`009(second) parameter's value
  1020. X`009`009remote players`009list of players of certain room`009> item list
  1021. X`009`009remote objects`009list of objects of certain room`009> item list
  1022. X`009`009duplicate`009succesfully made objects`009> item list
  1023. X`009`009pduplicate`009succesfully made objects`009> item list
  1024. X`009`009destroy`009`009succesfully destroyed objects`009> item list
  1025. X`009`009pdestroy`009succesfully destroyed objects`009> item list
  1026. X`009`009string head`009head of string parameter`032
  1027. X`009`009string tail`009tail of string parameter
  1028. X`009`009head`009`009head of list parameter
  1029. X`009`009tail`009`009tail of list parameter       (> item list)
  1030. X`009`009privilege`009privilege list`009`009`009> item list
  1031. X`009`009parse player`009player list`009`009`009> item list
  1032. X`009`009parse object`009object list`009`009`009> item list
  1033. X`009`009parse room`009room list`009`009`009> item list
  1034. X`009`009userid`009`009userid list`009`009`009> item list
  1035. X`009`009list`009concentenated lists`009`009`009> item list
  1036. X`009`009spell level`009summoner's spell level  > numeric value
  1037. X`009`009set spell level parameter's value       > numeric value
  1038. X                                                       `032
  1039. XThe following commands don't work with a hook, except by using a`032
  1040. Xcontrol function:
  1041. X`009`009inv
  1042. X`009`009get
  1043. X`009`009drop
  1044. X`009`009move             `032
  1045. X`009`009pduplicate
  1046. X`009`009pdestroy
  1047. X
  1048. X`009`009set experience`009`009(use control function)
  1049. X`009`009userid`009`009`009(use control function)
  1050. X
  1051. XSpecial commands:
  1052. X`009`009GOSUB
  1053. X`009`009LABEL
  1054. X`009`009DEFINE                                  `032
  1055. X`009`009SET
  1056. X`009`009SUBMIT
  1057. X`009`009FOR
  1058. X
  1059. XThe scope of variables is limited by DEFINE commands and executed GOSUB - LA
  1060. VBEL
  1061. Xcommands inside DEFINE commands. So the scope is defined at run-time.
  1062. X
  1063. XSUBMIT requires that the monster has manager privilege if the monster or the
  1064. Xprevious player isn't in the same room as the new player. The unit of delta
  1065. Xtime is uncertain.
  1066. X
  1067. XFOR evaluates the second parameter with every item of the first list paramet
  1068. Ver
  1069. X(it is assigned to variable) and returns that item when the result of the
  1070. Xevaluation wasn't null.
  1071. X
  1072. XDefault variables in all cases:
  1073. Xplayer name`009`009Player's personal name
  1074. Xmonster name`009`009Monster's name (when hook, value of this variable is "")
  1075. X`009`009`009(as the control function changes the controlled monster,
  1076. X`009`009`009 the value of this variable is also changed)
  1077. X
  1078. XLabels and default variables for Monster:
  1079. Xenter`009`009-`009`009`009entering room, start game or
  1080. X`009`009`009`009`009poof to room
  1081. Xleave`009`009target`009`009`009leaving room, quit game or
  1082. X`009`009`009`009`009poof from room
  1083. Xsay`009`009speech`009`009`009say something
  1084. Xattack`009`009-`009`009`009attacking to Monster
  1085. Xlook`009`009-`009`009`009look something in room
  1086. Xlook you`009-`009`009`009look monster
  1087. Xcommand`009`009command`009`009`009for Command Extension System
  1088. X
  1089. XLabels and default variables for hook of rooms:
  1090. Xstart`009`009-`009`009`009start game
  1091. Xenter`009`009-`009`009`009entering room
  1092. Xescaped`009`009-`009`009`009leaving room or poof from room
  1093. X`009`009`009`009`009activated when player is really leave
  1094. X`009`009`009`009`009room
  1095. Xleave`009`009target`009`009`009leaving room
  1096. Xpoof in`009`009-`009`009`009poof to room
  1097. Xpoof out`009target`009`009`009poof from room
  1098. Xsay`009`009speech`009`009`009say something
  1099. Xlook detail`009detail`009`009`009look detail in room
  1100. Xlook around`009-`009`009`009look around in room
  1101. Xcommand`009`009command`009`009`009for Command Extension System
  1102. Xwrong dir`009direction`009`009when user gives go <unmatched direction>
  1103. X
  1104. XLabels and default variables for hook of objects:
  1105. Xget fail`009-`009`009`009failing to get object
  1106. Xget succeed`009-`009`009`009getting object
  1107. Xdrop succeed`009-`009`009`009dropping object ( by drop -command )
  1108. Xdrop you`009-`009`009`009dropping object ( other reason )
  1109. Xuse succeed`009-`009`009`009using object
  1110. Xlook you`009-`009`009`009look object
  1111. Xcommand`009`009command`009`009`009for Command Extension System
  1112. Xstart`009`009-`009`009`009start game`032
  1113. Xenter`009`009-`009`009`009entering room
  1114. Xleave`009`009target`009`009`009leaving room
  1115. X
  1116. XLabels and default variables for spell's code:
  1117. Xsummon           -                       wictim execute this when
  1118. X                                           summoner attack's wictim
  1119. Xlearn           book name               when player reads book what
  1120. X                                           learn's spell (that code
  1121. X                                           must use set spell level for
  1122. X                                           this).
  1123. XIn spell there is defined variables spell name and summoner name.
  1124. X
  1125. X
  1126. XLabels and default variables for global code:
  1127. Xstart`009`009-`009`009`009start games
  1128. Xquit`009`009-`009`009`009quit games
  1129. X
  1130. XCommand Extension System:
  1131. X
  1132. XWhen the user types an invalid command, the following will happen:
  1133. X
  1134. X1)`009form of command is: <something>`032
  1135. X`009to hook of room, run label command
  1136. X`009the value of variable command is <something>
  1137. X
  1138. X2)`009form of command is: <something> <object name>
  1139. X`009to hook of object, run label command
  1140. X`009the value of variable command is <something>
  1141. X
  1142. X3)`009form of command is: <something> <monster name>
  1143. X`009to monster's code run label command
  1144. X`009the value of variable command is <something>
  1145. X`009
  1146. XParameters of functions:
  1147. X
  1148. X+ `009`009(<line 1>,...,<line n>)`032
  1149. X= `009`009(<line 1>,<line 2>)`032
  1150. X== `009`009(<line 1>,<line 2>)`032
  1151. X=== `009`009(<line 1>,<line 2>)`032
  1152. Xinv`009`009()`032
  1153. Xpinv`009`009()`032
  1154. Xplayers`009`009()`032
  1155. Xobjects`009`009()`032
  1156. Xget`009`009(<object list>)`032
  1157. Xpget`009`009(<object list>)`032
  1158. Xdrop`009`009(<object list>)`032
  1159. Xpdrop`009`009(<object list>)`032
  1160. Xand`009`009(<item list>,<item list>)`032
  1161. Xor`009`009(<item list>,<item list>)`032
  1162. Xmove`009`009(<room's name>)`032
  1163. Xpmove`009`009(<room's name>)`032
  1164. Xpprint`009`009(<message part 1>,...,<message part n>)`032
  1165. Xprint`009`009(<message part 1>,...,<message part n>)`032
  1166. Xoprint`009`009(<message part 1>,...,<message part n>)`032
  1167. Xpprint raw`009(<message part 1>,...,<message part n>)`032
  1168. Xprint raw`009(<message part 1>,...,<message part n>)`032
  1169. Xoprint raw`009(<message part 1>,...,<message part n>)`032
  1170. Xprint null`009(<message part 1>,...,<message part n>)`032
  1171. Xif `009`009(<p1>,<action 1>,<action 2>)`032
  1172. Xwhere`009`009(<monster's or player's name>)`032
  1173. Xnull`009`009(<action 1>,<action 2>,<action 3>,...,<action n>)`032
  1174. Xattack`009`009(<attack force: nr>)`032
  1175. Xnot`009`009(<p1>)
  1176. Xrandom`009`009(<item list>)`032
  1177. Xstrip`009`009(<string>)`032
  1178. Xexperience`009(<player's name>)`032
  1179. Xset experience`009(<player's new experience>)`032
  1180. Xplus`009`009(<p1: nr>,<p2: nr>)          `032
  1181. Xdifference`009(<p1: nr>,<p2: nr>)
  1182. Xtimes`009`009(<p1: nr>,<p2: nr>)
  1183. Xquotient`009(<p1: nr>,<p2: nr>)
  1184. Xget state`009()
  1185. Xset state`009(<string>)
  1186. Xget global flag`009(<flag list>)
  1187. Xless`009`009(<p1: nr>,<p2: nr>)
  1188. Xnumber`009`009(<p1: nr>)
  1189. Xhealth`009`009(<player's name>)
  1190. Xall players`009()
  1191. Xall objects`009()
  1192. Xall rooms`009()
  1193. Xcontrol`009`009(<monster's name>,<action>)
  1194. Xinclude`009`009(<string>,<substring>)
  1195. Xexclude`009`009(<item list>,<sub item list>)
  1196. Xremote object`009(<room name>)
  1197. Xremote players`009(<room name>)
  1198. Xheal`009`009(<healing amount: nr>)
  1199. Xduplicate`009(<object list>)
  1200. Xpduplicate`009(<object list>)
  1201. Xdestroy`009`009(<object list>)
  1202. Xpdestroy`009(<object list>)
  1203. Xstring head`009(<string>)
  1204. Xstring tail`009(<string>)
  1205. Xhead`009`009(<item list>)
  1206. Xtail`009`009(<item list>)
  1207. Xlookup object`009(<object list>)
  1208. Xlookup player`009(<player list>)
  1209. Xlookup room`009(<room list>)
  1210. Xlookup direction`009(<direction list>)
  1211. Xparse object`009(<parameter>)
  1212. Xparse player`009(<parameter>)
  1213. Xparse room`009(<parameter>)
  1214. Xexperience`009(<player name>,<privilege list>)
  1215. Xuserid`009`009(<player list>)
  1216. Xmheal`009`009(<monster name>,<heal amount: nr>)
  1217. Xmattack`009`009(<monster name>,<attck amont>: nr>)
  1218. Xlist`009`009(<item list 1>,...,<item list n>)
  1219. Xspell level     ()
  1220. Xset spell level (level number)
  1221. X
  1222. XLABEL <label>`009`009(<action 1>,...,<action n>)
  1223. XGOSUB <label>`009`009(<param 1>,...,<param n>)
  1224. XDEFINE <variable>`009(<action>)
  1225. XSET <variable>`009`009(<value>)
  1226. XSUBMIT <label>`009`009(<delta time>,<player's name>)
  1227. XFOR <variable>`009`009(<list>,<action>)
  1228. $ CALL UNPACK COMMANDS.PAPER;12 1851499723
  1229. $ create/nolog 'f'
  1230. X! That file convert database to new format
  1231. X! Usage: MONSTER/BATCH=CONVERT.BATCH
  1232. XM                                     ! Create MDL database
  1233. XA                                     ! Create privilege database
  1234. XB                                     ! Create health database
  1235. XS                                     ! Create password database
  1236. XGL                                    ! Create global flag database
  1237. XSP                                    ! Clear/create spell database.
  1238. X! Make some fix's to database !
  1239. XD                                     ! Reallocate descriptions
  1240. XI                                     ! Repair index file
  1241. XG                                     ! Calculate objects' number in existen
  1242. Vce
  1243. XJ                                     ! Repair paths
  1244. XN                                     ! Clear/create and recount quota datab
  1245. Vase.
  1246. XOW                                    ! Check owners of rooms, objects and M
  1247. VDLs
  1248. XGU                                    ! Mark monster active to global databa
  1249. Vse.
  1250. XG+                                    ! Mark monster database as valid.
  1251. X! Let's hope that's all !
  1252. XV                                     ! View database capacity
  1253. XGV                                    ! View global flags
  1254. X!
  1255. X!                       - Kari Hurtta (hurtta@finuh)
  1256. $ CALL UNPACK CONVERT.BATCH;6 1381040911
  1257. $ create/nolog 'f'
  1258. X`091 ENVIRONMENT, inherit ('Global','Guts','Database','Cli','Privusers','Par
  1259. Vser',
  1260. X`009`009`009'Interpreter','Queue') `093
  1261. XMODULE Custom ( Input, Output );
  1262. X`032
  1263. X`123+
  1264. XCOMPONENT: Modulin MON custom komennot on siiretty t`228nne.
  1265. X`032
  1266. XPROGRAM DESCRIPTION:
  1267. X`032
  1268. X    Peli MONSTER`032
  1269. X`032
  1270. XAUTHORS:
  1271. X`032
  1272. X    Kari Hurtta
  1273. X`032
  1274. XCREATION DATE: 29.9.1990
  1275. X`032
  1276. XDESIGN ISSUES:
  1277. X`032
  1278. X    Tarkoitus on pienent`228`228 tiedoston MON.PAS kokoa.
  1279. X`032
  1280. X`032
  1281. XMODIFICATION HISTORY:
  1282. X`032
  1283. X     Date     `124   Name  `124 Description
  1284. X--------------+---------+---------------------------------------------------
  1285. V----
  1286. X    5.10.1990 `124         `124 Spells
  1287. X    7.11.1990 `124         `124 Global descbibtions
  1288. X   24.01.1991 `124         `124 Look more exact value of status -funktion
  1289. X    6.05.1992 `124         `124 O_TRAP was leaven out from prog_kind
  1290. X-`125
  1291. X
  1292. Xvar system_id,disowned_id,public_id: `091global`093 shortstring;
  1293. X
  1294. X`009hiding : `091global`093 boolean := FALSE;`009  `123 is player hiding? `1
  1295. V25
  1296. X`009logged_act : `091global`093 boolean := FALSE;`009  `123 flag to indicate
  1297. V that a log_action
  1298. X`009`009`009`009`009  has been called, and the next call
  1299. X`009`009`009`009`009  to clear_command needs to clear the
  1300. X`009`009`009`009`009  action parms in the here roomrec `125
  1301. X
  1302. X
  1303. X
  1304. X`009userid: `091global`093 veryshortstring;`009`123 userid of this player `1
  1305. V25
  1306. X`009myslot: `091global`093 integer := 1;`009`123 here.people`091myslot`093..
  1307. V. is this player `125
  1308. X
  1309. X`009myname: `091global`093 shortstring;`009
  1310. X`009`009`009`009`123 personal name this player chose (setname) `125
  1311. X`009myexperience: `091global`093 integer;`009`123 how experienced I am `125
  1312. X`009mydisguise: `091global`093 integer;`009`123 what disguise I'm wearing `1
  1313. V25
  1314. X
  1315. X`032
  1316. X`091external`093
  1317. Xfunction put_token(room: integer;var aslot:integer;hidelev:integer := 0):boo
  1318. Vlean;
  1319. Xexternal;
  1320. X
  1321. Xprocedure do_program(object_name: string); forward;
  1322. X
  1323. Xprocedure do_y_altmsg;
  1324. Xforward;
  1325. X
  1326. Xprocedure do_group1;
  1327. Xforward;
  1328. X
  1329. Xprocedure do_group2;
  1330. Xforward;
  1331. X
  1332. Xprocedure custom_monster(name: string); forward;
  1333. X
  1334. X`091global`093 PROCEDURE custom_hook(var code: integer;
  1335. X`009`009`009owner: shortstring;
  1336. X`009`009`009default: string := '.MDL'); forward;
  1337. X
  1338. X`091global`093 FUNCTION  spell_owner(sid: integer): string;
  1339. Xvar tmp: intrec;
  1340. X    code: integer;
  1341. Xbegin
  1342. X    tmp := anint;
  1343. X    getint(N_SPELL);
  1344. X    freeint;
  1345. X    code := anint.int`091sid`093;
  1346. X    anint := tmp;
  1347. X    if code = 0 then begin
  1348. X`009writeln('%Error in spell_owner. Notify Monster Manager.');
  1349. X`009spell_owner := ''
  1350. X    end else spell_owner := monster_owner(code);
  1351. Xend; `123 spell_owner `125
  1352. X
  1353. X`091global`093 FUNCTION is_spell_owner(sid: integer;
  1354. X    public_ok: boolean := false): boolean;
  1355. Xvar owner: shortstring;
  1356. Xbegin
  1357. X    owner := spell_owner(sid);
  1358. X    if owner = userid then is_spell_owner := true
  1359. X    else if owner_priv and not (owner = system_id) then is_spell_owner := tr
  1360. Vue
  1361. X    else if manager_priv then is_spell_owner := true
  1362. X    else if public_ok and (owner = public_id) then is_spell_owner := true
  1363. X    else is_spell_owner := false;
  1364. Xend; `123 is_spell_owner `125
  1365. X
  1366. X
  1367. Xfunction trim_filename(name: shortstring): string;
  1368. Xvar i: integer;
  1369. X    def: string;
  1370. Xbegin
  1371. X    def := '';
  1372. X    for i := 1 to length(name) do`032
  1373. X`009if ('a' <= name`091i`093) and ('z' >= name`091i`093) then
  1374. X`009    def := def + chr(ord(name`091i`093) - ord('a') + ord('A'))
  1375. X`009else if ('A' <= name`091i`093) and ('Z' >= name`091i`093) then
  1376. X`009    def := def + name`091i`093
  1377. X`009else if (name`091i`093 = ' ') or (name`091i`093 = '_') then
  1378. X`009    def := def + '_';
  1379. X     def := def + '.MDL';
  1380. X     trim_filename := def;
  1381. Xend; `123 trim_filename `125
  1382. X
  1383. X`091global`093
  1384. Xfunction sysdate:string;
  1385. Xvar
  1386. +-+-+-+-+-+-+-+-  END  OF PART 7 +-+-+-+-+-+-+-+-
  1387.