diff --git a/README.md b/README.md
index 4db564b6..6d7c2601 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,9 @@
# The Inform App for macOS
## What's New
-A new beta version of the Inform App is now available [here](https://github.com/TobyLobster/Inform/releases). The minimum requirement is now macOS 10.14.6 (Mojave). Users on older macOS versions can of course continue using previous versions from [here](http://inform7.com/downloads/).
+A new version of the Inform App is now available [here](https://github.com/TobyLobster/Inform/releases). The minimum requirement is now macOS 10.14.6 (Mojave). Users of older macOS versions can of course continue using previous versions from [here](http://inform7.com/downloads/).
-- The launcher screen shows the latest News from the IFTF.
+- The launcher screen shows the latest News from the [IFTF](https://iftechfoundation.org).
- Colour schemes have been introduced (see the new preferences pane).
- Support for Dark Mode.
- Support for *Basic Inform*.
@@ -15,12 +15,9 @@ A new beta version of the Inform App is now available [here](https://github.com/
Many thanks to MaddTheSane for a heroic number of modernisations, tweaks and fixes.
### Known Issues
-- Release with winning node marked with '***' in Skein not currently working?
+- Release with a public solution (winning node marked with '***' in Skein) not currently working.
### Work in the Pipeline
-- Build instructions.
-- Updating to latest libraries.
-- Dark mode across more views.
- Mac App Store Version.
- Longer term: Modernisation to Swift, and away from deprecated APIs.
@@ -35,6 +32,7 @@ Inform is free, with no strings attached. What you make with it is yours, to pub
App Version | Inform Version | Release Date | Description
------------ | -------------- | ------------ | :---------------------------------------
+1.82.0 | 10.1.0 | 2022-08-20 | Official release, supporting Inform 10.1.0
1.81.0‑beta1 | 10.1.0 (beta) | 2022‑07‑30 | This is a Beta. Colour Schemes, Dark mode, Basic Inform, Apple Silicon native support.
1.68.1 | 6M62 | 2019-11-14 | Release with website bug fix.
1.67.1 | 6M62 | 2019-10-25 | macOS Catalina support.
@@ -48,14 +46,7 @@ App Version | Inform Version | Release Date | Description
1.50 | 6L02 | 2014-05-07 | First update, modernising Inform
### Building the Inform App.
-This section is TODO.
-
-Before building the Inform App, there are changes required to the XCode project files found in its submodules. I therefore need to document these for this section to be useful. I am investigating possible solutions for this issue.
-
-Inform is currently being compiled with XCode (13.4.1) on macOS Monterey (12.4).
-
-### Building a release of the Inform App
-This section is TODO.
+See [Building the macOS Inform App](documentation/building_inform.md)
### Licensing
See file 'COPYING'
diff --git a/documentation/building_inform.md b/documentation/building_inform.md
new file mode 100644
index 00000000..09723a7e
--- /dev/null
+++ b/documentation/building_inform.md
@@ -0,0 +1,171 @@
+# Building the macOS Inform App
+
+## 0. Prerequisites
+
+- A recent version of macOS and XCode.
+ - At time of writing I'm using XCode 13.4.1 on macOS 12.4 (Monterey).
+- *Apple Developer Program* membership, probably. You will need a valid *Code Signing Identity* and *Developer Team*. That means having valid *Provisioning Profiles*, *Certificates* etc configured directly from Apple.
+- Python 3.
+- Experience of XCode and git.
+
+
+## 1. Clone the repo and submodules:
+
+```
+ git clone --recurse-submodules https://github.com/TobyLobster/Inform.git
+```
+
+## 2. Get and install the additional tools:
+
+2a. Install a tool from a github repo that uses Python 3 to edit XCode project files.
+
+- This is required.
+- It's my fork of this repo because it needed fixing to work with the ZoomCocoa project.
+
+```
+ git clone https://github.com/TobyLobster/mod-pbxproj-fork.git
+ cd mod-pbxproj-fork
+ sudo python3 setup.py install
+```
+
+2b. Optionally install a repo that creates fancy disk images. The install instructions are [here](https://github.com/create-dmg/create-dmg). This is only needed when creating a disk image for release outside the Mac App Store.
+
+## 3. Configure a build:
+
+Before building the app, all project files (including those in recursive submodules), as well as some .plists and .strings files must be configured correctly. This is all automated by a python script found in the root directory. It needs to be executed once, then only when the build type changes or the version number needs to be updated.
+
+* Close any Inform project open in XCode. (XCode doesn't cope well when project files change underneath it.)
+
+* Execute `./configure.py --help`
+
+To see the options. Execute this script with the appropriate parameters specified. Edit the `configure.py` script itself to change the current version number of the App.
+
+* Open the Inform project in XCode.
+
+* After running the configure script always do menu `Product->Clean Build Folder`.
+
+* Now the Inform XCode project should build and run in XCode as normal.
+
+* Troubleshooting: If you're having code signing issues, there is Apple documentation that may help:
+ - [XCode Help: If a code signing error occurs](https://help.apple.com/xcode/mac/current/#/dev01865b392).
+ - [About Code Signing](https://developer.apple.com/library/archive/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html).
+ - [Developer Archive: Code Signing in Depth](https://developer.apple.com/library/archive/technotes/tn2206/_index.html#//apple_ref/doc/uid/DTS40007919).
+ - [Developer Forums: Manual Code Signing Example](https://developer.apple.com/forums/thread/130855/).
+ - [Apple Developer: Code Signing](https://developer.apple.com/support/code-signing/).
+ - [Developer Forums: Code Signing](https://developer.apple.com/forums/tags/code-signing/).
+ - [Apple Developer: Code Signing Search](https://developer.apple.com/search/?q=Code%20Signing).
+ - Deep Dive:
+ - [Inside Code Signing: Provisioning Profiles](https://developer.apple.com/documentation/technotes/tn3125-inside-code-signing-provisioning-profiles).
+ - [Inside Code Signing: Hashes](https://developer.apple.com/documentation/technotes/tn3126-inside-code-signing-hashes).
+ - [Inside Code Signing: Requirements](https://developer.apple.com/documentation/technotes/tn3127-inside-code-signing-requirements/).
+
+
+# Distributing a build
+
+This whole section is a reminder for me on the procedure for doing this.
+
+- Test everything in the App is working first!
+
+- Check the copyright date in the About box includes the current year.
+
+- Edit `configure.py` to use the latest version numbers.
+
+#### Non-Mac App Store build
+
+- Close XCode.
+
+- Make sure you have installed the `create-dmg` tool as detailed in section 2b. above.
+
+- `./configure.py --standalone --team ...`
+
+- Load the Inform project into XCode.
+
+- In XCode choose menu `Product->Clean Build Folder`
+
+- Choose menu `Product->Archive`
+ - This will build the project and create an Archive.
+ - The Archiver will appear with your product - WAIT! IT IS NOT DONE YET!
+ - It will take a few minutes! It is running a script that:
+ - Exports the archive to a temporary location
+ - Creates a DMG from the exported Archive.
+ - Code Signs the DMG.
+ - Opens the `inform/Distribution` directory in the finder. This is how you know it's finished.
+ - Logs details to `~/inform_post_archive_output.txt` - check for errors there.
+ - FYI:
+ - This script is found in `Scripts/post_archive.sh`
+ - It is the post-action step of the Archive action in the XCode Scheme.
+ - This uses a third party tool to create the fancy DMG.
+
+- You should see file `inform/Distribution/inform.dmg` has been produced.
+
+- Troubleshooting: If something went wrong, check the Archive has only the things in it that are needed. If there are extra unwanted executables/libraries in there, then they can be removed by setting SKIP_INSTALL=YES in the appropriate Target. This should be done by adding to the `configure.py` script. The Archive layout should look like this:
+
+```
+dSYMs
+ Builder.dSYM
+ git-client.dSYM
+ GlkClient.framework.dSYM
+ GlkSound.framework.dSYM
+ GlkView.framework.dSYM
+ glulxe-client.dSYM
+ Inform.app.dSYM
+ InformQL.qlgenerator.dSYM
+ SFBAudioEngine.framework.dSYM
+ ZoomServer.dSYM
+ ZoomView.framework.dSYM
+Info.plist
+Products
+ Applications
+ Inform.app
+SCMBlueprint
+ Inform.xcscmblueprint
+SwiftSupport
+ macosx
+ libswiftAppKit.dylib
+ libswiftCore.dylib
+ libswiftCoreData.dylib
+ libswiftCoreFoundation.dylib
+ libswiftCoreGraphics.dylib
+ libswiftCoreImage.dylib
+ libswiftDarwin.dylib
+ libswiftDispatch.dylib
+ libswiftFoundation.dylib
+ libswiftIOKit.dylib
+ libswiftMetal.dylib
+ libswiftObjectiveC.dylib
+ libswiftos.dylib
+ libswiftQuartzCore.dylib
+ libswiftXPC.dylib
+```
+See also Apple's documentation [Troubleshooting Application Archiving in Xcode](https://developer.apple.com/library/archive/technotes/tn2215/_index.html).
+
+- Notarize and staple the DMG. See Apple's documentation:
+ - [Notarizing macOS software before distribution](https://developer.apple.com/documentation/security/notarizing_macos_software_before_distribution?language=objc).
+ - [Customizing the notarization workflow](https://developer.apple.com/documentation/security/notarizing_macos_software_before_distribution/customizing_the_notarization_workflow?language=objc).
+ - [Testing a Notarised Product](https://developer.apple.com/forums/thread/130560).
+
+- Rename the DMG with a version number in this format e.g. `Inform_10_1_0_macOS_1_82_0.dmg`
+
+- Done!
+
+
+#### Mac App Store build
+
+- Close XCode.
+
+- Execute `./configure.py --mas --team ...`
+
+- Load the Inform project into XCode.
+
+- Choose menu `Product->Archive`
+ - This will build the project and create an Archive.
+
+- Note that Notarisation and Stapling is not required for Mac App Store builds.
+
+- Validate the App in the Archiver?
+
+- Then there's a whole bunch more stuff around uploading the Archive to *App Store Connect*, filling in a whole bunch of forms, providing a bunch of screenshots and icons for the app in a variety of defined sizes, descriptions, declarations, etc, submitting the App to Apple for verification, and if everything is OK, finally releasing on the *Mac App Store*.
+
+## Updating to the latest Inform Compiler
+
+- TODO
diff --git a/inform/Compiler/IFCompilerController.h b/inform/Compiler/IFCompilerController.h
index 3e743cf7..c43750f8 100644
--- a/inform/Compiler/IFCompilerController.h
+++ b/inform/Compiler/IFCompilerController.h
@@ -58,7 +58,7 @@ typedef NS_ENUM(unsigned int, IFCompilerTabId) {
/// (In ye olden dayes, this was a window controller as well, but now young whippersnapper
/// compilers can go anywhere, so it's not any more)
///
-@interface IFCompilerController : NSObject
Upgrading?
-Inform in 2015 includes several hundred bug fixes as compared with the 2014 releases. The language has only changed in minor ways, but the Inform app can now be used to make Extension projects as well as stories, and the old Skein and Transcript panels are merged into a new one called Testing. See the ebook "Changes to Inform", which you can access from the Launcher.
- -If you haven't used Inform since before 2014, though, there are big changes. The Mac OS X application was considerably enhanced, for one thing, but the changes go deeper than that. Here are just the headlines: for the full story, see the ebook "Changes to Inform", which you can access from the Launcher.
- -Firstly: the old "Materials" folder has been renamed ".materials". So if your project is called "Dream.inform" then it's accompanied by "Dream.materials", not "Dream Materials" as before.
- -Secondly: the language has much better handling of text, getting rid of "indexed" text entirely, and providing grammatical adaptation - the ability to turn "You go out" automatically into "They went out", for example. There's also real number support with scientific functions (so you can perform physical calculations and have Inform check the dimensions, for example); there are named constants; there's a new ability for projects to have their own private Extensions; and so on.
- -Thirdly: a whole pile of phrases which have been deprecated since before 2010 have finally been removed from the language. If you're still using any of those, you'll need to reword - there's advice on this in the Changes book.
- - - - diff --git a/inform/Resources/en.lproj/Launcher.strings b/inform/Resources/en.lproj/Launcher.strings index 6d2f69a8..497e9b84 100644 Binary files a/inform/Resources/en.lproj/Launcher.strings and b/inform/Resources/en.lproj/Launcher.strings differ diff --git a/inform/StagingArea/Contents/MacOS/6L02/cBlorb b/inform/StagingArea/Contents/MacOS/6L02/cBlorb index 148d56f9..e460637b 100755 Binary files a/inform/StagingArea/Contents/MacOS/6L02/cBlorb and b/inform/StagingArea/Contents/MacOS/6L02/cBlorb differ diff --git a/inform/StagingArea/Contents/MacOS/6L02/ni b/inform/StagingArea/Contents/MacOS/6L02/ni index 7c389764..78ac8227 100755 Binary files a/inform/StagingArea/Contents/MacOS/6L02/ni and b/inform/StagingArea/Contents/MacOS/6L02/ni differ diff --git a/inform/StagingArea/Contents/MacOS/6L38/cBlorb b/inform/StagingArea/Contents/MacOS/6L38/cBlorb index 15298941..a90ca117 100755 Binary files a/inform/StagingArea/Contents/MacOS/6L38/cBlorb and b/inform/StagingArea/Contents/MacOS/6L38/cBlorb differ diff --git a/inform/StagingArea/Contents/MacOS/6L38/ni b/inform/StagingArea/Contents/MacOS/6L38/ni index c39b1dee..d3cd67fb 100755 Binary files a/inform/StagingArea/Contents/MacOS/6L38/ni and b/inform/StagingArea/Contents/MacOS/6L38/ni differ diff --git a/inform/StagingArea/Contents/MacOS/6M62/cBlorb b/inform/StagingArea/Contents/MacOS/6M62/cBlorb index c5ae77b6..09d6e8b7 100755 Binary files a/inform/StagingArea/Contents/MacOS/6M62/cBlorb and b/inform/StagingArea/Contents/MacOS/6M62/cBlorb differ diff --git a/inform/StagingArea/Contents/MacOS/6M62/ni b/inform/StagingArea/Contents/MacOS/6M62/ni index b247ed53..f69f379f 100755 Binary files a/inform/StagingArea/Contents/MacOS/6M62/ni and b/inform/StagingArea/Contents/MacOS/6M62/ni differ diff --git a/inform/StagingArea/Contents/MacOS/cBlorb b/inform/StagingArea/Contents/MacOS/cBlorb index 8ec2c1c5..633fd8bc 100755 Binary files a/inform/StagingArea/Contents/MacOS/cBlorb and b/inform/StagingArea/Contents/MacOS/cBlorb differ diff --git a/inform/StagingArea/Contents/MacOS/inform6 b/inform/StagingArea/Contents/MacOS/inform6 index b2d0a0ca..bc2f2139 100755 Binary files a/inform/StagingArea/Contents/MacOS/inform6 and b/inform/StagingArea/Contents/MacOS/inform6 differ diff --git a/inform/StagingArea/Contents/MacOS/intest b/inform/StagingArea/Contents/MacOS/intest index cf7af365..12b3376b 100755 Binary files a/inform/StagingArea/Contents/MacOS/intest and b/inform/StagingArea/Contents/MacOS/intest differ diff --git a/inform/StagingArea/Contents/MacOS/ni b/inform/StagingArea/Contents/MacOS/ni index 6bddb093..2e2f3fa0 100755 Binary files a/inform/StagingArea/Contents/MacOS/ni and b/inform/StagingArea/Contents/MacOS/ni differ diff --git a/inform/StagingArea/Contents/Resources/Internal/Extensions/Graham Nelson/Basic Inform.i7x b/inform/StagingArea/Contents/Resources/Internal/Extensions/Graham Nelson/Basic Inform.i7x index add88b9a..c13c68b0 100644 --- a/inform/StagingArea/Contents/Resources/Internal/Extensions/Graham Nelson/Basic Inform.i7x +++ b/inform/StagingArea/Contents/Resources/Internal/Extensions/Graham Nelson/Basic Inform.i7x @@ -1008,7 +1008,7 @@ To add (new entry - K) to (L - list of values of kind K), if absent (documented at ph_addtolist): (- LIST_OF_TY_InsertItem({-lvalue-by-reference:L}, {new entry}, 0, 0, {phrase options}); -). -To add (new entry - K) at entry (E - number) in (L - list of values of kind K), if absent +To add (new entry - K) at entry (E - number) in/from (L - list of values of kind K), if absent (documented at ph_addatentry): (- LIST_OF_TY_InsertItem({-lvalue-by-reference:L}, {new entry}, 1, {E}, {phrase options}); -). @@ -1016,23 +1016,23 @@ To add (LX - list of Ks) to (L - list of values of kind K), if absent (documented at ph_addlisttolist): (- LIST_OF_TY_AppendList({-lvalue-by-reference:L}, {-by-reference:LX}, 0, 0, {phrase options}); -). -To add (LX - list of Ks) at entry (E - number) in (L - list of values of kind K) +To add (LX - list of Ks) at entry (E - number) in/from (L - list of values of kind K) (documented at ph_addlistatentry): (- LIST_OF_TY_AppendList({-lvalue-by-reference:L}, {-by-reference:LX}, 1, {E}, 0); -). -To remove (existing entry - K) from (L - list of values of kind K), if present +To remove (existing entry - K) in/from (L - list of values of kind K), if present (documented at ph_remfromlist): (- LIST_OF_TY_RemoveValue({-lvalue-by-reference:L}, {existing entry}, {phrase options}); -). -To remove (N - list of Ks) from (L - list of values of kind K), if present +To remove (N - list of Ks) in/from (L - list of values of kind K), if present (documented at ph_remlistfromlist): (- LIST_OF_TY_Remove_List({-lvalue-by-reference:L}, {-by-reference:N}, {phrase options}); -). -To remove entry (N - number) from (L - list of values), if present +To remove entry (N - number) in/from (L - list of values), if present (documented at ph_rementry): (- LIST_OF_TY_RemoveItemRange({-lvalue-by-reference:L}, {N}, {N}, {phrase options}); -). -To remove entries (N - number) to (N2 - number) from (L - list of values), if present +To remove entries (N - number) to (N2 - number) in/from (L - list of values), if present (documented at ph_rementries): (- LIST_OF_TY_RemoveItemRange({-lvalue-by-reference:L}, {N}, {N2}, {phrase options}); -). @@ -1050,7 +1050,7 @@ To decide what list of Ks is the list of (D - description of values of kind K) Section 4 - Length of lists -To decide what number is the number of entries in/of (L - a list of values) +To decide what number is the number of entries in/of/from (L - a list of values) (documented at ph_numberentries): (- LIST_OF_TY_GetLength({-by-reference:L}) -). To truncate (L - a list of values) to (N - a number) entries/entry diff --git a/inform/StagingArea/Contents/Resources/Internal/HTML/xrefs.txt b/inform/StagingArea/Contents/Resources/Internal/HTML/xrefs.txt index d45cbe3b..f52d158b 100644 --- a/inform/StagingArea/Contents/Resources/Internal/HTML/xrefs.txt +++ b/inform/StagingArea/Contents/Resources/Internal/HTML/xrefs.txt @@ -1,279 +1,279 @@ PM_NoStartRoom PM_StartsOutsideRooms _ doc4 "1.4" "1.4. The Go! button" -PM_CantAssertQuantifier PM_CantAssertNonKind PM_CantAssertNegatedRelations PM_CantAssertNegatedEverywhere PM_CantAssertAdjective PM_TwoLikelihoods PM_NegatedVerb1 PM_NoSuchVerbComma PM_NoSuchVerb _ doc10 "2.1" "2.1. Creating the world" -PM_EnigmaticThey PM_EnigmaticPronoun PM_WordTooLong PM_TooMuchQuotedText PM_UnendingComment PM_UnendingQuote _ doc12 "2.3" "2.3. Punctuation" -PM_BadTitleSentence PM_HeadingStopsBeforeEndOfLine PM_HeadingOverLine HEADINGS _ doc14 "2.5" "2.5. Headings" -PM_UnknownInternalTest PM_TestDoubleWith PM_TestCommandTooLong PM_TestContainsUndo PM_TestBadRequirements PM_TestDuplicate PM_TestMultiWord _ doc17 "2.8" "2.8. The TEST command" -PM_BogusExtension _ doc19 "2.10" "2.10. Installing extensions" -PM_ExtMisidentifiedEnds PM_ExtInadequateVM PM_ExtMiswordedBeginsHere PM_ExtVersionMalformed PM_IncludeExtQuoted _ doc20 "2.11" "2.11. Including extensions" -OPTIONS PM_UnknownUseOption PM_UONotNumerical _ doc21 "2.12" "2.12. Use options" -OPTIONSFILE _ doc22 "2.13" "2.13. Administering classroom use" -STORYFILES PM_BadICLIdentifier _ doc23 "2.14" "2.14. Limits and the Settings panel" -PM_DescriptionsEquated PM_SameKindEquated MAP kind_room _ doc27 "3.2" "3.2. Rooms and the map" -PM_RegionRelation PM_RegionInTwoRegions PM_ExistingRegion REGIONS kind_region _ doc29 "3.4" "3.4. Regions and the index map" -PM_KindsIncompatible PM_MiseEnAbyme PM_CantContainAndSupport PM_BothRoomAndSupporter KINDS _ doc30 "3.5" "3.5. Kinds" -PM_PropertyNotPermitted _ doc32 "3.7" "3.7. Properties depend on kind" -PM_EverywhereMisapplied PM_CantChangeEverywhere PM_EverywhereNonBackdrop kind_backdrop _ doc34 "3.9" "3.9. Backdrops" -PM_TextWithoutSubject PM_TwoAppearances _ doc36 "3.11" "3.11. Two descriptions of things" -PM_BadMapCell PM_RoomMissingDoor PM_DoorInThirdRoom PM_DoorToNonRoom PM_DoorOverconnected PM_DoorUnconnected PM_BothWaysDoor kind_door ph_frontside ph_backside ph_othersideof ph_directionofdoor _ doc37 "3.12" "3.12. Doors" -kind_device _ doc39 "3.14" "3.14. Devices and descriptions" -kind_vehicle _ doc41 "3.16" "3.16. Vehicles and pushable things" -kind_person _ doc42 "3.17" "3.17. Men, women and animals" -kind_player's _ doc46 "3.21" "3.21. The player's holdall" -PM_RoomOrDoorAsPart PM_PartOfRoom _ doc48 "3.23" "3.23. Parts of things" -ph_locationof _ doc50 "3.25" "3.25. The location of something" -PM_NamelessDirection PM_DirectionTooLong PM_ImproperlyMadeDirection PM_TooManyDirections kind_direction _ doc51 "3.26" "3.26. Directions" -NEWKINDS _ doc52 "4.1" "4.1. New kinds" -PM_PluralIsQuoted PM_PluralOfQuoted _ doc55 "4.4" "4.4. Plural assertions" -KINDSVALUE _ doc56 "4.5" "4.5. Kinds of value" -PM_ValueCantHaveVProperties PM_ValueCantHaveProperties _ doc57 "4.6" "4.6. Properties again" -PM_ThisIsEitherOr PM_MiscellaneousEOProblem PM_NonObjectCanBe PM_QualifiedCanBe PM_EitherOrAsValue _ doc58 "4.7" "4.7. New either/or properties" -PM_RedundantThatVaries PM_BadProvides PM_PropertyKindClashes PM_PropertyKindVague PM_PropertyKindUnknown PM_PropertyTooSpecific PM_BadVisibilityWhen PM_PropertyUninitialisable PM_PropertyNameForbidden PM_PropertyCalledPresence PM_PropertyCalledArticle PM_PropertyOfKind1 _ doc59 "4.8" "4.8. New value properties" -PM_EitherOnThree _ doc61 "4.10" "4.10. Conditions of things" -ph_defaultvalue _ doc62 "4.11" "4.11. Default values of kinds" -PM_EmptyKind VARIABLES var_location _ doc63 "4.12" "4.12. Values that vary" -PM_TooManyDuplicates _ doc65 "4.14" "4.14. Duplicates" -PM_ComplexEvery PM_AssemblyRegress PM_AssemblyLoop _ doc66 "4.15" "4.15. Assemblies and body parts" -PM_TSWithPunctuation _ doc69 "5.1" "5.1. Text with substitutions" -phs_bracket phs_closebracket phs_apostrophe phs_quotemark _ doc70 "5.2" "5.2. How Inform reads quoted text" -ph_say phs_a phs_A phs_the phs_The _ doc71 "5.3" "5.3. Text which names things" -phs_numwords phs_s _ doc72 "5.4" "5.4. Text with numbers" -phs_listof phs_alistof phs_Alistof phs_thelistof phs_Thelistof phs_islistof phs_isalistof phs_isthelistof phs_alistofconts _ doc73 "5.5" "5.5. Text with lists" -PM_SayEndIfWithoutSayIf PM_SayOtherwiseWithoutIf PM_SayIfNested phs_if phs_unless phs_otherwise phs_endif phs_endunless phs_elseif phs_elseunless _ doc74 "5.6" "5.6. Text with variations" -PM_ComplicatedSayStructure3 PM_ComplicatedSayStructure4 PM_ComplicatedSayStructure5 PM_ComplicatedSayStructure2 PM_ComplicatedSayStructure phs_oneof phs_or phs_purelyrandom phs_thenpurelyrandom phs_random phs_thenrandom phs_sticky phs_decreasing phs_order phs_cycling phs_stopping phs_firsttime _ doc75 "5.7" "5.7. Text with random alternatives" -phs_linebreak phs_nolinebreak phs_runparaon phs_parabreak phs_condparabreak ph_breakpending phs_clarifbreak phs_runparaonsls _ doc76 "5.8" "5.8. Line breaks and paragraph breaks" -phs_bold phs_italic phs_roman phs_fixedspacing phs_varspacing _ doc77 "5.9" "5.9. Text with type styles" -PM_MidTextUnicode PM_SayUnicode _ doc79 "5.11" "5.11. Unicode characters" -ph_boxed _ doc80 "5.12" "5.12. Displaying quotations" -DESCRIPTIONS ph_numberof _ doc82 "6.1" "6.1. What are descriptions?" -PM_ArticleAsAdjective PM_AdjDomainUnknown PM_AdjDomainSurreal PM_AdjDomainSlippery PM_DefinitionWithoutCondition PM_DefinitionBadCondition _ doc85 "6.4" "6.4. Defining new adjectives" -PM_MultiwordGrading PM_GradingWrongKOV PM_GradingUnless PM_GradingUnknownProperty PM_GradingNonLiteral PM_GradingMisphrased PM_GradingCalled PM_ComparativeMisapplied _ doc88 "6.7" "6.7. Comparatives" -PM_OutOfPlay _ doc91 "6.10" "6.10. Existence and there" -ph_roomdirof ph_doordirof ph_roomordoor ph_bestroute ph_bestroutethrough ph_bestroutelength ph_bestroutethroughlength _ doc95 "6.14" "6.14. Adjacent rooms and routes through the map" -PM_ComplexDeterminer _ doc96 "6.15" "6.15. All, each and every" -PM_NonActionIn PM_APUnknown PM_APWithNoParticiple kind_actionname ACTIONS _ doc98 "7.1" "7.1. Actions" -rules_instead _ doc99 "7.2" "7.2. Instead rules" -rules_before ph_stopaction ph_continueaction _ doc100 "7.3" "7.3. Before rules" -PM_ActionTooSpecific PM_ActionNotSpecific PM_UnknownTryAction2 PM_UnknownTryAction1 ph_try ph_trysilently _ doc101 "7.4" "7.4. Try and try silently" -rules_after _ doc102 "7.5" "7.5. After rules" -PM_APWithImmiscible PM_APWithDisjunction _ doc105 "7.8" "7.8. Rules applying to more than one action" -var_noun _ doc107 "7.10" "7.10. The noun and the second noun" -PM_APWithBadWhen PM_NonActionInPresenceOf _ doc109 "7.12" "7.12. In the presence of, and when" -PM_GoingWithoutObject PM_GoingWrongKind _ doc111 "7.14" "7.14. Going by, going through, going with" -KACTIONS PM_NamedAPWithActor _ doc112 "7.15" "7.15. Kinds of action" -var_prompt _ doc117 "8.2" "8.2. Changing the command prompt" -var_sl phs_surroundings _ doc118 "8.3" "8.3. Changing the status line" -ph_changeexit ph_changenoexit _ doc120 "8.5" "8.5. Change of properties with values" -ph_move _ doc122 "8.7" "8.7. Moving things" -ph_movebackdrop ph_updatebackdrop _ doc123 "8.8" "8.8. Moving backdrops" -ph_remove _ doc125 "8.10" "8.10. Removing things from play" -PM_RedefinedNow PM_CantChangeKind PM_CantForceCalling PM_CantForceGeneralised PM_CantForceExistence PM_CantForceRelation PM_BadNow3 PM_BadNow2 PM_BadNow1 ph_now _ doc126 "8.11" "8.11. Now..." -ph_increase ph_decrease ph_increment ph_decrement _ doc127 "8.12" "8.12. Increasing and decreasing" -PM_CalledWithDash PM_CalledThe _ doc130 "8.15" "8.15. Calling names" -ph_holder ph_firstheld ph_nextheld _ doc132 "8.17" "8.17. Looking at containment by hand" -ph_randombetween ph_randomchance ph_seed _ doc133 "8.18" "8.18. Randomness" -PM_RandomImpossible ph_randomdesc _ doc134 "8.19" "8.19. Random choices of things" -rules_wpb ROOMPLAYBEGINS _ doc135 "9.1" "9.1. When play begins" -var_score _ doc136 "9.2" "9.2. Awarding points" -rules_wpe ph_end ph_endfinally ph_endsaying ph_endfinallysaying ph_ended ph_notended ph_finallyended ph_notfinallyended ph_resume _ doc138 "9.4" "9.4. When play ends" -PM_NumberOfTurns rules_et _ doc139 "9.5" "9.5. Every turn" -var_time kind_time _ doc140 "9.6" "9.6. The time of day" -phs_timewords _ doc141 "9.7" "9.7. Telling the time" -ph_durationmins ph_durationhours _ doc142 "9.8" "9.8. Approximate times, lengths of time" -ph_shiftbefore ph_shiftafter ph_timebefore ph_timeafter _ doc143 "9.9" "9.9. Comparing and shifting times" -ph_minspart ph_hourspart _ doc144 "9.10" "9.10. Calculating times" -TIMEDEVENTS PM_UnusedTimedEvent PM_AtWithoutTime ph_timefromnow ph_turnsfromnow ph_attime _ doc145 "9.11" "9.11. Future events" -PM_PTAPTooComplex _ doc146 "9.12" "9.12. Actions as conditions" -PM_PastTableEntries PM_NonPresentTense PM_PastActionCalled PM_PastCallings PM_PastTableLookup PM_PTAPMakesCallings PM_PastSubordinate _ doc147 "9.13" "9.13. The past and perfect tenses" -kind_scene SCENESINTRO _ doc150 "10.1" "10.1. Introduction to scenes" -PM_ScenesBadCondition PM_ScenesOversetEnd PM_ScenesUnknownEnd PM_ScenesOnly PM_ScenesDisallowCalled PM_ScenesNotPlay _ doc151 "10.2" "10.2. Creating a scene" -ph_scenetimesincebegan ph_scenetimesinceended ph_scenetimewhenbegan ph_scenetimewhenended _ doc152 "10.3" "10.3. Using the Scene index" -ph_hashappened ph_hasnothappened ph_hasended ph_hasnotended _ doc153 "10.4" "10.4. During scenes" -LINKINGSCENES _ doc154 "10.5" "10.5. Linking scenes together" -PHRASES ph_nothing _ doc159 "11.1" "11.1. What are phrases?" -PM_BareTo _ doc160 "11.2" "11.2. The phrasebook" -PM_SaySlashed PM_AdjacentTokens PM_PhraseTooLong PM_TokenMisunderstood PM_BadTypeIndication PM_TokenWithNestedBrackets PM_TokenWithEmptyBrackets PM_TokenWithoutCloseBracket PM_TokenWithoutOpenBracket _ doc161 "11.3" "11.3. Pattern matching" -ph_showme _ doc162 "11.4" "11.4. The showme phrase" -PM_TruthStateToDecide kind_truthstate ph_indarkness ph_consents ph_whether _ doc163 "11.5" "11.5. Conditions and questions" -PM_IfOutsidePhrase ph_if ph_unless _ doc164 "11.6" "11.6. If" -PM_EmptyIndentedBlock PM_RunOnsInTabbedRoutine PM_MisalignedIndentation PM_NotInOldSyntax PM_BothBlockSyntaxes PM_CantUseOutsideStructure PM_WrongEnd PM_EndWithoutBegin PM_BlockNestingTooDeep PM_BeginWithoutEnd _ doc165 "11.7" "11.7. Begin and end" -PM_OtherwiseInNonIf PM_OtherwiseWithoutIf PM_CaseValueMismatch PM_CaseValueNonConstant PM_OtherwiseIfAfterOtherwise PM_DoubleOtherwise PM_MisarrangedOtherwise PM_MisalignedCase PM_MisalignedOtherwise PM_NonCaseInIf ph_otherwise ph_switch _ doc166 "11.8" "11.8. Otherwise" -ph_while _ doc167 "11.9" "11.9. While" -PM_CalledInRepeat ph_repeat _ doc168 "11.10" "11.10. Repeat" -PM_BadRepeatDomain ph_runthrough _ doc169 "11.11" "11.11. Repeat running through" -PM_CantUseOutsideLoop ph_next ph_break _ doc170 "11.12" "11.12. Next and break" -ph_stop _ doc171 "11.13" "11.13. Stop" -PM_SayWithPhraseOptions PM_NotTheOnlyPhraseOption PM_NotAPhraseOption PM_PhraseOptionsExclusive PM_TooManyPhraseOptions ph_listcontents _ doc172 "11.14" "11.14. Phrase options" -ph_let ph_letdefault _ doc173 "11.15" "11.15. Let and temporary variables" -ph_yes ph_no _ doc174 "11.16" "11.16. New conditions, new adjectives" -PM_RedundantReturnKOV PM_UnknownValueToDecide PM_ReturnWrongKind ph_decideon _ doc175 "11.17" "11.17. Phrases to decide other things" -ph_enumfirst ph_enumlast ph_enumafter ph_enumbefore _ doc176 "11.18" "11.18. The value after and the value before" -ARSUMMARY _ doc178 "12.2" "12.2. How actions are processed" -var_person_asked _ doc179 "12.3" "12.3. Giving instructions to other people" -rules_per _ doc180 "12.4" "12.4. Persuasion" -rules_fail var_reason _ doc181 "12.5" "12.5. Unsuccessful attempts" -PM_ActionMisapplied PM_ActionClauseUnknown PM_ActionBothValues PM_ActionAlreadyExists PM_GrammarMismatchesAction PM_MultiwordPastParticiple PM_MatchedAsTooLong NEWACTIONS ph_requirestouch ph_requirestouch2 ph_requirescarried ph_requirescarried2 ph_requireslight _ doc183 "12.7" "12.7. New actions" -PM_BadMatchingSyntax PM_ActionVarValue PM_ActionVarUnknownKOV PM_ActionVarOverspecific PM_ActionVarAnd PM_ActionVarsPastTense _ doc186 "12.10" "12.10. Action variables" -PM_RuleWithComma PM_DuplicateRuleName _ doc188 "12.12" "12.12. Check rules for actions by other people" -OUTOFWORLD _ doc191 "12.15" "12.15. Out of world actions" -rules_ri _ doc192 "12.16" "12.16. Reaching inside and reaching outside rules" -var_person_reaching _ doc194 "12.18" "12.18. Changing reachability" -visibility _ doc195 "12.19" "12.19. Changing visibility" -kind_storedaction ph_currentaction ph_actionpart ph_nounpart ph_secondpart ph_actorpart ph_involves ph_actionof _ doc196 "12.20" "12.20. Stored actions" -PM_KindRelatedToValue PM_EveryWrongSide PM_BadRelation PM_RelationWithEitherOrProperty PM_RelationWithBadProperty PM_PropForBadKOV VERBS _ doc198 "13.1" "13.1. Sentence verbs" -RELATIONS _ doc200 "13.3" "13.3. What are relations?" -PM_BadKOVForRelationProperty PM_RelatedKindsUnknown PM_OneToOneMiscalled PM_CantCallBoth PM_CantCallRight PM_CantCallLeft PM_BothOneAndMany PM_OneOrVariousWithWhen PM_FRFUnavailable PM_RelationExists _ doc202 "13.5" "13.5. Making new relations" -ph_showrelation _ doc204 "13.7" "13.7. Relations in groups" -PM_PrepositionLong PM_PrepositionConjugated PM_DuplicateVerbs1 PM_VerbMalformed PM_PresentPluralTwice PM_VerbRelationUnknown PM_VerbUnknownMeaning PM_VerbRelationVague _ doc206 "13.9" "13.9. Defining new assertion verbs" -ph_nextstep ph_numbersteps _ doc208 "13.11" "13.11. Indirect relations" -PM_BadRelationCondition PM_Unassertable2 _ doc209 "13.12" "13.12. Relations which express conditions" -ph_ifleft ph_ifright ph_rightlookup ph_leftlookup ph_leftlookuplist ph_rightlookuplist ph_leftdomain ph_rightdomain _ doc210 "13.13" "13.13. Relations involving values" -ph_letrelation _ doc212 "13.15" "13.15. Temporary relations" -phs_here phs_now _ doc214 "14.1" "14.1. Tense and narrative viewpoint" -kind_verb phs_adapt phs_adaptv phs_adaptt phs_adaptvt phs_negate phs_negatev phs_negatet phs_negatevt phs_infinitive phs_pastpart phs_prespart _ doc222 "14.9" "14.9. Verbs as values" -phs_response _ doc223 "14.10" "14.10. Responses" -PM_LiteralOverflow PM_ElementOverflow PM_ZMachineOverflow PM_EvenOverflow-G PM_CantEquateValues PM_InequalityFailed kind_real_number kind_number _ doc227 "15.2" "15.2. Numbers and real numbers" -ph_nearestwholenumber _ doc228 "15.3" "15.3. Real number conversions" -phs_realplaces phs_decimal phs_decimalplaces phs_scientific phs_scientificplaces _ doc229 "15.4" "15.4. Printing real numbers" -ph_plus ph_minus ph_times ph_divide ph_remainder ph_nearest ph_squareroot ph_realsquareroot ph_cuberoot _ doc230 "15.5" "15.5. Arithmetic" -ph_ceiling ph_floor ph_absolutevalue ph_reciprocal ph_power ph_exp ph_logarithmto ph_logarithm _ doc231 "15.6" "15.6. Powers and logarithms" -ph_degrees ph_sine ph_cosine ph_tangent ph_arcsine ph_arccosine ph_arctangent ph_hyperbolicsine ph_hyperboliccosine ph_hyperbolictangent ph_hyperbolicarcsine ph_hyperbolicarccosine ph_hyperbolicarctangent _ doc232 "15.7" "15.7. Trigonometry" -PM_NegationForbidden PM_NegationInternal PM_LPEnumeration PM_LPBuiltInKOV PM_LPNotKOV _ doc233 "15.8" "15.8. Units" -PM_DuplicateUnitSpec _ doc234 "15.9" "15.9. Multiple notations" -PM_LPTooLittleAccuracy PM_LPCantScaleTwice PM_LPCantScaleYet _ doc235 "15.10" "15.10. Scaling and equivalents" -PM_LPNotAllNamed PM_LPTooComplicated PM_LPTooManyElements PM_LPElementTooLarge PM_LPWithoutElement _ doc239 "15.14" "15.14. Notations including more than one number" -PM_BadLPNameOption PM_BadLPPartOption PM_LPMultipleOptional PM_LPFirstOptional _ doc240 "15.15" "15.15. The parts of a number specification" -PM_TotalTableColumn PM_TotalEitherOr ph_total _ doc242 "15.17" "15.17. Totals" -PM_EquationSymbolWrongKOV PM_EquationSymbolMissing PM_EquationInsoluble PM_EquationBadTarget PM_EquationBadArithmetic PM_EquationDimensionPower PM_EquationIncomparable PM_EquationEquatesMultiply PM_EquationEquatesBadly PM_EquationDoesntEquate PM_EquationMispunctuated PM_EquationTooComplex PM_EquationOperatorUnrecognised PM_EquationLeadingZero PM_EquationTokenUnrecognised PM_EquationSymbolSpurious PM_EquationSymbolBadSub PM_EquationSymbolNonNumeric PM_EquationSymbolEqualsKOV PM_EquationSymbolNonValue PM_EquationSymbolVague PM_EquationSymbolMalformed PM_EquationSymbolMisdeclared PM_EquationMisnamed PM_EquationMisnumbered EQUATIONS ph_letequation _ doc243 "15.18" "15.18. Equations" -ARITHMETIC PM_BadArithmetic PM_MultiplyingNonKOVs PM_BadLPOffset PM_BadLPEquivalent PM_DimensionsInconsistent PM_UnitSequenceOverflow PM_NonDimensional PM_DimensionNotBaseKOV PM_DimensionRedundant _ doc245 "15.20" "15.20. Multiplication of units" -PM_TableRowFull PM_TableColumnBrackets PM_TableKindlessColumn PM_TableEntryGeneric PM_TableWithBlankNames PM_TableDefiningObject PM_TableOfExistingKind PM_TableOfBuiltInKind PM_TableOfQuantifiedKind PM_TableUndefined PM_TableWithoutRows PM_TableColumnAlready PM_TableColumnArticle PM_TableTooManyColumns PM_TableNameAmbiguous PM_TableNameDuplicate PM_TableMisnamed PM_TableIncompatibleEntry PM_TableUnknownEntry PM_TableDescriptionEntry PM_TableVariableEntry PM_TablePlayerEntry PM_TableColumnEmptyLists PM_TableCoincidesWithKind TABLES _ doc246 "16.1" "16.1. Laying out tables" -ph_numrows _ doc247 "16.2" "16.2. Looking up entries" -ph_showmetable phs_currenttablerow phs_tablerow phs_tablecolumn _ doc249 "16.4" "16.4. Changing entries" -PM_NoRowSelected ph_chooserow ph_chooserowwith ph_chooserandomrow _ doc250 "16.5" "16.5. Choosing rows" -ph_repeattable ph_repeattablereverse ph_repeattablecol ph_repeattablecolreverse _ doc251 "16.6" "16.6. Repeating through tables" -ph_thereis ph_thereisno _ doc252 "16.7" "16.7. Blank entries" -ph_chooseblankrow ph_numblank ph_numfilled ph_blankout ph_blankoutrow ph_blankoutcol ph_blankouttable _ doc255 "16.10" "16.10. Adding and removing rows" -ph_sortrandom ph_sortcolumn ph_sortcolumnreverse _ doc256 "16.11" "16.11. Sorting" -kind_tablename _ doc260 "16.15" "16.15. Varying which table to look at" -PM_TableDefiningTheImpossible PM_TableDefiningNothing _ doc261 "16.16" "16.16. Defining things with tables" -PM_TableNotContinuation _ doc263 "16.18" "16.18. Table continuations" -PM_TableAmendmentMismatch PM_TableAmendmentMisfit _ doc264 "16.19" "16.19. Table amendments" -UNDERSTANDING someone_token PM_TextTokenRestricted PM_OverComplexToken PM_BizarreToken PM_UnknownToken PM_UnparsableKind PM_UseThingNotObject PM_UseTextNotTopic PM_ObsoleteHeldTokens PM_UnderstandAsCompoundText PM_UnderstandCommaCommand PM_UnderstandEmptyText PM_LiteralPunctuation PM_UnderstandVague PM_UnderstandAsBadValue PM_UnderstandAsActivity PM_TextlessMistake PM_UnderstandMismatch PM_NontextualUnderstand PM_NotOldCommand PM_NotNewCommand PM_UnderstandCommandWhen PM_OldVerbUsage _ doc265 "17.1" "17.1. Understand" -PM_GrammarIllFounded PM_TooManyGrammarLines PM_TooManyAliases PM_ThreeValuedLine _ doc266 "17.2" "17.2. New commands for old grammar" -TOKENS things_token _ doc268 "17.4" "17.4. Standard tokens of grammar" -text_token _ doc269 "17.5" "17.5. The text token" -var_understood _ doc273 "17.9" "17.9. Understanding kinds of value" -PM_UnderstandPluralValue PM_UnderstandAsQualified _ doc275 "17.11" "17.11. Understanding values" -PM_SlashedCommand PM_OverAmbitiousSlash _ doc276 "17.12" "17.12. This/that" -NEWTOKENS PM_TwoValuedToken PM_MixedOutcome _ doc277 "17.13" "17.13. New tokens" -PM_UnknownUnpermittedProperty PM_BadReferringProperty PM_BadUnderstandPropertyAs PM_BadUnderstandProperty PM_UnknownUnderstandProperty _ doc279 "17.15" "17.15. Understanding things by their properties" -PM_GrammarValueRelation PM_GrammarBadRelation PM_GrammarObjectlessRelation _ doc280 "17.16" "17.16. Understanding things by their relations" -PM_BadWhen _ doc281 "17.17" "17.17. Context: understanding when" -ph_setpronouns _ doc282 "17.18" "17.18. Changing the meaning of pronouns" -rules_dtpm _ doc283 "17.19" "17.19. Does the player mean..." -ph_multipleobjectlist ph_altermultipleobjectlist _ doc284 "17.20" "17.20. Multiple action processing" -PM_BadActivityName kind_activity ACTIVITIES _ doc287 "18.1" "18.1. What are activities?" -PM_BadWhenWhile _ doc290 "18.4" "18.4. While clauses" -EXTACTIVITIES ph_carryout ph_carryoutwith ph_continueactivity _ doc291 "18.5" "18.5. New activities" -PM_ActivityVarValue PM_ActivityVarUnknownKOV PM_ActivityVarOverspecific PM_ActivityVarAnd PM_ActivityVariableNameless _ doc292 "18.6" "18.6. Activity variables" -ph_beginactivity ph_beginactivitywith ph_endactivity ph_endactivitywith ph_handlingactivity ph_handlingactivitywith ph_abandonactivity ph_abandonactivitywith _ doc293 "18.7" "18.7. Beginning and ending activities manually" -var_particular act_con _ doc295 "18.9" "18.9. Deciding the concealed possessions of something" -act_pn ph_omit _ doc296 "18.10" "18.10. Printing the name of something" -act_ppn _ doc297 "18.11" "18.11. Printing the plural name of something" -act_pan _ doc298 "18.12" "18.12. Printing a number of something" -act_lc ph_group ph_groupart ph_grouptext _ doc299 "18.13" "18.13. Listing contents of something" -act_gt _ doc300 "18.14" "18.14. Grouping together something" -act_resp _ doc301 "18.15" "18.15. Issuing the response text of something" -act_details _ doc302 "18.16" "18.16. Printing room description details of something" -act_idetails _ doc303 "18.17" "18.17. Printing inventory details of something" -act_toodark _ doc304 "18.18" "18.18. Printing a refusal to act in the dark" -act_nowdark _ doc305 "18.19" "18.19. Printing the announcement of darkness" -act_nowlight _ doc306 "18.20" "18.20. Printing the announcement of light" -act_darkname _ doc307 "18.21" "18.21. Printing the name of a dark room" -act_darkdesc _ doc308 "18.22" "18.22. Printing the description of a dark room" -act_csl _ doc309 "18.23" "18.23. Constructing the status line" -act_wpa _ doc310 "18.24" "18.24. Writing a paragraph about" -act_lni _ doc311 "18.25" "18.25. Listing nondescript items of something" -act_pld _ doc312 "18.26" "18.26. Printing the locale description of something" -act_cnlo _ doc313 "18.27" "18.27. Choosing notable locale objects for something" -act_plp _ doc314 "18.28" "18.28. Printing a locale paragraph about" -act_ds ph_placeinscope ph_placecontentsinscope _ doc315 "18.29" "18.29. Deciding the scope of something" -act_clarify _ doc316 "18.30" "18.30. Clarifying the parser's choice of something" -act_which _ doc317 "18.31" "18.31. Asking which do you mean" -act_smn _ doc318 "18.32" "18.32. Supplying a missing noun/second noun" -kind_snippet var_command act_reading ph_snippetmatches ph_snippetdoesnotmatch ph_snippetincludes ph_snippetdoesnotinclude ph_rejectcommand ph_replacesnippet ph_cutsnippet ph_changecommand _ doc319 "18.33" "18.33. Reading a command" -act_implicitly _ doc320 "18.34" "18.34. Implicitly taking something" -act_parsererror _ doc321 "18.35" "18.35. Printing a parser error" -act_all _ doc322 "18.36" "18.36. Deciding whether all includes" -act_banner phs_banner _ doc323 "18.37" "18.37. Printing the banner text" -act_obit _ doc324 "18.38" "18.38. Printing the player's obituary" -act_amuse _ doc325 "18.39" "18.39. Amusing a victorious player" -act_startvm _ doc326 "18.40" "18.40. Starting the virtual machine" -PM_RulebookWithTo PM_RulebookWithDefinition PM_RulebookWithAt RULEBOOKS kind_rulebook kind_rule _ doc327 "19.1" "19.1. On rules" -PM_RuleWithoutColon PM_RuleWithDefiniteArticle PM_BadRulePreamble PM_BadRulePreambleWhen _ doc329 "19.3" "19.3. New rules" -PM_PlaceWithMissingRule PM_NoSuchRuleExists PM_UnspecifiedRulebookPlacement PM_BadRulePlacementNegation PM_ImproperRulePlacement RLISTING _ doc330 "19.4" "19.4. Listing rules explicitly" -rules_proc _ doc331 "19.5" "19.5. Changing the behaviour of rules" -NEWRULEBOOKS ph_follow _ doc334 "19.8" "19.8. New rulebooks" -ph_followfor _ doc335 "19.9" "19.9. Basis of a rulebook" -PM_RulebookVariableVague PM_RulebookVariableBadKind PM_RulebookVariableTooSpecific PM_RulebookVariableAnd _ doc336 "19.10" "19.10. Rulebook variables" -PM_BadDefaultOutcome PM_DefaultOutcomeTwice ph_succeeds ph_fails ph_nodecision ph_succeeded ph_failed _ doc337 "19.11" "19.11. Success and failure" -PM_NonOutcomeProperty PM_DuplicateOutcome PM_DefaultOutcomeAlready PM_DefaultNamedOutcomeTwice PM_BadOutcomeClarification PM_WrongEndToPhrase PM_MisplacedRulebookOutcome ph_rulebookoutcome _ doc338 "19.12" "19.12. Named outcomes" -ph_succeedswith ph_producedby ph_producedbyfor _ doc339 "19.13" "19.13. Rulebooks producing values" -ph_abide ph_abidefor ph_abideanon _ doc340 "19.14" "19.14. Abide by" -rules_internal _ doc341 "19.15" "19.15. Two rulebooks used internally" -ph_charnum ph_numchars ph_wordnum ph_numwords ph_pwordnum ph_numpwords ph_upwordnum ph_numupwords ph_linenum ph_numlines ph_paranum ph_numparas _ doc345 "20.3" "20.3. Characters, words, punctuated words, unpunctuated words, lines, paragraphs" -ph_inlower ph_inupper ph_lowercase ph_uppercase ph_titlecase ph_sentencecase _ doc346 "20.4" "20.4. Upper and lower case letters" -ph_matches ph_exactlymatches ph_nummatches _ doc347 "20.5" "20.5. Matching and exactly matching" -ph_matchesre ph_exactlymatchesre ph_nummatchesre ph_matchtext ph_subexpressiontext _ doc348 "20.6" "20.6. Regular expression matching" -ph_subform _ doc349 "20.7" "20.7. Making new text with text substitutions" -ph_replacechar ph_replaceword ph_replacepword ph_replaceupword ph_replaceline ph_replacepara ph_replace ph_replacewordin ph_replacepwordin ph_replacere _ doc350 "20.8" "20.8. Replacements" -kind_listof _ doc352 "21.1" "21.1. Lists and entries" -PM_IncompatibleConstantListEntry PM_NonconstantConstantListEntry PM_BadConstantListEntry PM_CantLetEmptyList _ doc353 "21.2" "21.2. Constant lists" -phs_listbraced phs_listdef phs_listindef _ doc354 "21.3" "21.3. Saying lists of values" -ph_islistedin ph_isnotlistedin ph_repeatlist _ doc355 "21.4" "21.4. Testing and iterating over lists" -ph_addtolist ph_addlisttolist ph_addatentry ph_addlistatentry ph_remfromlist ph_remlistfromlist ph_rementry ph_rementries _ doc356 "21.5" "21.5. Building lists" -ph_listofdesc _ doc357 "21.6" "21.6. Lists of objects" -ph_reverselist ph_sortlist ph_sortlistreverse ph_sortlistrandom ph_sortlistproperty ph_sortlistpropertyreverse ph_rotatelist ph_rotatelistback _ doc359 "21.8" "21.8. Sorting, reversing and rotating lists" -ph_numberentries _ doc360 "21.9" "21.9. Accessing entries in a list" -ph_changelength ph_truncate ph_truncatefirst ph_truncatelast ph_extend _ doc361 "21.10" "21.10. Lengthening or shortening a list" -kind_description ph_valuematch _ doc364 "22.2" "22.2. Descriptions as values" -ph_applied0 ph_applied1 ph_applied2 ph_applied3 ph_apply0 ph_apply1 ph_apply2 ph_apply3 _ doc365 "22.3" "22.3. Phrases as values" -ph_appliedlist ph_filter ph_reduction _ doc367 "22.5" "22.5. Map, filter and reduce" -PM_UnknownVirtualMachine _ doc375 "23.3" "23.3. Virtual machines and story file formats" -FIGURES kind_figurename _ doc376 "23.4" "23.4. Gathering the figures" -PM_PictureNotTextual PM_PictureDuplicate _ doc377 "23.5" "23.5. Declaring and previewing the figures" -ph_displayfigure _ doc378 "23.6" "23.6. Displaying the figures" -SOUNDS kind_soundname _ doc379 "23.7" "23.7. Recorded sounds" -PM_SoundNotTextual PM_SoundDuplicate ph_playsf _ doc380 "23.8" "23.8. Declaring and playing back sounds" -ph_figureid ph_soundid _ doc382 "23.10" "23.10. Some technicalities about figures and sounds" -EFILES _ doc383 "23.11" "23.11. Files" -PM_FilenameUnsafe PM_FilenameNotTextual PM_FilenameDuplicate PM_BadFileOwner PM_BadFileIFID kind_externalfile _ doc384 "23.12" "23.12. Declaring files" -ph_writetable ph_readtable ph_fileexists _ doc385 "23.13" "23.13. Writing and reading tables to external files" -ph_writetext ph_appendtext ph_saytext _ doc386 "23.14" "23.14. Writing, reading and appending text to files" -ph_fileready ph_markfileready ph_markfilenotready _ doc387 "23.15" "23.15. Exchanging files with other programs" -PM_BadEpisode _ doc397 "25.2" "25.2. Bibliographic data" -LCARDS _ doc399 "25.4" "25.4. The Library Card" -IFIDS _ doc400 "25.5" "25.5. The Treaty of Babel and the IFID" -release_files PM_NoSuchPublicRelease _ doc401 "25.6" "25.6. The Release button and the Materials folder" -PM_ReleaseAlong _ doc402 "25.7" "25.7. The Joy of Feelies" -release_cover _ doc403 "25.8" "25.8. Cover art" -release_postcard release_booklet _ doc404 "25.9" "25.9. An introductory booklet and postcard" -release_website _ doc405 "25.10" "25.10. A website" -release_interpreter _ doc406 "25.11" "25.11. A playable web page" -PM_RoomInIgnoredSource _ doc410 "25.15" "25.15. Republishing existing works of IF" -release_solution _ doc411 "25.16" "25.16. Walkthrough solutions" -release_card release_source _ doc412 "25.17" "25.17. Releasing the source text" -PM_MapPlacementDirection PM_MapPlacement PM_MapDirectionClue PM_MapHintUnknown PM_MapSettingTypeFailed PM_MapSettingTooLong PM_MapSettingUnknown PM_MapSettingOfUnknown PM_MapBadRubric PM_MapUnknownOffsetBase PM_MapUnknownOffset PM_MapUnknownColour PM_MapNonLateral PM_MapToNonRoom PM_MapFromNonRoom MAPHINTS _ doc413 "25.18" "25.18. Improving the index map" -EPSMAP _ doc414 "25.19" "25.19. Producing an EPS format map" -EXTENSIONS _ doc428 "27.1" "27.1. The status of extensions" -SRULES _ doc429 "27.2" "27.2. The Standard Rules" -PM_ExtNoEndsHere PM_ExtNoBeginsHere PM_ExtMultipleEndsHere PM_ExtBeginsAfterEndsHere PM_ExtMultipleBeginsHere _ doc432 "27.5" "27.5. A simple example extension" -PM_ExtVersionTooLow phs_extcredits phs_compextcredits _ doc433 "27.6" "27.6. Version numbering" -PM_UnequalHeadingInPlaceOf PM_HeadingInPlaceOfUnknown PM_HeadingInPlaceOfUnincluded _ doc436 "27.9" "27.9. Extensions can interact with other extensions" -PM_ImplicationValueProperty PM_ImplicationCertain _ doc440 "27.13" "27.13. Implications" -PM_BadInlineTag PM_BadInlineExpansion PM_InlineRule PM_InlineTooLong PM_UnendingI6 _ doc442 "27.15" "27.15. Defining phrases in Inform 6" -PM_BadObjectTranslation _ doc448 "27.21" "27.21. Inform 6 objects and classes" -PM_QuantityTranslatedAlready PM_NonQuantityTranslated PM_NonPropertyTranslated PM_TranslatedToNonIdentifier PM_TranslatedUnknownCategory PM_TranslatedTwice PM_TranslatesActionAlready PM_TranslatesNonAction _ doc449 "27.22" "27.22. Inform 6 variables, properties, actions, and attributes" -PM_GrammarTranslatedAlready _ doc450 "27.23" "27.23. Inform 6 Understand tokens" -PM_UnicodeOutOfRange PM_UnicodeNonLiteral PM_UnicodeAlready _ doc452 "27.25" "27.25. Naming Unicode characters" -PM_IncludeInsteadOf PM_WhenDefiningUnknown PM_BeforeTheLibrary PM_BadI6Inclusion _ doc453 "27.26" "27.26. Overriding definitions in kits" -PM_LabelNamespaceTooLong _ doc456 "27.29" "27.29. Invocation labels, counters and storage" +PM_CantAssertQuantifier PM_CantAssertNonKind PM_CantAssertNegatedRelations PM_CantAssertNegatedEverywhere PM_CantAssertAdjective PM_TwoLikelihoods PM_NegatedVerb1 PM_NoSuchVerbComma PM_NoSuchVerb _ doc8 "2.1" "2.1. Creating the world" +PM_EnigmaticThey PM_EnigmaticPronoun PM_WordTooLong PM_TooMuchQuotedText PM_UnendingComment PM_UnendingQuote _ doc10 "2.3" "2.3. Punctuation" +PM_BadTitleSentence PM_HeadingStopsBeforeEndOfLine PM_HeadingOverLine HEADINGS _ doc12 "2.5" "2.5. Headings" +PM_UnknownInternalTest PM_TestDoubleWith PM_TestCommandTooLong PM_TestContainsUndo PM_TestBadRequirements PM_TestDuplicate PM_TestMultiWord _ doc15 "2.8" "2.8. The TEST command" +PM_BogusExtension _ doc17 "2.10" "2.10. Installing extensions" +PM_ExtMisidentifiedEnds PM_ExtInadequateVM PM_ExtMiswordedBeginsHere PM_ExtVersionMalformed PM_IncludeExtQuoted _ doc18 "2.11" "2.11. Including extensions" +OPTIONS PM_UnknownUseOption PM_UONotNumerical _ doc19 "2.12" "2.12. Use options" +OPTIONSFILE _ doc20 "2.13" "2.13. Administering classroom use" +STORYFILES PM_BadICLIdentifier _ doc21 "2.14" "2.14. Limits and the Settings panel" +PM_DescriptionsEquated PM_SameKindEquated MAP kind_room _ doc25 "3.2" "3.2. Rooms and the map" +PM_RegionRelation PM_RegionInTwoRegions PM_ExistingRegion REGIONS kind_region _ doc27 "3.4" "3.4. Regions and the index map" +PM_KindsIncompatible PM_MiseEnAbyme PM_CantContainAndSupport PM_BothRoomAndSupporter KINDS _ doc28 "3.5" "3.5. Kinds" +PM_PropertyNotPermitted _ doc30 "3.7" "3.7. Properties depend on kind" +PM_EverywhereMisapplied PM_CantChangeEverywhere PM_EverywhereNonBackdrop kind_backdrop _ doc32 "3.9" "3.9. Backdrops" +PM_TextWithoutSubject PM_TwoAppearances _ doc34 "3.11" "3.11. Two descriptions of things" +PM_BadMapCell PM_RoomMissingDoor PM_DoorInThirdRoom PM_DoorToNonRoom PM_DoorOverconnected PM_DoorUnconnected PM_BothWaysDoor kind_door ph_frontside ph_backside ph_othersideof ph_directionofdoor _ doc35 "3.12" "3.12. Doors" +kind_device _ doc37 "3.14" "3.14. Devices and descriptions" +kind_vehicle _ doc39 "3.16" "3.16. Vehicles and pushable things" +kind_person _ doc40 "3.17" "3.17. Men, women and animals" +kind_player's _ doc44 "3.21" "3.21. The player's holdall" +PM_RoomOrDoorAsPart PM_PartOfRoom _ doc46 "3.23" "3.23. Parts of things" +ph_locationof _ doc48 "3.25" "3.25. The location of something" +PM_NamelessDirection PM_DirectionTooLong PM_ImproperlyMadeDirection PM_TooManyDirections kind_direction _ doc49 "3.26" "3.26. Directions" +NEWKINDS _ doc50 "4.1" "4.1. New kinds" +PM_PluralIsQuoted PM_PluralOfQuoted _ doc53 "4.4" "4.4. Plural assertions" +KINDSVALUE _ doc54 "4.5" "4.5. Kinds of value" +PM_ValueCantHaveVProperties PM_ValueCantHaveProperties _ doc55 "4.6" "4.6. Properties again" +PM_ThisIsEitherOr PM_MiscellaneousEOProblem PM_NonObjectCanBe PM_QualifiedCanBe PM_EitherOrAsValue _ doc56 "4.7" "4.7. New either/or properties" +PM_RedundantThatVaries PM_BadProvides PM_PropertyKindClashes PM_PropertyKindVague PM_PropertyKindUnknown PM_PropertyTooSpecific PM_BadVisibilityWhen PM_PropertyUninitialisable PM_PropertyNameForbidden PM_PropertyCalledPresence PM_PropertyCalledArticle PM_PropertyOfKind1 _ doc57 "4.8" "4.8. New value properties" +PM_EitherOnThree _ doc59 "4.10" "4.10. Conditions of things" +ph_defaultvalue _ doc60 "4.11" "4.11. Default values of kinds" +PM_EmptyKind VARIABLES var_location _ doc61 "4.12" "4.12. Values that vary" +PM_TooManyDuplicates _ doc63 "4.14" "4.14. Duplicates" +PM_ComplexEvery PM_AssemblyRegress PM_AssemblyLoop _ doc64 "4.15" "4.15. Assemblies and body parts" +PM_TSWithPunctuation _ doc67 "5.1" "5.1. Text with substitutions" +phs_bracket phs_closebracket phs_apostrophe phs_quotemark _ doc68 "5.2" "5.2. How Inform reads quoted text" +ph_say phs_a phs_A phs_the phs_The _ doc69 "5.3" "5.3. Text which names things" +phs_numwords phs_s _ doc70 "5.4" "5.4. Text with numbers" +phs_listof phs_alistof phs_Alistof phs_thelistof phs_Thelistof phs_islistof phs_isalistof phs_isthelistof phs_alistofconts _ doc71 "5.5" "5.5. Text with lists" +PM_SayEndIfWithoutSayIf PM_SayOtherwiseWithoutIf PM_SayIfNested phs_if phs_unless phs_otherwise phs_endif phs_endunless phs_elseif phs_elseunless _ doc72 "5.6" "5.6. Text with variations" +PM_ComplicatedSayStructure3 PM_ComplicatedSayStructure4 PM_ComplicatedSayStructure5 PM_ComplicatedSayStructure2 PM_ComplicatedSayStructure phs_oneof phs_or phs_purelyrandom phs_thenpurelyrandom phs_random phs_thenrandom phs_sticky phs_decreasing phs_order phs_cycling phs_stopping phs_firsttime _ doc73 "5.7" "5.7. Text with random alternatives" +phs_linebreak phs_nolinebreak phs_runparaon phs_parabreak phs_condparabreak ph_breakpending phs_clarifbreak phs_runparaonsls _ doc74 "5.8" "5.8. Line breaks and paragraph breaks" +phs_bold phs_italic phs_roman phs_fixedspacing phs_varspacing _ doc75 "5.9" "5.9. Text with type styles" +PM_MidTextUnicode PM_SayUnicode _ doc77 "5.11" "5.11. Unicode characters" +ph_boxed _ doc78 "5.12" "5.12. Displaying quotations" +DESCRIPTIONS ph_numberof _ doc80 "6.1" "6.1. What are descriptions?" +PM_ArticleAsAdjective PM_AdjDomainUnknown PM_AdjDomainSurreal PM_AdjDomainSlippery PM_DefinitionWithoutCondition PM_DefinitionBadCondition _ doc83 "6.4" "6.4. Defining new adjectives" +PM_MultiwordGrading PM_GradingWrongKOV PM_GradingUnless PM_GradingUnknownProperty PM_GradingNonLiteral PM_GradingMisphrased PM_GradingCalled PM_ComparativeMisapplied _ doc86 "6.7" "6.7. Comparatives" +PM_OutOfPlay _ doc89 "6.10" "6.10. Existence and there" +ph_roomdirof ph_doordirof ph_roomordoor ph_bestroute ph_bestroutethrough ph_bestroutelength ph_bestroutethroughlength _ doc93 "6.14" "6.14. Adjacent rooms and routes through the map" +PM_ComplexDeterminer _ doc94 "6.15" "6.15. All, each and every" +PM_NonActionIn PM_APUnknown PM_APWithNoParticiple kind_actionname ACTIONS _ doc96 "7.1" "7.1. Actions" +rules_instead _ doc97 "7.2" "7.2. Instead rules" +rules_before ph_stopaction ph_continueaction _ doc98 "7.3" "7.3. Before rules" +PM_ActionTooSpecific PM_ActionNotSpecific PM_UnknownTryAction2 PM_UnknownTryAction1 ph_try ph_trysilently _ doc99 "7.4" "7.4. Try and try silently" +rules_after _ doc100 "7.5" "7.5. After rules" +PM_APWithImmiscible PM_APWithDisjunction _ doc103 "7.8" "7.8. Rules applying to more than one action" +var_noun _ doc105 "7.10" "7.10. The noun and the second noun" +PM_APWithBadWhen PM_NonActionInPresenceOf _ doc107 "7.12" "7.12. In the presence of, and when" +PM_GoingWithoutObject PM_GoingWrongKind _ doc109 "7.14" "7.14. Going by, going through, going with" +KACTIONS PM_NamedAPWithActor _ doc110 "7.15" "7.15. Kinds of action" +var_prompt _ doc115 "8.2" "8.2. Changing the command prompt" +var_sl phs_surroundings _ doc116 "8.3" "8.3. Changing the status line" +ph_changeexit ph_changenoexit _ doc118 "8.5" "8.5. Change of properties with values" +ph_move _ doc120 "8.7" "8.7. Moving things" +ph_movebackdrop ph_updatebackdrop _ doc121 "8.8" "8.8. Moving backdrops" +ph_remove _ doc123 "8.10" "8.10. Removing things from play" +PM_RedefinedNow PM_CantChangeKind PM_CantForceCalling PM_CantForceGeneralised PM_CantForceExistence PM_CantForceRelation PM_BadNow3 PM_BadNow2 PM_BadNow1 ph_now _ doc124 "8.11" "8.11. Now..." +ph_increase ph_decrease ph_increment ph_decrement _ doc125 "8.12" "8.12. Increasing and decreasing" +PM_CalledWithDash PM_CalledThe _ doc128 "8.15" "8.15. Calling names" +ph_holder ph_firstheld ph_nextheld _ doc130 "8.17" "8.17. Looking at containment by hand" +ph_randombetween ph_randomchance ph_seed _ doc131 "8.18" "8.18. Randomness" +PM_RandomImpossible ph_randomdesc _ doc132 "8.19" "8.19. Random choices of things" +rules_wpb ROOMPLAYBEGINS _ doc133 "9.1" "9.1. When play begins" +var_score _ doc134 "9.2" "9.2. Awarding points" +rules_wpe ph_end ph_endfinally ph_endsaying ph_endfinallysaying ph_ended ph_notended ph_finallyended ph_notfinallyended ph_resume _ doc136 "9.4" "9.4. When play ends" +PM_NumberOfTurns rules_et _ doc137 "9.5" "9.5. Every turn" +var_time kind_time _ doc138 "9.6" "9.6. The time of day" +phs_timewords _ doc139 "9.7" "9.7. Telling the time" +ph_durationmins ph_durationhours _ doc140 "9.8" "9.8. Approximate times, lengths of time" +ph_shiftbefore ph_shiftafter ph_timebefore ph_timeafter _ doc141 "9.9" "9.9. Comparing and shifting times" +ph_minspart ph_hourspart _ doc142 "9.10" "9.10. Calculating times" +TIMEDEVENTS PM_UnusedTimedEvent PM_AtWithoutTime ph_timefromnow ph_turnsfromnow ph_attime _ doc143 "9.11" "9.11. Future events" +PM_PTAPTooComplex _ doc144 "9.12" "9.12. Actions as conditions" +PM_PastTableEntries PM_NonPresentTense PM_PastActionCalled PM_PastCallings PM_PastTableLookup PM_PTAPMakesCallings PM_PastSubordinate _ doc145 "9.13" "9.13. The past and perfect tenses" +kind_scene SCENESINTRO _ doc148 "10.1" "10.1. Introduction to scenes" +PM_ScenesBadCondition PM_ScenesOversetEnd PM_ScenesUnknownEnd PM_ScenesOnly PM_ScenesDisallowCalled PM_ScenesNotPlay _ doc149 "10.2" "10.2. Creating a scene" +ph_scenetimesincebegan ph_scenetimesinceended ph_scenetimewhenbegan ph_scenetimewhenended _ doc150 "10.3" "10.3. Using the Scene index" +ph_hashappened ph_hasnothappened ph_hasended ph_hasnotended _ doc151 "10.4" "10.4. During scenes" +LINKINGSCENES _ doc152 "10.5" "10.5. Linking scenes together" +PHRASES ph_nothing _ doc157 "11.1" "11.1. What are phrases?" +PM_BareTo _ doc158 "11.2" "11.2. The phrasebook" +PM_SaySlashed PM_AdjacentTokens PM_PhraseTooLong PM_TokenMisunderstood PM_BadTypeIndication PM_TokenWithNestedBrackets PM_TokenWithEmptyBrackets PM_TokenWithoutCloseBracket PM_TokenWithoutOpenBracket _ doc159 "11.3" "11.3. Pattern matching" +ph_showme _ doc160 "11.4" "11.4. The showme phrase" +PM_TruthStateToDecide kind_truthstate ph_indarkness ph_consents ph_whether _ doc161 "11.5" "11.5. Conditions and questions" +PM_IfOutsidePhrase ph_if ph_unless _ doc162 "11.6" "11.6. If" +PM_EmptyIndentedBlock PM_RunOnsInTabbedRoutine PM_MisalignedIndentation PM_NotInOldSyntax PM_BothBlockSyntaxes PM_CantUseOutsideStructure PM_WrongEnd PM_EndWithoutBegin PM_BlockNestingTooDeep PM_BeginWithoutEnd _ doc163 "11.7" "11.7. Begin and end" +PM_OtherwiseInNonIf PM_OtherwiseWithoutIf PM_CaseValueMismatch PM_CaseValueNonConstant PM_OtherwiseIfAfterOtherwise PM_DoubleOtherwise PM_MisarrangedOtherwise PM_MisalignedCase PM_MisalignedOtherwise PM_NonCaseInIf ph_otherwise ph_switch _ doc164 "11.8" "11.8. Otherwise" +ph_while _ doc165 "11.9" "11.9. While" +PM_CalledInRepeat ph_repeat _ doc166 "11.10" "11.10. Repeat" +PM_BadRepeatDomain ph_runthrough _ doc167 "11.11" "11.11. Repeat running through" +PM_CantUseOutsideLoop ph_next ph_break _ doc168 "11.12" "11.12. Next and break" +ph_stop _ doc169 "11.13" "11.13. Stop" +PM_SayWithPhraseOptions PM_NotTheOnlyPhraseOption PM_NotAPhraseOption PM_PhraseOptionsExclusive PM_TooManyPhraseOptions ph_listcontents _ doc170 "11.14" "11.14. Phrase options" +ph_let ph_letdefault _ doc171 "11.15" "11.15. Let and temporary variables" +ph_yes ph_no _ doc172 "11.16" "11.16. New conditions, new adjectives" +PM_RedundantReturnKOV PM_UnknownValueToDecide PM_ReturnWrongKind ph_decideon _ doc173 "11.17" "11.17. Phrases to decide other things" +ph_enumfirst ph_enumlast ph_enumafter ph_enumbefore _ doc174 "11.18" "11.18. The value after and the value before" +ARSUMMARY _ doc176 "12.2" "12.2. How actions are processed" +var_person_asked _ doc177 "12.3" "12.3. Giving instructions to other people" +rules_per _ doc178 "12.4" "12.4. Persuasion" +rules_fail var_reason _ doc179 "12.5" "12.5. Unsuccessful attempts" +PM_ActionMisapplied PM_ActionClauseUnknown PM_ActionBothValues PM_ActionAlreadyExists PM_GrammarMismatchesAction PM_MultiwordPastParticiple PM_MatchedAsTooLong NEWACTIONS ph_requirestouch ph_requirestouch2 ph_requirescarried ph_requirescarried2 ph_requireslight _ doc181 "12.7" "12.7. New actions" +PM_BadMatchingSyntax PM_ActionVarValue PM_ActionVarUnknownKOV PM_ActionVarOverspecific PM_ActionVarAnd PM_ActionVarsPastTense _ doc184 "12.10" "12.10. Action variables" +PM_RuleWithComma PM_DuplicateRuleName _ doc186 "12.12" "12.12. Check rules for actions by other people" +OUTOFWORLD _ doc189 "12.15" "12.15. Out of world actions" +rules_ri _ doc190 "12.16" "12.16. Reaching inside and reaching outside rules" +var_person_reaching _ doc192 "12.18" "12.18. Changing reachability" +visibility _ doc193 "12.19" "12.19. Changing visibility" +kind_storedaction ph_currentaction ph_actionpart ph_nounpart ph_secondpart ph_actorpart ph_involves ph_actionof _ doc194 "12.20" "12.20. Stored actions" +PM_KindRelatedToValue PM_EveryWrongSide PM_BadRelation PM_RelationWithEitherOrProperty PM_RelationWithBadProperty PM_PropForBadKOV VERBS _ doc196 "13.1" "13.1. Sentence verbs" +RELATIONS _ doc198 "13.3" "13.3. What are relations?" +PM_BadKOVForRelationProperty PM_RelatedKindsUnknown PM_OneToOneMiscalled PM_CantCallBoth PM_CantCallRight PM_CantCallLeft PM_BothOneAndMany PM_OneOrVariousWithWhen PM_FRFUnavailable PM_RelationExists _ doc200 "13.5" "13.5. Making new relations" +ph_showrelation _ doc202 "13.7" "13.7. Relations in groups" +PM_PrepositionLong PM_PrepositionConjugated PM_DuplicateVerbs1 PM_VerbMalformed PM_PresentPluralTwice PM_VerbRelationUnknown PM_VerbUnknownMeaning PM_VerbRelationVague _ doc204 "13.9" "13.9. Defining new assertion verbs" +ph_nextstep ph_numbersteps _ doc206 "13.11" "13.11. Indirect relations" +PM_BadRelationCondition PM_Unassertable2 _ doc207 "13.12" "13.12. Relations which express conditions" +ph_ifleft ph_ifright ph_rightlookup ph_leftlookup ph_leftlookuplist ph_rightlookuplist ph_leftdomain ph_rightdomain _ doc208 "13.13" "13.13. Relations involving values" +ph_letrelation _ doc210 "13.15" "13.15. Temporary relations" +phs_here phs_now _ doc212 "14.1" "14.1. Tense and narrative viewpoint" +kind_verb phs_adapt phs_adaptv phs_adaptt phs_adaptvt phs_negate phs_negatev phs_negatet phs_negatevt phs_infinitive phs_pastpart phs_prespart _ doc220 "14.9" "14.9. Verbs as values" +phs_response _ doc221 "14.10" "14.10. Responses" +PM_LiteralOverflow PM_ElementOverflow PM_ZMachineOverflow PM_EvenOverflow-G PM_CantEquateValues PM_InequalityFailed kind_real_number kind_number _ doc225 "15.2" "15.2. Numbers and real numbers" +ph_nearestwholenumber _ doc226 "15.3" "15.3. Real number conversions" +phs_realplaces phs_decimal phs_decimalplaces phs_scientific phs_scientificplaces _ doc227 "15.4" "15.4. Printing real numbers" +ph_plus ph_minus ph_times ph_divide ph_remainder ph_nearest ph_squareroot ph_realsquareroot ph_cuberoot _ doc228 "15.5" "15.5. Arithmetic" +ph_ceiling ph_floor ph_absolutevalue ph_reciprocal ph_power ph_exp ph_logarithmto ph_logarithm _ doc229 "15.6" "15.6. Powers and logarithms" +ph_degrees ph_sine ph_cosine ph_tangent ph_arcsine ph_arccosine ph_arctangent ph_hyperbolicsine ph_hyperboliccosine ph_hyperbolictangent ph_hyperbolicarcsine ph_hyperbolicarccosine ph_hyperbolicarctangent _ doc230 "15.7" "15.7. Trigonometry" +PM_NegationForbidden PM_NegationInternal PM_LPEnumeration PM_LPBuiltInKOV PM_LPNotKOV _ doc231 "15.8" "15.8. Units" +PM_DuplicateUnitSpec _ doc232 "15.9" "15.9. Multiple notations" +PM_LPTooLittleAccuracy PM_LPCantScaleTwice PM_LPCantScaleYet _ doc233 "15.10" "15.10. Scaling and equivalents" +PM_LPNotAllNamed PM_LPTooComplicated PM_LPTooManyElements PM_LPElementTooLarge PM_LPWithoutElement _ doc237 "15.14" "15.14. Notations including more than one number" +PM_BadLPNameOption PM_BadLPPartOption PM_LPMultipleOptional PM_LPFirstOptional _ doc238 "15.15" "15.15. The parts of a number specification" +PM_TotalTableColumn PM_TotalEitherOr ph_total _ doc240 "15.17" "15.17. Totals" +PM_EquationSymbolWrongKOV PM_EquationSymbolMissing PM_EquationInsoluble PM_EquationBadTarget PM_EquationBadArithmetic PM_EquationDimensionPower PM_EquationIncomparable PM_EquationEquatesMultiply PM_EquationEquatesBadly PM_EquationDoesntEquate PM_EquationMispunctuated PM_EquationTooComplex PM_EquationOperatorUnrecognised PM_EquationLeadingZero PM_EquationTokenUnrecognised PM_EquationSymbolSpurious PM_EquationSymbolBadSub PM_EquationSymbolNonNumeric PM_EquationSymbolEqualsKOV PM_EquationSymbolNonValue PM_EquationSymbolVague PM_EquationSymbolMalformed PM_EquationSymbolMisdeclared PM_EquationMisnamed PM_EquationMisnumbered EQUATIONS ph_letequation _ doc241 "15.18" "15.18. Equations" +ARITHMETIC PM_BadArithmetic PM_MultiplyingNonKOVs PM_BadLPOffset PM_BadLPEquivalent PM_DimensionsInconsistent PM_UnitSequenceOverflow PM_NonDimensional PM_DimensionNotBaseKOV PM_DimensionRedundant _ doc243 "15.20" "15.20. Multiplication of units" +PM_TableRowFull PM_TableColumnBrackets PM_TableKindlessColumn PM_TableEntryGeneric PM_TableWithBlankNames PM_TableDefiningObject PM_TableOfExistingKind PM_TableOfBuiltInKind PM_TableOfQuantifiedKind PM_TableUndefined PM_TableWithoutRows PM_TableColumnAlready PM_TableColumnArticle PM_TableTooManyColumns PM_TableNameAmbiguous PM_TableNameDuplicate PM_TableMisnamed PM_TableIncompatibleEntry PM_TableUnknownEntry PM_TableDescriptionEntry PM_TableVariableEntry PM_TablePlayerEntry PM_TableColumnEmptyLists PM_TableCoincidesWithKind TABLES _ doc244 "16.1" "16.1. Laying out tables" +ph_numrows _ doc245 "16.2" "16.2. Looking up entries" +ph_showmetable phs_currenttablerow phs_tablerow phs_tablecolumn _ doc247 "16.4" "16.4. Changing entries" +PM_NoRowSelected ph_chooserow ph_chooserowwith ph_chooserandomrow _ doc248 "16.5" "16.5. Choosing rows" +ph_repeattable ph_repeattablereverse ph_repeattablecol ph_repeattablecolreverse _ doc249 "16.6" "16.6. Repeating through tables" +ph_thereis ph_thereisno _ doc250 "16.7" "16.7. Blank entries" +ph_chooseblankrow ph_numblank ph_numfilled ph_blankout ph_blankoutrow ph_blankoutcol ph_blankouttable _ doc253 "16.10" "16.10. Adding and removing rows" +ph_sortrandom ph_sortcolumn ph_sortcolumnreverse _ doc254 "16.11" "16.11. Sorting" +kind_tablename _ doc258 "16.15" "16.15. Varying which table to look at" +PM_TableDefiningTheImpossible PM_TableDefiningNothing _ doc259 "16.16" "16.16. Defining things with tables" +PM_TableNotContinuation _ doc261 "16.18" "16.18. Table continuations" +PM_TableAmendmentMismatch PM_TableAmendmentMisfit _ doc262 "16.19" "16.19. Table amendments" +UNDERSTANDING someone_token PM_TextTokenRestricted PM_OverComplexToken PM_BizarreToken PM_UnknownToken PM_UnparsableKind PM_UseThingNotObject PM_UseTextNotTopic PM_ObsoleteHeldTokens PM_UnderstandAsCompoundText PM_UnderstandCommaCommand PM_UnderstandEmptyText PM_LiteralPunctuation PM_UnderstandVague PM_UnderstandAsBadValue PM_UnderstandAsActivity PM_TextlessMistake PM_UnderstandMismatch PM_NontextualUnderstand PM_NotOldCommand PM_NotNewCommand PM_UnderstandCommandWhen PM_OldVerbUsage _ doc263 "17.1" "17.1. Understand" +PM_GrammarIllFounded PM_TooManyGrammarLines PM_TooManyAliases PM_ThreeValuedLine _ doc264 "17.2" "17.2. New commands for old grammar" +TOKENS things_token _ doc266 "17.4" "17.4. Standard tokens of grammar" +text_token _ doc267 "17.5" "17.5. The text token" +var_understood _ doc271 "17.9" "17.9. Understanding kinds of value" +PM_UnderstandPluralValue PM_UnderstandAsQualified _ doc273 "17.11" "17.11. Understanding values" +PM_SlashedCommand PM_OverAmbitiousSlash _ doc274 "17.12" "17.12. This/that" +NEWTOKENS PM_TwoValuedToken PM_MixedOutcome _ doc275 "17.13" "17.13. New tokens" +PM_UnknownUnpermittedProperty PM_BadReferringProperty PM_BadUnderstandPropertyAs PM_BadUnderstandProperty PM_UnknownUnderstandProperty _ doc277 "17.15" "17.15. Understanding things by their properties" +PM_GrammarValueRelation PM_GrammarBadRelation PM_GrammarObjectlessRelation _ doc278 "17.16" "17.16. Understanding things by their relations" +PM_BadWhen _ doc279 "17.17" "17.17. Context: understanding when" +ph_setpronouns _ doc280 "17.18" "17.18. Changing the meaning of pronouns" +rules_dtpm _ doc281 "17.19" "17.19. Does the player mean..." +ph_multipleobjectlist ph_altermultipleobjectlist _ doc282 "17.20" "17.20. Multiple action processing" +PM_BadActivityName kind_activity ACTIVITIES _ doc285 "18.1" "18.1. What are activities?" +PM_BadWhenWhile _ doc288 "18.4" "18.4. While clauses" +EXTACTIVITIES ph_carryout ph_carryoutwith ph_continueactivity _ doc289 "18.5" "18.5. New activities" +PM_ActivityVarValue PM_ActivityVarUnknownKOV PM_ActivityVarOverspecific PM_ActivityVarAnd PM_ActivityVariableNameless _ doc290 "18.6" "18.6. Activity variables" +ph_beginactivity ph_beginactivitywith ph_endactivity ph_endactivitywith ph_handlingactivity ph_handlingactivitywith ph_abandonactivity ph_abandonactivitywith _ doc291 "18.7" "18.7. Beginning and ending activities manually" +var_particular act_con _ doc293 "18.9" "18.9. Deciding the concealed possessions of something" +act_pn ph_omit _ doc294 "18.10" "18.10. Printing the name of something" +act_ppn _ doc295 "18.11" "18.11. Printing the plural name of something" +act_pan _ doc296 "18.12" "18.12. Printing a number of something" +act_lc ph_group ph_groupart ph_grouptext _ doc297 "18.13" "18.13. Listing contents of something" +act_gt _ doc298 "18.14" "18.14. Grouping together something" +act_resp _ doc299 "18.15" "18.15. Issuing the response text of something" +act_details _ doc300 "18.16" "18.16. Printing room description details of something" +act_idetails _ doc301 "18.17" "18.17. Printing inventory details of something" +act_toodark _ doc302 "18.18" "18.18. Printing a refusal to act in the dark" +act_nowdark _ doc303 "18.19" "18.19. Printing the announcement of darkness" +act_nowlight _ doc304 "18.20" "18.20. Printing the announcement of light" +act_darkname _ doc305 "18.21" "18.21. Printing the name of a dark room" +act_darkdesc _ doc306 "18.22" "18.22. Printing the description of a dark room" +act_csl _ doc307 "18.23" "18.23. Constructing the status line" +act_wpa _ doc308 "18.24" "18.24. Writing a paragraph about" +act_lni _ doc309 "18.25" "18.25. Listing nondescript items of something" +act_pld _ doc310 "18.26" "18.26. Printing the locale description of something" +act_cnlo _ doc311 "18.27" "18.27. Choosing notable locale objects for something" +act_plp _ doc312 "18.28" "18.28. Printing a locale paragraph about" +act_ds ph_placeinscope ph_placecontentsinscope _ doc313 "18.29" "18.29. Deciding the scope of something" +act_clarify _ doc314 "18.30" "18.30. Clarifying the parser's choice of something" +act_which _ doc315 "18.31" "18.31. Asking which do you mean" +act_smn _ doc316 "18.32" "18.32. Supplying a missing noun/second noun" +kind_snippet var_command act_reading ph_snippetmatches ph_snippetdoesnotmatch ph_snippetincludes ph_snippetdoesnotinclude ph_rejectcommand ph_replacesnippet ph_cutsnippet ph_changecommand _ doc317 "18.33" "18.33. Reading a command" +act_implicitly _ doc318 "18.34" "18.34. Implicitly taking something" +act_parsererror _ doc319 "18.35" "18.35. Printing a parser error" +act_all _ doc320 "18.36" "18.36. Deciding whether all includes" +act_banner phs_banner _ doc321 "18.37" "18.37. Printing the banner text" +act_obit _ doc322 "18.38" "18.38. Printing the player's obituary" +act_amuse _ doc323 "18.39" "18.39. Amusing a victorious player" +act_startvm _ doc324 "18.40" "18.40. Starting the virtual machine" +PM_RulebookWithTo PM_RulebookWithDefinition PM_RulebookWithAt RULEBOOKS kind_rulebook kind_rule _ doc325 "19.1" "19.1. On rules" +PM_RuleWithoutColon PM_RuleWithDefiniteArticle PM_BadRulePreamble PM_BadRulePreambleWhen _ doc327 "19.3" "19.3. New rules" +PM_PlaceWithMissingRule PM_NoSuchRuleExists PM_UnspecifiedRulebookPlacement PM_BadRulePlacementNegation PM_ImproperRulePlacement RLISTING _ doc328 "19.4" "19.4. Listing rules explicitly" +rules_proc _ doc329 "19.5" "19.5. Changing the behaviour of rules" +NEWRULEBOOKS ph_follow _ doc332 "19.8" "19.8. New rulebooks" +ph_followfor _ doc333 "19.9" "19.9. Basis of a rulebook" +PM_RulebookVariableVague PM_RulebookVariableBadKind PM_RulebookVariableTooSpecific PM_RulebookVariableAnd _ doc334 "19.10" "19.10. Rulebook variables" +PM_BadDefaultOutcome PM_DefaultOutcomeTwice ph_succeeds ph_fails ph_nodecision ph_succeeded ph_failed _ doc335 "19.11" "19.11. Success and failure" +PM_NonOutcomeProperty PM_DuplicateOutcome PM_DefaultOutcomeAlready PM_DefaultNamedOutcomeTwice PM_BadOutcomeClarification PM_WrongEndToPhrase PM_MisplacedRulebookOutcome ph_rulebookoutcome _ doc336 "19.12" "19.12. Named outcomes" +ph_succeedswith ph_producedby ph_producedbyfor _ doc337 "19.13" "19.13. Rulebooks producing values" +ph_abide ph_abidefor ph_abideanon _ doc338 "19.14" "19.14. Abide by" +rules_internal _ doc339 "19.15" "19.15. Two rulebooks used internally" +ph_charnum ph_numchars ph_wordnum ph_numwords ph_pwordnum ph_numpwords ph_upwordnum ph_numupwords ph_linenum ph_numlines ph_paranum ph_numparas _ doc343 "20.3" "20.3. Characters, words, punctuated words, unpunctuated words, lines, paragraphs" +ph_inlower ph_inupper ph_lowercase ph_uppercase ph_titlecase ph_sentencecase _ doc344 "20.4" "20.4. Upper and lower case letters" +ph_matches ph_exactlymatches ph_nummatches _ doc345 "20.5" "20.5. Matching and exactly matching" +ph_matchesre ph_exactlymatchesre ph_nummatchesre ph_matchtext ph_subexpressiontext _ doc346 "20.6" "20.6. Regular expression matching" +ph_subform _ doc347 "20.7" "20.7. Making new text with text substitutions" +ph_replacechar ph_replaceword ph_replacepword ph_replaceupword ph_replaceline ph_replacepara ph_replace ph_replacewordin ph_replacepwordin ph_replacere _ doc348 "20.8" "20.8. Replacements" +kind_listof _ doc350 "21.1" "21.1. Lists and entries" +PM_IncompatibleConstantListEntry PM_NonconstantConstantListEntry PM_BadConstantListEntry PM_CantLetEmptyList _ doc351 "21.2" "21.2. Constant lists" +phs_listbraced phs_listdef phs_listindef _ doc352 "21.3" "21.3. Saying lists of values" +ph_islistedin ph_isnotlistedin ph_repeatlist _ doc353 "21.4" "21.4. Testing and iterating over lists" +ph_addtolist ph_addlisttolist ph_addatentry ph_addlistatentry ph_remfromlist ph_remlistfromlist ph_rementry ph_rementries _ doc354 "21.5" "21.5. Building lists" +ph_listofdesc _ doc355 "21.6" "21.6. Lists of objects" +ph_reverselist ph_sortlist ph_sortlistreverse ph_sortlistrandom ph_sortlistproperty ph_sortlistpropertyreverse ph_rotatelist ph_rotatelistback _ doc357 "21.8" "21.8. Sorting, reversing and rotating lists" +ph_numberentries _ doc358 "21.9" "21.9. Accessing entries in a list" +ph_changelength ph_truncate ph_truncatefirst ph_truncatelast ph_extend _ doc359 "21.10" "21.10. Lengthening or shortening a list" +kind_description ph_valuematch _ doc362 "22.2" "22.2. Descriptions as values" +ph_applied0 ph_applied1 ph_applied2 ph_applied3 ph_apply0 ph_apply1 ph_apply2 ph_apply3 _ doc363 "22.3" "22.3. Phrases as values" +ph_appliedlist ph_filter ph_reduction _ doc365 "22.5" "22.5. Map, filter and reduce" +PM_UnknownVirtualMachine _ doc373 "23.3" "23.3. Virtual machines and story file formats" +FIGURES kind_figurename _ doc374 "23.4" "23.4. Gathering the figures" +PM_PictureNotTextual PM_PictureDuplicate _ doc375 "23.5" "23.5. Declaring and previewing the figures" +ph_displayfigure _ doc376 "23.6" "23.6. Displaying the figures" +SOUNDS kind_soundname _ doc377 "23.7" "23.7. Recorded sounds" +PM_SoundNotTextual PM_SoundDuplicate ph_playsf _ doc378 "23.8" "23.8. Declaring and playing back sounds" +ph_figureid ph_soundid _ doc380 "23.10" "23.10. Some technicalities about figures and sounds" +EFILES _ doc381 "23.11" "23.11. Files" +PM_FilenameUnsafe PM_FilenameNotTextual PM_FilenameDuplicate PM_BadFileOwner PM_BadFileIFID kind_externalfile _ doc382 "23.12" "23.12. Declaring files" +ph_writetable ph_readtable ph_fileexists _ doc383 "23.13" "23.13. Writing and reading tables to external files" +ph_writetext ph_appendtext ph_saytext _ doc384 "23.14" "23.14. Writing, reading and appending text to files" +ph_fileready ph_markfileready ph_markfilenotready _ doc385 "23.15" "23.15. Exchanging files with other programs" +PM_BadEpisode _ doc395 "25.2" "25.2. Bibliographic data" +LCARDS _ doc397 "25.4" "25.4. The Library Card" +IFIDS _ doc398 "25.5" "25.5. The Treaty of Babel and the IFID" +release_files PM_NoSuchPublicRelease _ doc399 "25.6" "25.6. The Release button and the Materials folder" +PM_ReleaseAlong _ doc400 "25.7" "25.7. The Joy of Feelies" +release_cover _ doc401 "25.8" "25.8. Cover art" +release_postcard release_booklet _ doc402 "25.9" "25.9. An introductory booklet and postcard" +release_website _ doc403 "25.10" "25.10. A website" +release_interpreter _ doc404 "25.11" "25.11. A playable web page" +PM_RoomInIgnoredSource _ doc408 "25.15" "25.15. Republishing existing works of IF" +release_solution _ doc409 "25.16" "25.16. Walkthrough solutions" +release_card release_source _ doc410 "25.17" "25.17. Releasing the source text" +PM_MapPlacementDirection PM_MapPlacement PM_MapDirectionClue PM_MapHintUnknown PM_MapSettingTypeFailed PM_MapSettingTooLong PM_MapSettingUnknown PM_MapSettingOfUnknown PM_MapBadRubric PM_MapUnknownOffsetBase PM_MapUnknownOffset PM_MapUnknownColour PM_MapNonLateral PM_MapToNonRoom PM_MapFromNonRoom MAPHINTS _ doc411 "25.18" "25.18. Improving the index map" +EPSMAP _ doc412 "25.19" "25.19. Producing an EPS format map" +EXTENSIONS _ doc426 "27.1" "27.1. The status of extensions" +SRULES _ doc427 "27.2" "27.2. The Standard Rules" +PM_ExtNoEndsHere PM_ExtNoBeginsHere PM_ExtMultipleEndsHere PM_ExtBeginsAfterEndsHere PM_ExtMultipleBeginsHere _ doc430 "27.5" "27.5. A simple example extension" +PM_ExtVersionTooLow phs_extcredits phs_compextcredits _ doc431 "27.6" "27.6. Version numbering" +PM_UnequalHeadingInPlaceOf PM_HeadingInPlaceOfUnknown PM_HeadingInPlaceOfUnincluded _ doc434 "27.9" "27.9. Extensions can interact with other extensions" +PM_ImplicationValueProperty PM_ImplicationCertain _ doc438 "27.13" "27.13. Implications" +PM_BadInlineTag PM_BadInlineExpansion PM_InlineRule PM_InlineTooLong PM_UnendingI6 _ doc440 "27.15" "27.15. Defining phrases in Inform 6" +PM_BadObjectTranslation _ doc446 "27.21" "27.21. Inform 6 objects and classes" +PM_QuantityTranslatedAlready PM_NonQuantityTranslated PM_NonPropertyTranslated PM_TranslatedToNonIdentifier PM_TranslatedUnknownCategory PM_TranslatedTwice PM_TranslatesActionAlready PM_TranslatesNonAction _ doc447 "27.22" "27.22. Inform 6 variables, properties, actions, and attributes" +PM_GrammarTranslatedAlready _ doc448 "27.23" "27.23. Inform 6 Understand tokens" +PM_UnicodeOutOfRange PM_UnicodeNonLiteral PM_UnicodeAlready _ doc450 "27.25" "27.25. Naming Unicode characters" +PM_IncludeInsteadOf PM_WhenDefiningUnknown PM_BeforeTheLibrary PM_BadI6Inclusion _ doc451 "27.26" "27.26. Overriding definitions in kits" +PM_LabelNamespaceTooLong _ doc454 "27.29" "27.29. Invocation labels, counters and storage" diff --git a/inform/StagingArea/Contents/Resources/Internal/Inter/BasicInformExtrasKit/kit_metadata.json b/inform/StagingArea/Contents/Resources/Internal/Inter/BasicInformExtrasKit/kit_metadata.json index 631ff5cb..adc01476 100644 --- a/inform/StagingArea/Contents/Resources/Internal/Inter/BasicInformExtrasKit/kit_metadata.json +++ b/inform/StagingArea/Contents/Resources/Internal/Inter/BasicInformExtrasKit/kit_metadata.json @@ -2,7 +2,7 @@ "is": { "type": "kit", "title": "BasicInformExtrasKit", - "version": "10.1.0-beta+6V20" + "version": "10.1.0" }, "kit-details": { "has-priority": 1 diff --git a/inform/StagingArea/Contents/Resources/Internal/Inter/BasicInformKit/kit_metadata.json b/inform/StagingArea/Contents/Resources/Internal/Inter/BasicInformKit/kit_metadata.json index b15ee7fd..4c04808b 100644 --- a/inform/StagingArea/Contents/Resources/Internal/Inter/BasicInformKit/kit_metadata.json +++ b/inform/StagingArea/Contents/Resources/Internal/Inter/BasicInformKit/kit_metadata.json @@ -2,7 +2,7 @@ "is": { "type": "kit", "title": "BasicInformKit", - "version": "10.1.0-beta+6V20" + "version": "10.1.0" }, "needs": [ { "unless": { diff --git a/inform/StagingArea/Contents/Resources/Internal/Inter/CommandParserKit/kit_metadata.json b/inform/StagingArea/Contents/Resources/Internal/Inter/CommandParserKit/kit_metadata.json index 025c0ae6..f2610f75 100644 --- a/inform/StagingArea/Contents/Resources/Internal/Inter/CommandParserKit/kit_metadata.json +++ b/inform/StagingArea/Contents/Resources/Internal/Inter/CommandParserKit/kit_metadata.json @@ -2,7 +2,7 @@ "is": { "type": "kit", "title": "CommandParserKit", - "version": "10.1.0-beta+6V20" + "version": "10.1.0" }, "needs": [ { "need": { diff --git a/inform/StagingArea/Contents/Resources/Internal/Inter/EnglishLanguageKit/kit_metadata.json b/inform/StagingArea/Contents/Resources/Internal/Inter/EnglishLanguageKit/kit_metadata.json index ef03b37b..fd6437f8 100644 --- a/inform/StagingArea/Contents/Resources/Internal/Inter/EnglishLanguageKit/kit_metadata.json +++ b/inform/StagingArea/Contents/Resources/Internal/Inter/EnglishLanguageKit/kit_metadata.json @@ -2,7 +2,7 @@ "is": { "type": "kit", "title": "EnglishLanguageKit", - "version": "10.1.0-beta+6V20" + "version": "10.1.0" }, "needs": [ { "need": { diff --git a/inform/StagingArea/Contents/Resources/Internal/Inter/WorldModelKit/kit_metadata.json b/inform/StagingArea/Contents/Resources/Internal/Inter/WorldModelKit/kit_metadata.json index 695298a7..3676221f 100644 --- a/inform/StagingArea/Contents/Resources/Internal/Inter/WorldModelKit/kit_metadata.json +++ b/inform/StagingArea/Contents/Resources/Internal/Inter/WorldModelKit/kit_metadata.json @@ -2,7 +2,7 @@ "is": { "type": "kit", "title": "WorldModelKit", - "version": "10.1.0-beta+6V20" + "version": "10.1.0" }, "needs": [ { "need": { diff --git a/inform/StagingArea/Contents/Resources/Internal/Languages/English/Syntax.preform b/inform/StagingArea/Contents/Resources/Internal/Languages/English/Syntax.preform index cc4508ef..22e20349 100644 --- a/inform/StagingArea/Contents/Resources/Internal/Languages/English/Syntax.preform +++ b/inform/StagingArea/Contents/Resources/Internal/Languages/English/Syntax.preform @@ -4316,10 +4316,10 @@ language EnglishThis phrase produces the first of the one or two rooms containing a door - first in the order given in the source text. Example: if
- -The red rock stair is east of the Orchard and above the Undertomb. + +
@@ -11,8 +11,8 @@ *=ph_backside=*The red rock stair is east of the Orchard and above the Undertomb.
This phrase produces the last of the one or two rooms containing a door - last in the order given in the source text. Example: if
- -The red rock stair is east of the Orchard and above the Undertomb. + +
@@ -21,8 +21,8 @@ *=ph_othersideof=*The red rock stair is east of the Orchard and above the Undertomb.
This phrase produces the room on the other side of the door, as seen from the given vantage point, which needs to be one of its sides. Example: if
- -The red rock stair is east of the Orchard and above the Undertomb. + +
@@ -31,8 +31,8 @@ *=ph_directionofdoor=*The red rock stair is east of the Orchard and above the Undertomb.
This phrase produces the direction in which the door leads, as seen from the given vantage point, which needs to be one of its sides. Example: if
- -The red rock stair is east of the Orchard and above the Undertomb. + +
@@ -41,8 +41,8 @@ *=ph_locationof=*The red rock stair is east of the Orchard and above the Undertomb.
This phrase produces the room which, perhaps indirectly, contains the object given. Example: if the player stands in Biblioll College and wears a waistcoat, inside which is a fob watch, then
- -@@ -51,32 +51,32 @@ *=ph_defaultvalue=*Produces the default value of the kind named. Examples:
- -The silver repeater is here. "You catch sight of a silver repeater watch, hands immobile at [default value of time]." + +
The silver repeater is here. "You catch sight of a silver repeater watch, hands immobile at [default value of time]."
produces the output:
- -You catch sight of a silver repeater watch, hands immobile at 9:00 am. + +
You catch sight of a silver repeater watch, hands immobile at 9:00 am.
because nine in the morning is the default time in Inform. If we have:
- -Brightness is a kind of value. The brightnesses are guttering, weak, radiant and blazing. + +
Brightness is a kind of value. The brightnesses are guttering, weak, radiant and blazing.
then "default value of brightness" is guttering, the first brightness created. When it comes to kinds of object, we sometimes have to be a little careful. For example,
- -is always going to be fine (it's always the first room created in the source text). But
- -@@ -85,8 +85,8 @@ *=phs_bracket=*This text substitution expands to a single open square bracket, avoiding the problem that a literal [ in text would look to Inform like the opening of a substitution. Example:
- -"He [bracket]Lord Astor[close bracket] would, wouldn't he?" + +
@@ -95,8 +95,8 @@ *=phs_closebracket=*This text substitution expands to a single close square bracket, avoiding the problem that a literal ] in text would look to Inform like the closing of a substitution. Example:
- -"He [bracket]Lord Astor[close bracket] would, wouldn't he?" + +
@@ -105,20 +105,20 @@ *=phs_apostrophe=*This text substitution expands to a single quotation mark, avoiding Inform's ordinary rule of converting literal single quotation marks to double at the edges of words. Example:
- -Instead of going outside, say "Lucy snaps, 'What's the matter? You don't trust my cookin[apostrophe] mister?'" + +
Instead of going outside, say "Lucy snaps, 'What's the matter? You don't trust my cookin[apostrophe] mister?'"
produces:
- -Lucy snaps, "What's the matter? You don't trust my cookin' mister?" + +
Lucy snaps, "What's the matter? You don't trust my cookin' mister?"
A more abbreviated form would be:
- -Instead of going outside, say "Lucy snaps, 'What's the matter? You don't trust my cookin['] mister?'" + +
@@ -127,8 +127,8 @@ *=phs_quotemark=*Instead of going outside, say "Lucy snaps, 'What's the matter? You don't trust my cookin['] mister?'"
This text substitution expands to a double quotation mark. Most of the time this is unnecessary because of Inform's rule of converting literal single quotation marks to double at the edges of words, so it's needed only if we w nt a double-quote in the middle of a word for some reason. Example:
- -"The compass reads 41o21'23[quotation mark]E." + +
@@ -137,8 +137,8 @@ *=ph_say=*This text substitution takes the value and produces a textual representation of it. Most kinds of value, and really all of the useful ones, are "sayable" - numbers, times, objects, rules, scenes, and so on. Example:
- -The description of the wrist watch is "The dial reads [time of day]." + +
@@ -147,8 +147,8 @@ *=phs_a=*The description of the wrist watch is "The dial reads [time of day]."
This text substitution produces the name of the object along with its indefinite article. Example:
- -Instead of examining something (called the whatever): + +
Instead of examining something (called the whatever):
@@ -159,8 +159,8 @@ *=phs_A=*
"You can only just make out [a whatever]."This text substitution produces the name of the object along with its indefinite article, capitalised. Example:
- -Instead of examining something (called the whatever): + +
Instead of examining something (called the whatever):
@@ -171,8 +171,8 @@ *=phs_the=*
"[A whatever] can be made out in the mist."This text substitution produces the name of the object along with its definite article. Example:
- -Instead of examining something (called the whatever): + +
Instead of examining something (called the whatever):
@@ -183,8 +183,8 @@ *=phs_The=*
"You can only just make out [the whatever]."This text substitution produces the name of the object along with its definite article, capitalised. Example:
- -Instead of examining something (called the whatever): + +
Instead of examining something (called the whatever):
@@ -195,8 +195,8 @@ *=phs_numwords=*
"[The whatever] may be a trick of the mist."This text substitution writes out the number in English text. Example:
- -"You've been wandering around for [turn count in words] turns now." + +
@@ -205,8 +205,8 @@ *=phs_s=*"You've been wandering around for [turn count in words] turns now."
This text substitution prints a letter "s" unless the last number printed was 1. Example:
- -"You've been wandering around for [turn count in words] turn[s] now." + +
@@ -215,14 +215,14 @@ *=phs_listof=*"You've been wandering around for [turn count in words] turn[s] now."
This text substitution produces a list, in sentence form, of everything matching the description. Example:
- -"Mr Darcy glares proudly at you. He is wearing [list of things worn by Darcy] and carrying [list of things carried by Darcy]." + +
"Mr Darcy glares proudly at you. He is wearing [list of things worn by Darcy] and carrying [list of things carried by Darcy]."
And, if this were from a dramatisation of the novel by Miss Fielding rather than Miss Austen, we might find:
- -Mr Darcy glares proudly at you. He is wearing a pair of Newcastle United boxer shorts and carrying a self-help book. + +
@@ -231,8 +231,8 @@ *=phs_alistof=*Mr Darcy glares proudly at you. He is wearing a pair of Newcastle United boxer shorts and carrying a self-help book.
This text substitution produces a list, in sentence form, of everything matching the description. Each item is prefaced by its indefinite article. Example:
- -a maritime bill of lading, some hemp rope and Falconer's Naval Dictionary + +
@@ -240,8 +240,8 @@ *=phs_Alistof=*a maritime bill of lading, some hemp rope and Falconer's Naval Dictionary
This text substitution produces a list, in sentence form, of everything matching the description. Each item is prefaced by its indefinite article, and the first is capitalised, so that it can be used at the beginning of a sentence. Example:
- -A maritime bill of lading, some hemp rope and Falconer's Naval Dictionary + +
@@ -249,8 +249,8 @@ *=phs_thelistof=*A maritime bill of lading, some hemp rope and Falconer's Naval Dictionary
This text substitution produces a list, in sentence form, of everything matching the description. Each item is prefaced by its definite article. Example:
- -the maritime bill of lading, the hemp rope and Falconer's Naval Dictionary + +
@@ -258,8 +258,8 @@ *=phs_Thelistof=*the maritime bill of lading, the hemp rope and Falconer's Naval Dictionary
This text substitution produces a list, in sentence form, of everything matching the description. Each item is prefaced by its definite article, and the first is capitalised, so that it can be used at the beginning of a sentence. Example:
- -The maritime bill of lading, the hemp rope and Falconer's Naval Dictionary + +
@@ -267,8 +267,8 @@ *=phs_islistof=*The maritime bill of lading, the hemp rope and Falconer's Naval Dictionary
This text substitution produces a list, in sentence form, of everything matching the description. The whole list starts with "is" (if there's one item or none) or "are" (more than one). Examples:
- -is marlin-spike
@@ -278,8 +278,8 @@ *=phs_isalistof=*
are maritime bill of lading, hemp rope and Falconer's Naval DictionaryThis text substitution produces a list, in sentence form, of everything matching the description. Each item is prefaced by its indefinite article, and the whole list starts with "is" (if there's one item or none) or "are" (more than one). Examples:
- -is a marlin-spike
@@ -289,8 +289,8 @@ *=phs_isthelistof=*
are a maritime bill of lading, some hemp rope and Falconer's Naval DictionaryThis text substitution produces a list, in sentence form, of everything matching the description. Each item is prefaced by its definite article, and the whole list starts with "is" (if there's one item or none) or "are" (more than one). Examples:
- -is the marlin-spike
@@ -304,14 +304,14 @@ *=phs_if=*
are the maritime bill of lading, the hemp rope and Falconer's Naval DictionaryThis text substitution produces no text. It's used only for a side-effect: it says that the text following should be said only if the condition is true. That continues until the end of the text, or until an "[end if]" substitution whichever comes first. If the "[otherwise]" and "[otherwise if]" substitutions are also present, they allow alternatives to be added in case the condition is false. Example:
- -The wine cask is a container. The printed name of the cask is "[if open]broached, empty cask[otherwise]sealed wine cask". + +
The wine cask is a container. The printed name of the cask is "[if open]broached, empty cask[otherwise]sealed wine cask".
we find that the cask is described as "a broached, empty cask" when open, and "a sealed wine cask" when closed. A longer example which begins and ends with fixed text, but has two alternatives in the middle:
- -The Customs Wharf is a room. "Amid the bustle of the quayside, [if the cask is open]many eyes stray to your broached cask. [otherwise]nobody takes much notice of a man heaving a cask about. [end if]Sleek gondolas jostle at the plank pier." + +
@@ -319,8 +319,8 @@ *=phs_unless=*The Customs Wharf is a room. "Amid the bustle of the quayside, [if the cask is open]many eyes stray to your broached cask. [otherwise]nobody takes much notice of a man heaving a cask about. [end if]Sleek gondolas jostle at the plank pier."
This text substitution produces no text. It's used only for a side-effect: it says that the text following should be said only if the condition is false. That continues until the end of the text, or until an "[end if]" substitution, which ver comes first. If the "[otherwise]" and "[otherwise if]" substitutions are also present, they allow alternatives to be added in case the condition is true. Example:
- -The Customs Hall is a room. "With infinite slowness, with ledgers and quill pens, the clerks ruin their eyesight.[unless the player is a woman] They barely even glance in your direction." + +
@@ -328,8 +328,8 @@ *=phs_otherwise=*The Customs Hall is a room. "With infinite slowness, with ledgers and quill pens, the clerks ruin their eyesight.[unless the player is a woman] They barely even glance in your direction."
This text substitution produces no text, and can be used only following an "[if ...]" or "[unless ...]" text substitution. It switches from text which appears if the condition is true, to text which appears if it is false. Example:
- -The wine cask is a container. The printed name of the cask is "[if open]broached, empty cask[otherwise]sealed wine cask". + +
@@ -345,8 +345,8 @@ *=phs_elseif=*The wine cask is a container. The printed name of the cask is "[if open]broached, empty cask[otherwise]sealed wine cask".
This text substitution produces no text, and can be used only following an "[if ...]" or "[unless ...]" text substitution. It gives an alternative text to use if the first condition didn't apply, but this one does. Example:
- -The wine cask is a container. The printed name of the cask is "[if open]broached, empty cask[otherwise if transparent]sealed cask half-full of sloshing wine[otherwise]sealed wine cask". + +
@@ -358,8 +358,8 @@ *=phs_oneof=*The wine cask is a container. The printed name of the cask is "[if open]broached, empty cask[otherwise if transparent]sealed cask half-full of sloshing wine[otherwise]sealed wine cask".
This text substitution produces no text. It's used only for a side-effect: it switches between a number of alternative texts, which follow it and are divided by "[or]" substitutions, according to a strategy given in closing substitution. Example:
- -"You flip the coin. [one of]Heads[or]Tails[purely at random]!" + +
@@ -368,8 +368,8 @@ *=phs_or=*"You flip the coin. [one of]Heads[or]Tails[purely at random]!"
This text substitution produces no text, and can be used only in a "[one of]..." construction. It divides alternative wordings. Example:
- -"You flip the coin. [one of]Heads[or]Tails[purely at random]!" + +
@@ -385,8 +385,8 @@ *=phs_random=*"You flip the coin. [one of]Heads[or]Tails[purely at random]!"
This text substitution produces no text, and can be used only to end a "[one of]..." construction. It indicates that the alternatives are chosen at random except that the same choice cannot come up twice running. This is useful to avoid the deadening effect of repeating the exact same message. Example:
- -"The light changes randomly again; now it's [one of]green[or]amber[or]red[at random]." + +
@@ -395,8 +395,8 @@ *=phs_thenrandom=*"The light changes randomly again; now it's [one of]green[or]amber[or]red[at random]."
This text substitution produces no text, and can be used only to end a "[one of]..." construction. It indicates that the alternatives are chosen in sequence until all have been seen, and then after that, at random except that the same choice cannot come up twice running. Example:
- -"Maybe the murderer is [one of]Colonel Mustard[or]Professor Plum[or]Cardinal Cerise[then at random]." + +
@@ -404,8 +404,8 @@ *=phs_sticky=*"Maybe the murderer is [one of]Colonel Mustard[or]Professor Plum[or]Cardinal Cerise[then at random]."
This text substitution produces no text, and can be used only to end a "[one of]..." construction. It indicates that a random choice is made the first time the text is printed, but that it sticks from there on. Example:
- -"The newspaper headline is: [one of]War Casualties[or]Terrorists[or]Banks[sticky random] [one of]Continue To Expand[or]Lose Out[sticky random]." + +
@@ -414,8 +414,8 @@ *=phs_decreasing=*"The newspaper headline is: [one of]War Casualties[or]Terrorists[or]Banks[sticky random] [one of]Continue To Expand[or]Lose Out[sticky random]."
This text substitution produces no text, and can be used only to end a "[one of]..." construction. It indicates that the alternatives are chosen at random, except that the first is most likely to be chosen, the second is next most likely, and so n down to the rarest at the end. Example:
- -"Zorro strides by, [one of]looking purposeful[or]grim-faced[or]deep in thought[or]suppressing a yawn[or]scratching his ribs[or]trying to conceal that he has cut himself shaving[as decreasingly likely outcomes]." + +
@@ -424,8 +424,8 @@ *=phs_order=*"Zorro strides by, [one of]looking purposeful[or]grim-faced[or]deep in thought[or]suppressing a yawn[or]scratching his ribs[or]trying to conceal that he has cut himself shaving[as decreasingly likely outcomes]."
This text substitution produces no text, and can be used only to end a "[one of]..." construction. A random order is chosen for the alternative passages of text, and they are used in that order as the text is printed again an again. When one random cycle finishes, a new one begins. The effect is somewhat like the "shuffle album" feature on an iPod. Example:
- -"You dip into the chapter on [one of]freshwater fish[or]hairless mammals[or]extinct birds[or]amphibians such as the black salamander[in random order]." + +
@@ -434,8 +434,8 @@ *=phs_cycling=*"You dip into the chapter on [one of]freshwater fish[or]hairless mammals[or]extinct birds[or]amphibians such as the black salamander[in random order]."
This text substitution produces no text, and can be used only to end a "[one of]..." construction. It indicates that the alternatives are used one at a time, in turn: after the last one is reached, we start again from t e first. Example:
- -"The pundits discuss [one of]the weather[or]world events[or]celebrity gossip[cycling]." + +
@@ -443,8 +443,8 @@ *=phs_stopping=*"The pundits discuss [one of]the weather[or]world events[or]celebrity gossip[cycling]."
This text substitution produces no text, and can be used only to end a "[one of]..." construction. It indicates that the alternatives are used one at a time, in turn: once the last one is reached, it's used forever after. Example:
- -"[one of]The phone rings[or]The phone rings a second time[or]The phone rings again[stopping]." + +
@@ -452,14 +452,14 @@ *=phs_firsttime=*"[one of]The phone rings[or]The phone rings a second time[or]The phone rings again[stopping]."
This pair of text substitutions causes whatever is between them to be printed only the first time the text is printed. Example:
- -"The screen door squeaks loudly as when you open it. [first time]Well, you'll get used to it eventually. [only]" + +
"The screen door squeaks loudly as when you open it. [first time]Well, you'll get used to it eventually. [only]"
This is exactly equivalent to
- -"The screen door squeaks loudly as when you open it. [one of]Well, you'll get used to it eventually. [or][stopping]"; + +
@@ -468,14 +468,14 @@ *=phs_linebreak=*"The screen door squeaks loudly as when you open it. [one of]Well, you'll get used to it eventually. [or][stopping]";
This text substitution produces a line break. Example:
- -"There is an endless sense of[line break]falling and[line break]falling." + +
"There is an endless sense of[line break]falling and[line break]falling."
Line breaks are not paragraph breaks, so the result is:
- -There is an endless sense of + +
There is an endless sense of
falling and
@@ -488,14 +488,14 @@ *=phs_nolinebreak=*This text substitution produces no text. It's used only for a side-effect: it prevents a line break where Inform might otherwise assume one. Example:
- -"The chorus sing [one of]Jerusalem[or]Rule, Britannia![no line break][at random]." + +
"The chorus sing [one of]Jerusalem[or]Rule, Britannia![no line break][at random]."
Here the "[no line break]" stops Inform from thinking that the exclamation mark means a sentence ending - it's part of the name of the song "Rule, Britannia!". So we get
- -The chorus sing Rule, Britannia!. + +
@@ -504,25 +504,25 @@ *=phs_runparaon=*This text substitution produces no text. It's used only for a side-effect: it prevents a paragraph break occurring after the present text is printed, in case Inform might be tempted to place one there. Example:
- -Before taking something, say "Very well. [run paragraph on]". + +
Before taking something, say "Very well. [run paragraph on]".
This allows the reply to, say, TAKE ENVELOPE to be
- -rather than
- -- -@@ -531,19 +531,19 @@ *=phs_parabreak=*This text substitution produces a paragraph break. Example:
- -"This is not right.[paragraph break]No, something is terribly wrong." + +
"This is not right.[paragraph break]No, something is terribly wrong."
Paragraph breaks have a little vertical spacing in them, unlike mere line breaks, so the result is:
- -- -No, something is terribly wrong. + +
@@ -559,14 +559,14 @@ *=phs_clarifbreak=*This text substitution produces a line break, and then also a paragraph break if the text immediately following is a room description brought about by having gone to to a different room and looking around, in which case a line break should be dded. In traditional IF, this is used when clarifying what Inform thinks the player intended by a given command. Example:
- -say "(first opening [the noun])[command clarification break]"; + +
say "(first opening [the noun])[command clarification break]";
might result in
- -(first opening the valise) + +
(first opening the valise)
@@ -580,8 +580,8 @@ *=phs_bold=*
You rummage through the valise for tickets, but find nothing.This text substitution produces no text. It's used only for a side-effect: to make the text following it appear in bold face. "[roman type]" should be used to switch back to normal. Example:
- -"Jane looked down. [bold type]Danger[roman type], the sign read." + +
@@ -589,8 +589,8 @@ *=phs_italic=*"Jane looked down. [bold type]Danger[roman type], the sign read."
This text substitution produces no text. It's used only for a side-effect: to make the text following it appear in italics. "[roman type]" should be used to switch back to normal. Example:
- -"This is [italic type]very suspicious[roman type], said Peter." + +
@@ -602,8 +602,8 @@ *=phs_fixedspacing=*"This is [italic type]very suspicious[roman type], said Peter."
This text substitution produces no text. It's used only for a side-effect: to make the text following it appear with fixed letter spacing. In variable letter spacing, a lower case "m" is much wider than an "l", which is natural to the ey since it has been printing practice since the Renaissance. Fixed letter spacing is more like typewriting, and it is best used to reproduce typewritten text or printed notices; it can also be convenient for making simple diagrams. Example:
- -"On the door is written: [fixed letter spacing]J45--O-O-O[variable letter spacing]." + +
@@ -615,8 +615,8 @@ *=ph_boxed=*"On the door is written: [fixed letter spacing]J45--O-O-O[variable letter spacing]."
This phrase displays the given text on screen in an overlaid box. For reasons to do with the way such quotations are plotted onto the screen, their text is treated literally: no substitutions in square brackets are obeyed. The quota ion will only ever appear once, regardless of the number of times the "display the boxed quotation ..." phrase is reached. Rather than being shown immediately - and thus, probably, scrolling away before it can be seen - the display is held back until the next command prompt is shown to the player. Example:
- -After looking in the Wabe, display the boxed quotation + +
- -After looking in the Wabe, display the boxed quotation
"And 'the wabe' is the grass-plot round
@@ -626,8 +626,8 @@Of course it is. It's called 'wabe,' + +
- -Of course it is. It's called 'wabe,'
you know, because it goes a long way
@@ -635,8 +635,8 @@@@ -645,8 +645,8 @@ *=ph_numberof=*This phrase counts the number of values matching the description, which may of course be 0. Example:
- -@@ -655,8 +655,8 @@ *=ph_roomdirof=*This phrase produces the room which the given map direction leads to, or the special value "nothing" if it leads nowhere. If it leads to a door, the result is the room through that door. Examples:
- -say "You look north into [the room north from the Garden]." + +
say "You look north into [the room north from the Garden]."
@@ -666,8 +666,8 @@ *=ph_doordirof=*
if the room north from the Garden is nothing, say "The grass leads nowhere."This phrase produces the door which the given map direction leads to, or the special value "nothing" if it leads nowhere or to a room. Examples:
- -let the barrier be the door north from the Garden; + +
let the barrier be the door north from the Garden;
@@ -681,14 +681,14 @@ *=ph_bestroute=*
if the barrier is a door, say "Well, [the barrier] is in the way.";This phrase produces a direction to take in order to get from A to B by the shortest number of movements between rooms, or produces "nothing" if there is no way through at all. Example:
- -The description of the brass compass is "The dial points quiveringly to [best route from the location to the Lodestone Room]." + +
The description of the brass compass is "The dial points quiveringly to [best route from the location to the Lodestone Room]."
Best routes are ordinarily forbidden to go through doors, but if the suffix "using doors" is added as an option then any open or openable and unlocked door may be used on the way; and if "using even locked doors" is given, then any door at all will do. Since magnetism is no respecter of property, that seems right here:
- -The description of the brass compass is "The dial points quiveringly to [best route from the location to the Lodestone Room, using even locked doors]." + +
@@ -696,8 +696,8 @@ *=ph_bestroutethrough=*The description of the brass compass is "The dial points quiveringly to [best route from the location to the Lodestone Room, using even locked doors]."
This phrase produces a direction to take in order to get from A to B by the shortest number of movements between rooms which match the given description, or produces "nothing" if there is no way through at all. Example:
- -best route from the Drawbridge to the Keep through visited rooms + +
@@ -706,8 +706,8 @@ *=ph_bestroutelength=*best route from the Drawbridge to the Keep through visited rooms
This phrase produces the number of map connections which must be followed in order to get from A to B by the shortest number of movements between rooms. If A and B are the same, the answer is 0; if there is no route at all, the answer is -1. Example:
- -The description of the proximity gadget is "You are now [number of moves from the location to the Sundial] moves from the Sundial."; + +
@@ -719,8 +719,8 @@ *=ph_stopaction=*The description of the proximity gadget is "You are now [number of moves from the location to the Sundial] moves from the Sundial.";
This phrase stops the current rule, stops the rulebook being worked through, and finally stops the action being processed. Example:
- -Before taking the key:
say "It seems to be soldered to the keyhole.";
@@ -732,8 +732,8 @@ *=ph_continueaction=*This phrase ends the current rule, but in a way which keeps its rulebook going, so that the action being processed will carry on rather than being stopped. Example:
- -Instead of taking the napkin: + +
Instead of taking the napkin:
say "(first unfolding its delicate origami swan)[command clarification break]";
@@ -746,14 +746,14 @@ *=ph_try=*This phrase makes the action, which has to be named literally, take effect now. Example:
- -Instead of entering the trapdoor, try going up. + +
It's as if the player had typed GO UP as a command. Note that the action has to be specific:
- -@@ -762,8 +762,8 @@ *=ph_trysilently=*This phrase makes the action, which has to be named literally, take effect now, under the "silent" convention which means that routine messages aren't printed. Example:
- -try silently taking the napkin; + +
@@ -772,8 +772,8 @@ *=phs_surroundings=*This text substitution produces a succinct description of where the player is, be this in darkness, in a lighted room or inside an opaque container such as a large packing case. Example:
- -now the left hand status line is "You: [the player's surroundings]"; + +
@@ -781,14 +781,14 @@ *=ph_changeexit=*now the left hand status line is "You: [the player's surroundings]";
This phrase alters the map so that the given map connection is made. Note that connections can be made to rooms, but not doors: the positions of doors are fixed. Example:
- -change the east exit of the Closet to the Tsar's Imperial Dining Salon + +
change the east exit of the Closet to the Tsar's Imperial Dining Salon
Since "nothing" is not a room, this doesn't allow us to change the exit to nothing, so there is a separate definition of:
- -change the west exit of the Closet to nothing + +
@@ -796,8 +796,8 @@ *=ph_changenoexit=*This phrase alters the map so that the given map connection is unmade. Example:
- -change the west exit of the Closet to nowhere + +
@@ -805,21 +805,21 @@ *=ph_move=*This phrase moves the first-named object to the second. Example:
- -move the genie's lamp to Aladdin's Cave; + +
The first object named has to be a thing; the destination must be a room, as here, a container, a supporter, or a person. When something is moved, all its parts and contents (and all their contents, and so on) move with it. If the thing being moved is a person, then the destination is required to be a room or an enterable container. (In particular, a person cannot be carried by another person.)
Two options can be used if the object being moved is the player.
- -move the player to Aladdin's Cave, without printing a room description + +
move the player to Aladdin's Cave, without printing a room description
omits the description which would otherwise be produced. A compromise is to use:
- -move the player to Aladdin's Cave, printing an abbreviated room description + +
@@ -828,14 +828,14 @@ *=ph_movebackdrop=*move the player to Aladdin's Cave, printing an abbreviated room description
This phrase moves the backdrop so that it is now present in every room matching the given description. Example: If we define
- -A room can be wet or dry. A room is usually dry. The Rock Pool is wet. + +
A room can be wet or dry. A room is usually dry. The Rock Pool is wet.
then we can write
- -move the stream backdrop to all wet rooms; + +
@@ -844,25 +844,25 @@ *=ph_updatebackdrop=*This phrase runs through all backdrops in the model world and makes sure they are correctly in, or not in, the current location, so that everything appears right from the player's point of view. Example:
- -The Upper Cave is above the Rock Pool. The Ledge is east of the Pool. The stream is a backdrop. + +
- -The Upper Cave is above the Rock Pool. The Ledge is east of the Pool. The stream is a backdrop.
- -When play begins:
move the stream backdrop to all wet rooms.A lever is in the Cave. The lever is fixed in place. + +
- -Instead of pulling the lever when the Cave is dry: + +
Instead of pulling the lever when the Cave is dry:
now the Cave is wet;
@@ -880,8 +880,8 @@ *=ph_remove=*Removes the given object from play, so that it is not present in any room. We are not permitted to remove rooms, or doors, or the player, from play; but we are permitted to remove backdrops, making them disappear from all ro ms in which they are present. Example:
- -remove the gold coin from play; + +
@@ -889,8 +889,8 @@ *=ph_now=*This phrase makes the condition become true. Examples:
- -now the score is 100;
now the player is Kevin;
@@ -909,8 +909,8 @@ *=ph_increase=*This phrase increases the variable, table entry, list entry, or property by the given amount, which must be of a compatible kind. Example:
- -increase the score by 8;
@@ -920,8 +920,8 @@ *=ph_decrease=*
increase the time of day by 5 minutes;This phrase decreases the variable, table entry, list entry, or property by the given amount, which must be of a compatible kind. Example:
- -decrease the score by 6;
@@ -931,8 +931,8 @@ *=ph_increment=*
decrease the carrying capacity of the player by 10;This phrase increases the variable, table entry, list entry, or property by 1. Example:
- -@@ -940,8 +940,8 @@ *=ph_decrement=*This phrase decreases the variable, table entry, list entry, or property by 1. Example:
- -@@ -953,8 +953,8 @@ *=ph_firstheld=*This phrase produces the first of the list of things held by the object. Example:
- -first thing held by Baroness Orczy + +
@@ -962,8 +962,8 @@ *=ph_nextheld=*This phrase produces the next item of the list of things held by something. Example: suppose Baroness Orczy is carrying a lapdog and a string of pearls.
- -next thing held after the lapdog + +
@@ -972,22 +972,22 @@ *=ph_randombetween=*This phrase produces a uniformly random value in the range given. Examples:
- -a random number from 10 to 99 + +
a random number from 10 to 99
a random time from 2:31 PM to 2:57 PMIf we make a new kind of value:
- -A cloud pattern is a kind of value. The cloud patterns are cumulus, altocumulus, cumulonimbus, stratus, cirrus, nimbus, nimbostratus. + +
A cloud pattern is a kind of value. The cloud patterns are cumulus, altocumulus, cumulonimbus, stratus, cirrus, nimbus, nimbostratus.
then we can also take random values from it:
- -a random cloud pattern between stratus and nimbus + +
@@ -996,14 +996,14 @@ *=ph_randomchance=*This condition is true X/Yths of the time, where X and Y are the numbers. Example:
- -if a random chance of 2 in 3 succeeds, ... + +
Here is a rule which applies only 15% of the time:
- -Instead of waiting when a random chance of 15 in 100 succeeds: ... + +
@@ -1011,8 +1011,8 @@ *=ph_seed=*Instead of waiting when a random chance of 15 in 100 succeeds: ...
This phrase changes the seed number as specified. Any random numbers generated after that depend only on the seed. Example: the following sentence will "fix" the process of generating these random numbers so that they are not random at all - t e same sequence of random numbers will be produced on each run.
- -When play begins, seed the random-number generator with 1234. + +
@@ -1021,8 +1021,8 @@ *=ph_randomdesc=*When play begins, seed the random-number generator with 1234.
This phrase makes a uniformly random choice from values satisfying the description given. Example:
- -a random visited room
@@ -1041,8 +1041,8 @@ *=ph_endsaying=*
a random sceneThis phrase ends the story at the next opportunity (typically as soon as the current rule ends), with the closing message given in the text. The end is not considered final. Example:
- -end the story saying "You have been stymied" + +
@@ -1050,8 +1050,8 @@ *=ph_endfinallysaying=*This phrase ends the story at the next opportunity (typically as soon as the current rule ends), with the closing message given in the text. The end is considered final, and any hidden menu options will be revealed. Example:
- -end the story finally saying "You have defeated Sauron" + +
@@ -1075,8 +1075,8 @@ *=ph_resume=*This phrase causes an ended story to resume exactly as if no "end the story..." phrase had been used. Example:
- -When play ends:
if the story has not ended finally:
@@ -1091,14 +1091,14 @@ *=phs_timewords=*This text substitution produces the given time written out in English sentence form. For example:
- -"Through the glass you can see the reversed hands reading [the time of day in words]." + +
"Through the glass you can see the reversed hands reading [the time of day in words]."
might produce
- -Through the glass you can see the reversed hands reading twenty to nine. + +
@@ -1106,14 +1106,14 @@ *=ph_durationmins=*Through the glass you can see the reversed hands reading twenty to nine.
This phrase converts numbers into lengths of time. Example:
- -Because it's a phrase, not just a notation for writing constants down, the number doesn't have to be given literally:
- -let X be 5;
if the player is in the Slow Room, now X is 10;
@@ -1126,8 +1126,8 @@ *=ph_durationhours=*This phrase converts numbers into lengths of time. Example:
- -@@ -1136,8 +1136,8 @@ *=ph_shiftbefore=*This phrase produces a time earlier by the amount given, keeping within the 24 hour clock. Example:
- -@@ -1146,8 +1146,8 @@ *=ph_shiftafter=*This phrase produces a time later by the amount given, keeping within the 24 hour clock. Example:
- -@@ -1164,8 +1164,8 @@ *=ph_minspart=*This phrase converts a time to a number, then takes the result mod 60, which in effect produces the number of minutes after the hours are thrown away. Example:
- -@@ -1174,8 +1174,8 @@ *=ph_hourspart=*This phrase converts a time to a number, then divides the result by 60, which in effect produces the number of hours after minutes are thrown away. Example:
- -@@ -1184,8 +1184,8 @@ *=ph_timefromnow=*This phrase causes the given rule to be run at a given time offset from the current time of day. Example:
- -the egg-timer clucks in 18 minutes from now; + +
@@ -1193,8 +1193,8 @@ *=ph_turnsfromnow=*This phrase causes the given rule to be run at a given number of turns after the current one. Example:
- -the egg-timer clucks in four turns from now; + +
@@ -1202,8 +1202,8 @@ *=ph_attime=*This phrase causes the given rule to be run at a given time of day. Example:
- -the egg-timer clucks at 11:35 AM; + +
@@ -1211,8 +1211,8 @@ *=ph_scenetimesincebegan=*This phrase produces the time since the named scene began, which only makes sense, of course, if it has indeed begun. Example:
- -time since Entire Game began + +
@@ -1220,8 +1220,8 @@ *=ph_scenetimesinceended=*This phrase produces the time since the named scene ended, which only makes sense, of course, if it has indeed ended. Example:
- -time since Formal Dinner ended + +
@@ -1253,8 +1253,8 @@ *=ph_nothing=*This phrase does nothing at all. It is very occasionally useful to make a rule which does nothing:
- -This is the largely ineffective rule: + +
This is the largely ineffective rule:
@@ -1264,26 +1264,26 @@ *=ph_showme=*
do nothing.This phrase is intended for testing purposes only. If used in a story file running inside the Inform application, it prints a line of text showing the given value and its kind; in a Released story file, it does noth ng at all. Example:
- -When play begins: showme 11. + +
produces
- -More usefully:
- -Every turn: showme the score. + +
Now, every turn, we get a line in the story's transcript like so:
- -@@ -1292,8 +1292,8 @@ *=ph_indarkness=*This condition is true if the player currently has no light to see by. Note that the test is more complicated than simply testing
- -if the player is in a dark room, ... + +
@@ -1302,8 +1302,8 @@ *=ph_consents=*This condition is unusual in doing something and not simply making a silent check: it waits for the player to type YES (or Y) or NO (or N) at the keyboard, and then is true if the answer was yes. Example:
- -say "Are you quite sure you want to kiss the Queen? "; + +
say "Are you quite sure you want to kiss the Queen? ";
if the player consents:
@@ -1315,20 +1315,20 @@ *=ph_whether=*This phrase converts a condition into its result as a value, which is always either "true" or "false". Example:
- -whether or not 20 is an odd number + +
produces the truth state "false". This is mostly useful for storing up results to look at later:
- -let victory be whether or not all the treasures are in the cabinet; + +
let victory be whether or not all the treasures are in the cabinet;
and then subsequently:
- -@@ -1336,8 +1336,8 @@ *=ph_if=*This phrase causes the single phrase, or block of phrases, following it to be obeyed only if the condition is true. (If the condition must contain a comma for some reason, the block form should be used.) Example:
- -if the red door is open, say "You could try going east?" + +
@@ -1345,8 +1345,8 @@ *=ph_unless=*This phrase causes the single phrase, or block of phrases, following it to be obeyed only if the condition is false. (If the condition must contain a comma for some reason, the block form should be used.) Example:
- -unless the red door is closed, say "You could try going east?" + +
@@ -1354,8 +1354,8 @@ *=ph_otherwise=*unless the red door is closed, say "You could try going east?"
This phrase can only be used as part of an "if ...:" or "unless: ...", and provides an alternative block of phrases to follow if the first block isn't followed. Example:
- -When there is only a single phrase we can use the shortened form:
- -if N is 2, say "Hooray, N is 2!"; + +
if N is 2, say "Hooray, N is 2!";
otherwise say "Boo, N is not 2...";We can also supply an alternative condition:
- -if N is 1:
...
@@ -1394,8 +1394,8 @@ *=ph_switch=*This phrase switches between a variety of possible blocks of phrases to follow, depending on the value given. Example:
- -if the dangerous item is:
-- the electric hairbrush:
@@ -1408,8 +1408,8 @@One alternative is allowed to be "otherwise", which is used only if none of the other cases apply, and which therefore guarantees that in any situation exactly one of the blocks will be followed.
- -if N is:
-- 1: say "1.";
@@ -1423,8 +1423,8 @@ *=ph_while=*This phrase causes the block of phrases following it to be repeated over and over for as long the condition is true. If it isn't even true the first time, the block is skipped over and nothing happens. Example:
- -while someone (called the victim) is in the Crypt: + +
while someone (called the victim) is in the Crypt:
say "A bolt of lightning strikes [the victim]!";
@@ -1436,29 +1436,29 @@ *=ph_repeat=*This phrase causes the block of phrases following it to be repeated once for each value in the given range, storing that value in the named variable. (The variable exists only temporarily, within the repetition.) Example:
- -repeat with counter running from 1 to 10: + +
This, and runs through the given phrases ten times. Within those phrases, a special value called "counter" has the value 1 the first time through, then the value 2, then 3 and so on up to 10. (It can of course be called whatever we like: this is only an example.) The range can be from any kind where ranges make sense - anything on which arithmetic can be done, so for instance
- -repeat with moment running from 4 PM to 4:07 PM: + +
and also any enumeration:
- -Colour is a kind of value. The colours are red, orange, yellow, green, blue, indigo and violet. + +
- -Colour is a kind of value. The colours are red, orange, yellow, green, blue, indigo and violet.
...
repeat with hue running from orange to indigo:
@@ -1470,24 +1470,24 @@ *=ph_runthrough=*This phrase causes the block of phrases following it to be repeated once for each value matching the description, storing that value in the named variable. (The variable exists only temporarily, within the repetition.) Example:
- -repeat with item running through open containers: + +
If there are no containers, or they are all closed, the phrases will not be followed at all. Inform will issue a Problem message if the range of the loop may be infinite: for example, it won't allow:
- -repeat with X running through odd numbers: + +
On the other hand it will allow:
- -repeat with T running through times: + +
repeat with T running through times:
@@ -1498,8 +1498,8 @@ *=ph_next=*
...This phrase can only be used inside a "repeat" or "while" block, and causes the current repetition of the block to finish immediately. That either means the next repetition begins, or (if we are a ready at the last one) the loop ends too. Example:
- -repeat with X running from 1 to 10: + +
repeat with X running from 1 to 10:
if X is 4, next;
@@ -1512,8 +1512,8 @@ *=ph_break=*This phrase can only be used inside "repeat", "while" block, and causes both the current repetition and the entire loop to finish immediately. Example:
- -repeat with X running from 1 to 10: + +
repeat with X running from 1 to 10:
if X is 7, break;
@@ -1526,8 +1526,8 @@ *=ph_stop=*This phrase causes the current rule to end immediately. It is most often used in the definition of other phrases:
- -To judge the score:
if the score is 0, stop;
@@ -1541,8 +1541,8 @@ *=ph_listcontents=*This phrase produces a list of all things whose holder is the given object, according to Inform's traditional conventions for room descriptions and inventory listings. Example:
- -list the contents of Marley Wood, as a sentence, with newlines + +
list the contents of Marley Wood, as a sentence, with newlines
@@ -1553,8 +1553,8 @@ *=ph_let=*
and including all contents;This phrase creates a new temporary variable, starting it with the value supplied. The variable lasts only for the present block of phrases, which certainly means that it lasts only for the current rule. Examples:
- -let outer bull be 25;
let the current appearance be "reddish brown";
@@ -1563,20 +1563,20 @@The kinds of these are deduced from the values given, so that, for instance,
- -say "The outer bull scores [the outer bull in words] when you practice archery in [special room]." + +
say "The outer bull scores [the outer bull in words] when you practice archery in [special room]."
produces
- -The outer bull scores twenty-five when you practice archery in Marley Wood. + +
The outer bull scores twenty-five when you practice archery in Marley Wood.
The variable name should be a new one; if it's the name of an existing one, then the kinds must agree. So:
- -let outer bull be 25;
@@ -1587,20 +1587,20 @@ *=ph_letdefault=*
let outer bull be 50;This phrase creates a new temporary variable of the given kind. The variable lasts only for the present block of phrases, which certainly means that it lasts only for the current rule. Example:
- -let inner bull be a number; + +
The variable created holding the default value for that kind - in this case, the number 0. A handful of very obscure kinds have no default values, and then a problem message is produced. Inform also disallows:
- -let the conveyance be a vehicle; + +
because temporary variables aren't allowed to have kinds more specific than "object". (This is a good thing: suppose there are no vehicles in the world?) It's quite safe in such cases to use
- -let the conveyance be an object; + +
@@ -1617,8 +1617,8 @@ *=ph_decideon=*This phrase can only be used in the body of a definition of a phrase to decide a value. It causes the calculation to end immediately, with the outcome being the given value, which must be of the kind expected. Example:
- -To decide which number is double (N - a number): + +
To decide which number is double (N - a number):
let D be N times N;
@@ -1630,8 +1630,8 @@ *=ph_enumfirst=*This phrase produces the first-created value of the given kind, which should be an enumeration. Example: if we have
- -Colour is a kind of value. The colours are red, orange, yellow, green, blue, indigo and violet. + +
@@ -1640,8 +1640,8 @@ *=ph_enumlast=*Colour is a kind of value. The colours are red, orange, yellow, green, blue, indigo and violet.
This phrase produces the last-created value of the given kind, which should be an enumeration. Example: if we have
- -Colour is a kind of value. The colours are red, orange, yellow, green, blue, indigo and violet. + +
@@ -1650,8 +1650,8 @@ *=ph_enumafter=*Colour is a kind of value. The colours are red, orange, yellow, green, blue, indigo and violet.
This phrase produces the next-created value of the given kind, which should be an enumeration. Example: if we have
- -Colour is a kind of value. The colours are red, orange, yellow, green, blue, indigo and violet. + +
@@ -1660,8 +1660,8 @@ *=ph_enumbefore=*Colour is a kind of value. The colours are red, orange, yellow, green, blue, indigo and violet.
This phrase produces the previous-created value of the given kind, which should be an enumeration. Example: if we have
- -Colour is a kind of value. The colours are red, orange, yellow, green, blue, indigo and violet. + +
@@ -1690,8 +1690,8 @@ *=ph_currentaction=*Colour is a kind of value. The colours are red, orange, yellow, green, blue, indigo and violet.
This phrase produces the action currently being processed as a value - it literally stores the action, and remembers, if necessary, the exact wording of the player's command at the time it was stored - so that even actions ari ing from commands like LOOK UP X100 IN THE CODE BOOK can be stored faithfully. Examples:
- -let the present whim be the current action; + +
let the present whim be the current action;
@@ -1702,8 +1702,8 @@ *=ph_actionpart=*
say "How you would like to be [current action].";This phrase produces the action name part of an action. Example: suppose the current actor is Algy, who is throwing the brick at Biggles. Then
- -action name part of the current action = throwing it at action + +
@@ -1711,8 +1711,8 @@ *=ph_nounpart=*action name part of the current action = throwing it at action
This phrase produces the (first) noun of an action. Example: suppose the current actor is Algy, who is throwing the brick at Biggles. Then
- -noun part of the current action = the brick + +
@@ -1721,8 +1721,8 @@ *=ph_secondpart=*This phrase produces the second noun of an action. Example: suppose the current actor is Algy, who is throwing the brick at Biggles. Then
- -second noun part of the current action = Biggles + +
@@ -1731,8 +1731,8 @@ *=ph_actorpart=*This phrase produces the person who would be carrying out the action if it were being tried. Example: suppose the current actor is Algy, who is throwing the brick at Biggles. Then
- -actor part of the current action = Algy + +
@@ -1740,8 +1740,8 @@ *=ph_involves=*This condition is true if the object appears as any of the actor, the noun or the second noun in the action. Example:
- -if the current action involves Algy + +
@@ -1750,8 +1750,8 @@ *=ph_actionof=*This phrase is now seldom needed. It produces a literally typed action as a value. Example:
- -now the best idea yet is the action of pushing the button; + +
@@ -1764,8 +1764,8 @@ *=ph_nextstep=*This phrase tries to find a shortest route between the two given endpoints, using the given relation of objects to determine single steps. Example:
- -next step via the overlooking relation from the Folly to the Chinese Lake + +
@@ -1774,8 +1774,8 @@ *=ph_numbersteps=*next step via the overlooking relation from the Folly to the Chinese Lake
This phrase tries to find the length of a shortest route between the two given endpoints, using the given relation of objects to determine single steps. Example:
- -number of steps via the overlooking relation from the Folly to the Chinese Lake + +
@@ -1784,8 +1784,8 @@ *=ph_ifleft=*number of steps via the overlooking relation from the Folly to the Chinese Lake
This condition is true if the value V is such that V relates to something by the given relation. Example: suppose partnership relates various texts to various texts. Then we can test
- -if "chalk" relates to a text by the partnership relation, ... + +
@@ -1793,8 +1793,8 @@ *=ph_ifright=*if "chalk" relates to a text by the partnership relation, ...
This condition is true if the value V is such that something relates to V by the given relation. Example: suppose partnership relates various texts to various texts. Then we can test
- -if a text relates to "cheese" by the partnership relation, ... + +
@@ -1802,8 +1802,8 @@ *=ph_rightlookup=*if a text relates to "cheese" by the partnership relation, ...
This phrase produces an Y such that the given value V relates to Y by the given relation. Example: suppose partnership relates various texts to various texts. Then we can obtain
- -the text to which "chalk" relates by the partnership relation + +
@@ -1812,8 +1812,8 @@ *=ph_leftlookup=*the text to which "chalk" relates by the partnership relation
This phrase produces an X such that X relates to the given value V by the given relation. Example: suppose partnership relates various texts to various texts. Then we can obtain
- -the text which relates to "cheese" by the partnership relation + +
@@ -1822,8 +1822,8 @@ *=ph_leftlookuplist=*the text which relates to "cheese" by the partnership relation
This phrase produces a list of all the X such that X relates to the given value V by the given relation. Example: suppose partnership relates various texts to various texts. Then we can obtain
- -list of texts which relate to "cheese" by the partnership relation + +
@@ -1832,8 +1832,8 @@ *=ph_rightlookuplist=*list of texts which relate to "cheese" by the partnership relation
This phrase produces a list of all Y such that the given value V relates to Y by the given relation. Example: suppose partnership relates various texts to various texts. Then we can obtain
- -list of texts to which "chalk" relates by the partnership relation + +
@@ -1842,8 +1842,8 @@ *=ph_leftdomain=*list of texts to which "chalk" relates by the partnership relation
This phrase produces a list of all X which relate to anything under the given relation. Example: suppose partnership relates various texts to various texts. Then we can obtain
- -list of texts which the partnership relation relates + +
@@ -1851,8 +1851,8 @@ *=ph_rightdomain=*This phrase produces a list of all Y which anything relates to under the given relation. Example: suppose partnership relates various texts to various texts. Then we can obtain
- -list of texts which the partnership relation relates to + +
@@ -1860,14 +1860,14 @@ *=ph_letrelation=*This phrase creates a new temporary variable, and sets its value to the identity of a newly created and equally temporary relation. These last only for the present block of phrases, which certainly means that they exist only in the current rule. Example:
- -let the password dictionary be a relation of texts; + +
This makes a purely temporary various-to-various relation between texts, which lasts as long as the temporary value "password dictionary" lasts. By default, relations are various-to-various, but we could instead write, say:
- -let the nicknames catalogue be a various-to-one relation of texts; + +
@@ -1931,8 +1931,8 @@ *=ph_nearestwholenumber=*let the nicknames catalogue be a various-to-one relation of texts;
This phrase performs signed addition on the given values, whose kinds must agree, and produces the result. Examples:
- -1.4 to the nearest whole number = 1 + +
1.4 to the nearest whole number = 1
1.6 to the nearest whole number = 2
@@ -1941,8 +1941,8 @@We probably ought to bear in mind that the limited range of "number" means that the nearest whole number might not be all that near. For example:
- -6 x 10^23 to the nearest whole number = 2147483647 + +
@@ -1951,8 +1951,8 @@ *=phs_realplaces=*This text substitution writes out the number to the given number of decimal places. Examples:
- -"The semicircle is roughly [pi to 3 decimal places] paces around." + +
@@ -1961,8 +1961,8 @@ *=phs_decimal=*"The semicircle is roughly [pi to 3 decimal places] paces around."
This text substitution writes out the number in decimal form, that is, avoiding "x 10^n" even for very large or very small quantities. For example,
- -"[1.23457 x 10^8 in decimal notation]" + +
@@ -1975,8 +1975,8 @@ *=phs_scientific=*This text substitution writes out the number in scientific form, that is, using "x 10^n" even for easy-to-judge quantities. For example,
- -"[the reciprocal of 137 in scientific notation]" + +
@@ -1989,8 +1989,8 @@ *=ph_plus=*This phrase performs signed addition on the given values, whose kinds must agree, and produces the result. Examples:
- -200 + 1 = 201
@@ -2000,8 +2000,8 @@ *=ph_minus=*
10:04 AM + two minutes = 10:06 AMThis phrase performs signed subtraction on the given values, whose kinds must agree, and produces the result. Examples:
- -