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