Item Grouping

A forum for discussion of topics relating to the design and operation of the MUD engine itself
Post Reply [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1275: count(): Parameter must be an array or an object that implements Countable
User avatar
Site Admin
Posts: 48
Joined: 08 Jul 2014, 01:28
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1275: count(): Parameter must be an array or an object that implements Countable

Item Grouping

Post by Japheth » 19 Jan 2015, 21:04

One feature I have recently implemented in FutureMUD is item grouping. This relatively simple bit of code actually has some interesting implications for how MUDs are typically laid out and I thought that I would speak briefly on the topic.

So what are item groups? Well, simply put, they allow admins to control how groups of certain items display in room descriptions and in containers. Each item prototype may have one item group that it belongs to, and each item group may have many different forms that apply either generally or to specific rooms. When an item has an item group (and it can share that item group with other prototypes), rather than seeing the items listed in the room contents, you will see a predetermined description instead.

An example of what you might use this for was something that was hardcoded into the RPI Engine code, whereby if there were multiple furnishings (tables, chairs, beds) they would display as "There are several furnishings here", and one would have to type LOOK FURNISHINGS to see the detailed list. In a similar fashion, that could be an item group in FutureMUD. However as I mentioned, the item group can have specific forms for certain rooms - so perhaps in addition to that generic form mentioned previously, you could have that when it appears in your tavern it displays as "Numerous places to sit have been set up around the homely tavern".

You give the item group keywords, so it can be targetted by particular keywords (e.g. furnishings, tables, trees). You also set a description that people see when they look at the item group as a whole (e.g. LOOK FURNISHINGS). This is displayed first to the user, followed by a list of the items in the group.

Another good example that you might use this code for is copses of trees for example. They might be something that is used in your crafting system, but you don't want every forest room in the game to be cluttered with a list as long as your arm of items. By the same token, you don't want a forest room described as being many acres in area to contain only one tree either. With item groups, you can at least reduce the clutter in the display by grouping the trees into one line on the room description.

I mentioned earlier that each item group can have multiple forms. Each of the forms can be of different types. So far I have only implemented a "simple" type where you specify exactly what the description will be (as in the examples I mentioned above), however I intend to add more over time. Notably one that I will add would be an item group that was quantity-sensitive - e.g. one that could display different text depending on how many items in the item group were present in the room. A perfect example would be the trees mentioned earlier - perhaps the density of the copse of trees can be displayed by how many of them remain.

Hopefully this kind of thing can set your minds churning about what might be accomplished with just this simple addition. With the ability to somewhat reduce clutter in the room, the possibility of designing common spaces without the need to split it into multiple rooms becomes more likely (and FutureMUD already has code to handle large, noisy environments and give some privacy based on that). So rather than have a multi-room tavern, you're more likely to have a single room tavern with lots of furnishings and lots of opportunities to overhear or observe what people are up to. Additionally, it may make some different crafting setups more viable (or at least more visually appealing), particularly for resource gathering type crafts.

What kind of requirements might you have for this system? Are there any specific sub-types you would want that aren't mentioned here? Can you think of any innovative uses of item grouping?

Posts: 1
Joined: 16 Oct 2014, 20:21
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1275: count(): Parameter must be an array or an object that implements Countable

Re: Item Grouping

Post by crayon » 28 Apr 2015, 23:38

I think the notion of item grouping is something that's exceptionally useful, if historic experiences with the detritus and object accumulation that tends to inevitably occur on the RPI Engine games that many of us are accustomed to are something that we're likely to see on FutureMUD(s), which would seem likely in any game with a strong crafting and scavenging infrastructure supporting its economy.

Given the example of "There are several furnishings here", and assuming that's the intended effect, albeit with greater accessibility for builders and admins to provide customization, and with the potential to assign distinctive groupings for different rooms, I'm sensing that there may be, perhaps, some untapped potential for player-side customization, particularly in allowing for dynamic grouping in the interests of organization similar to what we've historically been able to do with container objects or furniture and descriptions. I've actually always hated the "There are several furnishings here", line, because it tends to decontextualize the contents and organization of the room and remove any ability to really make the environment feel realistic or immersive or truly organized, there was always a tendency for every place to just be a room with a ton of furniture and then around two dozen bins and bags with different manually-set labels.

I would love to see something along the lines of furniture/container objects that allow for dynamic character grouping by players. While I suppose this could be done with something akin to omotes with regular containers, I really like the idea of having objects be stored in different places without actually being inside of a container, codedly, necessarily, and in a way that doesn't come with something generic and dull like: 'There is a pile of crafting stuff here.' For example, if you have a craft that seals a letter, perhaps you might keep the seal, wax, ink, and paper objects required for it at a desk object group, which may in turn have sub-containers in the form of drawers within it. Or you could have a craft to scribe a book that requires an original copy of the book, pile of paper, and ink, which may require you to take a book from your bookcase object grouping, add it to your desk grouping, and then use the ink and paper from there. I would really like to see some sort of position functionality that allows your character to place themselves at one grouping or furniture item or another, and have it only target objects that are at that grouping for crafting purposes. I just see this being a way to really make room/object organization beautiful and to eliminate a lot of the messy clutter or generic ugliness problems we've seen before. It's probably totally doable using other coded functionalities, or with adjustments to crafting, but I've always found that sort of organizational system to be more appealing for immersion than 'Here is a bunch of this type of stuff', and 'Here is a bunch of some other type of stuff'.

I'd really like to walk into a room and see something like:

This is Crayon's Office
It's an office and such. It's painted colors. There's a window. Etc.

A heavy oak desk is basking in what light breaks through yonder window.
A row of bookcases is against the western wall.
A pile of coloring books and crayons sits on the carpet.

look desk
This is a heavy oak desk. It has drawers and stuff.
a black writing pad
a snazzy metal rollerball pen
a roll of stamps
a drawer

look desk drawer
This is a drawer.
much liquor, such drunk

look pile
A big ol' heap of junk.
(42) a coloring book
(8) a box of crayons

Or something to that effect, but entirely customizable at the player's behest. It would probably have to be fairly robust to account for: 1) singleton container-furniture that may contain other containers (eg. the desk/drawer), 2) groups of containers or container furniture (eg. the bookcases), 3) loose piles of random assorted stuff (eg. the pile). It would also be pretty beautiful in the sense that then the objects in those open groupings would be subject to omotes, as well as accessibility for crafting etc.

User avatar
Site Admin
Posts: 48
Joined: 08 Jul 2014, 01:28
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1275: count(): Parameter must be an array or an object that implements Countable

Re: Item Grouping

Post by Japheth » 30 Apr 2015, 22:50

Actually what you are describing with your impromptu item groups is what I intend to accomplish with a planned functionality I call bundling. A bundle is effectively an impromptu container where you can bundle any items together that dynamically describes its contents (I suppose I will now add "allowing the player to describe the contents of the bundle" to the design there as well).

So for instance say you needed to pick up a dozen various items to carry around, which realistically a person could do, piling them up in their arms. In a standard hands-based inventory you'd need to put them in a container or be limited to just 2 items really. I intend for it to be the case that you can just bundle all the items into an impromptu item, pick up the bundle, and then get items from the bundle as needed.

This is something that I see putting in the short term, probably within release + 1 month.

Posts: 21
Joined: 21 Jul 2014, 03:53
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1275: count(): Parameter must be an array or an object that implements Countable

Re: Item Grouping

Post by Methuselah » 04 May 2015, 12:38

The bundling and player-controlled versions of these things is wonderful. I wrote a few progs for Frigga around 4 months ago on SoI that would allow her to bundle cooked items on to a plate or trencher (a smallish loaf of bread). The calories, weight and costs from the initial ingredients would all pass to the final plate and in the end, the player could assign a custom sdesc and ldesc. The full desc actually would append each added item so each food item retained its full description in the final product.

Some of the final products produced would be:

A plate of liver and onions. (Combining two objects, liver and onions).
A Philly Cheese Steak Sandwich (Combining beef, onions, green peppers, cheese and a trencher)

This allows the trusted user to provide some extremely fun objects for people to interact with. I was afraid that folks would cheat the system if I allowed them to customize these descs, but with only allowing them to customize the sdesc and ldesc and dynamically creating the full description it seems to be enough oversight to make things run smoothly.

Of course it can still be abused, but that's why we limit who can do what.


On the idea of dynamic grouping that you talk about, Japheth, I really love the idea. Tool groups for crafters, utensils for cooks, etc... It's lovely.

Will there be default groups that show up automatically? i.e. If I own a shop and I drop three hammers, a saw, and a plane on the ground will they automatically consolidate in to a 'group of tools'? I like this idea, very much.

Post Reply
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1275: count(): Parameter must be an array or an object that implements Countable
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1275: count(): Parameter must be an array or an object that implements Countable