Add a bunch of autogenerated index entries.
[ibg.git] / chapters / 02.rst
1 ====================
2  Tools of the trade
3 ====================
4
5 .. epigraph::
6
7    | |CENTER| *C was a captain, all covered with lace;*
8    | |CENTER| *D was a drunkard, and had a red face.*
9
10 .. only:: html
11
12   .. image:: /images/picC.png
13      :align: left
14
15 |C|\onventional -- static -- fiction can be written using nothing more than
16 pencil and paper, or typewriter, or word-processor; however, the
17 requirements for producing IF are a little more extensive, and the creative
18 process slightly more complex.
19
20 * For static fiction, you first write the text, and then you check it by
21   reading what you've written.
22
23 * For IF, you still have to write all of the text, but you also have to
24   establish what text gets displayed when.  Once you have written the
25   necessary Inform instructions, you use a :term:`compiler` program to
26   convert them into a playable format.  The resulting information is played
27   by an :term:`interpreter` program, which permits you to interact with
28   your developing world.
29
30 With static fiction What You Write Is What You Read, but with IF the format
31 in which you initially write the game doesn't bear much resemblance to the
32 text which the interpreter ultimately displays.  For example, the "William
33 Tell" game, in the form that we wrote it, starts like this:
34
35 .. code-block:: inform
36
37     !============================================================================
38     Constant Story "William Tell";
39     Constant Headline
40                 "^A simple Inform example
41                  ^by Roger Firth and Sonja Kesserich.^";
42
43     Include "Parser";
44     Include "VerbLib";
45
46     !============================================================================
47     ! Object classes
48
49     Class   Room
50       has   light;
51
52     ...
53
54 You will never need to look at it in the form produced by the compiler::
55
56     050000012C6C2C2D1EF6010A0C4416900010303230313031004253FEA90C0000
57     0000000000000000000000000000168F000000000000010200000000362E3231
58     ...
59
60 but, as you'll notice from the full transcript in :doc:`/appendices/c`, the
61 player will see the following::
62
63      The place: Altdorf, in the Swiss canton of Uri.  The year is 1307, at
64      which time Switzerland is under rule by the Emperor Albert of
65      Habsburg.  His local governor -- the vogt -- is the bullying Hermann
66      Gessler, who has placed his hat atop a wooden pole in the centre of
67      the town square; everybody who passes through the square must bow to
68      this hated symbol of imperial might...
69
70 Clearly, there's more to writing IF than just laying down the words in the
71 right order.  Fortunately, we can make one immediate simplification: the
72 translated form produced by the Inform compiler -- those cryptic numbers
73 and letters held in what's known as the :term:`story file` -- is designed
74 to be read by the interpreter program.  The story file is an example of a
75 "binary" file, containing data intended for use only by a computer program.
76 Forget all that unreadable gibberish.
77
78 So that leaves just the first form -- the one starting "``Constant Story``"
79 -- which represents the tale written as a piece of IF.  That's the
80 :term:`source file` (so called because it contains the game in its
81 original, source, form) which you create on your computer.  The source file
82 is a "text" (or "ASCII") file containing words and phrases which can be
83 read -- admittedly after a little tuition, which is what this guide is all
84 about -- by humans.
85
86 .. Generated by autoindex
87 .. index::
88    single: IBM PC
89    pair: NotePad; text editor
90
91 How do you create that source file?  Using a third software program: an
92 :term:`editor`.  However, unlike the compiler and interpreter, this program
93 isn't dedicated to the Inform system -- or even to IF.  An editor is an
94 entirely general tool for creating and modifying text files; you've
95 probably already got a basic one on your computer (an IBM PC running
96 Windows comes with NotePad, while an Apple Macintosh has SimpleText or
97 TextEdit), or you can download a better one from the Internet.  An editor
98 is like a word-processing program such as MS Word, only much less complex;
99 no fancy formatting features, no bold or italics or font control, no
100 embedded graphics; it simply enables you to type lines of text, which is
101 exactly what's needed to create an IF game.
102
103 If you look at the game source above, or in :doc:`/appendices/c`, you'll
104 notice ``Include "Parser";`` and ``Include "VerbLib";`` a few lines down
105 from the top of the file.  These are instructions to the Inform compiler to
106 "include" -- that is, to merge in the contents -- of files called
107 ``Parser.h`` and ``VerbLib.h``.  These are not files which you have to
108 create; they're standard :term:`library files`, part of the Inform system.
109 All that you have to do is remember to Include them in every game that you
110 write.  Until you've a fair understanding of how Inform works, you've no
111 need to worry about what they contain (though you can look if you want to:
112 they're readable text files, just like the ones this guide will teach you
113 to write).
114
115 So, we've now introduced all of the bits and pieces which you need in order to
116 write an Inform adventure game:
117
118 * a text :term:`editor` program which can create and modify the
119   :term:`source file` containing the descriptions and definitions of your
120   game.  Although it's not recommended, you can even use a word-processing
121   program to do this, but you have to remember to save your game in Text
122   File format;
123
124 * some Inform :term:`library files` which you Include in your own game
125   source file in order to provide the :term:`model world` -- a basic game
126   environment and lots of useful standard definitions;
127
128 * the Inform :term:`compiler` program, which reads your source file (and
129   the library files) and translates your descriptions and definitions into
130   another format -- the :term:`story file` -- intended only for...
131
132 * an Inform :term:`interpreter` program, which is what players of your game
133   use.  A player doesn't require the source file, library files or compiler
134   program, just the interpreter and the game in compiled format (which,
135   because it's a binary file not meaningful to human eyes, neatly
136   discourages players from cheating).
137
138 .. Generated by autoindex
139 .. index::
140    single: IF Archive
141
142 All of those, apart from the editor, can be downloaded for free from the IF
143 Archive.  One approach is to fetch them individually, following the
144 guidance on Graham's page: visit http://www.inform-fiction.org/ and look
145 for the "Software" section.  However, if you're using a PC or a Mac, you'll
146 find it easier to download a complete package containing everything that
147 you need to get started.
148
149 .. _inform-windows:
150
151 Inform on an IBM PC (running Microsoft Windows)
152 ===============================================
153
154 Although the Windows operating system is upgraded on a fairly regular
155 basis, its basic capabilities and ways of working have remained
156 more-or-less consistent for many years.  The information here applies to
157 PCs running Windows 95 onwards.
158
159 .. rubric:: Installing and testing Inform
160
161 Follow these steps:
162
163 1. Download http://www.firthworks.com/roger/downloads/inform_pc_env.zip to
164    a temporary location on your PC.
165
166 2. Use a tool like WinZip to unzip the downloaded file, giving you a new
167    ``Inform`` folder.  Move this folder (and its contents) to a suitable
168    location on your PC -- a good place would be ``C:\My Documents\Inform``,
169    but you could also use ``C:\Documents and Settings\yourname\My
170    Documents\Inform``, ``C:\Inform`` or ``C:\Program Files\Inform``.  You
171    should now have this set of folders:
172
173    .. image:: /images/inform_pc_env.*
174       :align: center
175
176    In order to make the download small and fast, these folders include just
177    enough to get you started as an Inform designer -- the compiler and
178    interpreter programs, the library files, the ``Ruins.inf`` example file
179    from the |DM4|, and a template for your own first game.  A few other
180    folders are included as placeholders where you could later download
181    additional components, if you wanted them.  As soon as possible, you
182    should download the |DM4| into the ``Inform\Doc`` folder -- it's an
183    essential document to have, and has been omitted from this download only
184    because of its 3MB size.
185
186 3. To verify that the downloaded files work properly, use Windows Explorer
187    to display the contents of the ``Inform\Games\MyGame1`` folder: you will
188    see the two files ``MyGame1.bat`` and ``MyGame1.inf``:
189
190    .. image:: /images/filelist1.*
191       :align: center
192
193    ``MyGame1.inf`` is a tiny skeleton game in Inform source format.  By
194    convention, all Inform source files have an extension of .inf; Windows
195    has an inbuilt definition for ``.inf`` files, and so shows its Type as
196    "Setup Information", but this doesn't seem to matter.  If you
197    double-click the file, it should open in NotePad so that you can see how
198    it's written, though it probably won't mean much -- yet.
199
200 4. ``MyGame1.bat`` is an MS-DOS batch file (an old kind of text-only
201    computer program, from the days before point-and-click interfaces) which
202    runs the Inform compiler.  Double-click it; a DOS window opens as the
203    game compiles, and you'll see this::
204
205         C:\My Documents\Inform\Games\MyGame1>..\..\Lib\Base\Inform MyGame1
206         +include_path=.\,..\..\Lib\Base,..\..\Lib\Contrib | more
207
208         Inform 6.30 for Win32 (27th Feb 2004)
209
210         C:\My Documents\Inform\Games\MyGame1>pause "at end of compilation"
211         Press any key to continue . . .
212
213    Press the space bar, then close the DOS window.
214
215    .. note::
216
217       On Windows NT, 2000 and XP, the DOS window closes of its own accord
218       when you press the space bar.
219
220 5. A story file ``MyGame1.z5`` has appeared in the folder; this is the
221    compiled game, which you can play using an interpreter:
222
223    .. image:: /images/filelist2.*
224       :align: center
225
226    The extension of ``.z5`` signifies that the story file contains a
227    Z-machine game in Version 5 (today's standard) format.
228
229 6. Use Windows Explorer to display the contents of the ``Inform\Bin\Frotz``
230    folder, and double-click ``Frotz.exe``; the interpreter presents an
231    ``Open a Z-code Game`` dialog box.
232
233 7. Browse to display the ``Inform\Games\MyGame1`` folder, and select
234    ``MyGame1.z5``.  Click ``Open``.  The game starts running in the Windows
235    Frotz 2002 window.
236
237 8. When you tire of "playing" the game -- which won't take long -- you can
238    type the QUIT command, you can select ``File > Exit``, or you can simply
239    close the Frotz window.
240
241 9. Using the same techniques, you can compile and play ``Ruins.inf``, which
242    is held in the ``Inform\Games\Download`` folder.  RUINS is the game used
243    as an example throughout the |DM4|.
244
245 .. rubric:: Setting file associations
246
247 The business of first starting the interpreter, and then locating the story
248 file that you want to play, is clumsy and inconvenient.  Fortunately, when
249 you first run the Frotz interpreter, it automatically creates an
250 association with story files whose extension is ``.z5``.  From now on,
251 you'll be able to play a game simply by double-clicking its story file.  If
252 some any reason this doesn't work, you can set up the association yourself:
253
254 1. Double-click ``MyGame1.z5``; Windows asks you to select the program
255    which is to open it:
256
257    * type ``Z-code V5 Adventure`` as the "``Description for...``"
258    * click to select "``Always use this program...``"
259    * click ``Other...``
260
261 2. Browse to display the ``Inform\Bin\Frotz`` folder, and select
262    ``Frotz.exe``.  Click ``Open``.
263
264 .. rubric:: Changing the Windows icon
265
266 If the Windows icon that's displayed alongside ``MyGame1.z5`` doesn't look
267 right, you can change it.
268
269 1. In Windows Explorer, either select ``View > Options...`` and click
270    ``File Types``, or select ``Tools > Folder Options...`` and click ``File
271    Types``:
272
273    * select the game file type in the list, which is in order either of
274      application (Frotz) or of extension (Z5)
275    * click ``Edit...``
276
277 2. In the ``Edit File Type`` dialog, click ``Change Icon``.
278
279 3. In the ``Change Icon`` dialog, ensure that the file name is
280    ``Inform\Bin\Frotz\Frotz.exe``, and select one of the displayed icons.
281    Click ``OK`` to close all the dialogs.  The files in the folder should
282    now look like this:
283
284    .. image:: /images/filelist3.*
285       :align: center
286
287 .. rubric:: Compiling using a batch file
288
289 You can view -- and of course change -- the contents of ``MyGame1.bat``,
290 the batch file which you double-click to run the compiler, using any text
291 editor.  You'll see two lines, something like this (the first chunk is all
292 on one long line, with a space between the ``MyGame1`` and the
293 ``+include_path``)::
294
295      ..\..\Lib\Base\Inform MyGame1
296                  +include_path=.\,..\..\Lib\Base,..\..\Lib\Contrib | more
297      pause "at end of compilation"
298
299 These long strings of text are command lines -- a powerful interface method
300 predating the icons and menus that most computer users know.  You won't
301 need to master the command line interface in order to start using Inform,
302 but this section will tell you what these particular command lines are
303 doing.  There are four parts to the first line:
304
305 1. ``Inform`` refers to the compiler program, and ``..\..\Lib\Base`` is the
306    name of the folder which contains it (addressed relative to *this*
307    folder, the one which holds the source file).  Double-dots stand for "go
308    to the parent folder".
309
310 2. ``MyGame1`` is the name of the Inform source file; you don't need to
311    mention its extension of ``.inf`` if you don't want to.
312
313 3. ``+include_path=.\,..\..\Lib\Base,..\..\Lib\Contrib`` tells the compiler
314    where to look for files like ``Parser`` and ``VerbLib`` which you've
315    Included.  Three locations are suggested: this folder, which holds the
316    source file (``.\``); the folder holding the standard library files
317    (``..\..\Lib\Base``); the folder holding useful bits and pieces
318    contributed by the Inform community (``..\..\Lib\Contrib``).  The three
319    locations are searched in that order.
320
321    .. note::
322
323       On the command line, you sometimes also see a compiler :term:`switch`
324       such as :option:`-S`, used for controlling detailed aspects of how
325       the compiler operates.  Rather than do that here, we find it more
326       convenient to place any necessary switches at the very top of the
327       source file, as we'll explain in the next chapter.
328
329 4. ``| more`` causes the compiler to pause if it finds more mistakes than
330    it can tell you about on a single screen, rather than have them scroll
331    off the top of the MS-DOS window.  Press the space bar to continue the
332    compilation.
333
334 The second line -- ``pause "at end of compilation"`` -- just prevents the
335 window from closing before you can read its contents, as it otherwise would
336 on Windows NT, 2000 and XP.
337
338 You'll need to have a new batch file like this to match each new source
339 file which you create.  The only item which will differ in the new file is
340 the name of the Inform source file -- ``MyGame1`` in this example.  You
341 must change this to match the name of the new source file; everything else
342 can stay the same in each ``.bat`` file that you create.
343
344 .. rubric:: Getting a better editor
345
346 .. Generated by autoindex
347 .. index::
348    pair: NotePad; text editor
349
350 Although NotePad is adequate when you're getting started, you'll find life
351 much easier if you obtain a more powerful editor program.  We recommend
352 TextPad, available as shareware from http://www.textpad.com/; in addition,
353 there are some detailed instructions at
354 http://www.onyxring.com/informguide.aspx?article=14 on how to improve the
355 way that TextPad works with Inform.  The biggest single improvement, the
356 one that will make game development dramatically simpler, is being able to
357 compile your source file *from within* the editor.  No need to save the
358 file, switch to another window and double-click the batch file (and indeed,
359 no further need for the batch file itself): just press a key while editing
360 the file -- and it compiles there and then.  You can also run the
361 interpreter with similar ease.  The convenience of doing this far outweighs
362 the small amount of time needed to obtain and configure TextPad.
363
364 .. index::
365    single: Apple Macintosh
366
367 .. _inform-apple:
368
369 Inform on an Apple Macintosh (running OS X)
370 ===========================================
371
372 Whereas our instructions for using Inform on a PC apply to just about all
373 versions of Windows, on the Macintosh we need to be more precise.  Our
374 guidance here is specifically for Mac OS X, rather than for its predecessor
375 OS 9, and it may be helpful if we first mention a few relevant differences.
376
377 Mac OS X is a robust system constructed around -- or on top of -- BSD
378 [#bsd]_ UNIX.  There are several kinds of applications that will run on
379 your Mac OS X:
380
381 * Aqua: specifically designed for the Graphical User Interface of Mac OS X,
382   and taking advantage of its underlying technologies.  Broadly, there
383   are two types of Aqua application:
384
385   * Cocoa: built with programming tools designed for Mac OS X.
386
387   * Carbon: built with the programming tools designed for Mac OS 9 and
388     earlier versions, but "translated" to take advantage of OS X.
389
390 * Classic: designed to work on Mac OS 9 and earlier versions.  They need to
391   run in the Classic environment of OS X; roughly speaking, Classic is an
392   emulation of the older Mac systems.
393
394 * X11: based on a windowing system designed for the UNIX/Linux world.  They
395   need an X-Windows server to run, and their appearance and functionality
396   may seem a lot different to what the Aqua user expects.
397
398 * UNIX: most UNIX programs (including Linux) will run on your Mac OS X, but
399   they usually have to be accessed (or configured) from the UNIX core of
400   your Mac, through the Terminal utility.
401
402 These differences may be significant, since some of the tools designed to
403 develop and run IF on a Mac system (for example, ones you'll find in the
404 Archive) have been built by programmers working in different environments
405 with varying technologies.  We have tried to select tools that will make
406 your life easy as a beginner, but in time you may want to investigate
407 alternative approaches.
408
409 .. rubric:: Installing and testing Inform
410
411 Follow these steps:
412
413 1. Download http://www.firthworks.com/roger/downloads/inform_macosx_env.sit
414    to a temporary location on your Mac.
415
416 2. Use a tool like StuffIt Expander to unpack the downloaded file (if your
417    system configuration is standard, a mere double-click will make it
418    self-extract at the current location, if it hasn't already expanded all
419    by itself).  You'll now have a new ``Inform`` folder.  Move this folder
420    (and its contents) to a suitable location in your Mac.
421
422    .. note::
423
424       It is a good idea for now to place it in your home directory;
425       otherwise, a few pre-configured items may not work as explained.
426       Once you learn the basics of the configuration, you may move the
427       Inform folder to a different location and hack all the defaults like
428       the professionals do.
429
430    You should now have this set of folders:
431
432    .. image:: /images/inform_mac_env.*
433       :align: center
434
435    In order to make the download small and fast, these folders include just
436    enough to get you started as an Inform designer -- the compiler and
437    interpreter programs, the library files, the ``Ruins.inf`` example from
438    the |DM4|, and a template for your own first game, which you may copy
439    and rename each time you begin a new Inform project.  A few other
440    folders are included as placeholders where you could later download
441    additional components, if you wanted them.  As soon as possible, you
442    should download the |DM4| into the ``Inform/Doc`` folder -- it's an
443    essential document to have, and has been omitted from this download only
444    because of its 3MB size.
445
446 3. To verify that the downloaded files work properly, use the Finder to
447    display the contents of the ``Inform/Games/MyGame1`` folder: you will see
448    the files ``MyGame1.command`` and ``MyGame1.inf``:
449
450    .. image:: /images/mac_filelist1.*
451       :align: center
452
453    ``MyGame1.inf`` is a tiny skeleton game in Inform source format.  By
454    convention, all Inform source files have an extension of ``.inf``.
455    However, Mac OS X may show its Kind as "FUJI BAS IMG document", and try
456    to open it with GraphicConverter.  If you're not a regular user of FUJI
457    BAS IMG documents, you'll probably want to change this.  Either:
458
459    * right-click on the file (or Ctrl-click)
460
461    * select ``Open with`` and choose ``Other...``
462
463    * in the ``Open with`` dialog, go to the ``Applications`` folder and
464      select TextEdit.
465
466    * click to select "``Always open with``"
467
468    * click ``Open``.
469
470    or:
471
472    * right-click on the file (or Ctrl-click)
473
474    * press Option, select ``Always open with`` and choose ``Other...``
475
476    * in the ``Open with`` dialog, go to the ``Applications`` folder and
477      select TextEdit.
478
479    * click ``Open``.
480
481    Now, if you double-click the file, it should open in TextEdit so that
482    you can see how it's written, though it probably won't mean much -- yet.
483
484    .. note::
485
486       The above process may affect only this specific file.  To change 
487       the program that opens by default *all* ``.inf`` files, try this:
488
489       * right-click on the file (or Ctrl-click)
490
491       * select ``Get Info``
492
493       * in the ``Open with`` tab, select TextEdit as the application
494
495       * click the ``Change All...`` button, and confirm the change when asked.
496
497 4. ``MyGame1.command`` is a Terminal Shell Script (a UNIX executable
498    command-line file, a kind of text-only computer program from the days
499    before point-and-click interfaces) which runs the Inform compiler.
500    Double-click it; a UNIX window opens as the game compiles, and you'll
501    see something like this (the working path will reflect your folder
502    hierarchy)::
503
504          Last login: Sat Jul 3 03:07:51 on ttyp1
505          Welcome to Darwin!
506          /Users/Dave/Inform/Games/MyGame1/MyGame1.command; [Hal:~] Dave%
507                 /Users/Dave/Inform/Games/MyGame1/MyGame1.command; exit
508          Inform 6.30 (27th Feb 2004)
509          logout
510          [Process completed]
511
512    .. todo::
513
514       Verify this output.  It's what's in the PDF, but the command prompt
515       looks like it's in the wrong place.
516
517 5. A story file ``MyGame1.z5`` has appeared in the folder; this is the
518    compiled game, which you can play using an interpreter:
519
520    .. image:: /images/mac_filelist2.*
521       :align: center
522
523    The extension of ``.z5`` signifies that the story file contains a
524    Z-machine game in Version 5 (today's standard) format.
525
526 6. Use the Finder to display the contents of the ``Inform/Bin/Zoom``
527    folder, and double-click ``Zoom``; the interpreter presents an ``Open``
528    dialog box.
529
530 7. Browse to display the ``Inform/Games/MyGame1`` folder, and select
531    ``MyGame1.z5``.  Click ``Open``.  The game starts running in the Zoom
532    window.
533
534 8. When you tire of "playing" the game -- which won't take long -- you can
535    type the QUIT command, you can select ``Zoom > Quit Zoom``, or you can
536    simply close the Zoom window.
537
538 .. rubric:: Setting file associations
539
540 .. Generated by autoindex
541 .. index::
542    single: Infocom
543
544 The business of first starting the interpreter, and then locating the story
545 file that you want to play, is clumsy and inconvenient.  Fortunately, when
546 the system first "sees" the Zoom interpreter (which is a nice Aqua
547 application) it automatically creates an association with story files whose
548 extension is ``.z5`` (and with other Infocom formats).  From now on, you'll
549 be able to play a game simply by double-clicking its story file.
550
551 The files in the folder should now look like this:
552
553 .. image:: /images/mac_filelist3.*
554    :align: center
555
556 .. rubric:: Compiling using a command-line file
557
558 If you have followed these instructions to configure your system, every
559 time that you need to compile your source code you just have to
560 double-click on the file ``MyGame1.command``.  However, this file is good
561 only for this folder and for ``MyGame1.inf``.
562
563 If you want to start coding another game, you may copy the folder
564 ``MyGame1`` with all its contents and rename it as you please (for example,
565 ``MyGame2`` or something more appropriate).  Inside the folder, you'll also
566 want to rename the relevant files:
567
568     ``MyGame1.inf`` might become ``MyGame2.inf``, or ``MobyDick.inf``,
569     or...
570
571     ``MyGame1.command`` would change to match: ``MyGame2.command``, or
572     ``MobyDick.command``.
573
574 You can view -- and of course change -- the contents of
575 ``MyGame2.command``, the command file which you double-click to run the
576 compiler, using any text editor.  You'll see two lines, something like this
577 (the second chunk is all on one long line, with a space between the
578 ``MyGame1`` and the ``+include_path``)::
579
580     cd ~/Inform/Games/MyGame1/
581     ../../Lib/Base/inform630_macosx MyGame1
582                       +include_path=./,../../Lib/Base,../../Lib/Contrib
583
584 These long strings of text are command lines -- a powerful interface method
585 predating the icons and menus that most computer users know.  You won't
586 need to master the command line interface in order to start using Inform,
587 but this section will introduce you to a few basic concepts to get your
588 bearings.  The first line changes the working directory to
589 ``~/Inform/Games/MyGame1/``.  The command ``cd`` (also known as ``chdir``,
590 short for "Change Directory to") lets you travel to the desired folder,
591 specified by the path, in this case: ``~/Inform/Games/MyGame1/``.  The
592 ``~`` symbol stands for your home directory.  That is, if your user name
593 were Dave, the above path is equal to::
594
595      /Users/Dave/Inform/Games/MyGame1/
596
597 You want to change that line so that it reads: ``cd
598 ~/Inform/Games/MyGame2/``
599
600 There are three parts to the second line:
601
602 1. ``inform630_macosx`` refers to the compiler program, and
603    ``../../Lib/Base`` is the name of the folder which contains it
604    (addressed relative to *this* folder, the one which holds the source
605    file).  Double-dots stand for "go to the parent folder".
606
607 2. ``MyGame1`` is the name of the Inform source file; you don't need to
608    mention its extension of ``.inf`` if you don't want to.  You'll want to
609    change this to match the name of your new file: ``MyGame2``.
610
611 3. ``+include_path=./,../../Lib/Base,../../Lib/Contrib`` tells the compiler
612    where to look for files like ``Parser`` and ``VerbLib`` which you've
613    Included in the source file (this may sound confusing now, but it will
614    make a lot of sense after you've delved a bit deeper into this Guide).
615    Three locations are suggested, separated by commas: this folder, which
616    holds the source file (``./``); the folder holding the standard library
617    files (``../../Lib/Base``); the folder holding useful bits and pieces
618    contributed by the Inform community (``../../Lib/Contrib``).  The three
619    locations are searched in that order.
620
621    .. note::
622
623       On the command line, you sometimes also see a compiler :term:`switch`
624       such as :option:`-S`, used for controlling detailed aspects of how
625       the compiler operates.  Rather than do that here, we find it more
626       convenient to place any necessary switches at the very top of the
627       source file, as we'll explain in the next chapter.
628
629 Once you've finished editing those lines, ``Save`` the file (not
630 ``SaveAs``), overwriting the original, and make sure that your text editor
631 doesn't append an extension like ``.txt`` (TextEdit, the default editor
632 that comes with OS X, is polite enough to ask you about this).
633
634 You'll need to have a new command file like this to match each new source
635 file which you create.  The only item which will differ in the new file is
636 the name of the Inform source file -- ``MyGameN``.  You must change this to
637 match the name of the new source file; everything else can stay the same in
638 each ``.command`` file that you create.
639
640 .. rubric:: Making your own command-line file
641
642 There are two peculiarities by which your system understands that
643 ``MyGame1.command`` is a Terminal Shell Script.  One is the extension
644 ``.command``, and the other is an attribute of the file which marks it as
645 "executable" (the "executable bits").  If it doesn't meet both conditions,
646 ``MyGame1.command`` won't run as it should.  You have to be careful when
647 editing this file: if you were, for instance, to open it in a text editor
648 and save it to a different location with a different name, the executable
649 bits might get lost, and when you double-click it, you would see:
650
651 .. image:: /images/mac_exec_error.*
652    :align: center
653
654 To make a command file from scratch (also, to fix this problem) you can
655 follow these steps:
656
657 1. Open any text editor and write (using your own path)::
658
659         cd ~/Inform/Games/MyGameN/
660         ../../Lib/Base/inform630_macosx MyGameN
661                       +include_path=./,../../Lib/Base,../../Lib/Contrib
662
663    where ``MyGameN`` stands for the name you have chosen for your Inform
664    project.
665
666 2. Save the file in the folder ``MyGameN`` and call it ``MyGameN.command``.
667    Make sure that the text editor doesn't append a ``.txt`` extension; if
668    it does, rename the file manually.
669
670 3. Go to ``Applications > Utilities`` and double-click on ``Terminal``.
671    This opens the utility which provides you with a set of windows to
672    access the UNIX command line.  Supposing the computer is named Hal, and
673    the user Dave, you should see something like this::
674
675         Last login: Wed Jun 30 18:05:55 on ttyp1
676         Welcome to Darwin!
677         [Hal:~] Dave%
678
679 4. Every time that you open a Terminal window, you're at your home
680    directory (as noted by the tilde after the computer's name).  You can
681    travel to your working folder by typing::
682
683         cd Inform/Games/MyGameN
684
685    You'll see how the path changes::
686
687         [Hal:~/Inform/Games/MyGameN] Dave%
688
689    Now you can make the command file executable with::
690
691         chmod 777 MyGameN.command
692
693 5. Alternatively, you can omit the cd command if you give the full path to
694    ``chmod``::
695
696           chmod 777 ~/Inform/Games/MyGameN/MyGameN.command
697
698    This sets the executable bits for the file ``MyGameN.command``.
699
700 6. Close the Terminal window.
701
702 Now, every time you need to compile your game, you can just double-click on
703 ``MyGameN.command`` from the Finder.
704
705 .. rubric:: Getting a better editor
706
707 Although TextEdit is adequate when you're getting started, you'll find life
708 much easier if you obtain a more powerful editor program.  We'd really like
709 to recommend one -- there's an exciting list of possibilities at
710 http://osx.hyperjeff.net/Apps/apps.php?sub=5 -- but at the time of writing
711 none of them seems outstandingly suited to IF authorship.  If you find one
712 that works really well, please let us know.
713
714 .. rubric:: More about the editor
715
716 As well as the ones that we recommend, other good text editors are listed
717 at http://www.firthworks.com/roger/editors/.  One feature that's well worth
718 looking out for is "hotkey compilation" -- being able to run the compiler
719 from *within* the editor.  Another is "syntax colouring", where the editor
720 understands enough of Inform's syntax rules to colour-code your source
721 file; for example: red for brackets, braces and parentheses ``[ ]`` ``{ }``
722 and ``( )``, blue for reserved words like ``Object`` and ``print``, green
723 for items in quotes like '...'  and "...", and so on.  Syntax colouring is
724 of great assistance in getting your source file correct and thus avoiding
725 silly compilation errors.
726
727 .. rubric:: More about the compiler
728
729 The Inform compiler is a powerful but undramatic software tool; it does an
730 awful lot of work, but it does it all at once, without stopping to ask you
731 any questions.  Its input is a readable text source file; the output is a
732 story file, also sometimes known as a :term:`Z-code file` (because it
733 contains the game translated into code for the Z-machine, which we describe
734 in the next section).
735
736 If you're lucky, the compiler will translate your source file into Z-code;
737 perhaps surprisingly, it doesn't display any form of "success" message when
738 it succeeds.  Often, however, it fails, because of mistakes which you've
739 made when writing the game.  Inform defines a set of rules -- a capital
740 letter here, a comma there, these words only in a certain order, those
741 words spelled just so -- about which the compiler is extremely fussy.  If
742 you accidentally break the rules, the compiler complains: it refuses to
743 write a Z-code file.  *Do not worry about this*: the rules are easy to
744 learn, but just as easy to break, and all Inform designers inadvertently do
745 so on a regular basis.  There's some additional information about dealing
746 with these mistakes, and about controlling how the compiler behaves, in
747 :doc:`15`.
748
749 .. rubric:: More about the interpreter
750
751 .. Generated by autoindex
752 .. index::
753    single: Infocom
754
755 One of the big advantages of the way Inform works is that a compiled game
756 -- the Z-code story file -- is portable between different computers.
757 That's not just from one PC to another: exactly the same story file will
758 run on a PC, a Mac, an Amiga, UNIX workstations, IBM mainframes, PalmOS
759 hand-helds, and on dozens of other past, present and future computers.  The
760 magic that makes this happen is the interpreter program, a software tool
761 which pretends to be a simple computer called a :term:`Z-machine`.  The
762 Z-machine is an imaginary (or "virtual") computer, but its design has been
763 very carefully specified, so that an expert programmer can quite easily
764 build one.  And that's exactly what has happened: a Macintosh guru has
765 built an Inform interpreter which runs on Apple Macs, a UNIX wizard has
766 built one for UNIX workstations, and so on.  Sometimes, you even get a
767 choice; for popular machines like the PC and the Mac there are several
768 interpreters available.  And the wonderful thing is: each of those
769 interpreters, on each of those computers, is able to play every Inform game
770 that's ever been written *and*, as a surprise bonus, all of the classic
771 1980s Infocom games like "Zork" and "The Hitchhiker's Guide to the Galaxy"
772 as well!
773
774 (Actually, that last sentence is a slight exaggeration; a few games are
775 very large, or have pictures included within them, and not all interpreters
776 can handle this.  However, with that small pinch of salt, it's pretty
777 accurate.)
778
779 That's enough waffling: let's get started!  It's time to begin designing
780 our first game.
781
782 .. rubric:: Footnotes
783
784 .. [#bsd]
785    "BSD" stands for Berkeley Software Distribution, the name of the UNIX
786    derivative distributed in the 1970s from the University of California,
787    Berkeley, and used collectively for the modern descendants of those
788    distributions.