Self-explanatory. What's happening here is that the WriteAfterEntry routine uses child() to determine whether to write "(open)" or not for an open or transparent container. For container with only concealed items, the message is suppressed, but the routine then correctly refuses to write a contents list, so the end result is nothing gets printed.
Steps to reproduce :
Home is a room.
The foo and the bar are containers in Home.
The baz is in the bar.
For deciding the concealed possessions of a container: if the particular possession is the baz, yes.
Additional information :
Proposed fix: there's a visible-child check in WriteAfterEntry already. Simply moving it to before the start of the activity gives us the child_count, which can then substitute for the child() check:
[ WriteAfterEntry o depth
p recurse_flag parenth_flag eldest_child child_count combo;
inventory_stage = 2;
child_count = 0;
eldest_child = nothing;
objectloop (p in o)
if ((c_style & CONCEAL_BIT == 0) || (ConcealedFromLists(p) == false))
if (p has list_filter_permits)
{
child_count++;
if (eldest_child == nothing) eldest_child = p;
}
if (c_style & PARTINV_BIT) {
BeginActivity(PRINTING_ROOM_DESC_DETAILS_ACT, o);
if (ForActivity(PRINTING_ROOM_DESC_DETAILS_ACT, o) == false) {
combo = 0;
if (o has light && location hasnt light) combo=combo+1;
if (o has container && o hasnt open) combo=combo+2;
if ((o has container && (o has open || o has transparent))) {
if (child_count==0)
{
combo=combo+4;
}
}
if (combo) LIST_WRITER_INTERNAL_RM('A'); ! space and open bracket
switch (combo)
if (combo) LIST_WRITER_INTERNAL_RM('B'); ! close bracket
}
EndActivity(PRINTING_ROOM_DESC_DETAILS_ACT, o);
} ! end of PARTINV_BIT processing
if (c_style & FULLINV_BIT) {
BeginActivity(PRINTING_INVENTORY_DETAILS_ACT, o);
if (ForActivity(PRINTING_INVENTORY_DETAILS_ACT, o) == false) {
if (o has light && o has worn)
}
if (o has container)
if (o has openable) {
if (parenth_flag)
{
Ifdef SERIAL_COMMA; print ","; #Endif;
LIST_WRITER_INTERNAL_RM('C');
}
else LIST_WRITER_INTERNAL_RM('A', o);
if (o has open)
if (child(o)) LIST_WRITER_INTERNAL_RM('M', o);
else LIST_WRITER_INTERNAL_RM('N', o);
else
if (o has lockable && o has locked) LIST_WRITER_INTERNAL_RM('P', o);
elseLIST_WRITER_INTERNAL_RM('O', o);
parenth_flag = true;
}
else
if (child(o)==0 && o has transparent)
if (parenth_flag)
else LIST_WRITER_INTERNAL_RM('S', o);
}
recurse_flag = true;
}
if (o has container && (o has open || o has transparent)) {
if (c_style & ENGLISH_BIT) {
if (c_style & TERSE_BIT)
Reported by : Eleas
Description :
Self-explanatory. What's happening here is that the WriteAfterEntry routine uses child() to determine whether to write "(open)" or not for an open or transparent container. For container with only concealed items, the message is suppressed, but the routine then correctly refuses to write a contents list, so the end result is nothing gets printed.
Steps to reproduce :
Additional information :
Proposed fix: there's a visible-child check in WriteAfterEntry already. Simply moving it to before the start of the activity gives us the child_count, which can then substitute for the child() check:
imported from: [Mantis 2083] Containers holding concealed items do not show the " (empty)" detail text.