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