I tend to agree with just doing it as archetypes. Then these could just go in treasure lists - thus, what shows up in the building store would be random, but maybe that adds some more interest (cool, the fountain finally showed up!). the other question which you don't address is that if players can 'request' items, how do you price them? It would seem that marble floors, for example, should be more expensive than wood, and so on. Arguably, the only thing that should be allowed as buildable objects would largely be floors and walls. There is no reason to allow chairs, swords, food, etc, because those are things that can be physically carried by the character - that can't happen with the wall (there may be a limited extension to what I say, but basically it should be limited). That said, there is find_archetype_by_object_name() which takes the human name and converts the archetype. However, not all object (human) names are unique. Thus, there could be 5 archetypes that match 'wall' - the code basically returns the first it finds. So such a system could very well prevent you from selecting all the wall types.