Adv3lite problem: property pointer required

True confession: I haven’t looked at T3 for more than a year. So tonight I thought I’d clean up a few post-Comp bug reports. And “Prom Dress” now has a fatal run-time error. The command ‘joe, follow me’ results in a “property pointer required” error on line 2299 of parser.t.

I seem to have updated the adv3lite library in November. As a result, a couple of custom code files that Eric had sent me for the game had to be deleted. That allowed the game to compile, and that’s when I discovered the new run-time error. I’m pretty darn sure this wasn’t in the comp release, because I have a full test suite that ran without a hitch, and it includes that command.

My version of parser.t appears to be the current one, In the current download from github that file is marked March 15 of 2023, and I downloaded the library in November of 2023.

Since I’m taking a short break from a different creative project, I’d kind of like to take care of this. Can anyone suggest what the source of the error might be?

1 Like

I came across the same thing when I was testing a couple of days ago. I’ve fixed it in the version I then uploaded to GitHub. I’m not sure how this bug crept in, but the fault is in line 2299 of parser.t, which should read:

cmd.action.(role.objProp) = cmd.(role.objListProp)[1].obj;

You may want to make a temporary patch. I’m planning to release an update to adv3Lite in the next week or so, which will include this fix.

2 Likes

Thanks, Eric. That works.

Now I’m encountering a nil object reference on line 7196 of thing.t. This is in response to the command ‘take coin from cage’ or ‘take coin from desk’. I’m already holding a different coin, so the parser does need to disambiguate.

1 Like

I think I managed to reproduce this, and I believe the fix is to change the offending line in thing.t from:

if(gIobj.notionalContents.indexOf(self) == nil)

to

if(gVerifyIobj.notionalContents.indexOf(self) == nil)

This seemed to work for me and it would make sense that gIboj might give a nil object reference here since I’d previously used gVerifyIobj elsewhere in the same verify() routine to avoid it.

1 Like

Thanks, Eric. I’m sorry to be such a pest, but now we’re back to the problem with ‘take coin from desk,’ only now with a different library error. Now I get a nil object reference on line 1074 of messages.t.

I can send you my full source code (which has a full test suite of 15 commands, from ‘test run1’ through ‘test run15’) if that would help.

–JA

1 Like

Oh dear! I was able to reproduce this too. I seem to have fixed it by changing line 7217 of thing.t to:

notInMsg = BMsg(not inside, '{The dobj} {is}n\'t ' + 
                    (gIobj ? '{in iobj}.' : '{1}.'), gVerifyIobj.objInName)

It’s possible that the line number in your copy of thing.t may be slightly different, but it’s the definition of notInMsg that you need to change.

I’ll incorporate this into the library after checking again tomorrow.

(In case you’re interested, the problem here is that the TakeFrom action needs to run verify routines for both the dobj and the iobj, and one has to come before the other, but each needs to know the outcome of the other to make an informed decision, so the code ends up trying to reference iobj before iobj is known. The macro gVerifyIobj tries to supply a best guess at what iobj will turn out to be is iobj is still nil).

1 Like

Thanks, Eric. I think I’m seeing the end of the tunnel now. My ‘test fullrun’ routine now runs without a hitch, producing the final happy ending and the full score count.

Now I can roll up my sleeves and deal with a couple of bug reports.

At the moment I have a player who is sending me emails about his progress through the game. It’s actually kind of inspiring. He’s playing without the hints, and making good progress.

The game is truly massive. I don’t know how I ever had the courage to finish it.

–JA

3 Likes