objectcreationinform7

Need help Creating new objects in inform7


Very new to Inform7 and it's style. I have looked through the provided docs and some internet browsing has yielded nothing for me... this is a simplistic version of what i'm looking for. I want to write something like this:

breakroom is a room. "A run of the mill breakroom."

soda pop is a kind of thing. "A refreshing soda pop."

soda machine is in the breakroom.  dispense button is on the soda machine.

instead of pushing dispense button:
    say "A soda can dispenses".
    create a soda pop (called pop) in the breakroom.

"create a soda pop (called pop) in the breakroom." is not a valid command obviously, but I hope it conveys what I want to do. I don't know how to instantiate objects at runtime. Can this be done reasonably? Any help would be appreciated. I am aware that there's not a big following here for Inform but I figure i'd give it a shot.


Solution

  • Inform doesn't handle dynamic objects very well, but they're often not the best approach anyway. Section 10.3. Dispensers and Supplies of Small Objects in the manual may be helpful.

    I think the best model for this is a physical one: create a limited supply of cans in the machine. For example:

    Breakroom is a room. "A run of the mill breakroom."
    
    A soda pop is a kind of thing.  The description is "A refreshing soda pop."
    
    The soda machine is in the breakroom.  It is fixed in place and transparent.
    The description is "Just an average soda machine, with a large dispense
    button."
    
    There are three soda pops in the soda machine.
    
    The dispense button is a part of the soda machine.
    
    Instead of pushing the dispense button:
            if a soda pop (called the can) is in the soda machine:
                    move the can to the breakroom;
                    say "A soda can dispenses.";
            otherwise:
                    say "The machine is empty, so nothing happens.".
    
    Test me with "look / x machine / push button / look / push button /
    push button / push button / look".
    

    (make the machine opaque rather than transparent if you prefer!). In the above, I've also tweaked the description of a soda pop -- if you just say "Blah" rather than The description is "Blah" after an object definition, you set the initial description (printed as part of the room description) rather than the "examine" description, which I don't think is what you want here -- and I've made the button a "part" of the machine, rather than a separate object.

    The result:

    Welcome
    An Interactive Fiction
    Release 1 / Serial number 110324 / Inform 7 build 6G60 (I6/v6.32 lib 6/12N) SD
    
    Breakroom
    A run of the mill breakroom.
    
    You can see a soda machine (in which are three soda pops) here.
    
    >test me
    (Testing.)
    
    >[1] look
    Breakroom
    A run of the mill breakroom.
    
    You can see a soda machine (in which are three soda pops) here.
    
    >[2] x machine
    Just an average soda machine, with a large dispense button.
    
    In the soda machine are three soda pops.
    
    >[3] push button
    A soda can dispenses.
    
    >[4] look
    Breakroom
    A run of the mill breakroom.
    
    You can see a soda pop and a soda machine (in which are two soda pops) here.
    
    >[5] push button
    A soda can dispenses.
    
    >[6] push button
    A soda can dispenses.
    
    >[7] push button
    The machine is empty, so nothing happens.
    
    >[8] look
    Breakroom
    A run of the mill breakroom.
    
    You can see three soda pops and a soda machine (empty) here.
    
    >