method call needs obj reference in thing.t (adv3Lite)

I believe there is an error in the verify() method of dobjFor(GoTo) in thing.t.

In the line if(isIn(gActor.getOutermostRoom)) the isIn method call is missing an object reference.

I am unable to change the illogicalNow message unless I first change this line (6963 in my library)…

            if(isIn(gActor.getOutermostRoom))

to

            if(gActor.isIn(gActor.getOutermostRoom))

When I make that change, my code works as expected.

Jerry

Your proposed correction cannot possibly be correct, since in the statement:

if(gActor.isIn(gActor.getOutermostRoom))

The condition must always be true, and the test can never fail.

I’m pretty confident that what’s currently in the library is what I meant, and is correct. In the statement:

if(isIn(gActor.getOutermostRoom))

The object reference isn’t missing, it’s implied as self; i.e. the above statement is equivalent to:

if(self.isIn(gActor.getOutermostRoom))

Which accords with the comment in the code that comes immediately before it.

Can you be more explicit about what you’re trying to do and in what way it isn’t working?

Ah, well, um…oops. False alarm.

It is now working, with the original library code.

For the record, here’s what I was trying to achieve:

Harry goes to the airport, where Mike is waiting with a ticket already bought for Harry. They meet at the ticket counter. Since Harry doesn’t have to buy a ticket, the counter is just scenery, defined as Decoration. Any attempt to do anything with it gets the notImportMsg text.

Except, if Harry tries to go to the counter, I want a specific message that says his ticket is already taken care of.

Here’s what happens in the transcript…

I tried changing the illogicalNow text in dobjFor(GoTo) in the ticket counter object and could not make it work. I set break points in verify() and in check() and in action() and nothing happened, until I made the change in thing.t. Once i changed the library code, it worked.

Now, after reading your reply, I reverted back to the original library code and…it still works.

So, false alarm, sorry about that.

Jerry

PS—also for the record, here’s the code…

#charset "us-ascii"

#include <tads.h>
#include "advlite.h"

versionInfo: GameID
    IFID = '445C38A3-AD1B-4729-957A-F584600DE5C1'
    name = 'test'
    byline = 'by Jerry Ford'
    htmlByline = 'by <a href="mailto:jerry.o.ford@gmail.com">
                  Jerry Ford</a>'
    version = '1'
    authorEmail = 'Jerry Ford <jerry.o.ford@gmail.com>'
    desc = 'Testing illogicalNow substitution'
    htmlDesc = 'Testing illogicalNow substitution'

;

gameMain: GameMainDef
    /* the initial player character is 'harry' */
    initialPlayerChar = harry
    paraBrksBtwnSubcontents = nil
   
;

// harry, main character
harry: Actor 'Harry;;man self;him' @terminal
    ""
    globalParamName = 'harry'
    person = 3   
;

terminal: Room 'Terminal' 'terminal'
    "The terminal. <.p>"
;
+ ticketCounter: Decoration 'ticket counter;ticket;airport'
    "The ticket counter was a long structure with dozens of ticketing stations
    where one could buy tickets. <.p>"
    notImportantMsg = 'Apparently, Harry would not have to stand in line at one of the ticketing 
        stations. He just needed to talk to Mike. <.p>'
    
    dobjFor(GoTo)
    {
        verify()
        {
            illogicalNow('Harry headed for the end of the line at the ticket counter. Mike,
            waving a ticket in his hand, grabbed his arm and pulled him back. <.p>');
        }
    }
;