Custom Library Messages

version 28/100614 by David Fisher

  • Home page
  • Beginning
  • Previous
  • Next



  • Part 4 - Inform 6 interface - unindexed

    To init library messages:
    (- InitLibraryMessages(); -)

    [
    The following I6 code (in InitLibraryMessages) does not compile under
    Glulx (it says "Illegal backpatch marker in forward-declared symbol").

    It was originally added in version 6 to prevent infinite
    recursion when pushing an object between rooms; the Standard Rules
    file says:

    Include (- with before [; PushDir: AllowPushDir(); rtrue; ]
    ... -) when defining a thing

    - which caused problems when defining the I7_LibraryMessages
    object, and so the code below removed all "befores" other than
    LibraryMessagesBefore.

    To make a long story short ... the original PushDir problem seems
    to have gone away, but I am still suspicious, so I'll leave it in
    when compiling to Z code.
    ]

    Include (-
    Constant LibraryMessages = (+I7_LibraryMessages+);

    [ InitLibraryMessages n;

    #Ifndef TARGET_GLULX;
    if ((+I7_LibraryMessages+).&before)
    {
    ! get rid of any other "before" routines
    for (n = 0 : n < (+I7_LibraryMessages+).#before / WORDSIZE : n++)
    {
    if ((+I7_LibraryMessages+).&before --> n ~= LibraryMessagesBefore)
    (+I7_LibraryMessages+).&before --> n = nothing;
    }
    }
    #Endif; ! TARGET_GLULX
    ];
    -) after "Definitions.i6t".

    I7_LibraryMessages is a thing.
    Include (-
    with before LibraryMessagesBefore,
    -) when defining I7_LibraryMessages.

    Include (-
    [ LibraryMessagesBefore id temp isImplicitAction after_text;
    (+the numeric amount+) = lm_o;
    (+main object+) = lm_o;
    (+secondary object+) = lm_o2;
    (+curr_subject+) = actor;

    if (actor ~= player) { set_curr_obj(actor); }
    else if (lm_o > 0) { set_curr_obj(lm_o); }
    else { set_curr_obj(player); }

    id = -1;
    isImplicitAction = 0;
    after_text = "^";
    -)

    [ Note that there is no "Prompt:" section, since Inform 7 handles
    the prompt specially; see "Changing the command prompt" in the I7 manual ]

    [1]

    Include (-
    Miscellany:
    switch (lm_n) {
    1: id = (+LibMsg <first N objects>+); after_text = "";
    2: id = (+LibMsg <zero multiple objects>+);
    3: id = (+LibMsg <you have died>+); after_text = "";
    4: id = (+LibMsg <you have won>+); after_text = "";
    ! 5 is "Would you like to restart ...", handled specially by Inform 7
    6: id = (+LibMsg <undo not provided>+);
    7: id = (+LibMsg <undo failed>+);
    8: id = (+LibMsg <restrict answer>+); after_text = "";
    9: id = (+LibMsg <entering darkness>+);
    10: id = (+LibMsg <empty line>+);
    11: id = (+LibMsg <cannot undo nothing>+);
    12: id = (+LibMsg <cannot undo twice in a row>+);
    13: id = (+LibMsg <undo succeeded>+);
    14: id = (+LibMsg <oops failed>+);
    15: id = (+LibMsg <oops no arguments>+);
    16: id = (+LibMsg <oops too many arguments>+);
    17: id = (+LibMsg <dark description>+);
    18: id = (+LibMsg <player self description>+); after_text = "";
    ! 19 was LibMsg <player description>, "As good-looking as ever"
         ! - use "The description of the player is ..." instead.
    20: id = (+LibMsg <again usage>+);
    21: id = (+LibMsg <cannot do again>+);
    22: id = (+LibMsg <cannot begin at comma>+);
    23: id = (+LibMsg <cannot talk to absent person>+);
    24: id = (+LibMsg <cannot talk to inanimate object>+);
    25: id = (+LibMsg <extra words before comma>+);
    26: id = (+LibMsg <report implicit take>+);
    27: id = (+LibMsg <command not understood>+);
    28: id = (+LibMsg <command partly understood>+); after_text = "";
    29: id = (+LibMsg <number not understood>+);
    30: id = (+LibMsg <unknown object>+);
    -)

    Include (-
    31: id = (+LibMsg <command incomplete>+);
    32: id = (+LibMsg <object not held>+);
    33: id = (+LibMsg <verb cannot have multiple objects>+);
    34: id = (+LibMsg <too many multiple objects>+);
    35: id = (+LibMsg <pronoun not set>+);
    36: id = (+LibMsg <excepted object not included anyway>+);
    37: id = (+LibMsg <verb cannot have inanimate object>+);
    38: id = (+LibMsg <unknown verb>+);
    39: id = (+LibMsg <unimportant object>+);
    40: (+main object+) = pronoun_obj;
         (+internal make main object the current object rule+)();
         id = (+LibMsg <pronoun absent>+);
    41: id = (+LibMsg <command badly ended>+);
    42: id = (+LibMsg <not that many available>+);
    43: id = (+LibMsg <zero multiple objects>+); ! same as Miscellany #2 (?)
    44: id = (+LibMsg <no objects available>+);
    45: id = (+LibMsg <who disambiguation>+); after_text = "";
    46: id = (+LibMsg <which disambiguation>+); after_text = "";
    47: id = (+LibMsg <single object disambiguation>+);
    48: (+main object+) = actor;
         (+internal make main object the current object rule+)();
         id = (+LibMsg <whom disambiguation>+);
    49: (+main object+) = actor;
         (+internal make main object the current object rule+)();
         id = (+LibMsg <what disambiguation>+);
    50: id = (+LibMsg <score changed>+); after_text = "";
    51: id = (+LibMsg <command cut short>+);
    52: id = (+LibMsg <menu prompt>+); after_text = "";
    53: id = (+LibMsg <page prompt>+); after_text = "";
    54: id = (+LibMsg <comment recorded>+);
    55: id = (+LibMsg <comment not recorded>+);
    ! 56 = ".^"
    ! 57 = "?^"
    58: id = (+LibMsg <npc unable to do that>+);
    59: id = (+LibMsg <noun needed>+);
    60: id = (+LibMsg <noun not needed>+);
    61: id = (+LibMsg <object needed>+);
    62: id = (+LibMsg <object not needed>+);
    63: id = (+LibMsg <second object needed>+);
    64: id = (+LibMsg <second object not needed>+);
    65: id = (+LibMsg <second noun needed>+);
    66: id = (+LibMsg <second noun not needed>+);
    67: id = (+LibMsg <something more substantial needed>+);
    68: id = (+LibMsg <report npc implicit take>+);
    69: id = (+LibMsg <report implicit take>+);
    70: id = (+LibMsg <undo forbidden>+);
    71: id = (+LibMsg <dark room name>+);
    72: id = (+LibMsg <person ignores command>+);
    default: jump not_handled; }
    jump handled;
    -)

    [ The ListMiscellany rules ("providing light", etc) can be handled OK by Inform 7 ]

    [2]

    Include (-
    Quit:
    switch (lm_n) {
    1: id = (+LibMsg <yes or no prompt>+); after_text = "";
    2: id = (+LibMsg <confirm Quit>+); after_text = "";
    default: jump not_handled; }
    jump handled;

    Restart:
    switch (lm_n) {
    1: id = (+LibMsg <confirm Restart>+); after_text = "";
    2: id = (+LibMsg <Restart failed>+);
    default: jump not_handled; }
    jump handled;
    -)

    [3]

    Include (-

    Restore:
    switch (lm_n) {
    1: id = (+LibMsg <Restore failed>+);
    2: id = (+LibMsg <Restore succeeded>+);
    default: jump not_handled; }
    jump handled;

    Save:
    switch (lm_n) {
    1: id = (+LibMsg <Save failed>+);
    2: id = (+LibMsg <Save succeeded>+);
    default: jump not_handled; }
    jump handled;

    Verify:
    switch (lm_n) {
    1: id = (+LibMsg <Verify succeeded>+);
    2: id = (+LibMsg <Verify failed>+);
    default: jump not_handled; }
    jump handled;
    -)

    [4]

    Include (-
    ScriptOn:
    switch (lm_n) {
    1: id = (+LibMsg <transcript already on>+);
    2: id = (+LibMsg <start of transcript>+); after_text = "";
    3: id = (+LibMsg <transcript failed>+);
    default: jump not_handled; }
    jump handled;

    ScriptOff:
    switch (lm_n) {
    1: id = (+LibMsg <transcript already off>+);
    2: id = (+LibMsg <end of transcript>+);
    3: id = (+LibMsg <end transcript failed>+);
    default: jump not_handled; }
    jump handled;
    -)

    [5]

    Include (-
    NotifyOn:
    id = (+LibMsg <score notification turned on>+);
    jump handled;

    NotifyOff:
    id = (+LibMsg <score notification turned off>+);
    jump handled;

    Score:
    switch (lm_n) {
    1: id = (+LibMsg <Score command>+); after_text = "";
    2: id = (+LibMsg <no scoring>+);
    3: id = (+LibMsg <score rank>+); after_text = "";
    default: jump not_handled; }
    jump handled;
    -)

    [6]

    Include (-
    Pronouns:
    switch (lm_n) {
    1: id = (+LibMsg <Pronouns initial text>+); after_text = "";
    2: id = (+LibMsg <Pronouns -means- text>+); after_text = " ";
    3: id = (+LibMsg <Pronouns -unset- text>+); after_text = "";
    4: id = (+LibMsg <no pronouns known>+);
    default: jump not_handled; }
    jump handled;

    Inv:
    switch (lm_n) {
    1: id = (+LibMsg <Inventory no possessions>+);
    2: id = (+LibMsg <Inventory initial text>+); after_text = "";
    ! 3 is ":^" (used for list style NEWLINE_BIT)
    ! 4 is ".^" (used for list style ENGLISH_BIT)
    5: id = (+LibMsg <report npc taking inventory>+);
    default: jump not_handled; }
    jump handled;
    -)

    [7]

    Include (-
    Take:
    switch (lm_n) {
    1: id = (+LibMsg <report player taking>+);
    2: id = (+LibMsg <cannot take yourself>+);
    3: id = (+LibMsg <cannot take other people>+);
    4: id = (+LibMsg <cannot take something you are within>+);
    5: id = (+LibMsg <cannot take something already taken>+);
    6: id = (+LibMsg <cannot take possessions of others>+);
    7: id = (+LibMsg <cannot take component parts>+);
    8: id = (+LibMsg <cannot take hidden parts>+);
    9: id = (+LibMsg <cannot reach within closed containers>+);
    10: id = (+LibMsg <cannot take scenery>+);
    11: id = (+LibMsg <cannot take something fixed>+);
    12: id = (+LibMsg <cannot exceed carrying capacity>+);
    13: id = (+LibMsg <use holdall to avoid exceeding carrying capacity>+);
    isImplicitAction = 1;
    14: id = (+LibMsg <cannot reach within other places>+);
    ! 15 doesn't seem to be produced anywhere ("You cannot carry ...")
    16: id = (+LibMsg <report npc taking>+);
    default: jump not_handled; }
    jump handled;

    Remove:
    switch (lm_n)
    { 1: id = (+LibMsg <cannot remove from closed containers>+);
    2: id = (+LibMsg <cannot remove something not within>+);
    3: id = (+LibMsg <report player removing>+); ! TODO - not printed any more? ("Taken" instead)
    ! TODO (maybe): need 4 = LibMsg <report npc removing>
    default: jump not_handled; }
    jump handled;
    -)

    [8]

    Include (-
    Drop:
    switch (lm_n) {
    1: id = (+LibMsg <cannot drop something already dropped>+);
    2: id = (+LibMsg <cannot drop not holding>+);
    3: id = (+LibMsg <cannot drop clothes being worn>+);
    isImplicitAction = 1;
    4: id = (+LibMsg <report player dropping>+);
    5,6: id = (+LibMsg <cannot drop if this exceeds carrying capacity>+); ! 5 = supporter, 6 = container
    7: id = (+LibMsg <report npc dropping>+);
    default: jump not_handled; }
    jump handled;

    Insert:
    switch (lm_n) {
    1: id = (+LibMsg <cannot insert something not held>+);
    2: id = (+LibMsg <cannot insert into something not a container>+);
    3: id = (+LibMsg <cannot insert into closed containers>+);
    4: id = (+LibMsg <need to take off before inserting>+); ! (unused ?)
    5: id = (+LibMsg <cannot insert something into itself>+);
    6: id = (+LibMsg <cannot insert clothes being worn>+);
    isImplicitAction = 1;
    7: id = (+LibMsg <cannot insert if this exceeds carrying capacity>+);
    8,9: id = (+LibMsg <report player inserting>+); ! 8 is for multiple objects
    10: id = (+LibMsg <report npc inserting>+);
    default: jump not_handled; }
    jump handled;

    PutOn:
    switch (lm_n) {
    1: id = (+LibMsg <cannot put something not held>+);
    2: id = (+LibMsg <cannot put something on it-self>+);
    3: id = (+LibMsg <cannot put onto something not a supporter>+);
    4: id = (+LibMsg <cannot put onto something being carried>+);
    5: id = (+LibMsg <cannot put clothes being worn>+);
    isImplicitAction = 1;
    6: id = (+LibMsg <cannot put if this exceeds carrying capacity>+);
    7,8: id = (+LibMsg <report player putting on>+); ! 7 is for multiple objects
    9: id = (+LibMsg <report npc putting on>+);
    default: jump not_handled; }
    jump handled;
    -)

    [9]

    Include (-
    Give:
    switch (lm_n) {
    1: id = (+LibMsg <cannot give what you have not got>+);
    2: id = (+LibMsg <cannot give to yourself>+);
    3: id = (+LibMsg <block giving>+);
    4: id = (+LibMsg <unable to receive things>+);
    5: id = (+LibMsg <report player giving>+);
    6: id = (+LibMsg <report npc giving to player>+);
    7: id = (+LibMsg <report npc giving to npc>+);
    default: jump not_handled; }
    jump handled;

    Show:
    switch (lm_n) {
    1: id = (+LibMsg <cannot show what you have not got>+);
    2: id = (+LibMsg <block showing>+);
    default: jump not_handled; }
    jump handled;
    -)

    [10]

    Include (-
    Enter:
    switch (lm_n) {
    1: id = (+LibMsg <cannot enter something already entered>+);
    2: id = (+LibMsg <cannot enter something not enterable>+);
    3: id = (+LibMsg <cannot enter closed containers>+);
    4: id = (+LibMsg <cannot enter something carried>+);
    5: id = (+LibMsg <report player entering>+);
    6: id = (+LibMsg <implicitly pass outwards through other barriers>+);
    isImplicitAction = 1;
    7: id = (+LibMsg <implicitly pass inwards through other barriers>+);
    isImplicitAction = 1;
    8,9: id = (+LibMsg <report npc entering>+); ! 8 = container, 9 = supporter
    default: jump not_handled; }
    jump handled;

    Exit:
    switch (lm_n) {
    1: id = (+LibMsg <cannot exit when not within anything>+);
    2: id = (+LibMsg <cannot exit closed containers>+);
    3: id = (+LibMsg <report player exiting>+);
    4: id = (+LibMsg <cannot exit thing not within>+);
    5,6: id = (+LibMsg <report npc exiting>+);
    default: jump not_handled; }
    jump handled;

    GetOff:
    id = (+LibMsg <cannot get off things>+);
    jump handled;
    -)

    [11]

    Include (-
    Go:
    switch (lm_n) {
    1: id = (+LibMsg <cannot travel in something not a vehicle>+);
    2: id = (+LibMsg <cannot go that way>+);
    (+main object+) = noun; ! the direction
    3: id = (+LibMsg <cannot go up through closed doors>+);
    4: id = (+LibMsg <cannot go down through closed doors>+);
    5: id = (+LibMsg <cannot go through closed doors>+);
    6: id = (+LibMsg <nothing through door>+);
    7: id = (+LibMsg <block vaguely going>+);
    8: id = (+LibMsg <say npc goes>+);
    (+main object+) = (+ up +);
    9: id = (+LibMsg <say npc goes>+);
    (+main object+) = (+ down +);
    10: id = (+LibMsg <say npc goes>+);
    11: id = (+LibMsg <say npc arrives>+);
    (+main object+) = (+ up +);
    12: id = (+LibMsg <say npc arrives>+);
    (+main object+) = (+ down +);
    13: id = (+LibMsg <say npc arrives>+);
    14: id = (+LibMsg <say npc arrives from unknown direction>+);
    15: id = (+LibMsg <say npc arrives at>+);
    (+secondary object+) = (+ up +);
    16: id = (+LibMsg <say npc arrives at>+);
    (+secondary object+) = (+ down +);
    17: id = (+LibMsg <say npc arrives at>+);
    ! secondary object already defined
    18: id = (+LibMsg <say npc goes through>+);
    19: id = (+LibMsg <say npc arrives from>+);
    20,21: id = (+LibMsg <say npc vehicle>+);
    22: id = (+LibMsg <say npc pushing in front with player>+);
    23: id = (+LibMsg <say npc pushing in front>+);
    24: id = (+LibMsg <say npc pushing away>+);
    25: id = (+LibMsg <say npc pushing in>+);
    26: id = (+LibMsg <say npc taking player along>+);
    default: jump not_handled; }
    if (lm_n >= 8) { after_text = ""; } ! sentence fragment
    jump handled;
    -)

    [12]

    Include (-
    LMode1:
    id = (+LibMsg <brief look mode>+);
    jump handled;

    LMode2:
    id = (+LibMsg <verbose look mode>+);
    jump handled;

    LMode3:
    id = (+LibMsg <superbrief look mode>+);
    jump handled;
    -)

    [13]

    Include (-
    Look:
    after_text = "";
    switch (lm_n) {
    1: id = (+LibMsg <top line what on>+);
    2: id = (+LibMsg <top line what in>+);
    3: id = (+LibMsg <top line what as>+);
    4: id = (+LibMsg <say things on>+);
    5: id = (+LibMsg <say things also within>+);
    6: id = (+LibMsg <say things within>+);
    7: id = (+LibMsg <examine direction>+);
    8: if (lm_o has supporter) id = (+LibMsg <top line what on>+);
    else id = (+LibMsg <top line what in>+);
    9: id = (+LibMsg <report npc looking>+);
    default: jump not_handled; }
    jump handled;
    -)

    [14]

    Include (-
    Examine:
    switch (lm_n) {
    1: id = (+LibMsg <examine while dark>+);
    2: id = (+LibMsg <examine undescribed things>+);
    3: id = (+LibMsg <examine devices>+);
    4: id = (+LibMsg <report npc examining>+);
    5: id = (+LibMsg <examine direction>+);
    default: jump not_handled; }
    jump handled;

    Search:
    switch (lm_n) {
    1: id = (+LibMsg <search while dark>+);
    2: id = (+LibMsg <nothing found on top of>+);
    ! 3 prints what is on a supporter; use I6 default behaviour
    4: id = (+LibMsg <cannot search unless container or supporter>+);
    5: id = (+LibMsg <cannot search closed opaque containers>+);
    6: id = (+LibMsg <nothing found within container>+);
    ! 7 prints the contents of a container; use I6 default behaviour
    8: id = (+LibMsg <report npc searching>+);
    default: jump not_handled; }
    jump handled;

    LookUnder:
    switch (lm_n) {
    1: id = (+LibMsg <look under while dark>+);
    2: id = (+LibMsg <look under>+);
    3: id = (+LibMsg <report npc looking under>+);
    default: jump not_handled; }
    jump handled;
    -)

    [15]

    Include (-
    Open:
    switch (lm_n) {
    1: id = (+LibMsg <cannot open unless openable>+);
    2: id = (+LibMsg <cannot open something locked>+);
    3: id = (+LibMsg <cannot open something already open>+);
    4: id = -2; ! reveal any newly visible exterior
    5: id = (+LibMsg <report player opening>+);
    6: id = (+LibMsg <report npc opening>+);
    7: id = (+LibMsg <report unseen npc opening>+);
    default: jump not_handled; }
    jump handled;

    Close:
    switch (lm_n) {
    1: id = (+LibMsg <cannot close unless openable>+);
    2: id = (+LibMsg <cannot close something already closed>+);
    3: id = (+LibMsg <report player closing>+);
    4: id = (+LibMsg <report npc closing>+);
    5: id = (+LibMsg <report unseen npc closing>+);
    default: jump not_handled; }
    jump handled;

    Lock:
    switch (lm_n) {
    1: id = (+LibMsg <cannot lock without a lock>+);
    2: id = (+LibMsg <cannot lock something already locked>+);
    3: id = (+LibMsg <cannot lock something open>+);
    4: id = (+LibMsg <cannot lock without the correct key>+);
    5: id = (+LibMsg <report player locking>+);
    6: id = (+LibMsg <report npc locking>+);
    default: jump not_handled; }
    jump handled;

    Unlock:
    switch (lm_n) {
    1: id = (+LibMsg <cannot unlock without a lock>+);
    2: id = (+LibMsg <cannot unlock something already unlocked>+);
    3: id = (+LibMsg <cannot unlock without the correct key>+);
    4: id = (+LibMsg <report player unlocking>+);
    5: id = (+LibMsg <report npc unlocking>+);
    default: jump not_handled; }
    jump handled;
    -)

    [16]

    Include (-
    SwitchOn:
    switch (lm_n) {
    1: id = (+LibMsg <cannot switch on unless switchable>+);
    2: id = (+LibMsg <cannot switch on something already on>+);
    3: id = (+LibMsg <report player switching on>+);
    4: id = (+LibMsg <report npc switching on>+);
    default: jump not_handled; }
    jump handled;

    SwitchOff:
    switch (lm_n) {
    1: id = (+LibMsg <cannot switch off unless switchable>+);
    2: id = (+LibMsg <cannot switch off something already off>+);
    3: id = (+LibMsg <report player switching off>+);
    4: id = (+LibMsg <report npc switching off>+);
    default: jump not_handled; }
    jump handled;
    -)

    [17]

    Include (-
    Wear:
    switch (lm_n) {
    1: id = (+LibMsg <cannot wear something not clothing>+);
    2: id = (+LibMsg <cannot wear not holding>+);
    3: id = (+LibMsg <cannot wear something already worn>+);
    4: id = (+LibMsg <report player wearing>+);
    5: id = (+LibMsg <report npc wearing>+);
    default: jump not_handled; }
    jump handled;

    Disrobe:
    switch (lm_n) {
    1: id = (+LibMsg <cannot take off something not worn>+);
    2: id = (+LibMsg <report player taking off>+);
    3: id = (+LibMsg <report npc taking off>+);
    default: jump not_handled; }
    jump handled;
    -)

    [18]

    Include (-
    Eat:
    switch (lm_n) {
    1: id = (+LibMsg <cannot eat unless edible>+);
    2: id = (+LibMsg <report player eating>+);
    3: id = (+LibMsg <report npc eating>+);
    default: jump not_handled; }
    jump handled;
    Drink:
    id = (+LibMsg <block drinking>+);
    jump handled;
    Taste:
    id = (+LibMsg <block tasting>+);
    jump handled;
    Smell:
    id = (+LibMsg <block smelling>+);
    jump handled;
    Listen:
    id = (+LibMsg <block listening>+);
    jump handled;
    Touch:
    switch (lm_n) {
    1: id = (+LibMsg <report player touching other people>+);
    2: id = (+LibMsg <report player touching things>+);
    3: id = (+LibMsg <report player touching self>+);
    4: id = (+LibMsg <report npc touching self>+);
         ! 5 is for touching the player, 6 is for another NPC
    5,6: id = (+LibMsg <report npc touching other people>+);
    default: jump not_handled; }
    jump handled;
    -)

    [19]

    Include (-
    Yes:
    id = (+LibMsg <block saying yes>+);
    jump handled;
    No:
    id = (+LibMsg <block saying no>+);
    jump handled;
    Sorry:
    id = (+LibMsg <block saying sorry>+);
    jump handled;
    Strong:
    id = (+LibMsg <block swearing obscenely>+);
    jump handled;
    Mild:
    id = (+LibMsg <block swearing mildly>+);
    jump handled;
    -)

    [20]

    Include (-
    Climb:
    id = (+LibMsg <block climbing>+);
    jump handled;
    Jump:
    id = (+LibMsg <block jumping>+);
    jump handled;
    Swing:
    id = (+LibMsg <block swinging>+);
    jump handled;
    WaveHands:
    id = (+LibMsg <block waving hands>+);
    jump handled;
    -)

    [21]

    Include (-
    Attack:
    id = (+LibMsg <block attacking>+);
    jump handled;
    Burn:
    id = (+LibMsg <block burning>+);
    jump handled;
    Cut:
    id = (+LibMsg <block cutting>+);
    jump handled;
    Rub:
    id = (+LibMsg <block rubbing>+);
    jump handled;
    SetTo:
    id = (+LibMsg <block setting to>+);
    jump handled;
    Tie:
    id = (+LibMsg <block tying>+);
    jump handled;

    Wave:
    switch (lm_n) {
    1: id = (+LibMsg <cannot wave something not held>+);
    2: id = (+LibMsg <report player waving things>+);
    3: id = (+LibMsg <report npc waving things>+);
    default: jump not_handled; }
    jump handled;

    Squeeze:
    switch (lm_n) {
    1: id = (+LibMsg <squeezing people>+);
    2: id = (+LibMsg <report player squeezing>+);
    3: id = (+LibMsg <report npc squeezing>+);
    default: jump not_handled; }
    jump handled;

    ThrowAt:
    switch (lm_n) {
    1: id = (+LibMsg <throw at inanimate object>+);
    2: id = (+LibMsg <block throwing at>+);
    default: jump not_handled; }
    jump handled;
    -)

    [22]

    Include (-
    Push:
    switch (lm_n) {
    1: id = (+LibMsg <cannot push something fixed in place>+);
    2: id = (+LibMsg <cannot push scenery>+);
    3: id = (+LibMsg <report player pushing>+);
    4: id = (+LibMsg <cannot push people>+);
    ! 5 does not apply to Push
    6: id = (+LibMsg <report npc pushing>+);
    default: jump not_handled; }
    jump handled;

    PushDir:
    switch (lm_n) {
    1: id = (+LibMsg <block pushing in directions>+);
    2: id = (+LibMsg <not pushed in a direction>+);
    3: id = (+LibMsg <pushed in illegal direction>+);
    default: jump not_handled; }
    jump handled;

    Pull:
    switch (lm_n) {
    1: id = (+LibMsg <cannot pull something fixed in place>+);
    2: id = (+LibMsg <cannot pull scenery>+);
    3: id = (+LibMsg <report player pulling>+);
    4: id = (+LibMsg <cannot pull people>+);
    5: id = (+LibMsg <report npc pulling>+);
    default: jump not_handled; }
    jump handled;

    Turn:
    switch (lm_n) {
    1: id = (+LibMsg <cannot turn something fixed in place>+);
    2: id = (+LibMsg <cannot turn scenery>+);
    3: id = (+LibMsg <report player turning>+);
    4: id = (+LibMsg <cannot turn people>+);
    ! 5,6 do not apply to Turn
    7: id = (+LibMsg <report npc turning>+);
    default: jump not_handled; }
    jump handled;
    -)

    [23]

    Include (-
    Answer:
    id = (+LibMsg <block answering>+);
    jump handled;
    Ask:
    id = (+LibMsg <block asking>+);
    jump handled;
    Buy:
    id = (+LibMsg <block buying>+);
    jump handled;
    Kiss:
    id = (+LibMsg <block kissing>+);
    jump handled;
    Sing:
    id = (+LibMsg <block singing>+);
    jump handled;
    Tell:
    switch (lm_n) {
    1: id = (+LibMsg <telling yourself>+);
    2: id = (+LibMsg <block telling>+);
    default: jump not_handled; }
    jump handled;
    -)

    [24]

    Include (-
    Think:
    id = (+LibMsg <block thinking>+);
    jump handled;
    Consult:
    switch (lm_n) {
    1: id = (+LibMsg <block player consulting>+);
    2: id = (+LibMsg <block npc consulting>+);
    default: jump not_handled; }
    jump handled;
    -)

    [25]

    Include (-
    Sleep:
    id = (+LibMsg <block sleeping>+);
    jump handled;
    Wait:
    switch (lm_n) {
    1: id = (+LibMsg <report player waiting>+);
    2: id = (+LibMsg <report npc waiting>+);
    default: jump not_handled; }
    jump handled;
    Wake:
    id = (+LibMsg <block waking up>+);
    jump handled;
    WakeOther:
    id = (+LibMsg <block waking other>+);
    jump handled;
    -)

    Include (-
    default:
    .not_handled;
    (+main object+) = nothing;
    rfalse;
    .handled;
        if (id == -2) {
    (+custom_internal_i6 reveal any newly visible exterior rule+)();
    }
    else {
            (+library-message-id+) = id;

    if ( (+before library messages rule+)() == 0)
    {
    (+print library message rule+)();

    if (isImplicitAction)
                { say__p = 0; }

    if (after_text ~= nothing && (+libmsg-was-empty+) == 0)
                { print (string) after_text; }

    (+after library messages rule+)();
    }
    }

    (+main object+) = nothing;
    rtrue;
    ];
    -)