can I suppress an implicit action message? (adv3Lite)

I have a marble in a sack. I want to give the marble to Sam. I say…

…and the library first does an implicit Take and displays this message…

How can I suppress that parenthetical “first trying to take…” message?

This fabricated example trivializes what is, IMO, a huge and vexing problem in an actual game scenario. I’ve encountered it several times and tried to ignore it, but I can’t hold out any longer. Is there any way short of editing a library file (which I admit would be a dumb thing to do) to suppress it?

Using the Workbench debugger, I have narrowed down to these line in the library as the culprits responsible for the message…

if(isImplicit) "<<buildImplicitActionAnnouncement(nil)>>";
They are lines 1556 and 1557 in the adv3Lite 1.0 action.t.



I should have added, I’ve complained before and Eric Eve gave me a solution, which was to modify Action…

[code]// Action
modify Action
buildImplicitActionAnnouncement(success, clearReports = true)
// if Action.showImplicitAction is set to nil, Game window will suppress
// implicit-Action text—(First taking…); see
// suppressImplicitActionReport() code, below;
return inherited(success, clearReports);

    return nil;
showImplicitAction = true


… then call these before and after the message suppression…

suppressImplicitActionReport() { Action.showImplicitAction = nil; } restoreImplicitActionReport() { Action.showImplicitAction = true; }

This solution is not working.

I have the modify code in place, and I call the suppress… and restore functions in the dobjFor() { check(){} }. and the message still shows up.

Okay, answering my own post, but…

Sometimes, brute force is the only answer.

Eric’s solution—suppressImplicitActionReport() and modify Action—does in fact work, it’s a timing issue. I was suppressing and restoring in the same check() code. But check() code gets implemented in a bizarre roundabout fashion, which means that even though I suppressed the report, the restore action also got implemented before the message actually got output to the screen, no matter where I put the restore action.

My solution, and I don’t know why this did not occur to me before given my dislike for the implicit statement, is to banish it entirely. The first room description in my game now calls the suppress function, and there is no call to the restore function anywhere in the game.

I can live without the (first trying to…) message.


To make this slightly easier for game authors, I’m adding part of this functionality to the library for the next update, though I’ve renamed the relevant Action propert to reportImplicitActions (which seems a bit clearer). To suppress implicit action reports totally in your game you’ll be able to do just this:

modify Action
    reportImplicitActions = nil

I’m also wrapping some elements of implicit action reports in BMsg() macros to make it slightly easier to customize them with a CustomMessages object.