Inform - Support - Patches

About Patches  

Compiler  
Library  

DM4 Errata  

Issue L61017

LEAVE tries too hard
Submitted by: Andrew Merenbach     Appeared in: Library 6/10 or before     Fixed in: Library 6/11
Problem

If I'm on, let's say, a couch, in an Inform game, and I type LEAVE NOUN, where NOUN can be anything in the room, the game replies "You get off the couch." It should, should it not, reply something similar to, "You aren't inside or atop ", (the) noun, "!"? I mean, it doesn't make sense to try exiting from an object inside of which the player is NOT, right?

Solution (by Andrew Merenbach and Joe Mason)

I've added the third line below:

  [ ExitSub p;
    p=parent(player);
    if (noun ~= nothing && noun ~= p) return L__M(##Exit,4,noun);
    if (p==location || (location==thedark && p==real_location))
    {   if ((location.out_to~=0)
            || (location==thedark && real_location.out_to~=0)) <<Go out_obj>>;
        return L__M(##Exit,1);
    }
    if (p has container && p hasnt open)
        return L__M(##Exit,2,p);

    move player to parent(p);

    if (AfterRoutines()==1) rtrue;
    if (keep_silent==1) rtrue;
    L__M(##Exit,3,p); LookSub(1);
  ];

Then add entry 4 to Exit in English.h:

  Exit: switch(n)
        {   1: "But you aren't in anything at the moment.";
            2: "You can't get out of the closed ", (name) x1, ".";
            3: print "You get ";
               if (x1 has supporter) print "off "; else print "out of ";
               print_ret (the) x1, ".";
            4: print "But you aren't ";
               if (x1 has supporter) print "on "; else print "in ";
               print_ret (the) x1, ".";
        }

Also, a change to the "exit" verb's definition (I've added the third line here):

  Verb 'exit' 'out' 'outside'
       *      -> Exit
       * noun -> Exit;


Last updated 17 April 2013. This web site has not been fully supported since April 2008. Information may be out of date. This page was originally managed by Roger Firth.