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