home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 8 / amigaformatcd08.iso / screenplay / utilities / graal / graal.guide (.txt) < prev    next >
Amigaguide Document  |  1996-10-15  |  185KB  |  4,251 lines

  1. @database 002e4fd0-0
  2. @master olaf:graal.guide
  3. @$VER: 1.0
  4. @author "Per Thulin"
  5. @(c) "1995"
  6. @index HeddleyAutoIndex
  7. @remark Created with Heddley v1.1 (c) Edd Dumbill 1994
  8. @node "Main" ""
  9. @next "GG_INTRO"
  10.                             GRAAL ON-LINE REFERENCE  
  11.                             =======================
  12.                          2.0 beta  (c) Per Thulin 1996
  13.                             
  14.                                          
  15. Short
  16. Introduction
  17. " link "GG_INTRO" 0}        ========
  18. Machine
  19. Requirements
  20. " link "GG_Requirements" 0}        \      /
  21. version
  22. " link "News" 0}         |    |
  23. About
  24. Reference
  25. " link "GG_Reference" 0}         |    |
  26. Structure
  27. GRAAL
  28. " link "GG_STRUCTURE" 0}         |    |
  29. Syntax
  30. Conventions
  31. " link "GG_Syntax" 0}          \  /
  32. Limitations,
  33. Ranges,
  34. Reserved
  35. Numbers
  36. " link "GG_Limits" 0}           ||
  37. Special
  38. Characters
  39. Strings
  40. " link "GG_Vars" 0}          ====
  41. GRAAL
  42. player
  43. interface
  44. " link "GG_Interface" 0}
  45. Statements
  46. graal.main
  47. " link "GG_ST_MAIN" 0}
  48. Statements
  49. n.section
  50. files
  51. " link "GG_ST_SECT" 0}
  52. Statements
  53. n.room
  54. files
  55. " link "GG_ST_ROOM" 0}
  56. Conditions
  57. " link "GG_Conditions" 0}            
  58. Commands
  59. " link "GG_Commands" 0}
  60. Trouble-shooting
  61. " link "Troubleshooting" 0}
  62. @endnode
  63. @node "GG_INTRO" " A Very Short Introduction "
  64. @next "GG_Requirements"
  65. @prev "GG_INTRO"
  66. @{fg shine}@{bg fill}A Very Short Introduction@{fg text}@{bg back}
  67. What is GRAAL?
  68. GRAAL is a computer language that lets you create graphic adventures in
  69. "classic" format using no more than a text editor and a
  70. paint/animation
  71. package.
  72. If you want to see what the result may look like, just play the Olaf 1
  73. to which this guide is attached. Throughout this online reference, the
  74. files
  75. that make up the demo adventure are used to show working examples of
  76. how to
  77.  construct an adventure using all the available statements and
  78. commands.
  79. (Just make sure the @{b}graal.guide@{ub} file and all Olaf 1 demo files are in the
  80. drawer, otherwise the links from this guide to the script files don't
  81. work!)
  82. ------------------------------------------------------------------------
  83. @{i}NOTE@{ui}: The registered version of GRAAL contains some programming
  84. tools
  85. essential  for the serious adventure creator, for example
  86. devices to
  87. un-comment and encrypt your scripts to make it impossible to
  88. crack the game
  89. by looking at the files.
  90. However, the function of the freely distributable version is not
  91. limited
  92. any other way - you may create as large an adventure as you wish
  93. using
  94. the GRAAL program contained in the demo package, if you have the
  95. stamina
  96. perseverence to do so...!
  97. ------------------------------------------------------------------------
  98. @endnode
  99. @node "GG_Requirements" " Machine Requirements                  "
  100. @next "GG_Reference"
  101. @prev "GG_INTRO"
  102. @{fg highlight}@{bg fill}MACHINE REQUIREMENTS@{fg text}@{bg back}
  103. To develop GRAAL games, you need the following:
  104.  * A hard disk
  105.  * 2MB RAM
  106. The following is very much recommended:
  107.  * A machine with at least the speed of an A1200
  108.  * Fast RAM
  109. @endnode
  110. @node "News" " News in version 2                     "
  111. @{fg shine}@{bg fill}News in GRAAL 2@{fg text}@{bg back}
  112. Welcome to GRAAL 2, a massive addition to (and overhaul of) GRAAL 1.2.
  113. There are quite a number of new features and enhancements in this version of
  114. GRAAL. In the on-line reference, you will see the word *NEW* next to the
  115. short descriptions of many statements and commands, indicating they are
  116. either completely new or significantly enhanced.
  117. Be sure to read the README file for a walk-through of the new features and
  118. changes to the system, as well as a description of the bug fixes. Once I
  119. delved into the depths of GRAAL 1.2, I found bugs that could make your heart
  120. stop. I am certain that most have been erased now, although I am equally
  121. certain new ones have been introduced instead. Please bear with me and
  122. report them to 
  123. pethu@wmdata.com
  124. @endnode
  125. @node "GG_Reference" " About this Tutorial                   "
  126. @next "GG_STRUCTURE"
  127. @prev "GG_Requirements"
  128. @{fg shine}@{bg fill}About this Reference@{fg text}@{bg back}
  129. I recommend all developers to read the GRAAL Tutorial prior to emerging too
  130. deep into the art of GRAAL writing. The GRAAL Tutorial is included in the
  131. GRAAL 1.0 unregistered development package.
  132. Although it is possible to construct an adventure with no other information
  133. than the one given in this reference, it is not recommended. That said, Amos
  134. Pro users stand a better chance than others of succeeding witout too  much
  135. pain inflicted, because some Amos Pro concepts are used straight "off the
  136. shelf"  in GRAAL - for example, animation sequences, hotspots, and fades.
  137. @endnode
  138. @node "GG_STRUCTURE" " The Structure of a GRAAL Game "
  139. @next "GG_Syntax"
  140. @prev "GG_Reference"
  141. @{fg shine}@{bg fill}GRAAL script structure@{fg text}@{bg back}
  142. A GRAAL adventures is based on a number of script
  143. files,
  144. related
  145. other
  146. in the following way:
  147.                             +-------------+
  148.                             | graal.main  |
  149.                             +------+------+
  150.                                    |
  151.                 +------------------+----------------+
  152.                 |                                   |
  153.            +----+-----+                        +----+-----+
  154.            |n.section |         . . .          |n.section | 
  155.            +----+-----+                        +----+-----+
  156.                 |                                   |
  157.        +--------+--------+                  +---------------+
  158.        |        |        |                  |               |
  159.    +---+---++---+---++---+---+          +---+---+       +---+---+
  160.    |n.room ||n.room ||n.room |          |n.room |       |n.room |
  161.    +-------++-------++-------+          +-------+       +-------+
  162. There is always a @{"graal.main" link "GG_ST_MAIN" 0} file, describing the
  163. characteristics
  164. game and of the main character (which is the
  165. player
  166. controls
  167. and commands).
  168. The entire adventure is divided into locations or
  169. "rooms"
  170. called
  171.  in GRAAL. The specifics of each room is defined
  172. in a @{"n.room" link "GG_ST_ROOM" 0} file
  173. The rooms may be grouped into sections, as
  174. shown
  175. above. Each section has a
  176. @{"n.section" link "GG_ST_SECT" 0} file.
  177. The general idea is that if a player can issue a certain
  178. command
  179. certain thing in just one specific room, the GRAAL
  180. handle
  181. action
  182.  should be placed in the corresponding .room
  183. script file.
  184. action
  185.  occur anywhere in the section , the code is
  186. placed in
  187. .section
  188. file;
  189. and if
  190. the action is something that can  occur
  191. anywhere in
  192. adventure,
  193. it is
  194.  taken
  195.  care of in the graal.main file. 
  196. Whenever the player inputs a command, first the current
  197. scanned
  198. for appropriate action, then the section file,
  199. lastly
  200. graal.main
  201. file.
  202.  This is why the graal.main file should
  203. always
  204. contain
  205. general
  206. "safety
  207. nets" to
  208.  handle most of the totally
  209. off-the-wall
  210. generally stupid
  211. things
  212. a player
  213.  may try during the game!
  214. Apart from the three script file types above, there are two other
  215. types
  216. specific purposes:
  217. @{".scene" alink "1.scene/1.scene/main" 0} files, containing the commands making up an
  218. animated,
  219. non-interactive
  220. "cut-scene".
  221. @{".ptrn" alink "1.ptrn/main" 0} files, containing animation patterns too big and complex to
  222. code of a script file.
  223. @endnode
  224. @node "GG_Syntax" " Syntax Conventions "
  225. @next "GG_Limits"
  226. @prev "GG_STRUCTURE"
  227. @{fg shine}@{bg fill} GRAAL Syntax @{fg text}@{bg back}
  228. @{u}@{fg highlight}Script Syntax@{uu}@{fg text}
  229. Scripts can normally contain @{b}empty lines@{ub}, @{b}comment lines@{ub}, and @{b}statement
  230. lines@{ub}. (Exceptions are the @{b}.scene@{ub} files, which only contain commands, and
  231. @{b}.ptrn@{ub} files, which only contain animation patterns.)
  232. Comment lines always begin with the characters @{b}/*@{ub}.
  233. Statement lines always begin with the statement followed by a colon and one
  234. blank space. After that comes the parameters separated by semicolons, but
  235. without spaces in between, like this:
  236. @{b}STATEMENT: parameter;parameter;parameter;...;parameter@{ub}
  237. In the following statements, each parameter is a condition or command:
  238.   @{"ACTION" link "ST_ACTION" 0}     -  Actions taken for player input 
  239.   @{"DACT" link "ST_DACT" 0}       -  Actions executed when entering a new room
  240.   @{"LACT" link "ST_LACT" 0}       -  Actions taken when player chooses a dialogue line
  241. Each condition and command then has its own "internal" syntax. Usually,
  242. parameters within a command are separated by colons (,).
  243. Some statements and command allow you to leave parameter positions "blank"
  244. to retain a previous value or set a default value. "blank" does not mean
  245. "empty": You MUST enter a blank space in the position! For example, if you
  246. wish to leave the two middle parameters of the SHOW command empty, this is
  247. the way to do it:
  248. SHOW 2, , ,4
  249. (This example tells GRAAL to use image number 4 to display object 2, but let
  250. the image remain in its old place, since we left the x and y parameters
  251. blank.)
  252. @{u}@{fg highlight}Command and Statement Notation@{uu}@{fg text}
  253. @{b}UPPERCASE@{ub}
  254. Type as written. 
  255. @{b}lowercase@{ub}
  256. Replace with value of specified type.
  257. @{b}list@{ub}
  258. A list of values separated with | characters may be used. In conditions, any
  259. value in the list will make the condition TRUE. In commands, one of the
  260. alternatives in the list will be chosen at random each time the command is
  261. encountered during gameplay.
  262. @{b}option1|option2@{ub}
  263. One of the options can be chosen.
  264. @{b}[parameter,]@{ub}
  265. This parameter is optional.
  266. @{u}@{fg highlight}Referring to the Contents of the Input Sentence@{uu}@{fg text}
  267. When the scripts are searched for commands to execute, what happens is based
  268. entirely on how the current input sentence from the player looks.
  269. IN this reference, the first object in the current command sentence input by
  270. the player is referred to as @{b}OBJ1@{ub}, and the second - if any -  as @{b}OBJ2@{ub}. The
  271. "command" itself is referred to as the @{b}VERB@{ub}. 
  272. @{u}@{fg highlight}Referring to Objects and Images@{uu}@{fg text}
  273. An @{b}object number@{ub} can be an ordinary number (@{b}n@{ub}),  a room object number
  274. (@{b}ROBJn@{ub}) or a section object number (@{b}SOBJn@{ub}).
  275. An @{b}image number@{ub} can be an ordinary global image (@{b}n@{ub}), a  room image (@{b}RBOBn@{ub})
  276. or a section image (@{b}SBOBn@{ub}).
  277. @endnode
  278. @node "GG_Limits" " Limitations, Ranges, Reserved Numbers "
  279. @next "GG_Vars"
  280. @prev "GG_Syntax"
  281. @{fg shine}@{bg fill} GRAAL Limits, Ranges & Reserved Numbers @{fg text}@{bg back}
  282. These are basic technical limitations to GRAAL 2. 
  283. @{i}SCREEN GRAPHICS@{ui}
  284. @{b}SCENE AREA@{ub}: Background pictures must be lowres, 32 or 64 (EHB) colours, and
  285. between 320 and 640 pixels wide. (IFF picture files used for clipart must
  286. also be the same number of colours.)
  287. @{b}COMMAND AND DIALOGUE AREAS@{ub}: Pictures used must be hires, and 640 pixels
  288. wide. (No more than 16 colours.)
  289. @{i}BOBS AND BOB IMAGES@{ui}
  290. Allowed BOB numbers for general use: 1-59
  291. Allowed BOB image numbers for general use: 11-any number
  292. BOB images assigned:
  293.   1-10 -  Reserved for system use.
  294. @{i}ANIMATION@{ui}
  295. Animation channels allowed for general use: 3-15
  296. @{i}STATEMENT AND COMMAND LIMITS@{ui}
  297.   Item                                      Limit  Alterable 
  298.   ----------------------------------------- ------ -------------- 
  299.   Max no of DACT lines in room file           50    Y (graal.main) 
  300.   Max no of concurrent dialogues               6    Y   -"-
  301.   Max no of dialogue lines per dialogue       30    Y   -"-
  302.   Max no of LACT statements per dialogue      90    Y   -"-
  303.   Max no of ACTION lines in a room           120    N 
  304.   Max no of ACTION lines in a section        200    N 
  305.   Number of flags for each object              6    N 
  306.   Number of flags for each room               20    N 
  307.   Maximum number of floors in a room          12    N
  308.   Maximum number of paths in a room           12    N 
  309.   Max.no of objects in the inventory          50    N
  310.   Max no of objects in current room           30    N
  311.    (displayed simultaneously, not counting
  312.    BOBON, STATIC:, ANIM: graphics)
  313. @endnode
  314. @node "GG_Vars" " Variables in Text Strings "
  315. @next "GG_Vars"
  316. @prev "GG_Limits"
  317. @{fg shine}@{bg fill}Special text characters@{fg text}@{bg back}
  318. The following special character strings are replaced with variable values
  319. etc. when used in SAY, THINK, RESP, and similar commands
  320.   @{b}\ @{ub}       is replaced with a line break 
  321.   @{b}#R#n#f#@{ub}  will be replaced by the value held in flag f for room n 
  322.   @{b}#O#n#f#@{ub}  will be replaced by the value held in flag f for object n
  323.   @{b}#OBJ1@{ub}    will be replaced by the name of OBJ1 
  324.   @{b}#OBJ2@{ub}    will be replaced by the name of OBJ2 
  325.   @{b}#Won@{ub}     will be replaced by determination word n for object o
  326.            (That is, o should be 1 for OBJ1, or 2 for OBJ2.)
  327.   @{b}#TIME@{ub}    will be replaced by the current game time in the format
  328.            specified in the @{"TIME_FORMAT" link "ST_TIMEFORMAT" 0} statement..
  329.   @{b}#DATE@{ub}    will be treplaced by the current game date in the format 
  330.            specified by the @{"DATE_FORMAT" link "ST_DATEFORMAT" 0} statement.
  331. Example: OBJ1 is "apple", and word 1 for the object "apple" has been defined
  332. as "an". The command
  333.    SAY Just #W11 #OBJ1!
  334. will then cause the character to  say 
  335.    Just an apple!
  336. @endnode
  337. @node "GG_Commands" "GRAAL Commands"
  338. @next "GG_WAIT"
  339. @prev "GG_Commands"
  340. @{bg fill}GRAAL Commands:@{bg back}
  341. These are all the commands that can be used in the @{"ACTION" link "ST_ACTION" 0}, @{"DACT" link "ST_DACT" 0}, and @{"LACT" link "ST_LACT" 0}
  342. statements, as well as in cutscene files.
  343. @{i}General program flow control@{ui}
  344. W(ait)
  345. " link "GG_WAIT" 0} Make a pause
  346. " link "GG_EXIT" 0} Stop searching for commands to execute
  347. " link "GG_REDO" 0} Re-run current input sentence
  348. CUTSCENE
  349. " link "GG_CUTSCENE" 0} Execute a cutscene
  350. " link "GG_MARK" 0} Mark current position *NEW*
  351. RESUME
  352. " link "GG_RESUME" 0} Resume marked position *NEW*
  353. " link "GG_Quit" 0} Quit GRAAL
  354. @{i}Timed events@{ui}
  355. DOAFTER
  356. " link "GG_DOAFTER" 0} Set a timer *NEW*
  357. CANCEL
  358. " link "GG_CANCEL" 0} Cancel a timer *NEW*
  359. @{i}Dialogue control@{ui}
  360. " link "GG_DSET" 0} Start / change a dialogue
  361. " link "GG_LINE" 0} Change dialogue line number
  362. " link "GG_EDLG" 0} End a dialogue
  363. @{i}Sentence control@{ui}
  364. " link "GG_OBJ" 0} Change object number
  365. " link "GG_VERB" 0} Change verb number
  366. @{i}Room control@{ui}
  367. " link "GG_GOTO" 0} Go to a new room
  368. SETRF
  369. " link "GG_SETRF" 0} Set room flag value *NEW*
  370. ADDRF
  371. " link "GG_ADDRF" 0} Add to room flag value *NEW*
  372. DECRF
  373. " link "GG_DECRF" 0} Decrease room flag value
  374. SHOWEXIT
  375. " link "SHOWEXIT" 0} Show a hideen exit *NEW*
  376. HIDEEXIT
  377. " link "HIDEEXIT" 0} Hide an exit *NEW*
  378. @{i}"Speech"@{ui}
  379. " link "GG_SAY" 0} Make character speak
  380. THINK
  381. " link "GG_THINK" 0} Make character think
  382. " link "GG_RESP" 0} Make speaking partner respond
  383. @{i}Object manipulation@{ui}
  384. HANDLE
  385. " link "GG_HANDLE" 0} Make character handle object *NEW*
  386. " link "GG_PICK" 0} Make character pick up object
  387. " link "GG_GET" 0} Add object to inventory
  388. REMOVE
  389. " link "GG_REMOVE" 0} Remove object from inventory
  390. " link "GG_NAME" 0} Alter the name of an object
  391. " link "GG_ICON" 0} Alter the icon image for inventory *NEW*
  392. " link "GG_PREP" 0} Alter the preposition for an object
  393. NEWOBJ
  394. " link "GG_NEWOBJ" 0} Create or modify an object 
  395. SETOF
  396. " link "GG_SETOF" 0} Set object flag value *NEW*
  397. ADDOF
  398. " link "GG_ADDOF" 0} Add to object flag value *NEW*
  399. DECOF
  400. " link "GG_DECOF" 0} Decrease object flag value
  401. @{i}Object display@{ui}
  402. OMOVE
  403. " link "GG_OMOVE" 0} Move and animate object
  404. " link "GG_SHOW" 0} Show object *NEW*
  405. " link "GG_HIDE" 0} Hide object
  406. OBJONTOP
  407. " link "GG_OBJONTOP" 0} Put object on top of other objects *NEW*
  408. @{i}Main character display@{ui}
  409. " link "GG_CBOB" 0} Change character image
  410. CMOVE
  411. " link "GG_CMOVE" 0} Move character
  412. " link "GG_MOBJ" 0} Move character next to object
  413. MEXIT
  414. " link "GG_MEXIT" 0} Move character to exit
  415. " link "GG_CPOS" 0} Change character position
  416. " link "GG_CHAR" 0} Hide / display character
  417. @{i}Floor control@{ui}
  418. FLOOR
  419. " link "GG_FLOOR" 0} Define floor
  420. NFLOOR
  421. " link "GG_NFLOOR" 0} Set number of floors
  422. SETFLOOR
  423. " link "GG_SETFLOOR" 0} Change character's floor
  424. @{i}Audio control@{ui}
  425. TRACK
  426. " link "GG_TRACK" 0} Soundtracker module control
  427. SAMLOAD
  428. " link "GG_SAMLOAD" 0} Load raw or IFF sample
  429. " link "GG_SAMPLAY" 0} Sample control
  430. @{i}Graphics control@{ui}
  431. CLPART
  432. " link "GG_CLPART" 0} Load a clipart picture file
  433. " link "GG_BOBS" 0} Grab BOB images from clipart picture
  434. HOTSP
  435. " link "GG_HOTSP" 0} Alter the hotspot of an image
  436. LIGHTS
  437. " link "GG_LIGHTS" 0} Fade scene area in or out
  438. COLOUR
  439. " link "GG_COLOUR" 0} Change a single colour
  440. " link "GG_FADE" 0} Fade one colour to another
  441. CAMERA
  442. " link "GG_CAMERA" 0} Pan the camera to any part of background
  443. TITLE
  444. " link "GG_TITLE" 0} Display / remove a title screen
  445. " link "GG_TYPE" 0} Type text on title screen
  446. " link "GG_TEXT" 0} Display text in scene area *NEW*
  447. BOBON
  448. " link "GG_BOBON" 0} Show a BOB
  449. BOBOFF
  450. " link "GG_BOBOFF" 0} Remove a BOB
  451. " link "GG_PBOB" 0} Paste a BOB image
  452. @{i}Time and date manipulation@{ui}
  453. SETDATE
  454. " link "GG_SETDATE" 0} Set the date *NEW*
  455. SETTIME
  456. " link "GG_SETTIME" 0} Set the time *NEW*
  457. ADDTIME
  458. " link "ADDTIME" 0} Advance the time *NEW*
  459. SAVETIME
  460. " link "GG_SAVETIME" 0} Save the current time and date *NEW*
  461. RESTORETIME
  462. " link "GG_RESTORETIME" 0} Restore the saved time and date *NEW*
  463. @{i}Restore the saved time and date Special Cutscene commands:@{ui}
  464. NOBREAK
  465. " link "GG_NOBREAK" 0} Disable [Esc] in cutscene
  466. FINAL
  467. " link "GG_FINAL" 0} Marks cutscene [Esc] resume point
  468. @endnode
  469. @node "GG_Conditions" "GRAAL Conditions"
  470. @next "GG_IFOBJ"
  471. @prev "GG_Conditions"
  472. @{bg fill}GRAAL Conditions:@{bg back}
  473. These are the conditions that can be used in the @{"ACTION" link "ST_ACTION" 0}, @{"DACT" link "ST_DACT" 0}, @{"LACT" link "ST_DACT" 0}, and
  474. @{"LINE" link "ST_LINE" 0} statements.
  475. IFOBJ
  476. IFOBJ2
  477. " link "GG_IFOBJ" 0} Test objects in the input sentence
  478. IFOF2
  479. " link "GG_IFOF" 0} Test object flags *NEW*
  480. IFROOM
  481. " link "GG_IFROOM" 0} Test current room
  482. " link "GG_IFRF" 0} Test room flags *NEW*
  483. IFCARR
  484. IFNOTCARR
  485. " link "GG_IFCARR" 0} Test if object is in inventory
  486. IFPICK
  487. " link "GG_IFPICK" 0} Test if object can be picked up
  488. IFTYPE
  489. " link "GG_IFTYPE" 0} Test object types
  490. IFSPOS
  491. " link "GG_IFSPOS" 0} Test room starting position
  492. IFCBOB
  493. " link "GG_CBOB" 0} Test current character image *NEW*
  494. IFFLOOR
  495. " link "IFFLOOR" 0} Test the current floor *NEW*
  496. IFDATE
  497. " link "GG_IFDATE" 0} Test the date *NEW*
  498. IFTIME
  499. " link "GG_IFTIME" 0} Test the time *NEW*
  500. IFWEEKDAY
  501. " link "GG_WEEKDAY" 0} Test the day of the week *NEW*
  502. @endnode
  503. @node "GG_Animation" "animation sequences"
  504. @{fg shine}@{bg fill}Basics about GRAAL Animation@{fg text}@{bg back}
  505. Most simple animation sequences used in GRAAL have the following format:
  506.  @{b} A n,(image,time)(image,time)(image,time)...(image,time)@{ub}
  507. @{b}n@{ub} is a number deciding how many times the animation sequence is played - in
  508. GRAAL, it is set to 0 in most cases, which means the animation will go on
  509. "forever". Forever in this case means "until GRAAL decides to put a stop to
  510. @{b}image@{ub} is an image number.
  511. @{b}time@{ub} is the time the image is displayed before the next one comes on screen
  512. (in 50ths of a second on PAL machines).
  513. Example: A 0,(RBOB1,12)(RBOB2,12)(RBOB3,12)(RBOB4,12) would play the
  514. sequence of four room BOB images over and over again. Note that the commas
  515. are not GRAAL parameter separators in this case - they are all part of the
  516. same sequence definition!
  517. @endnode
  518. @node "GG_Interface" " The GRAAL player interface"
  519. @{fg shine}@{bg fill}The GRAAL Player Interface@{fg text}@{bg back}
  520. Although the graphics of the player interface can be changed very much to
  521. your liking, all  GRAAL games play in pretty much the same way. It presents
  522. the alternatives to the user in a very clear and precise way to let them
  523. know exactly what objects can be manipulated and what options are available
  524. at any time.
  525. This is an attempt to explain the elements of GRAAL's intuitive control
  526. method. which is really much harder than just doing it:) It also contains
  527. some "style guide" tips...
  528.  SENTENCE AND OBJECT DISPLAYS: 
  529.  =============================
  530. OBJECTS IN THE SCENE AREA: 
  531. As soon as the mouse cursor moves over an object with a name consisting of
  532. anything but an empty string, its name appears above the cursor.
  533. IF there is a default command associated with the object, AND neither a verb
  534. or other object has actually been clicked by the player, the default command
  535. for the object beneath the mouse cursor is shown in the sentence box. 
  536. IF a verb has been previously clicked, the name of the object also appears
  537. in the sentence box. IF the verb / object combination requries a second
  538. object to beclicked, the appropriate preposition is also displayed in the
  539. sentence box.
  540. OBJECTS IN THE INVENTORY:
  541. Currently, the default verb or object name is NOT displayed by just moving
  542. the mouse cursor over an object in the inventory. However, all objects that
  543. can be put in the inventory should have the default command LOOK, so that a
  544. right mouse-button click looks at the inventory object.
  545. VERBS:
  546. IF you move the mouse cursor over a verb in the command area, AND no verb
  547. has been clicked, the name of the verb appears in the sentence box.
  548. EXITS:
  549. If you move the mouse pointer over an exit, and the name of the exit is
  550. anything but an empty string, its name apperas above the mouse cursor. Note
  551. that object and exit cursor texts in most cases SHOULD be coloured
  552. differently, so that players don't accidently leaves a room and wastes a lot
  553. of time.
  554.  KEYBOARD KEYS
  555.  =============
  556. PLAYER KEYS
  557. These keys are avaliable regardless of whether the system is in developer or
  558. runtime mode:
  559.   S and L   both bring up the same save/load requester.
  560.   space     puts the game in pause mode. Any key continues.
  561.   F         displays the amount of free memory (mainly for
  562.             debugging purposes.)
  563.   V         displays the adventure name and version information.
  564.   I         increases the speed of sentence displays.
  565.   D         decreases the speed of sentence displays.
  566.   Q         quits the game. (May be disabled by the DISABLE_QUIT:
  567.             statement, is you provide another way to QUIT.)
  568. DEVELOPER KEYS
  569.   G         brings up the monitor screen.
  570.   R         starts a macro recording. Pressing R again stops the
  571.             macro recording and asks for a name for the new macro.
  572.   P         asks for a macro name, then starts playing it.
  573.   ctrl+c    aborts GRAAL. Use only in emergencies, as this does
  574.             not clean up memory, leaves FONTS: assigned to RAM:FONTS, etc.
  575.   leftA+m   (A="Amiga") switches between GRAAL and Workbench. Note that
  576.             programs running concurrently will be sluggish, and only
  577.             the fonts in your GRAAL FONTS: drawer will be available.
  578.             (That's why I have included the DPAINT font in the drawer,
  579.             because I sometimes need to run that in parallell...)
  580. @endnode
  581. @node "GG_IFOBJ" " IFOBJ / IFOBJ2 "
  582. @next "GG_IFPICK"
  583. @prev "GG_Conditions"
  584. @{fg shine}@{bg fill}IFOBJ Condition@{fg text}@{bg back} 
  585. @{i}Test an object in the current sentence@{ui}
  586.   @{b}IFOBJ obj|list@{ub}
  587. This condition is TRUE if the object number of OBJ1 is equal to obj,  or to
  588. any one of the objects in a list.
  589.   @{b}IFOBJ2 object number | list@{ub}
  590. Same thing, but checks OBJ2.
  591. @endnode
  592. @node "GG_IFPICK" " IFPICK "
  593. @next "GG_IFOF"
  594. @prev "GG_IFOBJ"
  595. @{fg shine}@{bg fill}IFPICK Condition@{fg text}@{bg back} 
  596. @{i}Test if an object can be picked up@{ui}
  597.  @{b} IFPICK [obj]@{ub}                
  598. This condition is TRUE if OBJ1 (default) or the specified object can be
  599. picked up.
  600. Example:
  601.  @{b} IFPICK;MOBJ;HANDLE;PICK;HANDLE -1@{ub}
  602. Move to object and pick it up only if it is defined as "pickable"!
  603. @endnode
  604. @node "GG_IFOF" " IFOF "
  605. @next "GG_IFROOM"
  606. @prev "GG_IFPICK"
  607. @{fg shine}@{bg fill}IFOF Condition@{fg text}@{bg back} 
  608. @{i}Test the value of an object flag@{ui}
  609.   @{b}IFOF [obj,]flag<op>value|list@{ub}
  610. This condition is TRUE if the flag  of OBJ1, or the specified object, passes
  611. the test (see <op> below).
  612.   @{b}IFOF2 flag<op>value|list@{ub}
  613. This condition is TRUE if the flag of OBJ2 passes the test. This form is
  614. mainly kept for backwards compatibility - specify the object number of  OBJ2
  615. in the format above instead, if you have a choice.
  616. @{b}<op>@{ub}
  617. op an be any of the standard logical operators: =, >, <, <>, >=, <=
  618. @{b}value@{ub}
  619. The value can be a fixed integer number or a reference to another flag. The
  620. format  for flag references is #R#roomnumber#flag# or #O#objectnumber#flag.
  621. NOTE: flag references can only be used when testing a single value. That is,
  622. you cannot specify a list of flag references to test.
  623. @{b}list@{ub}
  624. If a list of values is specified, the condition is true if one of the list
  625. values makes the condition true.
  626. (There is no point in specifying a list if the operator is <> - c'mon, think
  627. about it!!)
  628. Examples:
  629.  IFOF 2=3
  630. is true if object flag 2 of OBJ1 is 3
  631.  IFOF 4,2>3
  632. is true if object flag 2 of object 4 is greater than 3
  633.  IFOF 4=2|4|6|8
  634. is true if object flag 2 of object 4 is 2,4,6, or 8.
  635.  IFOF 7,4<>#R#3#1#
  636. is true if object flag 4 of object 7 is not equal to room flag 1 of room 3.
  637. @endnode
  638. @node "GG_IFROOM" " IFROOM "
  639. @next "GG_IFRF"
  640. @prev "GG_IFOF"
  641. @{fg shine}@{bg fill}IFROOM Condition@{fg text}@{bg back}
  642. @{i}Test the current room@{ui}
  643.   @{b}IFROOM room|list@{ub}
  644. This condition is true if the current room matches the room number(s)
  645. specified.
  646. @endnode
  647. @node "GG_IFRF" " IFRF "
  648. @next "GG_IFCARR"
  649. @prev "GG_IFROOM"
  650. @{fg shine}@{bg fill}IFRF Condition@{fg text}@{bg back} 
  651. @{i}Test the value of a room flag@{ui}
  652.   @{b}IFRF [room,]flag<op>value|list@{ub}
  653. The operator <op> can be any of the following logical operators:
  654. =, <, >, <>, >=, <=
  655. The IFRF condition works the same way as the @{"IFOF" link "GG_IFOF" 0} condition, so click that
  656. to see a number of examples.
  657. @endnode
  658. @node "GG_IFCARR" " IFCARR / IFNOTCARR "
  659. @next "GG_IFTYPE"
  660. @prev "GG_IFRF"
  661. @{fg shine}@{bg fill}IFCARR Condition@{fg text}@{bg back}
  662. @{i}Test if object is in inventory@{ui}
  663.   @{b}IFCARR [obj]@{ub}
  664. This condition is TRUE if the specified object is in the inventory.  If no
  665. object number is specified, OBJ1 is assumed.
  666.   @{b}IFNOTCARR [obj]@{ub}
  667. TRUE if the object is NOT in the inventory.
  668. @endnode
  669. @node "GG_IFTYPE" " IFTYPE "
  670. @next "GG_IFTYPE"
  671. @prev "GG_IFCARR"
  672. @{fg shine}@{bg fill}IFTYPE Condition@{fg text}@{bg back}
  673. @{i}Test if an object is of specified type(s)@{ui}
  674.  @{b} IFTYPE type|list@{ub}
  675. This condition is TRUE if the type character matches any of the characters
  676. defined in the object type for OBJ1. For example, in standard GRAAL
  677. notation, an object defined as DW is (D)ead and made of (W)ood. IFTYPE D
  678. would be true, as would IFTYPE S|W (checking if the object is of either
  679. stone or wood).
  680.  @{b} IFTYPE2 type|list@{ub}
  681. This condition checks OBJ2 according to the same rules as described for OBJ1
  682. above.
  683. @endnode
  684. @node "GG_IFSPOS" " IFSPOS             "
  685. @{fg shine}@{bg fill}IFSPOS Condition@{fg text}@{bg back}
  686. @{i}Test which starting position was last used@{ui}
  687.   @{b}IFSPOS spos|list@{ub}
  688. This condition is TRUE, if the last GOTO command (or START_ROOM statement)
  689. pointed to the specified starting position (= START_POS statement). 
  690. Its main use is setting the room up in different ways in DACT statements,
  691. depending on which entrance was being used.
  692. @endnode
  693. @node "GG_IFCBOB" " IFCBOB             "
  694. @{fg shine}@{bg fill}IFCBOB Condition@{fg text}@{bg back}
  695. @{i}Test the currently displayed character image@{ui}
  696.  @{b} IFCBOB image|list@{ub}
  697. This is TRUE if the image used to display the main character matches the
  698. number given in the condition. It could, for example, be useful in creating
  699. "stall anims" (see @{"DOAFTER" link "GG_DOAFTER" 0}) and other main character animations that should
  700. look different depending on the main character's current appearance.
  701. @endnode
  702. @node "IFFLOOR" " IFFLOOR            "
  703. @{fg shine}@{bg fill}IFFLOOR Condition@{fg text}@{bg back}
  704. @{i}Tests the current floor@{ui}
  705.   @{b}IFFLOOR floor|list@{ub}
  706. This condition is true if the main character is currently on any of the
  707. specified floors.
  708. @endnode
  709. @node "GG_IFDATE" " IFDATE             "
  710. @{fg shine}@{bg fill}IFDATE Condition@{fg text}@{bg back}
  711. @{i}Test the game-date@{ui}
  712.  @{b} IFDATE =|>|<date@{ub}
  713. @{b}date@{ub}
  714. must be in the format year*10000+month*100+date. For example, August 1, 1996
  715. is specified as
  716. 19960801
  717. The date can also be specified as a reference to a room or object flag
  718. holding a date value (see SETOF and SETRF). The format is
  719. #R#roomnumber#flag# or #O#objectnumber#flag#.
  720. Examples:
  721. IFDATE =19960801
  722. is true if GRAALs calendar is equal to August 1, 1996.
  723. IFDATE <19960801
  724. is true if GRAAL calendar has not yet reached August 1, 1996
  725. IFDATE >19960801
  726. is true if the date has passed.
  727. IFDATE <#R#4#1#
  728. is true if the date is less than the value held in room flag 1 of room 4.
  729. @endnode
  730. @node "GG_IFTIME" " IFTIME             "
  731. @{fg shine}@{bg fill}IFTIME Condition@{fg text}@{bg back}
  732. @{i}Test the game-time@{ui}
  733.   @{b}IFTIME =|>|<time@{ub}
  734. @{b}time@{ub}
  735. must be specified as hours*100+minutes (and with the hours in 24-hour
  736. format).
  737. So, 2:30 pm (or 14:30 in 24-hour format) is specified as
  738. The time can also be sepcified as a reference to a room or object flag
  739. holding a time value (see SETOF and SETRF). The format is
  740. #R#roomnumber#flag# or #O#objectnumber#flag#.
  741. Examples:
  742. IFTIME =1130
  743. is true if the game clock is 11:30
  744. IFTIME <1130
  745. is true if the clock is less than 11:30
  746. IFTIME >1130
  747. is true if the clock is past 11:30
  748. IFTIME <#O#1#8#
  749. is true if the time is less than the value held in object flag 8 of object
  750. @endnode
  751. @node "GG_WEEKDAY" " IFWEEKDAY          "
  752. @{fg shine}@{bg fill}IFWEEKDAY Condition@{fg text}@{bg back}
  753. @{i}Tests the day of the week@{ui}
  754.  @{b} IFWEEKDAY day_number|list@{ub}
  755. This condition is true if the weekday, according to the in-game calender, is
  756. matched by the number(s) specified. 1=Monday, 2=Tuesday, ... 7=Sunday.
  757. Are your shops open on Sunday?
  758. @endnode
  759. @node "GG_WAIT" " W(ait) "
  760. @next "GG_EXIT"
  761. @prev "GG_Commands"
  762. @{fg shine}@{bg fill}W Command@{fg text}@{bg back}
  763. @{i}Wait nn vertical blanks.@{ui}
  764.  @{b} W vbls@{ub}
  765. This command creates a pause. The time is measured in vertical blanks, which
  766. occurs at the rate of 50 per second for PAL systems and 60 per second for
  767. NTSC systems. On a PAL system,
  768.  @{b} W 50@{ub}
  769. would cause a one second pause.
  770. The W command allows the player to end the pause before the specified time
  771. by pressing the full stop ( . ) or escape key. 
  772. (The escape key, when used in a cutscene, also causes a skip to the FINAL
  773. section of the cutscene. )
  774. @endnode
  775. @node "GG_EXIT" " EXIT "
  776. @next "GG_REDO"
  777. @prev "GG_WAIT"
  778. @{fg shine}@{bg fill}EXIT Command@{fg text}@{bg back}
  779. @{i}Ends the execution of commands to handle the current input sentence from the
  780. player.@{ui}
  781.   @{b}EXIT@{ub}
  782. is used when all actions for a user sentence has been performed, and you do
  783. not wish to search further in the .room, .section, and graal.main files for
  784. entries that match the sentence. It is used in ACTION: and DACT: statements,
  785. and combined with EDLG to end dialogues.
  786. See also: @{"EDLG" link "GG_EDLG" 0}, @{"REDO" link "GG_REDO" 0}
  787. @endnode
  788. @node "GG_REDO" " REDO "
  789. @next "GG_CUTSCENE"
  790. @prev "GG_EXIT"
  791. @{fg shine}@{bg fill}REDO Command@{fg text}@{bg back}
  792. @{i}Re-run the scripts after having changed the player's input sentence.@{ui}
  793.   @{b}REDO@{ub}
  794. This command is used after having changed the current sentence contents with
  795. the OBJ1, OBJ2 and VERB commands. The whole idea is that sometimes you want
  796. exactly the same actions performed for different sentences, and using REDO
  797. is easier and less space-consuming than copying all the actions. For
  798. example, if you want the same actions taken for USE BOOK and OPEN BOOK, you
  799. can replace the verb USE (3) with the verb OPEN (4) and then start over with
  800. checking for appropriate actions. Example, assuming the book is object 1:
  801.   @{b}ACTION: 3;IFOBJ 1;VERB 4;REDO@{ub}
  802. The checking will start over with the first ACTION: statement in the same
  803. file, but now looking for actions for OPEN BOOK rather than USE BOOK, which
  804. was what the player entered. (Not to worry, the player will never see what
  805. is going  on!)
  806. @endnode
  807. @node "GG_CUTSCENE" " CUTSCENE "
  808. @next "GG_DSET"
  809. @prev "GG_REDO"
  810. @{fg shine}@{bg fill}CUTSCENE Command@{fg text}@{bg back}
  811. @{i}Loads and executes contents of a cutscene file@{ui}
  812.   @{b}CUTSCENE file name,S|N|F|NF|H@{ub}
  813. Rather straight forward, this one. You only have to remember that cutscenes
  814. can only contain commands and not conditions, and also note the effect the
  815. second parameter has on the cutscene indicator (in Olaf's case, the movie
  816. camera icon) that is shown instead of the command buttons while a cutscene
  817. is being played.
  818. @{b}S@{ub}
  819. Cutscene indicator will be shown as normal and taken away when this cutscene
  820. has finished playing.
  821. @{b}N@{ub}
  822. The whole command area will disappear during the cutscene, and return when
  823. the cutscene has finished playing.
  824. @{b}F@{ub}
  825. The cutscene indicator will appear as normal but remain on screen when this
  826. cutscene finishes. This should be used if several cutscenes are played in
  827. sequence, or when cutscenes are "nested" (=called from inside other
  828. cutscenes).
  829. @{b}NF@{ub}
  830. The command area will disappear during the cutscene and remain hidden until
  831. a cutscene command containing the "N" parameter restores it.
  832. @{b}H@{ub}
  833. The cutscene indicator will not be used at all. Use for short cutscenes and
  834. cutscenes with the NOBREAK command, if appropriate.
  835. See also: @{"NOBREAK" link "GG_NOBREAK" 0}
  836. @endnode
  837. @node "GG_Quit" " QUIT           "
  838. @{fg shine}@{bg fill}QUIT Command@{fg text}@{bg back}
  839. @{i}Cleans up and quits GRAAL@{ui}
  840.  @{b} QUIT@{ub}
  841. This command simply kills GRAAL. Use it after displaying an end-of-game
  842. screen, for example.
  843. @endnode
  844. @node "GG_DOAFTER" " DOAFTER        "
  845. @{fg shine}@{bg fill}DOAFTER Command@{fg text}@{bg back}
  846. @{i}Sets a timer do execute events when a certain time period has elapsed@{ui}
  847.   @{b}DOAFTER interval,event object,device@{ub}
  848. GRAAL has three "timer devices" which can be used to make things happen
  849. after a certain period of time or at (almost) regular intervals. Once set
  850. up, they continue to operate until a @{"CANCEL" link "GG_CANCEL" 0} command defuses them.
  851. Possible uses are machinery where a sequence of actions must be carried out
  852. within a certain time limit, rooms where exits close if you take too long,
  853. updating of time data, etc.
  854. @{b}interval@{ub}
  855. This is the timer interval in seconds. (Or, alas, in 5/6ths of seconds if
  856. you are an NTSC user. That's standards for you!) If you specify an interval
  857. like "10-50", this means the interval will be a random number between 10 and
  858. 50. However, once the interval has been set, it remains constant as long as
  859. the timer operates - unless it is changed by a new DOAFTER command. Also,
  860. timer device "0" is a little different - see below.
  861. @{b}event object@{ub}
  862. What happens when the interval has elapsed? GRAAL starts looking for ACTION:
  863. statements for the special verb number -1, that's what. And which of those
  864. will it use? That depends on the event object, which can be any number. For
  865. example, if the event object is set to 3, GRAAL will execute statements
  866. beginning with
  867. ACTION: -1;IFOBJ 3;
  868. Of course, you may choose not to test on the object number, if you only use
  869. the one timer and intend to always run through all the timer actions.
  870. Control is returned to the player with an EXIT command, same as always.
  871. Before the EXIT command, you may wish to put one of the following:
  872.  * A new DOAFTER command for the same device, altering its function
  873.    or the time interval
  874.  * A CANCEL command, defusing the timer.
  875. @{b}device@{ub}
  876. This is the timer device, which is a simple number from 0 to 2. Each device
  877. is its own little time bomb - however, device 0 works in a slightly
  878. different way from the rest. 
  879. Device 0 keeps track of how long it has been since the player's last input
  880. to the game, rather than counting how long it's been since the  DOAFTER
  881. command was given. Each mouse click is counted as an action, and thus resets
  882. the timer. This timer is also completely disabled during dialogues.
  883. This means that timer 0 can be used for things like  "stall anims" - making
  884. the character urge you to do something if you take too long, for example. (A
  885. classic example of this sort of timer is the one in that good old text
  886. adventure, "the Hobbit": "You wait... time passes. And it did.)
  887. @{fg shine}Limitations to the timed events:@{fg text}
  888. Because GRAAL only checks for elapsed timers when it waits for player input
  889. in dialogue or command mode, the timing is very approximate. For example, if
  890. a timer elapses while your hero is making a long speech, the timed event
  891. will occur only after the speech stops and when return normally should have
  892. returned directly to the player.
  893. In other words, you will have to think about how you set the action in
  894. scenes where timing events are critical. Preferably, there shouldn't be long
  895. sequences without checks for player input occuring at the same time.
  896. Also note that execution of the timer commands in the ACTION: statements
  897. does not multitask, and if two or three timers elapse at the same time, the
  898. commands for each timer will be carried out in sequence, starting with timer
  899. 0 and ending with timer 2, possibly putting the timing off even further from
  900. what was  expected.
  901. Finally, NEVER use timers for things which can be achieved with repeating
  902. animation patterns - they are much more accurate in the timing and put much
  903. less strain on the system!
  904. See also: @{"CANCEL" link "GG_CANCEL" 0} command
  905. @endnode
  906. @node "GG_CANCEL" " CANCEL         "
  907. @{fg shine}@{bg fill}CANCEL Command@{fg text}@{bg back}
  908. @{i}Cancels the function of a timer@{ui}
  909.  @{b} CANCEL device@{ub}
  910. This command stops a timer started with the @{"DOAFTER" link "GG_DOAFTER" 0} command.
  911. @{b}device@{ub}
  912. is the device number of the timer (1-3).
  913. See also: @{"DOAFTER" link "GG_DOAFTER" 0} command
  914. @endnode
  915. @node "GG_DSET" " DSET "
  916. @next "GG_LINE"
  917. @prev "GG_CUTSCENE"
  918. @{fg shine}@{bg fill}DSET Command@{fg text}@{bg back}
  919. @{i}Handles dialogue alternatives@{ui}
  920.   @{b}DSET dlg[,com1,com2,...,comn]   @{ub}      
  921. Tell the dialogue dlg how to behave using a number of commands, such as:
  922.                         
  923.   @{b}+n@{ub}       add line n to the available set of lines
  924.   @{b}-n@{ub}       take away line n from the line set temporarily, can be
  925.            restored by another + later on 
  926.   @{b}Nn@{ub}       make line n never appear again in this game, even if a DSET +
  927.            appears later on.
  928.   @{b}Ss@{ub}       Save the current status (the set of alternatives the player
  929.            sees) before "branching" in the dialogue. s is a set of saved 
  930.            lines, and can be 1-3
  931.   @{b}Rs@{ub}       Restore a previously saved dialogue status from set 1-3
  932.   @{b}E@{ub}        Erase all currently displayed dialogue lines, equal to giving
  933.            a "-" command for each line. (This is also done automatically
  934.            by the S (Save) command.
  935. If you are not already involved in the dialogue, DSET will put the dialogue
  936. control area onto the screen instead of the normal control area.
  937. If no commands are specified, the dialogue is only refreshed. However, even
  938. this may alter the set of alternatives the player actually sees - because
  939. the availability of the alternatives also depend upon conditions set in the
  940. LINE: statements themselves, and those conditions may be changed between
  941. DSET commands.
  942. Remember that although dialogues are specified in the room files, their
  943. numbers must be unique for the entire game.
  944. The special command "E" takes away all current dialogue alternatives. It is
  945. mostly used in conjunction with the save/restore function when you "branch
  946. out" in a dialogue and want to present a completely new set to alternatives
  947. to the player. For example, this shows a "branching out" of dialogue 4:
  948.   @{b}DSET 4,S1,+12,+13,+14@{ub}
  949. saves the current dialogue status in set 1, clearing all old input
  950. alternatives at the same time, and replaces them with lines 12, 13 and 14.
  951. The special command "L" allows you to alter the dialogue status without
  952. showing what you are doing in the dialogue control area. This is mainly used
  953. to restore the dialogue to its proper status just before ending the
  954. dialogue, so that the proper alternatives will be in place when the player
  955. starts talking to the same dialogue partner the next time. For example,
  956. before we leave dialogue 4 we know that we want to go back to the way things
  957. looked before we saved the status in set 1:
  958.  @{b} DSET 4,L,R1;EDLG;EXIT@{ub}
  959. restores the previously saved dialogue status for dialogue 4 just before the
  960. dialogue is ended, without the user being disturbed by flickering
  961. alternatives in the dialogue control area. However, the next time the player
  962. engages in this dialogue, the old alternatives will be back to choose from.
  963. See also: @{"EDLG" link "GG_EDLG" 0}
  964. @endnode
  965. @node "GG_LINE" " LINE "
  966. @next "GG_EDLG"
  967. @prev "GG_DSET"
  968. @{fg shine}@{bg fill}LINE Command@{fg text}@{bg back}
  969. @{i}Alter the line chosen in a dialogue@{ui}
  970.  @{b} LINE line_no@{ub}
  971. This command, i conjunction with th REDO command, lets you use the same
  972. reactions (LACT: statements) for a number of different dialogue alternatives
  973. - much easier than copying all commands into a number of LACT:s.
  974. Example: You wish the reactions to line 5 in a dialogue to be exactly the
  975. same as those for line 3. Simply specify this:
  976. @{b}LACT: 5;LINE 3;REDO@{ub}
  977. The program now goes through the LACT:s again, now looking for those who are
  978. connected to line 3 instead of line 5 which was actually chosen.
  979. See also: @{"REDO" link "GG_REDO" 0}
  980. @endnode
  981. @node "GG_EDLG" " EDLG "
  982. @next "GG_RESP"
  983. @prev "GG_LINE"
  984. @{fg shine}@{bg fill}EDLG Command@{fg text}@{bg back}
  985. @{i}Ends a dialogue session@{ui}
  986.   @{b}EDLG@{ub}
  987. This command ends the dialogue. The normal Control Area is put back on
  988. screen instead of the Dialogue Control Area. The last set of dialogue lines
  989. will be present as default if the dialogue is resumed later on.
  990. Normally, you would not want to evaluate any more line action (LACT:)
  991. statements after having decided to end the dialogue. Therefore, you should
  992. normally put an EXIT command right behind the EDLG:
  993.  @{b} EDLG;EXIT@{ub}
  994. See also: @{"DSET" link "GG_DSET" 0}
  995. @endnode
  996. @node "GG_OBJ" " OBJ1 / OBJ2 "
  997. @next "GG_VERB"
  998. @prev "GG_RESP"
  999. @{fg shine}@{bg fill}OBJ1 / OBJ2 Command@{fg text}@{bg back}
  1000. @{i}Alters the object number for OBJ1 or OBJ2.@{ui}
  1001.   @{b}OBJ1 obj
  1002.   OBJ2 obj@{ub}
  1003. These commands are used in two main ways:
  1004. a) to temporarily put another object number in the place of OBJ1 or OBJ2 in
  1005. order to manipulate an object using other commands. In this case, you only
  1006. need a simple OBJ1 or OBJ2 without any parameters  to change the object
  1007. number back to what it originally was when you are through manipulating the
  1008. object you specified with "obj". For example, imagine you are about to open
  1009. a can of gasoline in a room with a lit candle. The gasolin  has object
  1010. number 15 and is currently OBJ1, the object number for the  candle is 20.
  1011.   @{b}...OBJ1 20;MOBJ;HANDLE;SHOW 20, , ,10;SAY I put the light out first;HANDLE
  1012. -1;OBJ1 15;...@{ub}
  1013. would be an easy way to switch from the gasolin, operate the candle, and
  1014. then switch back to working with the gasolin.
  1015. b) to alter the object handled and then use the @{"REDO" link "GG_REDO" 0} command to run through
  1016. all action statements again.
  1017. @{i}Note:@{ui} Exit numbers used to check which exit was clicked is actually a
  1018. special use of the OBJ1 variable. This must be remembered when coding
  1019. ACTION: statements for verb 0 (= exit click).
  1020. See also: @{"VERB" link "GG_VERB" 0}, @{"REDO" link "GG_REDO" 0}
  1021. @endnode
  1022. @node "GG_VERB" " VERB "
  1023. @next "GG_ROOM"
  1024. @prev "GG_OBJ"
  1025. @{fg shine}@{bg fill}VERB Command@{fg text}@{bg back}
  1026. @{i}Alters the current verb@{ui}
  1027.   @{b}VERB <verb number>@{ub}
  1028. Use this to alter the verb in the current sentence. Mainly used before the
  1029. @{"REDO" link "GG_REDO" 0} command to make one action synonym to another. 
  1030. If no verb number is specified, the verb number before the last  VERB <verb
  1031. number> command is restored (but why you should want to do that,  I don't
  1032. know at this stage.)
  1033. See also: @{"OBJ1/OBJ2" link "GG_OBJ" 0}, @{"REDO" link "GG_REDO" 0}
  1034. @endnode
  1035. @node "GG_ROOM" " ROOM "
  1036. @next "GG_MARK"
  1037. @prev "GG_VERB"
  1038. @{fg shine}@{bg fill}ROOM Command@{fg text}@{bg back}
  1039. @{i}Alter the current room@{ui}
  1040.   @{b}ROOM <room number>@{ub}
  1041. A bit obsolete, this one. You can set flags for rooms other than the current
  1042. using a special form of the SETRF command, so this one may soon be deleted.
  1043. Anyway, specifying ROOM without the parameter brings back the room number
  1044. that was in effect before the last ROOM <room number> was called, just like
  1045. OBJ1/OBJ2 can restore the previous object if used without the parameter.
  1046. @endnode
  1047. @node "GG_MARK" " MARK "
  1048. @next "GG_RESUME"
  1049. @prev "GG_ROOM"
  1050. @{fg shine}@{bg fill}MARK Command@{fg text}@{bg back}
  1051. @{i}Mark the current game position@{ui}
  1052.  @{b} MARK [number]@{ub}
  1053. This saves the current game state. 
  1054. @{b}number@{ub}
  1055. If number is specified, this command acts as a "save game" to RAM: (which
  1056. can take some time).
  1057. Any number of MARKs can be stored using unique identification numbers to
  1058. tell them apart. Just keep in mind that each MARK creates a file of about
  1059. 20K in RAM:, and that the command takes a few seconds to perform. (Older
  1060. machines can really struggle in comparison with 1200s or accelerated ones,
  1061. so do not use it excessively.)
  1062. If a number is not included, the position is saved to a string of variables
  1063. in memory, which is somewhat faster. However, only one position can be saved
  1064. this way.
  1065. The  position can be re-created later using  a RESUME command.
  1066. You can use this in a number of ways:
  1067. * Implement your own "save to RAM:" commands.
  1068. * Provide an "ooops!" function, allowing the player an easy way to get 
  1069.   back into a game where something just has gone terribly wrong...
  1070. * Cut away to cutscenes using other rooms and restore the game position
  1071.   afterwards, not having to care exactly what the scene looked like when
  1072.   the jump to the cutscene occured.
  1073. * Use a MARK as the very first command in the game and provide a "try
  1074.   again" option from an end-of-game screen.
  1075. See also: @{"RESUME" link "GG_RESUME" 0} command
  1076. @endnode
  1077. @node "GG_RESUME" " RESUME "
  1078. @next "GG_SAY"
  1079. @prev "GG_MARK"
  1080. @{fg shine}@{bg fill}RESUME Command@{fg text}@{bg back}
  1081. @{i}Resume the action at the spot saved with the MARK command@{ui}
  1082.  @{b} RESUME [number]@{ub}
  1083. @{b}number@{ub}
  1084. The optional number must correspond to the one of a previous MARK command.
  1085. See the MARK command for a detailed description of what is going on. 
  1086. As with normal "load game" operations, GRAAL searches for and executes any
  1087. ACTION: statements starting with the special verb number -2 before lighting
  1088. the scene and returning control to the player. This is to enable you to
  1089. perform any special actions that need to be taking, for example restoring
  1090. global BOB images (which are not saved by a "save game" or a MARK command).
  1091. See also: @{"MARK" link "GG_MARK" 0} command
  1092. @endnode
  1093. @node "GG_SAY" " SAY "
  1094. @next "GG_GOTO"
  1095. @prev "GG_RESUME"
  1096. @{fg shine}@{bg fill}SAY Command@{fg text}@{bg back}
  1097. @{i}Makes the main character speak a sentence (or two).@{ui}
  1098.   @{b}SAY Any kind of text goes here...@{ub}
  1099. This command uses the animations in the TALK_MAP statements of the
  1100. graal.main file to animate the character during the length of the text
  1101. display. The text display may use some @{"special
  1102. characters" link "GG_Vars" 0} to perform line
  1103. breaks, put in variable values, etc.
  1104. Note that the SAY command can only be used if the main character is on
  1105. screen, not if a @{"CHAR
  1106. OFF" link "GG_CHAR" 0} or other command has hidden it!
  1107. See also: @{"THINK" link "GG_THINK" 0}
  1108. @endnode
  1109. @node "GG_GOTO" " GOTO "
  1110. @next "GG_SETEXIT"
  1111. @prev "GG_SAY"
  1112. @{fg shine}@{bg fill}GOTO Command@{fg text}@{bg back}
  1113. @{i}Move to another room@{ui}
  1114.  @{b} GOTO <room number | list>,<entrance | list>@{ub}
  1115. This command automatically moves to a new room - it is not needed when using
  1116. exits in the normal way, but is handy in cutscenes and the like. As usual,
  1117. if a list of alternatives is specified, one is choosen at random. Could be
  1118. used in maze-like surroundings, perhaps?
  1119. See also: @{"MARK" link "GG_MARK" 0}, @{"RESUME" link "GG_RESUME" 0}
  1120. @endnode
  1121. @node "GG_THINK" " THINK "
  1122. @next "GG_HANDLE"
  1123. @prev "GG_SETEXIT"
  1124. @{fg shine}@{bg fill}THINK Command@{fg text}@{bg back}
  1125. @{i}Displays text above the main character@{ui}
  1126.   @{b}THINK Any kind of text goes here...@{ub}
  1127. This command behaves just like @{"SAY" link "GG_SAY" 0}, except it doesn't automatically animate
  1128. the character. Good for "thinking" as well as using special animation
  1129. sequences shown using MOVE commands instead of the standard TALK_MAP
  1130. animations.
  1131. See also: @{"SAY" link "GG_SAY" 0}
  1132. @endnode
  1133. @node "GG_RESP" " RESP           "
  1134. @{fg shine}@{bg fill}RESP Command@{fg text}@{bg back}
  1135. @{i}Make a dialogue partner respond@{ui}
  1136.   @{b}RESP R|S,dialogue number,sentence@{ub}
  1137. @{b}R@{ub} means after the character has "spoken", it will be displayed using its
  1138. default image or animation again. @{b}S@{ub} means the image used just before the
  1139. RESP command was called will be used again.
  1140. the @{b}dialogue number@{ub} refers to the number assigned to this dialogue by the
  1141. @{"DLG:" link "ST_DLG" 0} statement in the graal.main file.
  1142. The sentence is constructed just like sentences used in, for example, the
  1143. @{"SAY" link "GG_SAY" 0} and @{"THINK" link "GG_THINK" 0} commands.
  1144. See also: @{"SAY" link "GG_SAY" 0} and @{"THINK" link "GG_THINK" 0} commands, @{"DLG" link "ST_DLG" 0} statement
  1145. @endnode
  1146. @node "GG_HANDLE" " HANDLE "
  1147. @next "GG_PICK"
  1148. @prev "GG_THINK"
  1149. @{fg shine}@{bg fill}HANDLE Command@{fg text}@{bg back}
  1150. @{i}Make the main character handle an object@{ui}
  1151.  @{b} HANDLE [objno|LOW|MID|HIGH|-1]@{ub}
  1152. @{b}HANDLE@{ub} on its own uses the HANDLE_MAP animations specified in the graal.main
  1153. file to make the main character "operate" OBJ1. 
  1154. @{b}HANDLE objno@{ub} makes the character operate the specified object.
  1155. @{b}HANDLE LOW|MID|HIGH@{ub} uses the "handle animation" - a general, convenient way
  1156. to stretch out a hand without having to resort to CBOB or OMOVE 0,...
  1157. commands.
  1158. @{b}HANDLE -1@{ub} resets the main character to what he/she looked like just before
  1159. the HANDLE command took effect.
  1160. @endnode
  1161. @node "GG_PICK" " PICK "
  1162. @next "GG_GET"
  1163. @prev "GG_HANDLE"
  1164. @{fg shine}@{bg fill}PICK Command@{fg text}@{bg back}         
  1165. @{i}Pick up an object@{ui}
  1166.  @{b} PICK [<object number>]@{ub}
  1167. Adds the specified object (or OBJ1, if no object number is specified) to the
  1168. inventory and erases it from the scene area. This command is often preceded
  1169. by a MOBJ and a @{"HANDLE" link "GG_HANDLE" 0} command to show on screen what's going on.
  1170. There is no DROP command that automatically replaces an object on screen.
  1171. the main reason is that it isn't worth it: For every possible location the
  1172. object could be dropped, you would have to specify a place for it in the
  1173. scene area.
  1174. The most comfortable way to dispose of objects is letting the main character
  1175. do so automatically when they have filled their purpose, using the @{"REMOVE" link "GG_REMOVE" 0}
  1176. command.
  1177. See also: @{"GET" link "GG_GET" 0}, @{"REMOVE" link "GG_REMOVE" 0}
  1178. @endnode
  1179. @node "GG_GET" " GET "
  1180. @next "GG_REMOVE"
  1181. @prev "GG_PICK"
  1182. @{fg shine}@{bg fill}GET Command@{fg text}@{bg back}
  1183. @{i}Add an object to the inventory@{ui}
  1184.   @{b}GET <object number>,U|N@{ub}
  1185. The object is added to the inventory. Use "U" if the inventory display
  1186. should be updated (which is the normal procedure), "N" if the inventory
  1187. should be left unaffected, for example if GET is used during a dialogue, or
  1188. you make a number of consecutive GETs letting only the last one update the
  1189. display.
  1190. The difference between GET and @{"PICK" link "GG_PICK" 0} is that GET does not take any notice of
  1191. the object's previous whereabouts.
  1192. See also: @{"PICK" link "GG_PICK" 0}, @{"REMOVE" link "GG_REMOVE" 0}
  1193. @endnode
  1194. @node "GG_REMOVE" " REMOVE "
  1195. @next "GG_SETOF"
  1196. @prev "GG_GET"
  1197. @{fg shine}@{bg fill}REMOVE Command@{fg text}@{bg back}
  1198. @{i}Removes an object from the inventory@{ui}
  1199.  @{b} REMOVE <object number>,N|U,<room>@{ub}
  1200. Removes the object from the inventory. If "U" is specified, the inventory
  1201. display is updated. The object is placed in the specified room. If the room
  1202. is specified as 0, the object "disappears" forever!
  1203. Note: This command can also be used to put an object in any room except the
  1204. current at any time. In this case, specify "N" to skip the inventory
  1205. updating. To put an object in the current room, the @{"SHOW" link "GG_SHOW" 0} command must always
  1206. be used.
  1207. See also: @{"GET" link "GG_GET" 0}, @{"PICK" link "GG_PICK" 0}
  1208. @endnode
  1209. @node "GG_NAME" " NAME           "
  1210. @{fg shine}@{bg fill}NAME Command@{fg text}@{bg back}
  1211. @{i}Alter the name of an object@{ui}
  1212.   @{b}NAME new name[,word1,word2,word3]@{ub}
  1213. Very often in an adventure, an object is "transformed" - that is, one object
  1214. appears while another disappears at the same time. (For example, a parcel is
  1215. opened to reveal a book - the parcel is gone, the book exists.) To save
  1216. memory, it makes sense to use the old object number for the new object also,
  1217. since there is no risk of confusion - the two objects never appear at the
  1218. same time.
  1219. The command NAME alters the name of the current OBJ1 (see the @{"syntax" link "GG_Syntax" 0}
  1220. conventions). In addition, the determination words (see the @{"OBJECT" link "ST_OBJECT" 0}
  1221. statement) may be altered to suit the new object description.
  1222. See also: @{"OBJ1" link "GG_OBJ" 0} command, @{"OBJECT" link "ST_OBJECT" 0} statement.
  1223. @endnode
  1224. @node "GG_ICON" " ICON           "
  1225. @{fg shine}@{bg fill}ICON Command@{fg text}@{bg back}
  1226. @{i}Alter the icon used for inventory display@{ui}
  1227.  @{b} ICON [objno,]image@{ub}
  1228. This command does a bit of what the NAME command does for a text inventory,
  1229. but you should probably use both the NAME and the ICON command when changing
  1230. properties for objects in an icon display - NAME still determines the text
  1231. shown when the object is referred to in the game, although it doesn't appear
  1232. in the inventory list...
  1233. @endnode
  1234. @node "GG_PREP" " PREP           "
  1235. @{fg shine}@{bg fill}
  1236. PREP Command@{fg text}@{bg back}
  1237. @{i}Alter the preposition of OBJ1@{ui}
  1238.  @{b} PREP [preposition]@{ub}
  1239. By specifying a preposition for an object, the verb USE will assume this
  1240. object must be used in conjunction with something else, and therefore awaits
  1241. the input of a second object before checking for actions.
  1242. Specifying PREP without a preposition will do the opposite, allowing an
  1243. object to be used on its own again.
  1244. @endnode
  1245. @node "GG_NEWOBJ" " NEWOBJ         "
  1246. @{fg shine}@{bg fill}NEWOBJ Command@{fg text}@{bg back}
  1247. @{i}Creates or modifies an object@{ui}
  1248.  @{b} NEWOBJ: object_parameters@{ub}
  1249. This command acts exactly like the OBJECT: statement - only here, the
  1250. parameters are separated by commas instead of semi-colons, so you can not
  1251. place an animation sequence containing commas as the default object image.
  1252. Also note that this command resets all object flags to 0.
  1253. See also: @{"OBJECT" link "ST_OBJS" 0} statement
  1254. @endnode
  1255. @node "GG_SETOF" " SETOF "
  1256. @next "GG_SETOF"
  1257. @prev "GG_REMOVE"
  1258. @{fg shine}@{bg fill}SETOF Command@{fg text}@{bg back}
  1259. @{i}Assigns a value to an object flag@{ui}
  1260.   @{b}SETOF [<object number>,]flag=value|list@{ub}
  1261. If no object number is specified, OBJ1 is assumed. The flag is set to the
  1262. value.
  1263. If the value is specified as #DATE, the value is the current in-game date in
  1264. the format year*10000+month*100+date, e.g. 19960801 for Augist 1, 1996
  1265. If the value is specified as #TIME, the value is the current in-game time in
  1266. the format hour*100+minutes, e.g. 2355 for 11:55 pm.
  1267. The value can also be a reference to a room or object flag. The format is
  1268. #R#roomnumber#flag# or #O#objectnumber#flag#
  1269. For example,
  1270.  SETOF 3,6=#R#3#4#
  1271. would set flag 6 for object 3 to the value held in room flag 4 of room 3.
  1272. If a list of values is specified, one of the values is chosen at random. For
  1273. example,
  1274.  SETOF 2=3|7|9
  1275. would set object flag 2 for object 1 to either 3, 7, or 9. A maximum of 12
  1276. values may be specified in a list.
  1277. See also: @{"ADDOF" link "GG_ADDOF" 0}, @{"DECOF" link "GG_DECOF" 0}, @{"IFOF" link "GG_IFOF" 0}
  1278. @endnode
  1279. @node "GG_ADDOF" " ADDOF "
  1280. @next "GG_ADDOF"
  1281. @prev "GG_SETOF"
  1282. @{fg shine}@{bg fill}ADDOF Command@{fg text}@{bg back}
  1283. @{i}Adds to or subtracts from a flag value@{ui}
  1284.  @{b} ADDOF [object,]flag[,value]
  1285.   ADDOF2 flag[,value]@{ub}
  1286. ADDOF affects a flag for an object. If no value is specified, 1 is added.
  1287. Negative values may be used, thus subtracting from the flag value.
  1288. ADDOF2 affects OBJ2 - this form is kept mainly for backwards compatibility,
  1289. you can achieve exactly the same by specifying object 2's object number in
  1290. most cases...
  1291. DECOF is used for special "countdown" purposes.
  1292. The value can be a reference to a room or object flag. The format is
  1293. #R#roomnumber#flag# or #O#objectnumber#flag#.
  1294. For example,
  1295.  ADDOF 1,#O#4#2#
  1296. would add the value held in object flag 2 for object 4 to object flag 1 for
  1297. OBJ1.
  1298. Another example:
  1299.  ADDOF2 4
  1300. would add 1 to object flag 4 of OBJ2.
  1301. See also: @{"SETOF" link "GG_SETOF" 0}, @{"DECOF" link "GG_DECOF" 0}, @{"IFOF" link "GG_IFOF" 0}
  1302. @endnode
  1303. @node "GG_DECOF" " DECOF "
  1304. @next "GG_SETRF"
  1305. @prev "GG_ADDOF"
  1306. @{fg shine}@{bg fill}DECOF Command@{fg text}@{bg back}
  1307. @{i}Counts down the flag value to zero@{ui}
  1308.  @{b} DECOF flag
  1309.   DECOF2 flag@{ub}
  1310. DECOF is used for OBJ1, DECOF2 for OBJ2. The flag value is decreased by 1
  1311. until it reaches zero, then it stays there.
  1312. See also: @{"SETOF" link "GG_SETOF" 0}, @{"ADDOF" link "GG_ADDOF" 0}, @{"IFOF" link "GG_IFOF" 0}
  1313. @endnode
  1314. @node "GG_SETRF" " SETRF "
  1315. @next "GG_ADDRF"
  1316. @prev "GG_DECOF"
  1317. @{fg shine}@{bg fill}SETRF Command@{fg text}@{bg back}
  1318. @{i}Assigns a value to a room flag@{ui}
  1319.   @{b}SETRF [<room number>,]flag=value|list@{ub}
  1320. If no room number is specified, the current room is assumed. The flag is set
  1321. to the value.
  1322. If the value is specified as #DATE, the value will be the current in-game
  1323. date in the format year*10000+month*100+date, e.g. 19960801 for August 1,
  1324. 1996.
  1325. If the value is specified as #TIME, the value will be the current in-game
  1326. time in the format hours*100 + minutes, e.g. 2355 for 11:55 pm.
  1327. For example,
  1328.  SETRF 2,1=5
  1329. would set room flag 1 for room 2 to 5
  1330. The value can be a reference to a room or object flag. The format is
  1331. #R#roomnumber#flag# or #O#objectnumber#flag#
  1332. For example,
  1333.  SETRF 2=#R#2#1#
  1334. would set room flag 2 for the current room to the value of room flag 1 for
  1335. room 2.
  1336. If a list of values is specified, one of the values is choosen at random.
  1337. For example,
  1338.  SETRF 2=3|7|9
  1339. would set room flag 2 to either 3, 7, or 9. A maximum of 12 values may be
  1340. specified in a list.
  1341.  SETRF 1,3=#TIME
  1342. would set room flag 3 for room 1 to the current game time.
  1343.  SETRF 0,1=#DATE
  1344. would set room flag 1 for room 0 to the current game date. Room 0 is a
  1345. "global" room never used as a normal room. Nevertheless, it exists
  1346. flag-wise, so its 20 flags can be used to hold "global game values".
  1347. See also: @{"ADDRF" link "GG_ADDRF" 0}, @{"DECRF" link "GG_DECRF" 0}, @{"IFRF" link "GG_IFRF" 0}
  1348. @endnode
  1349. @node "GG_ADDRF" " ADDRF "
  1350. @next "GG_DECRF"
  1351. @prev "GG_SETRF"
  1352. @{fg shine}@{bg fill}ADDRF Command@{fg text}@{bg back}
  1353. @{i}Adds to or subtracts from a room flag value@{ui}
  1354.  @{b} ADDRF [room,]flag[,value]@{ub}
  1355. ADDRF affects a flag for the current room. The number is added to the flag
  1356. value. If the number is negative, a subtraction is performed.
  1357. The value may be a reference to a room or object flag. The format is
  1358. #R#roomnumber#flag# or #O#objectnumber#flag#.
  1359. For example,
  1360.  ADDRF 3,1,#O#5#2#
  1361. adds the value held in object flag 2 of object 5 to room flag 1 of room 3.
  1362.  ADDRF 2
  1363. would add 1 to room flag 2 of the current room
  1364.  ADDRF 2,3
  1365. would add 3 to room flag 2 of the current room
  1366.  ADDRF 5,2,3
  1367. would add 3 to room flag 2 of room 5 
  1368. See also: @{"SETRF" link "GG_SETRF" 0}, @{"DECRF" link "GG_DECRF" 0}, @{"IFRF" link "GG_IFRF" 0}
  1369. @endnode
  1370. @node "SHOWEXIT" " SHOWEXIT       "
  1371. @{fg shine}@{bg fill}SHOWEXIT Command@{fg text}@{bg back}
  1372. @{i}Shows a previously hidden exit@{ui}
  1373.  @{b} SHOWEXIT exit_no@{ub}
  1374. This restores a previously hidden exit on screen
  1375. See also: @{"HIDEEXIT" link "HIDEEXIT" 0} command
  1376. @endnode
  1377. @node "HIDEEXIT" " HIDEEXIT       "
  1378. @{fg shine}@{bg fill}HIDEEXIT Command@{fg text}@{bg back}
  1379. @{i}Hides an exit@{ui}
  1380.   @{b}HIDEEXIT exit_no@{ub}
  1381. When entering a room, all exit defined by EXIT: statements are always
  1382. visible and usable. This command hides the exit. It can be restored later by
  1383. the SHOWEXIT command.
  1384. See also: @{"SHOWEXIT" link "SHOWEXIT" 0} command
  1385. @endnode
  1386. @node "GG_DECRF" " DECRF "
  1387. @next "GG_CBOB"
  1388. @prev "GG_ADDRF"
  1389. @{fg shine}@{bg fill}DECRF Command@{fg text}@{bg back}
  1390. @{i}Counts down the room flag value to zero@{ui}
  1391.  @{b} DECRF flag@{ub}
  1392. DECRF decreases the value of the flag until it reaches zero, then it stays
  1393. there.
  1394. See also: @{"SETRF" link "GG_SETRF" 0}, @{"ADDRF" link "GG_ADDRF" 0}, @{"IFRF" link "GG_IFRF" 0}
  1395. @endnode
  1396. @node "GG_CBOB" " CBOB "
  1397. @next "GG_CMOVE"
  1398. @prev "GG_DECRF"
  1399. @{fg shine}@{bg fill}CBOB Command@{fg text}@{bg back}
  1400. @{i}Alter the image for the main character@{ui}
  1401.  @{b} CBOB <image number>@{ub}
  1402. The main character changes to the specified image. The screen (hotspot)
  1403. position is not altered.
  1404. See also: @{"CPOS" link "GG_CPOS" 0}, @{"CMOVE" link "GG_CMOVE" 0}, @{"OMOVE" link "GG_OMOVE" 0}
  1405. @endnode
  1406. @node "GG_CMOVE" " CMOVE "
  1407. @next "GG_MOBJ"
  1408. @prev "GG_CBOB"
  1409. @{fg shine}@{bg fill}CMOVE Command@{fg text}@{bg back}
  1410. @{i}Moves the character to a new screen position using the default @{"WALK_..." link "ST_WALK" 0}
  1411. animations.@{ui}
  1412.  @{b} CMOVE x,y,C|P@{ub}
  1413. @{b}x@{ub} and @{b}y@{ub} are the screen (hotspot) coordinates. Use @{b}P@{ub} to end the CMOVE with an
  1414. appropriate PAUSE_... image, @{b}C@{ub}" link "ST_PAUSE" 0} image, C to end with a
  1415. @{"STILL_..." link "ST_STILL" 0} image. C is mainly used when another CMOVE follows immediately.
  1416. See also: @{"CBOB" link "GG_CBOB" 0}, @{"CPOS" link "GG_CPOS" 0}, @{"OMOVE" link "GG_OMOVE" 0}
  1417. @endnode
  1418. @node "GG_MOBJ" " MOBJ "
  1419. @next "GG_CPOS"
  1420. @prev "GG_CMOVE"
  1421. @{fg shine}@{bg fill}MOBJ Command@{fg text}@{bg back}
  1422. @{i}Move the main character next to an object@{ui}
  1423.   @{b}MOBJ [object number]@{ub}
  1424. The main character is moved to the position indicated by the character
  1425. offset parameters of the OBJECT statement or command. If no object number is
  1426. given, OBJ1 is assumed.
  1427. @endnode
  1428. @node "GG_MEXIT" " MEXIT          "
  1429. @{fg shine}@{bg fill}MEXIT Command@{fg text}@{bg back}
  1430. @{i}Move character to exit@{ui}
  1431.  @{b} MEXIT@{ub}
  1432. This command can only be used in an ACTION: 0;... statement, and moves the
  1433. character to the exit point for the clicked exit, as specified in the
  1434. corresponding @{"EXIT:" link "ST_EXIT" 0} statement
  1435. @endnode
  1436. @node "GG_CPOS" " CPOS "
  1437. @next "GG_CHAR"
  1438. @prev "GG_MOBJ"
  1439. @{fg shine}@{bg fill}CPOS Command@{fg text}@{bg back}
  1440. @{i}Alter the character's screen position@{ui}
  1441.   @{b}CPOS x,y@{ub}
  1442. Immediately alters the main character's screen position to x,y (without
  1443. walking there like @{"CMOVE" link "GG_CMOVE" 0}.) The image is not altered: @{"CBOB" link "GG_CBOB" 0} may be used for
  1444. that.
  1445. See also: @{"CBOB" link "GG_CBOB" 0}, @{"CMOVE" link "GG_CMOVE" 0}, @{"OMOVE" link "GG_OMOVE" 0}
  1446. @endnode
  1447. @node "GG_CHAR" " CHAR "
  1448. @next "GG_OMOVE"
  1449. @prev "GG_CPOS"
  1450. @{fg shine}@{bg fill}CHAR Command@{fg text}@{bg back}
  1451. @{i}Turn main character display on or off@{ui}
  1452.  @{b} CHAR ON|OFF@{ub}
  1453. CHAR OFF means the main character is not on screen - use for cutscenes,
  1454. animated intros and the like. CHAR ON restores the main character to the
  1455. position before CHAR OFF.
  1456. See also: @{"CPOS" link "GG_CPOS" 0}, @{"CBOB" link "GG_CBOB" 0}
  1457. @endnode
  1458. @node "GG_FLOOR" " FLOOR          "
  1459. @{fg shine}@{bg fill}FLOOR Command@{fg text}@{bg back}
  1460. @{i}(Re-)defines a floor@{ui}
  1461.   @{b}FLOOR number,x1,y1,x2,y2,floormap1,...,floormapn@{ub}
  1462. This command works exactly like the @{"FLOOR:" link "ST_FLOOR" 0} statement, and allows you to
  1463. re-arrange floors for a room any way you like. You can make previously
  1464. unreachable areas accessible, or quite the opposite.
  1465. You must make sure that all floormaps are valid - changing a single floor
  1466. may mean you have to use FLOOR commands for other floors to just to change
  1467. the floor maps. And if you alter the number of floors, you must also use the
  1468. @{"NFLOOR" link "GG_NFLOOR" 0} command to set the new number of floors.
  1469. See also: @{"NFLOOR" link "GG_NFLOOR" 0} and @{"SETFLOOR" link "GG_SETFLOOR" 0} commands, @{"FLOOR:" link "ST_FLOOR" 0} statement
  1470. @endnode
  1471. @node "GG_NFLOOR" " NFLOOR         "
  1472. @{fg shine}@{bg fill}NFLOOR command@{fg text}@{bg back}
  1473. @{i}Changes the number of floors in a room@{ui}
  1474.   @{b}NFLOOR number@{ub}
  1475. Only use this command when you have changes the floor structure, and number
  1476. of floors, in a room with the @{"FLOOR" link "GG_FLOOR" 0} command.
  1477. See also: @{"FLOOR" link "GG_FLOOR" 0} and @{"SETFLOOR" link "GG_SETFLOOR" 0} commands.
  1478. @endnode
  1479. @node "GG_SETFLOOR" " SETFLOOR       "
  1480. @{fg shine}@{bg fill}SETFLOOR command@{fg text}@{bg back}
  1481. @{i}Informs the system about the main character's whereabouts in the floor
  1482. system.@{ui}
  1483.  @{b} SETFLOOR floor number@{ub}
  1484. Normally, GRAAL automatically keeps track of on which floor your character
  1485. is currently positioned. There are, however, a few commands that may leave
  1486. the system unaware about your hero's whereabouts. These are the @{"FLOOR" link "GG_FLOOR" 0} and
  1487. @{"OMOVE" link "GG_OMOVE" 0} commands. If one of these commands places your character on another
  1488. floor previously, you should specify the new floor number with this command.
  1489. Otherwise, strahnge things may happen when the character tries to move
  1490. next.
  1491. See also: @{"FLOOR" link "GG_FLOOR" 0} and @{"OMOVE" link "GG_OMOVE" 0} commands, and the @{"FLOOR:" link "ST_FLOOR" 0} statement.
  1492. @endnode
  1493. @node "GG_OMOVE" " OMOVE "
  1494. @next "GG_SHOW"
  1495. @prev "GG_CHAR"
  1496. @{fg shine}@{bg fill}OMOVE Command@{fg text}@{bg back}
  1497. @{i}Move an object (or the main character) according to specified animation
  1498. sequence
  1499. @{ui}
  1500.  @{b} OMOVE object number,x,y,speed adjustment,FLIP| ,WAIT| ,animation sequence@{ub}
  1501. The object's hot spot is moved to the x,y screen co-ordinates. During the
  1502. movement, the @{"animation
  1503. sequence" link "GG_Animation" 0} specified in the last parameter is used. 
  1504. The x and y positions can be set relative to the main character's current
  1505. position using CX+offset and CY+offset. Example:
  1506.   @{b}OMOVE 2,CX+20,CY+0,1,FLIP, ,A 0,(SBOB1,12)(SBOB2,12)(SBOB3,12)(SBOB2,12)@{ub}
  1507. moves object 2 to a position 20 pixels to the right of the main character,
  1508. at the normal WALK_SPEED speed, using an animation consisting of four
  1509. different images.
  1510. If the speed adjustment factor is 1, the speed will be the speed set with
  1511. the WALK_SPEED parameter in the graal.main file. A @{b}lower@{ub} number gives
  1512. @{b}faster@{ub}" link "ST_WALK_SPEED" 0} parameter in the graal.main file. A lower
  1513. number gives faster movement, a @{b}higher@{ub} number gives @{b}slower@{ub} movement.
  1514. If FLIP is specified, and movement is from left to right,  the images are
  1515. used as supplied, but if the movement is from right to left, all images in
  1516. the animation sequence are automatically flipped first. Specifying any other
  1517. value (such as a blank) means the images are always used as specified.
  1518. If WAIT is specified, the entire animation sequence is carried out before
  1519. GRAAL continues with the next command. Otherwise, GRAAL will not check if
  1520. the animation has been concluded until the next OMOVE command for the same
  1521. object. If you put several OMOVE commands for the same object next to each
  1522. other, you should specify a blank space instead of WAIT - this eliminates
  1523. the brief pauses between OMOVE commands that will otherwise occur. On the
  1524. other hand, if the command following an OMOVE is something like a SHOW
  1525. command for the  same object, always specify WAIT - otherwise the SHOW would
  1526. be affecting the object before the animation sequence had a chance to
  1527. finish.
  1528. OMOVE can be used to move and animate the main character using other
  1529. animations sequences than the default. Just specify object number 0 to point
  1530. to the main character.
  1531. If x and y are left blank, the object is animated using the animation string
  1532. at its curent position. Normally, the animation is automatically stopped
  1533. when the object reaches the x,y position, and the first BOB image in the
  1534. animation sequence will the be used as the still image. When no new x,y
  1535. position is given, the animation goes on until another image-manipulating
  1536. command for the object  is encountered, for example SHOW or CBOB. Example:
  1537.  @{b} OMOVE 0, , ,1,A 0,(11,24)(12,24)@{ub}
  1538. would animate the main character alternating between BOB images 11 and 12
  1539. indefinitely. (Well, until the BOB image for the main character is altered
  1540. using some other command, anyway.)
  1541. See also: @{"SHOW" link "GG_SHOW" 0}, @{"CMOVE" link "GG_CMOVE" 0}, @{"CPOS" link "GG_CPOS" 0}, @{"CBOB" link "GG_CBOB" 0}, @{"HIDE" link "GG_HIDE" 0}
  1542. @endnode
  1543. @node "GG_SHOW" " SHOW "
  1544. @next "GG_HIDE"
  1545. @prev "GG_OMOVE"
  1546. @{fg shine}@{bg fill}SHOW Command@{fg text}@{bg back}
  1547. @{i}Show an object@{ui}
  1548.  @{b} SHOW object number,x,y,image@{ub}
  1549. If the object number is 0, the commands manipulates the graphics of the main
  1550. character.
  1551. The image can be a BOB image number, an animation string, or even a pattern
  1552. (PTRN) specification. 
  1553. If x and y are left blank, the position of the object will not be altered,
  1554. only the image.
  1555. If image is left blank, the object is moved to the new co-ordinates
  1556. retaining the previous image.
  1557. Note: If the object was in the inventory before the SHOW, it is removed and
  1558. the inventory is updated.
  1559. Example:
  1560.  @{b} SHOW 3, , ,PTRN 1@{ub}
  1561. would show object 3 in its previous position using the animation sequence
  1562. stored in the 1.ptrn file.
  1563. Another example:
  1564.   @{b}SHOW ROBJ1,30,70, @{ub}
  1565. would place room object 1 at the new co-ordinates 30,70.
  1566. A third example:
  1567.   SHOW 0, , , 
  1568. refreshes the graphics of the main character. This is useful if you have
  1569. loaded new global images, for instance.
  1570. See also: @{"HIDE" link "GG_HIDE" 0}, @{"OMOVE" link "GG_OMOVE" 0}, @{"CPOS" link "GG_CPOS" 0}, @{"CBOB" link "GG_CBOB" 0}, @{"CMOVE" link "GG_CMOVE" 0}
  1571. @endnode
  1572. @node "GG_HIDE" " HIDE "
  1573. @next "GG_TRACK"
  1574. @prev "GG_SHOW"
  1575. @{fg shine}@{bg fill}HIDE Command@{fg text}@{bg back}
  1576. @{i}Hides an object@{ui}
  1577.  @{b} HIDE object number@{ub}
  1578. hides the specified object from view (that is, removes it from the current
  1579. room). This may often be used in room DACT statements, using room flags to
  1580. decide what objects are being shown and not in a particular situation or
  1581. phase of the game.
  1582. See also: @{"CHAR" link "GG_CHAR" 0}, @{"SHOW" link "GG_SHOW" 0}
  1583. @endnode
  1584. @node "GG_OBJONTOP" " OBJONTOP       "
  1585. @{fg shine}@{bg fill}OBJONTOP Command@{fg text}@{bg back}
  1586. @{i}Puts the object on top of all other displayed objects@{ui}
  1587.  @{b} OBJONTOP object number@{ub}
  1588. Sometimes it happens that two objects partly occupy the same space on screen
  1589. - one object being displayed on top op the other.
  1590. However, the topmost object being displayed properly is not, in itself, a
  1591. guarantee that the mouse cursor will actually register it when you move the
  1592. cursor across it. If the underlying object is further up GRAAL's internal
  1593. list of objects shown in the room, it is that obejct's name that will be
  1594. shown, which is probably not what you want. And that list was unavailable to
  1595. you before GRAAL 2.
  1596. The simple remedy is this command. If, when testing your adventure, you find
  1597. an object which is unavailable in the manner described above, simply give an
  1598. OBJONTOP command for it once it's been placed in the room  - in a DACT:
  1599. statement if it is a ROOMOBJect, or right after a SHOW command, for example.
  1600. @endnode
  1601. @node "GG_TRACK" " TRACK "
  1602. @next "GG_SAMLOAD"
  1603. @prev "GG_HIDE"
  1604. @{fg shine}@{bg fill}TRACK Command@{fg text}@{bg back}
  1605. @{i}Handles soundtracker music modules@{ui}
  1606.   @{b}TRACK <file name | list>,ONCE|LOOP,FILTER|NO@{ub}
  1607. If the file name is different than the last sound tracker file name used, or
  1608. no tracker file is currently in memory, the file is loaded and the module
  1609. starts playing. 
  1610. Currently, the ONCE|LOOP parameter doesn't work - the module always start
  1611. again when the end is reached, unless you put a tracker "stop" command in
  1612. the tracker module itself. 
  1613. Specify FILTER if you want the Amiga's low-pass audio filter to be on while
  1614. the module is playing (takes away some high frequencies and hissing
  1615. noises.)
  1616.   @{b}TRACK OFF@{ub}
  1617. Stop the module playing
  1618.   @{b}TRACK ON@{ub}
  1619. Resume playing a stopped module
  1620.   @{b}TRACK NO@{ub}
  1621. Stop playing and erase the module from memory (thus freeing memory space).
  1622. Notes on tempo:
  1623. Currently, GRAAL only supports the old tracker tempo control of "ticks". The
  1624. primary tempo is always 33 and the secondary tempo should be set using
  1625. tracker commands in the module - between 5 and 7 is usually good.
  1626. See also: @{"SAMLOAD" link "GG_SAMLOAD" 0}, @{"SAMPLAY" link "GG_SAMPLAY" 0}
  1627. @endnode
  1628. @node "GG_SAMLOAD" " SAMLOAD "
  1629. @next "GG_SAMPLAY"
  1630. @prev "GG_TRACK"
  1631. @{fg shine}@{bg fill}SAMLOAD Command@{fg text}@{bg back}
  1632. @{i}Loads a raw or IFF sample into memory@{ui}
  1633.  @{b} SAMLOAD <filename | list>@{ub}
  1634. This command loads a raw or IFF sample into memory for later use with the
  1635. SAM command.
  1636. See also: @{"SAM" link "GG_SAMPLAY" 0}
  1637. @endnode
  1638. @node "GG_SAMPLAY" " SAMPLAY "
  1639. @next "GG_CLPART"
  1640. @prev "GG_SAMLOAD"
  1641. @{fg shine}@{bg fill}SAM Command@{fg text}@{bg back}
  1642. @{i}Plays a previously loaded sample@{ui}
  1643.   @{b}SAM ONCE|LOOP,DEF|<frequency>@{ub}
  1644. Play a sample loaded with a previous SAMLOAD command once or in a loop. DEF
  1645. will make the sample play with the default frequency. To raise or lower the
  1646. pitch, specify a frequency instead.
  1647.   @{b}SAM OFF@{ub}
  1648. Stop playing a sample.
  1649.  @{b} SAM NO@{ub}
  1650. Stop playing a sample and erase it from memory (thus freeing memory space).
  1651. See also: SAMLOAD
  1652. @endnode
  1653. @node "GG_CLPART" " CLPART "
  1654. @next "GG_BOBS"
  1655. @prev "GG_SAMPLAY"
  1656. @{fg shine}@{bg fill}CLPART Command@{fg text}@{bg back}
  1657. @{i}Load a clipart IFF file@{ui}
  1658.   @{b}CLPART filename@{ub}
  1659. The specified picture file is loaded into memory, where it is used for
  1660. grabbing images with the BOBS command.
  1661.  @{b} CLPART OFF@{ub}
  1662. Get rid off a previously loaded clipart file when it is no longer needed.
  1663. See also: @{"BOBS" link "GG_BOBS" 0}
  1664. @endnode
  1665. @node "GG_BOBS" " BOBS "
  1666. @next "GG_BOBS"
  1667. @prev "GG_CLPART"
  1668. @{fg shine}@{bg fill}BOBS Command@{fg text}@{bg back}
  1669. @{i}Loads BOB images into the image bank@{ui}
  1670.   @{b}BOBS number of images,starting image,x,y,width,height,x-offset,hotspot@{ub}
  1671. The parameters for this command are exactly the same as for the @{"BOBS:" link "ST_BOBS" 0}
  1672. statement, except the parameters should be separated by commas (,) instead
  1673. of semi-colons (;). There is one slight difference in how you specify the
  1674. the starting BOB image number (which is the second parameter). This should
  1675. be specified as n, SBOBn, or RBOBn, depending on the type  of images you
  1676. intend to add / replace in the image bank.
  1677. This command must be preceeded by a CLPART command.
  1678. See also: @{"CLPART" link "GG_CLPART" 0}
  1679. @endnode
  1680. @node "GG_HOTSP" " HOTSP          "
  1681. @{fg shine}@{bg fill}HOTSP Command@{fg text}@{bg back}
  1682. @{i}Alters the hotspot of an image@{ui}
  1683.  @{b} HOTSP image number,hotspot position@{ub}
  1684. This command is used when you need to make changes to the "3D order" in
  1685. which objects and images are displayed on the screen.
  1686. A hotspot position of 0 defines the default hotspot at the middle of the
  1687. bottom of the image. Any other value defines another hotspot in the y
  1688. direction of the image. The y direction is the important one, because it is
  1689. the relative position of hotspots in the y direction that determines which
  1690. image goes in front of another on the screen.
  1691. An unfortunate side-effect of altering the y hotspot is that the x hotspot
  1692. position "jumps" from the middle of the image to the left edge - there is no
  1693. convenient way for me to avoid this. This means that you have to redisplay
  1694. the image on screen with a new SHOW, OMOVE, BOBON or other such command, and
  1695. in that command adjust the x position to cancel out the effect of the
  1696. hotspot having moved in the x direction as well as in the y direction.
  1697. See also: @{"BOBS" link "ST_BOBS" 0} statement
  1698. @endnode
  1699. @node "GG_LIGHTS" " LIGHTS "
  1700. @next "GG_COLOUR"
  1701. @prev "GG_BOBS"
  1702. @{fg shine}@{bg fill}LIGHTS Command@{fg text}@{bg back}
  1703. @{i}Fade scene area out or in@{ui}
  1704.  @{b} LIGHTS ON|OFF@{ub}
  1705. ON makes the scene area visible. OFF fades the scene area to black.  A
  1706. LIGHTS ON must always be present in a DACT: statement for a room, otherwise
  1707. the screen will stay black and nobody will be able to do very much!
  1708. @endnode
  1709. @node "GG_COLOUR" " COLOUR "
  1710. @next "GG_FADE"
  1711. @prev "GG_LIGHTS"
  1712. @{fg shine}@{bg fill}COLOUR Command@{fg text}@{bg back}
  1713. @{i}Change a colour@{ui}
  1714.   @{b}COLOUR [DLY,]<colour index>,<colour value>@{ub}
  1715. The colour is changed to the new value. If you want to manipulate colours in
  1716. DACT: statements before the @{"LIGHTS
  1717. ON" link "GG_LIGHTS" 0} command has been issued, begin the
  1718. command with the DLY (delay) parameter. This will cause the new colour to
  1719. faded in together with the rest when the LIGHTS ON take effect.
  1720. See also: @{"FADE" link "GG_FADE" 0}
  1721. @endnode
  1722. @node "GG_FADE" " FADE "
  1723. @next "GG_TITLE"
  1724. @prev "GG_COLOUR"
  1725. @{fg shine}@{bg fill}FADE Command@{fg text}@{bg back}
  1726. @{i}Fade one colour to another@{ui}
  1727.  @{b} FADE <colour index>,<speed>,<colour value>,WAIT|NOWAIT|STACK@{ub}
  1728. Fades the specified colour to the new colour value with a certain speed. Use
  1729. the STACK parameter if several colours should be faded simultaneously -
  1730. GRAAL will wait until a FADE command with WAIT or NOWAIT specified and then
  1731. also fade all STACKed colours at the same time.
  1732. WAIT causes the action to be suspended during the colour fade. NOWAIT means
  1733. action will continue while the colours are being faded.
  1734. See also: @{"COLOUR" link "GG_COLOUR" 0}
  1735. @endnode
  1736. @node "GG_CAMERA" " CAMERA         "
  1737. @{fg shine}@{bg fill}CAMERA Command@{fg text}@{bg back}
  1738. @{i}Pan the camera to any part of the background picture in scene area@{ui}
  1739.   @{b}CAMERA x_focus@{ub}
  1740. @{b}x_focus@{ub} is the horizontal position GRAAL tries to put in the center of the
  1741. scene area. Of course, the pan stops whenever one of the edges of the
  1742. background picture comes into view.
  1743. Use this command in cutscenes and the like, when you need to move the camera
  1744. away from or independently of the main character.
  1745. @endnode
  1746. @node "GG_TITLE" " TITLE "
  1747. @next "GG_TYPE"
  1748. @prev "GG_FADE"
  1749. @{fg shine}@{bg fill}TITLE Command@{fg text}@{bg back}
  1750. @{i}Show a title screen@{ui}
  1751.  @{b} TITLE filename,effect@{ub}
  1752. The file is an ordinary iff picture file. The effect can be one of the
  1753. following:
  1754. @{b}number@{ub}
  1755. A previous title picture is gradually dissolved into a new one using a bit
  1756. pattern that depends on the number given. Odd numbers, and prime numbers in
  1757. particular, are recommended. Some numbers don't work at all!
  1758. @{b}FADE@{ub}
  1759. The old picture is faded to black, then the new one is faded in.
  1760. @{b}CUT@{ub}
  1761. Pictures are just swapped without any special effects. HAM screens should be
  1762. handled this way.
  1763. See also: @{"TYPE" link "GG_TYPE" 0}
  1764. @endnode
  1765. @node "GG_TYPE" " TYPE "
  1766. @next "GG_BOBON"
  1767. @prev "GG_TITLE"
  1768. @{fg shine}@{bg fill}TYPE Command@{fg text}@{bg back}
  1769. @{i}Type text on a title screen.@{ui}
  1770.  @{b} TYPE font,colour,x,y,effect,text@{ub}
  1771. This command is used to type text on title background screens. 
  1772. @{b}font@{ub} is 1 or 2, corresponding to the @{"TITLEFONT:" link "ST_XXXFONT" 0} statements in the graal.main
  1773. file.
  1774. @{b}colour@{ub} is the colour number
  1775. @{b}x,y@{ub} is the printing position. x=-1 means the text will be centered.
  1776. @{b}effect@{ub} is @{b}SHADOW@{ub}, @{b}SHADOW2@{ub} or @{b}BORDER,@{ub} surrounding the text with different
  1777. kinds of shading for greater legibility. If no effect is desired, use NONE.
  1778. See also: @{"TITLE" link "GG_TITLE" 0}
  1779. @endnode
  1780. @node "GG_TEXT" " TEXT           "
  1781. @{fg shine}@{bg fill}TEXT command@{fg text}@{bg back}
  1782. @{i}Display text in scene area@{ui}
  1783.   @{b}TEXT x,y,colour,text@{ub}
  1784. This command uses the same font and pause lengths as the @{"SAY" link "GG_SAY" 0}, @{"THINK" link "GG_THINK" 0}, and
  1785. @{"RESP" link "GG_RESP" 0} commands, but any text can be used and it is not connected to the main
  1786. character or a certain dialogue.
  1787. @{b}x,y@{ub}
  1788. The text is placed centered around these co-ordinates. 
  1789. If x is set to -1, the text is be centered vertically on screen, no matter
  1790. how the background is currently scrolled.
  1791. See also: @{"SAY" link "GG_SAY" 0}, @{"THINK" link "GG_THINK" 0}, and @{"RESP" link "GG_RESP" 0} commands
  1792. @endnode
  1793. @node "GG_BOBON" " BOBON "
  1794. @next "GG_BOBOFF"
  1795. @prev "GG_TYPE"
  1796. @{fg shine}@{bg fill}BOBON Command@{fg text}@{bg back}
  1797. @{i}Places a BOB that is not a GRAAL object on screen.@{ui}
  1798.  @{b} BOBON bob number,x,y,image@{ub}
  1799. If you are putting a new image on the screen, first make sure  the BOB
  1800. number is not already in use for any object in the room.
  1801. If the BOB is already placed on screen, and x and y are left empty, only the
  1802. image is changed and not the position.
  1803. If the BOB is already placed on screen, and the image number is left blank,
  1804. only the BOB position changes.
  1805. See also: @{"BOBOFF" link "GG_BOBOFF" 0}
  1806. @endnode
  1807. @node "GG_BOBOFF" " BOBOFF "
  1808. @next "GG_NOBREAK"
  1809. @prev "GG_BOBON"
  1810. @{fg shine}@{bg fill}BOBOFF Command@{fg text}@{bg back}
  1811. @{i}Take away a BOB that is not an object from the screen@{ui}
  1812.   @{b}BOBOFF bob number@{ub}
  1813. Used to take away BOBs from display that have been put there by the BOBON
  1814. command.
  1815. See also: @{"BOBON" link "GG_BOBON" 0}
  1816. @endnode
  1817. @node "GG_PBOB" " PBOB           "
  1818. @{fg shine}@{bg fill}PBOB command@{fg text}@{bg back}
  1819. @{i}Pastes a BOB image@{ui}
  1820.  @{b} PBOB x,y,image@{ub}
  1821. The image is pasted into the picture without anyway of removing it
  1822. afterwards (unlike the BOBON / BOBOFF commands, which actually use a BOB to
  1823. display an image).
  1824. Use for animated dotted lines and other special effects.
  1825. @endnode
  1826. @node "GG_SETDATE" " SETDATE        "
  1827. @{fg shine}@{bg fill}SETDATE Command@{fg text}@{bg back}
  1828. @{i}Sets the (game) date@{ui}
  1829.   @{b}SETDATE year,month,date,weekday@{ub}
  1830. Note that we are talking about the "internal game time", not the system real
  1831. time clock...
  1832. If any of the weekday, date, or month parameters are left blank, they retain
  1833. their old values.
  1834. @{b}year@{ub}
  1835. Anything you wish, preferably 2 or 4 digits
  1836. @{b}month@{ub}
  1837. 1-12, 1 being January...
  1838. @{b}date@{ub}
  1839. 1-31. The GRAAL calendar can handle the normal lengths of the months, but
  1840. does not consider leap-years.
  1841. @{b}weekday@{ub}
  1842. 1-7, 1 being Monday and 7 Sunday. The GRAAL calendar does not check the
  1843. historical accuracy of weekday versus date, though (see above).
  1844. See also: @{"SETTIME" link "GG_SETTIME" 0} and @{"ADDTIME" link "ADDTIME" 0} commands
  1845. @endnode
  1846. @node "GG_SETTIME" " SETTIME        "
  1847. @{fg shine}@{bg fill}SETTIME command@{fg text}@{bg back}
  1848. @{i}Sets the time@{ui}
  1849.   @{b}SETTIME hours,minutes@{ub}
  1850. The time must be set in 24-hour format, regardless of whether it is
  1851. presented that way or not (see @{"TIME_FORMAT" link "ST_TIMEFORMAT" 0}).
  1852. Note that we talk about the "in-game clock", not the real-time system clock
  1853. here.
  1854. See also: @{"ADDTIME" link "ADDTIME" 0} command
  1855. @endnode
  1856. @node "ADDTIME" " ADDTIME        "
  1857. @{fg shine}@{bg fill}ADDTIME command@{fg text}@{bg back}
  1858. @{i}Advances the clock@{ui}
  1859.  @{b} ADDTIME hours,minutes@{ub}
  1860. Added time also alters the calendar if needed. Note that this command is
  1861. only meant to be used for adding minutes, hours or possibly a day or two -
  1862. when jumping further in time, use the @{"SETDATE" link "GG_SETDATE" 0} command.
  1863. If @{"TIME_LAYOUT" link "ST_TIMELAYOUT" 0} or @{"DATE_LAYOUT" link "ST_DATELAYOUT" 0} is active, the command also updates the time
  1864. and/or date displays.
  1865. See also: @{"SETTIME" link "GG_SETTIME" 0} command
  1866. @endnode
  1867. @node "GG_SAVETIME" " SAVETIME       "
  1868. @{fg shine}@{bg fill}SAVETIME Command@{fg text}@{bg back}
  1869. @{i}Saves the current in-game time and date@{ui}
  1870.   @{b}SAVETIME@{ub}
  1871. This command is mainly here to make it a little easier to perform operations
  1872. on dates and times. Doing "maths" on dates and times manually is not very
  1873. fun, so this command lets you use the @{"ADDTIME" link "ADDTIME" 0} command without loosing the
  1874. current time and date forever: Using @{"RESTORETIME" link "GG_RESTORETIME" 0} brings back the saved time
  1875. and date.
  1876. Example: You wish to store the date and time twelve hours from "now" in room
  1877. flag 1 for room 1. This sequence of commands ought to do it.
  1878. SAVETIME;ADDTIME 12,0;SETRF 1,1=#TIME;RESTORETIME
  1879. @endnode
  1880. @node "GG_RESTORETIME" " RESTORETIME    "
  1881. @{fg shine}@{bg fill}RESTORETIME Command@{fg text}@{bg back}
  1882. @{i}Restores a previously saved time and date@{ui}
  1883.   @{b}RESTORETIME@{ub}
  1884. Use this command to restore the date and time to that saved with @{"SAVETIME" link "GG_SAVETIME" 0}.
  1885. @endnode
  1886. @node "GG_NOBREAK" " NOBREAK "
  1887. @next "GG_FINAL"
  1888. @prev "GG_BOBOFF"
  1889. @{fg shine}@{bg fill}NOBREAK Cutscene Command@{fg text}@{bg back}
  1890. @{i}Disables [Esc] key in cutscenes@{ui}
  1891.  @{b} NOBREAK@{ub}
  1892. This can only appear as the very first statement in a cutscene, and tells
  1893. GRAAL that the [Esc] key cannot be used to skip this cutscene.
  1894. @endnode
  1895. @node "GG_FINAL" " FINAL"
  1896. @next "GG_FINAL"
  1897. @prev "GG_NOBREAK"
  1898. @{fg shine}@{bg fill}FINAL Cutscene Command@{fg text}@{bg back}
  1899. @{i}Indicates resume point in cutscene@{ui}
  1900.  @{b} FINAL@{ub}
  1901. This can only be use in a cutscene. All commands below FINAL will be
  1902. executed is the rest of the cutscene was skipped with the [Esc] key.
  1903. @endnode
  1904. @node "GG_ST_MAIN" " graal.main file "
  1905. @next "GG_ST_SECT"
  1906. @prev "Main"
  1907. @{fg shine}@{bg fill}graal.main Statements@{fg text}@{bg back} @{"=DEMO=>" alink "graal.main/main" 0}
  1908. Your statements in the @{b}graal.main@{ub} file should appear in the order indicated
  1909. here. Although the order makes no difference in some cases, there are times
  1910. when statements and commands depend upon previous statements to load the
  1911. required resources into memory. This sequence of events is tested and it
  1912. works!
  1913. ("Number" below: ONE means statement occurs only once. ANY means zero to any
  1914. number of times.)
  1915.  Statement          Number Description
  1916. " link "ST_NAME" 0}             one    Name of the adventure
  1917. VERSION
  1918. " link "ST_VERSON" 0}          one    Version number of the adventure
  1919. MAX_CACHE
  1920. " link "ST_MAXCACHE" 0}        one    Maximum number of files in memory cache
  1921. N_VERBS
  1922. " link "ST_NVERBS" 0}          0-1    Number of verbs, default is 9 *NEW*
  1923. VERB_ZONE
  1924. " link "ST_VERBZONE" 0}        any    position and size of each verb "button" *NEW*
  1925. VERB_TEXT
  1926. " link "ST_VERBTEXT" 0}        any    Message when pointing to a verb *NEW*
  1927. ARROW_CURSOR
  1928. " link "ST_ARROW_CURSOR" 0}     0-1    Image to use for arrow mouse pointer*NEW*
  1929. CROSSHAIR_CURSOR
  1930. " link "ST_ARROW_CURSOR" 0} 0-1    Image to use for crosshair mouse pointer*NEW*
  1931. CURSOR_PALETTE
  1932. " link "ST_CURSOR_PALETTE" 0}   0-1    Colours for mouse pointer*NEW*
  1933. INV_LAYOUT
  1934. " link "ST_INVLAYOUT" 0}       0-1    position and size of inventory list *NEW*
  1935. INV_UP
  1936. " link "ST_INVUP_ETC" 0}           0-1    properties of inventory scroll arrow *NEW*
  1937. INV_DOWN
  1938. " link "ST_INVUP_ETC" 0}         0-1    properties of inventory scroll arrow *NEW*
  1939. CUTSCENE_LAYOUT
  1940. " link "ST_CUTSCENELAYOUT" 0}  0-1    position and size of inventory list *NEW*
  1941. DLG_LAYOUT
  1942. " link "ST_DLGLAYOUT" 0}       0-1    position and size of dialogue lines *NEW*
  1943. DLG_UP
  1944. " link "ST_INVUP_ETC" 0}           0-1    properties of dialogue scroll arrow *NEW*
  1945. DLG_DOWN
  1946. " link "ST_INVUP_ETC" 0}         0-1    properties of dialogue scroll arrow *NEW*
  1947. SENTENCE_LAYOUT
  1948. " link "ST_SENTLAYOUT" 0}  0-1    position and size of sentence display *NEW*
  1949. TIME_FORMAT
  1950. " link "ST_TIMEFORMAT" 0}      0-1    format of time display *NEW*
  1951. TIME_LAYOUT
  1952. " link "ST_TIMELAYOUT" 0}      0-1    layout of time display *NEW*
  1953. DATE_FORMAT
  1954. " link "ST_DATEFORMAT" 0}      0-1    format of date display *NEW*
  1955. DATE_LAYOUT
  1956. " link "ST_DATELAYOUT" 0}      0-1    layout of date display *NEW*
  1957. MONTH_TEXT
  1958. " link "ST_MONTHTEXT" 0}       0-1    change names of all months *NEW*
  1959. DAY_TEXT
  1960. " link "ST_DAYTEXT" 0}         0-1    change names of all the days of the week *NEW*
  1961. SYSTEM_TEXT
  1962. " link "ST_SYSTEMTEXT" 0}      any    change system message texts *NEW*
  1963. WALK_BUTTON
  1964. " link "ST_WALKBUTTON" 0}      one    Left or right button used for walking?
  1965. DISABLE_QUIT
  1966. " link "ST_DISQUIT" 0}     0-1    Disables the "q" quit key
  1967. EXIT_COL
  1968. " link "ST_EXIT_COL" 0}         one    Text color of exit names
  1969. OBJ_COL
  1970. " link "ST_OBJ_COL" 0}          one    Text color of object names
  1971. START_ROOM
  1972. " link "ST_START_ROOM" 0}       one    Adventure starting position
  1973. MAX_ROOM
  1974. " link "ST_MAX_ROOM" 0}         one    Maximum room number used
  1975. MAX_SECTION
  1976. " link "ST_MAX_SECTION" 0}      one    Maximum section number used
  1977. N_DIALOGUES
  1978. " link "ST_NDIALOGUES" 0}      0-1    Sets the limits for dialogues
  1979. MAX_DACT
  1980. " link "ST_MAX_DACT" 0}         one    Maximum number of DACT statements per room
  1981. MSGFONT
  1982. " link "ST_XXXFONT" 0}          one    Scene area text font and size
  1983. COMFONT
  1984. " link "ST_XXXFONT" 0}          one    Command and dialogue area text font and size
  1985. TITLEFONT1
  1986. " link "ST_XXXFONT" 0}       one    Titlepage text font and size (1)
  1987. TITLEFONT2
  1988. " link "ST_XXXFONT" 0}       one    Titlepage text font and size (2)
  1989. LINE_LENGTH
  1990. " link "ST_linelength" 0}      one    Line length for SAY, RESP, etc.
  1991. NORMAL_WAIT
  1992. " link "ST_NORMWAIT" 0}      0-1    Normal wait period for texts *NEW*
  1993. MODE_SWITCH
  1994. " link "ST_MODESWITCH" 0}      0-1    Command/dialogue switching style *NEW*
  1995. AREA_SIZES
  1996. " link "ST_AREASIZES" 0}       0-1    Heights of scene and command areas *NEW*
  1997. COMMAND_AREA
  1998. " link "ST_AREAFILES" 0}     one    Name of picture with command area graphics
  1999. DLG_AREA
  2000. " link "ST_AREAFILES" 0}         one    Name of picture with dialogue area graphics
  2001. RESOURCE
  2002. " link "ST_RESOURCE" 0}         one    Name of interface resource bank
  2003. GLOBALOBJS
  2004. " link "ST_OBJS" 0}       one    Number of global objects
  2005. SECTIONOBJS
  2006. " link "ST_OBJS" 0}      one    Number of section objects
  2007. ROOMOBJS
  2008. " link "ST_OBJS" 0}         one    Number of room objects
  2009. GLOBALBOBS
  2010. " link "ST_NBOBS" 0}       one    Number of global BOB images
  2011. SECTIONBOBS
  2012. " link "ST_NBOBS" 0}      one    Number of section BOB images
  2013. ROOMBOBS
  2014. " link "ST_NBOBS" 0}         one    Number of room BOB images
  2015. CLPART
  2016. " link "ST_CLPART" 0}           any    Name of picture containing clipart graphics
  2017. " link "ST_BOBS" 0}             any    Grab global BOB images from clipart picture
  2018. CHARACTER_HEIGHT
  2019. " link "ST_CHARSIZE" 0} one    "Average" or estimated height of main character
  2020. CHARACTER_WIDTH
  2021. " link "ST_CHARSIZE" 0}  one    "Average" or estimated width of main character
  2022. CHARACTER_BOB
  2023. " link "ST_CHARACTER_BOB" 0}    one    BOB number used for main character
  2024. CHARACTER_COL
  2025. " link "ST_CHARACTER_COL" 0}    one    Text color of main character "speech"
  2026. STILL_RIGHT
  2027. " link "ST_STILL" 0}      one    Main character right profile image  
  2028. STILL_LEFT
  2029. " link "ST_STILL" 0}       one    Main character left profile image
  2030. STILL_BACK
  2031. " link "ST_STILL" 0}       one    Main character backside image
  2032. STILL_FRONT
  2033. " link "ST_STILL" 0}      one    Main character front image
  2034. PAUSE_RIGHT
  2035. " link "ST_PAUSE" 0}      one    Main character pause image having walked right
  2036. PAUSE_LEFT
  2037. " link "ST_PAUSE" 0}       one    Main character pause image having walked left
  2038. PAUSE_BACK
  2039. " link "ST_PAUSE" 0}       one    Main character pause image having walked away
  2040. PAUSE_FRONT
  2041. " link "ST_PAUSE" 0}      one    Main character pause image having walked toward
  2042. WALK_RIGHT
  2043. " link "ST_WALK" 0}       one    Main character animation for walking right
  2044. WALK_LEFT
  2045. " link "ST_WALK" 0}        one    Main character animation for walking left
  2046. WALK_AWAY
  2047. " link "ST_WALK" 0}        one    Main character animation for walking away
  2048. WALK_TOWARD
  2049. " link "ST_WALK" 0}      one    Main character animation for walking toward
  2050. WALK_SPEED
  2051. " link "ST_WALK_SPEED" 0}       one    Main character walking speed adjustment
  2052. TALK_MAP
  2053. " link "ST_TALK_MAP" 0}         1-8    Speech animations mapped to pause/still images
  2054. HANDLE_MAP
  2055. " link "ST_HANDLE_MAP" 0}       1-8    Object manipulation animations mapped to -"-
  2056. OBJECT
  2057. " link "ST_OBJECT" 0}           any    Definitions of global objects
  2058. " link "ST_DLG" 0}              any    Definitions of dialogue partners
  2059. ACTION
  2060. " link "ST_ACTION" 0}           any    Actions taken for input relevant to entire game
  2061. @endnode
  2062. @node "GG_ST_SECT" " .section files "
  2063. @next "GG_ST_ROOM"
  2064. @prev "GG_ST_MAIN"
  2065. @{fg shine}@{bg fill}n.section Statements@{fg text}@{bg back} @{"=DEMO=>" alink "1.section/main" 0}
  2066. Follow the statement order presented here in your .section files to avoid
  2067. any unnecessary trouble.
  2068.   Statement      Number Description
  2069.   @{"
  2070. CLPART
  2071. " link "ST_CLPART" 0}       any    Name of picture file containing clipart
  2072.   @{"
  2073. SECTIONBOBS
  2074. " link "ST_BOBS" 0}  any    Grab section BOB images from clipart picture
  2075.   @{"
  2076. SECTIONOBJ
  2077. " link "ST_OBJECT" 0}   any    Define section objects
  2078.   @{"
  2079. " link "ST_LINE" 0}         any    Define dialogue lines main character can choose
  2080.                         from *NEW*
  2081.   @{"
  2082. " link "ST_LACT" 0}         any    Define responses to dialogue lines *NEW*
  2083.   @{"
  2084. " link "ST_DACT" 0}         any    Actions executed directly when the section file is
  2085.                         first used.
  2086.   @{"
  2087. ACTION
  2088. " link "ST_ACTION" 0}       any    Actions taken for player input relevant to section
  2089. @endnode
  2090. @node "GG_ST_ROOM" " .room files "
  2091. @next "GG_ST_ROOM"
  2092. @prev "GG_ST_SECT"
  2093. @{fg shine}@{bg fill}n.room Statements@{fg text}@{bg back} @{"=DEMO=>" alink "1.room/main" 0}
  2094. Please follow the order indicated here in your .room files to avoid
  2095. unnecessary errors and trouble.
  2096.   Statement    Number Description
  2097.   @{"
  2098. UPDATE
  2099. " link "ST_UPDATE" 0}     one    Frame update rate *NEW*
  2100.   @{"
  2101. SECTION
  2102. " link "ST_SECTION" 0}    one    Section to which room belongs
  2103.   @{"
  2104. BG_IFF
  2105. " link "ST_BG_IFF" 0}     one    Name of background picture for room
  2106.   @{"
  2107. START_POS
  2108. " link "ST_START_POS" 0}  any    Starting positions for main character
  2109.   @{"
  2110. FLOOR
  2111. " link "ST_FLOOR" 0}      1-12   Areas where the main character can "put its feet"   
  2112.   @{"
  2113. " link "ST_PATH" 0}       0-12   Path used for navigating between floors
  2114.   @{"
  2115. " link "ST_EXIT" 0}       1-10   Exits
  2116.   @{"
  2117. CLPART
  2118. " link "GG_CLPART" 0}     any    Name of picture file containing clipart
  2119.   @{"
  2120. ROOMBOBS
  2121. " link "ST_BOBS" 0}   any    Grab room BOB images from clipart picture
  2122.   @{"
  2123. STATIC
  2124. " link "ST_STATIC" 0}     any    Place static graphic elements on background picture
  2125.   @{"
  2126. " link "ST_ANIM" 0}       any    Place animated graphic elements on background picture
  2127.   @{"
  2128. ROOMOBJ
  2129. " link "ST_OBJECT" 0}    any    Define room objects
  2130.   @{"
  2131. " link "ST_DACT" 0}       any    Actions to be taken directly upon entering the room
  2132.   @{"
  2133. " link "ST_LINE" 0}       any    Define dialogue lines main character can choose from
  2134.   @{"
  2135. " link "ST_LACT" 0}       any    Define responses to dialogue alternatives
  2136.   @{"
  2137. ACTION
  2138. " link "ST_ACTION" 0}     any    Actions to take for player input relevant to room
  2139. @endnode
  2140. @node "ST_NAME" "NAME"
  2141. @next "ST_VERSON"
  2142. @prev "ST_NAME"
  2143. @{fg shine}@{bg fill}NAME Statement (main)@{fg text}@{bg back}
  2144. @{i}Gives the adventure name@{ui}
  2145.   @{b}NAME: adventure name@{ub}
  2146. It's always nice to know what you are doing, isn't it? This is shown when
  2147. the player presses "V" and also identifies saved game files.
  2148. @endnode
  2149. @node "ST_VERSON" "VERSION"
  2150. @next "ST_EXIT_COL"
  2151. @prev "ST_NAME"
  2152. @{fg shine}@{bg fill}VERSION Statement (main)@{fg text}@{bg back}
  2153. @{i}Gives the adventure version@{ui}
  2154.   @{b}VERSION: version number@{ub}
  2155. This is used to make sure saved game files are compatible with the current
  2156. status of your adventure - always update this when you do ANYTHING with the
  2157. adventure that affects the number of rooms, objects, sections, object
  2158. definitions, or any flag usage!
  2159. @endnode
  2160. @node "ST_MAXCACHE" "MAX_CACHE"
  2161. @next "ST_EXIT_COL"
  2162. @prev "ST_VERSON"
  2163. @{fg shine}@{bg fill}MAX_CACHE Statement (main)@{fg text}@{bg back}
  2164. @{i}Sets the maximum number of files in the memory cache@{ui}
  2165.  @{b} MAX_CACHE: number of files@{ub}
  2166. For normal use: Set to 0 when creating a game (especially if you are using
  2167. the on-line debugger to reload altered scripts).
  2168. Set to 100 once the game is ready to be played to eliminate disk swaps and
  2169. make use of any extra memory you may have.
  2170. When GRAAL detects that extra memory is available, it calculates how many
  2171. files it will be able to fit into RAM, thus reducing disk access during
  2172. gameplay. GRAAL calculates an average of 50K per file - if this is  totally
  2173. wrong (and don't ask me how, you will probably never have to bother), you
  2174. may have to set this to a very low number or even to zero.
  2175. @endnode
  2176. @node "ST_ARROW_CURSOR" " ARROW_CURSOR: "
  2177. @{fg shine}@{bg fill}ARROW_CURSOR / CROSSHAIR_CURSOR Statements (main)@{fg text}@{bg back}
  2178. @{i}Changes the image of the mouse pointer@{ui}
  2179.  @{b} ARROW_CURSOR: image;hotspotx;hotspoty
  2180.   CROSSHAIR_CURSOR: image;hotspotx;hotspoty@{ub}
  2181. @{b}image@{ub}
  2182. a normal image number - you must grab the image to be used using a BOBS:
  2183. statement first.
  2184. Note that the images to be used as mouse pointer shapes must be drawn i
  2185. lowres, and in four colours (2 bitplanes) only. Also, the image must be
  2186. exactly 16 pixels wide. (Actually, the BOBS: statement should read 17
  2187. pixels, which will actually pick up 16 - one of life's little mysteries.)
  2188. @{b}hotspotx;hotspoty@{ub}
  2189. This sets the "sensitive point" of the cursor image, counted in pixels from
  2190. the upper left corner of the image.
  2191. See also: @{"CURSOR_PALETTE" link "ST_CURSOR_PALETTE" 0} statement
  2192. @endnode
  2193. @node "ST_CURSOR_PALETTE" " CURSOR_PALETTE: "
  2194. @{fg shine}@{bg fill}CURSOR_PALETTE Statement (main)@{fg text}@{bg back}
  2195. @{i}Sets the colours to use for the mouse pointer in the command area
  2196. @{ui}
  2197.   @{b}CURSOR_PALETTE: rgb;rgb;rgb@{ub}
  2198. The mouse pointer uses three colours. In the scene area, the colours will
  2199. always be colours 16, 17, and 18 in the backdrop picture's palette. 
  2200. The colours specified here are used in the scene and command area. Each
  2201. colour value is given as a a red, green, and blue component value in
  2202. hexadecimal.
  2203. FFF means white 000 means black 888 means grey 550 means dark yellow (some
  2204. red + some blue) 0FF means bright cyan (all green + all blue)
  2205. ...and so on...
  2206. @endnode
  2207. @node "ST_INVLAYOUT" "INV_LAYOUT"
  2208. @{fg shine}@{bg fill}INV_LAYOUT Statement (main)@{fg text}@{bg back}
  2209. @{i}Controls the layout of the inventory list@{ui}
  2210.   @{b}INV_LAYOUT: x1;y1;x2;y2;rows;cols;TEXT|ICONS;
  2211.               VERTICAL|HORIZONTAL;ink/image_no;bg@{ub}
  2212. The first four parameters determines the size and position of the box
  2213. containing the inventory list. "rows" and "columns" determines how many rows
  2214. and columsn there are.
  2215. @{b}TEXT|ICONS@{ub}
  2216. determines whether text or icons will be used for the objects in the
  2217. inventory list
  2218. @{b}VERTICAL|HORIZONTAL@{ub}
  2219. determines whether the list scrolls vertically (top to bottom) or
  2220. horizontally (left to right).
  2221. @{b}ink/image_no@{ub}
  2222. If the inventory display is TEXT, this is the ink colour. 
  2223. If the display is ICONS, this is the image number to be used for an  "empty
  2224. space" in the inventory display. For example, if all your inventory icons
  2225. have a border, this image should be a border with nothing in it - it kind of
  2226. helps fill out the display...
  2227. When a text inventory is specified, it is assumed there may be a border (1
  2228. pixel high, 2 pixels wide) around each "cell" in the inventory display: This
  2229. means GRAAL does not erase the edges of the "cell".
  2230. @{b}bg@{ub}
  2231. specifies the colour to use for the background colour.
  2232. If no INV_LAYOUT statement is given, the following is assumed:
  2233. INV_LAYOUT: 284;19;634;60;3;2;TEXT;VERTICAL;7;8
  2234. which corresponds to the GRAAL built-in command area (the one used if
  2235. COMMAND_AREA: DEFAULT is specified).
  2236. @endnode
  2237. @node "ST_INVUP_ETC" " INV_UP "
  2238. @{fg shine}@{bg fill}INV_UP / INV_DOWN / DLG_UP / DLG_DOWN Statements (main)@{fg text}@{bg back}
  2239. @{i}Sets the properties of the arrows used to scroll the inventory and the
  2240. dialogue lines@{ui}
  2241.   @{b}INV_UP: x;y;image1;image2
  2242.   INV_DOWN: x;y;image1;image2
  2243.   DLG_UP: x;y;image1;image2
  2244.   DLG_DOWN: x;y;image1;image2@{ub}
  2245. @{b}x;y@{ub}
  2246. is the top left hand corner of the aroow of other symbol used to indicate
  2247. the list can be scrolled (up or down, depending on which statement we're
  2248. talking about)
  2249. @{b}image1@{ub}
  2250. is the image used when the function is available 
  2251. @{b}image2@{ub}
  2252. is the image used when the function is unavailable
  2253. The images must be global. The default statements are as follows:
  2254.  INV_UP: 265;18;12;10;3;5
  2255.  INV_DOWN: 265;48;12;10;4;5
  2256.  DLG_UP: 8;8;12;10;3;5
  2257.  DLG_DOWN: 8;38;12;10;4;5
  2258. As you see, by default the inventory and dialogue displays use the same
  2259. symbols (up and  down arrows), and all statements use the same image2. This
  2260. is possible because the "not available" symbol is just a piece of
  2261. background, erasing the unavailable arrow(s) completely.
  2262. @endnode
  2263. @node "ST_DLGLAYOUT" " DLG_LAYOUT "
  2264. @{fg shine}@{bg fill}DLG_LAYOUT Statement (main)@{fg text}@{bg back}
  2265. @{i}Determines the layout of the dialogue area@{ui}
  2266.  @{b} DLG_LAYOUT: x1;y1;x2;y2;rows;ink;bg@{ub}
  2267. @{b}x1;y1;x2;y2@{ub}
  2268. defines the "box" containing the dialogue lines.
  2269. @{b}rows@{ub}
  2270. determines the numer of lines shown at the same time. The height of the box
  2271. is divided into this many "cells"
  2272. ink;bg
  2273. sets the text and background colours
  2274. When handling the dialogue lines, GRAAL assumes there may be a border 1 pxel
  2275. high and 2 pixels wide around each "cell" in the list, and therefore does
  2276. not erase the edges of the cell.
  2277. @endnode
  2278. @node "ST_CUTSCENELAYOUT" "
  2279. CUTSCENE_LAYOUT
  2280. @{fg shine}@{bg fill}CUTSCENE_LAYOUT Statement (main)@{fg text}@{bg back}
  2281. @{i}Determines size, position and image for cutscene indicator@{ui}
  2282.  @{b} CUTSCENE: x1;y1;x2;y2;bg;imagex;imagey;imageno@{ub}
  2283. This is used by the cutscene command ( with the "S" or "F" parameter ) to
  2284. place the cutscene indicator on the command area.
  2285. @{b}x1;y1;x2;y2;bg@{ub}
  2286. defines the area in the command area which should be "blanked out" before
  2287. placing the indicator itself, an its colour. (A larger area "eats" some
  2288. memory, because the overlaid graphics have to be stored elsewhere for  the
  2289. duration...
  2290. @{b}bg@{ub}
  2291. is the background colour
  2292. @{b}imagex;imagey@{ub}
  2293. is the top left corner of the indicator
  2294. @{b}imageno@{ub}
  2295. is the bob image containing the actual indicator.
  2296. If this statement is not in the graal.main file, the following is used:
  2297. CUTSCENE: 5;18;255;62;8;122;24;6
  2298. @endnode
  2299. @node "ST_SENTLAYOUT" " SENTENCE_LAYOUT "
  2300. @{fg shine}@{bg fill}SENTENCE_LAYOUT Statement (main)@{fg text}@{bg back}
  2301. @{i}Determines the size and position of the sentence display area@{ui}
  2302.  @{b} SENTENCE_LAYOUT: x1;y1;x2;y2;ink;inkhi;bg@{ub}
  2303. This statement sets the box where the constructed sentence is built and
  2304. displayed.
  2305. @{b}x1;y1;x2;y2@{ub}
  2306. are the corners of the area of the sentence box.
  2307. It is assumed a border is included in the area (1 pixel high, 2 pixels
  2308. wide), which means the edges of the specified area will not be erased by
  2309. GRAAL. The text will be centered at the top of the area.
  2310. @{b}ink;inkhi;bg@{ub}
  2311. sets the text, highlighted text, and background colours.
  2312. @endnode
  2313. @node "ST_TIMEFORMAT" " TIME_FORMAT "
  2314. @{fg shine}@{bg fill}TIME_FORMAT Statement (main)@{fg text}@{bg back}
  2315. @{i}Determines how the time is shown@{ui}
  2316.    @{b}TIME_FORMAT: format-string;am-text;pm-text@{ub}
  2317. The time can be shown either permanently in the command area (using
  2318. @{"TIME_LAYOUT" link "ST_TIMELAYOUT" 0}), or in a text in the scene area (using the special variable
  2319. #TIME in a TEXT, SAY, THINK, or RESP command).
  2320. This statement determines how it is shown (excluding the ANALOGUE display
  2321. possible with TIME_LAYOUT - see that for more info.)
  2322. @{b}format-string@{ub}
  2323. This is a string of characters. The following special characters may
  2324. appear:
  2325. the hours will be placed here in 12-hour format
  2326. the hours will be placed here in 24-hour format
  2327. the minutes will be placed here
  2328. the am/pm text will be placed here
  2329. Examples:
  2330. TIME_FORMAT: #12:#MM #AM;am;pm
  2331. may give results such as "3:35 am" and "6:00 pm"
  2332. TIME_FORMAT: #24:#MM
  2333. may give results such as "1:30" or "15:37"
  2334. @endnode
  2335. @node "ST_TIMELAYOUT" " TIME_LAYOUT "
  2336. @{fg shine}@{bg fill}
  2337. TIME_LAYOUT Statement (main)@{fg text}@{bg back}
  2338. @{i}tells GRAAL to show the time in the command area@{ui}
  2339.   @{b}TIME_LAYOUT:
  2340. DIGITAL|ANALOGUE;x1;y1;x2;y2;ink;bg[[;px1;py1;px2;py2;ink;bg];font]@{ub}
  2341. If this statement is present in the graal.main script, the time will be
  2342. permanently shown in the command area. It will be automatically updated when
  2343. needed.
  2344. @{b}DIGITAL|ANALOGUE@{ub}
  2345.  "DIGITAL"  will show the time in figures and text using the format 
  2346.             specified in @{"TIME_FORMAT" link "ST_TIMEFORMAT" 0} 
  2347.  "ANALOGUE" will draw the hands of an analogue clock
  2348. @{b}x1;y1;x2;y2@{ub}
  2349. This is the area where either the text or the clock hands are drawn. If
  2350. ANALOGUE is chosen, the width of the rectangle should be double the height
  2351. to achieve a circular clock face.
  2352. In DIGITAL mode, the text will be centered at the top of the rectangle.
  2353. In ANALOGUE mode, the area is NOT erased when the hands are redrawn - only
  2354. the old positions of the hands are erased. This means you can draw the rest
  2355. of the clock face around the hands in the command area backdrop picture -
  2356. just make sure the hands do not pass over any of your graphics.
  2357. ink;bg
  2358. sets colour and background for the "digital text" or the clock face.
  2359. @{b}px1;py1;px2;py2@{ub}
  2360. This can only be used together with analogue and defines a second rectangle
  2361. in the command area where the "am/pm" texts are shown to complement the
  2362. information in the analogue clock. If you do not want to display this
  2363. information, just leave the last 7 parameters out. (That is, the last "font"
  2364. parameter is also left out, because you do not need to specify a font for
  2365. the display of the clock face...)
  2366. ink;bg
  2367. sets the text and background colours for the "am/pm" text display for an
  2368. analogue clock (if this is included)..
  2369. @{b}font@{ub}
  2370. This is the font used for the "DIGITAL" time display, or the "am/pm" display
  2371. complementing the "ANALOGUE" clock. A number between 1 and 4 is expected:
  2372.  1 is TITLEFONT1
  2373.  2 is TITLEFONT2
  2374.  3 is MSGFONT
  2375.  4 is COMFONT
  2376. @endnode
  2377. @node "ST_DATEFORMAT" " DATE_FORMAT "
  2378. @{fg shine}@{bg fill}DATE_FORMAT Statement (main)@{fg text}@{bg back}
  2379. @{i}Sets the date display format@{ui}
  2380.   @{b}DATE_FORMAT: format-string@{ub}
  2381. The date can be displayed either permanently in the command area (using the
  2382. @{"DATE_LAYOUT" link "ST_DATELAYOUT" 0} statement) or in the sentence area using the special variable
  2383. #DATE in a SAY, THINK, TEXT or RESP statement.
  2384. This statement determines how the date will be presented.
  2385. @{b}format-string@{ub}
  2386. In this string, the following special characters will be replaced by "date
  2387. data"
  2388. is replaced with the year
  2389. is replaced by the number of the month without a leading zero
  2390. is replaced by the number of the month with a leading zero
  2391. is replaced by the name of the month (is seldom used in the same string as
  2392. "M", obviously)
  2393. is replaced by the date without a leading zero
  2394. is replaced by the date with a leading zero
  2395. is replaced by the weekday
  2396. All other characters in the string is kept as is.
  2397. Examples:
  2398. DATE_FORMAT: #Y-#0M-#0D
  2399. may give "1996-08-01"
  2400. DATE_FORMAT: #M/#D/#Y
  2401. may give: "8/1/96" (two or four digits in the year simply depends on what
  2402. you set the year to - see SETDATE command)
  2403. DATE_FORMAT: #N #D, #Y
  2404. may give "August 1, 1996"
  2405. DATE_FORMAT: #W, #N #D
  2406. may give "Saturday, August 1"
  2407. Note that the names of months and weekdays can be changed using the
  2408. @{"MONTH_TEXT:" link "ST_MONTHTEXT" 0} and @{"DAY_TEXT:" link "ST_DAYTEXT" 0} statements.
  2409. @endnode
  2410. @node "ST_DATELAYOUT" " DATE_LAYOUT "
  2411. @{fg shine}@{bg fill}DATE_LAYOUT Statement (main)@{fg text}@{bg back}
  2412. @{i}tells GRAAL to show the date in the command area@{ui}
  2413.  @{b} DATE_LAYOUT: x1;y1;x2;y2;ink;bg;font@{ub}
  2414. If this statement is present in the graal.main script, the date will be
  2415. permanently shown in the  command area. It will be automatically updated
  2416. when needed. The display format is decided by the @{"DATE_FORMAT" link "ST_DATEFORMAT" 0} statement.
  2417. @{b}x1;y1;x2;y2@{ub}
  2418. This is the rectangle containing the date. The text will be centered at the
  2419. top of the rectangle.
  2420. @{b}ink;bg@{ub}
  2421. sets the text and background colours
  2422. @{b}font@{ub}
  2423. is a number between 1 and 4:
  2424.  1 is TITLEFONT1
  2425.  2 is TITLEFONT2
  2426.  3 is MSGFONT
  2427.  4 is COMFONT
  2428. @endnode
  2429. @node "ST_WALKBUTTON" " WALK_BUTTON "
  2430. @{fg shine}@{bg fill}WALK_BUTTON Statement (main)@{fg text}@{bg back}
  2431. @{i}Sets the mouse button used for walking.@{ui}
  2432.  @{b} WALK_BUTTON: LEFT|RIGHT@{ub}
  2433. The setting determines if you can use the left or right mouse button to
  2434. command the main character to walk to any spot in the room (that is, click
  2435. anywhere that isn't an object or an exit).
  2436. @endnode
  2437. @node "ST_DISQUIT" " DISABLE_QUIT "
  2438. @{fg shine}@{bg fill}DISABLE_QUIT Statement (main)@{fg text}@{bg back}
  2439. @{i}disables the standard "q" quit key and function.@{ui}
  2440.   @{b}DISABLE_QUIT:@{ub}
  2441. This statement has no parameters. When found in the graal.main file, it
  2442. disables the use of the "q" quit key to quit the game. You shouldn't do this
  2443. until you have implemented and tested your own quit function, which probably
  2444. uses a direct verb (see the @{"VERB_TEXT:" link "ST_ExitMessage" 0} statement) and  the QUIT command.
  2445. @endnode
  2446. @node "ST_NVERBS" " N_VERBS "
  2447. @{fg shine}@{bg fill}N_VERBS Statement (main)@{fg text}@{bg back}
  2448. @{i}Sets the number of commands (verbs) used in the player interface@{ui}
  2449.  @{b} N_VERBS: number of verbs@{ub}
  2450. The default number of verbs is 9, not counting verb 0 (go to), which is
  2451. always present but not shown to the player.
  2452. If you do use this statement, there must also be a VERB_ZONE: statement for
  2453. each and every verb (that is, the number of VERB_ZONE: statements must match
  2454. the number given here).
  2455. @endnode
  2456. @node "ST_VERBZONE" " VERB_ZONE "
  2457. @{fg shine}@{bg fill}VERB_ZONE Statement (main)@{fg text}@{bg back}
  2458. @{i}Sets the position and size of a command (=verb) "button".@{ui}
  2459.  @{b} VERB_ZONE: verb number;x1;y1;x2;y2@{ub}
  2460. @{b}verb number@{ub}
  2461. is the number of the verb this zone belongs to
  2462. @{b}x1;y1;x2;y2@{ub}
  2463. defines a rectangle (top left and bottom right corner, as always when
  2464. specifying areas this way).
  2465. if VERB_ZONE statements are to be used at all, or @{"N_VERBS" link "ST_NVERBS" 0} changed from the
  2466. default 9, one VERB_ZONE statement must be given for each verb.
  2467. @endnode
  2468. @node "ST_VERBTEXT" " VERB_TEXT "
  2469. @{fg shine}@{bg fill}VERB_TEXT Statement (graal.main)@{fg text}@{bg back}
  2470. @{i}Contains the message shown when using a verb, and also whether a verb is a
  2471. direct verb or not.@{ui}
  2472.   @{b}VERB_TEXT: verb_no;[$]text@{ub}
  2473. This is the text that appears in the sentence area when you use a command or
  2474. an exit. Texts 0-9 and 999 have default values in English, but all of them
  2475. can be translated into any language using this statement, and all of them
  2476. (except a few) can also be changed to a completely different verb.
  2477. If the text is prefixed with a dollar sign (@{b}$@{ub}), the verb is treated as a
  2478. @{b}direct verb@{ub}. A direct verb does not use objects - it is executed immediately
  2479. when the player clicks it. This can be useful for making special functions
  2480. available in the command area, such as speical forms of QUIT, or a RESTART
  2481. command - although the possibilities do no end there.
  2482. These are the default values:
  2483.  0 - Go to            (Meaning can not be changed)
  2484.  1 - Give             (Meaning can not be changed)
  2485.  2 - Pick up
  2486.  3 - Use              (Meaning can not be changed)
  2487.  4 - Open
  2488.  5 - Talk to
  2489.  6 - Push
  2490.  7 - Close
  2491.  8 - Look at
  2492.  9 - Pull 
  2493.  999 - to  (This is the preposition text for command 1, "Give")
  2494. And here's why you cant change the meaning of 0,1, and 3:
  2495. 0 - This is not a command shown in the command area, but rather what
  2496.     happens when you click an exit in the scene area - thus, it must
  2497.     always have the meaning "go to" (although you can translate THAT
  2498.     into any language using this statement!)
  2499. 1 - This command is always suffixed with the preposition " to ".
  2500.     To alter the " to ", use VERB_TEXT: 999;newtext 
  2501. 3 - This command makes use (no pun intended!) of the preposition
  2502.     defined for an object, which is what makes it possible to make objects
  2503.     interact with each other (or not).
  2504. Of course, some of the other commands are also hard to think of a better
  2505. replacement for - how are you going to engage in conversations without a
  2506. "Talk to" command, for instance? Or perhaps you are not planning to - that's
  2507. also up to you!
  2508. @endnode
  2509. @node "ST_MONTHTEXT" " MONTH_TEXT "
  2510. @{fg shine}@{bg fill}
  2511. MONTH_TEXT Statement (main)@{fg text}@{bg back}
  2512. @{i}sets the names of all the months@{ui}
  2513.  @{b} MONTH_TEXT: name1;name2; ... ;name12@{ub}
  2514. This is the name of the month that can be used when displaying a date. The
  2515. default names are "January","February", ... , "December"
  2516. See also: @{"DATE_FORMAT" link "ST_DATEFORMAT" 0} and @{"DATE_LAYOUT" link "ST_DATELAYOUT" 0} statements
  2517. @endnode
  2518. @node "ST_DAYTEXT" " DAY_TEXT "
  2519. @{fg shine}@{bg fill}DAY_TEXT Statement (main)@{fg text}@{bg back}
  2520. @{i}sets the names of the days in the week@{ui}
  2521.  @{b} DAY_TEXT: name1;name2; ... ;name7@{ub}
  2522. These are the names that can be used when displaying a date. The default
  2523. names are "Monday","Tuesday", ... , "Sunday"
  2524. See also: @{"TIME_FORMAT" link "ST_TIMEFORMAT" 0} and @{"TIME_LAYOUT" link "ST_TIMELAYOUT" 0} statements
  2525. @endnode
  2526. @node "ST_SYSTEMTEXT" " SYSTEM_TEXT "
  2527. @{fg shine}@{bg fill}SYSTEM_TEXT: Statement (main)@{fg text}@{bg back}
  2528. @{i}changes a system message text@{ui}
  2529.  @{b} SYSTEM_TEXT: number;"message"@{ub}
  2530. This is of use for translators to foreign languages only (like my own, for
  2531. instance).
  2532. Try to keep the text about the same length as the English original. These
  2533. are the default texts (the quotes must be included in the statement):
  2534.   1  "Please insert disk "
  2535.   2  "Select a saved game slot"
  2536.   3  "Saved game description"
  2537.   4  "Load"
  2538.   5  "Save"
  2539.   6  "Back"
  2540.   7  "OK"
  2541.   8  "Cancel"
  2542.   9  "Change"
  2543.  10  "   There are no saved games on this disk."
  2544.  11  "Do you want to use this disk for saved games?"
  2545.  12  "****** GAME PAUSED ******\Press any key to continue"
  2546.  13  "You are playing"
  2547.  14  "running under "
  2548.  15  "Please insert save disk into DF0:"
  2549.  16  "Please write-enable the disk!"
  2550.  17  " Yes"
  2551.  18  "Music & Sounds off"
  2552.  19  "Music & Sounds on"
  2553.  20  "  Speech speed:"
  2554.  21  "Slow         Fast"
  2555. @endnode
  2556. @node "ST_EXIT_COL" "EXIT_COL"
  2557. @next "ST_OBJ_COL"
  2558. @prev "ST_VERSON"
  2559. @{fg shine}@{bg fill}EXIT_COL Statement (main)@{i}
  2560. @{fg text}@{bg back}Specifies color of exit names shown in scene area@{ui}
  2561.   @{b}EXIT_COL: colour number@{ub}
  2562. Make this a fairly bright colour - the text will be surrounded by a black
  2563. outline.
  2564. @endnode
  2565. @node "ST_OBJ_COL" "OBJ_COL"
  2566. @next "ST_OBJ_COL"
  2567. @prev "ST_EXIT_COL"
  2568. @{fg shine}@{bg fill}OBJ_COL Statement (main)@{fg text}@{bg back}
  2569. @{i}Specifies the colour of object names displayed in the scene area@{ui}
  2570.  @{b} OBJ_COL: colour number@{ub}
  2571. Make this a fairly bright colour - it will be surrounded by a black outline.
  2572. @endnode
  2573. @node "ST_START_ROOM" "START_ROOM"
  2574. @next "ST_MAX_ROOM"
  2575. @prev "ST_OBJ_COL"
  2576. @{fg shine}@{bg fill}START_ROOM Statement (main)@{fg text}@{bg back}
  2577. @{i}Specifies the starting position for the adventure@{ui}
  2578.   @{b}START_ROOM: room;entrance@{ub}
  2579. The action will commence in this room and at this entrance - also see the
  2580. .room @{"START_POS" link "ST_START_POS" 0} statement.
  2581. @endnode
  2582. @node "ST_MAX_ROOM" "MAX_ROOM"
  2583. @next "ST_MAX_SECTION"
  2584. @prev "ST_START_ROOM"
  2585. @{fg shine}@{bg fill}MAX_ROOM Statement (main)@{fg text}@{bg back}
  2586. @{i}Highest room number used in this adventure@{ui}
  2587.   @{b} MAX_ROOM: number@{ub}
  2588. All rooms in an adventure are numbered from 1 and upwards - try not to leave
  2589. "holes" in the room sequence, since each room number, used or not, takes up
  2590. valuable memory space! If the adventure is split up onto several disks,
  2591. there is no way for GRAAL to automatically know how many rooms there
  2592. actually is, so this statement must be updated continually as more rooms are
  2593. added to the game.
  2594. Tip: If you  delete a sequence of rooms in the middle of the game, re-use
  2595. those vacant room numbers if you add more rooms later on - rather than
  2596. increasing the highest room number.
  2597. @endnode
  2598. @node "ST_MAX_SECTION" "MAX_SECTION"
  2599. @next "ST_MAX_DACT"
  2600. @prev "ST_MAX_ROOM"
  2601. @{fg shine}@{bg fill}MAX_SECTION Statement (main)@{fg text}@{bg back}
  2602. @{i}The highest section number used in the adventure@{ui}
  2603.  @{b} MAX_SECTION: number@{ub}
  2604. Like MAX_ROOM, this must be manually updated with the highest section number
  2605. used so far during development. Always start with section 1 and continue
  2606. upwards without leaving "holes" in the numbering sequence if you can avoid
  2607. @endnode
  2608. @node "ST_MAX_DACT" "MAX_DACT"
  2609. @next "ST_XXXFONT"
  2610. @prev "ST_MAX_SECTION"
  2611. @{fg shine}@{bg fill}MAX_DACT Statement (main)@{fg text}@{bg back}
  2612. @{i}Sets the maximum number of DACT statements that can be used in a room file@{ui}
  2613.  @{b} MAX_DACT: number@{ub}
  2614. Don't know why I made this customisable, really - 50 should be plenty, and
  2615. no other limits of a similar nature are possible to alter thus far. Still,
  2616. in future versions of GRAAL, most limits like this may be defined by the
  2617. user.
  2618. @endnode
  2619. @node "ST_NDIALOGUES" " N_DIALOGUES "
  2620. @{fg shine}@{bg fill}N_DIALOGUES Statement (main)@{fg text}@{bg back}
  2621. @{i}Sets the limits for dialogues@{ui}
  2622.   @{b}N_DIALOGUES number;lines;actions@{ub}
  2623. @{b}number@{ub}
  2624. is the number of simultaneously available dialogues - that is, the maximum
  2625. number referred to at any time by the current section and the current room
  2626. scripts.
  2627. @{b}lines@{ub}
  2628. is the maximum number of LINE: statements used in a dialogue
  2629. @{b}actions@{ub}
  2630. is the maximum number of LACT: statements used in a dialogue
  2631. @endnode
  2632. @node "ST_XXXFONT" "MSGFONT"
  2633. @next "ST_AREAFILES"
  2634. @prev "ST_MAX_DACT"
  2635. @{fg shine}@{bg fill}MSGFONT COMFONT TITLEFONT1 TITLEFONT2 Statements (main)@{fg text}@{bg back}
  2636. @{i}Defines fonts and sizes for various uses@{ui}
  2637.  @{b} MSGFONT: name;size
  2638.   COMFONT: name;size
  2639.   TITLEFONT1: name;size
  2640.   TITLEFONT2: name;size@{ub}
  2641. The fonts (in the proper sizes) must be available in a FONTS: drawer in your
  2642. development directory. Furthermore, FIXFONTS must have been used on the
  2643. drawer for all the fonts to be OK.
  2644. @{b}MSGFONT@{ub} is the font used for all text displayed in the scene area.
  2645. @{b}COMFONT@{ub} is the font used for the input sentence display and dialogue lines.
  2646. Do not alter these two in GRAAL version 1, since this will probably mess up
  2647. line spacing (among other things). They will be of more use in GRAAL 2.
  2648. @{b}TITLEFONT1@{ub} and @{b}TITLEFONT2@{ub} are used with the TYPE command to print text on
  2649. title screens.
  2650. Note: When GRAAL starts up, the GRAAL FONTS: drawer is copied to RAM:,  and
  2651. FONTS: is reassigned to RAM:Fonts/. Which is a good reason for not multi-
  2652. tasking too much when running a GRAAL adventure. Sorry 'bout this, but the
  2653. fault lies with Amos Pro font handling (and the fact that the Easylife
  2654. extension font handling had too many bugs in it!).
  2655. @endnode
  2656. @node "ST_linelength" " LINE_LENGTH "
  2657. @{fg shine}@{bg fill}LINE_LENGTH Statement (main)@{fg text}@{bg back}
  2658. @{i}Determines the line length of displayed sentences (SAY, RESP, and other
  2659. commands.)@{ui}
  2660.  @{b} LINE_LENGTH characters@{ub}
  2661. GRAAL does automatic line breaks in long sentences - this is the length it
  2662. aims for for each line in SAY, RESP, and other similar commands. GRAAL will
  2663. only break lines in between words, and does not hyphenate.
  2664. You may control line breaks manually in any sentence - just insert backslash
  2665. ( \ ) characters where you want line breaks to appear. This will override
  2666. the setting of the LINE_LENGTH: statement.
  2667. @endnode
  2668. @node "ST_NORMWAIT" " NORMAL_WAIT "
  2669. @{fg shine}@{bg fill}NORMAL_WAIT Statement (main)@{fg text}@{bg back}
  2670. @{i}Sets the default display time for text and sentences in scene area@{ui}
  2671.  @{b} NORMAL_WAIT: time@{ub}
  2672. This value is used in a formula calculating for how long a text or spoken
  2673. sentence should be displayed in the scene area. The formular also
  2674. incorporates the overall text length and the number of lines it is broken
  2675. into. Also, character sentences are shown for a slightly shorter period of
  2676. time than other characters speech, because the contents of a "SAY" sentence
  2677. uttered by the main character is often known wholly or partly by the player
  2678. beforehand.
  2679. The bigger the number, the longer the pause. Default is 100. If this is not
  2680. enough, try other nice, round numbers like 200 or 400..
  2681. @endnode
  2682. @node "ST_MODESWITCH" " MODE_SWITCH "
  2683. @{fg shine}@{bg fill}MODE_SWITCH Statement (main)@{fg text}@{bg back}
  2684. @{i}Decides how a switch between command and dialogue mode is performed.@{ui}
  2685.  @{b} MODE_SWITCH: ROLL|INSTANT@{ub}
  2686. The command area rolls off the bottom of the screen, and the dialogue area
  2687. rolls in from where the command area disappeared. (And vice versa.)
  2688. This is the default, and what GRAAL 1 used.
  2689. INSTANT
  2690. The command area disappears instantly, and the dialogue area is created "on
  2691. the spot" to replace it. (And vice versa.)
  2692. @endnode
  2693. @node "ST_AREASIZES" " SPLIT_LINE "
  2694. @{fg shine}@{bg fill}AREA_SIZES: Statement (main)@{fg text}@{bg back}
  2695. @{i}Sets the height of the scene area and the command area.@{ui}
  2696.  @{b} AREA_SIZES: scene_height;command_height@{ub}
  2697. This statement allows you to vary the proportions of the screen set aside to
  2698. the scene area versus and command/dialogue area.
  2699. NOTE: If you want NTSC machine users to be able to run your adventures, you
  2700. should make sure the sum of the values is not higher than 200. "Pal-only"
  2701. adventures should not use a sum bigger then 256.
  2702. @endnode
  2703. @node "ST_AREAFILES" "COMMAND_AREA"
  2704. @next "ST_RESOURCE"
  2705. @prev "ST_XXXFONT"
  2706. @{fg shine}@{bg fill}COMMAND_AREA / DLG_AREA Statements (main)@{fg text}@{bg back}
  2707. @{i}Graphic files containing the graphics for the command area and dialogue
  2708. area@{ui}
  2709.  @{b} COMMAND_AREA filename
  2710.   DLG_AREA filename@{ub}
  2711. These files contain the graphics for the command area and its replacement
  2712. during dialogues, the dialogue control area. In graal 1, keep all
  2713. measurements and positions of all boxes and buttons drawn in these files
  2714. exactly as they are: GRAAL 2 will provide more freedom when designing the
  2715. user interface, but for now you are stuck with the nine standard commands
  2716. and the fonts and spacings used in Olaf 1.
  2717. If DEFAULT is specified as filename, a new file will not be loaded - the
  2718. default graphics present in GRAALs memory will be used instead, which speeds
  2719. up the loading time.
  2720. @endnode
  2721. @node "ST_RESOURCE" "RESOURCE"
  2722. @next "ST_OBJS"
  2723. @prev "ST_AREAFILES"
  2724. @{fg shine}@{bg fill}RESOURCE Statement (main)@{fg text}@{bg back}
  2725. @{i}Name of interface resource bank@{ui}
  2726.   @{b}RESOURCE filename@{ub}
  2727. This must be an Amos Pro resource bank especially designed for GRAAL. It
  2728. controls the graphic appearance of the disk swapping, save/load and quit
  2729. dialogue boxes, among other things. Experienced Amos Pro users can also
  2730. easily use the Amos resource editor to make their own banks, but this will
  2731. not be explained here.
  2732. GRAAL 2 will provide several different ready-made resource banks with
  2733. different  looks: High-tech, Stone-age, Medeival... For now, stick with the
  2734. one used in  Olaf 1.
  2735. @endnode
  2736. @node "ST_OBJS" "GLOBALOBJS"
  2737. @next "ST_NBOBS"
  2738. @prev "ST_RESOURCE"
  2739. @{fg shine}@{bg fill}GLOBALOBJS / SECTIONOBJS / ROOMOBJS Statements (main)@{fg text}@{bg back}
  2740. Sets the number of objects that can be used in the game
  2741.   @{b}GLOBALOBJS: number
  2742.   SECTIONOBJS: number
  2743.   ROOMOBJS: number@{ub}
  2744. Objects are all the objects that have a name within the adventure and thus
  2745. can be manipulated by the user.
  2746. It would be wasteful to have the data for all objects in memory all the
  2747. time, which is why they are divided into three categories:
  2748. @{b}GLOBAL OBJECTS@{ub} are indeed available all the time. Everything that can be
  2749. carried in the inventory over more than one section of the game, and all
  2750. characters that Olaf can have conversations with must be in this category.
  2751. Numbering of global objects start with 1 and proceeds upwards.
  2752. @{b}SECTION OBJECTS@{ub} can only exist within one particular section of the game.
  2753. Note that if a player leaves the section and re-enters it at a later date,
  2754. all information in object flags and the like has been lost - all object will
  2755. be re-initialised with the status and position defined in the OBJECT:
  2756. stetements in the .section file. Therefore, use this with caution! To refer
  2757. to a section object, use SOBJn, where n is the number of the section
  2758. object.
  2759. @{b}ROOM OBJECTS@{ub} are restricted to the current  room only, and should
  2760. preferrably be  objects which can not be "seriously" manipulated by the user
  2761. - usually, they are only there to add a bit of atmosphere and to act as red
  2762. herrings. The torch in the bar in Olaf 1 is a perfect example of such an
  2763. object. To refer to a room object, use ROBJn, where n is the number of the
  2764. room object.
  2765. These statements decide how many objects of each time GRAAL will make room
  2766. for. You can alter any of the values any time during the development, so no
  2767. panic.
  2768. @endnode
  2769. @node "ST_NBOBS" "GLOBALBOBS"
  2770. @next "ST_CLPART"
  2771. @prev "ST_OBJS"
  2772. @{fg shine}@{bg fill}GLOBALBOBS / SECTIONBOBS / ROOMBOBS Statements (main)@{fg text}@{bg back}
  2773. @{i}Sets the number of BOB image bank slots available for each BOB image
  2774. category@{ui}
  2775.   @{b}N_GLOBALBOBS: number
  2776.   N_SECTIONBOBS: number
  2777.   N_ROOMBOBS: number@{ub}
  2778. Object images are referred to and treated according to which of the three
  2779. above categories they belong:
  2780. GLOBAL BOBS are images that are always in memory for instant access anywhere
  2781. in the game - for instance, the images used for the animation of the main
  2782. character. Global BOB images are grabbed by the BOBS: statement in the
  2783. graal.main file and referred to by their true number. Since BOB images 1-10
  2784. are reserved for system use, the ones you normally refer to in the game
  2785. start with number 11.
  2786. SECTION BOBS are grabbed with the SECTIONBOBS: statement in a .section file
  2787. and remain in memory as long as the player stays in the section. They are
  2788. referred to using SBOBn, where n is the number of the section BOB image.
  2789. ROOM BOBS are grabbed with the ROOMBOBS: statement in a .room file and
  2790. remain in memory as long as the player stays in the room. They are referred
  2791. to using RBOBn, where n is the number of the room BOB image.
  2792. The numbers set in these statements may be altered at any time during
  2793. development, so don't panic.
  2794. Note: If you need some "dynamic" image replacing, any kind of image may also
  2795. be grabbed/replaced by the @{"BOBS" link "GG_BOBS" 0} command, which has the same parameter as
  2796. these statements.
  2797. @endnode
  2798. @node "ST_CLPART" "CLPART"
  2799. @next "ST_BOBS"
  2800. @prev "ST_NBOBS"
  2801. @{fg shine}@{bg fill}CLPART Statement (main, section, room)@{fg text}@{bg back}
  2802. @{i}Loads an IFF picture file containing clipart into memory@{ui}
  2803.   @{b}CLPART: filename@{ub}
  2804. GRAAL doesn't mess around with complicated picture storage formats - all
  2805. graphics used in the game are "grabbed" from ordinary IFF files. This
  2806. statement selects the IFF file to be using for subsequent "grabbing" with
  2807. the BOBS:, SECTIONBOBS: and ROOMBOBS: statements.
  2808. @endnode
  2809. @node "ST_BOBS" "BOBS"
  2810. @next "ST_CHARSIZE"
  2811. @prev "ST_CLPART"
  2812. @{fg shine}@{bg fill}BOBS Statement (main)@{fg text}@{bg back}
  2813. @{fg shine}@{bg fill}SECTIONBOBS Statement (section)@{fg text}@{bg back}
  2814. @{fg shine}@{bg fill}ROOMBOBS Statement (room)@{fg text}@{bg back}
  2815. @{i}Grabs BOB images into the BOB image bank@{ui}
  2816.   @{b}BOBS: number;startnumber;x1;y1;width;height;x-offset;hotspot
  2817.   SECTIONBOBS: number;startnumber;x1;y1;width;height;x-offset;hotspot
  2818.   ROOMBOBS: number;startnumber;x1;y1;width;height;x-offset;hotspot@{ub}
  2819. This command can grab a single image or a row of images, provided they are
  2820. aligned horisontally and equally sized and spaced. All three versions of the
  2821. command have the same syntax. The only difference is the BOB image category
  2822. they grab. BOBS are later referred to by their proper image number,
  2823. SECTIONBOBS by SOBJn and  ROOMBOBS by ROBJn.
  2824. number
  2825. The number of images to grab with this statement.
  2826. startnumber
  2827. The first image to grab will get this number. If more than one image is
  2828. grabbed, the number will be assigned in increasing sequence. E.g. BOBS:
  2829. 4;11;... would grab the global BOB images 11, 12, 13 and 14. ROOMBOBS
  2830. 1;5;... would grab ROBJ5.
  2831. x1;y1
  2832. Imagine the clipart being cut out of the picture (previously loaded with the
  2833. CLPART: statement) by placing a rectangular frame over the picture and
  2834. cutting along the edges, x1;y1 is the co-ordinate in the upper left corner
  2835. of the frame...
  2836. width;height
  2837. ...and this is the width and the height of the frame. Everything that is cut
  2838. out and is of colour 0 will be transparent when the image is used.
  2839. x-offset
  2840. If more than one image is grabbed with the statement, this number tells how
  2841. many pixels to the right the "frame" should be moved before cutting out the
  2842. next image.
  2843. hotspot
  2844. The hotspot decides which point of an image is actually placed at the
  2845. co-ordinates of a command using the image. For example, 
  2846.   BOBON 10,30,70,SBOB3
  2847. is a GRAAL command placing image SBOB3 at the co-ordinates 30,70. Great, but
  2848. which point of the image is actually placed at 30,70? That is decided by the
  2849. hotspot. The default hotspot in graal (choosen by setting the hotspot
  2850. parameter to 0) is in the middle at the bottom of the frame - which is where
  2851. a character  grabbed as an image usually should have its feet. Setting the
  2852. hotspot parameter to another value retains the x-position of the hotspot but
  2853. alters the y-value. This has to do with getting objects in 3D scenes in the
  2854. correct order and is explained in more detail in the GRAAL tutorial.
  2855. @endnode
  2856. @node "ST_CHARSIZE" "CHARACTER_HEIGHT"
  2857. @next "ST_CHARACTER_BOB"
  2858. @prev "ST_BOBS"
  2859. @{fg shine}@{bg fill}CHARACTER_HEIGHT / CHARACTER_WIDTH Statements (main)@{fg text}@{bg back}
  2860. @{i}Gives the average size of the main character@{ui}
  2861.   CHARACTER_HEIGHT: pixels
  2862.   CHARACTER_WIDTH: pixels@{ub}
  2863. This states how big you main character normally is, and is used to calculate
  2864. how the main character may move on the screen. A good example is the "alley"
  2865. in the street outside the bar in Olaf 1. It shows that the system is aware
  2866. of Olafs width and doesn't put him in the alley unless he fits there - click
  2867. on a point too close to the walls, and Olaf walks out of the alley again.
  2868. @endnode
  2869. @node "ST_CHARACTER_BOB" "CHARACTER_BOB"
  2870. @next "ST_CHARACTER_COL"
  2871. @prev "ST_CHARSIZE"
  2872. @{fg shine}@{bg fill}CHARACTER_BOB Statement (main)@{fg text}@{bg back}
  2873. @{i}Sets the BOB number used for the main character@{ui}
  2874.   @{b}CHARACTER_BOB: number@{ub}
  2875. Do not alter this! (But some time in the future there may be a good reason
  2876. to be able to customise it.)
  2877. @endnode
  2878. @node "ST_CHARACTER_COL" "CHARACTER_COL"
  2879. @next "ST_PAUSE"
  2880. @prev "ST_CHARACTER_BOB"
  2881. @{fg shine}@{bg fill}CHARACTER_COL Statement (main)@{fg text}@{bg back}
  2882. @{i}Sets the colour to use for main character "speech"@{ui}
  2883.   @{b}CHARACTER_COL: colour number@{ub}
  2884. Make this a fairly bright colour, since it will be surrounded by a black
  2885. outline.  It should also a colour that is the same for all graphics in the
  2886. adventure, because it does not look good if the main characters speech keeps
  2887. shifting its colour from dialogue to dialogue.
  2888. @endnode
  2889. @node "ST_PAUSE" "PAUSE_RIGHT"
  2890. @next "ST_STILL"
  2891. @prev "ST_CHARACTER_COL"
  2892. @{fg shine}@{bg fill}PAUSE_RIGHT / PAUSE_LEFT / PAUSE_BACK / PAUSE_FRONT Statements (main)@{fg text}@{bg back}
  2893. @{i}Sets the images used when the character pauses in one of the four main
  2894. directions@{ui}
  2895.  @{b} PAUSE_RIGHT: image number
  2896.   PAUSE_LEFT: image number
  2897.   PAUSE_BACK: image number
  2898.   PAUSE_FRONT: image number@{ub}
  2899. These images are used when the main character pauses waiting for player
  2900. input. You may choose to use exactly the same images as for the
  2901. corresponding STILL_ statements.
  2902. @endnode
  2903. @node "ST_STILL" "STILL_RIGHT"
  2904. @next "ST_WALK"
  2905. @prev "ST_PAUSE"
  2906. @{fg shine}@{bg fill}STILL_RIGHT / STILL_LEFT / STILL_BACK / STILL_FRONT Statements (main)@{fg text}@{bg back}
  2907. @{i}Sets the still images used for the main character and the four main
  2908. directions.@{ui}
  2909.   STILL_RIGHT: image number
  2910.   STILL_LEFT: image number
  2911.   STILL_BACK: image number
  2912.   STILL_FRONT: image number@{ub}
  2913. These images will be used in automatic main character movement.
  2914. @endnode
  2915. @node "ST_WALK" "WALK_RIGHT"
  2916. @next "ST_WALK_SPEED"
  2917. @prev "ST_STILL"
  2918. @{fg shine}@{bg fill}WALK_RIGHT / WALK_LEFT / WALK_AWAY / WALK_TOWARD Statements (main)@{fg text}@{bg back}
  2919. @{i}Defines the animation sequence used for movement in the four directions.@{ui}
  2920.  @{b} WALK_RIGHT: animation sequence
  2921.   WALK_LEFT: animation sequence
  2922.   WALK_AWAY: animation sequence
  2923.   WALK_TOWARD: animation sequence@{ub}
  2924. These four @{"animation
  2925. sequences" link "GG_Animation" 0} are used by GRAAL for all automatic movement
  2926. of the main character.
  2927. @endnode
  2928. @node "ST_WALK_SPEED" "WALK_SPEED"
  2929. @next "ST_TALK_MAP"
  2930. @prev "ST_WALK"
  2931. @{fg shine}@{bg fill}WALK_SPEED Statement (main)@{fg text}@{bg back}
  2932. @{i}Adjust walking speed@{ui}
  2933.   @{b}WALK_SPEED: speed factor@{ub}
  2934. This statement adjusts the speed of the automatic main character movement so
  2935. that the speed matches the WALK_xxxxx animation squences - the objective is
  2936. to make it look like the character actually uses his feet to walk, rather
  2937. than glide around on a slippery surface. Simply experiment with the value
  2938. until the movement (especially sideways) looks good!
  2939. @endnode
  2940. @node "ST_TALK_MAP" "TALK_MAP"
  2941. @next "ST_HANDLE_MAP"
  2942. @prev "ST_WALK_SPEED"
  2943. @{fg shine}@{bg fill}TALK_MAP Statement (main)@{fg text}@{bg back}
  2944. @{i}Defines animation sequences used for automatic main character speech@{ui}" link
  2945. "GG_Animation" 0} used for automatic main character speech
  2946.   @{b}TALK_MAP: previous image;animation sequence@{ub}
  2947. When a @{"SAY" link "GG_SAY" 0} command is given, GRAAL checks which image is currently used for
  2948. the main character. (This should normally be one of the @{"STILL_..." link "ST_STILL" 0} or
  2949. @{"PAUSE_..." link "ST_PAUSE" 0} images.) The image is checked against the TALK_MAP statements
  2950. (there may be up to 8 of them) and the one where the previous image matches
  2951. the main character's current image is used for the animation of the speech.
  2952. @endnode
  2953. @node "ST_HANDLE_MAP" "HANDLE_MAP"
  2954. @next "ST_OBJECT"
  2955. @prev "ST_TALK_MAP"
  2956. @{fg shine}@{bg fill}HANDLE_MAP Statement (main)@{fg text}@{bg back}
  2957. @{i}Defines the animation
  2958. sequences used when main character manipulates
  2959. objects@{ui}" link "GG_Animation" 0} used when main character manipulates
  2960. objects
  2961.  @{b} HANDLE_MAP: previous image;anim seq low;anim seq mid;anim seq high@{ub}
  2962. When a HANDLE command is encountered, GRAAL checks which image is currently
  2963. being used for the main character, and the "handle position" for the object
  2964. being manipulated. The proper animation sequence foom the HANDLE_MAP
  2965. statement matching the current main character image is then used. Note that
  2966. the animation sequences only show the main character reaching out for
  2967. something, and that the last image in each sequence should be specified as
  2968. lasting for only one frame.
  2969. @endnode
  2970. @node "ST_OBJECT" "OBJECT"
  2971. @next "ST_DLG"
  2972. @prev "ST_HANDLE_MAP"
  2973. @{fg shine}@{bg fill}OBJECT Statement (main)@{fg text}@{bg back}
  2974. @{fg shine}@{bg fill}SECTIONOBJ Statement (section)@{fg text}@{bg back}
  2975. @{fg shine}@{bg fill}ROOMOBJ Statement (room)@{fg text}@{bg back}
  2976. @{i}Defines an object@{ui}
  2977.   @{b}OBJECT: number;name;start location;VIS|NVIS;default image;bob;
  2978.           x pos;y pos;character x offset;character y offset;
  2979.           character still image;preposition;pickable;animation channel;
  2980.           default command;icon image;handle position;types;
  2981.           word 1;word 2;word 3
  2982.   SECTIONOBJ: ...ditto...
  2983.   ROOMOBJ: ...ditto...@{ub} same syntax for all three...
  2984. Note that all parameters should be on the same line in the GRAAL file - a
  2985. bit difficult to show in ordinary guide format here, though. Anyway, you
  2986. really should use GRAALs own object editor to be able to edit the parameters
  2987. in a more user-friendly format. (See the editor documentation for this
  2988. one.)
  2989. Yes, this is the most complex statement there is, but let's run through it
  2990. one parameter at a time:
  2991. @{b}number@{ub}
  2992. For global objects specified by the OBJECT statement, the object is later
  2993. referred to by this very number.
  2994. Objects defined by SECTIONOBJ will be referred to as ROBJn, where n is the
  2995. number.
  2996. Objects defined by ROOMOBJ will be referred to as ROBJn, where n is the
  2997. number.
  2998. @{b}name@{ub}
  2999. The object name shown when the cursor hits the object, and in the inventory.
  3000. A backslash in the name will cause a line break in that position when it is
  3001. displayed in the scene area. The @{"NAME" link "GG_NAME" 0} command can alter this at any time.
  3002. @{b}start location@{ub}
  3003. The room number where the object is initially positioned. 0 is used for
  3004. objects that are "nowhere".
  3005. @{b}VIS|NVIS@{ub}
  3006. VIS if the object is visible, NVIS if it is hidden. @{"SHOW" link "GG_SHOW" 0} and @{"HIDE" link "GG_HIDE" 0} commands
  3007. can alter this as you wish later on.
  3008. @{b}default image@{ub}
  3009. image number, animation string or pattern definition initially used for the
  3010. object
  3011. @{b}bob@{ub}
  3012. the bob number to use for this object. two objects (including characters and
  3013. static and animated objects) cannot use the same bob number at the same
  3014. time.
  3015. @{b}x pos;y pos@{ub}
  3016. The object's position on the screen.
  3017. @{b}character x offset;character y offset@{ub}
  3018. The main character's position relative to the object when manipulating it,
  3019. looking at it, or plain walking up to it (with the @{"MOBJ" link "GG_MOBJ" 0} command).
  3020. @{b}character still image@{ub}
  3021. The image used for the main character after having walked up to the object.
  3022. @{b}preposition@{ub}
  3023. A preposition indicates that the object can not be used on its own, but must
  3024. be combined with a second object.
  3025. @{b}PICK|NPICK@{ub}
  3026. PICK means the object can be picked up and added to the inventory. (NPICK
  3027. for churches, planet systems and other things hard to carry around.)
  3028. @{b}animation channel@{ub}
  3029. The animation channel used for the object. (Only if the object is animated,
  3030. of course.) Make sure two animated objects in the same room don't try to use
  3031. the same channel!
  3032. @{b}default command@{ub}
  3033. This is the command directly executed if the player points to an object in
  3034. the scene area and clicks the right mouse button@{b}
  3035. icon image@{ub}
  3036. If the inventory is displayed as icons, this is the image number used for
  3037. the inventory display. Can be a global, room or section bob image -
  3038. naturally, the image must be available at all times when there is a chance
  3039. of the oject being in the inventory!
  3040. @{b}handle position@{ub}
  3041. Decides whether the object is manipulated using the LOW, MID or HIGH
  3042. animation (@{"HANDLE" link "GG_HANDLE" 0} command).
  3043. @{b}types@{ub}
  3044. A character string, where each character specifies some property for the
  3045. object. The following are suggested, but using @{"IFTYPE" link "GG_IFTYPE" 0}, you can use this
  3046. feature for almost anything you like!
  3047.   M = Male character
  3048.   F = Female character
  3049.   A = Animal
  3050.   G = Group
  3051.   V = Alive
  3052.   D = Dead
  3053.   C = Container
  3054.   W = Wood
  3055.   T = Metal
  3056.   S = Stone
  3057.   L = Liquid
  3058.   E = Food     ...  and so on  ...
  3059. @{b}word 1;word 2;word 3@{ub}
  3060. When you construct sentences referring to an object, sometimes you would
  3061. like to use the proper article or other word connected to the object. These
  3062. parameters give you a chance to specify such words, which can the be put
  3063. into your @{"sentences" link "GG_Vars" 0}. These can also be altered with the @{"NAME" link "GG_NAME" 0} command during
  3064. the game.
  3065. @endnode
  3066. @node "ST_DLG" "DLG"
  3067. @next "ST_ACTION"
  3068. @prev "ST_OBJECT"
  3069. @{fg shine}@{bg fill}DLG Statement (main)@{fg text}@{bg back}
  3070. @{i}Defines the dialogue partners.@{ui}
  3071.  @{b} DLG: number;object;speech colour;speech offset;speech animation sequence@{ub}
  3072. For each dialogue that occurs in the game, a DLG statement must be present.
  3073. @{b}number@{ub}
  3074. Dialogue number. Must be unique. Should start from 1 and proceed upwards
  3075. with as few gaps in the numbering sequence as possible - just like in  room
  3076. and section numbering, any unused numbers take up memory space!
  3077. @{b}object@{ub}
  3078. The dialogue "partner" is defined by this object. All such partners must be
  3079. global objects defined in the graal.main file.
  3080. @{b}speech colour@{ub}
  3081. The colour used for the partner's speech
  3082. @{b}speech offset@{ub}
  3083. This number determines where the partner's speech is printed. lower
  3084. numbers=higher above the partner's head.
  3085. @{b}speech animation sequence@{ub}
  3086. The animation sequence used with the @{"RESP" link "GG_RESP" 0} command
  3087. @endnode
  3088. @node "ST_ACTION" "ACTION"
  3089. @next "ST_DACT"
  3090. @prev "ST_DLG"
  3091. @{fg shine}@{bg fill}ACTION Statement (main, section, room)@{fg text}@{bg back}
  3092. @{i}Contains conditions and commands checked when player inputs a sentence.@{ui}
  3093.  @{b} ACTION: verb;condition|statement;...;condition|statement@{ub}
  3094. When the player inputs a sentence, the ACTION: statements are checked for
  3095. the currently used script files, in this order:
  3096.  room file, top to bottom 
  3097.  section file, top to bottom 
  3098.  graal.main file, top to bottom
  3099. When an ACTION statement with the proper verb number is found, its
  3100. parameters - the conditions and commands - are checked and executed from
  3101. left to right. As soon as a condition is FALSE, the rest of that ACTION
  3102. statement is skipped, and GRAAL looks at the next one. (There is a special
  3103. verb number, -1, for "timer events" - see the @{"DOAFTER" link "GG_DOAFTER" 0} command.)
  3104. The search for further ACTION statements is stopped as soon as a valid @{"EXIT" link "GG_EXIT" 0}
  3105. command has been found. If a @{"REDO" link "GG_REDO" 0} statement is encountered, the process is
  3106. restarted from the first ACTION statement in the file currently being
  3107. processed.
  3108. @endnode
  3109. @node "ST_DACT" "DACT"
  3110. @next "ST_UPDATE"
  3111. @prev "ST_ACTION"
  3112. @{fg shine}@{bg fill}DACT Statement (section, room)@{fg text}@{bg back}
  3113. @{i}Immediate actions upon entering section / room@{ui}
  3114.   @{b}DACT: condition|command;...;condition|command@{ub}
  3115. Immediately after a room script has been loaded, all DACT statements in the
  3116. script are scanned for commands that should be executed before control is
  3117. returned to the player. As soon as an EXIT command is found, any remaining
  3118. DACT:s in the script are ignored. 
  3119. DACT:s in sections are executed immediately before the room DACT:s for every
  3120. room belonging to that section. Note that an EXIT command in a  section DACT
  3121. only skips the rest of the section DACT:s - then the execution of the room
  3122. DACT:s begins.
  3123. The structure and function of DACT statements are the same as for @{"ACTION:" link "ST_ACTION" 0}
  3124. statements, except there is no verb number as first parameter here.
  3125. @endnode
  3126. @node "ST_UPDATE" "UPDATE"
  3127. @next "ST_SECTION"
  3128. @prev "ST_DACT"
  3129. @{fg shine}@{bg fill}UPDATE Statement (room)@{fg text}@{bg back}
  3130. @{i}Set screen update rate@{ui}
  3131.  @{b} UPDATE: scroll_rate[;normal_rate]@{ub}
  3132. When there is a lot of graphics being updated simultaneously, the
  3133. animation(s) may become jerky. This is because all elements can't be updated
  3134. within 1/50th of a second - the time gap available before GRAAL normally
  3135. refreshes the screen. The problem is most noticeable during background
  3136. scrolls, because of the  added amount of graphics moving about.
  3137. To make the animations smoother, we sometimes need to slow down the updating
  3138. rate and update the screen perhaps every 2/50ths or 3/50ths, allowing GRAAL
  3139. more time to do its graphics work. The UPDATE: statement allows you to set
  3140. specific rates for each room, optimising the performance, and also to
  3141. provide different values depending on whether the background is currently
  3142. scrolling or not.
  3143. Default values are 6 for background scrolling and 1 for "normal" displays.
  3144. @endnode
  3145. @node "ST_SECTION" "SECTION"
  3146. @next "ST_BG_IFF"
  3147. @prev "ST_UPDATE"
  3148. @{fg shine}@{bg fill}SECTION Statement (room)@{fg text}@{bg back}
  3149. @{i}Defines to which section this room belongs@{ui}
  3150.  @{b} SECTION: n@{ub}
  3151. When you enter a new room and the section number is not the same as the one
  3152. for the previous room, the approprita section file (n.section) is loaded and
  3153. its contents executed.
  3154. @endnode
  3155. @node "ST_BG_IFF" "BG_IFF"
  3156. @next "ST_START_POS"
  3157. @prev "ST_SECTION"
  3158. @{fg shine}@{bg fill}BG_IFF Statement (room)@{fg text}@{bg back}
  3159. @{i}Name of background graphics file@{ui}
  3160.  @{b} BG_IFF: filename@{ub}
  3161. This statement loads the gackground graphics for the room. The backdrop
  3162. should be 120 pixels high, and at least 320 pixels wide.
  3163. @endnode
  3164. @node "ST_START_POS" "START_POS"
  3165. @next "ST_FLOOR"
  3166. @prev "ST_BG_IFF"
  3167. @{fg shine}@{bg fill}START_POS Statement (room)@{fg text}@{bg back}
  3168. @{i}Sets possible starting positions@{ui}
  3169.   @{b}START_POS: number;image;x;y;L|R|M;floor@{ub}
  3170. @{b}number@{ub}
  3171. Number of entrance for this room, should range from 1 and upwards.
  3172. @{b}image@{ub}
  3173. The image used for the main character when placed in the starting position.
  3174. @{b}x;y@{ub}
  3175. Position of the main character
  3176. @{b}L|R|M@{ub}
  3177. Decides whether the Left, Right, or Middle of the backdrop is initially
  3178. shown.
  3179. @{b}floor@{ub}
  3180. A floor containing the x;y point. If this is not properly set, the main
  3181. character may do a strange walkabout the frist time he is commanded to move
  3182. somewhere else...
  3183. @endnode
  3184. @node "ST_FLOOR" "FLOOR"
  3185. @next "ST_EXIT"
  3186. @prev "ST_START_POS"
  3187. @{fg shine}@{bg fill}FLOOR Statement (room)@{fg text}@{bg back}
  3188. @{i}Defines the "path" where the main character can walk and how they are
  3189. connected@{ui}
  3190.   @{b}FLOOR: number;x1;y1;x2;y2;floormap/.../floormap@{ub}
  3191. Each floor defines a rectangular area where the main character can "place
  3192. its feet". Up to 12 such rectangles can be defined in a room, and they
  3193. should be connected in such a way that no floor becomes an "island" without
  3194. sharing any space with any other floor. In fact, floors shoull overlap as
  3195. much as possible in order for the character to be able to move about. 
  3196. OVERLAPPING OF FLOORS
  3197. There are some vital rules for floor overlapping. Two floors may have one or
  3198. two intersection points, but not four. In the following diagrams, X marks
  3199. the intersection points:
  3200.         +------+                      +--------+               +--------+
  3201.         |  1   |                      |   1    |               |    1   |
  3202.         |      |                      |        |               |        |
  3203.         +------X----------+     +-----X--------X--+   +--------X----+   |
  3204.         |      |          |     |     |        |  |   |        |    |   |
  3205.         |      |    2     |     |  2  |        |  |   |   2    +----X---+
  3206.         |      |          |     |     |        |  |   |             |
  3207.         +------+----------+     +-----+--------+--+   +-------------+
  3208. are all OK, but the following is ILLEGAL:
  3209.               +------+
  3210.               |  1   |
  3211.          +----X------X-----+
  3212.          | 2  |      |     |
  3213.          +----X------X-----+
  3214.               |      |
  3215.               +------+
  3216. WALKING AROUND
  3217. The floormap parameters decide which floors the main character uses to move
  3218. from one spot to another.
  3219. For each floor defined, there must be as many floormaps defined as there are
  3220. floors in the room. Each floormap has the following format:
  3221.  @{b} finishfloor-nextfloor@{ub}
  3222. and answers the question: "If my final destination is @{b}finishfloor@{ub}, which
  3223. floor should I go to from where I currently am?" 
  3224. Example: For floor 2, there is a floormap
  3225.   @{b}3-4@{ub}
  3226. This floormap says that to go to floor 3 from floor 2, you should go via
  3227. floor 4.
  3228. Through logic follows that for each floor defined, there is always a
  3229. floormap for that floor pointing to itself. For example, one of the
  3230. floormaps for floor one is always 
  3231.   @{b}1-1@{ub}
  3232. because, if you want to get to floor 1, and you already are there, you
  3233. should not go anywhere else to get there. That's logic!
  3234. If there is more than one floormap, they are separated by a slash ( / ).
  3235. PATHS
  3236. From GRAAL 2, there is a way of navigating between floors that do not
  3237. require the floors to overlap: A path can be defined between them using the
  3238. @{"PATH:" link "ST_PATH" 0} statement. Paths can also twist and turn a number of times, which may
  3239. come in handy in its own right.
  3240. To use a path in a floormap, prefix the (path) number with a "P". Click
  3241. PATH: above for a more complete description.
  3242. @endnode
  3243. @node "ST_PATH" " PATH "
  3244. @{fg shine}@{bg fill}PATH Statement (room)@{fg text}@{bg back}
  3245. @{i}defines a path to walk between two floors@{ui}
  3246.  @{b} PATH: path number;firstfloor;secondfloor;x1;y1;x2;y2[{;xn;yn;}]@{ub}
  3247. @{b}firstfloor@{ub}
  3248. The number of the floor containing the first co-ordinate of the path.
  3249. @{b}secondfloor@{ub}
  3250. The number of the floor containing the last co-ordinate of the path.
  3251. @{b}x1;y1;...@{ub}
  3252. Co-ordinates specifying points along the path.
  3253. This is an alternative way to move between two floors. If two floors do not
  3254. overlap, a path can be defined between them:
  3255.                                     +--------------+
  3256.                                     |              |
  3257.                                     | D            |
  3258.                                     |/             |
  3259.                         Path 1      /              |
  3260.                      B-------------C               |
  3261.                     /               |              |
  3262.       Floor 1      /                +--------------+
  3263.          +--------/---+                        Floor 2
  3264.          |       /    |
  3265.          |      A     |
  3266.          |            |
  3267.          +------------+
  3268. As shown in the diagram, a path can alter direction a number of times. This
  3269. path has a starting point (A), two "knees" (B and C), and an ending point
  3270. (D).  Up to six point may be defined. Two is the natural minimum.
  3271. Example:
  3272. PATH: 1;2;4;120;40;160;30;230;60
  3273. Path 1 goes between floors 2 and 4. The starting point is 120;40  (within
  3274. floor 2), it turns at 160;30 and ends at 230;60 (within floor 4).
  3275. These are the rules:
  3276.  * A path must start inside one floor and end inside another.
  3277.  * A when a path should be used, it is specified in a floormap
  3278.    (se the FLOOR: statement) prefixed by a "P". For example,
  3279.    the floormap
  3280.     3-P2
  3281.    means "if the destination floor is 3, now use path 2"
  3282.  * Paths cannot be changed by commands, and if the floor settings
  3283.    are changed by the SETFLOOR command, the starting and ending points
  3284.    of all paths must still remain within the original floors. (Just
  3285.    a longwinded way to say "avoid using paths in rooms where you
  3286.    use SETFLOOR a lot...)
  3287.  * When the player clicks a position on the screen, GRAAL tries to 
  3288.    calculate the closest point to which the character can walk. This
  3289.    does NOT include points along the paths, but only the nearest
  3290.    point within a floor. For example, is the player clicks point B in 
  3291.    the diagram above, the character will actually only move to the point
  3292.    in floor 1 directly below and closest to it. If the player clicks
  3293.    point C, GRAAL thinks "Aha, you want to go to floor 2, and moves
  3294.    the character to the paths ending point (D), then to the point 
  3295.    within that floor that is closest to point C.
  3296. @endnode
  3297. @node "ST_EXIT" "EXIT"
  3298. @next "ST_STATIC"
  3299. @prev "ST_FLOOR"
  3300. @{fg shine}@{bg fill}EXIT Statement (room)@{fg text}@{bg back}
  3301. @{i}Defines an exit from the room@{ui}
  3302.  @{b} EXIT: exitno;x1;y1;x2;y2;ex;ey;description@{ub}
  3303. Up to 10 exits may be defined in each room.
  3304. @{b}exitno@{ub}
  3305. is from 1 to 10 and must be unique within the room.
  3306. @{b}x1;y1;x2;y2@{ub}
  3307. Defines an area which the player can click to exit. x1;y1 = upper left
  3308. corner, x2;y2 = lower right corner.
  3309. @{b}ex;ey@{ub}
  3310. The co-ordinate the main character will walk to when exiting.
  3311. @{b}description@{ub}
  3312. Name of exit displayed in the scene area when the cursor moves over it.
  3313. When the exit is clicked, GRAAL will execute any room ACTION statements that
  3314. begin
  3315. ACTION: 0;IFOBJ exitno;...
  3316. This should usually be followed by @{"MEXIT" link "GG_MEXIT" 0} and @{"GOTO" link "GG_GOTO" 0} commands, if all you want
  3317. to do is a straightforward, uncomplicated switch to the next room. However,
  3318. you may do anything you like in these ACTION statements that you can do when
  3319. taking care of "normal" player input. Just remember, the @{"VERB" link "GG_Syntax" 0} is 0, and @{"OBJ1" link "GG_Syntax" 0}
  3320. is the exit number.
  3321. @endnode
  3322. @node "ST_STATIC" "STATIC"
  3323. @next "ST_ANIM"
  3324. @prev "ST_EXIT"
  3325. @{fg shine}@{bg fill}STATIC Statement (room)@{fg text}@{bg back}
  3326. @{i}Display a static image that is not an object@{ui}
  3327.  @{b} STATIC: bob number;image number;x;y@{ub}
  3328. This statement is particularly useful to insert foreground objects into a
  3329. scene, which you never want to manipulate in any way.
  3330. As always, make sure the bob number used isn't used for any other image
  3331. displayed in this room.
  3332. See also: @{"ANIM" link "ST_ANIM" 0}
  3333. @endnode
  3334. @node "ST_ANIM" "ANIM"
  3335. @next "ST_ANIM"
  3336. @prev "ST_STATIC"
  3337. @{fg shine}@{bg fill}ANIM Statement (room)@{fg text}@{bg back}
  3338. @{i}Display an animated image that is not an object@{ui}
  3339.   @{b}ANIM: bob number;image number;anim channel;@{"anim
  3340. sequence" link "GG_Animation" 0};x;y
  3341. @{ub}This statement is particularly useful for animated foreground images that
  3342. you do not wish to manipulate in any way in the game.
  3343. See also: @{"STATIC" link "ST_ANIM" 0}
  3344. @endnode
  3345. @node "ST_LINE" "LINE"
  3346. @next "ST_LACT"
  3347. @prev "ST_ANIM"
  3348. @{fg shine}@{bg fill}LINE Statement (section, room)@{fg text}@{bg back}
  3349. @{i}Define a dialogue alternative@{ui}
  3350.   @{b}LINE: dialogue;line number;sentence;alternative;condition;...;condition@{ub}
  3351. Each LINE statement defines a sentence to be shown in the dialogue control
  3352. area during a dialogue. It is the @{"DSET" link "GG_DSET" 0} command that decides which
  3353. alternatives actually appears at a certain time.
  3354. See the bottom of this text for special notes on use in .section files.
  3355. @{b}dialogue@{ub}
  3356. Dialogue number (defined by the DSET statement in graal.main).
  3357. @{b}line number@{ub}
  3358. A number from 1-30, must be unique within the dialogue
  3359. @{b}sentence@{ub}
  3360. The sentence the main character will "speak" the first time this line is
  3361. used.
  3362. @{b}alternative@{ub}
  3363. The sentence the main character will "speak" if the line has been used
  3364. before. This enables you to rephrase alternatives in a way that is more
  3365. natural than having to repeat the first-time line. For example, in the
  3366. sentence is
  3367.   Who are you?
  3368. and you would like to repeat that further on, the alternative should be
  3369. something like
  3370.   Who did you say you are?
  3371. because repeating the first version would seem rather stupid.
  3372. @{b}condition;...;condition@{ub}
  3373. There are two factors deciding whether a line appears in the dialogue
  3374. control area or not. The first one is that a DSET command must have given it
  3375. permission to appear. The second one is that all conditions specified here
  3376. must be fulfilled.
  3377. About section dialogues:
  3378. As of GRAAL 2, dialogues may be common to an entire section of the game.
  3379. Needless to say, this takes some care in the planning stage: Just keep in
  3380. mind that everywhere the dialogue can be invoked, the objects, characters
  3381. and room flags needed to carry out all possible LACT:s are in place. For
  3382. example, it is wise to make specific references to room flags (IFRF
  3383. room,flag=value) rather than test for "current room", because the room may
  3384. change from call to call.
  3385. At any time, the number of active dialogues loaded from the .room and
  3386. .section scripts must not exceed the number of dialogues set in the
  3387. N_DIALOGUES statement (default=6). For example, if there are two dialogues
  3388. in use by the section, no room belonging to that section must load more than
  3389. N_DIALOGUES-2 dialogues.
  3390. @endnode
  3391. @node "ST_LACT" "LACT"
  3392. @next "ST_LACT"
  3393. @prev "ST_LINE"
  3394. @{fg shine}@{bg fill}LACT Statement (section, room)@{fg text}@{bg back}
  3395. @{i}Contains actions in response to a certain dialogue alternative@{ui}
  3396.   @{b}LACT: dialogue;line;actions...@{ub}
  3397. @{i}Important note:@{ui} All LACT: statements for a certain dialogue line must be
  3398. placed immediately  below that precise DLG: statement in the script file.
  3399. The @{"LINE:" link "ST_LINE" 0} statement description holds some information about using dialogues
  3400. in section files.
  3401. @{b}dialogue@{ub}
  3402. This is the number of the dialogue.
  3403. @{b}line@{ub}
  3404. This is the number of the line the player selected.
  3405. @{b}actions@{ub}
  3406. These are any ordinary GRAAL conditions and commands.
  3407. LACT statements often end with a DSET;EXIT combination to refresh the
  3408. dialogue status, or an EDLG;EXIT combination to end the dialogue and return
  3409. to normal input mode.
  3410. See also: @{"LINE" link "ST_LINE" 0} and @{"DLG" link "ST_DLG" 0} statements, and @{"DSET" link "GG_DSET" 0} and @{"EDLG" link "GG_EDLG" 0} commands.
  3411. @endnode
  3412. @node "Troubleshooting" " Trouble-shooting                      "
  3413. TROUBLE-SHOOTING
  3414. An ad-hoc creation like GRAAL is bound to have some niggles, many of which I
  3415. am probably not aware - because I invented the whole thing to suit my needs
  3416. and no-one else's. However, there are some common mistakes easily made,
  3417. which will get you into trouble. Here's how to deal with some of them:
  3418.  @{"My
  3419. command
  3420. statement
  3421. doesn't
  3422. " link "T_statements" 0} 
  3423.  @{"My
  3424. pictures
  3425. awful
  3426. crash
  3427. system
  3428. " link "T_graphics" 0} 
  3429.  @{"GRAAL
  3430. ignores
  3431. rooms
  3432. " link "T_rooms" 0}
  3433.  @{">>Illegal
  3434. function
  3435. call>>
  3436. abort
  3437. " link "T_Illegalfunc" 0} 
  3438.  @{"Mouse
  3439. cursor
  3440. register
  3441. visible
  3442. object
  3443. " link "T_grabbingobjects" 0}      
  3444.  @{"My
  3445. exits
  3446. screen
  3447. " link "T_showexits" 0}     
  3448.  @{"GRAAL
  3449. 'looses'
  3450. number
  3451. " link "T_Exitnumber" 0}        
  3452. @endnode
  3453. @node "T_statements" "My command / statement doesn't work           "
  3454. @{i}Trouble-shooting: @{ui}
  3455. MY COMMAND / STATEMENT DOESN'T WORK
  3456. You have probably got the number of parameters and / or delimiters wrong. In
  3457. most cases, GRAAL should detect this - in other cases, it doesn't.
  3458. Check the syntax with the example files and this reference, and above all,
  3459. use the syntax checker in the GRAAL editor! Pay particular attention to the
  3460. delimiters used: 
  3461. Be extra careful with those statements and commands where the last parameter
  3462. in itself may contain a number of other conditions or commands, like the
  3463. LINE and FLOOR statements.
  3464. @endnode
  3465. @node "T_graphics" "My iff pictures look awful / crash the system "
  3466. @{i}Trouble-shooting@{ui}
  3467. MY GRAPHICS CAUSE TROUBLE
  3468. A lot of the trouble that may arise is caused by the graphics capabilities
  3469. of Amos Pro. Remember that only ECS graphics can be used, and not AGA
  3470. modes.
  3471. If you use DPAINT as a paint package, you MUST make sure that stencils and
  3472. fixed background modes are turned OFF before saving the graphics -
  3473. otherwise, horrible things will occur when Amos encounter that information
  3474. in the graphics file.
  3475. If you use a paint package with AGA capabilities, also remember that there
  3476. are more and subtler colour shades available: The colours in the picture,
  3477. and especially gradients, may look different when loaded into GRAAL. In
  3478. DPAINT IV (at least), there is a SCALE button in the palette requester that
  3479. scales all colours to "GRAAL-compatible" shades directly, so you may see
  3480. what the picture will actually look like.
  3481. Keeping the palette colours in order is pretty much up to you - just
  3482. remember,
  3483.  * colour 0 is always transparent
  3484.  * colour 1 should be white
  3485.  * colour 2 should be black
  3486. @endnode
  3487. @node "T_rooms" "GRAAL ignores my rooms                        "
  3488. @{i}Trouble-shooting:@{ui}
  3489. GRAAL IGNORES MY ROOMS
  3490. No wonder - you have probably forgot to up the @{"MAX_ROOMS" link "ST_MAX_ROOM" 0} statement parameter
  3491. in the graal.main file!
  3492. @endnode
  3493. @node "T_Illegalfunc" ""
  3494. @{i}Trouble-shooting:@{ui}
  3495. Illegal Function Calls
  3496. Whenever GRAAL stops dead and throws up one of these messages, it means you
  3497. have managed to do something my own error trapping in GRAAL hasn't been able
  3498. to detect (or have run into a true bug in GRAAL itself). Some of these
  3499. errors  will (hopefully) be trapped within GRAAL in coming  releases. In the
  3500. meantime,  these are some possible errors:
  3501.  * You tried to @{"GOTO" link "GG_GOTO" 0} or @{"EXIT" link "ST_EXIT" 0} 
  3502.    to a room that has no .room file.
  3503.  * A @{"RESP" link "GG_RESP" 0} command pointed to a character that is actually not displayed on
  3504.    screen - most likely, you got the dialogue number wrong in the command.
  3505.    Alternatively, the @{"OBJECT" link "ST_OBJECT" 0} defining the character hasn't been made
  3506.    visible or was placed in the wrong room in the OBJECT statement.
  3507.  * Check that all objects / graphics that you have ordered to be present
  3508.    in the scene have actually been loaded into the BOB image bank first
  3509.    using @{"CLPART" link "ST_CLPART" 0}, @{"BOBS" link "GG_BOBS" 0}, @{"ROOMBOBS" link "ST_BOBS" 0}, etc. Also, accidentally grabbing an area
  3510.    of a clipart file that consists only of the background colour as a BOB
  3511.    image, and then trying to display that, may cause problems. I think.
  3512.    Anyway, why should you?
  3513.  * A text string longer than fits onto the screen, and without any spaces
  3514.    or backslash ( \ ) characters was encountered, rendering GRAAL unable 
  3515.    to perform automatic line breaks.
  3516.  * You tried to use a room flag number higher than 20 or an object flag
  3517. number
  3518.    higher than 6.
  3519. @endnode
  3520. @node "T_grabbingobjects" "Mouse cursor does not register visible object "
  3521. @{i}Trouble-shooting@{ui}
  3522. @{b}Although an object is visible on screen, the mouse cursor does not pick it
  3523. up.@{ub}
  3524. This is due to the fact that if more than one object occupies the space
  3525. where the mouse cursor is, GRAAL only picks up the one that was first added
  3526. to the list of objects available in the room.
  3527. Use the @{"OBJONTOP" link "GG_OBJONTOP" 0} command to remedy the problem if and when it occurs.
  3528. @endnode
  3529. @node "T_showexits" "My exits do not appear"
  3530. @{i}Trouble-shooting@{ui}
  3531. @{b}My exits do not show up on screen@{ub}
  3532. 1. You have not provided an exit name in the EXIT: statement. This means no
  3533. "Go to..." message is shown in the sentence box, and no name is shown above
  3534. the cursor in the scene area. However, this can also be put to good use,
  3535. because it allows you to use exits for defining any kind of clickable area
  3536. other than true exits and objects, for use as menu selections and what  have
  3537. 2. An exit is not detected by GRAAL if it is covered by an object. The
  3538. remedy is often to make the graphics that are to be shown when the exit is
  3539. available the backdrop picture. A common example would be a door opening.
  3540. The only time the exit is available is when the door is open. Therefore, the
  3541. open doorway should be the backdrop picture, the closed door should be an
  3542. object or a BOB put over the doorway when the door is closed and the exit is
  3543. hidden.
  3544. (Completely hiding an exit with an object this way actually means you do not
  3545. have do issue the HIDE EXIT command. However, I think it is good coding
  3546. practice to include it just the same. The code makes a lot more sense that
  3547. way, showing clearly what is going on in the room.)
  3548. @endnode
  3549. @node "T_Exitnumber" "GRAAL "
  3550. @{i}Trouble-shooting@{ui}
  3551. @{b}GRAAL looses the exit number@{ub}
  3552. Before you are finished going thorugh the commands for an EXIT click
  3553. (ACTION: 0;IFOBJ....), the exit number seems to have changed or
  3554. disappeared.
  3555. Remember that the exit number is actually a special use of OBJ1, so any
  3556. commands put in these ACTION: statements that alter @{"OBJ1" link "GG_OBJ" 0} must put the
  3557. original back before it is time to check the exit number next time!
  3558. @endnode
  3559. @node HeddleyAutoIndex "Index"
  3560. @remark Index auto-generated by Heddley
  3561. Index of database 002e4fd0-0
  3562. Documents
  3563. @{"" link "Main"}
  3564. @{"" link "T_Illegalfunc"}
  3565. CUTSCENE_LAYOUT
  3566. " link "ST_CUTSCENELAYOUT"}
  3567. @{" .room files " link "GG_ST_ROOM"}
  3568. @{" .section files " link "GG_ST_SECT"}
  3569. @{" A Very Short Introduction " link "GG_INTRO"}
  3570. @{" About this Tutorial                   " link "GG_Reference"}
  3571. @{" ADDOF " link "GG_ADDOF"}
  3572. @{" ADDRF " link "GG_ADDRF"}
  3573. @{" ADDTIME        " link "ADDTIME"}
  3574. @{" ARROW_CURSOR: " link "ST_ARROW_CURSOR"}
  3575. @{" BOBOFF " link "GG_BOBOFF"}
  3576. @{" BOBON " link "GG_BOBON"}
  3577. @{" BOBS " link "GG_BOBS"}
  3578. @{" CAMERA         " link "GG_CAMERA"}
  3579. @{" CANCEL         " link "GG_CANCEL"}
  3580. @{" CBOB " link "GG_CBOB"}
  3581. @{" CHAR " link "GG_CHAR"}
  3582. @{" CLPART " link "GG_CLPART"}
  3583. @{" CMOVE " link "GG_CMOVE"}
  3584. @{" COLOUR " link "GG_COLOUR"}
  3585. @{" CPOS " link "GG_CPOS"}
  3586. @{" CURSOR_PALETTE: " link "ST_CURSOR_PALETTE"}
  3587. @{" CUTSCENE " link "GG_CUTSCENE"}
  3588. @{" DATE_FORMAT " link "ST_DATEFORMAT"}
  3589. @{" DATE_LAYOUT " link "ST_DATELAYOUT"}
  3590. @{" DAY_TEXT " link "ST_DAYTEXT"}
  3591. @{" DECOF " link "GG_DECOF"}
  3592. @{" DECRF " link "GG_DECRF"}
  3593. @{" DISABLE_QUIT " link "ST_DISQUIT"}
  3594. @{" DLG_LAYOUT " link "ST_DLGLAYOUT"}
  3595. @{" DOAFTER        " link "GG_DOAFTER"}
  3596. @{" DSET " link "GG_DSET"}
  3597. @{" EDLG " link "GG_EDLG"}
  3598. @{" EXIT " link "GG_EXIT"}
  3599. @{" FADE " link "GG_FADE"}
  3600. @{" FINAL" link "GG_FINAL"}
  3601. @{" FLOOR          " link "GG_FLOOR"}
  3602. @{" GET " link "GG_GET"}
  3603. @{" GOTO " link "GG_GOTO"}
  3604. @{" graal.main file " link "GG_ST_MAIN"}
  3605. @{" HANDLE " link "GG_HANDLE"}
  3606. @{" HIDE " link "GG_HIDE"}
  3607. @{" HIDEEXIT       " link "HIDEEXIT"}
  3608. @{" HOTSP          " link "GG_HOTSP"}
  3609. @{" ICON           " link "GG_ICON"}
  3610. @{" IFCARR / IFNOTCARR " link "GG_IFCARR"}
  3611. @{" IFCBOB             " link "GG_IFCBOB"}
  3612. @{" IFDATE             " link "GG_IFDATE"}
  3613. @{" IFFLOOR            " link "IFFLOOR"}
  3614. @{" IFOBJ / IFOBJ2 " link "GG_IFOBJ"}
  3615. @{" IFOF " link "GG_IFOF"}
  3616. @{" IFPICK " link "GG_IFPICK"}
  3617. @{" IFRF " link "GG_IFRF"}
  3618. @{" IFROOM " link "GG_IFROOM"}
  3619. @{" IFSPOS             " link "GG_IFSPOS"}
  3620. @{" IFTIME             " link "GG_IFTIME"}
  3621. @{" IFTYPE " link "GG_IFTYPE"}
  3622. @{" IFWEEKDAY          " link "GG_WEEKDAY"}
  3623. @{" INV_UP " link "ST_INVUP_ETC"}
  3624. @{" LIGHTS " link "GG_LIGHTS"}
  3625. @{" Limitations, Ranges, Reserved Numbers " link "GG_Limits"}
  3626. @{" LINE " link "GG_LINE"}
  3627. @{" LINE_LENGTH " link "ST_linelength"}
  3628. @{" Machine Requirements                  " link "GG_Requirements"}
  3629. @{" MARK " link "GG_MARK"}
  3630. @{" MEXIT          " link "GG_MEXIT"}
  3631. @{" MOBJ " link "GG_MOBJ"}
  3632. @{" MODE_SWITCH " link "ST_MODESWITCH"}
  3633. @{" MONTH_TEXT " link "ST_MONTHTEXT"}
  3634. @{" NAME           " link "GG_NAME"}
  3635. @{" NEWOBJ         " link "GG_NEWOBJ"}
  3636. @{" News in version 2                     " link "News"}
  3637. @{" NFLOOR         " link "GG_NFLOOR"}
  3638. @{" NOBREAK " link "GG_NOBREAK"}
  3639. @{" NORMAL_WAIT " link "ST_NORMWAIT"}
  3640. @{" N_DIALOGUES " link "ST_NDIALOGUES"}
  3641. @{" N_VERBS " link "ST_NVERBS"}
  3642. @{" OBJ1 / OBJ2 " link "GG_OBJ"}
  3643. @{" OBJONTOP       " link "GG_OBJONTOP"}
  3644. @{" OMOVE " link "GG_OMOVE"}
  3645. @{" PATH " link "ST_PATH"}
  3646. @{" PBOB           " link "GG_PBOB"}
  3647. @{" PICK " link "GG_PICK"}
  3648. @{" PREP           " link "GG_PREP"}
  3649. @{" QUIT           " link "GG_Quit"}
  3650. @{" REDO " link "GG_REDO"}
  3651. @{" REMOVE " link "GG_REMOVE"}
  3652. @{" RESP           " link "GG_RESP"}
  3653. @{" RESTORETIME    " link "GG_RESTORETIME"}
  3654. @{" RESUME " link "GG_RESUME"}
  3655. @{" ROOM " link "GG_ROOM"}
  3656. @{" SAMLOAD " link "GG_SAMLOAD"}
  3657. @{" SAMPLAY " link "GG_SAMPLAY"}
  3658. @{" SAVETIME       " link "GG_SAVETIME"}
  3659. @{" SAY " link "GG_SAY"}
  3660. @{" SENTENCE_LAYOUT " link "ST_SENTLAYOUT"}
  3661. @{" SETDATE        " link "GG_SETDATE"}
  3662. @{" SETFLOOR       " link "GG_SETFLOOR"}
  3663. @{" SETOF " link "GG_SETOF"}
  3664. @{" SETRF " link "GG_SETRF"}
  3665. @{" SETTIME        " link "GG_SETTIME"}
  3666. @{" SHOW " link "GG_SHOW"}
  3667. @{" SHOWEXIT       " link "SHOWEXIT"}
  3668. @{" SPLIT_LINE " link "ST_AREASIZES"}
  3669. @{" Syntax Conventions " link "GG_Syntax"}
  3670. @{" SYSTEM_TEXT " link "ST_SYSTEMTEXT"}
  3671. @{" TEXT           " link "GG_TEXT"}
  3672. @{" The GRAAL player interface" link "GG_Interface"}
  3673. @{" The Structure of a GRAAL Game " link "GG_STRUCTURE"}
  3674. @{" THINK " link "GG_THINK"}
  3675. @{" TIME_FORMAT " link "ST_TIMEFORMAT"}
  3676. @{" TIME_LAYOUT " link "ST_TIMELAYOUT"}
  3677. @{" TITLE " link "GG_TITLE"}
  3678. @{" TRACK " link "GG_TRACK"}
  3679. @{" Trouble-shooting                      " link "Troubleshooting"}
  3680. @{" TYPE " link "GG_TYPE"}
  3681. @{" Variables in Text Strings " link "GG_Vars"}
  3682. @{" VERB " link "GG_VERB"}
  3683. @{" VERB_TEXT " link "ST_VERBTEXT"}
  3684. @{" VERB_ZONE " link "ST_VERBZONE"}
  3685. @{" W(ait) " link "GG_WAIT"}
  3686. @{" WALK_BUTTON " link "ST_WALKBUTTON"}
  3687. @{"ACTION" link "ST_ACTION"}
  3688. @{"ANIM" link "ST_ANIM"}
  3689. @{"animation sequences" link "GG_Animation"}
  3690. @{"BG_IFF" link "ST_BG_IFF"}
  3691. @{"BOBS" link "ST_BOBS"}
  3692. @{"CHARACTER_BOB" link "ST_CHARACTER_BOB"}
  3693. @{"CHARACTER_COL" link "ST_CHARACTER_COL"}
  3694. @{"CHARACTER_HEIGHT" link "ST_CHARSIZE"}
  3695. @{"CLPART" link "ST_CLPART"}
  3696. @{"COMMAND_AREA" link "ST_AREAFILES"}
  3697. @{"DACT" link "ST_DACT"}
  3698. @{"DLG" link "ST_DLG"}
  3699. @{"EXIT" link "ST_EXIT"}
  3700. @{"EXIT_COL" link "ST_EXIT_COL"}
  3701. @{"FLOOR" link "ST_FLOOR"}
  3702. @{"GLOBALBOBS" link "ST_NBOBS"}
  3703. @{"GLOBALOBJS" link "ST_OBJS"}
  3704. @{"GRAAL " link "T_Exitnumber"}
  3705. @{"GRAAL Commands" link "GG_Commands"}
  3706. @{"GRAAL Conditions" link "GG_Conditions"}
  3707. @{"GRAAL ignores my rooms                        " link "T_rooms"}
  3708. @{"HANDLE_MAP" link "ST_HANDLE_MAP"}
  3709. @{"INV_LAYOUT" link "ST_INVLAYOUT"}
  3710. @{"LACT" link "ST_LACT"}
  3711. @{"LINE" link "ST_LINE"}
  3712. @{"MAX_CACHE" link "ST_MAXCACHE"}
  3713. @{"MAX_DACT" link "ST_MAX_DACT"}
  3714. @{"MAX_ROOM" link "ST_MAX_ROOM"}
  3715. @{"MAX_SECTION" link "ST_MAX_SECTION"}
  3716. @{"Mouse cursor does not register visible object " link "T_grabbingobjects"}
  3717. @{"MSGFONT" link "ST_XXXFONT"}
  3718. @{"My command / statement doesn't work           " link "T_statements"}
  3719. @{"My exits do not appear" link "T_showexits"}
  3720. @{"My iff pictures look awful / crash the system " link "T_graphics"}
  3721. @{"NAME" link "ST_NAME"}
  3722. @{"OBJECT" link "ST_OBJECT"}
  3723. @{"OBJ_COL" link "ST_OBJ_COL"}
  3724. @{"PAUSE_RIGHT" link "ST_PAUSE"}
  3725. @{"RESOURCE" link "ST_RESOURCE"}
  3726. @{"SECTION" link "ST_SECTION"}
  3727. @{"START_POS" link "ST_START_POS"}
  3728. @{"START_ROOM" link "ST_START_ROOM"}
  3729. @{"STATIC" link "ST_STATIC"}
  3730. @{"STILL_RIGHT" link "ST_STILL"}
  3731. @{"TALK_MAP" link "ST_TALK_MAP"}
  3732. @{"UPDATE" link "ST_UPDATE"}
  3733. @{"VERSION" link "ST_VERSON"}
  3734. @{"WALK_RIGHT" link "ST_WALK"}
  3735. @{"WALK_SPEED" link "ST_WALK_SPEED"}
  3736. Buttons
  3737. Short
  3738. Introduction
  3739. " link "GG_INTRO" 0}
  3740. About
  3741. Reference
  3742. " link "GG_Reference" 0}
  3743. ACTION
  3744. " link "ST_ACTION" 0}
  3745. ADDOF
  3746. " link "GG_ADDOF" 0}
  3747. ADDRF
  3748. " link "GG_ADDRF" 0}
  3749. ADDTIME
  3750. " link "ADDTIME" 0}
  3751. " link "ST_ANIM" 0}
  3752. AREA_SIZES
  3753. " link "ST_AREASIZES" 0}
  3754. ARROW_CURSOR
  3755. " link "ST_ARROW_CURSOR" 0}
  3756. BG_IFF
  3757. " link "ST_BG_IFF" 0}
  3758. BOBOFF
  3759. " link "GG_BOBOFF" 0}
  3760. BOBON
  3761. " link "GG_BOBON" 0}
  3762. " link "ST_BOBS" 0}
  3763. " link "GG_BOBS" 0}
  3764. CAMERA
  3765. " link "GG_CAMERA" 0}
  3766. CANCEL
  3767. " link "GG_CANCEL" 0}
  3768. " link "GG_CBOB" 0}
  3769. " link "GG_CHAR" 0}
  3770. CHARACTER_BOB
  3771. " link "ST_CHARACTER_BOB" 0}
  3772. CHARACTER_COL
  3773. " link "ST_CHARACTER_COL" 0}
  3774. CHARACTER_HEIGHT
  3775. " link "ST_CHARSIZE" 0}
  3776. CHARACTER_WIDTH
  3777. " link "ST_CHARSIZE" 0}
  3778. CLPART
  3779. " link "ST_CLPART" 0}
  3780. CLPART
  3781. " link "GG_CLPART" 0}
  3782. CLPART
  3783. " link "GG_CLPART" 0}
  3784. CMOVE
  3785. " link "GG_CMOVE" 0}
  3786. COLOUR
  3787. " link "GG_COLOUR" 0}
  3788. COMFONT
  3789. " link "ST_XXXFONT" 0}
  3790. Commands
  3791. " link "GG_Commands" 0}
  3792. COMMAND_AREA
  3793. " link "ST_AREAFILES" 0}
  3794. Conditions
  3795. " link "GG_Conditions" 0}
  3796. " link "GG_CPOS" 0}
  3797. CROSSHAIR_CURSOR
  3798. " link "ST_ARROW_CURSOR" 0}
  3799. CURSOR_PALETTE
  3800. " link "ST_CURSOR_PALETTE" 0}
  3801. CUTSCENE
  3802. " link "GG_CUTSCENE" 0}
  3803. CUTSCENE_LAYOUT
  3804. " link "ST_CUTSCENELAYOUT" 0}
  3805. " link "ST_DACT" 0}
  3806. DATE_FORMAT
  3807. " link "ST_DATEFORMAT" 0}
  3808. DATE_LAYOUT
  3809. " link "ST_DATELAYOUT" 0}
  3810. DAY_TEXT
  3811. " link "ST_DAYTEXT" 0}
  3812. DECOF
  3813. " link "GG_DECOF" 0}
  3814. DECRF
  3815. " link "GG_DECRF" 0}
  3816. DISABLE_QUIT
  3817. " link "ST_DISQUIT" 0}
  3818. " link "ST_DLG" 0}
  3819. DLG_AREA
  3820. " link "ST_AREAFILES" 0}
  3821. DLG_DOWN
  3822. " link "ST_INVUP_ETC" 0}
  3823. DLG_LAYOUT
  3824. " link "ST_DLGLAYOUT" 0}
  3825. DLG_UP
  3826. " link "ST_INVUP_ETC" 0}
  3827. DOAFTER
  3828. " link "GG_DOAFTER" 0}
  3829. " link "GG_DSET" 0}
  3830. " link "GG_EDLG" 0}
  3831. " link "ST_EXIT" 0}
  3832. " link "GG_EXIT" 0}
  3833. EXIT_COL
  3834. " link "ST_EXIT_COL" 0}
  3835. " link "GG_FADE" 0}
  3836. FINAL
  3837. " link "GG_FINAL" 0}
  3838. FLOOR
  3839. " link "ST_FLOOR" 0}
  3840. FLOOR
  3841. " link "GG_FLOOR" 0}
  3842. " link "GG_GET" 0}
  3843. GLOBALBOBS
  3844. " link "ST_NBOBS" 0}
  3845. GLOBALOBJS
  3846. " link "ST_OBJS" 0}
  3847. " link "GG_GOTO" 0}
  3848. HANDLE
  3849. " link "GG_HANDLE" 0}
  3850. HANDLE_MAP
  3851. " link "ST_HANDLE_MAP" 0}
  3852. " link "GG_HIDE" 0}
  3853. HIDEEXIT
  3854. " link "HIDEEXIT" 0}
  3855. HOTSP
  3856. " link "GG_HOTSP" 0}
  3857. " link "GG_ICON" 0}
  3858. IFCARR
  3859. IFNOTCARR
  3860. " link "GG_IFCARR" 0}
  3861. IFCBOB
  3862. " link "GG_CBOB" 0}
  3863. IFDATE
  3864. " link "GG_IFDATE" 0}
  3865. IFFLOOR
  3866. " link "IFFLOOR" 0}
  3867. IFOBJ
  3868. IFOBJ2
  3869. " link "GG_IFOBJ" 0}
  3870. IFOF2
  3871. " link "GG_IFOF" 0}
  3872. IFPICK
  3873. " link "GG_IFPICK" 0}
  3874. " link "GG_IFRF" 0}
  3875. IFROOM
  3876. " link "GG_IFROOM" 0}
  3877. IFSPOS
  3878. " link "GG_IFSPOS" 0}
  3879. IFTIME
  3880. " link "GG_IFTIME" 0}
  3881. IFTYPE
  3882. " link "GG_IFTYPE" 0}
  3883. IFWEEKDAY
  3884. " link "GG_WEEKDAY" 0}
  3885. INV_DOWN
  3886. " link "ST_INVUP_ETC" 0}
  3887. INV_LAYOUT
  3888. " link "ST_INVLAYOUT" 0}
  3889. INV_UP
  3890. " link "ST_INVUP_ETC" 0}
  3891. " link "ST_LACT" 0}
  3892. LIGHTS
  3893. " link "GG_LIGHTS" 0}
  3894. Limitations,
  3895. Ranges,
  3896. Reserved
  3897. Numbers
  3898. " link "GG_Limits" 0}
  3899. " link "ST_LINE" 0}
  3900. " link "GG_LINE" 0}
  3901. LINE_LENGTH
  3902. " link "ST_linelength" 0}
  3903. Machine
  3904. Requirements
  3905. " link "GG_Requirements" 0}
  3906. " link "GG_MARK" 0}
  3907. MAX_CACHE
  3908. " link "ST_MAXCACHE" 0}
  3909. MAX_DACT
  3910. " link "ST_MAX_DACT" 0}
  3911. MAX_ROOM
  3912. " link "ST_MAX_ROOM" 0}
  3913. MAX_SECTION
  3914. " link "ST_MAX_SECTION" 0}
  3915. MEXIT
  3916. " link "GG_MEXIT" 0}
  3917. " link "GG_MOBJ" 0}
  3918. MODE_SWITCH
  3919. " link "ST_MODESWITCH" 0}
  3920. MONTH_TEXT
  3921. " link "ST_MONTHTEXT" 0}
  3922. MSGFONT
  3923. " link "ST_XXXFONT" 0}
  3924. " link "ST_NAME" 0}
  3925. " link "GG_NAME" 0}
  3926. NEWOBJ
  3927. " link "GG_NEWOBJ" 0}
  3928. version
  3929. " link "News" 0}
  3930. NFLOOR
  3931. " link "GG_NFLOOR" 0}
  3932. NOBREAK
  3933. " link "GG_NOBREAK" 0}
  3934. NORMAL_WAIT
  3935. " link "ST_NORMWAIT" 0}
  3936. N_DIALOGUES
  3937. " link "ST_NDIALOGUES" 0}
  3938. N_VERBS
  3939. " link "ST_NVERBS" 0}
  3940. " link "GG_OBJ" 0}
  3941. OBJECT
  3942. " link "ST_OBJECT" 0}
  3943. OBJONTOP
  3944. " link "GG_OBJONTOP" 0}
  3945. OBJ_COL
  3946. " link "ST_OBJ_COL" 0}
  3947. OMOVE
  3948. " link "GG_OMOVE" 0}
  3949. " link "ST_PATH" 0}
  3950. PAUSE_BACK
  3951. " link "ST_PAUSE" 0}
  3952. PAUSE_FRONT
  3953. " link "ST_PAUSE" 0}
  3954. PAUSE_LEFT
  3955. " link "ST_PAUSE" 0}
  3956. PAUSE_RIGHT
  3957. " link "ST_PAUSE" 0}
  3958. " link "GG_PBOB" 0}
  3959. " link "GG_PICK" 0}
  3960. " link "GG_PREP" 0}
  3961. " link "GG_Quit" 0}
  3962. " link "GG_REDO" 0}
  3963. REMOVE
  3964. " link "GG_REMOVE" 0}
  3965. RESOURCE
  3966. " link "ST_RESOURCE" 0}
  3967. " link "GG_RESP" 0}
  3968. RESTORETIME
  3969. " link "GG_RESTORETIME" 0}
  3970. RESUME
  3971. " link "GG_RESUME" 0}
  3972. ROOMBOBS
  3973. " link "ST_NBOBS" 0}
  3974. ROOMBOBS
  3975. " link "ST_BOBS" 0}
  3976. ROOMOBJ
  3977. " link "ST_OBJECT" 0}
  3978. ROOMOBJS
  3979. " link "ST_OBJS" 0}
  3980. " link "GG_SAMPLAY" 0}
  3981. SAMLOAD
  3982. " link "GG_SAMLOAD" 0}
  3983. SAVETIME
  3984. " link "GG_SAVETIME" 0}
  3985. " link "GG_SAY" 0}
  3986. SECTION
  3987. " link "ST_SECTION" 0}
  3988. SECTIONBOBS
  3989. " link "ST_NBOBS" 0}
  3990. SECTIONBOBS
  3991. " link "ST_BOBS" 0}
  3992. SECTIONOBJ
  3993. " link "ST_OBJECT" 0}
  3994. SECTIONOBJS
  3995. " link "ST_OBJS" 0}
  3996. SENTENCE_LAYOUT
  3997. " link "ST_SENTLAYOUT" 0}
  3998. SETDATE
  3999. " link "GG_SETDATE" 0}
  4000. SETFLOOR
  4001. " link "GG_SETFLOOR" 0}
  4002. SETOF
  4003. " link "GG_SETOF" 0}
  4004. SETRF
  4005. " link "GG_SETRF" 0}
  4006. SETTIME
  4007. " link "GG_SETTIME" 0}
  4008. " link "GG_SHOW" 0}
  4009. SHOWEXIT
  4010. " link "SHOWEXIT" 0}
  4011. Special
  4012. Characters
  4013. Strings
  4014. " link "GG_Vars" 0}
  4015. START_POS
  4016. " link "ST_START_POS" 0}
  4017. START_ROOM
  4018. " link "ST_START_ROOM" 0}
  4019. Statements
  4020. graal.main
  4021. " link "GG_ST_MAIN" 0}
  4022. Statements
  4023. n.room
  4024. files
  4025. " link "GG_ST_ROOM" 0}
  4026. Statements
  4027. n.section
  4028. files
  4029. " link "GG_ST_SECT" 0}
  4030. STATIC
  4031. " link "ST_STATIC" 0}
  4032. STILL_BACK
  4033. " link "ST_STILL" 0}
  4034. STILL_FRONT
  4035. " link "ST_STILL" 0}
  4036. STILL_LEFT
  4037. " link "ST_STILL" 0}
  4038. STILL_RIGHT
  4039. " link "ST_STILL" 0}
  4040. Syntax
  4041. Conventions
  4042. " link "GG_Syntax" 0}
  4043. SYSTEM_TEXT
  4044. " link "ST_SYSTEMTEXT" 0}
  4045. TALK_MAP
  4046. " link "ST_TALK_MAP" 0}
  4047. " link "GG_TEXT" 0}
  4048. GRAAL
  4049. player
  4050. interface
  4051. " link "GG_Interface" 0}
  4052. Structure
  4053. GRAAL
  4054. " link "GG_STRUCTURE" 0}
  4055. THINK
  4056. " link "GG_THINK" 0}
  4057. TIME_FORMAT
  4058. " link "ST_TIMEFORMAT" 0}
  4059. TIME_LAYOUT
  4060. " link "ST_TIMELAYOUT" 0}
  4061. TITLE
  4062. " link "GG_TITLE" 0}
  4063. TITLEFONT1
  4064. " link "ST_XXXFONT" 0}
  4065. TITLEFONT2
  4066. " link "ST_XXXFONT" 0}
  4067. TRACK
  4068. " link "GG_TRACK" 0}
  4069. Trouble-shooting
  4070. " link "Troubleshooting" 0}
  4071. " link "GG_TYPE" 0}
  4072. UPDATE
  4073. " link "ST_UPDATE" 0}
  4074. " link "GG_VERB" 0}
  4075. VERB_TEXT
  4076. " link "ST_VERBTEXT" 0}
  4077. VERB_ZONE
  4078. " link "ST_VERBZONE" 0}
  4079. VERSION
  4080. " link "ST_VERSON" 0}
  4081. W(ait)
  4082. " link "GG_WAIT" 0}
  4083. WALK_AWAY
  4084. " link "ST_WALK" 0}
  4085. WALK_BUTTON
  4086. " link "ST_WALKBUTTON" 0}
  4087. WALK_LEFT
  4088. " link "ST_WALK" 0}
  4089. WALK_RIGHT
  4090. " link "ST_WALK" 0}
  4091. WALK_SPEED
  4092. " link "ST_WALK_SPEED" 0}
  4093. WALK_TOWARD
  4094. " link "ST_WALK" 0}
  4095. @{".ptrn" alink "1.ptrn/main" 0}
  4096. @{".scene" alink "1.scene/1.scene/main" 0}
  4097. @{"=DEMO=>" alink "graal.main/main" 0}
  4098. @{"=DEMO=>" alink "1.section/main" 0}
  4099. @{"=DEMO=>" alink "1.room/main" 0}
  4100. @{">>Illegal
  4101. function
  4102. call>>
  4103. abort
  4104. " link "T_Illegalfunc" 0}
  4105. @{"ACTION" link "ST_ACTION" 0}
  4106. @{"ACTION:" link "ST_ACTION" 0}
  4107. @{"ADDOF" link "GG_ADDOF" 0}
  4108. @{"ADDRF" link "GG_ADDRF" 0}
  4109. @{"ADDTIME" link "ADDTIME" 0}
  4110. @{"ANIM" link "ST_ANIM" 0}
  4111. @{"anim
  4112. sequence" link "GG_Animation" 0}
  4113. @{"animation
  4114. sequence" link "GG_Animation" 0}
  4115. @{"animation
  4116. sequences" link "GG_Animation" 0}
  4117. @{"BOBOFF" link "GG_BOBOFF" 0}
  4118. @{"BOBON" link "GG_BOBON" 0}
  4119. @{"BOBS" link "GG_BOBS" 0}
  4120. @{"BOBS" link "ST_BOBS" 0}
  4121. @{"BOBS:" link "ST_BOBS" 0}
  4122. @{"CANCEL" link "GG_CANCEL" 0}
  4123. @{"CBOB" link "GG_CBOB" 0}
  4124. @{"CHAR" link "GG_CHAR" 0}
  4125. @{"CHAR
  4126. OFF" link "GG_CHAR" 0}
  4127. @{"CLPART" link "GG_CLPART" 0}
  4128. @{"CLPART" link "ST_CLPART" 0}
  4129. @{"CMOVE" link "GG_CMOVE" 0}
  4130. @{"COLOUR" link "GG_COLOUR" 0}
  4131. @{"CPOS" link "GG_CPOS" 0}
  4132. @{"CURSOR_PALETTE" link "ST_CURSOR_PALETTE" 0}
  4133. @{"DACT" link "ST_DACT" 0}
  4134. @{"DATE_FORMAT" link "ST_DATEFORMAT" 0}
  4135. @{"DATE_LAYOUT" link "ST_DATELAYOUT" 0}
  4136. @{"DAY_TEXT:" link "ST_DAYTEXT" 0}
  4137. @{"DECOF" link "GG_DECOF" 0}
  4138. @{"DECRF" link "GG_DECRF" 0}
  4139. @{"DLG" link "ST_DLG" 0}
  4140. @{"DLG:" link "ST_DLG" 0}
  4141. @{"DOAFTER" link "GG_DOAFTER" 0}
  4142. @{"DSET" link "GG_DSET" 0}
  4143. @{"EDLG" link "GG_EDLG" 0}
  4144. @{"EXIT" link "GG_EXIT" 0}
  4145. @{"EXIT" link "ST_EXIT" 0}
  4146. @{"EXIT:" link "ST_EXIT" 0}
  4147. @{"FADE" link "GG_FADE" 0}
  4148. @{"FLOOR" link "GG_FLOOR" 0}
  4149. @{"FLOOR:" link "ST_FLOOR" 0}
  4150. @{"GET" link "GG_GET" 0}
  4151. @{"GOTO" link "GG_GOTO" 0}
  4152. @{"GRAAL
  4153. 'looses'
  4154. number
  4155. " link "T_Exitnumber" 0}
  4156. @{"GRAAL
  4157. ignores
  4158. rooms
  4159. " link "T_rooms" 0}
  4160. @{"graal.main" link "GG_ST_MAIN" 0}
  4161. @{"HANDLE" link "GG_HANDLE" 0}
  4162. @{"HIDE" link "GG_HIDE" 0}
  4163. @{"HIDEEXIT" link "HIDEEXIT" 0}
  4164. @{"IFOF" link "GG_IFOF" 0}
  4165. @{"IFRF" link "GG_IFRF" 0}
  4166. @{"IFTYPE" link "GG_IFTYPE" 0}
  4167. @{"LACT" link "ST_LACT" 0}
  4168. @{"LACT" link "ST_DACT" 0}
  4169. @{"LIGHTS
  4170. ON" link "GG_LIGHTS" 0}
  4171. @{"LINE" link "ST_LINE" 0}
  4172. @{"LINE:" link "ST_LINE" 0}
  4173. @{"MARK" link "GG_MARK" 0}
  4174. @{"MAX_ROOMS" link "ST_MAX_ROOM" 0}
  4175. @{"MEXIT" link "GG_MEXIT" 0}
  4176. @{"MOBJ" link "GG_MOBJ" 0}
  4177. @{"MONTH_TEXT:" link "ST_MONTHTEXT" 0}
  4178. @{"Mouse
  4179. cursor
  4180. register
  4181. visible
  4182. object
  4183. " link "T_grabbingobjects" 0}
  4184. @{"My
  4185. command
  4186. statement
  4187. doesn't
  4188. " link "T_statements" 0}
  4189. @{"My
  4190. exits
  4191. screen
  4192. " link "T_showexits" 0}
  4193. @{"My
  4194. pictures
  4195. awful
  4196. crash
  4197. system
  4198. " link "T_graphics" 0}
  4199. @{"n.room" link "GG_ST_ROOM" 0}
  4200. @{"n.section" link "GG_ST_SECT" 0}
  4201. @{"NAME" link "GG_NAME" 0}
  4202. @{"NFLOOR" link "GG_NFLOOR" 0}
  4203. @{"NOBREAK" link "GG_NOBREAK" 0}
  4204. @{"N_VERBS" link "ST_NVERBS" 0}
  4205. @{"OBJ1" link "GG_OBJ" 0}
  4206. @{"OBJ1" link "GG_Syntax" 0}
  4207. @{"OBJ1/OBJ2" link "GG_OBJ" 0}
  4208. @{"OBJECT" link "ST_OBJECT" 0}
  4209. @{"OBJECT" link "ST_OBJS" 0}
  4210. @{"OBJONTOP" link "GG_OBJONTOP" 0}
  4211. @{"OMOVE" link "GG_OMOVE" 0}
  4212. @{"PATH:" link "ST_PATH" 0}
  4213. @{"PAUSE_..." link "ST_PAUSE" 0}
  4214. @{"PICK" link "GG_PICK" 0}
  4215. @{"REDO" link "GG_REDO" 0}
  4216. @{"REMOVE" link "GG_REMOVE" 0}
  4217. @{"RESP" link "GG_RESP" 0}
  4218. @{"RESTORETIME" link "GG_RESTORETIME" 0}
  4219. @{"RESUME" link "GG_RESUME" 0}
  4220. @{"ROOMBOBS" link "ST_BOBS" 0}
  4221. @{"SAM" link "GG_SAMPLAY" 0}
  4222. @{"SAMLOAD" link "GG_SAMLOAD" 0}
  4223. @{"SAMPLAY" link "GG_SAMPLAY" 0}
  4224. @{"SAVETIME" link "GG_SAVETIME" 0}
  4225. @{"SAY" link "GG_SAY" 0}
  4226. @{"sentences" link "GG_Vars" 0}
  4227. @{"SETDATE" link "GG_SETDATE" 0}
  4228. @{"SETFLOOR" link "GG_SETFLOOR" 0}
  4229. @{"SETOF" link "GG_SETOF" 0}
  4230. @{"SETRF" link "GG_SETRF" 0}
  4231. @{"SETTIME" link "GG_SETTIME" 0}
  4232. @{"SHOW" link "GG_SHOW" 0}
  4233. @{"SHOWEXIT" link "SHOWEXIT" 0}
  4234. @{"special
  4235. characters" link "GG_Vars" 0}
  4236. @{"START_POS" link "ST_START_POS" 0}
  4237. @{"STATIC" link "ST_ANIM" 0}
  4238. @{"STILL_..." link "ST_STILL" 0}
  4239. @{"syntax" link "GG_Syntax" 0}
  4240. @{"THINK" link "GG_THINK" 0}
  4241. @{"TIME_FORMAT" link "ST_TIMEFORMAT" 0}
  4242. @{"TIME_LAYOUT" link "ST_TIMELAYOUT" 0}
  4243. @{"TITLE" link "GG_TITLE" 0}
  4244. @{"TITLEFONT:" link "ST_XXXFONT" 0}
  4245. @{"TYPE" link "GG_TYPE" 0}
  4246. @{"VERB" link "GG_VERB" 0}
  4247. @{"VERB" link "GG_Syntax" 0}
  4248. @{"VERB_TEXT:" link "ST_ExitMessage" 0}
  4249. @{"WALK_..." link "ST_WALK" 0}
  4250. @endnode
  4251.