TADS3 Adv3: Advice on Cluttered Inventory & Listers?

To put it pretty simply, my game has too much stuff! So when the inventory command is called, it’s very cluttered. I could have less stuff in my game, but where’s the fun in that? Anyways, I’m looking for some advice on how to deal with it.

Some time ago, I opted for a tall inventory lister (as per my previous post: TADS3 Adv3: Modifying Wide/Tall Inventory Listing), which helped prevent the inventory from becoming an unfortunately long and hard to look at block of text. Now, I’ve run into an issue where the inventory list is VERY tall and has no meaningful order, so picking through it is a complete pain.

I’ve considered somehow creating category lists within the inventory lister and breaking them down by object type (ex: quest items, weapons, food, etc). Which is a task that’s a little daunting to tackle at my skill level.

Maybe something like this? That way, when the inventory fills up, things are spaced out and easy to read but still categorized? I don’t know. I don’t have an inventory over-encumbrance/limit established, so maybe that’s on me.

> i

You mumble softly and take a moment to sift through your belongings, “hm?” 

You're wearing breeches, a belt, a cowled hood, a tunic, a pair of boots, and gloves. 

You're carrying:
	
    (Quest Items) a knight's favor, a coin purse, etc.

	(Tools) a rucksack, a trug, and a fish stringer.
		
    (Fish) two froglets, and a largemouth bass.

    (Misc/Uncategorized) five deadwood, three random items, some other stuff, etc. 

>

Has anyone had a similar issue, and how have you dealt with it? Any advice?

Interesting. Seems to me a case for the “specialised holdall” I discussed elsewhere recently.

for every object type you can create an invisible, intangible and non-droppable holdall, each accepting only the specific type, and with a different “which contains” message (for the (quest items) etc. part of the reporting), and modifying the map-to-inventory action(s) with the addition of a routine which place the object in the proper holdall (checking the class of the object, for example)

Best regards from Italy,
dott. Piergiorgio.

HoldAlls are an interesting concept. Thank you for turning me on to them! After poking around that thread,I will definitely be using them down the road.

For the moment however, I managed to alter the inventory listing to achieve the example I set earlier, for anyone interested in that (using the provided lister by John Zeigler in the link, thank you!).

divTallLister: InventoryLister
    showList(pov, parent, lst, options, indent, infoTab, parentGroup) 
    {

        if (!lst.length) {
            "You are empty-handed. ";
                //or however you want to deal with empty inv
            return;
        }
        local wornObjs = lst.subset({x:x.isWornBy(gPlayerChar)}); //worn objects
        
        local questObjs = lst.subset({x:x.ofKind(QuestItem)}); //Quest Items, or whatever item type category
        
        local personalObjs = lst.subset({x:x.ofKind(PersonalBelongings)}); //My personal belongings, or whatever.
        
        lst = lst.subset({x:!x.isWornBy(gPlayerChar) && !x.ofKind(QuestItem) && !x.ofKind(PersonalBelongings)}); //everything not worn, not a quest item, not personal belongings

        if (wornObjs.length) 
        {
            local wlister = new WearingLister();
            "You're wearing ";
            wlister.showList(pov, parent, wornObjs, options & ~ListTall, indent, infoTab, parentGroup);
            ". <.p>";
        }
        
        if (questObjs.length || lst.length || personalObjs.length) //when we are not empty handed
        {
            "You're carrying: <.p>";
        }
        
        if (personalObjs.length) //first category
        {
            local pOlister = new Lister();
            "\t(Personal Belongings) ";
            pOlister.showList(pov, parent, personalObjs, options & ~ListTall, indent, infoTab, parentGroup);
            ". <.p>";
        }
        
        if (questObjs.length) //second category
        {
            local qOlister = new Lister();
            "\t(Quest Items) ";
            qOlister.showList(pov, parent, questObjs, options & ~ListTall, indent, infoTab, parentGroup);
            ". <.p>";
        }

        if (lst.length) //miscellaneous 
        {
            "\t(Misc) ";
            inherited(pov, parent, lst, options & ~ListTall, indent, infoTab, parentGroup);
            "<.p>";
        }
    }
;

Obviously, you can replace the categories with whatever - but this yields a similar result to the example I was using in my original post. The categories I used (QuestItem, PersonalBelongings) are classes that I imposed on certain objects that I wanted to list a specific way in the inventory.

The perils of 1) traveling with limited internet; and 2) devoting limited bandwidth to Review-A-Thon. I missed some TADS I might’ve helped with! I have also played with sub-categories of inventory, one similar to the paradigm you proposed above (which seems pretty elegant), and one HoldAll-adjacent where I implemented a “ledger” of assets whose primary interactions are through the ledger and hidden from the >I command. Except for ledger itself, of course.

But, I see you are in very good hands!