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